Release Process¶
For Maintainers
This guide is for project maintainers who have permission to create releases.
Overview¶
Releases are automated through GitHub Actions:
- Snapshot releases: Automatically published on every push to main
- Official releases: Triggered by creating tags starting with v
Release Types¶
Snapshot Releases¶
Snapshots are automatically published when changes are pushed to main
:
# After merging a PR to main
# A snapshot is automatically published as:
# version-SNAPSHOT (e.g., 0.0.2-SNAPSHOT)
Users can consume snapshots:
Official Releases¶
Official releases are created by tagging:
This triggers the release workflow which: 1. Builds the project 2. Runs all tests 3. Publishes to GitHub Packages 4. Creates a GitHub Release
Release Checklist¶
Before Release¶
- All tests pass on
main
- Documentation is up to date
- CHANGELOG is updated
- Version in
build.gradle.kts
is correct
Create Release¶
-
Update version in
build.gradle.kts
: -
Update CHANGELOG.md:
-
Commit changes:
-
Create and push tag:
-
Verify release:
- Check GitHub Actions for successful build
- Verify package appears in GitHub Packages
- Check GitHub Releases page
After Release¶
-
Update version for next development:
-
Commit:
Version Numbering¶
We follow Semantic Versioning:
- MAJOR.MINOR.PATCH (e.g., 1.2.3)
- MAJOR: Breaking API changes
- MINOR: New features, backwards compatible
- PATCH: Bug fixes, backwards compatible
During early development (0.x.x): - API may change between minor versions - Use exact version pinning in dependencies
GitHub Actions Workflows¶
CI Workflow (.github/workflows/ci.yml)¶
Runs on:
- Push to main
or develop
- Pull requests
Actions: - Build project - Run tests - Validate code
Snapshot Workflow (.github/workflows/snapshot.yml)¶
Runs on:
- Push to main
Actions:
- Build project
- Run tests
- Publish snapshot to GitHub Packages
Release Workflow (.github/workflows/release.yml)¶
Runs on:
- Tags starting with v
Actions: - Build project - Run tests - Publish release to GitHub Packages - Create GitHub Release
Troubleshooting Releases¶
Release Build Fails¶
- Check GitHub Actions logs
- Ensure tag format is correct (
v0.0.2
) - Verify
build.gradle.kts
version matches tag
Package Not Visible¶
- Check package visibility settings
- Ensure authentication is configured
- Wait a few minutes for propagation
Snapshot Not Updating¶
- Check snapshot workflow succeeded
- Clear local Gradle cache:
- Force refresh:
Manual Release (Emergency)¶
If automation fails, publish manually:
# Set credentials
export GITHUB_USERNAME=your-username
export GITHUB_TOKEN=your-token
# Publish
./gradlew publish
Release Notes Template¶
## What's Changed
### ✨ New Features
- Add MySQL R2DBC URL converter (#123) by @contributor
### 🐛 Bug Fixes
- Fix connection retry logic (#124) by @contributor
### 📚 Documentation
- Update configuration examples (#125) by @contributor
### 🏗️ Dependencies
- Update Micronaut to 4.2.0 (#126)
**Full Changelog**: https://github.com/charliek/micronaut-flyway-r2dbc/compare/v0.0.1...v0.0.2
Security Releases¶
For security fixes:
- Do not disclose details in public commits
- Create release normally
- Add security notice to release notes after release
- Consider yanking affected versions
Deprecation Process¶
When deprecating features:
- Add
@Deprecated
annotation with explanation - Update documentation with deprecation notice
- Provide migration guide
- Remove in next major version
Example:
@Deprecated(
message = "Use FlywayR2dbcConfigurationProperties instead",
replaceWith = ReplaceWith("FlywayR2dbcConfigurationProperties"),
level = DeprecationLevel.WARNING
)
class OldConfiguration
Next Steps¶
- How It Works - Understand how the library operates
- Configuration Guide - Configure the library