ci: auto-cut releases on merge to main#9
Closed
statik wants to merge 8 commits into
Closed
Conversation
Computes the next semver from conventional commits (clamped to 0.x) and calls release.yml in the same run. secrets: inherit is intentional so the reusable build keeps access to the optional signing secrets.
4 tasks
Member
Author
|
Superseded by #32, which recreates this against the Tauri/Rust main (the Go code this was built on was removed in the v2 migration). |
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.
Summary
Automatically cuts a release on every merge to main, following the
posit-dev/viptechnique adapted for this Go repo.version.yml(new) — on push to main, computes the next semver from Conventional Commits withmathieudutour/github-tag-action(dry-run), then calls the build pipeline in the same run. No tag is pushed and nothing is committed back to main, so no PAT/deploy key is needed and there is no release loop.build/ci/clamp_version.sh(new, unit-tested) — keeps the project in0.xuntil 1.0.0 is shipped deliberately: afeat!:/breaking change bumps the minor (0.1.0→0.2.0), not1.0.0.release.yml(refactored) — now reusable viaworkflow_call. The auto path publishes the release (draft → all assets uploaded → checksums → flip to published), so it never goes public half-built. Manualworkflow_dispatchand tag-push paths still produce a draft for review.pr-title.yml(new) — lints PR titles as Conventional Commits. Because the repo squash-merges, the PR title becomes the commit subject the versioner reads.Bump rules:
fix:→ patch,feat:→ minor, breaking → minor (clamped in 0.x). Adocs:/chore:-only merge cuts no release.Versioning behavior
feat: …0.1.0→0.2.0)fix: …0.1.0→0.1.1)feat!: …/BREAKING CHANGE1.0.0)docs:/chore:onlyTest Plan
go test ./...passes (no Go code changed)build/ci/clamp_version_test.sh— 8/8 cases (incl.0.9.0→0.10.0arithmetic, minor=0, patch-digit ignored)actionlintclean on all workflows;shellcheck/shfmtclean on scriptszizmorclean on the new workflows (the onesecrets-inheritonversion.ymlis intentional — the reusable build needs the optional signing secrets)feat:/fix:PR produces a published release with macOS/Windows/Linux assets + checksumsdocs:-only merge produces no releaseNotes
zizmordebt inrelease.yml's build jobs (unpinned first-partysetup-go@v5,setup-gocache-poisoning, top-levelcontents: write) is left as-is — out of scope here. Happy to sweep it in a follow-up.https://claude.ai/code/session_01JzTDM3mjWKS2XWbTFixBnk