rake_dependencies 3.14.0.pre.1 → 3.14.0.pre.1.pr228.3.1

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: 9d57cb5d4a16e04571f7990d498de18a873a60bc4cd036f1e0f99fef8481af11
4
- data.tar.gz: b94fc3786192e507abed0999b3790cb2e270057d65258009ef90f7607ac3e701
3
+ metadata.gz: 896ce75eff64aad976e72f15eb66aae855fae3e5715768a7e986b422d33214b7
4
+ data.tar.gz: 7f36f8599a472a91d3750f89e2e43f1566de940ee27cac87b83320429d1e2aad
5
5
  SHA512:
6
- metadata.gz: 0df6b5fb832e4d1949c2ece154d896bda2bab5bf138b33af276b1340ced0154758184d0190a4017dd6ff887c14228b4b5f174eea1f77bf5e6e9ab32fa8322799
7
- data.tar.gz: bc88f1f80688fb7971ccfcad10b2419306c3a92872b998cdc998b0235601b44b2c99c00e85b2647c86c19fb50fb143c130310c3470c74d3fbedf3062eb91b6fa
6
+ metadata.gz: fbbd02d4dbce1848a86a7ba9711af58cf947e95bb101d6c49905bdda62614accf00701048c02f474ec4dbc4302f5a417f80d9d4c6f530624e9d423b4561b3bd8
7
+ data.tar.gz: a15ea14a360137aa61671ec40e2028ec96cdc900ea79897ff5725a92f1dccf622b612f2b904db282f03f1573da68415bdaddb908d7604dc463fad22560e96bc4
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rake_dependencies (3.14.0.pre.1)
4
+ rake_dependencies (3.14.0.pre.1.pr228.3.1)
5
5
  down (~> 5.3)
6
6
  hamster (~> 3.0)
7
7
  minitar (>= 1.0, < 2.0)
@@ -39,7 +39,8 @@ GEM
39
39
  addressable (~> 2.8)
40
40
  base64 (~> 0.3)
41
41
  drb (2.2.3)
42
- excon (0.111.0)
42
+ excon (1.6.0)
43
+ logger
43
44
  fakefs (3.0.1)
44
45
  faraday (2.14.3)
45
46
  faraday-net_http (>= 2.0, < 3.5)
@@ -82,11 +83,6 @@ GEM
82
83
  racc (1.8.1)
83
84
  rainbow (3.1.1)
84
85
  rake (13.4.2)
85
- rake_circle_ci (0.13.0)
86
- colored2 (~> 3.1)
87
- excon (~> 0.72)
88
- rake_factory (~> 0.33)
89
- sshkey (~> 2.0)
90
86
  rake_factory (0.33.0)
91
87
  activesupport (>= 4)
92
88
  rake (~> 13.0)
@@ -109,10 +105,9 @@ GEM
109
105
  rake_gpg (0.20.0)
110
106
  rake_factory (~> 0.33)
111
107
  ruby_gpg2 (~> 0.12)
112
- rake_ssh (0.12.0)
113
- colored2 (~> 3.1)
108
+ rake_slack (0.3.0)
109
+ excon (>= 0.72, < 2.0)
114
110
  rake_factory (~> 0.33)
115
- sshkey (~> 2.0)
116
111
  rbnacl (7.1.2)
117
112
  ffi (~> 1)
118
113
  rchardet (1.8.0)
@@ -183,13 +178,12 @@ DEPENDENCIES
183
178
  fakefs
184
179
  gem-release
185
180
  rake
186
- rake_circle_ci
187
181
  rake_dependencies!
188
182
  rake_git
189
183
  rake_git_crypt
190
184
  rake_github
191
185
  rake_gpg
192
- rake_ssh
186
+ rake_slack
193
187
  rspec
194
188
  rubocop
195
189
  rubocop-rake
data/README.md CHANGED
@@ -310,16 +310,16 @@ release a new version, update the version number in `version.rb`, and then run
310
310
  git commits and tags, and push the `.gem` file to
