This project follows Semantic Versioning: MAJOR.MINOR.PATCH.
Version tags include an artifact prefix and v: node/v1.2.0, helm/node/v0.3.0.
A network qualifier may be appended as a pre-release suffix: node/v0.1.2-mainnet.
Each artifact is versioned independently.
| Artifact | Tag format | Examples |
|---|---|---|
| Node | node/v<semver> |
node/v1.2.0, node/v0.1.2-mainnet |
| nodectl | nodectl/v<semver> |
nodectl/v0.3.0 |
| Helm chart | helm/node/v<semver> |
helm/node/v0.2.2 |
| nodectl chart | helm/nodectl/v<semver> |
helm/nodectl/v0.1.0 |
Conventional Commits: type(scope): short description
Types: feat, fix, docs, chore, refactor, test, ci
Scopes: helm, nodectl, grafana, node
| Branch | Purpose |
|---|---|
master |
Production-ready code. All final release tags live here. |
release/<artifact>/<version> |
Release branch. Features and changes are merged here, then the branch is merged into master for release. |
hotfix/<version> |
Urgent fix for a previously released version. Branched off the relevant release tag. |
This is a monorepo with independent release cycles for each product (node, nodectl). Release branches are product-scoped:
release/node/v0.2.0-mainnetrelease/nodectl/v0.3.0release/helm/node/v0.4.0
Branch off master:
git checkout master && git pull
git checkout -b release/<artifact>/v<version>Merge feature branches and fixes into the release branch. This is where all changes for the release are collected.
Tag release candidates only from the release branch to trigger CI:
git tag <artifact>/v<version>-rc.1
git push origin <artifact>/v<version>-rc.1CI builds and publishes the RC automatically. RC releases are marked as Pre-release on GitHub.
Internal/test builds: If you need to build an image for testing outside of a release branch, use the
alphaorbetapre-release suffix:<artifact>/v<version>-alpha.1. These builds are strictly internal — never distribute or deploy them to production.
When the release is ready, open a PR from the release branch into master:
- PR title:
release/<artifact>:v<version>(e.g.release/nodectl:v0.3.0) - PR body: changelog entry (without the
## [version]header)
Squash-merge the PR:
gh pr merge <N> --squash --admingit checkout master && git pull
git tag <artifact>/v<version>
git push origin <artifact>/v<version>CI triggers on the tag and handles everything:
- Builds artifacts (containers, binaries, Helm charts)
- Pushes to registries
- Creates a GitHub Release
CI creates the release, but the body may need updating. Edit with the changelog entry:
gh release edit <tag> -F- <<< '<changelog entry>'For node releases only, Latest is default. All other artifacts:
gh release edit <tag> --latest=falseVerify:
gh release list # only node release should be Latestgit branch -d release/<artifact>/v<version>
git push origin --delete release/<artifact>/v<version>Helm charts should be released together with their parent app (node or nodectl), bumping appVersion and image.tag to match.
Release Helm charts independently only for chart-specific bugfixes (template fixes, value changes) that don't involve an app version change.
When releasing together:
- Include Helm chart changes in the same release branch as the app.
- After the app release is tagged, tag the Helm chart separately:
helm/node/v<version>. - CI packages and publishes the chart automatically.
- Build container image from
src/Dockerfile. - Push to
ghcr.io/rsquad/ton-rust-node/node. - Create GitHub Release.
| Git Tag | Docker Tags | GitHub Release |
|---|---|---|
node/v1.2.0-mainnet |
v1.2.0-mainnet, sha-* |
Latest |
node/v1.2.0-rc.1 |
v1.2.0-rc.1, sha-* |
Pre-release |
- Build cross-platform binaries (linux/amd64, linux/arm64, darwin/arm64, windows/amd64).
- Build container image from
src/Dockerfile.nodectl. - Push image to
ghcr.io/rsquad/ton-rust-node/nodectl. - Create GitHub Release with binaries attached.
| Git Tag | Docker Tags | Binaries | GitHub Release |
|---|---|---|---|
nodectl/v0.3.0 |
v0.3.0, latest, sha-* |
linux, darwin, windows | latest: false |
nodectl/v0.3.0-rc.1 |
v0.3.0-rc.1, sha-* |
linux, darwin, windows | Pre-release |
- Package the Helm chart.
- Push to OCI registry (
oci://ghcr.io/rsquad/ton-rust-node/helm/<chart>). - Create GitHub Release with chart archive attached.
| Git Tag | OCI Tag | GitHub Release |
|---|---|---|
helm/node/v0.2.2 |
0.2.2 |
latest: false |
helm/nodectl/v0.1.0 |
0.1.0 |
latest: false |
CI runs on PRs targeting master or release/**:
audit— cargo security auditfmt— formatting check (nightly rustfmt)check— clippy + cargo checktests— cargo teststests-net— network integration tests
| Artifact | Registry |
|---|---|
| Node image | ghcr.io/rsquad/ton-rust-node/node:<tag> |
| nodectl image | ghcr.io/rsquad/ton-rust-node/nodectl:<tag> |
| Node Helm chart | oci://ghcr.io/rsquad/ton-rust-node/helm/node |
| nodectl Helm chart | oci://ghcr.io/rsquad/ton-rust-node/helm/nodectl |
- Only node releases on
masterare marked as Latest. - All other releases (Helm charts, nodectl) use
make_latest: false. - Release candidates are marked as Pre-release.
- Hotfixes for older versions use
make_latest: false.
| Changelog | Artifact | Versioned by |
|---|---|---|
CHANGELOG.md |
Node | node/v* tags |
nodectl/CHANGELOG.md |
nodectl | nodectl/v* tags |
helm/ton-rust-node/CHANGELOG.md |
Node Helm chart | helm/node/v* tags |
helm/nodectl/CHANGELOG.md |
nodectl Helm chart | helm/nodectl/v* tags |
All changelogs use Keep a Changelog format.
Create a feature branch from master, fix, merge via PR, tag on master.
Create hotfix/<version> from the relevant release tag. Fix and tag on that
branch. Cherry-pick into master if applicable. GitHub Release is published
with make_latest: false.