kettle-dev 1.0.8 → 1.0.10

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 (66) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.envrc +4 -3
  4. data/.github/workflows/ancient.yml +2 -4
  5. data/.github/workflows/coverage.yml +5 -7
  6. data/.github/workflows/current.yml +2 -4
  7. data/.github/workflows/heads.yml +2 -4
  8. data/.github/workflows/jruby.yml +2 -4
  9. data/.github/workflows/legacy.yml +2 -4
  10. data/.github/workflows/locked_deps.yml +1 -4
  11. data/.github/workflows/style.yml +2 -4
  12. data/.github/workflows/supported.yml +2 -4
  13. data/.github/workflows/truffle.yml +2 -4
  14. data/.github/workflows/unlocked_deps.yml +1 -4
  15. data/.github/workflows/unsupported.yml +2 -4
  16. data/.junie/guidelines.md +4 -3
  17. data/.simplecov +5 -1
  18. data/Appraisals +3 -0
  19. data/CHANGELOG.md +50 -3
  20. data/CHANGELOG.md.example +47 -0
  21. data/CONTRIBUTING.md +6 -0
  22. data/README.md +23 -5
  23. data/Rakefile +43 -54
  24. data/exe/kettle-commit-msg +8 -140
  25. data/exe/kettle-readme-backers +6 -348
  26. data/exe/kettle-release +8 -549
  27. data/lib/kettle/dev/ci_helpers.rb +1 -0
  28. data/lib/kettle/dev/commit_msg.rb +39 -0
  29. data/lib/kettle/dev/exit_adapter.rb +36 -0
  30. data/lib/kettle/dev/git_adapter.rb +120 -0
  31. data/lib/kettle/dev/git_commit_footer.rb +130 -0
  32. data/lib/kettle/dev/rakelib/appraisal.rake +8 -9
  33. data/lib/kettle/dev/rakelib/bench.rake +2 -7
  34. data/lib/kettle/dev/rakelib/bundle_audit.rake +2 -0
  35. data/lib/kettle/dev/rakelib/ci.rake +4 -343
  36. data/lib/kettle/dev/rakelib/install.rake +1 -295
  37. data/lib/kettle/dev/rakelib/reek.rake +2 -0
  38. data/lib/kettle/dev/rakelib/rubocop_gradual.rake +2 -0
  39. data/lib/kettle/dev/rakelib/spec_test.rake +2 -0
  40. data/lib/kettle/dev/rakelib/template.rake +3 -454
  41. data/lib/kettle/dev/readme_backers.rb +340 -0
  42. data/lib/kettle/dev/release_cli.rb +672 -0
  43. data/lib/kettle/dev/tasks/ci_task.rb +334 -0
  44. data/lib/kettle/dev/tasks/install_task.rb +298 -0
  45. data/lib/kettle/dev/tasks/template_task.rb +491 -0
  46. data/lib/kettle/dev/template_helpers.rb +4 -4
  47. data/lib/kettle/dev/version.rb +1 -1
  48. data/lib/kettle/dev.rb +30 -1
  49. data/lib/kettle-dev.rb +2 -3
  50. data/sig/kettle/dev/ci_helpers.rbs +18 -8
  51. data/sig/kettle/dev/commit_msg.rbs +8 -0
  52. data/sig/kettle/dev/exit_adapter.rbs +8 -0
  53. data/sig/kettle/dev/git_adapter.rbs +15 -0
  54. data/sig/kettle/dev/git_commit_footer.rbs +16 -0
  55. data/sig/kettle/dev/readme_backers.rbs +20 -0
  56. data/sig/kettle/dev/release_cli.rbs +8 -0
  57. data/sig/kettle/dev/tasks/ci_task.rbs +9 -0
  58. data/sig/kettle/dev/tasks/install_task.rbs +10 -0
  59. data/sig/kettle/dev/tasks/template_task.rbs +10 -0
  60. data/sig/kettle/dev/tasks.rbs +0 -0
  61. data/sig/kettle/dev/version.rbs +0 -0
  62. data/sig/kettle/emoji_regex.rbs +5 -0
  63. data/sig/kettle-dev.rbs +0 -0
  64. data.tar.gz.sig +0 -0
  65. metadata +56 -5
  66. metadata.gz.sig +4 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 88b6d217fb45ef184853b27880054985424c38f1d43da10e7c0b68125016b1d4
