Skip to content

Releases

Releases are fully automated via release-please. No manual tagging or changelog editing needed.

How it works

flowchart TD
    A([💬 Conventional commit merged to main])
    A --> B{Does it touch src/, Dockerfile, pyproject.toml, or tests/?}

    B -->|No — docs, CI config, dependencies| C([🔇 No release triggered])

    B -->|Yes — code changed| D[🤖 release-please opens or updates a Release PR\nwith auto-generated CHANGELOG entry]
    D --> E[🤖 Release PR is automatically squash-merged]
    E --> F[🐳 Docker builds in parallel\nlinux/amd64 on ubuntu-latest\nlinux/arm64 on ubuntu-24.04-arm]
    F --> G[📦 Multi-arch manifest pushed to Docker Hub\nvikas027/quiz-prep — tagged version + latest]
    G --> H[🔏 Image signed with cosign keyless signing\nverifiable via Sigstore]
    H --> I([✅ Release published])

What triggers a release

Only commits that touch files that affect the Docker image trigger the release workflow. Docs, CI config, test files, and Markdown changes do not.

Path Triggers release? Why
src/** ✅ Yes Application code
Dockerfile ✅ Yes Container build instructions
requirements.txt ✅ Yes Production runtime dependencies
requirements-dev.txt ✅ Yes Used inside Docker to build MkDocs site
pyproject.toml ✅ Yes Package metadata and version floors
docs/** ❌ No Documentation only
*.md ❌ No Markdown files
.github/** ❌ No CI/CD config — GH Actions version bumps don't release
tests/** ❌ No Tests are not included in the image
mise.toml ❌ No Local task runner only

How dependency updates trigger releases

Tool Commit type Version bump
Dependabot (pip) fix(deps): Patch 0.0.X
Dependabot (github-actions) chore(deps): None — CI config only
Renovate (pip packages) fix(deps): Patch 0.0.X
Renovate (custom: Docker, Tailwind, etc.) fix(deps): Patch 0.0.X
Renovate (pre-commit hooks) chore(ci): None — local tooling only

Semantic versioning

Versions follow SemVerMAJOR.MINOR.PATCH. release-please determines the bump automatically from commit types:

Commit type Version bump Example
fix: Patch 0.0.X fix: handle empty quiz on startup
feat: Minor 0.X.0 feat: add category filter to questions API
feat!: or BREAKING CHANGE: Major X.0.0 feat!: remove legacy YAML-only import
chore:, docs:, ci: No bump

Docker image tags

Each release pushes three tags to vikas027/quiz-prep:

Tag Example Use
Exact version 1.2.3 Pin to a specific release
Version with v v1.2.3 Conventional v-prefix alias
Latest latest Always the newest stable release

Changelog

release-please auto-generates CHANGELOG.md from commit messages. Only feat and fix commits appear in the public changelog.

Section Visible Commit types
Features feat
Bug Fixes fix
Refactoring refactor
Performance Hidden perf
Miscellaneous Hidden chore
CI Hidden ci, build
Documentation Hidden docs, test