kettle-dev 1.0.12 → 1.0.14

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: 18dc37569a34008ec953339ce7fd69e285bf007f2f1dd035de13856fb2d621ec
4
- data.tar.gz: b3afeca255b2fb10fd86c4e48a47679b8652ff7ab9f75c4b8637c7738f83e28b
3
+ metadata.gz: 61d7bcf42ac9f8dd354de12af2f45c4a000bf0fb038c17534fdb521fd9799cff
4
+ data.tar.gz: be95960f8520e6a001376909ecd3d27d9cfc56506a46d770119f11b951f0039f
5
5
  SHA512:
6
- metadata.gz: d12f7394b9aba54d138cbddc74598e03908280f6e4102c0b98a9d326e00909cc5d1cac16f1a5bced75ee694c2606e026bc772088b005abf1a69d9a1d23bf0c93
7
- data.tar.gz: 5fc72941ddcc1c21e9e56fd0fffd2eb0b603eff7d1fe60d6cdf55108b8e4c314320be1ed243e5064d89cb604e74e42bdc6756764c42dcf920bc204514fbe539b
6
+ metadata.gz: 60ddf9f6624d7bcd57a5b702fd182b8766ba133937c21c93da094738089b832a6b86ceea0528d1c116e42c701c8e2f5b56ba40312fcdd348a0c6bf0a984bbda1
7
+ data.tar.gz: 98e13824721dc2b7aa68e01cea45f6289b9c6d980606613e013fb6f238317a299b9c10cc63d4a5a65fdd312a2d9221f5463d2ce3d1a3f43f13ef417e42d0a6d9
checksums.yaml.gz.sig CHANGED
Binary file
data/.envrc CHANGED
@@ -21,7 +21,7 @@ export K_SOUP_COV_DO=true # Means you want code coverage
21
21
  export K_SOUP_COV_COMMAND_NAME="Test Coverage"
22
22
  # Available formats are html, xml, rcov, lcov, json, tty
23
23
  export K_SOUP_COV_FORMATTERS="html,xml,rcov,lcov,json,tty"
24
- export K_SOUP_COV_MIN_BRANCH=79 # Means you want to enforce X% branch coverage
24
+ export K_SOUP_COV_MIN_BRANCH=78 # Means you want to enforce X% branch coverage
25
25
  export K_SOUP_COV_MIN_LINE=97 # Means you want to enforce X% line coverage
26
26
  export K_SOUP_COV_MIN_HARD=true # Means you want the build to fail if the coverage thresholds are not met
27
27
  export K_SOUP_COV_MULTI_FORMATTERS=true
@@ -7,8 +7,8 @@ permissions:
7
7
 
8
8
  env:
9
9
  # Lower than local, which is at 100/100, because rubocop-lts isn't installed in the coverage workflow
10
- K_SOUP_COV_MIN_BRANCH: 74
11
- K_SOUP_COV_MIN_LINE: 94
10
+ K_SOUP_COV_MIN_BRANCH: 73
11
+ K_SOUP_COV_MIN_LINE: 93
12
12
  K_SOUP_COV_MIN_HARD: true
13
13
  K_SOUP_COV_FORMATTERS: "xml,rcov,lcov,tty"
14
14
  K_SOUP_COV_DO: true
@@ -116,7 +116,7 @@ jobs:
116
116
  hide_complexity: true
117
117
  indicators: true
118
118
  output: both
119
- thresholds: '94 74'
119
+ thresholds: '93 73'
120
120
  continue-on-error: ${{ matrix.experimental != 'false' }}
121
121
 
122
122
  - name: Add Coverage PR Comment
data/CHANGELOG.md CHANGED
@@ -24,6 +24,28 @@ Please file a bug if you notice a violation of semantic versioning.
24
24
  ### Fixed
25
25
  ### Security
26
26
 
