Repository navigation
PR Reviewdog #3378
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: PR Reviewdog | |
| on: | |
| workflow_run: | |
| workflows: | |
| - "Test" | |
| types: | |
| - completed | |
| branches-ignore: | |
| - main | |
| permissions: | |
| # Download artifact from lint workflow. | |
| actions: read | |
| # Post inline review comments via reviewdog. | |
| pull-requests: write | |
| # Report commit status. | |
| statuses: write | |
| jobs: | |
| reviewdog: | |
| runs-on: ubuntu-latest | |
| env: | |
| STATUS_PATH: repos/${{ github.repository }}/statuses/${{ github.event.workflow_run.head_sha }} | |
| STATUS_CONTEXT: ${{ github.workflow }} | |
| STATUS_TARGET: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
| steps: | |
| - name: Mark status as pending | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| gh api "$STATUS_PATH" \ | |
| -f state=pending \ | |
| -f context="$STATUS_CONTEXT" \ | |
| -f description='Running' \ | |
| -f target_url="$STATUS_TARGET" | |
| - name: Identify PR | |
| id: identify-pr | |
| env: | |
| BASE_REPO: ${{ github.repository }} | |
| GITHUB_TOKEN: ${{ github.token }} | |
| HEAD_REPO: ${{ github.event.workflow_run.head_repository.full_name }} | |
| HEAD_SHA: ${{ github.event.workflow_run.head_sha }} | |
| run: | | |
| PR_NUMBER=$(gh api "repos/$HEAD_REPO/commits/$HEAD_SHA/pulls" \ | |
| --jq "[.[] | select(.base.repo.full_name == \"$BASE_REPO\" and .head.sha == \"$HEAD_SHA\") | .number] | first // empty") | |
| echo "number=$PR_NUMBER" >> $GITHUB_OUTPUT | |
| - name: Download artifact | |
| if: steps.identify-pr.outputs.number | |
| continue-on-error: true | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: lint-results | |
| path: lint-results | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| run-id: ${{ github.event.workflow_run.id }} | |
| - name: Check for artifact | |
| id: check | |
| if: steps.identify-pr.outputs.number && hashFiles('lint-results/') != '' | |
| run: echo "HAS_ARTIFACT=true" >> "$GITHUB_OUTPUT" | |
| - name: Checkout | |
| if: steps.identify-pr.outputs.number | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| path: browser-compat-data | |
| ref: main | |
| persist-credentials: false | |
| - name: Setup reviewdog | |
| if: steps.check.outputs.HAS_ARTIFACT == 'true' | |
| uses: reviewdog/action-setup@d8a7baabd7f3e8544ee4dbde3ee41d0011c3a93f # v1.5.0 | |
| with: | |
| reviewdog_version: v0.21.0 | |
| - name: Add PR review with suggested changes using `git diff` output | |
| if: steps.check.outputs.HAS_ARTIFACT == 'true' && hashFiles('lint-results/lint.diff') != '' | |
| working-directory: browser-compat-data | |
| env: | |
| CI_PULL_REQUEST: ${{ steps.identify-pr.outputs.number }} | |
| CI_COMMIT: ${{ github.event.workflow_run.head_sha }} | |
| CI_REPO_OWNER: ${{ github.repository_owner }} | |
| CI_REPO_NAME: ${{ github.event.repository.name }} | |
| CI_BRANCH: ${{ github.event.workflow_run.head_branch }} | |
| REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| env -u GITHUB_ACTIONS reviewdog \ | |
| -guess \ | |
| -name="bcd-linter" \ | |
| -f=diff \ | |
| -f.diff.strip=1 \ | |
| -filter-mode=diff_context \ | |
| -reporter=github-pr-review < ../lint-results/lint.diff | |
| - name: Post or update PR comment with context | |
| if: steps.check.outputs.HAS_ARTIFACT == 'true' && hashFiles('lint-results/lint.diff') != '' | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| REPO: ${{ github.repository }} | |
| PR_NUMBER: ${{ steps.identify-pr.outputs.number }} | |
| TEST_RUN_ID: ${{ github.event.workflow_run.id }} | |
| TEST_RUN_URL: ${{ github.event.workflow_run.html_url }} | |
| run: | | |
| LINT_JOB_URL=$(gh api --paginate "repos/$REPO/actions/runs/$TEST_RUN_ID/jobs" \ | |
| --jq '.jobs[] | select(.name == "lint") | .html_url' | head -1) | |
| LINT_JOB_URL=${LINT_JOB_URL:-$TEST_RUN_URL} | |
| BODY="<!-- bcd-reviewdog --> | |
| The [lint check]($LINT_JOB_URL) found auto-fixable issues. Apply suggested changes (attributed to \`bcd-linter\`), or to fix all at once, run \`npm run lint:fix\` locally. | |
| See also: [Automated lint suggestions on pull requests](https://github.com/$REPO/blob/main/docs/testing.md#automated-lint-suggestions-on-pull-requests)" | |
| COMMENT_ID=$(gh api --paginate "repos/$REPO/issues/$PR_NUMBER/comments" \ | |
| --jq '.[] | select(.user.login == "github-actions[bot]" and (.body | startswith("<!-- bcd-reviewdog -->"))) | .id' | head -1) | |
| if [ -n "$COMMENT_ID" ]; then | |
| gh api -X PATCH "repos/$REPO/issues/comments/$COMMENT_ID" -f body="$BODY" | |
| else | |
| gh api "repos/$REPO/issues/$PR_NUMBER/comments" -f body="$BODY" | |
| fi | |
| - name: Mark status as success | |
| if: success() | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| gh api "$STATUS_PATH" \ | |
| -f state=success \ | |
| -f context="$STATUS_CONTEXT" \ | |
| -f description='Successful' \ | |
| -f target_url="$STATUS_TARGET" | |
| - name: Mark status as failure | |
| if: failure() | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| gh api "$STATUS_PATH" \ | |
| -f state=failure \ | |
| -f context="$STATUS_CONTEXT" \ | |
| -f description='Failing' \ | |
| -f target_url="$STATUS_TARGET" |