4
- data.tar.gz: 927a1e7a443ecb14f4b9b295dd3b88392656185f14482bdabcbf7e156c63f6b2
3
+ metadata.gz: 6e64251f36de1db3a3f0c71d1436758db8a13223b3a5740062a04fa169ae9875
4
+ data.tar.gz: afb492c0d27d008b779e426f081c0be491dff7616120115668468f9ff2c1872c
5
5
  SHA512:
6
- metadata.gz: bd4d59e6bc6931b67e915d278fbd34f022721a9fd1a9fa9c0fa9f1aac39fd5c04f1749dccb9638aed1066e1c8ae9f0a42915ec00b1b291e83397ffdda095cfe5
7
- data.tar.gz: 2b8a93690ec0853df92b6da7a22d7ee59dd51f5b9fb24d8fe231076a7233a5ce20513831b6ce50bc85ca94bd1ddc1c4f67d542ecd838b45cafbadf621f593cd0
6
+ metadata.gz: 0cc6afa5e3543bab0de8682f0d9a2d45df99a442e2253fe8f028ef190c59cb44710969b9f22e63c4ef4a0e604f96243b616589683ec6ff5d68273cfd2fe0ac40
7
+ data.tar.gz: 9d5253d1aac3f87db2e76ae013c16a5a71ebfd649f8bbaf882b74f90af2e5bdfe2c99cb6fbb9f83cc4efa094117d26dfd7e898d902fc0eb60a74559dca6f9af7
checksums.yaml.gz.sig CHANGED
Binary file
data/.envrc CHANGED
@@ -1,6 +1,7 @@
1
1
  # Run any command in this library's bin/ without the bin/ prefix!
2
- PATH_add bin
2
+ # Prefer exe version over binstub
3
3
  PATH_add exe
4
+ PATH_add bin
4
5
 
5
6
  # Only add things to this file that should be shared with the team.
6
7
 
@@ -20,8 +21,8 @@ export K_SOUP_COV_DO=true # Means you want code coverage
20
21
  export K_SOUP_COV_COMMAND_NAME="Test Coverage"
21
22
  # Available formats are html, xml, rcov, lcov, json, tty
22
23
  export K_SOUP_COV_FORMATTERS="html,xml,rcov,lcov,json,tty"
23
- export K_SOUP_COV_MIN_BRANCH=96 # Means you want to enforce X% branch coverage
24
- export K_SOUP_COV_MIN_LINE=100 # Means you want to enforce X% line coverage
24
+ export K_SOUP_COV_MIN_BRANCH=77 # Means you want to enforce X% branch coverage
25
+ export K_SOUP_COV_MIN_LINE=97 # Means you want to enforce X% line coverage
25
26
  export K_SOUP_COV_MIN_HARD=true # Means you want the build to fail if the coverage thresholds are not met
26
27
  export K_SOUP_COV_MULTI_FORMATTERS=true
27
28
  export K_SOUP_COV_OPEN_BIN= # Means don't try to open coverage results in browser
@@ -4,12 +4,10 @@ on:
4
4
  push:
5
5
  branches:
6
6
  - 'main'
7
+ - "*-stable"
7
8
  tags:
8
9
  - '!*' # Do not execute on tags
9
10
  pull_request:
10
- # types specification prevents double build on push & pull request
11
- # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
12
- types: [opened, synchronize]
13
11
  branches:
14
12
  - '*'
15
13
  # Allow manually triggering the workflow.
