Add versioning system and automated release workflow#18
Merged
Conversation
Adds a CHANGELOG.md (Keep a Changelog) and a manually-dispatched GitHub Actions release workflow that resolves a version, rolls the changelog, tags and pushes, cross-compiles all 5 CLI targets plus the macOS GUI (both version-stamped from the same source), and publishes a GitHub Release with checksums. The GUI's Info.plist version was previously hardcoded and decoupled from the CLI version; it's now stamped from the same VERSION build variable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ATFUm46qQ81vu7Cd4tRpUs
There was a problem hiding this comment.
Pull request overview
This PR introduces a first-class versioning/release process for the project: a Keep-a-Changelog CHANGELOG.md, a manually dispatched GitHub Actions release workflow that tags/builds/publishes artifacts, and documentation updates. It also aligns the macOS GUI bundle versioning with the CLI by stamping Info.plist from the shared build VERSION.
Changes:
- Add
CHANGELOG.mdand a new release runbook (docs/releasing.md) and link them from existing docs/README. - Add
.github/workflows/release.ymlto automate version resolution, changelog roll-forward, tagging, cross-compilation, checksums, and GitHub Release publishing. - Stamp the macOS GUI
Info.plistversion from the same buildVERSIONused by the CLI.
Reviewed changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| README.md | Adds an Install section and links to the release runbook. |
| Makefile | Passes DEZHBAN_VERSION=$(VERSION) into the macOS GUI build script. |
| macos-gui/build-app.sh | Stamps Info.plist version fields from DEZHBAN_VERSION. |
| docs/releasing.md | New documented release procedure and workflow requirements. |
| docs/readme.md | Adds a link to the new release documentation. |
| docs/development.md | Links development docs to the separate release flow. |
| CHANGELOG.md | Introduces changelog in Keep a Changelog format with seeded Unreleased notes. |
| .github/workflows/release.yml | New manual release workflow to roll changelog, tag, build artifacts, and publish a GitHub Release. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Address Copilot PR #18 review: - release.yml: refuse dispatch from any ref but main and pin checkout to main, so git push origin HEAD:main can never fast-forward main to another branch. - build-app.sh: only stamp Info.plist when DEZHBAN_VERSION is a strict X.Y.Z, leaving the checked-in value for git-describe/dev builds whose format CFBundle version fields reject. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GR9nX5znzGP3E4ENSovQo6
Address Copilot review on PR #18: - Validate the latest tag is strict X.Y.Z before the auto-bump cut/arithmetic, so a stray pre-release tag (e.g. v0.2.0-rc1) fails with a clear message asking for an explicit version input instead of erroring inside $((patch + 1)). - Roll the CHANGELOG by replacing the [Unreleased] ref line in place and inserting the new version's release link above the existing version refs, instead of deleting all version refs and re-adding only two. Older release headings now keep their compare/release links across successive releases. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UNTB8kqWzAXYrG51kbhmqi
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
CHANGELOG.md(Keep a Changelog format) seeded with the current feature set under[Unreleased]..github/workflows/release.yml: resolves a version (explicit or bumped from the latest tag), rolls[Unreleased]into a dated changelog entry, commits + tags + pushes, cross-compiles all 5 CLI targets and the macOS GUI (both version-stamped from the sameVERSION), and publishes a GitHub Release with the changelog excerpt,SHA256SUMS, and the zipped.app.macos-gui/build-app.sh+Makefile: the GUI bundle'sInfo.plistversion was previously hardcoded (0.1.0) and decoupled from the CLI'smain.version; it's now stamped from the sameVERSIONbuild variable viaPlistBuddy.docs/releasing.md(new release runbook) linked fromdocs/readme.md,README.md,docs/development.md; README gets an "Install" section pointing at Releases with the unsigned-GUI Gatekeeper note.Notes / caveats
preparejob pushes a changelog commit + tag directly tomainusing the defaultGITHUB_TOKEN. Ifmainhas branch protection blocking direct pushes, that step will fail — either allow the Actions bot to bypass it, or switch to a PAT.versioninput (e.g.0.1.0), since there's no tag yet to bump from..appships unsigned (no Apple Developer cert) — documented Gatekeeper right-click-Open workaround in bothdocs/releasing.mdand the README.Test plan
gofmt -l ./go vet ./.../go build ./.../go test ./...all clean (also ran via the pre-commit hook).ci.ymlunchanged,release.ymlnew) validated with a YAML parser.CHANGELOG.md— confirmed the[Unreleased]/[X.Y.Z]split, refreshed compare links, and a clean (no stray blank lines) release-notes body.VERSION=v0.2.0 make gui-macosand confirmedInfo.plist'sCFBundleShortVersionString/CFBundleVersionboth read0.2.0.VERSION=v0.2.0 make buildand confirmed./dezhban versionprintsdezhban v0.2.0.Releaseworkflow on GitHub (first real run will be the acceptance test — dispatch withversion: 0.1.0and confirm the tag, Release, and all 7 assets).https://claude.ai/code/session_01ATFUm46qQ81vu7Cd4tRpUs