Skip to content

Release this repository with its own commands - #42

Merged
MihaiBojin merged 2 commits into
mainfrom
own-release-workflows
Sep 11, 2026
Merged

Release this repository with its own commands#42
MihaiBojin merged 2 commits into
mainfrom
own-release-workflows

Conversation

@MihaiBojin

Copy link
Copy Markdown
Contributor

Stacked on #40. This repository stops using stand-ins for the two commands that branch
ships, and starts describing its own releases.

The wait

test-release.yaml waited on the check name Release GHA through
lewagon/wait-on-check-action. It now calls github::await_workflow, which removes the
last third-party action here outside checkout and the release step, and closes one
Renovate line. #36 bumped that pin to v1.9.1 four commits ago.

The dist is built from the tag under test rather than installed through
uses: releasetools/cli@v0. That action downloads install.sh from the release this job
is waiting for, which by definition does not exist yet.

The release body

generate_release_notes: true produced a list of commit subjects, which describe how the
work was done. The body now comes from CHANGELOG.md through changelog::section, and a
tag whose version has no section fails in that step, before anything is published:

$ rt changelog::section 0.0.17
ERROR: 'CHANGELOG.md' has no section for 0.0.17.
ERROR: write one before releasing.

Verified against the CHANGELOG.md in this branch: [Unreleased] does not answer to a
version, and a dated ## 0.0.17 - 2026-09-11 heading does, with or without the v.

.claude/settings.json declares the release-notes plugin and its marketplace, matching
what dotsecenv and MihaiBojin/website already do, so /release-notes:draft X.Y.Z works
in a fresh clone rather than only on a machine that installed it by hand.

The procedure

scripts/README.md now lists four steps in order: bump action.yml, draft the entry, tag,
watch. Each is enforced by something, so skipping one fails the release rather than
shipping a wrong one.

Its advice to replace a release with scripts/tag.sh vX.Y.Z --force --push is gone. #39
made git::release reuse a tag that already points at HEAD, so a retry after a failed push
needs no flag, and --force is documented for what it does: move a published tag.

What this releases into

base::check_deps requires gh from #40 onwards, and test-release.yaml runs it on every
platform in its matrix. Checked against actions/runner-images: ubuntu-22.04, ubuntu-24.04,
macos-14, macos-15 and macos-26 all ship the GitHub CLI, 2.95.0 or newer, on both
architectures. curl, awk and sed are present everywhere too.

The first release after this merges must carry a changelog section for its version.
[Unreleased] will not answer to one, which is the point.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Lp5si1kwiFK1w52a6usA33

MihaiBojin added a commit that referenced this pull request Sep 11, 2026
The branches filter matches a pull request's base, so one stacked on another
skipped the workflow entirely: #42 opened against gh-release-helpers with no
check reported at all, while #39 and #40 ran.

A stack is the normal shape for anything larger than one change here, so the
filter costs more than it saves. Pushes are still filtered to main, where the
filter does what it says.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lp5si1kwiFK1w52a6usA33
@MihaiBojin
MihaiBojin force-pushed the own-release-workflows branch from df119d9 to 0f5c7e0 Compare September 11, 2026 01:11
@MihaiBojin
MihaiBojin added this pull request to stack #41 September 11, 2026 01:13
@MihaiBojin
MihaiBojin force-pushed the own-release-workflows branch from d167b4c to 7704090 Compare September 11, 2026 01:16
Base automatically changed from gh-release-helpers to main September 11, 2026 01:17
MihaiBojin and others added 2 commits September 11, 2026 02:17
test-release.yaml waits through github::await_workflow instead of
lewagon/wait-on-check-action, removing the last third-party action outside
checkout and the release step, and one Renovate line with it. The dist is built
from the tag under test rather than installed through 'releasetools/cli@v0',
because that action downloads the release the job is waiting for.

release.yaml takes the GitHub release body from CHANGELOG.md through
changelog::section, and fails before publishing when the version has no
section. generate_release_notes listed commit subjects, which described how the
work was done rather than what changed for somebody running the commands.

CHANGELOG.md carries the entries, and .claude/settings.json declares the
release-notes plugin that writes them, so '/release-notes:draft X.Y.Z' works in
a fresh clone.

scripts/README.md describes the four steps in order: bump action.yml, draft the
entry, tag, watch. Its advice to replace a release with --force is gone;
git::release now reuses a tag that already points at HEAD, so a retry needs no
flag, and --force is documented as moving a published tag.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lp5si1kwiFK1w52a6usA33
scripts/README.md said 'scripts/tag.sh vX.Y.Z --push', which tags the release
and leaves v0 where it was, so 'uses: releasetools/cli@v0' keeps installing the
previous version however carefully action.yml was bumped. Every release tag in
this repository is also signed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lp5si1kwiFK1w52a6usA33
@MihaiBojin
MihaiBojin force-pushed the own-release-workflows branch from 7704090 to 3aa9b59 Compare September 11, 2026 01:18
@MihaiBojin
MihaiBojin merged commit dde2a8f into main Sep 11, 2026
2 checks passed
@MihaiBojin
MihaiBojin deleted the own-release-workflows branch September 11, 2026 01:18
MihaiBojin added a commit that referenced this pull request Sep 11, 2026
.claude became a tracked directory when .claude/settings.json landed in #42, which made Claude Code's per-agent worktrees show as untracked. Anything that asks for a clean working tree then refuses, which release::prechecks did while cutting 0.1.0.
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.

1 participant