@@ -23,7 +21,7 @@ concurrency:
23
21
 
24
22
  jobs:
25
23
  test:
26
- if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
24
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
27
25
  name: Specs ${{ matrix.ruby }} ${{ matrix.appraisal }}${{ matrix.name_extra || '' }}
28
26
  runs-on: ubuntu-22.04
29
27
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
@@ -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: 90
11
- K_SOUP_COV_MIN_LINE: 95
10
+ K_SOUP_COV_MIN_BRANCH: 72
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"
14
14
  K_SOUP_COV_DO: true
@@ -19,12 +19,10 @@ on:
19
19
  push:
20
20
  branches:
21
21
  - 'main'
22
+ - "*-stable"
22
23
  tags:
23
24
  - '!*' # Do not execute on tags
24
25
  pull_request:
25
- # types specification prevents double build on push & pull request
26
- # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
27
- types: [opened, synchronize]
28
26
  branches:
29
27
  - '*'
30
28
  # Allow manually triggering the workflow.
@@ -38,7 +36,7 @@ concurrency:
38
36
 
39
37
  jobs:
40
38
  coverage:
41
- if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
39
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
42
40
  name: Code Coverage on ${{ matrix.ruby }}@current
43
41
  runs-on: ubuntu-latest
44
42
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
@@ -118,7 +116,7 @@ jobs:
118
116
  hide_complexity: true
119
117
  indicators: true
120
118
  output: both
121
- thresholds: '95 90'
119
+ thresholds: '94 72'
122
120
  continue-on-error: ${{ matrix.experimental != 'false' }}
123
121
 
124
122
  - name: Add Coverage PR Comment
@@ -8,12 +8,10 @@ on:
8
8
  push:
9
9
  branches:
10
10
  - 'main'
11
+ - "*-stable"
11
12
  tags:
12
13
  - '!*' # Do not execute on tags
13
14
  pull_request:
14
- # types specification prevents double build on push & pull request
15
- # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
16
- types: [opened, synchronize]
17
15
  branches:
18
16
  - '*'
19
17
  # Allow manually triggering the workflow.
@@ -30,7 +28,7 @@ concurrency:
30
28
 
31
29
  jobs:
32
30
  test:
33
- if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
31
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
34
32
  name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
35
33
  runs-on: ubuntu-latest
36
34
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
@@ -7,12 +7,10 @@ on:
7
7
  push:
8
8
  branches:
9
9
  - 'main'
10
+ - "*-stable"
10
11
  tags:
11
12
  - '!*' # Do not execute on tags
12
13
  pull_request:
13
- # types specification prevents double build on push & pull request
14
- # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
15
- types: [opened, synchronize]
16
14
  branches:
17
15
  - '*'
18
16
  # Allow manually triggering the workflow.
@@ -29,7 +27,7 @@ concurrency:
29
27
 
30
28
  jobs:
31
29
  test:
32
- if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
30
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
33
31
  name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}${{ matrix.name_extra || '' }}
34
32
  runs-on: ubuntu-latest
35
33
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
@@ -7,12 +7,10 @@ on:
7
7
  push:
8
8
  branches:
9
9
  - 'main'
10
+ - "*-stable"
10
11
  tags:
11
12
  - '!*' # Do not execute on tags
12
13
  pull_request:
13
- # types specification prevents double build on push & pull request
14
- # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
15
- types: [opened, synchronize]
16
14
  branches:
17
15
  - '*'
18
16
  # Allow manually triggering the workflow.
@@ -29,7 +27,7 @@ concurrency:
29
27
 
30
28
  jobs:
31
29
  test:
32
- if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
30
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
33
31
  name: Specs ${{ matrix.ruby }} ${{ matrix.appraisal }}${{ matrix.name_extra || '' }}
34
32
  runs-on: ubuntu-22.04
35
33
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
@@ -7,12 +7,10 @@ on:
7
7
  push:
8
8
  branches:
