bundler-push-host-key 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: bbd344862c377182985d31e5318a7059d813d3b0d0a52ac0b34a2de10a422a02
4
+ data.tar.gz: cfcfd8ca9c9083de7bd366c1e601eb8e3ac1e0b3253000956f35210c75f3abe3
5
+ SHA512:
6
+ metadata.gz: 8b2aacc143a0c023b8268ce6841eb7ab0ecab338659f678bbac35e0aae5fcbd8b0d2bb3029139ec4080c873f3be79dd5788a997cee2a9f9474db481a978e3f9e
7
+ data.tar.gz: cedd1cb486de90be3b47a3a4ecdcecd3c91bcd4f982ad8592d3ab95a2c862346201b1937c6887d0f1043293d6b8b895de37525887d9307e36edbc5056b8fd80a
@@ -0,0 +1,2 @@
1
+ /.idea
2
+ /pkg
@@ -0,0 +1,40 @@
1
+ # bundle-push-host-key
2
+
3
+ This gem adds support for multiple keys when pushing gems using the bundler rake tasks
4
+
5
+ ## Usage
6
+
7
+ * In the Rakefile, replace `require 'bundler/gem_tasks'` with `require 'bundler/gem_tasks/push_host_key'`
8
+ * In `.gem/credentials add a new credential with your gemserver's hostname (only the hostname!) as key`:
9
+
10
+ ---
11
+ # Official rubygems API key entry
12
+ :rubygems_api_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
13
+
14
+ # Your custom API key for gemserver.example.net
15
+ :gemserver.example.net: <API Key>
16
+
17
+ # Basic Authentication instead of API key
18
+ :gemserver.example.net: "Basic dXNlcjpwYXNzCg=="
19
+
20
+ * In your gemspecs, set the `allowed_push_host`:
21
+
22
+ Gem::Specification.new do |gem|
23
+ # ...
24
+ gem.metadata = {
25
+ 'allowed_push_host' => 'https://gemserver.example.com',
26
+ }
27
+ # ...
28
+ end
29
+
30
+ ## Notes
31
+
32
+ This gem uses the `--key` feature of the `gem` command.
33
+ When pushing with the `gem` command directly, you can specify `--key gemserver.example.net`
34
+
35
+ Afaik, the `gem` command has no official way to authenticate when loading gems.
36
+ In Bundler you can set the basic auth credentials with this command: `bundle config gemserver.example.net user:pass`
37
+
38
+ If there is a better, official way to have multiple private gemserver with individual credentials
39
+ and not only push-authentication, I will happily drop this gem.
40
+
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH << File.join(__dir__, 'lib')
2
+
3
+ require "rake/testtask"
4
+ require 'bundler/gem_tasks/push_host_key'
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ t.libs << "test"
8
+ t.libs << "lib"
9
+ t.test_files = FileList["test/test_*.rb"]
10
+ end
@@ -0,0 +1,11 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'bundler-push-host-key'
3
+ s.authors = ['Christian Haase']
4
+
5
+ s.version = '1.0.0'
6
+ s.date = '2020-07-03'
7
+ s.summary = 'Use the correct api key when pushing gems'
8
+ s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
9
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
10
+ s.require_paths = ['lib']
11
+ end
@@ -0,0 +1,4 @@
1
+ require 'bundler/gem_helper'
2
+ require 'bundler_push_host_key'
3
+
4
+ Bundler::GemHelper.prepend(BundlerPushHostKey)
@@ -0,0 +1,4 @@
1
+ require 'bundler/gem_helper/push_host_key'
2
+ require 'bundler/gem_tasks'
3
+
4
+
@@ -0,0 +1,10 @@
1
+ require 'uri'
2
+
3
+ module BundlerPushHostKey
4
+ def gem_key
5
+ uri = URI.parse(gem_push_host)
6
+ uri = URI.parse("http://#{gem_push_host}") if uri.host.nil?
7
+
8
+ uri.host == 'rubygems.org' ? nil : uri.host
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ #!/bin/sh
2
+
3
+ set -e
4
+
5
+ echo "$@" > "$GEM_COMMANDLINE"
@@ -0,0 +1,10 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'gem'
3
+ s.authors = ['Somebody else']
4
+
5
+ s.version = '1.0.0'
6
+ s.date = '2020-07-03'
7
+ s.summary = 'A Gem'
8
+ s.files = []
9
+ s.require_paths = []
10
+ end
@@ -0,0 +1,14 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'gem'
3
+ s.authors = ['Somebody else']
4
+
5
+ s.metadata = {
6
+ 'allowed_push_host' => 'http://example.net',
7
+ }
8
+
9
+ s.version = '1.0.0'
10
+ s.date = '2020-07-03'
11
+ s.summary = 'A Gem'
12
+ s.files = []
13
+ s.require_paths = []
14
+ end
@@ -0,0 +1,50 @@
1
+ $LOAD_PATH << File.join(__dir__, '..', 'lib')
2
+ require 'minitest/autorun'
3
+ require 'rake'
4
+ require 'tempfile'
5
+ require 'bundler/gem_helper'
6
+ require 'bundler/gem_helper/push_host_key'
7
+
8
+
9
+ class TestPushHostKey < Minitest::Test
10
+ def setup
11
+ @orig_path = ENV['PATH']
12
+ ENV['PATH'] = File.join(__dir__, 'bin')
13
+
14
+ Tempfile.new.tap { |t| @gem_commandline_path = t.path }.close
15
+ ENV['GEM_COMMANDLINE'] = @gem_commandline_path
16
+ end
17
+
18
+ def teardown
19
+ Rake.application = nil
20
+ Bundler::GemHelper.instance = nil
21
+ ENV['PATH'] = @orig_path
22
+ ENV['GEM_COMMANDLINE'] = nil
23
+ File.unlink(@gem_commandline_path)
24
+ end
25
+
26
+ def gem_commandline
27
+ File.read(@gem_commandline_path).strip
28
+ end
29
+
30
+ def push_testgem(name)
31
+ Bundler::GemHelper.install_tasks(dir: File.join(__dir__, 'gem'), name: name)
32
+ Bundler.ui = nil
33
+
34
+ Rake::Task['release:rubygem_push'].reenable
35
+ Rake::Task['release:rubygem_push'].execute
36
+ end
37
+
38
+ def test_push_to_custom_host
39
+ push_testgem('example-net-allowed')
40
+ assert_includes(gem_commandline, '--key example.net')
41
+ assert_includes(gem_commandline, '--host http://example.net')
42
+ end
43
+
44
+ def test_push_to_rubygems
45
+ push_testgem('all-allowed')
46
+
47
+ refute_includes(gem_commandline, '--host')
48
+ refute_includes(gem_commandline, '--key')
49
+ end
50
+ end
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bundler-push-host-key
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Christian Haase
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-07-03 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - ".gitignore"
20
+ - README.md
21
+ - Rakefile
22
+ - bundler-push-host-key.gemspec
23
+ - lib/bundler/gem_helper/push_host_key.rb
24
+ - lib/bundler/gem_tasks/push_host_key.rb
25
+ - lib/bundler_push_host_key.rb
26
+ - test/bin/gem
27
+ - test/gem/all-allowed.gemspec
28
+ - test/gem/example-net-allowed.gemspec
29
+ - test/test_push_host_key.rb
30
+ homepage:
31
+ licenses: []
32
+ metadata: {}
33
+ post_install_message:
34
+ rdoc_options: []
35
+ require_paths:
36
+ - lib
37
+ required_ruby_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ requirements: []
48
+ rubygems_version: 3.0.8
49
+ signing_key:
50
+ specification_version: 4
51
+ summary: Use the correct api key when pushing gems
52
+ test_files:
53
+ - test/bin/gem
54
+ - test/gem/all-allowed.gemspec
55
+ - test/gem/example-net-allowed.gemspec
56
+ - test/test_push_host_key.rb