summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Davis <ryand-ruby@zenspider.com>2022-08-17 23:10:10 -0800
committerRyan Davis <ryand-ruby@zenspider.com>2022-08-17 23:10:10 -0800
commit696fd98ffb3eeae166d11c24396ef8c3367ad966 (patch)
treec051c7b0258df082966bb329d819c690112a672b
parent365edd63a3eb85b74f003d0a5f12286ab2d4d97d (diff)
downloadhoe-696fd98ffb3eeae166d11c24396ef8c3367ad966.tar.gz
+ Added otp_command config option for OTP auth on gem push.
This sets $GEM_HOST_OTP_CODE to the output of the command. eg: otp_command: "op item get rubygems.org --otp" This will be used by rake release if defined. [git-p4: depot-paths = "//src/hoe/dev/": change = 13514]
-rw-r--r--lib/hoe/gemcutter.rb28
-rw-r--r--test/test_hoe_gemcutter.rb25
2 files changed, 47 insertions, 6 deletions
diff --git a/lib/hoe/gemcutter.rb b/lib/hoe/gemcutter.rb
index 08ccbb8..851d11c 100644
--- a/lib/hoe/gemcutter.rb
+++ b/lib/hoe/gemcutter.rb
@@ -1,8 +1,29 @@
require "rake"
+##
+# Gemcutter plugin for hoe.
+#
+# === Extra Configuration Options:
+#
+# otp_command:: Shell command to run to populate GEM_HOST_OTP_CODE.
+
module Hoe::Gemcutter
include Rake::DSL if defined?(Rake::DSL)
+ Hoe::DEFAULT_CONFIG["otp_command"] = false
+
+ def gem_push gems
+ with_config do |config, _|
+ otp_command = config["otp_command"]
+
+ ENV["GEM_HOST_OTP_CODE"] = `#{otp_command}`.chomp if otp_command
+ end
+
+ gems.each do |g|
+ sh Gem.ruby, "-S", "gem", "push", g
+ end
+ end
+
##
# Define release_to_gemcutter and attach it to the release task.
@@ -11,11 +32,8 @@ module Hoe::Gemcutter
task :release_to_gemcutter => [:clean, :package, :release_sanity] do
pkg = "pkg/#{spec.name}-#{spec.version}"
gems = Dir["#{pkg}*.gem"]
- gems.each do |g|
- # TODO - once gemcutter supports command invocation, use it.
- # We could still fail here due to --format executable
- sh Gem.ruby, "-S", "gem", "push", g
- end
+
+ gem_push gems
end
task :release_to => :release_to_gemcutter
diff --git a/test/test_hoe_gemcutter.rb b/test/test_hoe_gemcutter.rb
index 82d2b7c..f7ca4c7 100644
--- a/test/test_hoe_gemcutter.rb
+++ b/test/test_hoe_gemcutter.rb
@@ -11,5 +11,28 @@ class TestHoeGemcutter < Minitest::Test
assert Rake::Task[:release_to].prerequisites.include?("release_to_gemcutter")
end
- # TODO add tests for push once using Gem::Commands::Push (waiting on rubygems release)
+ def sh *cmd_args
+ @cmd_args = cmd_args
+ end
+
+ def with_config
+ yield({ "otp_command" => "echo my_otp_code"}, "~/.hoerc")
+ end
+
+ def save_env
+ orig_env = ENV.to_h
+ yield
+ ensure
+ ENV.replace orig_env
+ end
+
+ def test_gem_push
+ save_env do
+ gem_push %w[pkg/blah-123.gem]
+
+ exp = %W[#{Gem.ruby} -S gem push pkg/blah-123.gem]
+ assert_equal exp, @cmd_args
+ assert_equal "my_otp_code", ENV["GEM_HOST_OTP_CODE"]
+ end
+ end
end