Skip to content

Document how we cut releases #89

Description

@abegong

Context

The skill-distribution work (product/specs/skill-distribution-spec.md) leans
heavily on the release pipeline — it extends the existing GoReleaser release to
attach .skill artifacts, and the skills' shared bootstrap fetches the CLI
archive from the latest GitHub Release. Working through that spec surfaced that
we have a release pipeline but no documentation of how releases work, which
makes the release process hard to reason about and easy to get wrong.

What exists today (undocumented)

  • .github/workflows/release.yml — fires on v* tags, permissions: contents: write, runs GoReleaser.
  • .goreleaser.yml — builds the cross-platform matrix
    (linux/darwin/windows × amd64/arm64), publishes archives named
    katalyst_<version>_<os>_<arch>.tar.gz (.zip on Windows) plus
    checksums.txt, with prerelease: auto.
  • cmd.Version is stamped via ldflags at build time.

.github/workflows/AGENTS.md mentions release.yml in one line but does not
explain the process, conventions, or failure modes.

What to document

A page (likely under docs/content/contributing/, e.g. how-we-release.md, or
a release section in the workflows AGENTS.md) covering:

  • How to cut a release — the exact steps (tag naming/v*, git tag +
    push), who can do it, and what gets published.
  • Versioning convention — semver expectations, how prerelease: auto
    treats pre-release tags, how cmd.Version is set.
  • What the release produces — the asset names and shapes (so anything that
    fetches them, like the skills bootstrap, has a documented contract to target).
  • Failure modes — e.g. GITHUB_TOKEN capped to read-only at the org/repo
    level 403s the upload (fix is the repo-admin Workflow-permissions toggle);
    how to dry-run.
  • Relationship to CI — the test/docs jobs in ci.yml are a separate
    build/lint gate and publish nothing.

Why separate from skill-distribution

The skill-distribution spec consumes the release contract but shouldn't own
documenting it. This is general project infrastructure that stands on its own,
and the asset-name contract is something the bootstrap depends on regardless of
whether skills ship.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions