Skip to content

Instantly share code, notes, and snippets.

@ezekg
Forked from alexrudall/#Rake Task to release KeyGen.sh gem.md
Last active June 17, 2024 16:34
Show Gist options
  • Save ezekg/e83d36600e4a09cc34506577dbfcd343 to your computer and use it in GitHub Desktop.
Save ezekg/e83d36600e4a09cc34506577dbfcd343 to your computer and use it in GitHub Desktop.
Rake task to publish a new version of a private Rubygem on Keygen. By @alexrudall.

Ready-made rake task to release new version of private gem on keygen.sh!

How to: just copy keygen.rake into your project, replace your-gem-name with the name of your gem, and run!

rake keygen:publish[your-gem-name,0.1.1]
namespace :keygen do
desc "Build and release a new version of the gem like so: `rake 'keygen:publish[your-gem-name,0.1.1]'`"
task :publish, %i[name version] => :environment do |t, args|
name = args[:name]
version = args[:version]
# Build the gem
sh "gem build #{name}.gemspec --output=build/gems/#{name}-#{version}.gem"
sh "gem generate_index --directory build/"
# Tag the release in git
sh "git tag v#{version}"
sh "git push origin v#{version}"
# Create a new version in Keygen
sh "keygen new --version '#{version}'"
# Upload the gem and build files to Keygen
sh "keygen upload build/gems/#{name}-#{version}.gem --filename 'gems/#{name}-#{version}.gem' --release '#{version}'"
%w[
latest_specs.4.8
latest_specs.4.8.gz
prerelease_specs.4.8
prerelease_specs.4.8.gz
specs.4.8
specs.4.8.gz
].each do |file|
sh "keygen upload build/#{file} --filetype '' --release '#{version}'"
end
# Upload the quick gemspec to Keygen
sh "keygen upload build/quick/Marshal.4.8/#{name}-#{version}.gemspec.rz --filename 'quick/Marshal.4.8/#{name}-#{version}.gemspec.rz' --release '#{version}'"
# Publish the release in Keygen
sh "keygen publish --release '#{version}'"
# Untag the old 'latest' release in Keygen (allow to fail if it doesn't exist yet)
sh "keygen untag gems --release 'gems'" rescue nil
# Tag the new release in Keygen
sh "keygen tag gems --release '#{version}'"
end
end
##
# Instruct your users to install via their Gemfile like below.
#
# NOTE: Make sure your policy has an authentication strategy of `LICENSE`, otherwise
# license key authentication won't work.
#
# See: https://keygen.sh/docs/api/policies/#policies-object-attrs-authenticationStrategy
#
source "https://license:#{ENV.fetch('EXAMPLE_LICENSE_KEY')}@get.keygen.sh/account_name_here/gems" do
gem 'gem_name_here', '~> 1.0'
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment