ci: add the CalVer release workflow and drop the dead release tooling - #2051
Open
chrisbenincasa wants to merge 2 commits into
Open
ci: add the CalVer release workflow and drop the dead release tooling#2051chrisbenincasa wants to merge 2 commits into
chrisbenincasa wants to merge 2 commits into
Conversation
semantic-release computes the version from commit types, which is the one thing CalVer discards. What remained of its value did not survive inspection either: CHANGELOG.md stops at 1.1.3 (2026-01-20) while tags are at v1.3.13, because the changelog plugin's output is deliberately never committed back; no branch matches the configured maintenance pattern; npm publish is off. That left a tag, a GitHub release and the dev channel, for five plugins and an action. The replacement computes the version from git tags, which are now the only source of truth -- package.json has been inert since the move to semantic-release. Verified against a fake tag set covering: prereleases not counting toward the stable patch, a month with no releases starting at .0, dev prereleases hanging off the next stable, and v2026.7.9 -> 2026.7.10 rather than the .10 -> .9 a lexicographic sort would produce. Notes are generated with conventional-changelog in the same grouped format semantic-release produced, and live only in the GitHub release from here on. Two things worth knowing: - The release is created with RELEASE_PLEASE_TOKEN rather than GITHUB_TOKEN. Tags pushed with the default token do not trigger other workflows, and build-and-push-docker.yml runs on tag push. semantic-release used that PAT for the same reason. - node-calver was evaluated and rejected: it hides a zero patch, so the first release of a month renders as 2026.8 rather than 2026.8.0, which fails the Docker tag trigger, docker/metadata-action's type=semver, and the three component regex in scripts/generate-docs-script.ts. release-it and release-please are removed. semantic-release stays until this flow has actually cut a release; its dev dependencies are still in package.json. 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.
Adds the CalVer release workflow and removes the dead release tooling. Cherry-pick of
ed3bd9aafrom theci/calver-release-pilotpilot branch ontomain— the pilot was cut fromdev, so this rebuilds it againstmainwith no unrelated commits.Background and rationale:
.claude/plans/versioning-repair-plan.md(Phase 1).Why now
workflow_dispatchworkflows are only dispatchable once the file is on the default branch. Nothing about this flow can be exercised — not even a dry run — until it lands onmain.What changes
.github/workflows/release.yml. ComputesYYYY.M.PATCHfrom the UTC date plus the count of that month's existing stable tags. Prereleases are excluded from the stable count;devproduces-dev.Nhanging off the next stable. Refuses to reuse an existing tag. Notes come fromconventional-changelog-cliin the same grouped shape semantic-release produced, and live only in the GitHub release from here on..github/workflows/release-it.yml,.github/workflows/release-please.yml,.release-it.json.What deliberately does not change
semantic-release.ymlandrelease.config.mjsstay, so the next release can still be cut on semver as normal. Merging this does not switch anything over — the new workflow isworkflow_dispatchonly anddry_rundefaults totrue. Removing semantic-release, and the five now-unreferenced release dev dependencies, is a separate PR after the CalVer flow has cut one real release.Version format
YYYY.M.PATCH, unpadded —2026.9.0, never2026.09.0. Unpadded is still syntactically valid semver, so three things keep working untouched:docker/metadata-action'stype=semver,pattern={{version}}inbuild-and-push-docker.ymlv[0-9]+.[0-9]+.[0-9]+*Docker tag triggersemver.rcomparesort inscripts/generate-docs-script.tsThe jump from
v1.3.13tov2026.9.0is monotonically increasing under semver comparison, so Dockerlatestresolution, tag ordering and the docs version dropdown all stay correct.node-calverwas evaluated and rejected: it elides a zero patch, rendering the first release of a month as2026.9, which breaks all three of the above.Token
The release is created with
secrets.RELEASE_PLEASE_TOKEN, notGITHUB_TOKEN. Tags pushed with the default token do not trigger other workflows, andbuild-and-push-docker.ymlruns on tag push. semantic-release used the same PAT for the same reason.Verification
The version computation was verified against a fake tag set covering: prereleases not counting toward the stable patch, a month with no releases starting at
.0, dev prereleases hanging off the next stable, andv2026.7.9→2026.7.10rather than the.10→.9a lexicographic sort would produce.Not yet run in CI — that is the first thing to do once this is on
main. Dispatch it withdry_run: trueand confirm the computed tag and generated notes before any real release.Follow-ups (not in this PR)
package.jsonvalue (this is howtunarr-v1.2.0-dev.1-openapi.jsoncame to be referenced by the docs dropdown while untracked).semantic-release.yml/release.config.mjsand drop the unreferenced dev dependencies.CHANGELOG.mdis deleted or frozen with a pointer to GitHub Releases.🤖 Generated with Claude Code