27
+ ## [1.0.14] - 2025-08-28
28
+ - TAG: [v1.0.14][1.0.14t]
29
+ - COVERAGE: 97.70% -- 2125/2175 lines in 20 files
30
+ - BRANCH COVERAGE: 78.77% -- 842/1069 branches in 20 files
31
+ - 76.03% documented
32
+ ### Added
33
+ - kettle-release: Push tags to additional remotes after release
34
+ ### Changed
35
+ - Improve .gitlab-ci.yml pipeline
36
+ ### Fixed
37
+ - Removed README badges for unsupported old Ruby versions
38
+ - Minor inconsistencies in template files
39
+ - git added as a dependency to optional.gemfile instead of the example template
40
+
41
+ ## [1.0.13] - 2025-08-28
42
+ - TAG: [v1.0.13][1.0.13t]
43
+ - COVERAGE: 41.94% -- 65/155 lines in 6 files
44
+ - BRANCH COVERAGE: 1.92% -- 1/52 branches in 6 files
45
+ - 76.03% documented
46
+ ### Added
47
+ - kettle-release: Create GitHub release from tag & changelog entry
48
+
27
49
  ## [1.0.12] - 2025-08-28
28
50
  - TAG: [v1.0.12][1.0.12t]
29
51
  - COVERAGE: 97.80% -- 1957/2001 lines in 19 files
@@ -214,7 +236,7 @@ Please file a bug if you notice a violation of semantic versioning.
214
236
  - Selecting will run the selected workflow via `act`
215
237
  - This may move to its own gem in the future.
216
238
 
