Merge pull request #205 from ranxianglei/2026-09-06_quote-fidelity-pr… #126
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| push: | |
| branches: [master] | |
| jobs: | |
| release: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| id-token: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| registry-url: https://registry.npmjs.org | |
| - name: Check if release branch merge | |
| id: check | |
| run: | | |
| COMMIT_MSG=$(git log -1 --pretty=%B) | |
| MERGE_BRANCH=$(echo "$COMMIT_MSG" | sed -n 's/^Merge pull request #[0-9]* from [^/]*\/\(.*\)$/\1/p' || echo "") | |
| if echo "$MERGE_BRANCH" | grep -qE '^[0-9]{4}-[0-9]{2}-[0-9]{2}_release-v'; then | |
| echo "is_release=true" >> $GITHUB_OUTPUT | |
| elif echo "$COMMIT_MSG" | grep -qE '^[0-9]{4}-[0-9]{2}-[0-9]{2}_release-v'; then | |
| echo "is_release=true" >> $GITHUB_OUTPUT | |
| else | |
| echo "is_release=false" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Setup | |
| if: steps.check.outputs.is_release == 'true' | |
| run: npm ci | |
| - name: Build and test | |
| if: steps.check.outputs.is_release == 'true' | |
| run: | | |
| npm run typecheck | |
| npm test | |
| npm run build | |
| - name: Read version | |
| if: steps.check.outputs.is_release == 'true' | |
| id: version | |
| run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT | |
| - name: Check if prerelease | |
| if: steps.check.outputs.is_release == 'true' | |
| id: pre | |
| run: | | |
| if echo "${{ steps.version.outputs.version }}" | grep -q '-'; then | |
| echo "tag=dev" >> $GITHUB_OUTPUT | |
| echo "prerelease=true" >> $GITHUB_OUTPUT | |
| else | |
| echo "tag=latest" >> $GITHUB_OUTPUT | |
| echo "prerelease=false" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Create tag | |
| if: steps.check.outputs.is_release == 'true' | |
| run: | | |
| git tag "v${{ steps.version.outputs.version }}" || true | |
| git push origin "v${{ steps.version.outputs.version }}" || true | |
| - name: Publish | |
| if: steps.check.outputs.is_release == 'true' | |
| run: npm publish --tag ${{ steps.pre.outputs.tag }} --access public | |
| env: | |
| NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
| - name: Create GitHub Release | |
| if: steps.check.outputs.is_release == 'true' | |
| uses: actions/create-release@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| tag_name: v${{ steps.version.outputs.version }} | |
| release_name: v${{ steps.version.outputs.version }} | |
| prerelease: ${{ steps.pre.outputs.prerelease }} | |
| body: | | |
| ## Release v${{ steps.version.outputs.version }} | |
| See [commits since last tag](https://github.com/${{ github.repository }}/compare/$(git describe --tags --abbrev=0 v${{ steps.version.outputs.version }}^ 2>/dev/null || echo HEAD~10)...v${{ steps.version.outputs.version }}) |