Files
community_bridge/.github/workflows/release.yml
T
MrNewbandClaude Fable 5 94620315c6 ci: auto-release on main when the fxmanifest version bumps
Pushes to main that change fxmanifest.lua compare the version against
the previous commit and publish a release only when it actually
changed, packaging the drag-drop community_bridge.zip with generated
notes. Tags and titles stay bare (0.13.4) to match existing releases,
and an existing-tag guard prevents re-announcing a shipped version.

Uses RELEASE_PAT when configured so the release-published Discord
webhook still fires; GITHUB_TOKEN-created releases do not trigger it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-01 01:26:03 -04:00

117 lines
3.8 KiB
YAML

name: Release
# Publishes a release when a push to main bumps the fxmanifest.lua version.
# Tags/titles are bare versions (0.13.4) to match this repo's existing releases.
#
# The "Update Webhook Notification" workflow listens for release:published, and
# GitHub suppresses workflow triggers for events raised by GITHUB_TOKEN. Add a
# classic PAT with repo scope as the RELEASE_PAT secret to keep the Discord
# announcement firing; without it the release still publishes, silently.
on:
push:
branches:
- main
paths:
- 'fxmanifest.lua'
workflow_dispatch:
permissions:
contents: write
jobs:
check-version:
runs-on: ubuntu-latest
outputs:
should_release: ${{ steps.meta.outputs.should_release }}
version: ${{ steps.meta.outputs.version }}
steps:
- name: Checkout
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Detect fxmanifest version change
id: meta
run: |
CURRENT=$(grep -E '^version ' fxmanifest.lua | sed -E "s/^version[[:space:]]+['\"]([^'\"]+)['\"].*/\1/")
echo "version=$CURRENT" >> "$GITHUB_OUTPUT"
if [ -z "$CURRENT" ]; then
echo "::error::No version found in fxmanifest.lua"
exit 1
fi
# Never re-release an existing version: a duplicate release would
# announce itself to Discord as if it were new.
if git rev-parse "refs/tags/$CURRENT" >/dev/null 2>&1; then
echo "should_release=false" >> "$GITHUB_OUTPUT"
echo "Tag $CURRENT already exists; skipping release."
exit 0
fi
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "should_release=true" >> "$GITHUB_OUTPUT"
echo "Manual run; releasing version $CURRENT"
exit 0
fi
BEFORE="${{ github.event.before }}"
if [ "$BEFORE" = "0000000000000000000000000000000000000000" ] || [ -z "$BEFORE" ]; then
echo "should_release=true" >> "$GITHUB_OUTPUT"
echo "Initial or force push; releasing version $CURRENT"
exit 0
fi
PREVIOUS=$(git show "$BEFORE:fxmanifest.lua" 2>/dev/null | grep -E '^version ' | sed -E "s/^version[[:space:]]+['\"]([^'\"]+)['\"].*/\1/" || true)
if [ "$CURRENT" = "$PREVIOUS" ]; then
echo "should_release=false" >> "$GITHUB_OUTPUT"
echo "fxmanifest changed but version is still $CURRENT; skipping release."
else
echo "should_release=true" >> "$GITHUB_OUTPUT"
echo "Version updated: ${PREVIOUS:-unknown} -> $CURRENT"
fi
release:
runs-on: ubuntu-latest
needs: check-version
if: needs.check-version.outputs.should_release == 'true'
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Prepare release package
run: |
RELEASE_ROOT="release/community_bridge"
mkdir -p "$RELEASE_ROOT"
rsync -a \
--exclude '.git' \
--exclude '.gitattributes' \
--exclude '.gitignore' \
--exclude '.github' \
--exclude 'release' \
--exclude 'node_modules' \
./ "$RELEASE_ROOT/"
- name: Create zip archive
run: |
cd release
zip -r "../community_bridge.zip" community_bridge
- name: Upload workflow artifact
uses: actions/upload-artifact@v5
with:
name: community_bridge
path: community_bridge.zip
- name: Publish GitHub Release
uses: softprops/action-gh-release@v2
with:
token: ${{ secrets.RELEASE_PAT || github.token }}
tag_name: ${{ needs.check-version.outputs.version }}
name: ${{ needs.check-version.outputs.version }}
files: community_bridge.zip
generate_release_notes: true