ci: generate release notes for rc releases from conventional commits … #12
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: Release Please (Pre-release) | |
| on: | |
| push: | |
| branches: [develop] | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| packages: write | |
| jobs: | |
| bump-version: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| new_version: ${{ steps.bump.outputs.new_version }} | |
| skipped: ${{ steps.bump.outputs.skipped }} | |
| last_tag: ${{ steps.bump.outputs.last_tag }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Compute next rc version | |
| id: bump | |
| run: | | |
| set +e | |
| NEW_VERSION="$(bash Scripts/bump-prerelease.sh)" | |
| EXIT_CODE=$? | |
| set -e | |
| if [ $EXIT_CODE -eq 2 ]; then | |
| echo "No releasable commits — skipping release." | |
| echo "skipped=true" >> "$GITHUB_OUTPUT" | |
| exit 0 | |
| fi | |
| LAST_TAG="$(git describe --tags --abbrev=0 2>/dev/null || echo "")" | |
| echo "new_version=$NEW_VERSION" >> "$GITHUB_OUTPUT" | |
| echo "last_tag=$LAST_TAG" >> "$GITHUB_OUTPUT" | |
| echo "skipped=false" >> "$GITHUB_OUTPUT" | |
| - name: Generate release notes | |
| id: notes | |
| if: steps.bump.outputs.skipped != 'true' | |
| run: | | |
| NOTES="$(bash Scripts/generate-changelog.sh \ | |
| "${{ steps.bump.outputs.last_tag }}" \ | |
| HEAD \ | |
| "${{ steps.bump.outputs.new_version }}")" | |
| # Write to file to safely pass multiline content | |
| echo "$NOTES" > /tmp/release-notes.md | |
| echo "notes_file=/tmp/release-notes.md" >> "$GITHUB_OUTPUT" | |
| - name: Tag | |
| if: steps.bump.outputs.skipped != 'true' | |
| run: | | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| git tag -a "v${{ steps.bump.outputs.new_version }}" -m "chore: release ${{ steps.bump.outputs.new_version }}" | |
| git push origin "v${{ steps.bump.outputs.new_version }}" | |
| - name: Upload release notes | |
| if: steps.bump.outputs.skipped != 'true' | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: release-notes | |
| path: /tmp/release-notes.md | |
| publish-windows: | |
| needs: bump-version | |
| if: ${{ needs.bump-version.outputs.skipped != 'true' }} | |
| uses: ./.github/workflows/job-cmakebuild-windows.yml | |
| with: | |
| targetFramework: net8.0 | |
| configuration: Release | |
| publish-macos: | |
| needs: bump-version | |
| if: ${{ needs.bump-version.outputs.skipped != 'true' }} | |
| uses: ./.github/workflows/job-cmakebuild-macOS.yml | |
| with: | |
| targetFramework: net8.0 | |
| configuration: Release | |
| publish-linux: | |
| needs: bump-version | |
| if: ${{ needs.bump-version.outputs.skipped != 'true' }} | |
| uses: ./.github/workflows/job-cmakebuild-linux.yml | |
| with: | |
| targetFramework: net8.0 | |
| configuration: Release | |
| upload-artifacts: | |
| needs: [bump-version, publish-windows, publish-macos, publish-linux] | |
| if: ${{ needs.bump-version.outputs.skipped != 'true' }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Download all build artifacts | |
| uses: actions/download-artifact@v6 | |
| with: | |
| path: artifacts | |
| - name: Publish GitHub Pre-release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: v${{ needs.bump-version.outputs.new_version }} | |
| name: ${{ needs.bump-version.outputs.new_version }} | |
| prerelease: true | |
| generate_release_notes: false | |
| body_path: artifacts/release-notes/release-notes.md | |
| files: artifacts/**/* |