name: Release on: push: tags: ['v*'] permissions: contents: write jobs: release: name: Create Release runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 with: fetch-depth: 0 - name: Validate version tag run: | if ! [[ "${REF_NAME}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then echo "Invalid version tag format. Expected vX.Y.Z" exit 1 fi env: REF_NAME: ${{ github.ref_name }} - name: Verify plugin.json version matches tag env: TAG_NAME: ${{ github.ref_name }} run: | TAG_VERSION="${TAG_NAME#v}" PLUGIN_VERSION=$(grep -oE '"version": *"[^"]*"' .claude-plugin/plugin.json | grep -oE '[0-9]+\.[0-9]+\.[0-9]+') if [ "$TAG_VERSION" != "$PLUGIN_VERSION" ]; then echo "::error::Tag version ($TAG_VERSION) does not match plugin.json version ($PLUGIN_VERSION)" echo "Run: ./scripts/release.sh $TAG_VERSION" exit 1 fi - name: Generate release highlights id: highlights env: TAG_NAME: ${{ github.ref_name }} run: | TAG_VERSION="${TAG_NAME#v}" cat > release_body.md <