kettle-dev 1.0.10 → 1.0.12

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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.envrc +1 -1
  4. data/.github/workflows/coverage.yml +2 -2
  5. data/.github/workflows/coverage.yml.example +127 -0
  6. data/.github/workflows/discord-notifier.yml +2 -1
  7. data/.github/workflows/truffle.yml +0 -8
  8. data/.junie/guidelines.md +1 -0
  9. data/Appraisals +4 -1
  10. data/Appraisals.example +104 -0
  11. data/CHANGELOG.md +88 -29
  12. data/CHANGELOG.md.example +4 -4
  13. data/CONTRIBUTING.md +37 -1
  14. data/Gemfile +3 -0
  15. data/Gemfile.example +35 -0
  16. data/README.md +48 -10
  17. data/README.md.example +515 -0
  18. data/{Rakefile → Rakefile.example} +13 -27
  19. data/exe/kettle-changelog +404 -0
  20. data/exe/kettle-commit-msg +2 -0
  21. data/exe/kettle-readme-backers +2 -0
  22. data/exe/kettle-release +10 -9
  23. data/gemfiles/modular/optional.gemfile +1 -0
  24. data/lib/kettle/dev/ci_helpers.rb +19 -0
  25. data/lib/kettle/dev/ci_monitor.rb +192 -0
  26. data/lib/kettle/dev/git_adapter.rb +98 -33
  27. data/lib/kettle/dev/git_commit_footer.rb +1 -1
  28. data/lib/kettle/dev/input_adapter.rb +44 -0
  29. data/lib/kettle/dev/release_cli.rb +154 -177
  30. data/lib/kettle/dev/tasks/ci_task.rb +22 -1
  31. data/lib/kettle/dev/tasks/install_task.rb +313 -95
  32. data/lib/kettle/dev/tasks/template_task.rb +176 -74
  33. data/lib/kettle/dev/template_helpers.rb +61 -8
  34. data/lib/kettle/dev/version.rb +1 -1
  35. data/lib/kettle/dev/versioning.rb +68 -0
  36. data/sig/kettle/dev/ci_helpers.rbs +1 -1
  37. data/sig/kettle/dev/ci_monitor.rbs +8 -0
  38. data/sig/kettle/dev/input_adapter.rbs +8 -0
  39. data/sig/kettle/dev/release_cli.rbs +1 -1
  40. data/sig/kettle/dev/template_helpers.rbs +3 -1
  41. data.tar.gz.sig +0 -0
  42. metadata +24 -22
  43. metadata.gz.sig +0 -0
  44. data/.gitlab-ci.yml +0 -45
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e64251f36de1db3a3f0c71d1436758db8a13223b3a5740062a04fa169ae9875
4
- data.tar.gz: afb492c0d27d008b779e426f081c0be491dff7616120115668468f9ff2c1872c
3
+ metadata.gz: 18dc37569a34008ec953339ce7fd69e285bf007f2f1dd035de13856fb2d621ec
4
+ data.tar.gz: b3afeca255b2fb10fd86c4e48a47679b8652ff7ab9f75c4b8637c7738f83e28b
5
5
  SHA512:
6
- metadata.gz: 0cc6afa5e3543bab0de8682f0d9a2d45df99a442e2253fe8f028ef190c59cb44710969b9f22e63c4ef4a0e604f96243b616589683ec6ff5d68273cfd2fe0ac40
7
- data.tar.gz: 9d5253d1aac3f87db2e76ae013c16a5a71ebfd649f8bbaf882b74f90af2e5bdfe2c99cb6fbb9f83cc4efa094117d26dfd7e898d902fc0eb60a74559dca6f9af7
6
+ metadata.gz: d12f7394b9aba54d138cbddc74598e03908280f6e4102c0b98a9d326e00909cc5d1cac16f1a5bced75ee694c2606e026bc772088b005abf1a69d9a1d23bf0c93
7
+ data.tar.gz: 5fc72941ddcc1c21e9e56fd0fffd2eb0b603eff7d1fe60d6cdf55108b8e4c314320be1ed243e5064d89cb604e74e42bdc6756764c42dcf920bc204514fbe539b
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=77 # Means you want to enforce X% branch coverage
24
+ export K_SOUP_COV_MIN_BRANCH=79 # 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,7 +7,7 @@ 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: 72
10
+ K_SOUP_COV_MIN_BRANCH: 74
11
11
  K_SOUP_COV_MIN_LINE: 94
