Skip to content

chore: release v3.1.0 (#46) #25

chore: release v3.1.0 (#46)

chore: release v3.1.0 (#46) #25

Workflow file for this run

name: Publish Package
on:
push:
branches:
- main
- 'v[0-9]*'
permissions: {}
jobs:
# Keep detection outside the Release environment. Environment approval is job-level,
# so the publish job is only created after a release commit is detected.
detect:
if: github.repository == 'vitest-community/vitest-browser-svelte'
name: Detect release commit
runs-on: ubuntu-latest
outputs:
release: ${{ steps.detect.outputs.release }}
version: ${{ steps.detect.outputs.version }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
persist-credentials: false
- name: Detect release
id: detect
run: |
SUBJECT="$(git log -1 --format=%s)"
VERSION="$(jq -r .version package.json)"
EXPECTED="chore: release v$VERSION"
# use prefix match since commit has PR number trailer.
if [[ "$SUBJECT" == "$EXPECTED"* ]]; then
echo "release=true" >> "$GITHUB_OUTPUT"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "Detected release v$VERSION"
else
echo "release=false" >> "$GITHUB_OUTPUT"
echo "No release commit found at HEAD"
fi
publish:
if: needs.detect.outputs.release == 'true'
needs: detect
name: Publish vitest-browser-svelte
runs-on: ubuntu-latest
permissions:
contents: write # trusted publishing and changelog requirement
id-token: write # trusted publishing requirement
environment: Release
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
persist-credentials: false
- name: Check release tag
env:
VERSION: ${{ needs.detect.outputs.version }}
run: |
TAG="v$VERSION"
if git rev-parse --verify --quiet "refs/tags/$TAG"; then
echo "Tag $TAG already exists"
exit 1
fi
- name: Install pnpm
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
- name: Set node version to 24
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 24
registry-url: https://registry.npmjs.org/
# disable cache to avoid cache poisoning
package-manager-cache: false
- name: Install
run: pnpm install --frozen-lockfile --prefer-offline
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: '1'
- name: Build
run: pnpm run build
- name: Stage publish to npm (dry run)
env:
VERSION: ${{ needs.detect.outputs.version }}
PUBLISH_BRANCH: ${{ github.ref_name }}
PUBLISH_DRY_RUN: 'true'
run: pnpm run publish-ci "$VERSION"
- name: Stage publish to npm
env:
VERSION: ${{ needs.detect.outputs.version }}
PUBLISH_BRANCH: ${{ github.ref_name }}
run: pnpm run publish-ci "$VERSION"
- id: generate-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
with:
client-id: ${{ secrets.RELEASE_GITHUB_APP_ID }}
private-key: ${{ secrets.RELEASE_GITHUB_APP_PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
repositories: ${{ github.event.repository.name }}
permission-contents: write
- name: Push release tag
env:
VERSION: ${{ needs.detect.outputs.version }}
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
run: |
TAG="v$VERSION"
git config user.name "vitest-community-release-bot[bot]"
git config user.email "297853836+vitest-community-release-bot[bot]@users.noreply.github.com"
git tag "$TAG" "$GITHUB_SHA"
git push "https://x-access-token:$GH_TOKEN@github.com/$GITHUB_REPOSITORY.git" "$TAG"
- name: Generate Changelog
env:
VERSION: ${{ needs.detect.outputs.version }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
TAG="v$VERSION"
npx changelogithub --to "$TAG" --name "$TAG"