This repository now supports automated GitHub releases with generated changelogs.
Releases are both:
- Tag-driven (push
v*tag), and - One-command (local helper script / Make target)
You can release Helios in any of these ways:
- One-command local release (recommended for maintainers)
- Manual GitHub Action dispatch
- Direct tag push (tag-driven)
From the repository root:
make release VERSION=v0.2.0 TARGET=mainPrerelease examples:
# Release candidate
make release VERSION=v0.2.0 CHANNEL=rc PRERELEASE_ITERATION=1 TARGET=main
# Beta release
make release VERSION=v0.2.0 CHANNEL=beta PRERELEASE_ITERATION=1 TARGET=mainWhat this does:
- Validates version format (
vMAJOR.MINOR.PATCH) - Verifies clean working tree
- Creates an annotated tag on
origin/main - Pushes the tag
- Triggers the tag-driven release workflow
Dry run (no tag push):
make release VERSION=v0.2.0 CHANNEL=rc PRERELEASE_ITERATION=1 DRY_RUN=trueUse workflow: Create Release Tag (Manual)
Inputs:
version→ base or full tag (e.g.v0.2.0orv0.2.0-rc.1)target→ branch to tag (defaultmain)channel→stable|rc|betaprerelease_iteration→ used when channel isrc/betaand version has no suffix
This workflow pushes the tag; release publication is then handled automatically by the tag-driven workflow.
Push a tag manually:
git tag -a v0.2.0 -m "Release v0.2.0"
git push origin v0.2.0That triggers Release (Tag-Driven).
Workflow: .github/workflows/release-on-tag.yml
For each v* tag push, it:
- Checks out full git history (for changelog ranges)
- Runs tests serially (
go test -p 1 ./... -count=1) - Builds artifacts with an OS matrix:
- Linux (
linux/amd64) - macOS (
darwin/amd64) - Windows (
windows/amd64)
- Linux (
- Packages artifacts per platform (
.tar.gzfor Linux/macOS,.zipfor Windows) - Generates per-artifact SHA-256 checksum files
- Generates release notes via
scripts/generate_changelog.sh - Publishes/updates the GitHub Release with all packaged assets
- Automatically marks releases as pre-release when tag contains
-rcor-beta
- Tags containing
-rcor-betaare published as GitHub prereleases. - Stable tags (e.g.,
v1.2.3) are published as normal releases. - Manual workflow + local script both support channel-driven tag generation.
Script: scripts/generate_changelog.sh
Manual usage:
bash scripts/generate_changelog.sh v0.2.0 v0.1.0Or via Makefile:
make changelog VERSION=v0.2.0 PREVIOUS=v0.1.0The generated markdown is used as the GitHub Release body.
.github/workflows/release-on-tag.yml.github/workflows/create-release-tag.ymlscripts/build_release_artifacts.shscripts/release.shscripts/generate_changelog.shdocs/RELEASES.md
And Makefile targets:
make release VERSION=vX.Y.Z [TARGET=main]make release VERSION=vX.Y.Z [TARGET=main] [CHANNEL=stable|rc|beta] [PRERELEASE_ITERATION=1] [DRY_RUN=true|false]make release-rc VERSION=vX.Y.Z [PRERELEASE_ITERATION=1]make release-beta VERSION=vX.Y.Z [PRERELEASE_ITERATION=1]make changelog VERSION=vX.Y.Z [PREVIOUS=vA.B.C]