9
9
  - 'main'
10
+ - "*-stable"
10
11
  tags:
11
12
  - '!*' # Do not execute on tags
12
13
  pull_request:
13
- # types specification prevents double build on push & pull request
14
- # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
15
- types: [opened, synchronize]
16
14
  branches:
17
15
  - '*'
18
16
  # Allow manually triggering the workflow.
@@ -29,7 +27,7 @@ concurrency:
29
27
 
30
28
  jobs:
31
29
  test:
32
- if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
30
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
33
31
  name: Specs ${{ matrix.ruby }} ${{ matrix.appraisal }}${{ matrix.name_extra || '' }}
34
32
  runs-on: ubuntu-22.04
35
33
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
@@ -41,9 +41,6 @@ on:
41
41
  tags:
42
42
  - '!*' # Do not execute on tags
43
43
  pull_request:
44
- # types specification prevents double build on push & pull request
45
- # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
46
- types: [opened, synchronize]
47
44
  branches:
48
45
  - '*'
49
46
  # Allow manually triggering the workflow.
@@ -57,7 +54,7 @@ concurrency:
57
54
 
58
55
  jobs:
59
56
  test:
60
- if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
57
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
61
58
  name: Default rake task w/ main Gemfile.lock ${{ matrix.name_extra || '' }}
62
59
  runs-on: ubuntu-latest
63
60
  continue-on-error: ${{ matrix.experimental }}
@@ -4,12 +4,10 @@ on:
4
4
  push:
5
5
  branches:
6
6
  - 'main'
7
+ - "*-stable"
7
8
  tags:
8
9
  - '!*' # Do not execute on tags
9
10
  pull_request:
10
- # types specification prevents double build on push & pull request
11
- # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
12
- types: [opened, synchronize]
13
11
  branches:
14
12
  - '*'
15
13
  # Allow manually triggering the workflow.
@@ -26,7 +24,7 @@ concurrency:
26
24
 
27
25
  jobs:
28
26
  rubocop:
29
- if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
27
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
30
28
  name: Style on ${{ matrix.ruby }}@current
31
29
  runs-on: ubuntu-latest
32
30
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
@@ -7,12 +7,10 @@ on:
7
7
  push:
8
8
  branches:
9
9
  - 'main'
10
+ - "*-stable"
10
11
  tags:
11
12
  - '!*' # Do not execute on tags
12
13
  pull_request:
13
- # types specification prevents double build on push & pull request
14
- # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
15
- types: [opened, synchronize]
16
14
  branches:
17
15
  - '*'
18
16
  # Allow manually triggering the workflow.
@@ -29,7 +27,7 @@ concurrency:
29
27
 
30
28
  jobs:
31
29
  test:
32
- if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
30
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
33
31
  name: Specs ${{ matrix.ruby }} ${{ matrix.appraisal }}${{ matrix.name_extra || '' }}
34
32
  runs-on: ubuntu-latest
35
33
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
@@ -7,12 +7,10 @@ on:
7
7
  push:
8
8
  branches:
9
9
  - 'main'
10
+ - "*-stable"
10
11
  tags:
11
12
  - '!*' # Do not execute on tags
12
13
  pull_request:
13
- # types specification prevents double build on push & pull request
14
- # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
15
- types: [opened, synchronize]
16
14
  branches:
17
15
  - '*'
18
16
  # Allow manually triggering the workflow.
@@ -29,7 +27,7 @@ concurrency:
29
27
 
30
28
  jobs:
31
29
  test:
32
- if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
30
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
33
31
  name: Specs ${{ matrix.ruby }} ${{ matrix.appraisal }}${{ matrix.name_extra || '' }}
34
32
  runs-on: ubuntu-22.04
35
33
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
@@ -31,9 +31,6 @@ on:
31
31
  tags:
32
32
  - '!*' # Do not execute on tags
33
33
  pull_request:
