kettle-dev 2.3.6 → 2.3.7

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: 273f836980d8c8210b2aa13b46a7e8abe3c20890caaff4be48303f807ece69bb
4
- data.tar.gz: 2cc93d325d82e8f82af073115f5063d684468dbf15978c5300ce44c1384ae9ab
3
+ metadata.gz: 4e582c50d05608c5e338caeac74f7c339fb2d66010b58c8cce836a78d8e4ded5
4
+ data.tar.gz: e9ce2e0857dbf506017c8ddab46c5049ffc5003af5778a2e2954dd759cee8183
5
5
  SHA512:
6
- metadata.gz: 891edcb0fde5e40b98f8f221065e5fa283d249700dfb9e216fc8da6668c6dabfc9cf0ba6892b9f202285d03304a31056dc62e5ee6f56a1a760629d971606d07a
7
- data.tar.gz: 10de64450794d5b99b0db2b455a8ed05589e18dacafd1299eb6d01546a7ca759dae64739213b4b64dbc2acbf80c0095d39553027496128977de4eab3267a293f
6
+ metadata.gz: cea8e2be14321cc1e70534197cd2b01dea382a62f6de651ebfb35ccf1025acdfb0a11ee74c31e7c5c78dfe216ec51fdbe21a02f4f1358b6e8b526365b9a5f5af
7
+ data.tar.gz: 47dada022728fd8414d252df3d01ecb992f18ccea69ed20ed8670dbd87ab3cf7f205bb488a48ab95039a4548a0b278c5e8aaf7099b7d94248539db5e7630c26b
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,19 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [2.3.7] - 2026-07-18
34
+
35
+ - TAG: [v2.3.7][2.3.7t]
36
+ - COVERAGE: 91.84% -- 4311/4694 lines in 36 files
37
+ - BRANCH COVERAGE: 74.20% -- 1694/2283 branches in 36 files
38
+ - 56.25% documented
39
+
40
+ ### Fixed
41
+
42
+ - `kettle-gha-sha-pins` now canonicalizes duplicate equivalent action tags,
43
+ preferring explicit release tags such as `v7.0.0` over major-line aliases
44
+ such as `v7`, so adjacent version comments do not flip between spellings.
45
+
33
46
  ## [2.3.6] - 2026-07-17
34
47
 
35
48
  - TAG: [v2.3.6][2.3.6t]
@@ -2523,7 +2536,9 @@ Please file a bug if you notice a violation of semantic versioning.
2523
2536
  - Selecting will run the selected workflow via `act`
2524
2537
  - This may move to its own gem in the future.
2525
2538
 
