Skip to content

Update the release process - #25

Merged
cory-salad merged 1 commit into
mainfrom
release-workflow-run
Nov 12, 2026
Merged

cory-salad merged 1 commit into
mainfrom
release-workflow-run

Conversation

@cory-salad

@cory-salad cory-salad commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Releases start from the Actions tab instead of a tag pushed from someone's machine: the workflow verifies the commit,
waits for an approval on the release environment, and a release GitHub App creates the tag. Until the App is set up,
a tag pushed with just release still releases, through the same checks.

Changes

  • release.yml: a verify job with no secrets (the version, the commit on main with test.yml green, no existing
    release, the version stamp, the CHANGELOG section) and a publish job (approval, the App-created tag, goreleaser,
    attestations). A pushed tag skips the tag step, a tag pushed by a bot starts no run, and running it again for an
    existing tag publishes that tag.
  • CODEOWNERS, stale.yml permissions, the Dockerfile's base image pinned by digest and kept current by Dependabot,
    and the release docs in AGENTS.md and CONTRIBUTING.md.

The workflow-run path needs the release App, its client ID and key on the release environment, and a tag ruleset that
lets only the App create tags. Limit the environment to main at the same time as that ruleset: a pushed tag's run
deploys from the tag.

Checklist

  • just ci passes (formatting, lint, and the offline tests)
  • docs/ (and the README, if install or getting started changed) and CHANGELOG.md (under Unreleased) reflect the
    change: AGENTS.md and CONTRIBUTING.md; nothing changes for people using the CLI.
  • Anything that touches an API call was exercised live, or this pull request says it was not: no API call changes.
    The workflow first runs after merge; the next just release exercises the pushed-tag path.

🤖 Generated with Claude Code

…pp is set up

A release starts from the Actions tab (or gh workflow run release.yml) on
main. A verify job checks, with no secrets, the version's form, that the
commit is on main with test.yml green and no GitHub release yet, that the
version stamp matches, and that CHANGELOG.md has a dated section for it.
The publish job then waits for an approval on the release environment,
creates the annotated tag with the release GitHub App's token (the only
bypass the tag ruleset is to have), runs goreleaser, and attests every
archive. The App token is scoped to this repository, so one App can serve
as the release bot for several.

Until the App and the environment exist, a tag pushed with just release
still releases, through the same verify job and with no tag to create; a
run started by hand without the App fails before publishing and says to
use just release. A tag the App pushes is a bot's push and starts no
second run. Running the workflow again with an existing tag publishes it
with main's workflow, which replaces the tag input #18 added.

Also: stale.yml's write permissions move into its job, the Dockerfile's
base image is pinned by digest and Dependabot keeps it current, CODEOWNERS
sends review requests to salad-cloud-cli-maintainers and CI, release and
install files to admins, and AGENTS.md, CONTRIBUTING.md and
scripts/release.sh describe both ways in.

Needs the release App, the release environment and the
salad-cloud-cli-maintainers team set up before the workflow-run path works.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cory-salad
cory-salad requested review from a team as code owners November 12, 2026 17:06
@cory-salad cory-salad changed the title Release from a workflow run, and keep pushed tags working until the App is set up Update the release process Nov 12, 2026
@cory-salad
cory-salad merged commit 52169f7 into main Nov 12, 2026
26 checks passed
@cory-salad
cory-salad deleted the release-workflow-run branch November 12, 2026 17:28
@cory-salad cory-salad self-assigned this Nov 12, 2026
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