This document defines the versioning strategy for reusable GitHub Actions workflows to ensure:
- Backward compatibility for existing users
- Clear upgrade paths without breaking changes
- Predictable behavior across versions
- Safe adoption of new features
We follow Semantic Versioning 2.0.0:
MAJOR.MINOR.PATCH
Example: 2.1.3
| Type | Increment | When to Use | Breaking Changes |
|---|---|---|---|
| MAJOR | X.0.0 | Breaking changes, removed features, major rewrites | β YES |
| MINOR | 0.X.0 | New features, enhancements (backward compatible) | β NO |
| PATCH | 0.0.X | Bug fixes, security patches (backward compatible) | β NO |
Users can reference workflows in multiple ways:
uses: org/workflows/.github/workflows/java-ci-universal.yml@v2.1.0β Pros: Stable, predictable, no surprises β Cons: Must manually update to get new features
uses: org/workflows/.github/workflows/java-ci-universal.yml@v2β Pros: Auto-receives minor/patch updates (no breaking changes) β Cons: Behavior may change slightly with new features
uses: org/workflows/.github/workflows/java-ci-universal.yml@mainuses: org/workflows/.github/workflows/java-ci-universal.yml@a1b2c3d4β Pros: Immutable, maximum security β Cons: No updates, must manually track changes
| State | Description | Support Level | Example |
|---|---|---|---|
| Active | Latest stable version | Full support, bug fixes | v2.1.0 |
| Maintenance | Previous major version | Security fixes only | v1.x.x |
| Deprecated | End-of-life announced | No support, 6 months notice | v0.x.x |
| End-of-Life | No longer supported | Use at own risk | - |
v1.0.0 (Jan 2025) v2.0.0 (Jan 2025) v2.1.0 (Nov 2025) v3.0.0 (Planned)
| | | |
|---- Active -------->|---- Maintenance --->|---- Active -------->|
|---- Active -------->|---- Active -------->|---- Active ----->
| |
6 months notice Drop Java 8
Branch: main
Testing: All changes go to main first
Users: Not recommended for production
# Development work happens here
git checkout main
git commit -m "feat: add new feature"
git push origin mainTag Format: v2.1.0-rc.1, v2.1.0-rc.2
Testing: Beta testers can validate
Duration: 1-2 weeks before stable release
git tag -a v2.1.0-rc.1 -m "Release candidate 1 for v2.1.0"
git push origin v2.1.0-rc.1Tag Format: v2.1.0
Branch: Create release branch for patches
Announcement: CHANGELOG, GitHub Release, Slack/Email
# Create release tag
git tag -a v2.1.0 -m "Release v2.1.0"
git push origin v2.1.0
# Create release branch for future patches
git checkout -b release/v2.1
git push origin release/v2.1
# Update major version tag (for @v2 references)
git tag -fa v2 -m "Update v2 to v2.1.0"
git push origin v2 --forceBranch: release/v2.1
Changes: Bug fixes only, no new features
Tag Format: v2.1.1, v2.1.2
# Work on release branch
git checkout release/v2.1
git commit -m "fix: correct validation logic"
git tag -a v2.1.1 -m "Patch release v2.1.1"
git push origin v2.1.1
# Update major version tag
git tag -fa v2 -m "Update v2 to v2.1.1"
git push origin v2 --force
# Merge fix back to main
git checkout main
git merge release/v2.1
git push origin mainv1.0.0 # Specific version
v1.0.1 # Patch
v1.0.2 # Patch
v1 # Points to latest v1.x.x (auto-updated)
v2.0.0 # Major version bump
v2.0.1 # Patch
v2.1.0 # Minor version (new features)
v2.1.1 # Patch
v2 # Points to latest v2.x.x (auto-updated)
v3.0.0 # Future major version
v3 # Points to latest v3.x.x
main # Latest development
βββ release/v1.0 # v1.0.x maintenance
βββ release/v2.0 # v2.0.x maintenance
βββ release/v2.1 # v2.1.x maintenance
βββ feature/* # Feature branches (merged to main)
β Breaking (Requires Major Version):
- Removing workflow inputs
- Changing input types (string β number)
- Removing outputs
- Changing output formats
- Removing workflow files
- Changing required secrets
- Dropping Java version support
- Removing composite actions
β Not Breaking (Minor/Patch Version):
- Adding new optional inputs
- Adding new outputs
- Adding new workflows
- Adding new composite actions
- Enhancing existing features (backward compatible)
- Bug fixes
- Documentation updates
- Adding Java version support
-
Announcement (Major.Minor.0)
- Document in CHANGELOG
- Add deprecation warnings in workflow outputs
- Provide migration guide
-
Grace Period (6 months minimum)
- Feature still works but logs warnings
- Users have time to migrate
-
Removal (Next Major Version)
- Feature removed in next major version
- Clear migration path documented
Example Timeline:
v2.0.0 (Jan 2025): Announce Java 8 deprecation
v2.1.0-v2.9.0: Java 8 works with warnings
v3.0.0 (Jul 2025+): Java 8 support removed
| Version | Status | Java Versions | Build Tools | Security Scan | Artifact Publish | Support Until |
|---|---|---|---|---|---|---|
| v2.1.0 | β Active | 8,11,17,21,22,23 | Maven, Gradle | β Full | β Full | TBD |
| v2.0.5 | β Active | 8,11,17,21,22 | Maven, Gradle | β None | β None | Jun 2026 |
| v1.0.0 | πΆ Maintenance | 8,11,17,21,22 | Maven only | β None | β None | Jan 2026 |
| Version | Planned Date | Key Changes | Breaking Changes |
|---|---|---|---|
| v2.2.0 | Q1 2026 | GraalVM native-image, JMH benchmarks | None |
| v2.3.0 | Q2 2026 | Contract testing, enhanced reporting | None |
| v3.0.0 | Q3 2026 | Remove Java 8, modern workflows only | Drop Java 8 |
Breaking Changes: None New Features: Gradle support, more Java versions, enhanced features
# Before (v1.0.0)
uses: org/workflows/.github/workflows/java-ci-secure.yml@v1.0.0
with:
java-version: '17'
maven-opts: '-Xmx4g'
# After (v2.1.0)
uses: org/workflows/.github/workflows/java-ci-universal.yml@v2.1.0
with:
java-version: '25' # Can now use Java 25!
build-tool: 'maven' # or 'gradle'
maven-opts: '-Xmx4g'Migration Steps:
- Update workflow reference from
@v1.0.0to@v2.1.0 - Change workflow file from
java-ci-secure.ymltojava-ci-universal.yml - Add
build-tool: 'maven'input (required in v2.x) - Test in a feature branch first
- Deploy to production
Breaking Changes: None New Features: Java 23, Security scanning, Artifact publishing
# Before (v2.0.5)
uses: org/workflows/.github/workflows/java-ci-universal.yml@v2.0.5
# After (v2.1.0) - No changes required!
uses: org/workflows/.github/workflows/java-ci-universal.yml@v2.1.0
# Optional: Add new features
jobs:
security:
uses: org/workflows/.github/workflows/ci-security.yml@v2.1.0Migration Steps:
- Simply update version tag from
@v2.0.5to@v2.1.0 - No code changes required (100% backward compatible)
- Optionally add new security scanning workflow
- Optionally use new composite actions
# β
RECOMMENDED: Pin to specific version
uses: org/workflows/.github/workflows/java-ci-universal.yml@v2.1.0
# β
ALTERNATIVE: Use major version (auto-updates)
uses: org/workflows/.github/workflows/java-ci-universal.yml@v2# β
ACCEPTABLE: Use latest for testing
uses: org/workflows/.github/workflows/java-ci-universal.yml@main
# πΆ WITH CAUTION: Use release candidate
uses: org/workflows/.github/workflows/java-ci-universal.yml@v2.2.0-rc.1-
Conservative (Manual Updates)
- Pin to specific versions (
@v2.1.0) - Review CHANGELOG before updating
- Test in staging before production
- Pin to specific versions (
-
Progressive (Auto Minor Updates)
- Use major version tags (
@v2) - Review CHANGELOG regularly
- Set up automated testing
- Use major version tags (
-
Aggressive (Early Adopter)
- Use release candidates (
@v2.2.0-rc.1) - Test on non-critical projects
- Provide feedback to maintainers
- Use release candidates (
-
GitHub Releases (Primary)
- Full release notes
- Migration guides
- Breaking change warnings
-
CHANGELOG.md (Reference)
- Detailed change log
- Version history
- Upgrade guides
-
Git Tags (Automation)
- Semantic versioning
- Automated tooling support
-
Notifications (Optional)
- Slack announcements
- Email notifications
- GitHub Discussions
# Release v2.1.0
## π New Features
- Java 23 support
- Security scanning workflow
- Artifact publishing action
## π§ Improvements
- Enhanced Gradle support
- Better error messages
## π Bug Fixes
- Fixed caching issue on Windows
## β οΈ Deprecations
- Java 8 will be removed in v3.0.0 (6 months notice)
## π Migration Guide
[Link to migration guide]
## π Breaking Changes
None (100% backward compatible)- Critical Security Issue Identified
- Patch All Active Versions
- v2.1.1 (latest)
- v2.0.6 (maintenance)
- v1.0.3 (maintenance)
- Notify Users Immediately
- Document CVE and Fix
| Version Line | Security Patches | Duration |
|---|---|---|
| Latest (v2.1.x) | β Immediate | Ongoing |
| Previous Minor (v2.0.x) | β Within 48h | 6 months |
| Previous Major (v1.x.x) | πΆ Critical only | 1 year |
| Version | Release Date | Status | Key Features |
|---|---|---|---|
| v2.1.0 | Nov 2025 | β Active | Java 23, Security, Publishing |
| v2.0.5 | Jan 2025 | β Active | Release notes automation |
| v2.0.0 | Jan 2025 | β Active | Gradle support |
| v1.0.0 | Jan 2025 | πΆ Maintenance | Initial stable release |
A:
- Production: Use
@v2.1.0for predictability - Development: Use
@v2for automatic updates
A:
@v2stays on v2.x.x (no automatic major version updates)@v3will be created for v3.x.x- You choose when to migrate
A:
- Security patches: Until Jan 2026 (1 year after v2.0.0)
- Bug fixes: Already ended (maintenance mode)
A:
- No, new features are only in newer versions
- Recommendation: Plan migration to v2.1.0
A:
- Announce in current minor version (v2.X.0)
- Provide 6-month migration window
- Release breaking change in next major (v3.0.0)
- Maintain previous major (v2.x) for 6 months
Last Updated: November 2025 Version: 1.0.0 (This document) Maintainer: Java Workflows Team