12
12
  K_SOUP_COV_MIN_HARD: true
13
13
  K_SOUP_COV_FORMATTERS: "xml,rcov,lcov,tty"
@@ -116,7 +116,7 @@ jobs:
116
116
  hide_complexity: true
117
117
  indicators: true
118
118
  output: both
119
- thresholds: '94 72'
119
+ thresholds: '94 74'
120
120
  continue-on-error: ${{ matrix.experimental != 'false' }}
121
121
 
122
122
  - name: Add Coverage PR Comment
@@ -0,0 +1,127 @@
1
+ name: Test Coverage
2
+
3
+ permissions:
4
+ contents: read
5
+ pull-requests: write
6
+ id-token: write
7
+
8
+ env:
9
+ K_SOUP_COV_MIN_BRANCH: 100
10
+ K_SOUP_COV_MIN_LINE: 100
11
+ K_SOUP_COV_MIN_HARD: true
12
+ K_SOUP_COV_FORMATTERS: "xml,rcov,lcov,tty"
13
+ K_SOUP_COV_DO: true
14
+ K_SOUP_COV_MULTI_FORMATTERS: true
15
+ K_SOUP_COV_COMMAND_NAME: "Test Coverage"
16
+
17
+ on:
18
+ push:
19
+ branches:
20
+ - 'main'
21
+ - "*-stable"
22
+ tags:
23
+ - '!*' # Do not execute on tags
24
+ pull_request:
25
+ branches:
26
+ - '*'
27
+ # Allow manually triggering the workflow.
28
+ workflow_dispatch:
29
+
30
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
31
+ concurrency:
32
+ # The concurrency group contains the workflow name and the branch name.
33
+ group: "${{ github.workflow }}-${{ github.ref }}"
34
+ cancel-in-progress: true
35
+
36
+ jobs:
37
+ coverage:
38
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
39
+ name: Code Coverage on ${{ matrix.ruby }}@current
40
+ runs-on: ubuntu-latest
41
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
42
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
43
+ BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile
44
+ strategy:
45
+ fail-fast: false
46
+ matrix:
47
+ include:
48
+ # Coverage
49
+ - ruby: "ruby"
50
+ appraisal: "coverage"
51
+ exec_cmd: "rake test"
52
+ gemfile: "Appraisal.root"
53
+ rubygems: latest
54
+ bundler: latest
55
+
56
+ steps:
57
+ - name: Checkout
58
+ uses: actions/checkout@v5
59
+
60
+ - name: Setup Ruby & RubyGems
61
+ uses: ruby/setup-ruby@v1
62
+ with:
63
+ ruby-version: "${{ matrix.ruby }}"
64
+ rubygems: "${{ matrix.rubygems }}"
65
+ bundler: "${{ matrix.bundler }}"
66
+ bundler-cache: false
67
+
68
+ # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
69
+ # We need to do this first to get appraisal installed.
70
+ # NOTE: This does not use the main Gemfile at all.
71
+ - name: Install Root Appraisal
72
+ run: bundle
73
+ - name: Appraisal for ${{ matrix.appraisal }}
74
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle
75
+ - name: Tests for ${{ matrix.ruby }}@current via ${{ matrix.exec_cmd }}
76
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
77
+
78
+ # Do SaaS coverage uploads first
79
+ - name: Upload coverage to Coveralls
80
+ if: ${{ !env.ACT }}
81
+ uses: coverallsapp/github-action@master
82
+ with:
83
+ github-token: ${{ secrets.GITHUB_TOKEN }}
84
+ continue-on-error: ${{ matrix.experimental != 'false' }}
85
+
86
+ - name: Upload coverage to QLTY
87
+ if: ${{ !env.ACT }}
88
+ uses: qltysh/qlty-action/coverage@main
89
+ with:
90
+ token: ${{secrets.QLTY_COVERAGE_TOKEN}}
91
+ files: coverage/.resultset.json
92
+ continue-on-error: ${{ matrix.experimental != 'false' }}
93
+
94
+ # Build will fail here if coverage upload fails
95
+ # which will hopefully be noticed for the lack of code coverage comments
96
+ - name: Upload coverage to CodeCov
97
+ if: ${{ !env.ACT }}
98
+ uses: codecov/codecov-action@v5
99
+ with:
100
+ use_oidc: true
101
+ fail_ci_if_error: false # optional (default = false)
102
+ files: coverage/lcov.info,coverage/coverage.xml
103
+ verbose: true # optional (default = false)
104
+
105
+ # Then PR comments
106
+ - name: Code Coverage Summary Report
107
+ if: ${{ !env.ACT && github.event_name == 'pull_request' }}
108
+ uses: irongut/CodeCoverageSummary@v1.3.0
109
+ with:
110
+ filename: ./coverage/coverage.xml
111
+ badge: true
112
+ fail_below_min: true
113
+ format: markdown
114
+ hide_branch_rate: false
115
+ hide_complexity: true
116
+ indicators: true
117
+ output: both
118
+ thresholds: '100 100'
119
+ continue-on-error: ${{ matrix.experimental != 'false' }}
120
+
121
+ - name: Add Coverage PR Comment
122
+ uses: marocchino/sticky-pull-request-comment@v2
123
+ if: ${{ !env.ACT && github.event_name == 'pull_request' }}
124
+ with:
125
+ recreate: true
126
+ path: code-coverage-results.md
127
+ continue-on-error: ${{ matrix.experimental != 'false' }}
@@ -24,6 +24,7 @@ on:
24
24
  jobs:
