kettle-dev 3.0.24 → 3.0.26

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: 1582fd7f0bbd245a22585ae5194634a4196eba3a8f4fab15f7b021b07f26d369
4
+ data.tar.gz: d2797c4e806c11031b7c981f5110b4d3b5e9ba06bed4b285ee383c16c9c60eec
5
5
  SHA512:
6
- metadata.gz: bc3c91ff5678b13f405174b3400aa45cd6d1536e844ec4180762d44455b30e7fc72bd0ca0fcf6d1c07c911ab9a2c02e7593da9b71126efa7f1d4b1f5977fbeb2
7
- data.tar.gz: f725c2f04abcc0b1c3127d9bc86dac6e853aabdcd85a026819fc18dee8246f2ab614d4089588aeb89bca8713c2f589cde03394e0939d806fc5d897ae4335fd18
6
+ metadata.gz: 561944e1c04ad428df2cf80c4bbd86ae65330b1a15f0ce749502a94ad788fa529602200a1db82df57e07ea8f003fb918da69661c2ff91d28b5598b12f7b6a3c5
7
+ data.tar.gz: ad54887f5ca42fb2f494ab7545aa1adfb5804e3dfe8a37ca3ead4097580f29330ee68773f5a8c0fc37640770113a6af9073fcd45cef2611871e5d75e6ec1fa67
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,28 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [3.0.26] - 2026-08-31
34
+
35
+ - TAG: [v3.0.26][3.0.26t]
36
+ - COVERAGE: 91.60% -- 5967/6514 lines in 47 files
37
+ - BRANCH COVERAGE: 76.17% -- 2286/3001 branches in 47 files
38
+ - 50.47% documented
39
+
40
+ ### Fixed
41
+
42
+ - Refresh existing GitHub Release notes while backfilling missing assets.
43
+
44
+ ## [3.0.25] - 2026-08-31
45
+
46
+ - TAG: [v3.0.25][3.0.25t]
47
+ - COVERAGE: 91.30% -- 5949/6516 lines in 47 files
48
+ - BRANCH COVERAGE: 76.09% -- 2282/2999 branches in 47 files
49
+ - 50.47% documented
50
+
51
+ ### Fixed
52
+
53
+ - Attach missing assets when recovering an existing GitHub Release.
54
+
33
55
  ## [3.0.24] - 2026-08-31
34
56
 
35
57
  - TAG: [v3.0.24][3.0.24t]
@@ -3725,7 +3747,11 @@ Please file a bug if you notice a violation of semantic versioning.
3725
3747
  - Selecting will run the selected workflow via `act`
3726
3748
  - This may move to its own gem in the future.
3727
3749
 
3728
- [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.24...HEAD
3750
+ [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.26...HEAD
3751
+ [3.0.26]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.25...v3.0.26
3752
+ [3.0.26t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.26
3753
+ [3.0.25]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.24...v3.0.25
3754
+ [3.0.25t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.25
3729
3755
  [3.0.24]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.23...v3.0.24
3730
3756
  [3.0.24t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.24
3731
3757
  [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.514-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,18 @@ 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
+ update_existing_github_release_with_assets(
3073
+ owner: owner,
3074
+ repo: repo,
3075
+ token: token,
3076
+ tag: tag,
3077
+ title: title,
3078
+ body: body,
3079
+ assets: assets
3080
+ )
3072
3081
  else
3073
3082
  [false, "HTTP #{res.code}: #{res.body}"]
3074
3083
  end
@@ -3077,6 +3086,46 @@ module Kettle
3077
3086
  [false, "#{e.class}: #{e.message}"]
3078
3087
  end
3079
3088
 
3089
+ def update_existing_github_release_with_assets(owner:, repo:, token:, tag:, title:, body:, assets:)
3090
+ release, error = github_release_for_tag(owner: owner, repo: repo, token: token, tag: tag)
3091
+ return [false, error] unless release
3092
+
3093
+ updated, error = github_update_release_by_id(
3094
+ release.fetch("id"),
3095
+ owner: owner,
3096
+ repo: repo,
3097
+ token: token,
3098
+ title: title,
3099
+ body: body
3100
+ )
3101
+ return [false, error] unless updated
3102
+
3103
+ existing_names = Array(release["assets"]).filter_map { |asset| asset["name"] }.to_set
3104
+ missing_assets = Array(assets).reject { |asset| existing_names.include?(File.basename(asset)) }
3105
+ return [true, "updated existing release with all assets present"] if missing_assets.empty?
3106
+
3107
+ asset_messages = missing_assets.map do |asset|
3108
+ github_upload_release_asset(release.fetch("id"), owner: owner, repo: repo, token: token, path: asset)
3109
+ end
3110
+ failed_asset = asset_messages.find { |ok, _message| !ok }
3111
+ asset_noun = asset_messages.one? ? "asset" : "assets"
3112
+ failed_asset || [true, "updated existing release with #{asset_messages.length} #{asset_noun} uploaded"]
3113
+ end
3114
+
3115
+ def github_release_for_tag(owner:, repo:, token:, tag:)
3116
+ uri = URI("https://api.github.com/repos/#{owner}/#{repo}/releases/tags/#{tag}")
3117
+ request = Net::HTTP::Get.new(uri)
3118
+ request["Accept"] = "application/vnd.github+json"
3119
+ request["Authorization"] = "token #{token}"
3120
+ request["User-Agent"] = "kettle-dev-release-cli"
3121
+ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(request) }
3122
+ return [JSON.parse(response.body), nil] if response.is_a?(Net::HTTPSuccess)
3123
+
3124
+ [nil, "release #{tag} was not found (HTTP #{response.code})"]
3125
+ rescue => e
3126
+ [nil, "#{e.class}: #{e.message}"]
3127
+ end
3128
+
3080
3129
  def github_upload_release_asset(release_id, owner:, repo:, token:, path:)
3081
3130
  path = File.expand_path(path)
3082
3131
  return [false, "asset does not exist: #{path}"] unless File.file?(path)
@@ -3098,15 +3147,13 @@ module Kettle
3098
3147
  end
3099
3148
 
3100
3149
  def github_update_release(owner:, repo:, token:, tag:, title:, body:)
3101
- lookup = URI("https://api.github.com/repos/#{owner}/#{repo}/releases/tags/#{tag}")
3102
- get = Net::HTTP::Get.new(lookup)
3103
- get["Accept"] = "application/vnd.github+json"
3104
- get["Authorization"] = "token #{token}"
3105
- get["User-Agent"] = "kettle-dev-release-cli"
3106
- release = Net::HTTP.start(lookup.host, lookup.port, use_ssl: true) { |http| http.request(get) }
3107
- return [false, "release #{tag} was not found (HTTP #{release.code})"] unless release.is_a?(Net::HTTPSuccess)
3108
-
3109
- id = JSON.parse(release.body).fetch("id")
3150
+ release, error = github_release_for_tag(owner: owner, repo: repo, token: token, tag: tag)
3151
+ return [false, error] unless release
3152
+
3153
+ github_update_release_by_id(release.fetch("id"), owner: owner, repo: repo, token: token, title: title, body: body)
3154
+ end
3155
+
3156
+ def github_update_release_by_id(id, owner:, repo:, token:, title:, body:)
3110
3157
  uri = URI("https://api.github.com/repos/#{owner}/#{repo}/releases/#{id}")
3111
3158
  request = Net::HTTP::Patch.new(uri)
3112
3159
  request["Accept"] = "application/vnd.github+json"
@@ -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.26"
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.26
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.26
404
+ changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.26/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.26
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