diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..1b24391 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,67 @@ +name: Publish aux Release + +on: + push: + branches: + - 'master' + workflow_dispatch: + +permissions: + contents: write + +jobs: + release: + if: ${{ github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'release v') }} + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Resolve addon version + id: version + shell: bash + run: | + VERSION=$(sed -n 's/^## Version: //p' aux-addon.toc | head -n 1) + if [ -z "$VERSION" ]; then + echo "Missing ## Version in aux-addon.toc" >&2 + exit 1 + fi + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + echo "tag=v$VERSION" >> "$GITHUB_OUTPUT" + + - name: Point release tag at current master + env: + GH_TOKEN: ${{ github.token }} + TAG: ${{ steps.version.outputs.tag }} + shell: bash + run: | + if gh api "repos/${GITHUB_REPOSITORY}/git/ref/tags/${TAG}" >/dev/null 2>&1; then + gh api -X PATCH "repos/${GITHUB_REPOSITORY}/git/refs/tags/${TAG}" \ + -f sha="$GITHUB_SHA" -F force=true >/dev/null + else + gh api -X POST "repos/${GITHUB_REPOSITORY}/git/refs" \ + -f ref="refs/tags/${TAG}" -f sha="$GITHUB_SHA" >/dev/null + fi + + - name: Update existing GitHub release target + env: + GH_TOKEN: ${{ github.token }} + TAG: ${{ steps.version.outputs.tag }} + shell: bash + run: | + RELEASE_ID=$(gh api "repos/${GITHUB_REPOSITORY}/releases/tags/${TAG}" --jq '.id' 2>/dev/null || true) + if [ -n "$RELEASE_ID" ]; then + gh api -X PATCH "repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}" \ + -f target_commitish="$GITHUB_SHA" \ + -f name="aux ClassicAPI ${TAG}" \ + -F make_latest=true >/dev/null + else + gh api -X POST "repos/${GITHUB_REPOSITORY}/releases" \ + -f tag_name="$TAG" \ + -f target_commitish="$GITHUB_SHA" \ + -f name="aux ClassicAPI ${TAG}" \ + -F draft=false \ + -F prerelease=false \ + -F make_latest=true >/dev/null + fi