Releasing
Citadel releases are managed through the release.sh script. Always use this script -- never create tags or GitHub releases manually.
Creating a Release
Interactive
./release.sh
The script prompts for the version number and confirms before proceeding.
Non-Interactive
./release.sh -v v1.2.0 -y
The -y flag skips confirmation prompts.
Dry Run
Preview what will happen without making any changes:
./release.sh --dry-run -v v1.2.0
What the Release Script Does
- Validates the environment -- checks that the working tree is clean, required tools are installed, and the version tag does not already exist.
- Creates and pushes the git tag -- tags the current commit with the specified version.
- Builds for all platforms -- produces binaries for 6 targets:
linux/amd64linux/arm64darwin/amd64darwin/arm64windows/amd64windows/arm64
- Creates the GitHub release -- uploads all platform binaries as release assets.
- Updates the Homebrew tap -- pushes the new formula to
aceteam-ai/homebrew-tapso users can install viabrew install aceteam-ai/tap/citadel.
Version Format
Versions follow semantic versioning:
- Release:
vX.Y.Z(e.g.,v2.3.0) - Pre-release:
vX.Y.Z-rc1(e.g.,v2.3.0-rc1)
The v prefix is required.
Version Injection
The build.sh script injects the version into the binary at build time using Go linker flags:
go build -ldflags="-X 'github.com/aceteam-ai/citadel-cli/cmd.Version=v2.3.0'" -o citadel .
The version is stored in the Version variable in cmd/version.go and displayed by citadel version.
Build Script
For development builds (current platform only):
./build.sh
For release builds (all platforms):
./build.sh --all
Binaries are placed in the ./build/ directory. Linux and macOS builds are packaged as .tar.gz archives; Windows builds are packaged as .zip files.