Skip to content

Merge v0.8.2 into main (manual force refresh) #16

Merge v0.8.2 into main (manual force refresh)

Merge v0.8.2 into main (manual force refresh) #16

Workflow file for this run

name: Release
# Fires when a vX.Y.Z tag is pushed. Extracts the matching section from
# CHANGELOG.md and publishes it as a GitHub Release. Per AGENTS.md rule 3,
# every version bump — minor or patch — ships through this workflow.
on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
- "v[0-9]+.[0-9]+.[0-9]+-*" # prerelease tags (e.g. v0.1.0-rc.1)
permissions:
contents: write
jobs:
release:
name: Publish GitHub Release
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Resolve version and prerelease flag
id: meta
run: |
ref="${GITHUB_REF_NAME}"
version="${ref#v}"
prerelease="false"
case "$version" in
*-*) prerelease="true" ;;
esac
echo "version=$version" >> "$GITHUB_OUTPUT"
echo "prerelease=$prerelease" >> "$GITHUB_OUTPUT"
- name: Extract matching CHANGELOG section
id: notes
run: |
version="${{ steps.meta.outputs.version }}"
if [ ! -f CHANGELOG.md ]; then
echo "::error::CHANGELOG.md not found at repo root"
exit 1
fi
# String-index matching (portable across awk implementations) —
# finds lines starting with "## [<version>]" and prints until the
# next "## [" header.
awk -v header="## [$version]" '
index($0, header) == 1 { flag = 1; next }
flag && index($0, "## [") == 1 { exit }
flag { print }
' CHANGELOG.md > release_notes.md
if [ ! -s release_notes.md ]; then
echo "::error::No CHANGELOG section found for [$version]. Add a ## [$version] block before tagging."
exit 1
fi
echo "Extracted $(wc -l < release_notes.md) lines of release notes."
- name: Create GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release create "$GITHUB_REF_NAME" \
--title "$GITHUB_REF_NAME" \
--notes-file release_notes.md \
${{ steps.meta.outputs.prerelease == 'true' && '--prerelease' || '' }}