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