kettle-dev 1.0.7 → 1.0.9

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: 757457767d7c4dce99cfbb226f4c8a2a0f94b9a9aadd601b55f21c48a53cda30
4
- data.tar.gz: e06421edd27c37161d6438f47809828914b2abd6c1b09722d0f7154eaacf078c
3
+ metadata.gz: 32a4bff14544feed4dc60644fe0bb8d0ed1a76cb1f49c0144c8f9748e23ea993
4
+ data.tar.gz: d574fb5dc72da3caf7ee83f64fb064606930d33df23ff6f9a6a907692a21fbe8
5
5
  SHA512:
6
- metadata.gz: 16c04f9745823ca90d1c22e0e471942fc81469fc8022cb6bdf3c064eee5c1f656d077e54ea283906f117d31f0101daf3057f18d7ef472c4373bbe1441c4b4672
7
- data.tar.gz: 4a6ca6d6fe40cd1c694d73b6527e62d4dc44f97fe72a9b41a796f920b8a1c42a78e2c49f2040dae22d5c277b545b356a592f1ee54c1e28fca4ff6173a4ed1c78
6
+ metadata.gz: f68fef35d7bd888e0132e68e27cfcf31f18ba6098ecbccebeadab0cb4154f1fd12ce32fdce828a5699a18362893059ea4302224084a7446fb90b7a12aaee00b5
7
+ data.tar.gz: ac0dea1fca1ea03add3375fa9f8b884f5b57394d45db39c1b00caebe8bcb33f79a66b9d88ef020a4edc3b19d4630086625fda371522953a48f1f38c5994307af
checksums.yaml.gz.sig CHANGED
Binary file
@@ -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') }}
@@ -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') }}
@@ -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/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,26 @@ and this project adheres to [Semantic Versioning v2](https://semver.org/spec/v2.
12
24
  ### Fixed
13
25
  ### Security
14
26
 
27
+ ## [1.0.9] - 2025-08-24
28
+ - TAG: [v1.0.9][1.0.9t]
29
+ - COVERAGE: 100.00% -- 130/130 lines in 7 files
30
+ - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
31
+ - 95.35% documented
32
+ ### Added
33
+ - 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.
34
+ - 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.
35
+ - This way a stable branch intended to release patch updates to older versions is able to work use the script.
36
+ - 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.
37
+ - template task: now copies `certs/pboling.pem` into the host project when available.
38
+
39
+ ## [1.0.8] - 2025-08-24
40
+ - TAG: [v1.0.8][1.0.8t]
41
+ - COVERAGE: 100.00% -- 130/130 lines in 7 files
42
+ - BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
43
+ - 95.35% documented
44
+ ### Fixed
45
+ - Can't add checksums to the gem package, because it changes the checksum (duh!)
46
+
15
47
  ## [1.0.7] - 2025-08-24
16
48
  - TAG: [v1.0.7][1.0.7t]
17
49
  - COVERAGE: 100.00% -- 130/130 lines in 7 files
@@ -108,7 +140,11 @@ and this project adheres to [Semantic Versioning v2](https://semver.org/spec/v2.
108
140
  - Selecting will run the selected workflow via `act`
109
141
  - This may move to its own gem in the future.
110
142
 
111
- [Unreleased]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.7...HEAD
143
+ [Unreleased]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.9...HEAD
144
+ [1.0.9]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.8...v1.0.9
145
+ [1.0.9t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.9
146
+ [1.0.8]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.7...v1.0.8
147
+ [1.0.8t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.8
112
148
  [1.0.7]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.6...v1.0.7
113
149
  [1.0.7t]: https://gitlab.com/kettle-rb/kettle-dev/-/tags/v1.0.7
114
150
  [1.0.6]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.5...v1.0.6
@@ -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/README.md CHANGED
@@ -231,6 +231,7 @@ GitHub Actions local runner helper
231
231
  Project automation bootstrap
232
232
  - `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
233
  - `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.
234
+ - Also copies maintainer certificate `certs/pboling.pem` into your project when present (used for signed gem builds).
234
235
  - 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
236
  - "Synopsis"
236
237
  - "Configuration"
@@ -249,6 +250,10 @@ Project automation bootstrap
249
250
  Releasing (maintainers)
250
251
  - `exe/kettle-release` — guided release helper that:
251
252
  - Runs sanity checks (`bin/setup`, `bin/rake`), confirms version/changelog, optionally updates Appraisals, commits “🔖 Prepare release vX.Y.Z”.
253
+ - Optionally runs your CI locally with `act` before any push:
254
+ - Enable with env: `K_RELEASE_LOCAL_CI="true"` (run automatically) or `K_RELEASE_LOCAL_CI="ask"` (prompt [Y/n]).
255
+ - 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.
256
+ - On failure, the release prep commit is soft-rolled-back (`git reset --soft HEAD^`) and the process aborts.
252
257
  - Ensures trunk sync and rebases feature as needed, pushes, monitors GitHub Actions with a progress bar, and merges feature to trunk on success.
253
258
  - 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
259
 
data/Rakefile CHANGED
@@ -1,22 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Galtzo FLOSS Rakefile v1.0.11 - 2025-08-19
3
+ # kettle-dev Rakefile v1.0.0 - 2025-08-23
4
4
  # Ruby 2.3 (Safe Navigation) or higher required
5
5
  #
6
- # CHANGELOG
7
- # v1.0.0 - initial release w/ support for rspec, minitest, rubocop, reek, yard, and stone_checksums
8
- # v1.0.1 - fix test / spec tasks running 2x
9
- # v1.0.2 - fix duplicate task warning from RuboCop
10
- # v1.0.3 - add bench tasks to run mini benchmarks (add scripts to /benchmarks)
11
- # v1.0.4 - add support for floss_funding:install
12
- # v1.0.5 - add support for halting in Rake tasks with binding.b (from debug gem)
13
- # v1.0.6 - add RBS files and checksums to YARD-generated docs site
14
- # v1.0.7 - works with vanilla ruby, non-gem, bundler-managed, projects
15
- # v1.0.8 - improved Dir globs, add back and document rbconfig dependency
16
- # v1.0.9 - add appraisal:update task to update Appraisal gemfiles and autocorrect with RuboCop Gradual
17
- # v1.0.10 - add ci:act to run GHA workflows locally, and get status of remote workflows
18
- # v1.0.11 - ci:act workflows are populated entirely dynamically, based on existing files
19
- #
20
6
  # MIT License (see License.txt)
21
7
  #
22
8
  # Copyright (c) 2025 Peter H. Boling (galtzo.com)
@@ -25,34 +11,41 @@
25
11
  #
26
12
  # Sets up tasks for appraisal, floss_funding, rspec, minitest, rubocop, reek, yard, and stone_checksums.
27
13
  #
28
- # rake appraisal:update # Update Appraisal gemfiles and run RuboCop Gradual autocorrect
29
- # rake bench # Run all benchmarks (alias for bench:run)
30
- # rake bench:list # List available benchmark scripts
31
- # rake bench:run # Run all benchmark scripts (skips on CI)
32
- # rake build # Build gitmoji-regex-1.0.2.gem into the pkg directory
33
- # rake build:checksum # Generate SHA512 checksum of gitmoji-regex-1.0.2.gem into the checksums directory
34
- # rake build:generate_checksums # Generate both SHA256 & SHA512 checksums into the checksums directory, and git...
35
- # rake bundle:audit:check # Checks the Gemfile.lock for insecure dependencies
36
- # rake bundle:audit:update # Updates the bundler-audit vulnerability database
37
- # rake ci:act[opt] # Run 'act' with a selected workflow
38
- # rake clean # Remove any temporary products
39
- # rake clobber # Remove any generated files
40
- # rake coverage # Run specs w/ coverage and open results in browser
41
- # rake floss_funding:install # (stub) floss_funding is unavailable
42
- # rake install # Build and install gitmoji-regex-1.0.2.gem into system gems
43
- # rake install:local # Build and install gitmoji-regex-1.0.2.gem into system gems without network ac...
44
- # rake reek # Check for code smells
45
- # rake reek:update # Run reek and store the output into the REEK file
46
- # rake release[remote] # Create tag v1.0.2 and build and push gitmoji-regex-1.0.2.gem to rubygems.org
47
- # rake rubocop # alias rubocop task to rubocop_gradual
48
- # rake rubocop_gradual # Run RuboCop Gradual
49
- # rake rubocop_gradual:autocorrect # Run RuboCop Gradual with autocorrect (only when it's safe)
50
- # rake rubocop_gradual:autocorrect_all # Run RuboCop Gradual with autocorrect (safe and unsafe)
51
- # rake rubocop_gradual:check # Run RuboCop Gradual to check the lock file
52
- # rake rubocop_gradual:force_update # Run RuboCop Gradual to force update the lock file
53
- # rake spec # Run RSpec code examples
54
- # rake test # Run tests
55
- # rake yard # Generate YARD Documentation
14
+ # rake appraisal:update # Update Appraisal gemfiles and run RuboCop...
15
+ # rake bench # Run all benchmarks (alias for bench:run)
16
+ # rake bench:list # List available benchmark scripts
17
+ # rake bench:run # Run all benchmark scripts (skips on CI)
18
+ # rake build # Build kettle-dev-1.0.0.gem into the pkg d...
19
+ # rake build:checksum # Generate SHA512 checksum of kettle-dev-1....
20
+ # rake build:generate_checksums # Generate both SHA256 & SHA512 checksums i...
21
+ # rake bundle:audit:check # Checks the Gemfile.lock for insecure depe...
22
+ # rake bundle:audit:update # Updates the bundler-audit vulnerability d...
23
+ # rake ci:act[opt] # Run 'act' with a selected workflow
24
+ # rake clean # Remove any temporary products
25
+ # rake clobber # Remove any generated files
26
+ # rake coverage # Run specs w/ coverage and open results in...
27
+ # rake default # Default tasks aggregator
28
+ # rake install # Build and install kettle-dev-1.0.0.gem in...
29
+ # rake install:local # Build and install kettle-dev-1.0.0.gem in...
30
+ # rake kettle:dev:install # Install kettle-dev GitHub automation and ...
31
+ # rake kettle:dev:template # Template kettle-dev files into the curren...
32
+ # rake reek # Check for code smells
33
+ # rake reek:update # Run reek and store the output into the RE...
34
+ # rake release[remote] # Create tag v1.0.0 and build and push kett...
35
+ # rake rubocop_gradual # Run RuboCop Gradual
36
+ # rake rubocop_gradual:autocorrect # Run RuboCop Gradual with autocorrect (onl...
37
+ # rake rubocop_gradual:autocorrect_all # Run RuboCop Gradual with autocorrect (saf...
38
+ # rake rubocop_gradual:check # Run RuboCop Gradual to check the lock file
39
+ # rake rubocop_gradual:force_update # Run RuboCop Gradual to force update the l...
40
+ # rake rubocop_gradual_debug # Run RuboCop Gradual
41
+ # rake rubocop_gradual_debug:autocorrect # Run RuboCop Gradual with autocorrect (onl...
42
+ # rake rubocop_gradual_debug:autocorrect_all # Run RuboCop Gradual with autocorrect (saf...
43
+ # rake rubocop_gradual_debug:check # Run RuboCop Gradual to check the lock file
44
+ # rake rubocop_gradual_debug:force_update # Run RuboCop Gradual to force update the l...
45
+ # rake spec # Run RSpec code examples
46
+ # rake test # Run tests
47
+ # rake yard # Generate YARD Documentation
48
+ #
56
49
 
57
50
  # External gems
58
51
  require "bundler/gem_tasks" if !Dir[File.join(__dir__, "*.gemspec")].empty?
@@ -1,10 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
2
  # vim: set syntax=ruby
3
3
 
4
- ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
5
-
6
4
  require "rubygems"
7
- require "bundler/setup"
5
+ begin
6
+ require "bundler/setup"
7
+ rescue LoadError
8
+ # Allow running outside of Bundler; runtime deps should still be available via rubygems
9
+ end
8
10
 
9
11
  # Standard library
10
12
  require "erb"
@@ -51,7 +53,7 @@ class GitCommitFooter
51
53
  NAME_ASSIGNMENT_REGEX = /\bname\s*=\s*(["'])([^"']+)\1/.freeze
52
54
  FOOTER_APPEND = ENV.fetch("GIT_HOOK_FOOTER_APPEND", "false").casecmp("true").zero?
53
55
  SENTINEL = ENV["GIT_HOOK_FOOTER_SENTINEL"] # No default to avoid accidental duplicate commit of a footer via ammended commits
54
- raise "Set GIT_HOOK_FOOTER_SENTINEL=<footer sentinel> in .env.local (e.g., '⚡️ A message from a fellow meat-based-AI ⚡️')" if FOOTER_APPEND && SENTINEL.nil? || SENTINEL.empty?
56
+ raise "Set GIT_HOOK_FOOTER_SENTINEL=<footer sentinel> in .env.local (e.g., '⚡️ A message from a fellow meat-based-AI ⚡️')" if FOOTER_APPEND && (SENTINEL.nil? || SENTINEL.to_s.empty?)
55
57
 
56
58
  class << self
57
59
  def git_toplevel
@@ -20,7 +20,11 @@
20
20
  # # or ensure .opencollective.yml exists with collective: "kettle-rb"
21
21
 
22
22
  require "rubygems"
23
- require "bundler/setup"
23
+ begin
24
+ require "bundler/setup"
25
+ rescue LoadError
26
+ # Allow running outside of Bundler; runtime deps should still be available via rubygems
27
+ end
24
28
 
25
29
  require "yaml"
26
30
  require "json"
data/exe/kettle-release CHANGED
@@ -51,11 +51,47 @@ module Kettle
51
51
 
52
52
  ensure_bundler_2_7_plus!
53
53
 
54
- run_cmd!("bin/setup")
55
- run_cmd!("bin/rake")
56
-
57
54
  version = detect_version
58
55
  puts "Detected version: #{version.inspect}"
56
+
57
+ # Sanity check against latest released gem version (RubyGems)
58
+ begin
59
+ gem_name = detect_gem_name
60
+ latest_overall, latest_for_series = latest_released_versions(gem_name, version)
61
+ if latest_overall
62
+ msg = "Latest released: #{latest_overall}"
63
+ if latest_for_series && latest_for_series != latest_overall
64
+ msg += " | Latest for series #{Gem::Version.new(version).segments[0, 2].join(".")}.x: #{latest_for_series}"
65
+ elsif latest_for_series
66
+ msg += " (matches current series)"
67
+ end
68
+ puts msg
69
+
70
+ # Choose the comparison target:
71
+ # - If current series (MAJOR.MINOR) is behind overall latest, compare against the latest for the current series.
72
+ # - Otherwise (same or ahead), compare against overall latest.
73
+ cur = Gem::Version.new(version)
74
+ overall = Gem::Version.new(latest_overall)
75
+ cur_series = cur.segments[0, 2]
76
+ overall_series = overall.segments[0, 2]
77
+ target = if (cur_series <=> overall_series) == -1
78
+ latest_for_series # may be nil if no prior release in this series
79
+ else
80
+ latest_overall
81
+ end
82
+ if target && Gem::Version.new(version) <= Gem::Version.new(target)
83
+ series = cur_series.join(".")
84
+ warn("version.rb (#{version}) must be greater than the latest released version for series #{series}. Latest for series: #{target}.")
85
+ warn("Tip: bump PATCH for a stable branch release, or bump MINOR/MAJOR when on trunk.")
86
+ abort("Aborting: version bump required.")
87
+ end
88
+ else
89
+ puts "Could not determine latest released version from RubyGems (offline?). Proceeding without sanity check."
90
+ end
91
+ rescue StandardError => e
92
+ warn("Warning: failed to check RubyGems for latest version (#{e.class}: #{e.message}). Proceeding.")
93
+ end
94
+
59
95
  puts "Have you updated lib/**/version.rb and CHANGELOG.md for v#{version}? [y/N]"
60
96
  print("> ")
61
97
  ans = $stdin.gets&.strip
@@ -75,7 +111,10 @@ module Kettle
75
111
  end
76
112
 
77
113
  ensure_git_user!
78
- commit_release_prep!(version)
114
+ committed = commit_release_prep!(version)
115
+
116
+ # Optional: run a local CI check with 'act' prior to pushing
117
+ maybe_run_local_ci_before_push!(committed)
79
118
 
80
119
  trunk = detect_trunk_branch
81
120
  feature = current_branch
@@ -234,6 +273,86 @@ module Kettle
234
273
  end
235
274
  end
236
275
 
276
+ # Run a local CI workflow using 'act' before pushing the release prep commit, if enabled.
277
+ # Controlled by env var K_RELEASE_LOCAL_CI:
278
+ # - "true" => run without prompt
279
+ # - "ask" => prompt user [Y/n]
280
+ # - anything else or unset => skip
281
+ # Workflow selection:
282
+ # - If .github/workflows/locked_deps.yml (or .yaml) exists, default to it.
283
+ # - Else, use the first workflow from CIHelpers.workflows_list unless K_RELEASE_LOCAL_CI_WORKFLOW points to another file.
284
+ # On failure, soft reset the last commit if one was created, then abort.
285
+ def maybe_run_local_ci_before_push!(committed)
286
+ mode = (ENV["K_RELEASE_LOCAL_CI"] || "").strip.downcase
287
+ run_it = case mode
288
+ when "true", "1", "yes", "y" then true
289
+ when "ask"
290
+ print("Run local CI with 'act' before pushing? [Y/n] ")
291
+ ans = $stdin.gets&.strip
292
+ ans.nil? || ans.empty? || ans =~ /\Ay(es)?\z/i
293
+ else
294
+ false
295
+ end
296
+ return unless run_it
297
+
298
+ # Check for 'act'
299
+ act_ok = begin
300
+ system("act", "--version", out: File::NULL, err: File::NULL)
301
+ rescue StandardError
302
+ false
303
+ end
304
+ unless act_ok
305
+ puts "Skipping local CI: 'act' command not found. Install https://github.com/nektos/act to enable."
306
+ return
307
+ end
308
+
309
+ root = Kettle::Dev::CIHelpers.project_root
310
+ workflows_dir = File.join(root, ".github", "workflows")
311
+ candidates = Kettle::Dev::CIHelpers.workflows_list(root)
312
+
313
+ # Explicit override via env
314
+ chosen = (ENV["K_RELEASE_LOCAL_CI_WORKFLOW"] || "").strip
315
+ if !chosen.empty?
316
+ # Normalize to a basename with extension
317
+ if chosen !~ /\.ya?ml\z/
318
+ chosen = "#{chosen}.yml"
319
+ end
320
+ else
321
+ # Default to locked_deps if present
322
+ chosen = if candidates.include?("locked_deps.yml")
323
+ "locked_deps.yml"
324
+ elsif candidates.include?("locked_deps.yaml")
325
+ "locked_deps.yaml"
326
+ else
327
+ candidates.first
328
+ end
329
+ end
330
+
331
+ unless chosen
332
+ puts "Skipping local CI: no workflows found under .github/workflows."
333
+ return
334
+ end
335
+
336
+ file_path = File.join(workflows_dir, chosen)
337
+ unless File.file?(file_path)
338
+ puts "Skipping local CI: selected workflow not found: #{file_path}"
339
+ return
340
+ end
341
+
342
+ puts "== Running local CI with act on #{chosen} =="
343
+ ok = system("act", "-W", file_path)
344
+ if ok
345
+ puts "Local CI succeeded for #{chosen}."
346
+ else
347
+ puts "Local CI failed for #{chosen}."
348
+ if committed
349
+ puts "Rolling back release prep commit (soft reset)..."
350
+ system("git", "reset", "--soft", "HEAD^")
351
+ end
352
+ abort("Aborting due to local CI failure.")
353
+ end
354
+ end
355
+
237
356
  def detect_version
238
357
  # Look for lib/**/version.rb and extract VERSION constant string
239
358
  candidates = Dir[File.join(@root, "lib", "**", "version.rb")]
@@ -245,14 +364,48 @@ module Kettle
245
364
  m[2]
246
365
  end
247
366
 
367
+ def detect_gem_name
368
+ # Find a .gemspec in project root and extract spec.name
369
+ gemspecs = Dir[File.join(@root, "*.gemspec")]
370
+ abort("Could not find a .gemspec in project root.") if gemspecs.empty?
371
+ path = gemspecs.min
372
+ content = File.read(path)
373
+ m = content.match(/spec\.name\s*=\s*(["'])([^"']+)\1/)
374
+ abort("Could not determine gem name from #{path}.") unless m
375
+ m[2]
376
+ end
377
+
378
+ # Returns [latest_overall, latest_for_series] as strings (or nils)
379
+ def latest_released_versions(gem_name, current_version)
380
+ uri = URI("https://rubygems.org/api/v1/versions/#{gem_name}.json")
381
+ res = Net::HTTP.get_response(uri)
382
+ return [nil, nil] unless res.is_a?(Net::HTTPSuccess)
383
+ data = JSON.parse(res.body)
384
+ versions = data.map { |h| h["number"] }.compact
385
+ # Drop pre-releases if API indicates; fall back to simple filter by '-' pattern
386
+ versions.reject! { |v| v.to_s.include?("-pre") || v.to_s.include?(".pre") || v.to_s =~ /[a-zA-Z]/ }
387
+ gversions = versions.map { |s| Gem::Version.new(s) }.sort
388
+ latest_overall = gversions.last&.to_s
389
+
390
+ cur = Gem::Version.new(current_version)
391
+ series = cur.segments[0, 2]
392
+ series_versions = gversions.select { |gv| gv.segments[0, 2] == series }
393
+ latest_series = series_versions.last&.to_s
394
+ [latest_overall, latest_series]
395
+ rescue StandardError
396
+ [nil, nil]
397
+ end
398
+
248
399
  def commit_release_prep!(version)
249
400
  msg = "🔖 Prepare release v#{version}"
250
401
  # Only commit if there are changes (version/changelog)
251
402
  out, _ = git_output(["status", "--porcelain"])
252
403
  if out.empty?
253
404
  puts "No changes to commit for release prep (continuing)."
405
+ false
254
406
  else
255
407
  run_cmd!(%(git commit -am #{Shellwords.escape(msg)}))
408
+ true
256
409
  end
257
410
  end
258
411
 
@@ -65,6 +65,21 @@ namespace :ci do
65
65
  end
66
66
  end
67
67
 
68
+ get_sha = proc do
69
+ out, status = Open3.capture2("git", "rev-parse", "--short", "HEAD")
70
+ status.success? ? out.strip : nil
71
+ end
72
+
73
+ get_upstream = proc do
74
+ out, status = Open3.capture2("git", "rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{u}")
75
+ if status.success?
76
+ out.strip
77
+ else
78
+ br = get_branch.call
79
+ br ? "origin/#{br}" : nil
80
+ end
81
+ end
82
+
68
83
  status_emoji = proc do |status, conclusion|
69
84
  case status
70
85
  when "queued"
@@ -196,6 +211,20 @@ namespace :ci do
196
211
  owner, repo = org if org
197
212
  token = ENV["GITHUB_TOKEN"] || ENV["GH_TOKEN"]
198
213
 
214
+ # Header with remote branch and SHA
215
+ upstream = get_upstream.call
216
+ sha = get_sha.call
217
+ if org && branch
218
+ puts "Repo: #{owner}/#{repo}"
219
+ elsif org
220
+ puts "Repo: #{owner}/#{repo}"
221
+ else
222
+ puts "Repo: n/a"
223
+ end
224
+ puts "Upstream: #{upstream || "n/a"}"
225
+ puts "HEAD: #{sha || "n/a"}"
226
+ puts
227
+
199
228
  puts "Select a workflow to run with 'act':"
200
229
 
201
230
  # Render initial menu with placeholder statuses
@@ -239,16 +268,40 @@ namespace :ci do
239
268
  Thread.exit
240
269
  end
241
270
  uri = URI("https://api.github.com/repos/#{ow}/#{rp}/actions/workflows/#{f}/runs?branch=#{URI.encode_www_form_component(br)}&per_page=1")
242
- req = Net::HTTP::Get.new(uri)
243
- req["User-Agent"] = "ci:act rake task"
244
- req["Authorization"] = "token #{tk}" if tk && !tk.empty?
245
- res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
246
- status_q <<
247
- if res.is_a?(Net::HTTPSuccess)
248
- process_success_response(res, c, f)
249
- else
250
- [c, f, "fail #{res.code}"]
271
+ poll_interval = Integer(ENV["CI_ACT_POLL_INTERVAL"] || 5)
272
+ loop do
273
+ begin
274
+ req = Net::HTTP::Get.new(uri)
275
+ req["User-Agent"] = "ci:act rake task"
276
+ req["Authorization"] = "token #{tk}" if tk && !tk.empty?
277
+ res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
278
+ if res.is_a?(Net::HTTPSuccess)
279
+ data = JSON.parse(res.body)
280
+ run = data["workflow_runs"]&.first
281
+ if run
282
+ st = run["status"]
283
+ con = run["conclusion"]
284
+ emoji = case st
285
+ when "queued" then "⏳️"
286
+ when "in_progress" then "👟"
287
+ when "completed" then ((con == "success") ? "✅" : "🍅")
288
+ else "⏳️"
289
+ end
290
+ details = [st, con].compact.join("/")
291
+ status_q << [c, f, "#{emoji} (#{details})"]
292
+ break if st == "completed"
293
+ else
294
+ status_q << [c, f, "none"]
295
+ break
296
+ end
297
+ else
298
+ status_q << [c, f, "fail #{res.code}"]
299
+ end
300
+ rescue StandardError
301
+ status_q << [c, f, "err"]
251
302
  end
303
+ sleep(poll_interval)
304
+ end
252
305
  rescue StandardError
253
306
  status_q << [c, f, "err"]
254
307
  end
@@ -329,6 +329,17 @@ namespace :kettle do
329
329
  end
330
330
  end
331
331
 
332
+ # 7b) certs/pboling.pem
333
+ begin
334
+ cert_src = File.join(gem_checkout_root, "certs", "pboling.pem")
335
+ cert_dest = File.join(project_root, "certs", "pboling.pem")
336
+ if File.exist?(cert_src)
337
+ helpers.copy_file_with_prompt(cert_src, cert_dest, allow_create: true, allow_replace: true)
338
+ end
339
+ rescue StandardError => e
340
+ puts "WARNING: Skipped copying certs/pboling.pem due to #{e.class}: #{e.message}"
341
+ end
342
+
332
343
  # After creating or replacing .envrc or .env.local.example, require review and exit unless allowed
333
344
  begin
334
345
  envrc_path = File.join(project_root, ".envrc")
@@ -6,7 +6,7 @@ module Kettle
6
6
  module Version
7
7
  # The gem version.
8
8
  # @return [String]
9
- VERSION = "1.0.7"
9
+ VERSION = "1.0.9"
10
10
  end
11
11
  end
12
12
  end
@@ -24,6 +24,25 @@ module Kettle
24
24
  def self.failed?: ({ "status" => String?, "conclusion" => String? } | nil run) -> bool
25
25
 
26
26
  def self.default_token: () -> String?
27
+
28
+ # GitLab support
29
+ def self.origin_url: () -> String?
30
+
31
+ def self.repo_info_gitlab: () -> [String, String]?
32
+
33
+ def self.default_gitlab_token: () -> String?
34
+
35
+ def self.gitlab_latest_pipeline: (
36
+ owner: String,
37
+ repo: String,
38
+ ?branch: String?,
39
+ ?host: String,
40
+ ?token: String?
41
+ ) -> { "status" => String?, "web_url" => String?, "id" => untyped }?
42
+
43
+ def self.gitlab_success?: ({ "status" => String? } | nil pipeline) -> bool
44
+
45
+ def self.gitlab_failed?: ({ "status" => String? } | nil pipeline) -> bool
27
46
  end
28
47
  end
29
48
  end
data.tar.gz.sig CHANGED
@@ -1 +1,2 @@
1
- [�@|�(�����*��npo��jvԤ�{E�dۥ��)=U�����i���O�|+��=k7��£@�uܝ�eM�,������Vv}��*T9tEfqY���o��6x��Nz`�N�E��.�&�o
1
+ 2j��"z:,K<�j�(�c��Z�l��n:gmm�&�(�#d����*�hB�<DVHS�(w��ݜX��5D�/�4�!l$ʉݨ3���l�� P8Q��� '��������z(R���S4�O�˦l��Bs:L�����߁&����QXx���2��KH1��/y��CKE𢡄C��ß�p�a�K����Q�S��]>�<Jڒ��b��T�}�1}p\hnv(Ng��R Lb���ܘ��@�4�����ٷ��iY�&IbY<}��Z����"3(�R �~wI<��X#G�/"�z�_۪�,��!���[���۔��� �Z�0(7#1��_tGԸޯ<? �d�l
2
+ ��4�Vc���#�����M�m�V��������
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.7
4
+ version: 1.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -35,7 +35,7 @@ cert_chain:
35
35
  DVjBtqT23eugOqQ73umLcYDZkc36vnqGxUBSsXrzY9pzV5gGr2I8YUxMqf6ATrZt
36
36
  L9nRqA==
37
37
  -----END CERTIFICATE-----
38
- date: 2025-08-24 00:00:00.000000000 Z
38
+ date: 2025-08-25 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: version_gem
@@ -203,8 +203,6 @@ extra_rdoc_files:
203
203
  - REEK
204
204
  - RUBOCOP.md
205
205
  - SECURITY.md
206
- - checksums/kettle-dev-1.0.7.gem.sha256
207
- - checksums/kettle-dev-1.0.7.gem.sha512
208
206
  files:
209
207
  - ".devcontainer/devcontainer.json"
210
208
  - ".envrc"
@@ -246,6 +244,7 @@ files:
246
244
  - Appraisal.root.gemfile
247
245
  - Appraisals
248
246
  - CHANGELOG.md
247
+ - CHANGELOG.md.example
249
248
  - CITATION.cff
250
249
  - CODE_OF_CONDUCT.md
251
250
  - CONTRIBUTING.md
@@ -256,8 +255,6 @@ files:
256
255
  - RUBOCOP.md
257
256
  - Rakefile
258
257
  - SECURITY.md
259
- - checksums/kettle-dev-1.0.7.gem.sha256
260
- - checksums/kettle-dev-1.0.7.gem.sha512
261
258
  - exe/kettle-commit-msg
262
259
  - exe/kettle-readme-backers
263
260
  - exe/kettle-release
@@ -290,10 +287,10 @@ licenses:
290
287
  - MIT
291
288
  metadata:
292
289
  homepage_uri: https://kettle-dev.galtzo.com/
293
- source_code_uri: https://github.com/galtzo-floss/kettle-dev/tree/v1.0.7
294
- changelog_uri: https://github.com/galtzo-floss/kettle-dev/blob/v1.0.7/CHANGELOG.md
290
+ source_code_uri: https://github.com/galtzo-floss/kettle-dev/tree/v1.0.9
291
+ changelog_uri: https://github.com/galtzo-floss/kettle-dev/blob/v1.0.9/CHANGELOG.md
295
292
  bug_tracker_uri: https://github.com/galtzo-floss/kettle-dev/issues
296
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.0.7
293
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.0.9
297
294
  funding_uri: https://github.com/sponsors/pboling
298
295
  wiki_uri: https://github.com/galtzo-floss/kettle-dev/wiki
299
296
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file
@@ -1 +0,0 @@
1
- f5a4e19daf87b88e9f61c4bfec481ea915f5f734cf665dbcbd34be6979718c89
@@ -1 +0,0 @@
1
- 7b99485e9d4411f2766d7cf53121923e26284f455146a7ba281982634cc534384d91739d83113618852f8abd5093dbc465362afff62e5da041f996bed2bd3a4b