Montara Pass
Operations

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

  1. Release Prepare, run manually on main. It bumps the version in every package.json, writes CHANGELOG.md and opens a pull request titled chore: release vX.Y.Z.
  2. Release Publish, when that pull request is merged. It tags the merge commit, creates the GitHub release and starts the Release workflow.
  3. 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

ImageBuilt from
ghcr.io/montara-project/montara-pass/cloudapps/server/Dockerfile: the API with the web app inside, Cloud Edition
ghcr.io/montara-project/montara-pass/communitythe same with EDITION=community: Community Edition, no sign-up and no sharing
ghcr.io/montara-project/montara-pass/docsapps/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

KindNameUsed for
SecretCLOUDFLARE_API_TOKENDeploying the marketing site
SecretCLOUDFLARE_ACCOUNT_IDDeploying the marketing site
VariableVITE_API_URLOptional; only when the web app is hosted on another origin than the API
VariableVITE_APP_NAMEOptional; 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 changelog

The 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.

On this page