Releases
How a version is cut, tagged, built and deployed.
Versions follow conventional commits.
A release is cut from main by three GitHub workflows.
The flow
- Release Prepare, run manually on
main. It bumps the version in everypackage.json, writesCHANGELOG.mdand opens a pull request titledchore: release vX.Y.Z. - Release Publish, when that pull request is merged. It tags the merge commit, creates the GitHub release and starts the Release workflow.
- Release, which publishes the images and deploys the marketing site.
increment: auto derives the bump from the commits since the last tag: a
feat is a minor, a fix a patch, and a breaking change a major. Choose
patch, minor or major to decide yourself.
A breaking change is a commit whose type ends in ! (feat!: …) or whose
body has a BREAKING CHANGE: footer. The
commit hook keeps the messages in the
format this depends on.
What is published
| Image | Built from |
|---|---|
ghcr.io/montara-project/montara-pass/cloud | apps/server/Dockerfile: the API with the web app inside, Cloud Edition |
ghcr.io/montara-project/montara-pass/community | the same with EDITION=community: Community Edition, no sign-up and no sharing |
ghcr.io/montara-project/montara-pass/docs | apps/docs/Dockerfile |
A tag v1.2.3 publishes the tags v1.2.3, v1.2 and latest. Every run
also publishes sha-<short commit>. Images are built for linux/amd64.
The tag is passed to the server build as APP_VERSION, so a released server
reports its version on GET /api/health.
The same workflow deploys apps/web to Cloudflare Workers.
Settings the workflows need
| Kind | Name | Used for |
|---|---|---|
| Secret | CLOUDFLARE_API_TOKEN | Deploying the marketing site |
| Secret | CLOUDFLARE_ACCOUNT_ID | Deploying the marketing site |
| Variable | VITE_API_URL | Optional; only when the web app is hosted on another origin than the API |
| Variable | VITE_APP_NAME | Optional; defaults to Montara Pass |
React Doctor
A fourth workflow, React Doctor, comments on pull requests and scans
main. It is advisory and never fails a check.
Running it by hand
pnpm release:prepare --dry-run # shows the next version and the changelogThe Release workflow can also be started manually from the Actions tab. It then publishes the short commit SHA, plus any extra tag you type in.