Replace every remaining reference to the old Gitea infrastructure with the new GitHub-hosted equivalents across all documentation, wiki pages, test files, and historical ticket summaries. - README.md: CI badge, clone URL, releases link, CI/CD section, project structure - docs/wiki/CICD-Pipeline.md: full rewrite for GitHub Actions + ghcr.io - docs/wiki/Home.md: CI badge, releases link, phase status, tech stack - docs/wiki/Troubleshooting.md: rewrite CI troubleshooting for GitHub Actions - docs/architecture/README.md: update CI/CD pipeline diagram - AGENTS.md: CI/CD section, environment references - PLAN.md: directory structure, pipeline table - SECURITY_AUDIT.md: mark C3 and L4 findings as resolved - ticket-git-cliff-changelog.md: workflow path updated - tickets/ci-runner-speed-optimization.md: image registry updated - 2026-hackathon_AgenticFeature.md: workflow path updated - tests: workflow path assertions updated in all three test files
3.8 KiB
3.8 KiB
feat: Automated Changelog via git-cliff
Description
Introduces automated changelog generation using git-cliff, a tool that parses conventional commits and produces formatted Markdown changelogs.
Previously, every Gitea release body contained only the static text "Release vX.Y.Z".
With this change, releases display a categorised, human-readable list of all commits
since the previous version.
Root cause / motivation: No changelog tooling existed. The project follows Conventional Commits throughout but the information was never surfaced to end-users.
Files changed:
cliff.toml(new) — git-cliff configuration; defines commit parsers, ignored tags, output template, and which commit types appear in the changelogCHANGELOG.md(new) — bootstrapped from all existing tags; maintained by CI going forward.github/workflows/release.yml—changelogjob that runs afterautotagdocs/wiki/CICD-Pipeline.md— "Changelog Generation" section added
Acceptance Criteria
cliff.tomlpresent at repo root with working Tera templateCHANGELOG.mdpresent at repo root, bootstrapped from all existing semver tagschangelogjob inrelease.ymlruns afterautotag(parallel with build jobs)- Each GitHub Release body shows grouped conventional-commit entries instead of
static
"Release vX.Y.Z" CHANGELOG.mdcommitted tomainon every release with[skip ci]suffix (no infinite re-trigger loop)CHANGELOG.mduploaded as a downloadable release asset- CI/chore/build/test/style commits excluded from changelog output
docs/wiki/CICD-Pipeline.mddocuments the changelog generation process
Work Implemented
cliff.toml
- Tera template with proper whitespace control (
-%}/{%-) for clean output - Included commit types:
feat,fix,perf,docs,refactor - Excluded commit types:
ci,chore,build,test,style ignore_tags = "rc|alpha|beta"— pre-release tags excluded from version boundariesfilter_unconventional = true— non-conventional commits dropped silentlysort_commits = "oldest"— chronological order within each version
CHANGELOG.md
- Bootstrapped locally using git-cliff v2.7.0 (aarch64 musl binary)
- Covers all tagged versions from
v0.1.0throughv0.2.49plus[Unreleased] - 267 lines covering the full project history
.github/workflows/release.yml — changelog job
needs: autotag— waits for the new tag to exist before running- Full history clone:
git fetch --tags --depth=2147483647so git-cliff can resolve all version boundaries - git-cliff v2.7.0 downloaded as a static x86_64 musl binary (~5 MB); no custom image required
- Generates full
CHANGELOG.mdand per-release notes (--latest --strip all) - Updates the GitHub Release body via
gh release editwith JSON-safe escaping (jq -Rs .) - Commits
CHANGELOG.mdtomainwith[skip ci]to prevent workflow re-trigger - Deletes any existing
CHANGELOG.mdasset before re-uploading (rerun-safe) - Runs in parallel with all build jobs — no added wall-clock latency
docs/wiki/CICD-Pipeline.md
- Added "Changelog Generation" section before "Known Issues & Fixes"
- Describes the five-step process, cliff.toml settings, and loop prevention mechanism
Testing Needed
- Merge this PR to master; verify
changelogCI job succeeds in Gitea Actions - Check Gitea release body for the new version tag — should show grouped commit list
- Verify
CHANGELOG.mdwas committed to master (check git log after CI runs) - Verify
CHANGELOG.mdappears as a downloadable asset on the release page - Push a subsequent commit to master; confirm the
[skip ci]CHANGELOG commit does NOT trigger a second run ofauto-tag.yml - Confirm CI/chore commits are absent from the release body