| name | release |
| description | Use this skill when the user asks to create a release, cut a release, publish a new version, or perform release-related tasks for the envsense project. This skill provides comprehensive guidance for the automated release process, including: - Version bumping in Cargo.toml - Pre-release verification (tests, formatting, linting) - Monitoring the automated CI/CD pipeline - Multi-platform binary builds (Linux x64/ARM64, macOS Universal) - Cryptographic signing with cosign - Release verification and troubleshooting - Schema version considerations The envsense project uses an automated workflow triggered by version changes on the main branch. This skill walks through the entire process from start to finish. |
Release Skill
This skill guides you through creating a new release for the envsense project.
Release Process Overview
The envsense project uses an automated release workflow that is triggered when:
- A version change is detected in
Cargo.tomlon themainbranch - CI tests pass successfully
- No git tag exists yet for that version
Step-by-Step Release Instructions
Follow these steps to create a new release via pull request:
1. Verify Current State
Before starting a release, check:
- All tests pass locally:
cargo test --all - Code is formatted:
cargo fmt --all -- --check - Linting passes:
cargo clippy --all --locked -- -D warnings - Prettier formatting passes:
npm run format:check - Baseline validation:
./scripts/compare-baseline.sh - You're up to date with
mainbranch
2. Determine Version Number
Follow semantic versioning:
- Patch (0.5.x): Bug fixes, minor changes, no breaking changes
- Minor (0.x.0): New features, functionality additions, backward compatible
- Major (x.0.0): Breaking changes (when 1.0+ is reached)
Check current version:
grep '^version = ' Cargo.toml | head -1
Check existing tags:
git tag --sort=-version:refname | head -10
3. Update Version in Cargo.toml
Edit the version field in Cargo.toml:
version = "0.5.1" # Update to new version
Important: This is a workspace project. Only update the root Cargo.toml
version field (line ~10).
4. Create Release Branch and PR
Create a release branch with your changes:
git checkout -b release-v0.5.1
git add Cargo.toml
git commit -m "Bump version to 0.5.1"
git push origin release-v0.5.1
5. Create Pull Request
Create a PR with a concise description of the release:
gh pr create --title "Release v0.5.1" --body "Bump version from 0.5.0 to 0.5.1 for patch release."
Or via GitHub UI with a structured description:
## Summary
Bump version from 0.5.0 to 0.5.1 for patch release.
Brief description of what this release includes (new features, bug fixes,
improvements).
Tips for finding changes since last release:
# View commits since last tag
git log $(git describe --tags --abbrev=0)..HEAD --oneline
# View merged PRs since last tag
gh pr list --state merged --limit 50
Example from recent release:
- PR #60: "Release v0.6.0" - Bump version from 0.5.0 to 0.6.0 for minor release
6. Merge PR to Main
Once the PR is reviewed and approved (or if you have permission, merge directly):
# Merge via command line
gh pr merge --squash
# Or merge via GitHub UI
Note: The project currently uses a lightweight release process. For minor version bumps and non-breaking changes, you can merge your own release PRs after verifying all checks pass.
7. Monitor Automated Release
The automated workflow will:
CI Workflow runs first (
.github/workflows/ci.yml):- Runs linting (formatting, clippy)
- Runs prettier checks
- Runs tests on Ubuntu and macOS
- Validates baselines
Release Workflow triggers after CI succeeds (
.github/workflows/release.yml):- Checks if version changed (using
scripts/check-version-change.sh) - Builds binaries for multiple platforms:
- Linux x64 (
x86_64-unknown-linux-gnu) - Linux ARM64 (
aarch64-unknown-linux-gnu) - macOS Universal (
universal-apple-darwin- Intel + Apple Silicon)
- Linux x64 (
- Signs binaries with cosign (keyless signing)
- Creates GitHub release with:
- Release notes (from PR description and auto-generated from commits)
- Binary artifacts
- SHA256 checksums
- Cryptographic signatures (.sig files)
- Creates and pushes git tag (format:
{version}, e.g.,0.5.1)
- Checks if version changed (using
Validate Release Workflow runs after release is published (
.github/workflows/validate-release.yml):- Validates all binary signatures using cosign
- Tests local aqua configuration
- Reports next steps (aqua registry submission)
8. Monitor Workflow Progress
Check workflow status:
# View recent workflow runs
gh run list --limit 5
# Watch a specific workflow run
gh run watch
# View workflow logs if something fails
gh run view --log
Or visit: https://github.com/technicalpickles/envsense/actions
9. Verify Release
Once complete, verify the release:
# Check the new tag was created
git fetch --tags
git tag --sort=-version:refname | head -5
# View the GitHub release
gh release view 0.5.1 # Use your version number
# Download and test a binary
gh release download 0.5.1 --pattern "*x86_64-unknown-linux-gnu*"
10. Post-Release Tasks (Optional)
After a successful release:
Update aqua registry (if needed):
- Submit PR to https://github.com/aquaproj/aqua-registry
- Follow validation workflow output for guidance
Announce release (if significant):
- Update project documentation
- Post to relevant channels/communities
Binary Naming Convention
Released binaries follow this pattern:
envsense-{version}-{target}
Examples:
envsense-0.5.1-x86_64-unknown-linux-gnu(Linux x64)envsense-0.5.1-aarch64-unknown-linux-gnu(Linux ARM64)envsense-0.5.1-universal-apple-darwin(macOS Universal)
Each binary includes:
.sha256checksum file.sigcryptographic signature file.bundlesignature bundle file
Testing Releases Locally
Before pushing a release, you can test the build process:
# Run comprehensive release tests
# Note: This will skip Linux targets on macOS and vice versa
./scripts/test-release.sh
# Test specific target build
./scripts/build-target.sh x86_64-unknown-linux-gnu normal
# Test universal macOS build (macOS only)
./scripts/build-target.sh universal-apple-darwin universal
# Verify universal binary contains both architectures (macOS only)
lipo -info target/universal-apple-darwin/release/envsense
# Test binary preparation and validation
./scripts/prepare-binary.sh 0.5.1-test x86_64-unknown-linux-gnu
./scripts/validate-binary.sh dist/envsense-0.5.1-test-x86_64-unknown-linux-gnu
Prerequisites for local testing:
- Rust toolchain with rustup
- For Linux builds on macOS: Docker (use
./scripts/dev-docker.sh) - For universal macOS builds: macOS with Xcode command line tools
Troubleshooting
Release Workflow Didn't Trigger
Check:
- CI workflow completed successfully
- Version in Cargo.toml changed from last tagged release
- No existing tag with that version exists
- Push was to
mainbranch
Build Failed
Check:
- All tests pass locally:
cargo test --all - Code compiles for all targets
- Review workflow logs:
gh run view --log
Signature Validation Failed
The validate-release workflow might fail if:
- Cosign signatures weren't created properly
- Network issues downloading release assets
- This is usually non-critical; the release itself succeeded
Need to Retry a Release
If you need to fix and retry:
- Delete the GitHub release:
gh release delete 0.5.1 - Delete the git tag locally and remotely:
git tag -d 0.5.1 git push origin :refs/tags/0.5.1 - Fix issues in a new commit
- Restart from step 5 (commit and push)
Schema Version Considerations
Important: The JSON schema version (currently 0.3.0) is separate from the crate version.
When making breaking schema changes:
- Update
SCHEMA_VERSIONin src/schema/main.rs - Update all snapshots:
cargo insta accept - Document changes in migration guide: docs/migration-guide.md
- Reference CONTRACT.md for compatibility guarantees
Schema changes require:
- Field renames: Add
#[serde(alias = "old_name")] - Field removals: Bump schema version
- New fields: Can be added freely (non-breaking)
Note: Most releases do NOT require schema version changes. Only bump the schema version when making breaking changes to the JSON output structure.
Release Checklist
Use this checklist when performing a release:
Pre-Release Verification:
- All tests pass locally (
cargo test --all) - Code is formatted (
cargo fmt --all -- --check) - Clippy passes (
cargo clippy --all --locked -- -D warnings) - Prettier passes (
npm run format:check) - Baseline validation passes (
./scripts/compare-baseline.sh)
Version Bump and PR:
- Version updated in
Cargo.toml(root workspace only) - Release branch created (e.g.,
release-v0.6.0) - Pull request created with concise description
- PR merged to main branch
Automated Release Verification:
- CI workflow completed successfully
- Release workflow completed successfully
- Git tag created and pushed (format:
0.6.0) - GitHub release published
- Binaries available for all three targets (Linux x64, Linux ARM64, macOS Universal)
- Binaries signed with cosign
- Validation workflow completed (optional)
Post-Release Testing:
- Release tested (download and run binary from GitHub release)
- Verify checksums match
- Verify signature validation works
Key Files and Scripts
Configuration:
- Cargo.toml - Version definition (line ~10)
- CONTRACT.md - Schema stability guarantees
GitHub Workflows:
- .github/workflows/ci.yml - CI prerequisite workflow
- .github/workflows/release.yml - Main release workflow
- .github/workflows/validate-release.yml - Post-release validation
Release Scripts:
scripts/check-version-change.sh- Detects version changes and determines if release is neededscripts/build-target.sh- Builds for specific targets (normal or universal)scripts/prepare-binary.sh- Prepares release artifacts with checksumsscripts/filter-release-files.sh- Filters artifacts for releasescripts/sign-release-binaries.sh- Signs binaries with cosign (keyless)scripts/check-signing-completed.sh- Verifies all signatures were createdscripts/validate-signing.sh- Validates signatures for a releasescripts/create-release.sh- Extracts changelog content (if exists)scripts/test-release.sh- Comprehensive local release testing
Documentation:
- docs/development.md - Development workflow
- docs/migration-guide.md - Schema migration guide
Support
For issues with the release process:
- Check GitHub Actions logs
- Review recent successful releases for comparison
- Consult
docs/development.mdfor detailed documentation - Open an issue if you discover a bug in the release workflow