25
25
  # This workflow contains a single job called "build"
26
26
  notify:
27
+ if: false
27
28
  # The type of runner that the job will run on
28
29
  runs-on: ubuntu-latest
29
30
 
@@ -35,4 +36,4 @@ jobs:
35
36
  with:
36
37
  webhook: ${{ secrets.DISCORD_WEBHOOK }}
37
38
  status: ${{ job.status }}
38
- username: GitHub Actions
39
+ username: GitHub Actions
@@ -37,14 +37,6 @@ jobs:
37
37
  matrix:
38
38
  include:
39
39
  # NOTE: truffleruby does not support upgrading rubygems.
40
- # truffleruby-23.0 (targets Ruby 3.1 compatibility)
41
- - ruby: "truffleruby-23.0"
42
- appraisal: "ruby-3-1"
43
- exec_cmd: "rake test"
44
- gemfile: "Appraisal.root"
45
- rubygems: default
46
- bundler: default
47
-
48
40
  # truffleruby-23.1 (targets Ruby 3.2 compatibility)
49
41
  - ruby: "truffleruby-23.1"
50
42
  appraisal: "ruby-3-2"
data/.junie/guidelines.md CHANGED
@@ -128,6 +128,7 @@ Notes
128
128
  - NEVER run vanilla rubocop, as it won't handle the linting config properly. Always run rubocop_gradual:autocorrect or rubocop_gradual.
129
129
  - Running only a subset of specs is supported but in order to bypass the hard failure due to coverage thresholds, you need to run with K_SOUP_COV_MIN_HARD=false.
130
130
  - When adding code that writes to STDOUT, remember most specs silence output unless tagged with :check_output or DEBUG=true.
131
+ - Completion criteria after changes: Only consider your change “done” when the relevant examples pass, as verified by .rspec_status. Do not rely on STDOUT impressions; consult .rspec_status (and example IDs) to confirm green results for the affected files/examples. If you ran a subset, re-run the full suite before finalizing to restore coverage thresholds.
131
132
  - Coverage reports: NEVER review the HTML report. Use JSON (preferred), XML, LCOV, or RCOV. For this project, always run tests with K_SOUP_COV_FORMATTERS set to "json".
132
133
  - Do NOT modify .envrc in tasks; when running tests locally or in scripts, manually prefix each run, e.g.: K_SOUP_COV_FORMATTERS="json" bin/rspec
133
134
  - For all the kettle-soup-cover options, see .envrc and find the K_SOUP_COV_* env vars.
data/Appraisals CHANGED
@@ -26,6 +26,7 @@ appraise "unlocked_deps" do
26
26
  eval_gemfile "modular/coverage.gemfile"
27
27
  eval_gemfile "modular/documentation.gemfile"
28
28
  eval_gemfile "modular/style.gemfile"
29
+ eval_gemfile "modular/optional.gemfile"
29
30
  end
30
31
 
31
32
  # Used for head (nightly) releases of ruby, truffleruby, and jruby.
@@ -80,6 +81,7 @@ end
80
81
 
81
82
  appraise "ruby-3-1" do
