bake-gem-github 0.6.0 → 0.7.0

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: 46e9578ab60761af87b7130ba3642b00401e89febdcd7e8cced97d74252e37b6
4
- data.tar.gz: 53997e6e60991e6e5b057cd62ee7897de5156306d4dceb3d8a6bef2a269cd349
3
+ metadata.gz: 6806efc908e7db5189295eb013a2d29bc3f82a20b9749eafc9464baa898a251a
4
+ data.tar.gz: 19143737be1d10805c3204064234880fe49b2b33ba107cb55676c522a83fd5e1
5
5
  SHA512:
6
- metadata.gz: bef7899e4fbd943cd791a72562739f04e8831f5c1fbc7b4760426c48bb9b99bf6fb96d931de8399423203d147b6775c65f137392b9e55ae7761fcb733aa00cb8
7
- data.tar.gz: 28a9ccd6198bb07906119a6b89cf0fa23874756a5dcc53d335032bb94eebc5843b79b3f843a4ac5cfb6c911c7fd372a52095e9618d37b2bc5820c7ef463ff8c0
6
+ metadata.gz: 7ec509f5bc2921c554352950a9c469dcbe8dccc8f64bfd0e71fcfdb237855c68c1d0a232fcbea6e816204cb37868d952a11b8b0bf97d1ca3e6c0b9e7cfb22f8d
7
+ data.tar.gz: 8bfb262d1cfcb69db13aa8075fb354d1dbf70826c03a04747bd7cba1e80b4c04a18d16ff147c150727c78a2c88deb4ff8a8a63498a024bfcff31d62adddbb572
data/bake/gem/github.rb CHANGED
@@ -9,10 +9,9 @@
9
9
  # @parameter branch [String] Default branch name; discovered through GitHub when omitted.
10
10
  # @parameter approvals [Integer] Number of approving reviews.
11
11
  # @parameter reviewers [Array(String)] Publishing environment reviewers: user logins or organization/team names. Omit to leave environment settings unmanaged.
12
- # @parameter signing [Boolean] Require certificate signing; when omitted, enable it if `release.cert` exists.
13
12
  # @parameter ruby [String] Ruby version for release workflows.
14
13
  # @returns [Array(String)] Generated paths relative to the repository root.
15
- def setup(checks:, repository: nil, branch: nil, approvals: 2, reviewers: nil, signing: nil, ruby: "3.4")
14
+ def setup(checks:, repository: nil, branch: nil, approvals: 2, reviewers: nil, ruby: "3.4")
16
15
  require "bake/gem/github/setup"
17
16
  require "bake/gem/shell"
18
17
 
@@ -31,7 +30,6 @@ def setup(checks:, repository: nil, branch: nil, approvals: 2, reviewers: nil, s
31
30
  reviewers: reviewers,
32
31
  ruby: ruby,
33
32
  }
34
- options[:signing] = signing unless signing.nil?
35
33
 
36
34
  Bake::Gem::GitHub::Setup.new(context.root).generate(**options)
37
35
  end
@@ -66,11 +66,11 @@ bundle exec bake gem:github:setup:plan publisher=true
66
66
 
67
67
  This adds `trusted_publisher_status` to the plan, including `configured` and the matching registration. The default plan only reports expected RubyGems values and does not authenticate to RubyGems. Authentication, ownership, and API failures stop the task rather than being reported as a missing registration.
68
68
 
