Skip to content

ci: generate release notes for rc releases from conventional commits … #12

ci: generate release notes for rc releases from conventional commits …

ci: generate release notes for rc releases from conventional commits … #12

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/**/*