34
- # types specification prevents double build on push & pull request
35
- # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
36
- types: [opened, synchronize]
37
34
  branches:
38
35
  - '*'
39
36
  # Allow manually triggering the workflow.
@@ -47,7 +44,7 @@ concurrency:
47
44
 
48
45
  jobs:
49
46
  test:
50
- if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
47
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
51
48
  name: Default rake task w/ unlocked deps ${{ matrix.name_extra || '' }}
52
49
  runs-on: ubuntu-latest
53
50
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
@@ -7,12 +7,10 @@ on:
7
7
  push:
8
8
  branches:
9
9
  - 'main'
10
+ - "*-stable"
10
11
  tags:
11
12
  - '!*' # Do not execute on tags
12
13
  pull_request:
13
- # types specification prevents double build on push & pull request
14
- # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
15
- types: [opened, synchronize]
16
14
  branches:
17
15
  - '*'
18
16
  # Allow manually triggering the workflow.
@@ -29,7 +27,7 @@ concurrency:
29
27
 
30
28
  jobs:
31
29
  test:
32
- if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
30
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
33
31
  name: Specs ${{ matrix.ruby }} ${{ matrix.appraisal }}${{ matrix.name_extra || '' }}
34
32
  runs-on: ubuntu-22.04
35
33
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
data/.junie/guidelines.md CHANGED
@@ -120,13 +120,14 @@ This document captures project-specific knowledge to streamline setup, testing,
120
120
 
121
121
  Quick start
122
122
  1) bundle install
123
- 2) K_SOUP_COV_FORMATTERS="xml,rcov,lcov,json" bin/rspec (generates coverage reports in coverage/ in the specified formats, only choose the formats you need)
124
- 3) Optional local HTML coverage report: K_SOUP_COV_FORMATTERS="html" bin/rspec (generates HTML coverage report in coverage/ - but this is too verbose for AI, so Junie should use one of the more terse formats, like rcov, lcov, or json)
125
- 4) Static analysis: bundle exec rake rubocop_gradual:check && bundle exec rake reek
123
+ 2) K_SOUP_COV_FORMATTERS="json" bin/rspec (generates a JSON coverage report with both line and branch data in coverage/. Use this single format.)
124
+ 3) Static analysis: bundle exec rake rubocop_gradual:check && bundle exec rake reek
126
125
 
127
126
  Notes
128
127
  - ALWAYS Run bundle exec rake rubocop_gradual:autocorrect as the final step before completing a task, to lint and autocorrect any remaining issues. Then if there are new lint failures, attempt to correct them manually.
129
128
  - NEVER run vanilla rubocop, as it won't handle the linting config properly. Always run rubocop_gradual:autocorrect or rubocop_gradual.
130
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.
131
130
  - When adding code that writes to STDOUT, remember most specs silence output unless tagged with :check_output or DEBUG=true.
131
+ - 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
+ - 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
132
133
  - For all the kettle-soup-cover options, see .envrc and find the K_SOUP_COV_* env vars.
data/.simplecov CHANGED
@@ -4,4 +4,8 @@ require "kettle/soup/cover/config"
4
4
  # It is controlled by ENV variables, which are set in .envrc and loaded via `direnv allow`
5
5
  # If the values for minimum coverage need to change, they should be changed both there,
6
6
  # and in 2 places in .github/workflows/coverage.yml.
7
- SimpleCov.start
7
+ SimpleCov.start do
8
+ track_files "lib/**/*.rb"
9
+ track_files "lib/**/*.rake"
10
+ track_files "exe/*.rb"
11
+ end
data/Appraisals CHANGED
@@ -79,12 +79,15 @@ appraise "ruby-3-0" do
79
79
  end
80
80
 
81
81
  appraise "ruby-3-1" do
82
+ # all versions of git gem are incompatible with truffleruby v23.0, syntactically.
82
83
  gem "erb"
83
84
  gem "mutex_m", "~> 0.2"
84
85
  gem "stringio", "~> 3.0"
