This release workflow uses GitHub Actions, a custom releaser package (packages/releaser), and Docker to automate versioning, changelog generation, image builds, and deployments. The workflow adheres to Semantic Versioning (SemVer) driven entirely by Conventional Commits.
- Create a feature PR.
- Make sure all the checks pass.
- Rebase and merge the PR into
main. - GitHub Actions automatically creates a GitHub release, builds Docker images, and triggers deployment.
Every push to main that modifies files under apps/**/*, packages/**/*, or package-lock.json triggers the all-release.yml workflow. No manual steps or pre-release PRs are required.
The setup job inspects the commit to find which apps/* changed, then groups them into two categories:
- backends – non-Next.js apps (e.g.,
api,indexer,notifications,provider-proxy,tx-signer) - nextjs – Next.js apps (e.g.,
deploy-web,stats-web)
For each changed app, packages/releaser/recommended-bump.js is invoked. It:
- Reads all commits since the last git tag for the app path (including local package dependencies).
- Determines the SemVer bump level from commit types:
BREAKING CHANGE→ majorfeat/feature→ minorfix,refactor,perf→ patchchore,docs,style,test→ no release
- Generates a changelog from visible commit types (
feat,fix,refactor,perf). - Creates a GitHub release tagged as
<app-alias>/v<semver>(e.g.,console-api/v1.2.3).
App name aliases used for tags:
| Directory | Tag prefix |
|---|---|
api |
console-api |
deploy-web |
console-web |
| others | same as dir name |
If no releasable commits are found, no release or build is created.
After a successful release, reusable-build-image.yml builds and pushes Docker images to the app's configured container registry.
- Backends: one image tagged with
<semver>. - Next.js apps: two images:
<semver>-beta– built for thestagingenvironment.<semver>– built for theproductionenvironment.
packages/docker/script/build.sh handles the actual build. It skips a rebuild if an image for the same tag already exists.
After the image build, the release workflow automatically dispatches the app's deployment workflow (e.g., console-api-release.yml) with cancel-if-stale=true, which skips the deployment if a newer version is already queued or running.
Deployment workflows follow this pattern (example: console-api-release.yml):
- Deploy to beta (staging mainnet + sandbox).
- Run E2E tests against the beta environment.
- If tests pass, deploy to production (mainnet + sandbox).
Scripts used in the build and deployment process are located in the docker package. See packages/docker/README.md for details.
The packages/releaser package provides the versioning and changelog logic.