Release Process
This guide documents the exact steps for publishing a new Kodio release, from version bumps through Maven Central publication.
Overview
Releases are tag-driven. Pushing a v* tag to master triggers a GitHub Actions pipeline that:
Runs the full JVM test suite
Creates a GitHub Release with auto-generated changelog
Publishes all library artifacts to Maven Central
Published Artifacts
Module | Maven Coordinates | Description |
|---|---|---|
Core |
| Audio recording, playback, formats |
Compose |
| Compose UI components |
Compose Material3 |
| Material 3 themed components |
Transcription |
| OpenAI Whisper transcription |
All modules are published as Kotlin Multiplatform artifacts with Android release variants.
Prerequisites
Required GitHub Secrets
The following secrets must be configured in the repository settings:
Secret | Purpose |
|---|---|
| Sonatype Central Portal username |
| Sonatype Central Portal password/token |
| GPG key ID for artifact signing |
| GPG key passphrase |
| Base64-encoded GPG private key |
Local Tools
Git with push access to
masterGitHub CLI (
gh) for monitoring workflows and verifying releases
Release Checklist
1. Verify master is green
Check that CI is passing on master:
2. Update version numbers
There are three files that hold version references:
gradle.properties — the Gradle build version (used for local dev; CI overrides from the tag):
kodio-docs/v.list — the Writerside docs variable (all 0.1.5 placeholders in Installation, Getting Started, etc. resolve from this):
README.md — the installation section has hardcoded version strings for all four artifacts. Update each implementation(...) line to the new version.
Update all three to the new release version.
3. Commit and push version bump
4. Review Release Drafter draft (optional)
The repository uses Release Drafter to accumulate a draft release from merged PRs. You can preview it in GitHub under Releases > Draft.
5. Create and push the version tag
Tag format:
Stable releases:
v1.0.0,v0.2.0Pre-releases:
v1.0.0-alpha,v1.0.0-beta.1,v1.0.0-rc.1
Tags containing a hyphen (e.g., v1.0.0-beta) are automatically marked as prerelease on GitHub.
6. Monitor the pipeline
The tag push triggers .github/workflows/publish.yml which runs three sequential jobs:
Pipeline jobs:
Job | Runner | What it does |
|---|---|---|
| ubuntu-latest | Runs |
| ubuntu-latest | Creates GitHub Release via |
| macOS-latest | Runs |
7. Verify the GitHub Release
Confirm:
Release name matches
vX.Y.ZRelease notes list the changes since the previous tag
Prerelease flag is correct (should be
falsefor stable releases)
8. Verify Maven Central artifacts
Artifacts appear on Maven Central after Sonatype processing (can take 15-30 minutes):
9. Post-release (optional)
Bump gradle.properties to the next SNAPSHOT version for local development:
How Changelog Generation Works
Two separate mechanisms exist:
Release Drafter (draft preview)
Configured in .github/release-drafter.yml. Runs on every push to master and PR activity. Maintains a draft GitHub Release that categorizes merged PRs by label:
Label | Category |
|---|---|
| Features |
| Bug Fixes |
| Breaking Changes |
| Maintenance |
| Documentation |
PRs are auto-labeled based on branch name prefixes:
feature/*→featurefix/*,bugfix/*→fixchore/*→choredocs/*→documentation
GitHub Auto-Generated Notes (actual release)
The publish workflow uses generate_release_notes: true in softprops/action-gh-release@v2. This produces release notes based on commits and PRs between the previous tag and the new one, using GitHub's built-in format.
Cleaning Up a Failed Release
If something goes wrong after a tag is pushed:
Fix the issue, then re-tag and push.
Manual Publishing
For publishing without the CI pipeline (e.g., testing or emergency releases):
Publishing to Maven Local (testing)
For testing artifacts locally before a release:
Then add mavenLocal() to the consuming project's repositories block.
Workflow Files Reference
File | Purpose |
|---|---|
| Tag-triggered release pipeline |
| CI tests (reusable) |
| Drafts release notes from PRs |
| Release Drafter categories and template |
| Maven publishing convention plugin |
| Build version ( |
| Documentation version variable |
| Hardcoded installation snippet versions |