Skip to content

v0.x: generated projects release on colophon

A generated project now releases through colophon, the estate's release tool, instead of releaser-pleaser (#110). colophon keeps a release merge or pull request up to date on every push to main; merging it tags the commit that actually landed and creates the release, and the tag starts goreleaser as before.

What changes

  • GitLab: .gitlab-ci.yml includes the cicd colophon component in place of releaser-pleaser, at the same pinned cicd version.
  • GitHub: .github/workflows/release.yaml runs colophon's publish then propose, at a pinned colophon version. .github/workflows/releaser-pleaser.yaml is no longer generated.
  • Both: a commented .colophon.yaml, where release overrides such as a hold or announcements live.

Migrating an existing project

gtb regenerate project applies all of this. A CI file you edited goes through the usual conflict handling rather than being overwritten. On GitHub, regenerate also removes releaser-pleaser.yaml when it is still as generated; an edited one is left with a warning, and must be removed by hand, or it keeps running beside colophon's.

Then, before the next push to main:

  1. Add COLOPHON_TOKEN. On GitLab, a CI/CD variable holding an access token with the api and write_repository scopes; on GitHub, a repository secret holding a fine-grained token or GitHub App token with contents and pull requests read/write. It must not be CI_JOB_TOKEN or GITHUB_TOKEN: a tag pushed with either starts no release pipeline. If v* tags are protected, the token must be allowed to create them. RELEASER_PLEASER_TOKEN can then be removed.
  2. Close releaser-pleaser's open release MR or PR. colophon opens its own, on the colophon/release/main branch, and the old branch can be deleted.
  3. Write release prose in commits. A Release-Note: trailer or a fenced release-note block in a commit message carries notes; nothing written in the release MR's description survives, because colophon regenerates it on every run.