Create Release #6
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Create Release | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| release_type: | |
| description: 'Release type' | |
| required: true | |
| default: 'patch' | |
| type: choice | |
| options: | |
| - patch | |
| - minor | |
| - major | |
| release_channel: | |
| description: 'Release channel' | |
| required: true | |
| default: 'preview' | |
| type: choice | |
| options: | |
| - preview | |
| - stable | |
| dry_run: | |
| description: 'Dry run (simulate the release without pushing)' | |
| required: true | |
| default: true | |
| type: boolean | |
| jobs: | |
| create-release: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Output Inputs | |
| run: echo "${{ toJSON(github.event.inputs) }}" | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: main | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| fetch-depth: 0 | |
| - name: Set up JDK 8 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '8' | |
| distribution: 'temurin' | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: | | |
| pip install packaging lxml bump-my-version | |
| - name: Get current version | |
| id: current_version | |
| run: | | |
| CURRENT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) | |
| echo "version=$CURRENT_VERSION" >> $GITHUB_OUTPUT | |
| echo "Current version: $CURRENT_VERSION" | |
| - name: Calculate new version | |
| id: new_version | |
| run: | | |
| python ci/calculate_version.py \ | |
| --current "${{ steps.current_version.outputs.version }}" \ | |
| --type "${{ inputs.release_type }}" \ | |
| --channel "${{ inputs.release_channel }}" | |
| - name: Determine tag name | |
| id: tag_name | |
| run: | | |
| if [ "${{ inputs.release_channel }}" == "stable" ]; then | |
| VERSION="${{ steps.new_version.outputs.version }}" | |
| TAG="v${VERSION}" | |
| else | |
| # For preview releases, use current version with beta suffix | |
| VERSION="${{ steps.current_version.outputs.version }}" | |
| # Find the next beta number for current version | |
| BETA_TAGS=$(git tag -l "v${VERSION}-beta.*" | sort -V) | |
| if [ -z "$BETA_TAGS" ]; then | |
| BETA_NUM=1 | |
| else | |
| LAST_BETA=$(echo "$BETA_TAGS" | tail -n 1) | |
| LAST_NUM=$(echo "$LAST_BETA" | sed "s/v${VERSION}-beta.//") | |
| BETA_NUM=$((LAST_NUM + 1)) | |
| fi | |
| TAG="v${VERSION}-beta.${BETA_NUM}" | |
| fi | |
| echo "tag=$TAG" >> $GITHUB_OUTPUT | |
| echo "Tag will be: $TAG" | |
| - name: Update version (stable releases only) | |
| if: inputs.release_channel == 'stable' | |
| run: | | |
| python ci/bump_version.py --version "${{ steps.new_version.outputs.version }}" | |
| - name: Configure git identity | |
| run: | | |
| git config user.name 'github-actions[bot]' | |
| git config user.email 'github-actions[bot]@users.noreply.github.com' | |
| - name: Create release commit (stable releases only) | |
| if: inputs.release_channel == 'stable' | |
| run: | | |
| git add -A | |
| git commit -m "chore: release version ${{ steps.new_version.outputs.version }}" || echo "No changes to commit" | |
| - name: Create tag | |
| run: | | |
| git tag -a "${{ steps.tag_name.outputs.tag }}" -m "Release ${{ steps.tag_name.outputs.tag }}" | |
| - name: Push changes (if not dry run) | |
| if: ${{ !inputs.dry_run }} | |
| run: | | |
| if [ "${{ inputs.release_channel }}" == "stable" ]; then | |
| # Push the commit for stable releases | |
| git push origin main | |
| fi | |
| # Always push the tag | |
| git push origin "${{ steps.tag_name.outputs.tag }}" | |
| - name: Generate release notes | |
| id: release_notes | |
| if: ${{ !inputs.dry_run }} | |
| run: | | |
| python ci/generate_release_notes.py \ | |
| --tag "${{ steps.tag_name.outputs.tag }}" \ | |
| --repo "${{ github.repository }}" \ | |
| --token "${{ secrets.GITHUB_TOKEN }}" | |
| - name: Create GitHub Release Draft (if not dry run) | |
| if: ${{ !inputs.dry_run }} | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ steps.tag_name.outputs.tag }} | |
| name: ${{ steps.tag_name.outputs.tag }} | |
| body_path: release_notes.md | |
| draft: true | |
| prerelease: ${{ inputs.release_channel == 'preview' }} | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Summary | |
| run: | | |
| echo "## Release Summary" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Release Type:** ${{ inputs.release_type }}" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Release Channel:** ${{ inputs.release_channel }}" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Current Version:** ${{ steps.current_version.outputs.version }}" >> $GITHUB_STEP_SUMMARY | |
| if [ "${{ inputs.release_channel }}" == "stable" ]; then | |
| echo "- **New Version:** ${{ steps.new_version.outputs.version }}" >> $GITHUB_STEP_SUMMARY | |
| fi | |
| echo "- **Tag:** ${{ steps.tag_name.outputs.tag }}" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Dry Run:** ${{ inputs.dry_run }}" >> $GITHUB_STEP_SUMMARY | |
| if [ "${{ inputs.dry_run }}" == "true" ]; then | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "⚠️ This was a dry run. No changes were pushed." >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "📝 Draft release created successfully!" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Next Steps:" >> $GITHUB_STEP_SUMMARY | |
| echo "1. Review the draft release on the [releases page](https://github.com/${{ github.repository }}/releases)" >> $GITHUB_STEP_SUMMARY | |
| echo "2. Edit the release notes if needed" >> $GITHUB_STEP_SUMMARY | |
| echo "3. Publish the release to:" >> $GITHUB_STEP_SUMMARY | |
| if [ "${{ inputs.release_channel }}" == "stable" ]; then | |
| echo " - Create the official release" >> $GITHUB_STEP_SUMMARY | |
| echo " - Trigger automatic publishing to Maven Central" >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo " - Create a preview/beta release" >> $GITHUB_STEP_SUMMARY | |
| echo " - Note: Preview releases are not published to Maven Central" >> $GITHUB_STEP_SUMMARY | |
| fi | |
| fi |