Versioning, release workflow, and publishing.
Versioning
Semantic Versioning
Sentinel follows Semantic Versioning:
MAJOR.MINOR.PATCH
1.0.0 - Initial stable release
1.1.0 - New features, backwards compatible
1.1.1 - Bug fixes only
2.0.0 - Breaking changes
Version Bumps
| Change Type | Version Bump | Example |
|---|---|---|
| Breaking API change | Major | 1.0.0 → 2.0.0 |
| New feature | Minor | 1.0.0 → 1.1.0 |
| Bug fix | Patch | 1.0.0 → 1.0.1 |
| Security fix | Patch | 1.0.0 → 1.0.1 |
| Documentation | None | - |
Pre-release Versions
1.0.0-alpha.1 - Early testing
1.0.0-beta.1 - Feature complete, needs testing
1.0.0-rc.1 - Release candidate
1.0.0 - Stable release
Release Workflow
1. Prepare Release
# Create release branch
# Update version in Cargo.toml
# Update CHANGELOG.md
# Move [Unreleased] items to [1.2.0]
2. Update Changelog
- -
- -
-
-
-
3. Create Release PR
4. Merge and Tag
After PR approval:
# Merge release PR
# Create tag
5. Create GitHub Release
Or via GitHub UI:
- Go to Releases
- Click “Draft a new release”
- Select tag
v1.2.0 - Copy changelog section to description
- Attach binaries (built by CI)
- Publish
Automated Releases
GitHub Actions Workflow
# .github/workflows/release.yml
name: Release
on:
push:
tags:
- 'v*'
jobs:
build:
strategy:
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
- target: x86_64-apple-darwin
os: macos-latest
- target: aarch64-apple-darwin
os: macos-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Build
run: cargo build --release --target ${{ matrix.target }}
- name: Package
run: |
mkdir -p dist
cp target/${{ matrix.target }}/release/sentinel dist/
tar -czvf sentinel-${{ matrix.target }}.tar.gz -C dist .
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: sentinel-${{ matrix.target }}
path: sentinel-${{ matrix.target }}.tar.gz
release:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Create release
uses: softprops/action-gh-release@v1
with:
files: artifacts/**/*.tar.gz
generate_release_notes: true
Publishing to crates.io
First-Time Setup
# Login to crates.io
# Verify package
Publishing
# Publish to crates.io
# For workspace packages, publish in order:
Yanking
If a release has critical issues:
# Yank version (can still be used as dependency)
# Unyank if needed
Docker Images
Building Images
# Dockerfile
FROM rust:1.75 as builder
WORKDIR /app
COPY . .
RUN cargo build --release
FROM debian:bookworm-slim
COPY --from=builder /app/target/release/sentinel /usr/local/bin/
ENTRYPOINT ["sentinel"]
Publishing to GHCR
# In release workflow
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
push: true
tags: |
ghcr.io/raskell-io/sentinel:${{ github.ref_name }}
ghcr.io/raskell-io/sentinel:latest
Agent Releases
Coordinated Releases
When Sentinel protocol changes:
- Release
sentinel-agent-protocolfirst - Update agents to use new protocol
- Release agents
- Release Sentinel
Agent Version Matrix
| Sentinel | Protocol | WAF | Auth | JS |
|---|---|---|---|---|
| 1.2.0 | 0.2.0 | 0.3.0 | 0.2.0 | 0.2.0 |
| 1.1.0 | 0.1.0 | 0.2.0 | 0.1.0 | 0.1.0 |
Hotfix Releases
For critical bugs in production:
# Create hotfix branch from release tag
# Apply minimal fix
# Bump patch version
# Update changelog
# Add to ## [1.2.1] section
# Tag and release
# Merge fix to main
Release Checklist
Pre-Release
- All tests pass on main
- Changelog is complete
- Documentation is updated
- Breaking changes are documented
- Performance benchmarks run
- Security audit complete
Release
- Version bumped
- Release PR merged
- Tag created and pushed
- GitHub release created
- Binaries attached
- Docker images published
- Published to crates.io
Post-Release
- Announcement posted (blog, Discord)
- Documentation site updated
- Homebrew formula updated
- Monitor for issues
Long-Term Support
LTS Versions
Major versions may receive LTS support:
| Version | Status | Support Until |
|---|---|---|
| 2.x | Current | - |
| 1.x | LTS | 2025-12-31 |
| 0.x | EOL | - |
Backporting Fixes
For LTS versions:
# Cherry-pick security fix to LTS branch
# Create patch release
Next Steps
- Contributing - How to contribute
- PR Process - Submitting changes
- Testing - Testing requirements