82
83
  # all versions of git gem are incompatible with truffleruby v23.0, syntactically.
84
+ # So tests relying on the git gem are skipped, to avoid loading it.
83
85
  gem "erb"
84
86
  gem "mutex_m", "~> 0.2"
85
87
  gem "stringio", "~> 3.0"
@@ -87,7 +89,7 @@ end
87
89
 
88
90
  appraise "ruby-3-2" do
89
91
  # all versions of git gem are incompatible with truffleruby v23.1, syntactically.
90
- gem "git", "< 3"
92
+ # So tests relying on the git gem are skipped, to avoid loading it.
91
93
  gem "erb"
92
94
  gem "mutex_m", "~> 0.2"
93
95
  gem "stringio", "~> 3.0"
@@ -112,6 +114,7 @@ appraise "coverage" do
112
114
  gem "mutex_m", "~> 0.2"
113
115
  gem "stringio", "~> 3.0"
114
116
  eval_gemfile "modular/coverage.gemfile"
117
+ eval_gemfile "modular/optional.gemfile"
115
118
  end
116
119
 
117
120
  # Only run linter on latest Ruby version (but, in support of oldest supported Ruby version)
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ # HOW TO UPDATE APPRAISALS:
4
+ # BUNDLE_GEMFILE=Appraisal.root.gemfile bundle
5
+ # BUNDLE_GEMFILE=Appraisal.root.gemfile bundle exec appraisal update
6
+ # bundle exec rake rubocop_gradual:autocorrect
7
+
8
+ # Lock/Unlock Deps Pattern
9
+ #
10
+ # Two often conflicting goals resolved!
11
+ #
12
+ # - unlocked_deps.yml
13
+ # - All runtime & dev dependencies, but does not have a `gemfiles/*.gemfile.lock` committed
14
+ # - Uses an Appraisal2 "unlocked_deps" gemfile, and the current MRI Ruby release
15
+ # - Know when new dependency releases will break local dev with unlocked dependencies
16
+ # - Broken workflow indicates that new releases of dependencies may not work
17
+ #
18
+ # - locked_deps.yml
19
+ # - All runtime & dev dependencies, and has a `Gemfile.lock` committed
20
+ # - Uses the project's main Gemfile, and the current MRI Ruby release
21
+ # - Matches what contributors and maintainers use locally for development
22
+ # - Broken workflow indicates that a new contributor will have a bad time
23
+ #
24
+ appraise "unlocked_deps" do
25
+ eval_gemfile "modular/coverage.gemfile"
26
+ eval_gemfile "modular/documentation.gemfile"
27
+ eval_gemfile "modular/style.gemfile"
28
+ eval_gemfile "modular/optional.gemfile"
29
+ end
30
+
31
+ # Used for head (nightly) releases of ruby, truffleruby, and jruby.
32
+ # Split into discrete appraisals if one of them needs a dependency locked discretely.
33
+ appraise "head" do
34
+ gem "mutex_m", ">= 0.2"
35
+ gem "stringio", ">= 3.0"
36
+ gem "benchmark", "~> 0.4", ">= 0.4.1"
37
+ end
38
+
39
+ # Used for current releases of ruby, truffleruby, and jruby.
40
+ # Split into discrete appraisals if one of them needs a dependency locked discretely.
41
+ appraise "current" do
42
+ gem "mutex_m", ">= 0.2"
43
+ gem "stringio", ">= 3.0"
44
+ end
45
+
46
+ appraise "ruby-2-3" do
47
+ end
48
+
49
+ appraise "ruby-2-4" do
50
+ end
51
+
52
+ appraise "ruby-2-5" do
53
+ end
54
+
55
+ appraise "ruby-2-6" do
56
+ gem "mutex_m", "~> 0.2"
57
+ gem "stringio", "~> 3.0"
58
+ end
59
+
60
+ appraise "ruby-2-7" do
61
+ gem "mutex_m", "~> 0.2"
62
+ gem "stringio", "~> 3.0"
63
+ end
64
+
65
+ appraise "ruby-3-0" do
66
+ gem "mutex_m", "~> 0.2"
67
+ gem "stringio", "~> 3.0"
68
+ end
69
+
70
+ appraise "ruby-3-1" do
71
+ gem "mutex_m", "~> 0.2"
72
+ gem "stringio", "~> 3.0"
73
+ end
74
+
75
+ appraise "ruby-3-2" do
76
+ gem "mutex_m", "~> 0.2"
77
+ gem "stringio", "~> 3.0"
78
+ end
79
+
80
+ appraise "ruby-3-3" do
81
+ gem "mutex_m", "~> 0.2"
82
+ gem "stringio", "~> 3.0"
83
+ end
84
+
85
+ # Only run security audit on latest Ruby version
86
+ appraise "audit" do
87
+ gem "mutex_m", "~> 0.2"
88
+ gem "stringio", "~> 3.0"
89
+ end
90
+
91
+ # Only run coverage on latest Ruby version
92
+ appraise "coverage" do
93
+ gem "mutex_m", "~> 0.2"
94
+ gem "stringio", "~> 3.0"
95
+ eval_gemfile "modular/coverage.gemfile"
96
+ eval_gemfile "modular/optional.gemfile"
97
+ end
98
+
99
+ # Only run linter on latest Ruby version (but, in support of oldest supported Ruby version)
100
+ appraise "style" do
101
+ gem "mutex_m", "~> 0.2"
102
+ gem "stringio", "~> 3.0"
103
+ eval_gemfile "modular/style.gemfile"
104
+ end
data/CHANGELOG.md CHANGED
@@ -24,10 +24,65 @@ Please file a bug if you notice a violation of semantic versioning.
24
24
  ### Fixed
