Skip to content

fix(create-release): replace mindsers/changelog-reader-action with inline awk - #173

Merged
weatherhog merged 1 commit into
mainfrom
fix/changelog-reader-action-node20-deprecation
May 19, 2026
Merged

fix(create-release): replace mindsers/changelog-reader-action with inline awk#173
weatherhog merged 1 commit into
mainfrom
fix/changelog-reader-action-node20-deprecation

Conversation

@weatherhog

Copy link
Copy Markdown
Contributor

Summary

Replaces mindsers/changelog-reader-action@v2.2.3 in the create-release reusable workflow with an inline awk extractor.

The action is unmaintained (no release since March 2024) and still runs on Node 20, which GitHub Actions is deprecating on 2026-06-02. Inline shell has no Node runtime, so the workflow stops being exposed to future Node-deprecation cycles.

Refs: giantswarm/giantswarm#36091

Why inline awk instead of forking the action

  • The action is used in exactly one place (this reusable workflow); every consumer benefits transitively.
  • The job is a trivial text extraction on Keep-a-Changelog files; the upstream TypeScript adds no algorithmic value for how it's used here.
  • Forking solves today's Node 20→24 problem but recreates it in ~2 years on the next Node deprecation, plus carries org-fork governance overhead.
  • The other Node-20 action flagged in the issue, ncipollo/release-action, was already bumped to v1.21.0 (Node 24) by Renovate in Update ncipollo/release-action action to v1.21.0 #138 — so this PR closes the remaining work for #36091.

Validation

Tested the new awk extractor against the actual GitHub Release bodies that the existing workflow produced for every release published after 2026-02-06 (the date this reusable workflow was introduced) across 100 repos that consume it — 178 releases in total.

