rake_gpg 0.17.0.pre.4 → 0.17.0.pre.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 77554eb93b719c4e67c8591ce5d331ea61839723377aeb836686f70f80af54f0
4
- data.tar.gz: b403d88300d9fb899ce00751224bccf37f5bf5b4e50724d39858b60e01e75028
3
+ metadata.gz: 7e6b8c2a2b2d2780f22aadb8ef10441a6748e9250f6c8ba511d1dfbd193e14c6
4
+ data.tar.gz: 80d6cc4c0ecaa5725f49f67fc318c31efb15183bc687badb215ce235d14b270d
5
5
  SHA512:
6
- metadata.gz: eca8b5d4e1a3cf92b3e662159cd5342c9e944df0ac0f603ccbdd0c360be36bd646a562e381bfc6eefb20b6741b77f4b78021fdf8fef1cf9c32e00518e4403323
7
- data.tar.gz: 7c5c4e85948fb07d05a8b650256c7919217db61709d90ff332f16f2ba4277f844fa04194ad7e13572a711958313948527ccf25fa5d4c205958664a409a1b1cf2
6
+ metadata.gz: 38385f52fcfe168dead379ee4f808484bd182b47ceac2a5f24b1044c4e86b851d50681cf600692d8097764a2d795e1f0c35899f7756bc3bf50271ff24504ff41
7
+ data.tar.gz: f713f5c3612073b2d90f23806579efee8389e2023d6267bcb32cef0d98e9b54536fb0e0d16121937be1a4100dcaf8b33726b9aec8805574ded974255bb4bd50a
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in rake_leiningen.gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rake_gpg (0.17.0.pre.4)
4
+ rake_gpg (0.17.0.pre.5)
5
5
  rake_factory (~> 0.23)
6
6
  ruby_gpg2 (~> 0.6)
7
7
 
@@ -15,6 +15,7 @@ GEM
15
15
  tzinfo (~> 2.0)
16
16
  addressable (2.8.0)
17
17
  public_suffix (>= 2.0.2, < 5.0)
18
+ ast (2.4.2)
18
19
  colored2 (3.1.2)
19
20
  concurrent-ruby (1.1.9)
20
21
  diff-lcs (1.5.0)
@@ -58,7 +59,11 @@ GEM
58
59
  faraday (>= 0.9)
59
60
  sawyer (~> 0.8.0, >= 0.5.3)
60
61
  open4 (1.3.4)
62
+ parallel (1.22.1)
63
+ parser (3.1.1.0)
64
+ ast (~> 2.4.1)
61
65
  public_suffix (4.0.6)
66
+ rainbow (3.1.1)
62
67
  rake (13.0.6)
63
68
  rake_circle_ci (0.9.0)
64
69
  colored2 (~> 3.1)
@@ -77,6 +82,8 @@ GEM
77
82
  colored2 (~> 3.1)
78
83
  rake_factory (~> 0.23)
79
84
  sshkey (~> 2.0)
85
+ regexp_parser (2.2.1)
86
+ rexml (3.2.5)
80
87
  rspec (3.11.0)
81
88
  rspec-core (~> 3.11.0)
82
89
  rspec-expectations (~> 3.11.0)
@@ -90,13 +97,28 @@ GEM
90
97
  diff-lcs (>= 1.2.0, < 2.0)
91
98
  rspec-support (~> 3.11.0)
92
99
  rspec-support (3.11.0)
100
+ rubocop (1.26.1)
101
+ parallel (~> 1.10)
102
+ parser (>= 3.1.0.0)
103
+ rainbow (>= 2.2.2, < 4.0)
104
+ regexp_parser (>= 1.8, < 3.0)
105
+ rexml
106
+ rubocop-ast (>= 1.16.0, < 2.0)
107
+ ruby-progressbar (~> 1.7)
108
+ unicode-display_width (>= 1.4.0, < 3.0)
109
+ rubocop-ast (1.16.0)
110
+ parser (>= 3.1.1.0)
111
+ rubocop-rake (0.6.0)
112
+ rubocop (~> 1.0)
113
+ rubocop-rspec (2.9.0)
114
+ rubocop (~> 1.19)
115
+ ruby-progressbar (1.11.0)
93
116
  ruby2_keywords (0.0.5)
94
117
  ruby_gpg2 (0.8.0)