25
25
  ### Security
26
26
 
27
+ ## [1.0.12] - 2025-08-28
28
+ - TAG: [v1.0.12][1.0.12t]
29
+ - COVERAGE: 97.80% -- 1957/2001 lines in 19 files
30
+ - BRANCH COVERAGE: 79.98% -- 763/954 branches in 19 files
31
+ - 78.70% documented
32
+ ### Added
33
+ - CIMonitor to consolidate workflow / pipeline monitoring logic for GH/GL across kettle-release and rake tasks, with handling for:
34
+ - minutes exhausted
35
+ - blocked
36
+ - not configured
37
+ - normal failures
38
+ - pending
39
+ - queued
40
+ - running
41
+ - success
42
+ - Ability to restart kettle-release from any failed step, so manual fixed can be applied.
43
+ - Example (after intermittent failure of CI): `bundle exec kettle-release start_step=10`
44
+ ### Fixed
45
+ - added optional.gemfile.example, and handling for it in templating
46
+ - kettle-changelog: ensure a blank line at end of file
47
+ - add sleep(0.2) to ci:act to prevent race condition with stdout flushing
48
+ - kettle-release: ensure SKIP_GEM_SIGNING works as expected with values of "true" or "false"
49
+ - ensure it doesn't abort the process in CI
50
+
51
+ ## [1.0.11] - 2025-08-28
52
+ - TAG: [v1.0.11][1.0.11t]
53
+ - COVERAGE: 97.90% -- 1959/2001 lines in 19 files
54
+ - BRANCH COVERAGE: 79.98% -- 763/954 branches in 19 files
55
+ - 78.70% documented
56
+ ### Added
57
+ - Add more .example templates
58
+ - .github/workflows/coverage.yml.example
59
+ - .gitlab-ci.yml.example
60
+ - Appraisals.example
61
+ - Kettle::Dev::InputAdapter: Input indirection layer for safe interactive prompts in tests; provides gets and readline; documented with YARD and typed with RBS.
62
+ - install task README improvements
63
+ - extracts emoji grapheme from H1 to apply to gemspec's summary and description
64
+ - removes badges for unsupported rubies, and major version MRI row if all badges removed
65
+ - new exe script: kettle-changelog - transitions a changelog from unreleased to next release
66
+ ### Changed
67
+ - Make 'git' gem dependency optional; fall back to raw `git` commands when the gem is not present (rescues LoadError). See Kettle::Dev::GitAdapter.
68
+ - upgraded to stone_checksums v1.0.2
69
+ - exe scripts now print their name and version as they start up
70
+ ### Removed
71
+ - dependency on git gem
72
+ - git gem is still supported if present and not bypassed by new ENV variable `KETTLE_DEV_DISABLE_GIT_GEM`
73
+ - no longer a direct dependency
74
+ ### Fixed
75
+ - Upgrade stone_checksums for release compatibility with bundler v2.7+
76
+ - Retains compatibility with older bundler < v2.7
77
+ - Ship all example templates with gem
78
+ - install task README preservation
79
+ - preserves H1 line, and specific H2 headed sections
80
+ - preserve table alignment
81
+
27
82
  ## [1.0.10] - 2025-08-24
