Skip to content

Prepare release

Prepare release #9

name: Release Preview
on:
pull_request:
branches:
- main
types:
- opened
- synchronize
- reopened
- ready_for_review
- labeled
- unlabeled
jobs:
preview:
name: Generate release preview
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Determine release label
id: label
run: |
set -euo pipefail
LABELS=$(jq -r '.pull_request.labels[].name // empty' "$GITHUB_EVENT_PATH" | tr '\n' ' ')
if echo "$LABELS" | grep -Eq '\b(hotfix|minor|major)\b'; then
echo "has_label=true" >> "$GITHUB_OUTPUT"
echo "label_name=$(echo "$LABELS" | tr ' ' '\n' | grep -E '\b(hotfix|minor|major)\b' | head -n1)" >> "$GITHUB_OUTPUT"
else
echo "has_label=false" >> "$GITHUB_OUTPUT"
fi
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
if: steps.label.outputs.has_label == 'true'
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
if: steps.label.outputs.has_label == 'true'
- name: Generate release metadata preview
id: metadata
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_REPOSITORY: ${{ github.repository }}
GITHUB_SHA: ${{ github.event.pull_request.head.sha }}
INCLUDE_OPEN_PR: "true"
PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }}
DEFAULT_BUMP: patch
run: |
set -euo pipefail
chmod +x .github/scripts/generate_release_metadata.py
METADATA_JSON=$(./.github/scripts/generate_release_metadata.py)
echo "$METADATA_JSON" > metadata.json
RELEASE_VERSION=$(jq -r '.release_version' metadata.json)
BUMP_TYPE=$(jq -r '.bump_type' metadata.json)
PREVIEW_SUMMARY=$(jq -r '.preview_summary' metadata.json)
echo "release_version=$RELEASE_VERSION" >> "$GITHUB_OUTPUT"
echo "bump_type=$BUMP_TYPE" >> "$GITHUB_OUTPUT"
{
echo 'preview_summary<<EOF'
echo "$PREVIEW_SUMMARY"
echo 'EOF'
} >> "$GITHUB_OUTPUT"
if: steps.label.outputs.has_label == 'true'
- name: Create or update release preview comment
uses: peter-evans/create-or-update-comment@v4
with:
issue-number: ${{ github.event.pull_request.number }}
body: |
<!-- release-preview -->
${{ steps.metadata.outputs.preview_summary }}
body-includes: "<!-- release-preview -->"
edit-mode: replace
if: steps.label.outputs.has_label == 'true'
- name: Clear release preview comment when label missing
if: steps.label.outputs.has_label != 'true'
uses: peter-evans/create-or-update-comment@v4
with:
issue-number: ${{ github.event.pull_request.number }}
body: |
<!-- release-preview -->
⚠️ Release preview unavailable. Add a `hotfix`, `minor`, or `major` label to view the upcoming release summary.
body-includes: "<!-- release-preview -->"
edit-mode: replace