Skip to content

Release v1.41.0: ten intent doors on a 63-command surface (improve an… #57

Release v1.41.0: ten intent doors on a 63-command surface (improve an…

Release v1.41.0: ten intent doors on a 63-command surface (improve an… #57

Workflow file for this run

name: release
on:
push:
tags:
- 'v*'
concurrency:
group: release-${{ github.ref }}
cancel-in-progress: false
permissions:
contents: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: "20"
- name: Verify tag matches manifest version
env:
TAG_NAME: ${{ github.ref_name }}
run: |
version="${TAG_NAME#v}"
manifest="$(node -p "require('./.claude-plugin/plugin.json').version")"
if [ "$version" != "$manifest" ]; then
echo "::error::Tag ${TAG_NAME} (${version}) does not match plugin.json (${manifest})"
exit 1
fi
if ! grep -q "^## \[${version}\]" CHANGELOG.md; then
echo "::error::CHANGELOG.md has no section for ${version}"
exit 1
fi
echo "Tag ${TAG_NAME} matches manifest ${manifest}; CHANGELOG entry present."
- name: Validate
run: node tests/validate.js
- name: Unit tests
run: node tests/unit.mjs && python3 tests/test_design_system.py
- name: Build reference index
run: node tools/build-index.mjs
- name: Extract changelog entry
env:
TAG_NAME: ${{ github.ref_name }}
run: |
version="${TAG_NAME#v}"
awk -v v="$version" '$0 ~ "^## \\["v"\\]" {f=1; next} f && /^## \[/ {exit} f' CHANGELOG.md > release_notes.txt
echo "--- release notes ---"
cat release_notes.txt
- name: Create GitHub Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAG_NAME: ${{ github.ref_name }}
run: |
gh release create "$TAG_NAME" \
--title "NullToHero $TAG_NAME" \
--notes-file release_notes.txt