28
83
  - TAG: [v1.0.10][1.0.10t]
29
- - COVERAGE: 97.68% -- 1685/1725 lines in 17 files
30
- - BRANCH COVERAGE: 77.54% -- 618/797 branches in 17 files- 95.35% documented
84
+ - COVERAGE: 97.68% -- 1685/1725 lines in 17 files
85
+ - BRANCH COVERAGE: 77.54% -- 618/797 branches in 17 files- 95.35% documented
31
86
  - 77.00% documented
32
87
  ### Added
33
88
  - runs git add --all before git commit, to ensure all files are committed.
@@ -58,7 +113,7 @@ Please file a bug if you notice a violation of semantic versioning.
58
113
  ## [1.0.8] - 2025-08-24
59
114
  - TAG: [v1.0.8][1.0.8t]
60
115
  - COVERAGE: 100.00% -- 130/130 lines in 7 files
61
- - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
116
+ - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
62
117
  - 95.35% documented
63
118
  ### Fixed
64
119
  - Can't add checksums to the gem package, because it changes the checksum (duh!)
@@ -66,7 +121,7 @@ Please file a bug if you notice a violation of semantic versioning.
66
121
  ## [1.0.7] - 2025-08-24
67
122
  - TAG: [v1.0.7][1.0.7t]
68
123
  - COVERAGE: 100.00% -- 130/130 lines in 7 files
69
- - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
124
+ - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
70
125
  - 95.35% documented
71
126
  ### Fixed
72
127
  - Reproducible builds, with consistent checksums, by *not* using SOURCE_DATE_EPOCH.
@@ -75,7 +130,7 @@ Please file a bug if you notice a violation of semantic versioning.
75
130
  ## [1.0.6] - 2025-08-24
76
131
  - TAG: [v1.0.6][1.0.6t]
77
132
  - COVERAGE: 100.00% -- 130/130 lines in 7 files
78
- - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
133
+ - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
79
134
  - 95.35% documented
80
135
  ### Fixed
81
136
  - kettle-release: ensure SOURCE_DATE_EPOCH is applied within the same shell for both build and release by prefixing the commands with the env var (e.g., `SOURCE_DATE_EPOCH=$epoch bundle exec rake build` and `... rake release`); prevents losing the variable across shell boundaries and improves reproducible checksums.
@@ -83,7 +138,7 @@ Please file a bug if you notice a violation of semantic versioning.
83
138
  ## [1.0.5] - 2025-08-24
84
139
  - TAG: [v1.0.5][1.0.5t]
85
140
  - COVERAGE: 100.00% -- 130/130 lines in 7 files
86
- - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
141
+ - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
87
142
  - 95.35% documented
88
143
  ### Fixed
89
144
  - kettle-release: will run regardless of how it is invoked (i.e. works as binstub)
@@ -91,7 +146,7 @@ Please file a bug if you notice a violation of semantic versioning.
91
146
  ## [1.0.4] - 2025-08-24
92
147
  - TAG: [v1.0.4][1.0.4t]
93
148
  - COVERAGE: 100.00% -- 130/130 lines in 7 files
94
- - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
149
+ - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
95
150
  - 95.35% documented
96
151
  ### Added
97
152
  - kettle-release: checks all remotes for a GitHub remote and syncs origin/trunk with it; prompts to rebase or --no-ff merge when histories diverge; pushes to both origin and the GitHub remote on merge; uses the GitHub remote for GitHub Actions CI checks, and also checks GitLab CI when a GitLab remote and .gitlab-ci.yml are present.
@@ -159,26 +214,30 @@ Please file a bug if you notice a violation of semantic versioning.
159
214
  - Selecting will run the selected workflow via `act`
160
215
  - This may move to its own gem in the future.
161
216
 