95
118
  lino (>= 1.5)
96
119
  sawyer (0.8.2)
97
120
  addressable (>= 2.3.5)
98
121
  faraday (> 0.8, < 2.0)
99
- semantic (1.6.1)
100
122
  simplecov (0.21.2)
101
123
  docile (~> 1.1)
102
124
  simplecov-html (~> 0.11)
@@ -106,6 +128,7 @@ GEM
106
128
  sshkey (2.0.0)
107
129
  tzinfo (2.0.4)
108
130
  concurrent-ruby (~> 1.0)
131
+ unicode-display_width (2.1.0)
109
132
 
110
133
  PLATFORMS
111
134
  ruby
@@ -123,8 +146,10 @@ DEPENDENCIES
123
146
  rake_gpg!
124
147
  rake_ssh
125
148
  rspec
126
- semantic
149
+ rubocop
150
+ rubocop-rake
151
+ rubocop-rspec
127
152
  simplecov
128
153
 
129
154
  BUNDLED WITH
130
- 2.3.9
155
+ 2.3.11
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
  require 'rake_circle_ci'
3
5
  require 'rake_github'
@@ -5,17 +7,20 @@ require 'rake_ssh'
5
7
  require 'rake_gpg'
6
8
  require 'securerandom'
7
9
  require 'rspec/core/rake_task'
10
+ require 'rubocop/rake_task'
8
11
 
9
- task :default => :spec
10
-
11
- RSpec::Core::RakeTask.new(:spec)
12
+ task default: %i[
13
+ library:fix
14
+ test:unit
15
+ ]
12
16
 
13
17
  namespace :encryption do
14
18
  namespace :passphrase do
19
+ desc 'Generate encryption passphrase for CI GPG key'
15
20
  task :generate do
16
- File.open('config/secrets/ci/encryption.passphrase', 'w') do |f|
17
- f.write(SecureRandom.base64(36))
18
- end
21
+ FileUtils.mkdir_p('config/secrets/ci/')
22
+ File.write('config/secrets/ci/encryption.passphrase',
23
+ SecureRandom.base64(36))
19
24
  end
20
25
  end
21
26
  end
@@ -23,85 +28,102 @@ end
23
28
  namespace :keys do
24
29
  namespace :deploy do
25
30
  RakeSSH.define_key_tasks(
26
- path: 'config/secrets/ci/',
27
- comment: 'maintainers@infrablocks.io')
31
+ path: 'config/secrets/ci/',
32
+ comment: 'maintainers@infrablocks.io'
33
+ )
28
34
  end
29
35
 
30
36
  namespace :gpg do
31
37
  RakeGPG.define_generate_key_task(
32
- output_directory: 'config/secrets/ci',
33
- name_prefix: 'gpg',
34
- owner_name: 'InfraBlocks Maintainers',
35
- owner_email: 'maintainers@infrablocks.io',
36
- owner_comment: 'rake_gpg CI Key')
38
+ output_directory: 'config/secrets/ci',
39
+ name_prefix: 'gpg',
40
+ owner_name: 'InfraBlocks Maintainers',
41
+ owner_email: 'maintainers@infrablocks.io',
42
+ owner_comment: 'rake_gpg CI Key'
43
+ )
37
44
  end
38
45
  end
39
46
 
47
+ RuboCop::RakeTask.new
48
+
49
+ namespace :library do
50
+ desc 'Run all checks of the library'
51
+ task check: [:rubocop]
52
+
53
+ desc 'Attempt to automatically fix issues with the library'
54
+ task fix: [:'rubocop:auto_correct']
55
+ end
56
+
57
+ namespace :test do
58
+ RSpec::Core::RakeTask.new(:unit)
59
+ end
60
+
40
61
  RakeCircleCI.define_project_tasks(
41
- namespace: :circle_ci,
42
- project_slug: 'github/infrablocks/rake_gpg'
62
+ namespace: :circle_ci,
63
+ project_slug: 'github/infrablocks/rake_gpg'
43
64
  ) do |t|
44
65
  circle_ci_config =
45
- YAML.load_file('config/secrets/circle_ci/config.yaml')
66
+ YAML.load_file('config/secrets/circle_ci/config.yaml')
46
67
 
