Skip to content

Skip duplicate igdb publishes #30

Skip duplicate igdb publishes

Skip duplicate igdb publishes #30

Workflow file for this run

name: Release
on:
push:
branches:
- main
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
id-token: write
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Setup Node
uses: actions/setup-node@v6
with:
node-version-file: package.json
registry-url: https://registry.npmjs.org
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Typecheck
run: bun run typecheck
- name: Run tests
run: bun run test
- name: Build
run: bun run build
- name: Resolve release tag
id: release
run: |
NAME="$(node -p "require('./package.json').name")"
VERSION="$(node -p "require('./package.json').version")"
echo "name=${NAME}" >> "$GITHUB_OUTPUT"
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
echo "tag=${NAME}@${VERSION}" >> "$GITHUB_OUTPUT"
- name: Generate and verify release notes
env:
GH_TOKEN: ${{ github.token }}
TAG: ${{ steps.release.outputs.tag }}
run: |
gh api "repos/${GITHUB_REPOSITORY}/releases/generate-notes" \
-f tag_name="$TAG" \
-f target_commitish="$GITHUB_SHA" \
--jq '.body // ""' > release-notes.md
if ! grep -q '[^[:space:]]' release-notes.md; then
echo "GitHub generated empty release notes for ${TAG}" >&2
exit 1
fi
- name: Check GitHub release state
id: release_state
env:
GH_TOKEN: ${{ github.token }}
PACKAGE_NAME: ${{ steps.release.outputs.name }}
PACKAGE_VERSION: ${{ steps.release.outputs.version }}
TAG: ${{ steps.release.outputs.tag }}
run: |
if gh release view "$TAG" >/dev/null 2>&1; then
echo "exists=true" >> "$GITHUB_OUTPUT"
else
echo "exists=false" >> "$GITHUB_OUTPUT"
fi
if npm view "${PACKAGE_NAME}@${PACKAGE_VERSION}" version >/dev/null 2>&1; then
echo "package_published=true" >> "$GITHUB_OUTPUT"
else
echo "package_published=false" >> "$GITHUB_OUTPUT"
fi
HAS_CHANGESETS=false
for changeset in .changeset/*.md; do
if [ -e "$changeset" ]; then
HAS_CHANGESETS=true
break
fi
done
echo "has_changesets=${HAS_CHANGESETS}" >> "$GITHUB_OUTPUT"
- name: Create version PR or publish
id: changesets
if: steps.release_state.outputs.package_published != 'true' || steps.release_state.outputs.has_changesets == 'true'
uses: changesets/action@v1
with:
version: bun run changeset version
publish: npm publish --access public --provenance
createGithubReleases: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create GitHub release
if: always() && steps.release_state.outputs.exists != 'true' && (steps.changesets.outcome == 'success' || steps.changesets.outcome == 'skipped')
env:
GH_TOKEN: ${{ github.token }}
TAG: ${{ steps.release.outputs.tag }}
run: |
if gh release view "$TAG" >/dev/null 2>&1; then
gh release edit "$TAG" --title "$TAG" --notes-file release-notes.md
else
gh release create "$TAG" --verify-tag --title "$TAG" --notes-file release-notes.md
fi