162
- [Unreleased]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.10...HEAD
163
- [1.0.10]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.9...v1.0.10
164
- [1.0.10t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.10
165
- [1.0.9]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.8...v1.0.9
166
- [1.0.9t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.9
167
- [1.0.8]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.7...v1.0.8
168
- [1.0.8t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.8
169
- [1.0.7]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.6...v1.0.7
170
- [1.0.7t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.7
171
- [1.0.6]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.5...v1.0.6
172
- [1.0.6t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.6
173
- [1.0.5]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.4...v1.0.5
174
- [1.0.5t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.5
175
- [1.0.4]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.3...v1.0.4
176
- [1.0.4t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.4
177
- [1.0.3]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.2...v1.0.3
178
- [1.0.3t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.3
179
- [1.0.2]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.1...v1.0.2
180
- [1.0.2t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.2
217
+ [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.0.12...HEAD
218
+ [1.0.0]: https://github.com/kettle-rb/kettle-dev/compare/a427c302df09cfe4253a7c8d400333f9a4c1a208...v1.0.0
219
+ [1.0.0t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.0
181
220
  [1.0.1]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.0...v1.0.1
182
- [1.0.1t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.1
183
- [1.0.0]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/a427c302df09cfe4253a7c8d400333f9a4c1a208...v1.0.0
184
- [1.0.0t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.0
221
+ [1.0.1t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.1
222
+ [1.0.2]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.1...v1.0.2
223
+ [1.0.2t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.2
224
+ [1.0.3]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.2...v1.0.3
225
+ [1.0.3t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.3
226
+ [1.0.4]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.3...v1.0.4
227
+ [1.0.4t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.4
228
+ [1.0.5]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.4...v1.0.5
229
+ [1.0.5t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.5
230
+ [1.0.6]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.5...v1.0.6
231
+ [1.0.6t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.6
232
+ [1.0.7]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.6...v1.0.7
233
+ [1.0.7t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.7
234
+ [1.0.8]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.7...v1.0.8
235
+ [1.0.8t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.8
236
+ [1.0.9]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.8...v1.0.9
237
+ [1.0.9t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.9
238
+ [1.0.10]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.9...v1.0.10
239
+ [1.0.10t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.10
240
+ [1.0.11]: https://github.com/kettle-rb/kettle-dev/compare/v1.0.10...v1.0.11
241
+ [1.0.11t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.11
242
+ [1.0.12]: https://github.com/kettle-rb/kettle-dev/compare/v1.0.11...v1.0.12
243
+ [1.0.12t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.12
data/CHANGELOG.md.example CHANGED
@@ -27,7 +27,7 @@ Please file a bug if you notice a violation of semantic versioning.
27
27
  ## [1.0.1] - 2025-08-24
28
28
  - TAG: [v1.0.1][1.0.1t]
29
29
  - COVERAGE: 100.00% -- 130/130 lines in 7 files
30
- - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
30
+ - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
31
31
  - 100% documented
32
32
  ### Fixed
33
33
  - bugfix: oopsie
@@ -35,13 +35,13 @@ Please file a bug if you notice a violation of semantic versioning.
35
35
  ## [1.0.0] - 2025-08-24
36
36
  - TAG: [v1.0.0][1.0.0t]
37
37
  - COVERAGE: 100.00% -- 130/130 lines in 7 files
38
- - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
38
+ - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
39
39
  - 100% documented
40
40
  ### Added
41
41
  - Initial release
42
42
 
43
43
  [Unreleased]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.0...HEAD
44
- [1.0.1]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.0...v1.0.1
45
- [1.0.1t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.1
46
44
  [1.0.0]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/a427c302df09cfe4253a7c8d400333f9a4c1a208...v1.0.0
47
45
  [1.0.0t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.0
46
+ [1.0.1]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.0...v1.0.1
47
+ [1.0.1t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.1
data/CONTRIBUTING.md CHANGED
@@ -22,6 +22,42 @@ Follow these instructions:
22
22
  6. Make sure to add tests for it. This is important, so it doesn't break in a future release.
23
23
  7. Create new Pull Request.
24
24
 
25
+ ## Environment Variables for Local Development
26
+
27
+ Below are the primary environment variables recognized by stone_checksums (and its integrated tools). Unless otherwise noted, set boolean values to the string "true" to enable.
28
+
29
+ General/runtime
30
+ - DEBUG: Enable extra internal logging for this library (default: false)
31
+ - REQUIRE_BENCH: Enable `require_bench` to profile requires (default: false)
32
+ - CI: When set to true, adjusts default rake tasks toward CI behavior
33
+
34
+ Coverage (kettle-soup-cover / SimpleCov)
35
+ - K_SOUP_COV_DO: Enable coverage collection (default: true in .envrc)
36
+ - K_SOUP_COV_FORMATTERS: Comma-separated list of formatters (html, xml, rcov, lcov, json, tty)
37
+ - K_SOUP_COV_MIN_LINE: Minimum line coverage threshold (integer, e.g., 100)
38
+ - K_SOUP_COV_MIN_BRANCH: Minimum branch coverage threshold (integer, e.g., 100)
39
+ - K_SOUP_COV_MIN_HARD: Fail the run if thresholds are not met (true/false)
40
+ - K_SOUP_COV_MULTI_FORMATTERS: Enable multiple formatters at once (true/false)
41
+ - K_SOUP_COV_OPEN_BIN: Path to browser opener for HTML (empty disables auto-open)
42
+ - MAX_ROWS: Limit console output rows for simplecov-console (e.g., 1)
43
+ Tip: When running a single spec file locally, you may want `K_SOUP_COV_MIN_HARD=false` to avoid failing thresholds for a partial run.
44
+
45
+ GitHub API and CI helpers
46
+ - GITHUB_TOKEN or GH_TOKEN: Token used by `ci:act` and release workflow checks to query GitHub Actions status at higher rate limits
47
+
48
+ Releasing and signing
49
+ - SKIP_GEM_SIGNING: If set, skip gem signing during build/release
50
+ - GEM_CERT_USER: Username for selecting your public cert in `certs/<USER>.pem` (defaults to $USER)
51
+ - SOURCE_DATE_EPOCH: Reproducible build timestamp. `kettle-release` will set this automatically for the session.
52
+
53
+ Git hooks and commit message helpers (exe/kettle-commit-msg)
54
+ - GIT_HOOK_BRANCH_VALIDATE: Branch name validation mode (e.g., `jira`) or `false` to disable
55
+ - GIT_HOOK_FOOTER_APPEND: Append a footer to commit messages when goalie allows (true/false)
56
+ - GIT_HOOK_FOOTER_SENTINEL: Required when footer append is enabled — a unique first-line sentinel to prevent duplicates
57
+ - GIT_HOOK_FOOTER_APPEND_DEBUG: Extra debug output in the footer template (true/false)
58
+
59
+ For a quick starting point, this repository’s `.envrc` shows sane defaults, and `.env.local` can override them locally.
60
+
25
61
  ## Appraisals
26
62
 
27
63
  From time to time the Appraisal2 gemfiles in `gemfiles/` will need to be updated.
@@ -110,7 +146,7 @@ NOTE: To build without signing the gem you must set `SKIP_GEM_SIGNING` to some v
110
146
 
111
147
  #### Automated process
112
148
 
113
- Run `kettle-release`.
149
+ Run `bundle exec kettle-release`.
114
150
 
115
151
  #### Manual process
116
152
 
data/Gemfile CHANGED
@@ -30,3 +30,6 @@ eval_gemfile "gemfiles/modular/style.gemfile"
30
30
 
31
31
  # Documentation
32
32
  eval_gemfile "gemfiles/modular/documentation.gemfile"
33
+
34
+ # Optional
35
+ eval_gemfile "gemfiles/modular/optional.gemfile"
data/Gemfile.example ADDED
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
+ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" }
7
+
8
+ #### IMPORTANT #######################################################
9
+ # Gemfile is for local development ONLY; Gemfile is NOT loaded in CI #
10
+ ####################################################### IMPORTANT ####
11
+
12
+ # Include dependencies from <gem name>.gemspec
13
+ gemspec
14
+
15
+ platform :mri do
16
+ # Debugging - Ensure ENV["DEBUG"] == "true" to use debuggers within spec suite
17
+ # Use binding.break, binding.b, or debugger in code
18
+ gem "debug", ">= 1.0.0" # ruby >= 2.7
19
+ gem "gem_bench", "~> 2.0", ">= 2.0.5"
20
+
21
+ # Dev Console - Binding.pry - Irb replacement
22
+ gem "pry", "~> 0.14" # ruby >= 2.0
23
+ end
24
+
25
+ # Code Coverage
26
+ eval_gemfile "gemfiles/modular/coverage.gemfile"
27
+
28
+ # Linting
29
+ eval_gemfile "gemfiles/modular/style.gemfile"
30
+
31
+ # Documentation
32
+ eval_gemfile "gemfiles/modular/documentation.gemfile"
33
+
34
+ # Optional
35
+ eval_gemfile "gemfiles/modular/optional.gemfile"