Releases are automated with release-please and the
release.yml workflow. Nobody tags or pushes images by hand.
- Use conventional commits.
conventional_commits.ymlrunscz checkover every commit in a PR, so each commit message needs a prefix such asfeat:,fix:orfeat!:. The prefix decides the version bump. - Merge to
main. Therelease-pleasejob opens or updates achore: release mainPR. That PR bumps theCargo.tomlversion,CHANGELOG.mdand.release-please-manifest.jsonentry of each package that changed. - Merge the release PR. release-please creates the git tags and GitHub releases, for example
graph_tally_escrow_manager-2.2.1. - Images are built in the same workflow run. Both images (
graph_tally_aggregatorandgraph_tally_escrow_manager) are built fromdocker/Dockerfile.<target>forlinux/amd64andlinux/arm64, then merged into one multi-arch manifest atghcr.io/graphprotocol/<target>.
To ship: merge conventional-commit PRs, then merge the release-please PR. The versioned images appear on GHCR a few minutes later.
| Trigger | Tags |
|---|---|
Push to main that releases the component |
X.Y.Z, X.Y, X, vX.Y.Z, vX.Y, vX, main, sha-<short> |
Any other push to main |
main, sha-<short> |
| PR from a branch in this repo | pr-<N>, sha-<short> |
| PR from a fork | Built, not pushed |
workflow_dispatch |
<branch>, sha-<short> (never a version tag) |
Both images are built on every run, whether or not their component was released. Only the version
tags depend on the release. :main always tracks the head of main.