311
311
  [rubygems.org](https://rubygems.org).
312
312
 
313
- ### Managing CircleCI keys
313
+ ### Managing CI keys
314
314
 
315
- To encrypt a GPG key for use by CircleCI:
315
+ To encrypt a GPG key for use by CI:
316
316
 
317
317
  ```bash
318
318
  openssl aes-256-cbc \
319
319
  -e \
320
320
  -md sha1 \
321
321
  -in ./config/secrets/ci/gpg.private \
322
- -out ./.circleci/gpg.private.enc \
322
+ -out ./.github/gpg.private.enc \
323
323
  -k "<passphrase>"
324
324
  ```
325
325
 
@@ -329,7 +329,7 @@ To check decryption is working correctly:
329
329
  openssl aes-256-cbc \
330
330
  -d \
331
331
  -md sha1 \
332
- -in ./.circleci/gpg.private.enc \
332
+ -in ./.github/gpg.private.enc \
333
333
  -k "<passphrase>"
334
334
  ```
335
335
 
data/Rakefile CHANGED
@@ -1,15 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rake_circle_ci'
4
3
  require 'rake_git'
5
4
  require 'rake_git_crypt'
6
5
  require 'rake_github'
7
6
  require 'rake_gpg'
8
- require 'rake_ssh'
7
+ require 'rake_slack'
9
8
  require 'rspec/core/rake_task'
10
9
  require 'rubocop/rake_task'
11
10
  require 'securerandom'
12
- require 'yaml'
13
11
 
14
12
  task default: %i[
15
13
  library:fix
@@ -59,13 +57,6 @@ namespace :encryption do
59
57
  end
60
58
 
61
59
  namespace :keys do
62
- namespace :deploy do
63
- RakeSSH.define_key_tasks(
64
- path: 'config/secrets/ci/',
65
- comment: 'maintainers@infrablocks.io'
66
- )
67
- end
68
-
69
60
  namespace :gpg do
70
61
  RakeGPG.define_generate_key_task(
71
62
  output_directory: 'config/secrets/ci',
@@ -91,7 +82,6 @@ namespace :secrets do
91
82
  desc 'Generate all generatable secrets.'
92
83
  task generate: %w[
93
84
  encryption:passphrase:generate
94
- keys:deploy:generate
95
85
  keys:gpg:generate
96
86
  ]
97
87
 
@@ -115,57 +105,106 @@ namespace :library do
115
105
 
116
106
  desc 'Attempt to automatically fix issues with the library'
117
107
  task fix: [:'rubocop:autocorrect_all']
108
+
109
+ desc 'Build the library'
110
+ task :build do
111
+ sh 'gem build rake_dependencies.gemspec'
112
+ end
118
113
  end
119
114
 
120
115
  namespace :test do
121
116
  RSpec::Core::RakeTask.new(:unit)
122
117
  end
123
118
 
124
- RakeCircleCI.define_project_tasks(
125
- namespace: :circle_ci,
126
- project_slug: 'github/infrablocks/rake_dependencies'
127
- ) do |t|
128
- circle_ci_config =
129
- YAML.load_file('config/secrets/circle_ci/config.yaml')
130
-
131
- t.api_token = circle_ci_config['circle_ci_api_token']
132
- t.environment_variables = {
133
- ENCRYPTION_PASSPHRASE:
134
- File.read('config/secrets/ci/encryption.passphrase')
135
- .chomp
136
- }
137
- t.checkout_keys = []
138
- t.ssh_keys = [
139
- {
140
- hostname: 'github.com',
141
- private_key: File.read('config/secrets/ci/ssh.private')
142
- }
143
- ]
119
+ namespace :slack do
120
+ RakeSlack.define_notification_tasks do |t|
121
+ t.bot_token = ENV.fetch('SLACK_BOT_TOKEN', nil)
122
+ t.routing_rules = [
123
+ { when: { type: 'on_hold' },
124
+ channel: 'C038EDCRSQJ', format: :on_hold }, # release
125
+ { when: { actor: 'dependabot[bot]', outcome: 'success' },
126
+ channel: 'C03N711HVDG', format: :success }, # builds-dependabot
127
+ { when: { actor: 'dependabot[bot]' },
128
+ channel: 'C03N711HVDG', format: :failure }, # builds-dependabot
129
+ { when: { outcome: 'success' },
130
+ channel: 'C023XUE76GH', format: :success }, # builds
131
+ # Failures go to builds, not team-dev (org default), to keep noise
132
+ # out of a popular channel while this pipeline beds in.
133
+ { when: {},
134
+ channel: 'C023XUE76GH', format: :failure } # builds
135
+ ]
136
+ end
137
+ end
138
+
139
+ namespace :repository do
140
+ desc 'Set the git author for CI'
141
+ task :set_ci_author do
142
+ sh 'git config --global user.name "InfraBlocks CI"'
143
+ sh 'git config --global user.email "ci@infrablocks.io"'
144
+ end
145
+ end
146
+
147
+ # Operator's ambient auth. Resolve once and fail fast: a missing,
148
+ # unauthenticated, or absent gh yields an empty string, which would
149
+ # otherwise surface later as an opaque Octokit 401. An empty or
150
+ # whitespace-only GITHUB_TOKEN is treated as absent so an authenticated
151
+ # operator falls through to `gh auth token` rather than hitting the raise.
152
+ def github_access_token
153
+ token = ENV['GITHUB_TOKEN'].to_s.strip
154
+ token = gh_auth_token if token.empty?
155
+ return token unless token.empty?
156
+
157
+ raise 'No GitHub token available: set GITHUB_TOKEN or run `gh auth login`'
158
+ end
159
+
160
+ def gh_auth_token
161
+ `gh auth token`.strip
162
+ rescue Errno::ENOENT
163
+ ''
164
+ end
165
+
166
+ # Actions store only: dependabot runs never reach the passphrase — the
167
+ # only pr.yaml job that unlocks git-crypt (prerelease) is guarded to
168
+ # same-repo human PRs. Guard against a locked clone: without it, File.read
169
+ # returns git-crypt ciphertext and github:secrets:ensure silently uploads
170
+ # garbage that only surfaces much later as an opaque GPG unlock failure in
171
+ # the release job.
172
+ def ci_encryption_passphrase
173
+ path = 'config/secrets/ci/encryption.passphrase'
174
+ unless File.exist?(path)
175
+ raise "Passphrase file not found: #{path} — expected a " \
176
+ 'git-crypt-unlocked clone with the CI secrets present'
177
+ end
178
+
179
+ ensure_unlocked(File.binread(path)).chomp
180
+ end
181
+
182
+ def ensure_unlocked(passphrase)
183
+ return passphrase unless passphrase.start_with?("\x00GITCRYPT")
184
+
185
+ raise 'encryption.passphrase is git-crypt ciphertext — unlock the ' \
186
+ 'clone before provisioning'
144
187
  end
145
188
 
146
189
  RakeGithub.define_repository_tasks(
147
190
  namespace: :github,
148
191
  repository: 'infrablocks/rake_dependencies'
149
192
  ) do |t|
150
- github_config =
151
- YAML.load_file('config/secrets/github/config.yaml')
152
-
153
- t.access_token = github_config['github_personal_access_token']
154
- t.deploy_keys = [
155
- {
156
- title: 'CircleCI',
157
- public_key: File.read('config/secrets/ci/ssh.public')
158
- }
193
+ t.access_token = github_access_token
194
+ t.secrets = [
195
+ { name: 'ENCRYPTION_PASSPHRASE', value: ci_encryption_passphrase }
196
+ ]
197
+ t.environments = [
198
+ { name: 'release',
199
+ reviewers: [{ team: 'maintainers' }] }
159
200
  ]
160
201
  end
161
202
 
162
203
  namespace :pipeline do
163
- desc 'Prepare CircleCI Pipeline'
204
+ desc 'Prepare GitHub Actions pipeline'
164
205
  task prepare: %i[
165
- circle_ci:env_vars:ensure
166
- circle_ci:checkout_keys:ensure
167
- circle_ci:ssh_keys:ensure
168
- github:deploy_keys:ensure
206
+ github:secrets:ensure
207
+ github:environments:ensure
169
208
  ]
170
209
  end
171
210
 
@@ -176,6 +215,38 @@ namespace :version do
176
215
  end
177
216
  end
178
217
 
218
+ namespace :prerelease do
219
+ desc 'Build and push a namespaced pre-release to RubyGems ' \
220
+ '(PR CI only; no bump, no tag, no commit, no push)'
221
+ task :publish, %i[pr_number run_number run_attempt] do |_, args|
222
+ %i[pr_number run_number run_attempt].each do |name|
223
+ raise "Missing task argument: #{name}" if args[name].to_s.empty?
224
+ end
225
+
226
+ version_file = 'lib/rake_dependencies/version.rb'
227
+ version_pattern = /(VERSION\s*=\s*')([^']+)(')/
228
+ source = File.read(version_file)
229
+ base = source[version_pattern, 2]
230
+ raise "Could not read VERSION from #{version_file}" unless base
231
+
232
+ version = "#{base}.pr#{args.pr_number}" \
233
+ ".#{args.run_number}.#{args.run_attempt}"
234
+ gem_file = "rake_dependencies-#{version}.gem"
235
+ begin
236
+ File.write(version_file,
237
+ source.sub(version_pattern, "\\1#{version}\\3"))
238
+ # Build + push directly: `gem release` aborts on the (deliberately)
239
+ # uncommitted version rewrite. PR CI must not tag, commit, or push
240
+ # (contrast the `release` task).
241
+ sh 'gem build rake_dependencies.gemspec'
242
+ sh "gem push #{gem_file}"
243
+ ensure
244
+ File.write(version_file, source)
245
+ rm_f gem_file
246
+ end
247
+ end
248
+ end
249
+
179
250
  desc 'Release gem'
180
251
  task :release do
181
252
  sh 'gem release --tag --push'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RakeDependencies
4
- VERSION = '3.14.0.pre.1'
4
+ VERSION = '3.14.0.pre.1.pr228.3.1'
5
5
  end
@@ -46,12 +46,11 @@ Gem::Specification.new do |spec|
46
46
  spec.add_development_dependency 'fakefs'
47
47
  spec.add_development_dependency 'gem-release'
48
48
  spec.add_development_dependency 'rake'
49
- spec.add_development_dependency 'rake_circle_ci'
50
49
  spec.add_development_dependency 'rake_git'
51
50
  spec.add_development_dependency 'rake_git_crypt'
52
51
  spec.add_development_dependency 'rake_github'
53
52
  spec.add_development_dependency 'rake_gpg'
54
- spec.add_development_dependency 'rake_ssh'
53
+ spec.add_development_dependency 'rake_slack'
55
54
  spec.add_development_dependency 'rspec'
56
55
  spec.add_development_dependency 'rubocop'
57
56
  spec.add_development_dependency 'rubocop-rake'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake_dependencies
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.14.0.pre.1
4
+ version: 3.14.0.pre.1.pr228.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - InfraBlocks Maintainers
@@ -141,20 +141,6 @@ dependencies:
141
141
  - - ">="
142
142
  - !ruby/object:Gem::Version
143
143
  version: '0'
144
- - !ruby/object:Gem::Dependency
145
- name: rake_circle_ci
146
- requirement: !ruby/object:Gem::Requirement
147
- requirements:
148
- - - ">="
149
- - !ruby/object:Gem::Version
150
- version: '0'
151
- type: :development
152
- prerelease: false
153
- version_requirements: !ruby/object:Gem::Requirement
154
- requirements:
155
- - - ">="
156
- - !ruby/object:Gem::Version
157
- version: '0'
158
144
  - !ruby/object:Gem::Dependency
159
145
  name: rake_git
160
146
  requirement: !ruby/object:Gem::Requirement
@@ -212,7 +198,7 @@ dependencies:
212
198
  - !ruby/object:Gem::Version
213
199
  version: '0'
214
200
  - !ruby/object:Gem::Dependency
215
- name: rake_ssh
201
+ name: rake_slack
216
202
  requirement: !ruby/object:Gem::Requirement
217
203
  requirements:
218
204
  - - ">="