kettle-dev 3.0.24 → 3.0.25

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: d210f4626dc19b866996b80ae87c61627e94a7b5c5844262f7b6178fbbacf056
4
- data.tar.gz: d4d1775405e309dc934d5258cb9ca9fc0503047188f19c5c04e0e878e172216c
3
+ metadata.gz: 2cd8d91c81ccdd9583d9891fca16e33847e99c5f27d7730c7d10f45cd4964c8f
4
+ data.tar.gz: 71bfd99738051fb53d744386489a866a90c9477613d1af2a82921bb7a4a51523
5
5
  SHA512:
6
- metadata.gz: bc3c91ff5678b13f405174b3400aa45cd6d1536e844ec4180762d44455b30e7fc72bd0ca0fcf6d1c07c911ab9a2c02e7593da9b71126efa7f1d4b1f5977fbeb2
7
- data.tar.gz: f725c2f04abcc0b1c3127d9bc86dac6e853aabdcd85a026819fc18dee8246f2ab614d4089588aeb89bca8713c2f589cde03394e0939d806fc5d897ae4335fd18
6
+ metadata.gz: 350321f82985a5dc9fd911e2e0fb11c9c5441cbc3abe8d43d64a550bab64c5a9f5a327700780eb191eeb11dbb7d5215492f5c2150f37f46618a7440d493fefb1
7
+ data.tar.gz: 45f92406c0e64bd0d16252bb14099746aac35b7a346309497ef3e8fc3d9b30adaf2497ced7b93aca7535406cecb7d6e9e840b85f2171b72ddfef18e9b3947e27
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,17 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [3.0.25] - 2026-08-31
34
+
35
+ - TAG: [v3.0.25][3.0.25t]
36
+ - COVERAGE: 91.30% -- 5949/6516 lines in 47 files
37
+ - BRANCH COVERAGE: 76.09% -- 2282/2999 branches in 47 files
38
+ - 50.47% documented
39
+
40
+ ### Fixed
41
+
42
+ - Attach missing assets when recovering an existing GitHub Release.
43
+
33
44
  ## [3.0.24] - 2026-08-31
34
45
 
35
46
  - TAG: [v3.0.24][3.0.24t]
@@ -3725,7 +3736,9 @@ Please file a bug if you notice a violation of semantic versioning.
3725
3736
  - Selecting will run the selected workflow via `act`
3726
3737
  - This may move to its own gem in the future.
3727
3738
 
3728
- [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.24...HEAD
3739
+ [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.25...HEAD
3740
+ [3.0.25]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.24...v3.0.25
3741
+ [3.0.25t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.25
3729
3742
  [3.0.24]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.23...v3.0.24
3730
3743
  [3.0.24t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.24
3731
3744
  [3.0.23]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.22...v3.0.23
data/README.md CHANGED
@@ -1066,7 +1066,7 @@ Thanks for RTFM. ☺️
1066
1066
  [📌gitmoji]: https://gitmoji.dev
1067
1067
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
1068
1068
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
1069
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.494-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1069
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.516-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1070
1070
  [🔐security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
1071
1071
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
1072
1072
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -3066,9 +3066,16 @@ module Kettle
3066
3066
  failed_asset = asset_messages.find { |ok, _message| !ok }
3067
3067
  failed_asset || [true, "created with #{asset_messages.length} assets"]
3068
3068
  else
3069
- # If release already exists, treat as non-fatal
3070
3069
  if res.code.to_s == "422" && res.body.to_s.include?("already_exists")
3071
- [true, "already exists"]
3070
+ return [true, "already exists"] if Array(assets).empty?
3071
+
3072
+ upload_missing_github_release_assets(
3073
+ owner: owner,
3074
+ repo: repo,
3075
+ token: token,
3076
+ tag: tag,
3077
+ assets: assets
3078
+ )
3072
3079
  else
3073
3080
  [false, "HTTP #{res.code}: #{res.body}"]
3074
3081
  end
@@ -3077,6 +3084,36 @@ module Kettle
3077
3084
  [false, "#{e.class}: #{e.message}"]
3078
3085
  end
3079
3086
 
3087
+ def upload_missing_github_release_assets(owner:, repo:, token:, tag:, assets:)
3088
+ release, error = github_release_for_tag(owner: owner, repo: repo, token: token, tag: tag)
3089
+ return [false, error] unless release
3090
+
3091
+ existing_names = Array(release["assets"]).filter_map { |asset| asset["name"] }.to_set
3092
+ missing_assets = Array(assets).reject { |asset| existing_names.include?(File.basename(asset)) }
3093
+ return [true, "already exists with all assets present"] if missing_assets.empty?
3094
+
3095
+ asset_messages = missing_assets.map do |asset|
3096
+ github_upload_release_asset(release.fetch("id"), owner: owner, repo: repo, token: token, path: asset)
3097
+ end
3098
+ failed_asset = asset_messages.find { |ok, _message| !ok }
3099
+ asset_noun = asset_messages.one? ? "asset" : "assets"
3100
+ failed_asset || [true, "already exists with #{asset_messages.length} #{asset_noun} uploaded"]
3101
+ end
3102
+
3103
+ def github_release_for_tag(owner:, repo:, token:, tag:)
3104
+ uri = URI("https://api.github.com/repos/#{owner}/#{repo}/releases/tags/#{tag}")
3105
+ request = Net::HTTP::Get.new(uri)
3106
+ request["Accept"] = "application/vnd.github+json"
3107
+ request["Authorization"] = "token #{token}"
3108
+ request["User-Agent"] = "kettle-dev-release-cli"
3109
+ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(request) }
3110
+ return [JSON.parse(response.body), nil] if response.is_a?(Net::HTTPSuccess)
3111
+
3112
+ [nil, "release #{tag} was not found (HTTP #{response.code})"]
3113
+ rescue => e
3114
+ [nil, "#{e.class}: #{e.message}"]
3115
+ end
3116
+
3080
3117
  def github_upload_release_asset(release_id, owner:, repo:, token:, path:)
3081
3118
  path = File.expand_path(path)
3082
3119
  return [false, "asset does not exist: #{path}"] unless File.file?(path)
@@ -5,7 +5,7 @@ module Kettle
5
5
  # Version namespace for this gem.
6
6
  module Version
7
7
  # Current gem version.
8
- VERSION = "3.0.24"
8
+ VERSION = "3.0.25"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kettle-dev
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.24
4
+ version: 3.0.25
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -400,10 +400,10 @@ licenses:
400
400
  - AGPL-3.0-only
401
401
  metadata:
402
402
  homepage_uri: https://kettle-dev.galtzo.com
403
- source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.0.24
404
- changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.24/CHANGELOG.md
403
+ source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.0.25
404
+ changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.25/CHANGELOG.md
405
405
  bug_tracker_uri: https://github.com/kettle-dev/kettle-dev/issues
406
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.0.24
406
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.0.25
407
407
  funding_uri: https://github.com/sponsors/pboling
408
408
  wiki_uri: https://github.com/kettle-dev/kettle-dev/wiki
409
409
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file