From 28525db70af46475a8ea56f11aef30196080c54d Mon Sep 17 00:00:00 2001 From: jmnote Date: Sun, 6 Sep 2026 15:24:48 +0900 Subject: [PATCH] Add release workflow: auto-create a GitHub Release on version bump MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On every push to main, compares extension.json's version field against its value before the push (github.event.before, not just HEAD^ — a push can carry more than one commit) and, if it changed, tags and creates a GitHub Release (vX.Y.Z, with auto-generated notes from merged PRs) for that version, targeted at the triggering commit so a race with another push landing on main first can't point the tag at the wrong commit. Automates what has so far been done by hand after each version bump (matches the existing v0.9.0/v0.10.0/v0.11.0 releases: same tag naming, same --generate-notes-style body). Guards against re-creating a release that already exists (idempotent on workflow re-runs or a version merged more than once). Co-Authored-By: Claude Sonnet 5 --- .github/workflows/release.yml | 46 +++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..b8f14530 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,46 @@ +name: release + +on: + push: + branches: [main] + +permissions: + contents: write + +jobs: + release: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check whether extension.json's version changed + id: version + env: + BEFORE: ${{ github.event.before }} + run: | + current=$(jq -r .version extension.json) + previous="" + if git cat-file -e "$BEFORE" 2>/dev/null; then + previous=$(git show "$BEFORE:extension.json" 2>/dev/null | jq -r .version 2>/dev/null || echo "") + fi + echo "current=$current" >> "$GITHUB_OUTPUT" + if [ "$current" != "$previous" ]; then + echo "changed=true" >> "$GITHUB_OUTPUT" + else + echo "changed=false" >> "$GITHUB_OUTPUT" + fi + + - name: Create GitHub release + if: steps.version.outputs.changed == 'true' + env: + GH_TOKEN: ${{ github.token }} + TAG: v${{ steps.version.outputs.current }} + run: | + if gh release view "$TAG" >/dev/null 2>&1; then + echo "Release $TAG already exists, skipping." + exit 0 + fi + gh release create "$TAG" --target "$GITHUB_SHA" --title "$TAG" --generate-notes