This document describes the container build and release strategy for the sensor-log-generator project.
When building locally (not in CI), containers are automatically tagged with development tags:
image:dev- Latest development buildimage:dev-YYYYMMDDHHMMSS- Timestamped development buildimage:VERSION-dev- Version-specific development build
To build locally:
# Build with automatic dev tags
uv run build.py --skip-push
# Or build and push to registry
uv run build.pyThe CI pipeline (ci.yml) runs on pushes and pull requests but does NOT build containers.
It only:
- Runs linting and type checking
- Executes the test suite
- Validates the Dockerfile syntax
Release builds are triggered automatically when a git tag is pushed (format: v*).
To create a release:
# Create and push a tag
git tag v1.2.3
git push origin v1.2.3The release workflow will:
- Run all tests
- Build multi-platform containers (linux/amd64, linux/arm64)
- Push containers with multiple tags:
image:latestimage:v1.2.3image:v1.2(minor version)image:v1(major version)
- Generate automatic changelog from commit history
- Create GitHub release with:
- Changelog
- SBOM (Software Bill of Materials)
- Container signatures (Cosign/Sigstore)
dev- Always points to the latest local builddev-YYYYMMDDHHMMSS- Unique timestamp for each buildVERSION-dev- Development version of a specific release
latest- Always points to the latest stable releasevX.Y.Z- Specific version (immutable)vX.Y- Minor version (updates with patches)vX- Major version (updates with minor/patch releases)YYMMDDHHM- DateTime tag for trackingGIT_HASH- Short git commit hash
The release workflow automatically generates a changelog that includes:
- Features (
feat:commits) - Bug Fixes (
fix:commits) - Documentation (
docs:commits) - Performance (
perf:commits) - Other Changes (all other commits)
- Contributors list
- Statistics (commit count, files changed)
- Build locally during development - containers will be tagged with
dev - Use conventional commits for better changelogs:
feat:for new featuresfix:for bug fixesdocs:for documentationperf:for performance improvementschore:for maintenance tasks
- Ensure all tests pass before tagging
- Use semantic versioning (MAJOR.MINOR.PATCH)
- Tag format must be
vX.Y.Z(e.g.,v1.2.3) - Pre-releases can use suffixes:
v1.2.3-beta.1,v1.2.3-rc.1
Developer Push → CI Tests → ✓ (No container build)
↓
Tag Push (v*) → Release Workflow → Multi-platform Build → Push to Registry
↓
GitHub Release with Changelog
You can also trigger a release manually from GitHub Actions:
- Go to Actions → Release workflow
- Click "Run workflow"
- Enter version number (e.g.,
1.2.3) - The workflow will create the tag and release
CI=true- Set automatically in GitHub ActionsGITHUB_ACTIONS=true- Set automatically in GitHub Actions- These variables control whether development or production tags are used
- All release containers are signed with Cosign/Sigstore
- SBOM is generated for supply chain transparency
- Container registry requires authentication for pushes
- GitHub Actions uses GITHUB_TOKEN for registry authentication