217
- [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.0.12...HEAD
239
+ [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.0.14...HEAD
218
240
  [1.0.0]: https://github.com/kettle-rb/kettle-dev/compare/a427c302df09cfe4253a7c8d400333f9a4c1a208...v1.0.0
219
241
  [1.0.0t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.0
220
242
  [1.0.1]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.0...v1.0.1
@@ -241,3 +263,7 @@ Please file a bug if you notice a violation of semantic versioning.
241
263
  [1.0.11t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.11
242
264
  [1.0.12]: https://github.com/kettle-rb/kettle-dev/compare/v1.0.11...v1.0.12
243
265
  [1.0.12t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.12
266
+ [1.0.13]: https://github.com/kettle-rb/kettle-dev/compare/v1.0.12...v1.0.13
267
+ [1.0.13t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.13
268
+ [1.0.14]: https://github.com/kettle-rb/kettle-dev/compare/v1.0.13...v1.0.14
269
+ [1.0.14t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.14
data/README.md CHANGED
@@ -85,20 +85,19 @@ Alternatively:
85
85
 
86
86
  </details>
87
87
 
88
- | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
89
- |-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
90
- | Works with JRuby | ![JRuby 9.1 Compat][💎jruby-9.1i] ![JRuby 9.2 Compat][💎jruby-9.2i] ![JRuby 9.3 Compat][💎jruby-9.3i] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎10-j-wf] [![JRuby 10.0 Compat][💎jruby-c-i]][🚎11-c-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf] |
91
- | Works with Truffle Ruby | ![Truffle Ruby 22.3 Compat][💎truby-22.3i] ![Truffle Ruby 23.0 Compat][💎truby-23.0i] <br/> [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎9-t-wf] [![Truffle Ruby 24.1 Compat][💎truby-c-i]][🚎11-c-wf] |
92
- | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎4-lg-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎6-s-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎6-s-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎6-s-wf] [![Ruby 3.4 Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf] |
93
- | Works with MRI Ruby 2 | ![Ruby 2.0 Compat][💎ruby-2.0i] ![Ruby 2.1 Compat][💎ruby-2.1i] ![Ruby 2.2 Compat][💎ruby-2.2i] <br/> [![Ruby 2.3 Compat][💎ruby-2.3i]][🚎1-an-wf] [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎1-an-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎1-an-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎7-us-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎7-us-wf] |
94
- | Works with MRI Ruby 1 | ![Ruby 1.9 Compat][💎ruby-1.9i] |
95
- | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
96
- | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![Wiki][📜wiki-img]][📜wiki] |
97
- | Compliance | [![License: MIT][📄license-img]][📄license-ref] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
98
- | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
99
- | Support | [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
100
- | Maintainer 🎖️ | [![Follow Me on LinkedIn][💖🖇linkedin-img]][💖🖇linkedin] [![Follow Me on Ruby.Social][💖🐘ruby-mast-img]][💖🐘ruby-mast] [![Follow Me on Bluesky][💖🦋bluesky-img]][💖🦋bluesky] [![Contact Maintainer][🚂maint-contact-img]][🚂maint-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |
101
- | `...` 💖 | [![Find Me on WellFound:][💖✌️wellfound-img]][💖✌️wellfound] [![Find Me on CrunchBase][💖💲crunchbase-img]][💖💲crunchbase] [![My LinkTree][💖🌳linktree-img]][💖🌳linktree] [![More About Me][💖💁🏼‍♂️aboutme-img]][💖💁🏼‍♂️aboutme] [🧊][💖🧊berg] [🐙][💖🐙hub] [🛖][💖🛖hut] [🧪][💖🧪lab] |
88
+ | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
89
+ |-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
90
+ | Works with JRuby | ![JRuby 9.1 Compat][💎jruby-9.1i] ![JRuby 9.2 Compat][💎jruby-9.2i] ![JRuby 9.3 Compat][💎jruby-9.3i] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎10-j-wf] [![JRuby 10.0 Compat][💎jruby-c-i]][🚎11-c-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf] |
91
+ | Works with Truffle Ruby | ![Truffle Ruby 22.3 Compat][💎truby-22.3i] ![Truffle Ruby 23.0 Compat][💎truby-23.0i] <br/> [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎9-t-wf] [![Truffle Ruby 24.1 Compat][💎truby-c-i]][🚎11-c-wf] |
92
+ | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎4-lg-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎6-s-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎6-s-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎6-s-wf] [![Ruby 3.4 Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf] |
93
+ | Works with MRI Ruby 2 | [![Ruby 2.3 Compat][💎ruby-2.3i]][🚎1-an-wf] [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎1-an-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎1-an-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎7-us-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎7-us-wf] |
94
+ | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
95
+ | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![Wiki][📜wiki-img]][📜wiki] |
96
+ | Compliance | [![License: MIT][📄license-img]][📄license-ref] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
97
+ | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
98
+ | Support | [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
99
+ | Maintainer 🎖️ | [![Follow Me on LinkedIn][💖🖇linkedin-img]][💖🖇linkedin] [![Follow Me on Ruby.Social][💖🐘ruby-mast-img]][💖🐘ruby-mast] [![Follow Me on Bluesky][💖🦋bluesky-img]][💖🦋bluesky] [![Contact Maintainer][🚂maint-contact-img]][🚂maint-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |
100
+ | `...` 💖 | [![Find Me on WellFound:][💖✌️wellfound-img]][💖✌️wellfound] [![Find Me on CrunchBase][💖💲crunchbase-img]][💖💲crunchbase] [![My LinkTree][💖🌳linktree-img]][💖🌳linktree] [![More About Me][💖💁🏼‍♂️aboutme-img]][💖💁🏼‍♂️aboutme] [🧊][💖🧊berg] [🐙][💖🐙hub] [🛖][💖🛖hut] [🧪][💖🧪lab] |
102
101
 
103
102
  ## ✨ Installation
104
103
 
@@ -697,7 +696,7 @@ Thanks for RTFM. ☺️
697
696
  [📌gitmoji]:https://gitmoji.dev
698
697
  [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20😜%20😍-34495e.svg?style=flat-square
699
698
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
700
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-2.001-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
699
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-2.175-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
701
700
  [🔐security]: SECURITY.md
702
701
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
703
702
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
data/Rakefile.example CHANGED
@@ -58,14 +58,10 @@ task :default do
58
58
  puts "Default task complete."
59
59
  end
60
60
 
61
- Kettle::Dev.install_tasks
62
-
63
61
  ### RELEASE TASKS
64
62
  # Setup stone_checksums
65
63
  begin
66
64
  require "stone_checksums"
67
-
68
- GemChecksums.install_tasks
69
65
  rescue LoadError
70
66
  desc("(stub) build:generate_checksums is unavailable")
71
67
  task("build:generate_checksums") do
@@ -1 +1,5 @@
1
- # Optional dependencies are not dependended on directly, but may be used if present.
1
+ # Optional dependencies are not depended on directly, but may be used if present.
2
+ # git gem is not a direct dependency for two reasons:
3
+ # 1. it is incompatible with Truffleruby v23
4
+ # 2. it depends on activesupport, which is too heavy
5
+ gem "git", ">= 1.19.1" # ruby >= 2.3
@@ -202,6 +202,15 @@ module Kettle
202
202
  validate_checksums!(version, stage: "after release")
203
203
  end
204
204
 
205
+ # 17. create GitHub release (optional)
206
+ if @start_step <= 17
207
+ version ||= detect_version
208
+ maybe_create_github_release!(version)
209
+ end
210
+
211
+ # 18. push tags to remotes (new final step)
212
+ push_tags! if @start_step <= 18
213
+
205
214
  puts "\nRelease complete. Don't forget to push the checksums commit if needed."
206
215
  end
207
216
 
@@ -403,6 +412,27 @@ module Kettle
403
412
  end
404
413
  end
405
414
 
415
+ def push_tags!
416
+ # After release, push tags to remotes according to policy:
417
+ # 1) If a remote named "all" exists, push tags only to it.
418
+ # 2) Otherwise, if other remotes exist, push tags to each of them.
419
+ # 3) If no remotes are configured, push tags using default remote.
420
+ if has_remote?("all")
421
+ run_cmd!("git push all --tags")
422
+ return
423
+ end
424
+
425
+ remotes = list_remotes
426
+ remotes -= ["all"] if remotes
427
+ if remotes.nil? || remotes.empty?
428
+ run_cmd!("git push --tags")
429
+ else
430
+ remotes.each do |remote|
431
+ run_cmd!("git push #{Shellwords.escape(remote)} --tags")
432
+ end
433
+ end
434
+ end
435
+
406
436
  def detect_trunk_branch
407
437
  out, ok = git_output(["remote", "show", "origin"])
408
438
  abort("Failed to get origin remote info.") unless ok
@@ -644,6 +674,107 @@ module Kettle
644
674
  Digest::SHA256.file(path).hexdigest
645
675
  end
646
676
  end
677
+
678
+ # If GITHUB_TOKEN is present, create a GitHub release for the given version tag.
679
+ # Title: v<version>
680
+ # Body: the CHANGELOG section for this version, followed by the two link references for this version.
681
+ def maybe_create_github_release!(version)
682
+ token = ENV.fetch("GITHUB_TOKEN", "").to_s
683
+ return if token.strip.empty?
684
+
685
+ gh_remote = preferred_github_remote
686
+ url = remote_url(gh_remote || "origin")
687
+ owner, repo = parse_github_owner_repo(url)
688
+ unless owner && repo
689
+ warn("GITHUB_TOKEN present but could not determine GitHub owner/repo from remotes. Skipping release creation.")
690
+ return
691
+ end
692
+
693
+ section, compare_ref, tag_ref = extract_changelog_for_version(version)
694
+ unless section
695
+ warn("CHANGELOG.md does not contain a section for #{version}. Skipping GitHub release creation.")
696
+ return
697
+ end
698
+
699
+ body = +""
700
+ body << section.rstrip
701
+ body << "\n\n"
702
+ body << compare_ref if compare_ref
703
+ body << tag_ref if tag_ref
704
+
705
+ tag = "v#{version}"
706
+ puts "Creating GitHub release #{owner}/#{repo} #{tag}..."
707
+ ok, msg = github_create_release(owner: owner, repo: repo, token: token, tag: tag, title: tag, body: body)
708
+ if ok
709
+ puts "GitHub release created for #{tag}."
710
+ else
711
+ warn("GitHub release creation skipped/failed: #{msg}")
712
+ end
713
+ end
714
+
715
+ # Returns [section_text, compare_ref_line, tag_ref_line]
716
+ def extract_changelog_for_version(version)
717
+ path = File.join(@root, "CHANGELOG.md")
718
+ return [nil, nil, nil] unless File.file?(path)
719
+ content = File.read(path)
720
+ lines = content.lines
721
+
722
+ # Find section start
723
+ start_idx = lines.index { |l| l.start_with?("## [#{version}]") }
724
+ return [nil, nil, nil] unless start_idx
725
+ i = start_idx + 1
726
+ # Find next section heading or EOF
727
+ while i < lines.length && !lines[i].start_with?("## [")
728
+ i += 1
729
+ end
730
+ section = lines[start_idx...(i)].join
731
+
732
+ # Find link refs (anywhere after Unreleased or at end; simple global scan acceptable)
733
+ compare_ref = lines.find { |l| l.start_with?("[#{version}]: ") }
734
+ tag_ref = lines.find { |l| l.start_with?("[#{version}t]: ") }
735
+ # Ensure newline termination
736
+ compare_ref = compare_ref&.end_with?("\n") ? compare_ref : (compare_ref && compare_ref + "\n")
737
+ tag_ref = tag_ref&.end_with?("\n") ? tag_ref : (tag_ref && tag_ref + "\n")
738
+ [section, compare_ref, tag_ref]
739
+ rescue StandardError => e
740
+ warn("Failed to parse CHANGELOG.md: #{e.class}: #{e.message}")
741
+ [nil, nil, nil]
742
+ end
743
+
744
+ # POST to GitHub Releases API
745
+ # Returns [ok(Boolean), message(String)]
746
+ def github_create_release(owner:, repo:, token:, tag:, title:, body:)
747
+ uri = URI("https://api.github.com/repos/#{owner}/#{repo}/releases")
748
+ req = Net::HTTP::Post.new(uri)
749
+ req["Accept"] = "application/vnd.github+json"
750
+ req["Authorization"] = "token #{token}"
751
+ req["User-Agent"] = "kettle-dev-release-cli"
752
+ req.body = JSON.dump({
753
+ tag_name: tag,
754
+ name: title,
755
+ body: body,
756
+ draft: false,
757
+ prerelease: false,
758
+ })
759
+
760
+ res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
761
+ http.request(req)
762
+ end
763
+
764
+ case res
765
+ when Net::HTTPSuccess, Net::HTTPCreated
766
+ [true, "created"]
767
+ else
768
+ # If release already exists, treat as non-fatal
769
+ if res.code.to_s == "422" && res.body.to_s.include?("already_exists")
770
+ [true, "already exists"]
771
+ else
772
+ [false, "HTTP #{res.code}: #{res.body}"]
773
+ end
774
+ end
775
+ rescue StandardError => e
776
+ [false, "#{e.class}: #{e.message}"]
777
+ end
647
778
  end
648
779
  end
649
780
  end
@@ -6,7 +6,7 @@ module Kettle
6
6
  module Version
7
7
  # The gem version.
8
8
  # @return [String]
9
- VERSION = "1.0.12"
9
+ VERSION = "1.0.14"
10
10
  end
11
11
  end
12
12
  end
data/lib/kettle-dev.rb CHANGED
@@ -7,7 +7,6 @@
7
7
  # In your `Rakefile` file:
8
8
  #
9
9
  # require "kettle/dev"
10
- # Kettle::Dev.install_tasks
11
10
  #
12
11
 
13
12
  # For technical reasons, if we move to Zeitwerk, this cannot be require_relative.
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: 1.0.12
4
+ version: 1.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -339,10 +339,10 @@ licenses:
339
339
  - MIT
340
340
  metadata:
341
341
  homepage_uri: https://kettle-dev.galtzo.com/
342
- source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.0.12
343
- changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.0.12/CHANGELOG.md
342
+ source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.0.14
343
+ changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.0.14/CHANGELOG.md
344
344
  bug_tracker_uri: https://github.com/kettle-rb/kettle-dev/issues
345
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.0.12
345
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.0.14
346
346
  funding_uri: https://github.com/sponsors/pboling
347
347
  wiki_uri: https://github.com/kettle-rb/kettle-dev/wiki
348
348
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file