69
- For a gem that has never been published, configure a pending publisher manually. Account ownership, MFA enrollment, the GitHub environment, and signing bootstrap remain manual setup steps. See [RubyGems Trusted Publishing](https://guides.rubygems.org/trusted-publishing/) for account setup. Trusted Publishing supplies the publishing credential for each release, so a long-lived RubyGems API key is unnecessary.
69
+ For a gem that has never been published, configure a pending publisher manually. Account ownership, MFA enrollment, and the GitHub environment remain manual setup steps. See [RubyGems Trusted Publishing](https://guides.rubygems.org/trusted-publishing/) for account setup. Trusted Publishing supplies the publishing credential for each release, so a long-lived RubyGems API key is unnecessary.
70
70
 
71
- When `release.cert` exists, setup enables certificate signing. Commit the public certificate and install its matching private key as `GEM_SIGNING_KEY`, either in the `rubygems` environment or as an organization secret available to the repository. The publisher checks certificate validity, key matching, and package signatures. Use `signing=false` during setup to disable certificate signing.
71
+ Publishing builds gems without RubyGems certificate signatures. Sigstore and GitHub provenance attestations bind the package to its source and release workflow; no separate certificate or private signing key is required.
72
72
 
73
- Ensure another maintainer can administer the repository and recover its RubyGems account and signing key.
73
+ Ensure another maintainer can administer the repository and recover its RubyGems account.
74
74
 
75
75
  ## Authorize publishing
76
76
 
@@ -133,6 +133,8 @@ git diff
133
133
 
134
134
  This updates managed files in the working tree and returns their changed paths. Review the diff and selectively retain repository customizations before committing. The task does not stage, commit, or change remote settings. Repeated updates produce no further changes unless customizations differ from the templates. Apply changed rulesets after the corresponding workflows are running.
135
135
 
136
+ Updating removes the obsolete `signing` configuration and `GEM_SIGNING_KEY` workflow reference. The publisher ignores legacy certificate-signing settings and always builds unsigned packages. Remove `cert_chain`, `signing_key`, and unused public certificates from your gem project when migrating. Attestation verification and RubyGems Trusted Publishing remain required.
137
+
136
138
  To enable rebase merging on an existing installation, regenerate and merge `release-validate.yaml` so it runs `gem:github:release:validate`, which requires single-commit release PRs. Then review `gem:github:setup:plan` and run `gem:github:setup:apply` to allow rebase merging in the managed rules. Enable rebase merging in repository settings as well. Upgrading the gem alone does not update workflows or live rules.
137
139
 
138
140
  Regenerate existing workflows to adopt publishing on `push` instead of `pull_request_target`. The workflow filename and `rubygems` environment remain the same, so the RubyGems Trusted Publisher configuration does not change. No exception to GitHub's `pull_request_target` execution policy is needed. The resolve task continues to accept PR numbers from older workflows while you migrate.
@@ -36,7 +36,7 @@ Merging into the configured default branch triggers `release-publish.yaml` throu
36
36
 
37
37
  Each release must land as the tip of its own push, as it does when merging a PR through GitHub. Later pushes do not change a pending release's source: inspection and publishing remain pinned to the original commit, and reruns use the same event. Do not combine a release and later changes into one direct push. If you automate merging, use a GitHub App or personal access token; pushes made using a workflow's `GITHUB_TOKEN` do not trigger another workflow.
38
38
 
39
- Only validated releases enter the publishing queue and request approval from the `rubygems` environment when required. Ordinary pushes cannot replace them in that queue. The publishing job retains the existing signing, attestation, and artifact recovery checks.
39
+ Only validated releases enter the publishing queue and request approval from the `rubygems` environment when required. Ordinary pushes cannot replace them in that queue. The publishing job retains attestation and artifact recovery checks.
40
40
 
41
41
  ## Resume interrupted preparation
42
42
 
@@ -6,7 +6,7 @@ Use this when checking a completed release or confirming which source commit pro
6
6
 
7
7
  ## What publishing verifies
8
8
 
9
- After squash, rebase, or merge, the publishing workflow verifies GitHub's merged PR record and ancestry, then checks out the exact resulting commit. Each release PR contains one commit, so the resulting commit's **first parent** is the default branch immediately before the release landed. Later development on the default branch is allowed. Publishing regenerates against that first parent, builds in a clean worktree, optionally certificate-signs, and creates two attestations over the final bytes:
9
+ After squash, rebase, or merge, the publishing workflow verifies GitHub's merged PR record and ancestry, then checks out the exact resulting commit. Each release PR contains one commit, so the resulting commit's **first parent** is the default branch immediately before the release landed. Later development on the default branch is allowed. Publishing regenerates against that first parent, builds an unsigned gem in a clean worktree, and creates two attestations over the final bytes:
10
10
 
11
11
  - A Sigstore bundle submitted explicitly with `gem push --attestation` using RubyGems 4.0.21.
12
12
  - GitHub's native SLSA provenance covering both the gem and `release.json`. This signed receipt binds the gem digest to the exact release commit, even when the workflow's own default-branch revision is newer.
@@ -8,7 +8,6 @@ require_relative "backup"
8
8
  require_relative "registry"
9
9
  require "bake/releases"
10
10
  require "digest"
11
- require "openssl"
12
11
 
13
12
  module Bake
14
13
  module Gem
@@ -28,7 +27,7 @@ module Bake
28
27
 
29
28
  # Build or restore this workflow run's artifact, after validating the actual merged commit.
30
29
  # @parameter number [String | Integer] The merged release PR number.
31
- # @returns [Hash] The release receipt. Extends {Project#inspect_release} metadata with `file`, `sha256`, `run_id`, and `signing`; writes the receipt to `pkg/release.json` and Actions outputs when configured.
30
+ # @returns [Hash] The release receipt. Extends {Project#inspect_release} metadata with `file`, `sha256`, and `run_id`; writes the receipt to `pkg/release.json` and Actions outputs when configured.
32
31
  # @raises [RuntimeError] If the workflow identity, source, or retained artifact is invalid, or published bytes cannot be recovered.
33
32
  def build(number)
34
33
  guard_environment
@@ -165,7 +164,6 @@ module Bake
165
164
  file: filename,
166
165
  sha256: Digest::SHA256.file(package).hexdigest,
167
166
  run_id: run,
168
- signing: @config.fetch("signing"),
169
167
  )
170
168
  File.write(File.join(path, "release.json"), JSON.pretty_generate(receipt) + "\n")
171
169
 
@@ -198,10 +196,8 @@ module Bake
198
196
  end
199
197
  end
200
198
 
201
- # Verify the optional certificate signature and both attestation formats.
199
+ # Verify both attestation formats.
202
200
  def verify_artifact(package, bundle)
203
- verify_certificate(package) if @config.fetch("signing")
204
-
205
201
  identity = "https://github.com/#{@repository}/.github/workflows/release-publish.yaml@refs/heads/#{@config.fetch('branch')}"
206
202
  gem_command(
207
203
  "exec", "sigstore-cli:0.2.3", "verify", package, "--bundle", bundle,
@@ -347,34 +343,8 @@ module Bake
347
343
  raise "Publishing requires the default branch workflow." unless ENV["GITHUB_REF"] == "refs/heads/#{@config.fetch('branch')}"
348
344
  end
349
345
 
350
- def verify_certificate(path)
351
- policy = ::Gem::Security::Policy.new("Release", only_trusted: false)
352
- package = ::Gem::Package.new(path, policy)
353
- package.verify
354
-
355
- signer = OpenSSL::X509::Certificate.new(package.spec.cert_chain.last)
356
- expected = OpenSSL::X509::Certificate.new(File.read(File.join(@root, "release.cert")))
357
- raise "Package signer differs from release.cert." unless signer.to_der == expected.to_der
358
- end
359
-
360
346
  def build_package(path)
361
- unless @config.fetch("signing")
362
- return @release.worktree("HEAD"){|source| @release.bake(source, "gem:build", root: path, signing_key: false)}
363
- end
364
-
365
- certificate = OpenSSL::X509::Certificate.new(File.read(File.join(@root, "release.cert")))
366
- key = OpenSSL::PKey.read(ENV.fetch("GEM_SIGNING_KEY"))
367
- raise "Signing key does not match release.cert." unless certificate.check_private_key(key)
368
- raise "Signing certificate is not currently valid." unless (certificate.not_before..certificate.not_after).cover?(Time.now)
369
-
370
- return Tempfile.create("gem-signing-key") do |file|
371
- file.chmod(0600)
372
- file.write(ENV.fetch("GEM_SIGNING_KEY"))
373
- file.flush
374
- package = @release.worktree("HEAD"){|source| @release.bake(source, "gem:build", root: path, signing_key: file.path)}
375
- verify_certificate(package)
376
- package
377
- end
347
+ return @release.worktree("HEAD"){|source| @release.bake(source, "gem:build", root: path, signing_key: false)}
378
348
  end
379
349
 
380
350
  def output(receipt, restored:)
@@ -24,11 +24,10 @@ module Bake
24
24
  # @parameter checks [Array(String)] Required CI job names; release validation is added automatically.
25
25
  # @parameter approvals [Integer] Required approvals, between one and six.
26
26
  # @parameter reviewers [Array(String) | Nil] Publishing environment reviewers, as user logins or organization/team names. Nil leaves environment settings unmanaged.
27
- # @parameter signing [Boolean] Whether publishing requires the certificate and matching private key.
28
27
  # @parameter ruby [String] The Ruby version used by release workflows.
29
28
  # @returns [Array(String)] Generated paths relative to the repository root.
30
29
  # @raises [RuntimeError] If configuration is invalid or an existing generated file differs.
31
- def generate(repository:, branch: "main", checks:, approvals: 2, reviewers: nil, signing: File.file?(File.join(@root, "release.cert")), ruby: "3.4")
30
+ def generate(repository:, branch: "main", checks:, approvals: 2, reviewers: nil, ruby: "3.4")
32
31
  raise "Expected owner/repository." unless repository.match?(/\A[\w.-]+\/[\w.-]+\z/)
33
32
  raise "Unsupported branch name." unless branch.match?(/\A[\w.\/-]+\z/)
34
33
  raise "Select the required CI check names." if checks.empty?
@@ -40,7 +39,6 @@ module Bake
40
39
  "branch" => branch,
41
40
  "checks" => (checks + ["Release validation"]).uniq,
42
41
  "approvals" => approvals,
43
- "signing" => signing,
44
42
  "ruby" => ruby,
45
43
  "environment" => "rubygems",
46
44
  }
@@ -145,10 +143,10 @@ module Bake
145
143
  end
146
144
 
147
145
  def render(config)
146
+ config.delete("signing")
148
147
  self.class.validate_reviewers(config["reviewers"]) if config.key?("reviewers")
149
148
  branch = config.fetch("branch")
150
149
  ruby = config.fetch("ruby")
151
- signing = config.fetch("signing")
152
150
 
153
151
  templates = File.expand_path("../../../../templates", __dir__)
154
152
  files = {"config/release.yaml" => YAML.dump(config)}
@@ -9,7 +9,7 @@ module Bake
9
9
  module Gem
10
10
  # GitHub pull request and release orchestration for bake-gem.
11
11
  module GitHub
12
- VERSION = "0.6.0"
12
+ VERSION = "0.7.0"
13
13
  end
14
14
  end
15
15
  end
data/readme.md CHANGED
@@ -24,6 +24,11 @@ Please see the [project documentation](https://socketry.github.io/bake-gem-githu
24
24
 
25
25
  Please see the [project releases](https://socketry.github.io/bake-gem-github/releases/index) for all releases.
26
26
 
27
+ ### v0.7.0
28
+
29
+ - Remove RubyGems certificate signing and its private-key requirement. Publishing always builds unsigned gems and verifies Sigstore and GitHub provenance attestations.
30
+ - Remove the setup `signing` option. Regenerate workflows with `gem:github:setup:update` to remove legacy configuration and signing-secret references.
31
+
27
32
  ### v0.6.0
28
33
 
29
34
  - Register RubyGems trusted publishers from the gemspec and release configuration with `gem:github:setup:publisher`, reusing existing registrations and RubyGems authentication/MFA support.
@@ -67,10 +72,6 @@ Please see the [project releases](https://socketry.github.io/bake-gem-github/rel
67
72
  - Preserve verified release files in a draft GitHub release before uploading to RubyGems, so reruns can recover when Actions artifacts disappear.
68
73
  - Wait for RubyGems registry propagation before finalizing releases.
69
74
 
70
- ### v0.0.1
71
-
72
- - Initial implementation.
73
-
74
75
  ## Contributing
75
76
 
76
77
  We welcome contributions to this project.
data/releases.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Releases
2
2
 
3
+ ## v0.7.0
4
+
5
+ - Remove RubyGems certificate signing and its private-key requirement. Publishing always builds unsigned gems and verifies Sigstore and GitHub provenance attestations.
6
+ - Remove the setup `signing` option. Regenerate workflows with `gem:github:setup:update` to remove legacy configuration and signing-secret references.
7
+
3
8
  ## v0.6.0
4
9
 
5
10
  - Register RubyGems trusted publishers from the gemspec and release configuration with `gem:github:setup:publisher`, reusing existing registrations and RubyGems authentication/MFA support.
@@ -68,9 +68,6 @@ jobs:
68
68
  id: build
69
69
  env:
70
70
  GITHUB_TOKEN: ${{ github.token }}
71
- <% if signing -%>
72
- GEM_SIGNING_KEY: ${{ secrets.GEM_SIGNING_KEY }}
73
- <% end -%>
74
71
  run: bundle exec bake gem:github:release:build
75
72
  - name: Sign RubyGems attestation
76
73
  if: steps.build.outputs.restored != 'true'
metadata CHANGED
@@ -1,37 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bake-gem-github
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  bindir: bin
9
- cert_chain:
10
- - |
11
- -----BEGIN CERTIFICATE-----
12
- MIIEFDCCAnygAwIBAgIBATANBgkqhkiG9w0BAQsFADAwMREwDwYDVQQKDAhTb2Nr
13
- ZXRyeTEbMBkGA1UEAwwSU29ja2V0cnkgUnVieSBHZW1zMB4XDTI2MDkyMTA3NTgx
14
- NFoXDTI3MDkyMTA3NTgxNFowMDERMA8GA1UECgwIU29ja2V0cnkxGzAZBgNVBAMM
15
- ElNvY2tldHJ5IFJ1YnkgR2VtczCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoC
16
- ggGBAM/QgjVgDzDo/xJEQoFvAzcVFP7msnswkhPJB2UDsbxXCZmers5jV512TM5s
17
- NwLHfzJiC4DcI5ax9ZYKM9Q+dS21YYagNqjtg3YPyDqR6phoibEA0VoMuInUQW68
18
- i5OkCJzYKGD2pYYVZnuFNqyM2ECUvXh/fBmvPoHbncAHhWPaCBH8mQJ8sRNc6+RV
19
- SoZZu1Yo/aW1zQ+SpZwad7s1ZmigfDNHKhJ22KwZHk+/5Zw1QXVfcajjswV0Mm2P
20
- irgjKN3fyNVkwlly63EBlR4VydT+g9QtJtqh7ee0ThhI+v4wYovf4dbLNcEBTHu1
21
- x1pGbXGx/2fBAST5eVwaXIx1V8VU22AJcBk1H2o5/1F0HfbD2HQjmFOA112KUwBW
22
- 9TtspZD3g6rCQFX53XvL9h6j2y1ukl7s5AdEzOe/x6r1MO8tSDtgcYoF89wgF/88
23
- Q/Eski0FckQ+znfESZcFcpzs2sPDoYW6SNVX4tZcNty85Y6WBHfHKio14x63PeyC
24
- CG1gMwIDAQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU
25
- SuMc0x24Xshtaa8SQVkBr2Z5WzIwDQYJKoZIhvcNAQELBQADggGBABI62ey5lDWm
26
- j8jsTQaNBMBb7LbKS3XkBwyL1UNGEwlicp399rJDeuNgVSHqBCZ/nE4yleNjgW9Y
27
- N6DKdxXCvXmFUoHvUINeAvThHxmlEGhSfXl1x55xHEig0rEP4jgdjnYdQI4fqeOM
28
- zIDN0F3ruArke4Y62SQgWVN7vspdAA41hBIRl1vsvs0KWG8DIVQ8cmR+TG6zjOmK
29
- iUiUZGNPnStV1O1xW83c+Ba4Am0krP6/forxDPhRvTehqkVYvMdPfYcICNb5IM58
30
- 5vaYvuj5AtfZuZWN0F/0KtSphhNC17rh6h8QmuYdMJ1clvlrkiEaO1UjPVwjgtxC
31
- x/ARh5X6q0/YTXl4r7EfSJEeqW7qhgu9EUj3mGIPHYdX0Dqih/NgK20F3GvQtTfB
32
- 7sse0duKBHXONYVwKAsceUVvqtCfyF608bCilCkbhw3QaInRj+BkRQKJ5Tuj2PZR
33
- 76a/hwaV2wWn5RtAFBaUQzQdo/xTqJ7IkwaFjOZe/QyvyoRjCK9Rdg==
34
- -----END CERTIFICATE-----
9
+ cert_chain: []
35
10
  date: 1980-01-02 00:00:00.000000000 Z
36
11
  dependencies:
37
12
  - !ruby/object:Gem::Dependency
@@ -111,7 +86,6 @@ files:
111
86
  - lib/bake/gem/github/version.rb
112
87
  - license.md
113
88
  - readme.md
114
- - release.cert
115
89
  - releases.md
116
90
  - templates/release-prepare.yaml.erb
117
91
  - templates/release-publish.yaml.erb
checksums.yaml.gz.sig DELETED
Binary file
data/release.cert DELETED
@@ -1,24 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIEFDCCAnygAwIBAgIBATANBgkqhkiG9w0BAQsFADAwMREwDwYDVQQKDAhTb2Nr
3
- ZXRyeTEbMBkGA1UEAwwSU29ja2V0cnkgUnVieSBHZW1zMB4XDTI2MDkyMTA3NTgx
4
- NFoXDTI3MDkyMTA3NTgxNFowMDERMA8GA1UECgwIU29ja2V0cnkxGzAZBgNVBAMM
5
- ElNvY2tldHJ5IFJ1YnkgR2VtczCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoC
6
- ggGBAM/QgjVgDzDo/xJEQoFvAzcVFP7msnswkhPJB2UDsbxXCZmers5jV512TM5s
7
- NwLHfzJiC4DcI5ax9ZYKM9Q+dS21YYagNqjtg3YPyDqR6phoibEA0VoMuInUQW68
8
- i5OkCJzYKGD2pYYVZnuFNqyM2ECUvXh/fBmvPoHbncAHhWPaCBH8mQJ8sRNc6+RV
9
- SoZZu1Yo/aW1zQ+SpZwad7s1ZmigfDNHKhJ22KwZHk+/5Zw1QXVfcajjswV0Mm2P
10
- irgjKN3fyNVkwlly63EBlR4VydT+g9QtJtqh7ee0ThhI+v4wYovf4dbLNcEBTHu1
11
- x1pGbXGx/2fBAST5eVwaXIx1V8VU22AJcBk1H2o5/1F0HfbD2HQjmFOA112KUwBW
12
- 9TtspZD3g6rCQFX53XvL9h6j2y1ukl7s5AdEzOe/x6r1MO8tSDtgcYoF89wgF/88
13
- Q/Eski0FckQ+znfESZcFcpzs2sPDoYW6SNVX4tZcNty85Y6WBHfHKio14x63PeyC
14
- CG1gMwIDAQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU
15
- SuMc0x24Xshtaa8SQVkBr2Z5WzIwDQYJKoZIhvcNAQELBQADggGBABI62ey5lDWm
16
- j8jsTQaNBMBb7LbKS3XkBwyL1UNGEwlicp399rJDeuNgVSHqBCZ/nE4yleNjgW9Y
17
- N6DKdxXCvXmFUoHvUINeAvThHxmlEGhSfXl1x55xHEig0rEP4jgdjnYdQI4fqeOM
18
- zIDN0F3ruArke4Y62SQgWVN7vspdAA41hBIRl1vsvs0KWG8DIVQ8cmR+TG6zjOmK
19
- iUiUZGNPnStV1O1xW83c+Ba4Am0krP6/forxDPhRvTehqkVYvMdPfYcICNb5IM58
20
- 5vaYvuj5AtfZuZWN0F/0KtSphhNC17rh6h8QmuYdMJ1clvlrkiEaO1UjPVwjgtxC
21
- x/ARh5X6q0/YTXl4r7EfSJEeqW7qhgu9EUj3mGIPHYdX0Dqih/NgK20F3GvQtTfB
22
- 7sse0duKBHXONYVwKAsceUVvqtCfyF608bCilCkbhw3QaInRj+BkRQKJ5Tuj2PZR
23
- 76a/hwaV2wWn5RtAFBaUQzQdo/xTqJ7IkwaFjOZe/QyvyoRjCK9Rdg==
24
- -----END CERTIFICATE-----
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
Binary file