47
- t.api_token = circle_ci_config["circle_ci_api_token"]
68
+ t.api_token = circle_ci_config['circle_ci_api_token']
48
69
  t.environment_variables = {
49
- ENCRYPTION_PASSPHRASE:
50
- File.read('config/secrets/ci/encryption.passphrase')
51
- .chomp
70
+ ENCRYPTION_PASSPHRASE:
71
+ File.read('config/secrets/ci/encryption.passphrase')
72
+ .chomp
52
73
  }
53
74
  t.checkout_keys = []
54
75
  t.ssh_keys = [
55
- {
56
- hostname: "github.com",
57
- private_key: File.read('config/secrets/ci/ssh.private')
58
- }
76
+ {
77
+ hostname: 'github.com',
78
+ private_key: File.read('config/secrets/ci/ssh.private')
79
+ }
59
80
  ]
60
81
  end
61
82
 
62
83
  RakeGithub.define_repository_tasks(
63
- namespace: :github,
64
- repository: 'infrablocks/rake_gpg',
84
+ namespace: :github,
85
+ repository: 'infrablocks/rake_gpg'
65
86
  ) do |t, args|
66
87
  github_config =
67
- YAML.load_file('config/secrets/github/config.yaml')
88
+ YAML.load_file('config/secrets/github/config.yaml')
68
89
 
69
- t.access_token = github_config["github_personal_access_token"]
90
+ t.access_token = github_config['github_personal_access_token']
70
91
  t.deploy_keys = [
71
- {
72
- title: 'CircleCI',
73
- public_key: File.read('config/secrets/ci/ssh.public')
74
- }
92
+ {
93
+ title: 'CircleCI',
94
+ public_key: File.read('config/secrets/ci/ssh.public')
95
+ }
75
96
  ]
76
97
  t.branch_name = args.branch_name
77
98
  t.commit_message = args.commit_message
78
99
  end
79
100
 
80
101
  namespace :pipeline do
