feat: bootstrap the codeherd release process#16
Merged
Conversation
This project had no release path. No LICENSE, no installable binaries, no convention for drafting per-version notes, and no standard for the commit messages that feed any future changelog. Cutting 0.1.0 by hand would set no precedent and would block downstream tooling — mise registry submission, version-pinning by users — that depends on signed, named artefacts. The project adopts a single self-contained commit message per branch, drawn from six types — feat, fix, sec, revert, docs, chore — with no Conventional Commits scopes. The squashing-commits skill codifies the writing workflow (problem-first prose, producer- before-consumer ordering, no housekeeping-only paragraphs) and defers prose-level discipline to writing-clearly-and-concisely as a required sub-skill. The creating-release skill consumes commits in that shape: it inspects each one to decide what lands in CHANGELOG.md, and writes docs/release-notes/<version>.md as the canonical per-version narrative. The build lives in three new Make targets so the same recipe runs locally, in CI smoke tests, and during release. A new ch version subcommand lets an installed binary report what release it came from — and lets the pipeline prove the version actually made it into the artefact. The PR pipeline exercises the full cross- compile matrix on every change, surfacing toolchain regressions before they reach a tag. Releases are triggered by a commit to main that touches VERSION. The new release.yml workflow reads the file, builds the linux/darwin × amd64/arm64 matrix via those targets, signs every archive and checksums.txt with sigstore cosign, then creates the v<version> tag and the GitHub release with docs/release-notes/<version>.md as the body. The project ships under Apache 2.0, and the README points users at the new mise + manual install paths so binary consumers are not stuck building from source. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This project had no release path. No LICENSE, no installable
binaries, no convention for drafting per-version notes, and no
standard for the commit messages that feed any future changelog.
Cutting 0.1.0 by hand would set no precedent and would block
downstream tooling — mise registry submission, version-pinning by
users — that depends on signed, named artefacts.
The project adopts a single self-contained commit message per
branch, drawn from six types — feat, fix, sec, revert, docs, chore
— with no Conventional Commits scopes. The squashing-commits skill
codifies the writing workflow (problem-first prose, producer-
before-consumer ordering, no housekeeping-only paragraphs) and
defers prose-level discipline to writing-clearly-and-concisely as
a required sub-skill. The creating-release skill consumes commits
in that shape: it inspects each one to decide what lands in
CHANGELOG.md, and writes docs/release-notes/.md as the
canonical per-version narrative.
The build lives in three new Make targets so the same recipe runs
locally, in CI smoke tests, and during release. A new ch version
subcommand lets an installed binary report what release it came
from — and lets the pipeline prove the version actually made it
into the artefact. The PR pipeline exercises the full cross-
compile matrix on every change, surfacing toolchain regressions
before they reach a tag.
Releases are triggered by a commit to main that touches VERSION.
The new release.yml workflow reads the file, builds the
linux/darwin × amd64/arm64 matrix via those targets, signs every
archive and checksums.txt with sigstore cosign, then creates the
v tag and the GitHub release with
docs/release-notes/.md as the body. The project ships
under Apache 2.0, and the README points users at the new mise +
manual install paths so binary consumers are not stuck building
from source.