2526
- [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v2.3.6...HEAD
2539
+ [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v2.3.7...HEAD
2540
+ [2.3.7]: https://github.com/kettle-dev/kettle-dev/compare/v2.3.6...v2.3.7
2541
+ [2.3.7t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v2.3.7
2527
2542
  [2.3.6]: https://github.com/kettle-dev/kettle-dev/compare/v2.3.5...v2.3.6
2528
2543
  [2.3.6t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v2.3.6
2529
2544
  [2.3.5]: https://github.com/kettle-dev/kettle-dev/compare/v2.3.4...v2.3.5
data/README.md CHANGED
@@ -887,7 +887,7 @@ Thanks for RTFM. ☺️
887
887
  [📌gitmoji]: https://gitmoji.dev
888
888
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
889
889
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
890
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-4.673-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
890
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-4.694-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
891
891
  [🔐security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
892
892
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
893
893
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -35,6 +35,23 @@ module Kettle
35
35
  VERSION_COMMENT_SUFFIX_RE = /\A\s+#\s*v?(?<version>\d+(?:\.\d+\.\d+(?:[-.]?[0-9A-Za-z.-]+)?)?)/
36
36
  VERSION_COMMENT_REPLACEMENT_RE = /\A(?<prefix>\s+#\s*)v?\d+(?:\.\d+\.\d+(?:[-.]?[0-9A-Za-z.-]+)?)?/
37
37
 
38
+ def self.release_version_sort_key(entry)
39
+ [entry.fetch(:version_obj), *release_version_specificity(entry)]
40
+ end
41
+
42
+ def self.release_version_specificity(entry)
43
+ text = entry.fetch(:tag).to_s.sub(/\A[vV]/, "")
44
+ release_text, suffix = text.split(/[-.](?=[A-Za-z])/, 2)
45
+ numeric_segments = release_text.to_s.split(".").take_while { |part| part.match?(/\A\d+\z/) }
46
+
47
+ [
48
+ numeric_segments.length,
49
+ suffix ? 0 : 1,
50
+ text.length,
51
+ entry.fetch(:tag).to_s
52
+ ]
53
+ end
54
+
38
55
  def initialize(argv, err: $stderr)
39
56
  @argv = argv
40
57
  @err = err
@@ -521,7 +538,7 @@ module Kettle
521
538
  end
522
539
  end
523
540
 
524
- candidates.max_by { |entry| entry[:version_obj] }
541
+ candidates.max_by { |entry| release_version_sort_key(entry) }
525
542
  end
526
543
 
527
544
  def major_line_version?(value)
@@ -538,7 +555,7 @@ module Kettle
538
555
  entry[:version_obj] > current &&
539
556
  (!entry[:version_obj].prerelease? || current.prerelease?)
540
557
  end
541
- .max_by { |entry| entry[:version_obj] }
558
+ .max_by { |entry| release_version_sort_key(entry) }
542
559
  end
543
560
 
544
561
  def determine_upgrade_plan(old_ref:, repo_ref:, versions:, upgrade_level:, client:)
@@ -645,6 +662,10 @@ module Kettle
645
662
  sha
646
663
  end
647
664
 
665
+ def release_version_sort_key(entry)
666
+ self.class.release_version_sort_key(entry)
667
+ end
668
+
648
669
  def short_sha?(candidate)
649
670
  return false unless candidate
650
671
  WEAK_SHA_RE.match?(candidate)
@@ -1061,10 +1082,10 @@ module Kettle
1061
1082
  full_semver_entries = entries.reject { |entry| major_line_version?(entry[:version]) }
1062
1083
  {
1063
1084
  "patch" => full_semver_entries.group_by { |entry| entry[:version_obj].segments[0, 2].join(".") }
1064
- .transform_values { |group| serialize_target(group.max_by { |entry| entry[:version_obj] }) },
1085
+ .transform_values { |group| serialize_target(group.max_by { |entry| GhaShaPinsCLI.release_version_sort_key(entry) }) },
1065
1086
  "minor" => full_semver_entries.group_by { |entry| entry[:version_obj].segments[0].to_s }
1066
- .transform_values { |group| serialize_target(group.max_by { |entry| entry[:version_obj] }) },
1067
- "major" => {"*" => serialize_target(entries.max_by { |entry| entry[:version_obj] })}
1087
+ .transform_values { |group| serialize_target(group.max_by { |entry| GhaShaPinsCLI.release_version_sort_key(entry) }) },
1088
+ "major" => {"*" => serialize_target(entries.max_by { |entry| GhaShaPinsCLI.release_version_sort_key(entry) })}
1068
1089
  }
1069
1090
  end
1070
1091
 
@@ -1212,12 +1233,34 @@ module Kettle
1212
1233
  }
1213
1234
  end
1214
1235
  releases.concat(tag_versions)
1236
+ releases = canonicalize_equivalent_release_versions(releases)
1215
1237
 
1216
- releases.sort_by! { |release| release[:version_obj] }
1238
+ releases.sort_by! { |release| GhaShaPinsCLI.release_version_sort_key(release) }
1217
1239
  releases.reverse!
1218
1240
  releases
1219
1241
  end
1220
1242
 
1243
+ def canonicalize_equivalent_release_versions(releases)
1244
+ groups = []
1245
+ releases.each do |release|
1246
+ group = groups.find { |entries| equivalent_release_tag?(entries.first, release) }
1247
+ if group
1248
+ group << release
1249
+ else
1250
+ groups << [release]
1251
+ end
1252
+ end
1253
+
1254
+ groups.map { |entries| entries.max_by { |entry| GhaShaPinsCLI.release_version_sort_key(entry) } }
1255
+ end
1256
+
1257
+ def equivalent_release_tag?(left, right)
1258
+ left[:version_obj] == right[:version_obj] &&
1259
+ left[:sha] &&
1260
+ right[:sha] &&
1261
+ left[:sha] == right[:sha]
1262
+ end
1263
+
1221
1264
  def parse_release_version_text(value)
1222
1265
  normalized = value.to_s.sub(/\A[vV]/, "")
1223
1266
  return nil unless normalized.match?(/\A(?:\d+|\d+\.\d+\.\d+(?:[-.]?[0-9A-Za-z.-]+)?)\z/)
@@ -3,7 +3,7 @@
3
3
  module Kettle
4
4
  module Dev
5
5
  module Version
6
- VERSION = "2.3.6"
6
+ VERSION = "2.3.7"
7
7
  end
8
8
  VERSION = Version::VERSION # Traditional Constant Location
9
9
  end
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: 2.3.6
4
+ version: 2.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -313,10 +313,10 @@ licenses:
313
313
  - AGPL-3.0-only
314
314
  metadata:
315
315
  homepage_uri: https://kettle-dev.galtzo.com
316
- source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v2.3.6
317
- changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v2.3.6/CHANGELOG.md
316
+ source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v2.3.7
317
+ changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v2.3.7/CHANGELOG.md
318
318
  bug_tracker_uri: https://github.com/kettle-dev/kettle-dev/issues
319
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/2.3.6
319
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/2.3.7
320
320
  funding_uri: https://github.com/sponsors/pboling
321
321
  wiki_uri: https://github.com/kettle-dev/kettle-dev/wiki
322
322
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file