Ultracite on Auto-merge #3268
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: Ultracite on Auto-merge | |
| on: | |
| pull_request_target: | |
| types: [auto_merge_enabled] | |
| check_run: | |
| types: [completed] | |
| workflow_dispatch: {} | |
| permissions: | |
| contents: write | |
| pull-requests: read | |
| jobs: | |
| fix: | |
| name: Run Ultracite Fix | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| # Only run if: | |
| # 1. Triggered by auto_merge_enabled event, OR | |
| # 2. Triggered by check_run completion where the check is "Lint & Format", failed, and PR has auto-merge enabled | |
| # 3. Manually triggered via workflow_dispatch | |
| if: | | |
| github.event_name == 'workflow_dispatch' || | |
| github.event_name == 'pull_request_target' || | |
| (github.event_name == 'check_run' && | |
| github.event.check_run.name == 'Lint & Format' && | |
| github.event.check_run.conclusion == 'failure' && | |
| github.event.check_run.pull_requests != null && | |
| github.event.check_run.pull_requests[0] != null && | |
| github.event.check_run.pull_requests[0].auto_merge != null) | |
| steps: | |
| - name: Create access token for GitHub App | |
| uses: actions/create-github-app-token@v2 | |
| id: app-token | |
| with: | |
| app-id: ${{ vars.VERCEL_AI_SDK_GITHUB_APP_CLIENT_ID }} | |
| private-key: ${{ secrets.VERCEL_AI_SDK_GITHUB_APP_PRIVATE_KEY_PKCS8 }} | |
| - name: Get GitHub App User ID | |
| id: app-user-id | |
| run: echo "user-id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT" | |
| env: | |
| GH_TOKEN: ${{ steps.app-token.outputs.token }} | |
| - name: Configure git user for GitHub App | |
| run: | | |
| git config --global user.name '${{ steps.app-token.outputs.app-slug }}[bot]' | |
| git config --global user.email '${{ steps.app-user-id.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com' | |
| - name: Normalize pull_request.head | |
| id: pr-head | |
| run: | | |
| if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then | |
| echo "sha=${{ github.event.workflow_run.head.sha }}" >> "$GITHUB_OUTPUT" | |
| echo "ref=${{ github.event.workflow_run.head.ref }}" >> "$GITHUB_OUTPUT" | |
| echo "repo_full_name=${{ github.event.workflow_run.head.repo.full_name }}" >> "$GITHUB_OUTPUT" | |
| elif [[ "${{ github.event_name }}" == "pull_request_target" ]]; then | |
| echo "sha=${{ github.event.pull_request.head.sha }}" >> "$GITHUB_OUTPUT" | |
| echo "ref=${{ github.event.pull_request.head.ref }}" >> "$GITHUB_OUTPUT" | |
| echo "repo_full_name=${{ github.event.pull_request.head.repo.full_name }}" >> "$GITHUB_OUTPUT" | |
| else | |
| # check_run event | |
| echo "sha=${{ github.event.check_run.pull_requests[0].head.sha }}" >> "$GITHUB_OUTPUT" | |
| echo "ref=${{ github.event.check_run.pull_requests[0].head.ref }}" >> "$GITHUB_OUTPUT" | |
| echo "repo_full_name=${{ github.event.check_run.pull_requests[0].head.repo.full_name }}" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Checkout Repository | |
| uses: actions/checkout@v5 | |
| with: | |
| token: ${{ steps.app-token.outputs.token }} | |
| ref: ${{ steps.pr-head.outputs.sha }} | |
| repository: ${{ steps.pr-head.outputs.repo_full_name }} | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: 20 | |
| cache: pnpm | |
| - name: Install dependencies | |
| run: pnpm install | |
| - name: Run Ultracite fix | |
| run: pnpm fix | |
| - name: Check for changes | |
| id: git-check | |
| run: | | |
| git add -A | |
| if git diff --staged --quiet; then | |
| echo "has-changes=false" >> "$GITHUB_OUTPUT" | |
| echo "No changes detected" | |
| else | |
| echo "has-changes=true" >> "$GITHUB_OUTPUT" | |
| echo "Changes detected" | |
| fi | |
| - name: Commit and push changes | |
| if: steps.git-check.outputs.has-changes == 'true' | |
| run: | | |
| git commit -m "style: ultracite fix" | |
| git push origin HEAD:${{ steps.pr-head.outputs.ref }} |