After filtering out 35 releases from 4 repos (kserve, vllm, mcp-debug, mcp-oauth) that use a different release flow with GitHub-auto-generated release notes (i.e. weren't produced by mindsers/changelog-reader-action at all), the result is:

128 / 128 release bodies match byte-for-byte.

(One visible per-line trailing-space difference in flux-app v1.9.0 is the result of GitHub's API normalizing trailing whitespace server-side when storing release bodies — the stored body is identical either way; the upstream action wouldn't strip it either.)

The awk handles three Keep-a-Changelog edge cases that the upstream action also handled:

  • Stops at the next ## heading (section boundary).
  • Skips Markdown reference-link definitions ([X]: https://...) — matters only for first releases of a repo, where the link block sits glued to the section.
  • Trims leading and trailing blank lines (the action's outer .trim() does the same).

If the requested version isn't found in the file, the step fails fast with ::error::No changelog entry found for version ..., preserving the action's "fail the build on missing entry" behavior.

Test plan

  • YAML parses (python3 -c 'import yaml; yaml.safe_load(open(...))').
  • Byte-for-byte comparison against 128 historical releases (above).
  • Smoke test by triggering a real patch release in a low-stakes consumer repo (e.g. giantswarm/debug or giantswarm/to) after merge, and visually comparing the resulting Release body to the prior release.

…line awk

The upstream action is unmaintained (no release since March 2024) and
still runs on Node 20, which GitHub Actions is deprecating on
2026-06-02. Inline shell has no Node runtime, so the workflow stops
being exposed to future Node-deprecation cycles.

The awk extractor was validated byte-for-byte against 128 historical
release bodies produced by the action across 100 consumer repos.

Refs: giantswarm/giantswarm#36091
@weatherhog
weatherhog requested a review from a team as a code owner May 19, 2026 12:48
@weatherhog
weatherhog merged commit 58e7d88 into main May 19, 2026
1 check passed
@weatherhog
weatherhog deleted the fix/changelog-reader-action-node20-deprecation branch May 19, 2026 13:05
This was referenced May 19, 2026
lyind pushed a commit to giantswarm/birthday-painter that referenced this pull request May 19, 2026
…#3)

Regenerates .github/workflows/zz_generated.*.yaml via devctl v7.40.7
gen workflows. The previous self-contained Create Release workflow is
replaced with a thin wrapper invoking the centralized reusable workflow
at giantswarm/github-workflows, which no longer uses
mindsers/changelog-reader-action (see giantswarm/github-workflows#173).

This unblocks the June 2 2026 Node 20 deprecation deadline:
https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

Refs: giantswarm/giantswarm#36091
lyind pushed a commit to giantswarm/personio-go that referenced this pull request May 19, 2026
…#115)

Regenerates .github/workflows/zz_generated.*.yaml via devctl v7.40.7
gen workflows. The previous self-contained Create Release workflow is
replaced with a thin wrapper invoking the centralized reusable workflow
at giantswarm/github-workflows, which no longer uses
mindsers/changelog-reader-action (see giantswarm/github-workflows#173).

This unblocks the June 2 2026 Node 20 deprecation deadline:
https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

Refs: giantswarm/giantswarm#36091
QuentinBisson pushed a commit to giantswarm/luigi that referenced this pull request May 20, 2026
…#52)

* fix(workflows): regenerate via devctl to drop Node-20 mindsers action

Regenerates .github/workflows/zz_generated.*.yaml via devctl v7.40.7
gen workflows. The previous self-contained Create Release workflow is
replaced with a thin wrapper invoking the centralized reusable workflow
at giantswarm/github-workflows, which no longer uses
mindsers/changelog-reader-action (see giantswarm/github-workflows#173).

This unblocks the June 2 2026 Node 20 deprecation deadline:
https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

Refs: giantswarm/giantswarm#36091

* chore: add CHANGELOG entry
weatherhog added a commit to giantswarm/silence-operator that referenced this pull request May 20, 2026
…#676)

* fix(workflows): regenerate via devctl to drop Node-20 mindsers action

Regenerates .github/workflows/zz_generated.*.yaml via devctl v7.40.7
gen workflows. The previous self-contained Create Release workflow is
replaced with a thin wrapper invoking the centralized reusable workflow
at giantswarm/github-workflows, which no longer uses
mindsers/changelog-reader-action (see giantswarm/github-workflows#173).

This unblocks the June 2 2026 Node 20 deprecation deadline:
https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

Refs: giantswarm/giantswarm#36091

* chore: add CHANGELOG entry
weatherhog added a commit to giantswarm/operatorkit that referenced this pull request May 20, 2026
…#814)

* fix(workflows): regenerate via devctl to drop Node-20 mindsers action

Regenerates .github/workflows/zz_generated.*.yaml via devctl v7.40.7
gen workflows. The previous self-contained Create Release workflow is
replaced with a thin wrapper invoking the centralized reusable workflow
at giantswarm/github-workflows, which no longer uses
mindsers/changelog-reader-action (see giantswarm/github-workflows#173).

This unblocks the June 2 2026 Node 20 deprecation deadline:
https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

Refs: giantswarm/giantswarm#36091

* chore: add CHANGELOG entry
weatherhog added a commit to giantswarm/ailefroide-app that referenced this pull request May 20, 2026
…#47)

* fix(workflows): regenerate via devctl to drop Node-20 mindsers action

Regenerates .github/workflows/zz_generated.*.yaml via devctl v7.40.7
gen workflows. The previous self-contained Create Release workflow is
replaced with a thin wrapper invoking the centralized reusable workflow
at giantswarm/github-workflows, which no longer uses
mindsers/changelog-reader-action (see giantswarm/github-workflows#173).

This unblocks the June 2 2026 Node 20 deprecation deadline:
https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

Refs: giantswarm/giantswarm#36091

* chore: add CHANGELOG entry
weatherhog added a commit to giantswarm/kueue-app that referenced this pull request May 20, 2026
…#26)

* fix(workflows): regenerate via devctl to drop Node-20 mindsers action

Regenerates .github/workflows/zz_generated.*.yaml via devctl v7.40.7
gen workflows. The previous self-contained Create Release workflow is
replaced with a thin wrapper invoking the centralized reusable workflow
at giantswarm/github-workflows, which no longer uses
mindsers/changelog-reader-action (see giantswarm/github-workflows#173).

This unblocks the June 2 2026 Node 20 deprecation deadline:
https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

Refs: giantswarm/giantswarm#36091

* chore: add CHANGELOG entry
weatherhog added a commit to giantswarm/n8n-app that referenced this pull request May 20, 2026
…#63)

* fix(workflows): regenerate via devctl to drop Node-20 mindsers action

Regenerates .github/workflows/zz_generated.*.yaml via devctl v7.40.7
gen workflows. The previous self-contained Create Release workflow is
replaced with a thin wrapper invoking the centralized reusable workflow
at giantswarm/github-workflows, which no longer uses
mindsers/changelog-reader-action (see giantswarm/github-workflows#173).

This unblocks the June 2 2026 Node 20 deprecation deadline:
https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

Refs: giantswarm/giantswarm#36091

* chore: add CHANGELOG entry
paurosello pushed a commit to giantswarm/tunnelport that referenced this pull request May 21, 2026
…#25)

* fix(workflows): regenerate via devctl to drop Node-20 mindsers action

Regenerates .github/workflows/zz_generated.*.yaml via devctl v7.40.7
gen workflows. The previous self-contained Create Release workflow is
replaced with a thin wrapper invoking the centralized reusable workflow
at giantswarm/github-workflows, which no longer uses
mindsers/changelog-reader-action (see giantswarm/github-workflows#173).

This unblocks the June 2 2026 Node 20 deprecation deadline:
https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

Refs: giantswarm/giantswarm#36091

* chore: add CHANGELOG entry
stone-z pushed a commit to giantswarm/jiralert-app that referenced this pull request Jun 2, 2026
…#69)

* fix(workflows): regenerate via devctl to drop Node-20 mindsers action

Regenerates .github/workflows/zz_generated.*.yaml via devctl v7.40.7
gen workflows. The previous self-contained Create Release workflow is
replaced with a thin wrapper invoking the centralized reusable workflow
at giantswarm/github-workflows, which no longer uses
mindsers/changelog-reader-action (see giantswarm/github-workflows#173).

This unblocks the June 2 2026 Node 20 deprecation deadline:
https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

Refs: giantswarm/giantswarm#36091

* chore: add CHANGELOG entry
weatherhog added a commit to giantswarm/pytest-helm-charts that referenced this pull request Aug 13, 2026
Regenerates .github/workflows/zz_generated.*.yaml via devctl v7.40.7
gen workflows. The previous self-contained Create Release workflow is
replaced with a thin wrapper invoking the centralized reusable workflow
at giantswarm/github-workflows, which no longer uses
mindsers/changelog-reader-action (see giantswarm/github-workflows#173).

This unblocks the June 2 2026 Node 20 deprecation deadline:
https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

Refs: giantswarm/giantswarm#36091
weatherhog added a commit to giantswarm/to that referenced this pull request Aug 13, 2026
…ndsers action (#11)

* fix(workflows): regenerate via devctl to drop Node-20 mindsers action

Regenerates .github/workflows/zz_generated.*.yaml via devctl v7.40.7
gen workflows. The previous self-contained Create Release workflow is
replaced with a thin wrapper invoking the centralized reusable workflow
at giantswarm/github-workflows, which no longer uses
mindsers/changelog-reader-action (see giantswarm/github-workflows#173).

This unblocks the June 2 2026 Node 20 deprecation deadline:
https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

Refs: giantswarm/giantswarm#36091

* fix(circleci): update to v2.1 with explicit machine image (#12)

Bump config to version 2.1 and pin the machine executor to
ubuntu-2404:current. Without an explicit image, CircleCI uses its
deprecated default machine image whose blobless-clone support causes
the checkout step to fail silently (job 431).

Also converts the legacy `deploy` step (removed in v2.1) to a plain
`run` step with the same branch guard.

AI-Generated: true

Co-authored-by: circleci-app[bot] <127350680+circleci-app[bot]@users.noreply.github.com>

* fix(ci): replace hand-rolled CircleCI job with architect orb

The build job dated from 2019 and fetched the architect v1.0.0 binary from
the GitHub API using $RELEASE_TOKEN, which is no longer set on the project.
The API returned 401, the command substitution came back empty and the step
died with "wget: missing URL". Because `curl -sS` has no -f and there is no
pipefail, the auth error never surfaced.

Replace it with architect/go-test from the orb, matching giantswarm/app.
The `architect deploy` step is dropped: it was guarded on CIRCLE_BRANCH ==
master while the default branch is main, so it had been dead for years.

Supporting changes needed to make go-test pass:

- Add go.mod. The repo was never a module, which blocked go-test and broke
  `go list -m` in Makefile.gen.go.mk. The go directive is 1.24.0, below every
  consumer, so no toolchain bump is forced. Existing consumers are unaffected
  since v0.4.2 is immutable.
- Add to_test.go, covering every exported function (100% of statements) using
  only the stdlib, so the module stays dependency-free.
- Add .nancy-ignore, which go-test passes to nancy via
  --exclude-vulnerability-file. Only .nancy-ignore.generated existed.
- Add CHANGELOG.md, expected by the create-release workflows, backfilled from
  the tag history.
- Add renovate.json5 with the shared Giant Swarm presets.
- Restore the CI badge lost during the 2024 deprecation churn.

Signed-off-by: weatherhog <lucas@giantswarm.io>

---------

Signed-off-by: weatherhog <lucas@giantswarm.io>
Co-authored-by: circleci-app[bot] <127350680+circleci-app[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants