From c1a40e75bfab46368da8786bf60912fadf5db246 Mon Sep 17 00:00:00 2001 From: Claas Augner Date: Fri, 3 Apr 2026 15:20:31 +0200 Subject: [PATCH] ci(workflows): suggest lint fixes via reviewdog --- .github/workflows/pr-reviewdog.yml | 116 +++++++++++++++++++++++++++++ .github/workflows/test.yml | 33 +++++++- 2 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/pr-reviewdog.yml diff --git a/.github/workflows/pr-reviewdog.yml b/.github/workflows/pr-reviewdog.yml new file mode 100644 index 00000000000000..adf1fd73fb06e6 --- /dev/null +++ b/.github/workflows/pr-reviewdog.yml @@ -0,0 +1,116 @@ +name: PR Reviewdog + +on: + workflow_run: + workflows: + - "Test" + types: + - completed + +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\") | .number") + 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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + 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: latest + + - 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: 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" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3d8302f3ae940c..62d19bc5507532 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -55,7 +55,38 @@ jobs: - run: npm ci - - run: npm run lint -- --fail-on-warnings + - name: Lint + id: lint + run: | + LINT_FAILED=false + npm run lint -- --fail-on-warnings || LINT_FAILED=true + echo "failed=$LINT_FAILED" >> "$GITHUB_OUTPUT" + + - name: Fix lint issues + id: lint-fix + if: steps.lint.outputs.failed == 'true' + run: | + npm run lint:fix + if [[ -n $(git diff) ]]; then + echo "files_modified=true" >> "$GITHUB_OUTPUT" + fi + + - name: Collect artifact files + if: steps.lint-fix.outputs.files_modified == 'true' + run: | + mkdir -p lint-results + git diff > lint-results/lint.diff + + - name: Upload artifact + if: steps.lint-fix.outputs.files_modified == 'true' + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: lint-results + path: lint-results + + - name: Fail if lint failed + if: steps.lint.outputs.failed == 'true' + run: exit 1 test: runs-on: ubuntu-latest