Template checklist for shipping a Donner release. Copy this section for each release and fill in the version number.
Pre-Release: Code Quality
- Warning-clean build — bazel build //donner/... produces zero warnings. Fix all -Wunused-variable, -Wswitch, -Winconsistent-missing-override, etc.
- Doxygen warning-free — doxygen Doxyfile 2>&1 | grep warning produces zero output. Common issues: unescaped @font-face (use backticks), broken \ref targets, undocumented public compounds.
- Tests pass — bazel test //donner/... is green across all configurations:
- Default (tiny-skia)
- --config=skia
- --config=text-full
- --config=text-full + --config=skia
- Fuzzers run — Execute all fuzz targets for a reasonable duration. Check for new crashes.
- CMake build verified — Build and test with the CMake path (both Skia and tiny-skia).
Pre-Release: Documentation
- Audit doc comments — Review public API Doxygen from a doc writer's perspective. Focus on user readability: are descriptions clear, are parameters documented, do code examples work?
- Update examples and code snippets — Ensure examples in docs and README cover all major features (text, filters, animation, interactivity). Update any stale code snippets.
- Update Doxygen pages — Regenerate and review the HTML output. Check navigation, ensure all element pages render correctly, verify cross-references resolve.
- Update markdown docs — Review all docs/*.md and docs/design_docs/*.md for:
- Stale status markers ("In Progress" on shipped features)
- Accurate feature descriptions
- Working internal links
- Up-to-date build commands
- Update README.md — Ensure the supported elements list, feature descriptions, and "not yet
supported" list are current.
- Remove experimental gates on shipped features — If any elements have static constexpr bool IsExperimental = true that are now shipped, remove the declaration entirely (do not set to false — absence is the default non-experimental state). Update corresponding tests that assert experimental gating behavior.
Pre-Release: Release Notes
- Write RELEASE_NOTES.md entry — Add a section for the new version covering:
- High-level summary of what's new
- "What's Changed" with categorized bullet points
- Breaking changes (if any)
- "What's Included" section with build artifacts
- Code example showing the simplest usage path
- Link to full changelog (compare/vOLD...vNEW)
Final Commit
- Generate build report — Run docs/build_report.md generation and check in the updated report on the final pre-release commit.
- CI green — Verify the final commit passes all CI checks.
Release
- Create release tag — git tag -a vX.Y.Z -m "Donner SVG vX.Y.Z" on the final commit.
- Push tag — git push origin vX.Y.Z.
- Create GitHub Release — Use gh release create:
gh release create vX.Y.Z --title "Donner SVG vX.Y.Z" --notes-file release_body.md
Follow the pattern from previous releases:
- Title: Donner SVG vX.Y.Z
- Body: copy from the RELEASE_NOTES.md entry
- Attach binary artifacts (e.g., donner-svg_darwin_arm64, donner-svg_linux_x86_64) — these are built by the release CI workflow triggered by the tag push
- Verify release artifacts — Check that the GitHub release page shows the correct tag, binaries are attached, and the release body renders correctly.
Post-Release
- Update ProjectRoadmap.md — Mark the released milestone as "shipped" and update the design documents table.
- Announce — Post to relevant channels.