Releasing
Releasing Zagros
Zagros uses Semantic Versioning for tagged releases.
Version policy
- PATCH: backwards-compatible fixes, documentation corrections, dependency updates, and internal changes.
- MINOR: backwards-compatible features, new sources, new MCP tools, or additive schema/API changes.
- MAJOR: breaking CLI, MCP, persisted-schema, deployment, or stable skill-contract changes.
Before 1.0, breaking changes may occur in a minor release, but they must be called out in the changelog and release notes.
The version in Cargo.toml is the Zagros Core release version. Release tags must exactly match it as vMAJOR.MINOR.PATCH.
Release checklist
- Update
CHANGELOG.mdand move relevant entries from Unreleased into the new version. - Update
Cargo.tomlandCargo.lock. - Ensure the skill version in
skills/apm.ymlis intentionally set; skills may version independently later. - Merge with CI/security workflows green.
- Create and push the exact version tag.
- The release workflow rebuilds binaries, containers, and the skill from the tagged commit.
- Verify GitHub Release checksums, container digests, SBOM/provenance attestations, and skill checksum.
Example:
git tag v0.1.0
git push origin v0.1.0
Do not manually upload locally built binaries as official release assets.
Release outputs
A release produces:
- Linux x86_64 archive containing Zagros binaries.
- Windows x86_64 archive containing Zagros binaries.
zagros-skill.tar.gzand its SHA-256 file.SHA256SUMSfor release archives.- Versioned MCP, CLI, and UI images in GitHub Container Registry.
- Immutable image digest files.
- Build provenance and SBOM metadata from BuildKit.
- Downloadable
zagros-source.spdx.jsonrelease SBOM.
Production documentation should prefer an exact version or immutable digest over :latest.
Reproducibility
The skill builder honors SOURCE_DATE_EPOCH; release CI sets it to the tagged commit timestamp. Rebuilding the same skill source with the same epoch and MCP URL must produce the same SHA-256 digest.
Immutable-digest deployment example
For production, resolve the published digest from the GitHub Release digest file and run the exact image rather than a mutable tag:
docker pull ghcr.io/OWNER/zagros-mcp@sha256:DIGEST
docker run --rm -p 127.0.0.1:8789:8789 \
ghcr.io/OWNER/zagros-mcp@sha256:DIGEST
Replace OWNER and DIGEST with the values published by the release workflow. The version tag remains convenient for discovery; the digest is the immutable deployment reference.