81
- task :prepare => [
82
- :'circle_ci:project:follow',
83
- :'circle_ci:env_vars:ensure',
84
- :'circle_ci:checkout_keys:ensure',
85
- :'circle_ci:ssh_keys:ensure',
86
- :'github:deploy_keys:ensure'
102
+ desc 'Prepare CircleCI Pipeline'
103
+ task prepare: %i[
104
+ circle_ci:project:follow
105
+ circle_ci:env_vars:ensure
106
+ circle_ci:checkout_keys:ensure
107
+ circle_ci:ssh_keys:ensure
108
+ github:deploy_keys:ensure
87
109
  ]
88
110
  end
89
111
 
90
112
  namespace :version do
91
- desc "Bump version for specified type (pre, major, minor, patch)"
113
+ desc 'Bump version for specified type (pre, major, minor, patch)'
92
114
  task :bump, [:type] do |_, args|
93
115
  bump_version_for(args.type)
94
116
  end
95
117
  end
96
118
 
97
- desc "Release gem"
119
+ desc 'Release gem'
98
120
  task :release do
99
- sh "gem release --tag --push"
121
+ sh 'gem release --tag --push'
100
122
  end
101
123
 
102
124
  def bump_version_for(version_type)
103
- sh "gem bump --version #{version_type} " +
104
- "&& bundle install " +
105
- "&& export LAST_MESSAGE=\"$(git log -1 --pretty=%B)\" " +
106
- "&& git commit -a --amend -m \"${LAST_MESSAGE} [ci skip]\""
125
+ sh "gem bump --version #{version_type} " \
126
+ '&& bundle install ' \
127
+ '&& export LAST_MESSAGE="$(git log -1 --pretty=%B)" ' \
128
+ '&& git commit -a --amend -m "${LAST_MESSAGE} [ci skip]"'
107
129
  end
data/bin/console CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "rake_leiningen"
4
+ require 'bundler/setup'
5
+ require 'rake_leiningen'
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +11,5 @@ require "rake_leiningen"
10
11
  # require "pry"
11
12
  # Pry.start
12
13
 
13
- require "irb"
14
+ require 'irb'
14
15
  IRB.start(__FILE__)
data/lib/rake_gpg/home.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RakeGPG
2
4
  class Home
3
5
  def initialize(work_directory, home_directory)
@@ -5,15 +7,13 @@ module RakeGPG
5
7
  @home_directory = home_directory
6
8
  end
7
9
 
8
- def with_resolved_directory
10
+ def with_resolved_directory(&block)
9
11
  if @home_directory == :temporary
10
- Dir.mktmpdir('home', @work_directory) do |home_directory|
11
- yield home_directory
12
- end
12
+ Dir.mktmpdir('home', @work_directory, &block)
13
13
  else
14
14
  FileUtils.mkdir_p(@home_directory)
15
15
  yield @home_directory
16
16
  end
17
17
  end
18
18
  end
19
- end
19
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rake_factory'
2
4
  require 'ruby_gpg2'
3
5
 
@@ -8,7 +10,7 @@ module RakeGPG
8
10
  module Encryption
9
11
  class Decrypt < RakeFactory::Task
10
12
  default_name :decrypt
11
- default_description "Decrypt a file using GPG"
13
+ default_description 'Decrypt a file using GPG'
12
14
 
13
15
  parameter :key_file_path, required: true
14
16
  parameter :input_file_path, required: true
@@ -20,29 +22,62 @@ module RakeGPG
20
22
  parameter :trust_mode, default: :always
21
23
  parameter :passphrase
22
24
 
23
- action do |t|
24
- mkdir_p(t.work_directory)
25
+ action do
26
+ make_work_directory
27
+ log_decrypting
28
+ in_home_directory do |home_directory|
29
+ import_key(home_directory)
30
+ make_output_directory
31
+ decrypt(home_directory)
32
+ end
33
+ log_done
34
+ end
35
+
36
+ private
25
37
 
26
- puts "Decrypting #{t.input_file_path} with key #{t.key_file_path}..."
27
- Home.new(t.work_directory, t.home_directory)
38
+ def in_home_directory(&block)
39
+ Home.new(work_directory, home_directory)
28
40
  .with_resolved_directory do |home_directory|
29
- RubyGPG2.import(
30
- key_file_paths: [t.key_file_path],
31
- work_directory: t.work_directory,
32
- home_directory: home_directory)
33
-
34
- mkdir_p(File.dirname(t.output_file_path))
35
-
36
- RubyGPG2.decrypt(
37
- input_file_path: t.input_file_path,
38
- output_file_path: t.output_file_path,
39
- home_directory: home_directory,
40
- trust_mode: t.trust_mode,
41
- passphrase: t.passphrase,
42
- pinentry_mode: t.passphrase ? :loopback : nil,
43
- without_passphrase: !t.passphrase)
41
+ block.call(home_directory)
44
42
  end
45
- puts "Done."
43
+ end
44
+
45
+ def import_key(home_directory)
46
+ RubyGPG2.import(
47
+ key_file_paths: [key_file_path],
48
+ work_directory: work_directory,
49
+ home_directory: home_directory
50
+ )
51
+ end
52
+
53
+ def make_work_directory
54
+ mkdir_p(work_directory)
55
+ end
56
+
57
+ def make_output_directory
58
+ mkdir_p(File.dirname(output_file_path))
59
+ end
60
+
61
+ def decrypt(home_directory)
62
+ RubyGPG2.decrypt(
63
+ input_file_path: input_file_path,
64
+ output_file_path: output_file_path,
65
+ home_directory: home_directory,
66
+ trust_mode: trust_mode,
67
+ passphrase: passphrase,
68
+ pinentry_mode: passphrase ? :loopback : nil,
69
+ without_passphrase: !passphrase
70
+ )
71
+ end
72
+
73
+ def log_decrypting
74
+ $stdout.puts(
75
+ "Decrypting #{input_file_path} with key #{key_file_path}..."
76
+ )
77
+ end
78
+
79
+ def log_done
80
+ $stdout.puts('Done.')
46
81
  end
47
82
  end
48
83
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rake_factory'
2
4
  require 'ruby_gpg2'
3
5
 
@@ -8,7 +10,7 @@ module RakeGPG
8
10
  module Encryption
9
11
  class Encrypt < RakeFactory::Task
10
12
  default_name :encrypt
11
- default_description "Encrypt a file using GPG"
13
+ default_description 'Encrypt a file using GPG'
12
14
 
13
15
  parameter :key_file_path, required: true
14
16
  parameter :input_file_path, required: true
@@ -20,35 +22,68 @@ module RakeGPG
20
22
  parameter :armor, default: true
21
23
  parameter :trust_mode, default: :always
22
24
 
23
- action do |t|
24
- mkdir_p(t.work_directory)
25
+ action do
26
+ make_work_directory
27
+ log_encrypting
28
+ in_home_directory do |home_directory|
29
+ result = import_key(home_directory)
30
+ key_fingerprint = lookup_key_fingerprint(result)
31
+ make_output_directory
32
+ encrypt(home_directory, key_fingerprint)
33
+ end
34
+ log_done
35
+ end
25
36
 
26
- puts "Encrypting #{t.input_file_path} for key #{t.key_file_path}..."
27
- Home.new(t.work_directory, t.home_directory)
37
+ private
38
+
39
+ def in_home_directory(&block)
40
+ Home.new(work_directory, home_directory)
28
41
  .with_resolved_directory do |home_directory|
29
- result = RubyGPG2.import(
30
- key_file_paths: [t.key_file_path],
31
- work_directory: t.work_directory,
32
- home_directory: home_directory,
33
- with_status: true)
34
-
35
- key_fingerprint = result
36
- .status
37
- .filter_by_type(:import_ok)
38
- .first_line
39
- .key_fingerprint
40
-
41
- mkdir_p(File.dirname(t.output_file_path))
42
-
43
- RubyGPG2.encrypt(
44
- recipient: key_fingerprint,
45
- input_file_path: t.input_file_path,
46
- output_file_path: t.output_file_path,
47
- home_directory: home_directory,
48
- armor: t.armor,
49
- trust_mode: t.trust_mode)
42
+ block.call(home_directory)
50
43
  end
51
- puts "Done."
44
+ end
45
+
46
+ def make_work_directory
47
+ mkdir_p(work_directory)
48
+ end
49
+
50
+ def make_output_directory
51
+ mkdir_p(File.dirname(output_file_path))
52
+ end
53
+
54
+ def import_key(home_directory)
55
+ RubyGPG2.import(
56
+ key_file_paths: [key_file_path],
57
+ work_directory: work_directory,
58
+ home_directory: home_directory,
59
+ with_status: true
60
+ )
61
+ end
62
+
63
+ def lookup_key_fingerprint(result)
64
+ result.status.filter_by_type(:import_ok)
65
+ .first_line.key_fingerprint
66
+ end
67
+
68
+ def encrypt(home_directory, key_fingerprint)
69
+ RubyGPG2.encrypt(
70
+ recipient: key_fingerprint,
71
+ input_file_path: input_file_path,
72
+ output_file_path: output_file_path,
73
+ home_directory: home_directory,
74
+ armor: armor,
75
+ trust_mode: trust_mode
76
+ )
77
+ end
78
+
79
+ def log_encrypting
80
+ $stdout.puts(
81
+ "Encrypting #{input_file_path} for key #{key_file_path}..."
82
+ )
83
+ end
84
+
85
+ def log_done
86
+ $stdout.puts('Done.')
52
87
  end
53
88
  end
54
89
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'encryption/decrypt'
2
4
  require_relative 'encryption/encrypt'
3
5
 
4
6
  module RakeGPG
5
7
  module Tasks
6
8
  module Encryption
7
-
8
9
  end
9
10
  end
10
11
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rake_factory'
2
4
  require 'ruby_gpg2'
3
5
 
@@ -6,9 +8,10 @@ require_relative '../../home'
6
8
  module RakeGPG
7
9
  module Tasks
8
10
  module Keys
11
+ # rubocop:disable Metrics/ClassLength
9
12
  class Generate < RakeFactory::Task
10
13
  default_name :generate
11
- default_description "Generate a GPG key"
14
+ default_description 'Generate a GPG key'
12
15
 
13
16
  parameter :name_prefix, default: 'gpg'
14
17
  parameter :armor, default: true
@@ -29,55 +32,109 @@ module RakeGPG
29
32
  parameter :expiry, default: :never
30
33
  parameter :passphrase
31
34
 
32
- action do |t|
33
- mkdir_p(t.work_directory)
35
+ action do
36
+ make_work_directory
37
+ log_generating_key
38
+ in_home_directory do |home_directory|
39
+ result = generate_key(home_directory)
40
+ key_fingerprint = lookup_key_fingerprint(result)
41
+ log_generated_key(key_fingerprint)
42
+ maybe_export_key(home_directory, key_fingerprint)
43
+ end
44
+ log_done
45
+ end
46
+
47
+ private
34
48
 
35
- puts "Generating GPG key for #{t.owner_name} <#{t.owner_email}>..."
36
- Home.new(t.work_directory, t.home_directory)
49
+ def in_home_directory(&block)
50
+ Home.new(work_directory, home_directory)
37
51
  .with_resolved_directory do |home_directory|
38
- mkdir_p t.output_directory if t.output_directory
39
-
40
- result = RubyGPG2::ParameterFileContents
41
- .new(t.parameter_values)
42
- .in_temp_file(t.work_directory) do |f|
43
- RubyGPG2.generate_key(
44
- parameter_file_path: f.path,
45
- home_directory: home_directory,
46
- work_directory: t.work_directory,
47
- without_passphrase: t.passphrase.nil?,
48
- with_status: true)
49
- end
50
-
51
- key_fingerprint = result
52
- .status
53
- .filter_by_type(:key_created)
54
- .first_line
55
- .key_fingerprint
56
-
57
- puts "Generated GPG key with fingerprint #{key_fingerprint}."
58
-
59
- if t.output_directory
60
- puts 'Export requested. ' +
61
- "Exporting GPG key to #{t.output_directory}..."
62
- RubyGPG2.export(
63
- names: [key_fingerprint],
64
- output_file_path:
65
- "#{t.output_directory}/#{t.name_prefix}.public",
66
- armor: t.armor,
67
- home_directory: home_directory)
68
- RubyGPG2.export_secret_keys(
69
- names: [key_fingerprint],
70
- output_file_path:
71
- "#{t.output_directory}/#{t.name_prefix}.private",
72
- armor: t.armor,
73
- passphrase: t.passphrase,
74
- pinentry_mode: t.passphrase.nil? ? nil : :loopback,
75
- home_directory: home_directory)
76
- end
52
+ block.call(home_directory)
53
+ end
54
+ end
55
+
56
+ def make_work_directory
57
+ mkdir_p(work_directory)
58
+ end
59
+
60
+ def make_output_directory
61
+ mkdir_p(output_directory)
62
+ end
63
+
64
+ def lookup_key_fingerprint(result)
65
+ result.status.filter_by_type(:key_created)
66
+ .first_line.key_fingerprint
67
+ end
68
+
69
+ # rubocop:disable Metrics/MethodLength
70
+ def generate_key(home_directory)
71
+ RubyGPG2::ParameterFileContents
72
+ .new(parameter_values)
73
+ .in_temp_file(work_directory) do |f|
74
+ RubyGPG2.generate_key(
75
+ parameter_file_path: f.path,
76
+ home_directory: home_directory,
77
+ work_directory: work_directory,
78
+ without_passphrase: passphrase.nil?,
79
+ with_status: true
80
+ )
77
81
  end
78
- puts "Done."
82
+ end
83
+ # rubocop:enable Metrics/MethodLength
84
+
85
+ def maybe_export_key(home_directory, key_fingerprint)
86
+ return unless output_directory
87
+
88
+ log_exporting_key
89
+ make_output_directory
90
+ export_public_key(home_directory, key_fingerprint)
91
+ export_private_key(home_directory, key_fingerprint)
92
+ end
93
+
94
+ def export_public_key(home_directory, key_fingerprint)
95
+ RubyGPG2.export(
96
+ names: [key_fingerprint],
97
+ output_file_path: "#{output_directory}/#{name_prefix}.public",
98
+ armor: armor,
99
+ home_directory: home_directory
100
+ )
101
+ end
102
+
103
+ def export_private_key(home_directory, key_fingerprint)
104
+ RubyGPG2.export_secret_keys(
105
+ names: [key_fingerprint],
106
+ output_file_path: "#{output_directory}/#{name_prefix}.private",
107
+ armor: armor,
108
+ passphrase: passphrase,
109
+ pinentry_mode: passphrase.nil? ? nil : :loopback,
110
+ home_directory: home_directory
111
+ )
112
+ end
113
+
114
+ def log_generating_key
115
+ $stdout.puts(
116
+ "Generating GPG key for #{owner_name} <#{owner_email}>..."
117
+ )
118
+ end
119
+
120
+ def log_generated_key(key_fingerprint)
121
+ $stdout.puts(
122
+ "Generated GPG key with fingerprint #{key_fingerprint}."
123
+ )
124
+ end
125
+
126
+ def log_exporting_key
127
+ $stdout.puts(
128
+ 'Export requested. Exporting GPG key to '\
129
+ "#{output_directory}..."
130
+ )
131
+ end
132
+
133
+ def log_done
134
+ $stdout.puts('Done.')
79
135
  end
80
136
  end
137
+ # rubocop:enable Metrics/ClassLength
81
138
  end
82
139
  end
83
140
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rake_factory'
2
4
  require 'ruby_gpg2'
3
5
 
@@ -8,24 +10,49 @@ module RakeGPG
8
10
  module Keys
9
11
  class Import < RakeFactory::Task
10
12
  default_name :import
11
- default_description "Import a GPG key"
13
+ default_description 'Import a GPG key'
12
14
 
13
15
  parameter :key_file_path, required: true
14
16
  parameter :work_directory, default: '/tmp'
15
17
  parameter :home_directory, default: :temporary
16
18
 
17
- action do |t|
18
- mkdir_p(t.work_directory)
19
+ action do
20
+ make_work_directory
21
+ log_importing_key
22
+ in_home_directory do |home_directory|
23
+ import(home_directory)
24
+ end
25
+ log_done
26
+ end
27
+
28
+ private
19
29
 
20
- puts "Importing GPG key from #{t.key_file_path} " +
21
- "into #{home_directory}..."
22
- Home.new(t.work_directory, t.home_directory)
30
+ def in_home_directory(&block)
31
+ Home.new(work_directory, home_directory)
23
32
  .with_resolved_directory do |home_directory|
24
- RubyGPG2.import(
25
- key_file_paths: [t.key_file_path],
26
- home_directory: home_directory)
33
+ block.call(home_directory)
27
34
  end
28
- puts "Done."
35
+ end
36
+
37
+ def make_work_directory
38
+ mkdir_p(work_directory)
39
+ end
40
+
41
+ def import(home_directory)
42
+ RubyGPG2.import(
43
+ key_file_paths: [key_file_path],
44
+ home_directory: home_directory
45
+ )
46
+ end
47
+
48
+ def log_importing_key
49
+ $stdout.puts(
50
+ "Importing GPG key from #{key_file_path} into #{home_directory}..."
51
+ )
52
+ end
53
+
54
+ def log_done
55
+ $stdout.puts 'Done.'
29
56
  end
30
57
  end
31
58
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'keys/generate'
2
4
  require_relative 'keys/import'
3
5
 
4
6
  module RakeGPG
5
7
  module Tasks
6
8
  module Keys
7
-
8
9
  end
9
10
  end
10
11
  end
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'tasks/keys'
2
4
  require_relative 'tasks/encryption'
3
5
 
4
6
  module RakeGPG
5
7
  module Tasks
6
-
7
8
  end
8
9
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RakeGPG
2
- VERSION = '0.17.0.pre.4'
4
+ VERSION = '0.17.0.pre.5'
3
5
  end
data/lib/rake_gpg.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rake_gpg/tasks'
2
4
  require 'rake_gpg/version'
3
5
 
data/rake_gpg.gemspec ADDED
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'rake_gpg/version'
6
+
7
+ files = %w[
8
+ bin
9
+ lib
10
+ CODE_OF_CONDUCT.md
11
+ rake_gpg.gemspec
12
+ Gemfile
13
+ LICENSE.txt
14
+ Rakefile
15
+ README.md
16
+ ]
17
+
18
+ Gem::Specification.new do |spec|
19
+ spec.name = 'rake_gpg'
20
+ spec.version = RakeGPG::VERSION
21
+ spec.authors = ['InfraBlocks Maintainers']
22
+ spec.email = ['maintainers@infrablocks.io']
23
+
24
+ spec.summary = 'Rake tasks for managing GPG activities.'
25
+ spec.description = 'Rake tasks for common GPG related activities allowing ' \
26
+ 'keys to be managed and content to be encrypted and '\
27
+ 'decrypted.'
28
+ spec.homepage = 'https://github.com/infrablocks/rake_gpg'
29
+ spec.license = 'MIT'
30
+
31
+ spec.files = `git ls-files -z`.split("\x0").select do |f|
32
+ f.match(/^(#{files.map { |g| Regexp.escape(g) }.join('|')})/)
33
+ end
34
+ spec.bindir = 'exe'
35
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
36
+ spec.require_paths = ['lib']
37
+
38
+ spec.required_ruby_version = '>= 2.7'
39
+
40
+ spec.add_dependency 'rake_factory', '~> 0.23'
41
+ spec.add_dependency 'ruby_gpg2', '~> 0.6'
42
+
43
+ spec.add_development_dependency 'activesupport'
44
+ spec.add_development_dependency 'bundler'
45
+ spec.add_development_dependency 'fakefs'
46
+ spec.add_development_dependency 'gem-release'
47
+ spec.add_development_dependency 'rake'
48
+ spec.add_development_dependency 'rake_circle_ci'
49
+ spec.add_development_dependency 'rake_github'
50
+ spec.add_development_dependency 'rake_gpg'
51
+ spec.add_development_dependency 'rake_ssh'
52
+ spec.add_development_dependency 'rspec'
53
+ spec.add_development_dependency 'rubocop'
54
+ spec.add_development_dependency 'rubocop-rake'
55
+ spec.add_development_dependency 'rubocop-rspec'
56
+ spec.add_development_dependency 'simplecov'
57
+
58
+ spec.metadata['rubygems_mfa_required'] = 'false'
59
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake_gpg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0.pre.4
4
+ version: 0.17.0.pre.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - InfraBlocks Maintainers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-21 00:00:00.000000000 Z
11
+ date: 2022-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake_factory
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -53,7 +67,7 @@ dependencies:
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: rake
70
+ name: fakefs
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - ">="
@@ -67,7 +81,7 @@ dependencies:
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
- name: rake_circle_ci
84
+ name: gem-release
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ">="
@@ -81,7 +95,7 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: rake_github
98
+ name: rake
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ">="
@@ -95,7 +109,21 @@ dependencies:
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
- name: rake_ssh
112
+ name: rake_circle_ci
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rake_github
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - ">="
@@ -123,7 +151,7 @@ dependencies:
123
151
  - !ruby/object:Gem::Version
124
152
  version: '0'
125
153
  - !ruby/object:Gem::Dependency
126
- name: rspec
154
+ name: rake_ssh
127
155
  requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
157
  - - ">="
@@ -137,7 +165,7 @@ dependencies:
137
165
  - !ruby/object:Gem::Version
138
166
  version: '0'
139
167
  - !ruby/object:Gem::Dependency
140
- name: gem-release
168
+ name: rspec
141
169
  requirement: !ruby/object:Gem::Requirement
142
170
  requirements:
143
171
  - - ">="
@@ -151,7 +179,7 @@ dependencies:
151
179
  - !ruby/object:Gem::Version
152
180
  version: '0'
153
181
  - !ruby/object:Gem::Dependency
154
- name: semantic
182
+ name: rubocop
155
183
  requirement: !ruby/object:Gem::Requirement
156
184
  requirements:
157
185
  - - ">="
@@ -165,7 +193,7 @@ dependencies:
165
193
  - !ruby/object:Gem::Version
166
194
  version: '0'
167
195
  - !ruby/object:Gem::Dependency
168
- name: activesupport
196
+ name: rubocop-rake
169
197
  requirement: !ruby/object:Gem::Requirement
170
198
  requirements:
171
199
  - - ">="
@@ -179,7 +207,7 @@ dependencies:
179
207
  - !ruby/object:Gem::Version
180
208
  version: '0'
181
209
  - !ruby/object:Gem::Dependency
182
- name: fakefs
210
+ name: rubocop-rspec
183
211
  requirement: !ruby/object:Gem::Requirement
184
212
  requirements:
185
213
  - - ">="
@@ -232,10 +260,12 @@ files:
232
260
  - lib/rake_gpg/tasks/keys/generate.rb
233
261
  - lib/rake_gpg/tasks/keys/import.rb
234
262
  - lib/rake_gpg/version.rb
263
+ - rake_gpg.gemspec
235
264
  homepage: https://github.com/infrablocks/rake_gpg
236
265
  licenses:
237
266
  - MIT
238
- metadata: {}
267
+ metadata:
268
+ rubygems_mfa_required: 'false'
239
269
  post_install_message:
240
270
  rdoc_options: []
241
271
  require_paths: