This project uses Release Please to automate releases. Simply use conventional commits, and releases happen automatically.
Conventional Commit → Push to main → Release Please PR → Merge → Release Created
- You commit using conventional commit format
- Release Please creates/updates a release PR with CHANGELOG entries
- You merge the release PR when ready
- Automation handles the rest (tag, release, CITATION.cff, PDF upload)
Use this format for your commit messages:
<type>: <description>
[optional body]
[optional footer]
| Type | Description | Triggers Release? |
|---|---|---|
feat |
New feature or content | ✅ Minor bump |
fix |
Bug fix or correction | ✅ Patch bump |
docs |
Documentation only | ✅ Patch bump |
perf |
Performance improvement | ✅ Patch bump |
chore |
Maintenance tasks | ❌ Hidden |
style |
Formatting, whitespace | ❌ Hidden |
refactor |
Code restructuring | ❌ Hidden |
test |
Adding tests | ❌ Hidden |
ci |
CI/CD changes | ❌ Hidden |
For major version bumps, add ! after the type or include BREAKING CHANGE: in the footer:
feat!: restructure Part III with new chapter organization
BREAKING CHANGE: Chapter numbering has changed significantly.# New section (minor bump: 2.2.2 → 2.3.0)
git commit -m "feat: add section on multi-agent orchestration"
# Typo fix (patch bump: 2.2.2 → 2.2.3)
git commit -m "fix: correct citation in Chapter 4"
# Documentation update (patch bump)
git commit -m "docs: expand examples in DCF_PROMPT_LIBRARY"
# Maintenance (no release)
git commit -m "chore: update GitHub Actions versions"- Make changes and commit with conventional format
- Push to main
- Release Please creates a PR titled "chore(main): release X.Y.Z"
- Review the auto-generated CHANGELOG entries
- Merge the release PR
- Done! Release is created with:
- Git tag (vX.Y.Z)
- GitHub release with PDF attached
- Updated CITATION.cff
- Updated CHANGELOG.md
If you need to release without waiting for conventional commits:
# Create an empty commit to trigger release-please
git commit --allow-empty -m "feat: trigger release"
git push origin mainThis project follows Semantic Versioning:
- MAJOR (X.0.0) — Breaking changes, significant restructuring
- MINOR (0.X.0) — New features, sections, or resources (
feat:) - PATCH (0.0.X) — Bug fixes, corrections, documentation (
fix:,docs:)
View pending releases:
gh pr list --label "autorelease: pending"View release history:
gh release list- Ensure commits use conventional format
- Check that commits aren't all
chore:type (hidden by default) - View Actions tab for workflow errors
- Use
feat:for minor bumps - Use
fix:ordocs:for patch bumps - Use
feat!:orBREAKING CHANGE:for major bumps
- Edit the release PR directly before merging
- Or edit CHANGELOG.md after release (next release will preserve your edits)
⚠️ Do NOT enroll in KDP Select. KDP Select requires exclusivity—you cannot distribute the ebook elsewhere (including the free EPUB/PDF on GitHub). This project intentionally offers free downloads alongside paid Kindle purchases.
When a release is published, an automated workflow builds the EPUB and creates a GitHub issue with upload instructions.
- EPUB built from LaTeX source using Pandoc
- EPUB attached to the GitHub release
- Issue created with upload checklist
- Download the EPUB from the release assets
- Log in to KDP
- Navigate to your book's Kindle eBook Content
- Upload the new EPUB file
- Review the preview in Kindle Previewer
- Save and publish changes
- Wait for Amazon review (24-72 hours)
- Close the GitHub issue once live
Amazon KDP has no public API for automated uploads. The workflow automates everything possible (EPUB build, release attachment, instructions) while the actual KDP upload requires manual action.