85
86
  end
86
87
 
87
88
  appraise "ruby-3-2" do
89
+ # all versions of git gem are incompatible with truffleruby v23.1, syntactically.
90
+ gem "git", "< 3"
88
91
  gem "erb"
89
92
  gem "mutex_m", "~> 0.2"
90
93
  gem "stringio", "~> 3.0"
data/CHANGELOG.md CHANGED
@@ -1,8 +1,20 @@
1
1
  # Changelog
2
+
3
+ [![SemVer 2.0.0][📌semver-img]][📌semver] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog]
4
+
2
5
  All notable changes to this project will be documented in this file.
3
6
 
4
- The format is based on [Keep a Changelog v1](https://keepachangelog.com/en/1.0.0/),
5
- and this project adheres to [Semantic Versioning v2](https://semver.org/spec/v2.0.0.html).
7
+ The format is based on [Keep a Changelog][📗keep-changelog],
8
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
9
+ and [yes][📌major-versions-not-sacred], platform and engine support are part of the [public API][📌semver-breaking].
10
+ Please file a bug if you notice a violation of semantic versioning.
11
+
12
+ [📌semver]: https://semver.org/spec/v2.0.0.html
13
+ [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-FFDD67.svg?style=flat
14
+ [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
15
+ [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
16
+ [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
17
+ [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-FFDD67.svg?style=flat
6
18
 
7
19
  ## [Unreleased]
8
20
  ### Added
@@ -12,6 +24,37 @@ and this project adheres to [Semantic Versioning v2](https://semver.org/spec/v2.
12
24
  ### Fixed
13
25
  ### Security
14
26
 
27
+ ## [1.0.10] - 2025-08-24
28
+ - 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
31
+ - 77.00% documented
32
+ ### Added
33
+ - runs git add --all before git commit, to ensure all files are committed.
34
+ ### Changed
35
+ - This gem is now loaded via Ruby's standard `autoload` feature.
36
+ - Bundler is always expected, and most things probably won't work without it.
37
+ - exe/ scripts and rake tasks logic is all now moved into classes for testability, and is nearly fully covered by tests.
38
+ - New Kettle::Dev::GitAdapter class is an adapter pattern wrapper for git commands
39
+ - New Kettle::Dev::ExitAdapter class is an adapter pattern wrapper for Kernel.exit and Kernel.abort within this codebase.
40
+ ### Removed
41
+ - attempts to make exe/* scripts work without bundler. Bundler is required.
42
+ ### Fixed
43
+ - `Kettle::Dev::ReleaseCLI#detect_version` handles gems with multiple VERSION constants
44
+ - `kettle:dev:template` task was fixed to copy `.example` files with the destination filename lacking the `.example` extension, except for `.env.local.example`
45
+
46
+ ## [1.0.9] - 2025-08-24
47
+ - TAG: [v1.0.9][1.0.9t]
48
+ - COVERAGE: 100.00% -- 130/130 lines in 7 files
49
+ - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
50
+ - 95.35% documented
51
+ ### Added
52
+ - kettle-release: Add a sanity check for the latest released version of the gem being released, and display it during the confirmation with user that CHANGELOG.md and version.rb have been updated, so they can compare the value in version.rb with the value of the latest released version.
53
+ - If the value in version.rb is less than the latest released version's major or minor, then check for the latest released version that matches the major + minor of what is in version.rb.
54
+ - This way a stable branch intended to release patch updates to older versions is able to work use the script.
55
+ - kettle-release: optional pre-push local CI run using `act`, controlled by env var `K_RELEASE_LOCAL_CI` ("true" to run, "ask" to prompt) and `K_RELEASE_LOCAL_CI_WORKFLOW` to choose a workflow; defaults to `locked_deps.yml` when present; on failure, soft-resets the release prep commit and aborts.
56
+ - template task: now copies `certs/pboling.pem` into the host project when available.
57
+
15
58
  ## [1.0.8] - 2025-08-24
16
59
  - TAG: [v1.0.8][1.0.8t]
17
60
  - COVERAGE: 100.00% -- 130/130 lines in 7 files
@@ -116,7 +159,11 @@ and this project adheres to [Semantic Versioning v2](https://semver.org/spec/v2.
116
159
  - Selecting will run the selected workflow via `act`
117
160
  - This may move to its own gem in the future.
118
161
 
119
- [Unreleased]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.8...HEAD
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
120
167
  [1.0.8]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.7...v1.0.8
121
168
  [1.0.8t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.8
122
169
  [1.0.7]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.6...v1.0.7
@@ -0,0 +1,47 @@
1
+ # Changelog
2
+
3
+ [![SemVer 2.0.0][📌semver-img]][📌semver] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog]
4
+
5
+ All notable changes to this project will be documented in this file.
6
+
7
+ The format is based on [Keep a Changelog][📗keep-changelog],
8
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
9
+ and [yes][📌major-versions-not-sacred], platform and engine support are part of the [public API][📌semver-breaking].
10
+ Please file a bug if you notice a violation of semantic versioning.
11
+
12
+ [📌semver]: https://semver.org/spec/v2.0.0.html
13
+ [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-FFDD67.svg?style=flat
14
+ [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
15
+ [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
16
+ [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
17
+ [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-FFDD67.svg?style=flat
18
+
19
+ ## [Unreleased]
20
+ ### Added
21
+ ### Changed
22
+ ### Deprecated
23
+ ### Removed
24
+ ### Fixed
25
+ ### Security
26
+
27
+ ## [1.0.1] - 2025-08-24
28
+ - TAG: [v1.0.1][1.0.1t]
29
+ - COVERAGE: 100.00% -- 130/130 lines in 7 files
30
+ - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
31
+ - 100% documented
32
+ ### Fixed
33
+ - bugfix: oopsie
34
+
35
+ ## [1.0.0] - 2025-08-24
36
+ - TAG: [v1.0.0][1.0.0t]
37
+ - COVERAGE: 100.00% -- 130/130 lines in 7 files
38
+ - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
39
+ - 100% documented
40
+ ### Added
41
+ - Initial release
42
+
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
+ [1.0.0]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/a427c302df09cfe4253a7c8d400333f9a4c1a208...v1.0.0
47
+ [1.0.0t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.0
data/CONTRIBUTING.md CHANGED
@@ -51,6 +51,12 @@ To run all tests
51
51
  bundle exec rake test
52
52
  ```
53
53
 
54
+ ### Spec organization (required)
55
+
56
+ - For each class or module under `lib/`, keep all of its unit tests in a single spec file under `spec/` that mirrors the path and file name (e.g., specs for `lib/kettle/dev/release_cli.rb` live in `spec/kettle/dev/release_cli_spec.rb`).
57
+ - Do not create ad-hoc "_more" or split spec files for the same class/module. Consolidate all unit tests into the main spec file for that class/module.
58
+ - Only integration scenarios that intentionally span multiple classes belong in `spec/integration/`.
59
+
54
60
  ## Lint It
55
61
 
56
62
  Run all the default tasks, which includes running the gradually autocorrecting linter, `rubocop-gradual`.
data/README.md CHANGED
@@ -21,11 +21,16 @@ OTOH, if `ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I
21
21
 
22
22
  ## 🌻 Synopsis
23
23
 
24
- Add to your `Rakefile`:
24
+ This gem integrates tightly with [kettle-test](https://github.com/kettle-rb/kettle-test).
25
+
26
+ ```ruby
27
+ require "kettle/test/rspec"
28
+ ```
29
+
30
+ Then, add to your `Rakefile`:
25
31
 
26
32
  ```ruby
27
33
  require "kettle/dev"
28
- Kettle::Dev.install_tasks
29
34
  ```
30
35
 
31
36
  Now you have many powerful development and testing tools at your disposal, all fully [documented](#-configuration) and tested.
@@ -136,11 +141,20 @@ NOTE: Be prepared to track down certs for signed gems and add them the same way
136
141
 
137
142
  ## ⚙️ Configuration
138
143
 
144
+ ### RSpec
145
+
146
+ This gem integrates tightly with [kettle-test](https://github.com/kettle-rb/kettle-test).
147
+
148
+ ```ruby
149
+ require "kettle/test/rspec"
150
+ ```
151
+
152
+ ### Rakefile
153
+
139
154
  Add to your `Rakefile`:
140
155
 
141
156
  ```ruby
142
157
  require "kettle/dev"
143
- Kettle::Dev.install_tasks
144
158
  ```
145
159
 
146
160
  That’s it. When installed, kettle-dev:
@@ -231,6 +245,7 @@ GitHub Actions local runner helper
231
245
  Project automation bootstrap
232
246
  - `bundle exec rake kettle:dev:install` — copies the library’s `.github` folder into your project and offers to install `.git-hooks` templates locally or globally.
233
247
  - `bundle exec rake kettle:dev:template` — runs only the templating step used by install; useful to re-apply updates to templates (.github workflows, .devcontainer, .qlty, modular Gemfiles, README, and friends) without the `install` task’s extra prompts.
248
+ - Also copies maintainer certificate `certs/pboling.pem` into your project when present (used for signed gem builds).
234
249
  - README carry-over during templating: when your project’s README.md is replaced by the template, selected sections from your existing README are preserved and merged into the new one. Specifically, the task carries over the following sections (matched case-insensitively):
235
250
  - "Synopsis"
236
251
  - "Configuration"
@@ -249,6 +264,10 @@ Project automation bootstrap
249
264
  Releasing (maintainers)
250
265
  - `exe/kettle-release` — guided release helper that:
251
266
  - Runs sanity checks (`bin/setup`, `bin/rake`), confirms version/changelog, optionally updates Appraisals, commits “🔖 Prepare release vX.Y.Z”.
267
+ - Optionally runs your CI locally with `act` before any push:
268
+ - Enable with env: `K_RELEASE_LOCAL_CI="true"` (run automatically) or `K_RELEASE_LOCAL_CI="ask"` (prompt [Y/n]).
269
+ - Select workflow with `K_RELEASE_LOCAL_CI_WORKFLOW` (with or without .yml/.yaml). Defaults to `locked_deps.yml` if present; otherwise the first workflow discovered.
270
+ - On failure, the release prep commit is soft-rolled-back (`git reset --soft HEAD^`) and the process aborts.
252
271
  - Ensures trunk sync and rebases feature as needed, pushes, monitors GitHub Actions with a progress bar, and merges feature to trunk on success.
253
272
  - Exports `SOURCE_DATE_EPOCH`, builds (optionally signed), creates gem checksums, and runs `bundle exec rake release` (prompts for signing key + RubyGems MFA OTP as needed).
254
273
 
@@ -283,7 +302,6 @@ Tip: The commit message helper `exe/kettle-commit-msg` prefers project-local `.g
283
302
  - Note: When used with the provided `.git-hooks`, the subject should start with a gitmoji character (see [gitmoji][📌gitmoji]).
284
303
  - Tip: Run this locally before committing to keep your README current, or schedule it in CI to refresh periodically.
285
304
 
286
-
287
305
  ## 🦷 FLOSS Funding
288
306
 
289
307
  While kettle-rb tools are free software and will always be, the project would benefit immensely from some funding.
@@ -641,7 +659,7 @@ Thanks for RTFM. ☺️
641
659
  [📌gitmoji]:https://gitmoji.dev
642
660
  [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20😜%20😍-34495e.svg?style=flat-square
643
661
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
644
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.130-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
662
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-1.725-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
645
663
  [🔐security]: SECURITY.md
646
664
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
647
665
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year