From 4e4b06095eee8a0377c2fcd0bd7c448e6258335b Mon Sep 17 00:00:00 2001 From: Ryan Albrecht Date: Mon, 1 Jun 2026 20:09:59 -0700 Subject: [PATCH 1/3] ci: Run ESLint only on changed files in a PR --- .github/workflows/frontend.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml index 3d17cb526c8751..032eb1b4de5746 100644 --- a/.github/workflows/frontend.yml +++ b/.github/workflows/frontend.yml @@ -29,6 +29,7 @@ jobs: typecheckable_rules_changed: ${{ steps.changes.outputs.typecheckable_rules_changed }} mdx_typecheckable: ${{ steps.changes.outputs.mdx_typecheckable }} frontend_all: ${{ steps.changes.outputs.frontend_all }} + frontend_all_files: ${{ steps.changes.outputs.frontend_all_files }} merge_base: ${{ steps.merge_base.outputs.merge_base }} merge_base_strategy: ${{ steps.merge_base.outputs.merge_base_strategy }} steps: @@ -126,10 +127,16 @@ jobs: echo "::remove-matcher owner=masters::" echo "::add-matcher::.github/eslint-stylish.json" - - name: eslint + - name: eslint (all) + if: github.event_name != 'pull_request' id: eslint run: pnpm run lint:js + - name: eslint (changed) + if: github.event_name == 'pull_request' + id: eslint-changed + run: pnpm run lint:js ${{ needs.files-changed.outputs.frontend_all_files }} + knip: if: needs.files-changed.outputs.frontend_all == 'true' needs: files-changed From 5da7ab4a614b7634ceffc7cf75a9f4ebcbc064a1 Mon Sep 17 00:00:00 2001 From: Ryan Albrecht Date: Tue, 2 Jun 2026 08:32:04 -0700 Subject: [PATCH 2/3] Single step, consider if the lint rules changed or not --- .github/file-filters.yml | 15 +++++++++++++++ .github/workflows/frontend.yml | 18 ++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/.github/file-filters.yml b/.github/file-filters.yml index 8285f01b1d0f99..497ae767c027a2 100644 --- a/.github/file-filters.yml +++ b/.github/file-filters.yml @@ -39,6 +39,21 @@ mdx_typecheckable: &mdx_typecheckable - added|deleted|modified: 'static/app/components/core/**/*.{ts,tsx}' - added|deleted|modified: 'static/**/__stories__/**/*.{ts,tsx}' +lintable_modified: &lintable_modified + - *sentry_frontend_workflow_file + - *sentry_frontend_snapshots_workflow_file + - added|modified: '**/*.{ts,tsx,js,jsx,mjs}' + - added|modified: 'static/**/*.{less,json,yml,md,mdx}' + - added|modified: '{vercel,tsconfig,biome,package}.json' + +lintable_rules_changed: &lintable_rules_changed + - *sentry_frontend_workflow_file + - *sentry_frontend_snapshots_workflow_file + - added|modified: 'package.json' + - added|modified: '.github/file-filters.yml' + - added|modified: '*.config.ts' + - added|modified: 'static/eslint/**/*.{ts,tsx,js,jsx,mjs}' + # Trigger to apply the 'Scope: Frontend' label to PRs frontend_all: &frontend_all - *sentry_frontend_workflow_file diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml index 032eb1b4de5746..e5c26dd94639a0 100644 --- a/.github/workflows/frontend.yml +++ b/.github/workflows/frontend.yml @@ -28,6 +28,9 @@ jobs: testable_rules_changed: ${{ steps.changes.outputs.testable_rules_changed }} typecheckable_rules_changed: ${{ steps.changes.outputs.typecheckable_rules_changed }} mdx_typecheckable: ${{ steps.changes.outputs.mdx_typecheckable }} + lintable_modified: ${{ steps.changes.outputs.lintable_modified }} + lintable_modified_files: ${{ steps.changes.outputs.lintable_modified_files }} + lintable_rules_changed: ${{ steps.changes.outputs.lintable_rules_changed }} frontend_all: ${{ steps.changes.outputs.frontend_all }} frontend_all_files: ${{ steps.changes.outputs.frontend_all_files }} merge_base: ${{ steps.merge_base.outputs.merge_base }} @@ -127,15 +130,14 @@ jobs: echo "::remove-matcher owner=masters::" echo "::add-matcher::.github/eslint-stylish.json" - - name: eslint (all) - if: github.event_name != 'pull_request' + - name: eslint id: eslint - run: pnpm run lint:js - - - name: eslint (changed) - if: github.event_name == 'pull_request' - id: eslint-changed - run: pnpm run lint:js ${{ needs.files-changed.outputs.frontend_all_files }} + run: | + if [ "$GITHUB_EVENT_NAME" == "pull_request" && "${{ needs.files-changed.outputs.lintable_rules_changed }}" == "false" ]; then + pnpm run lint:js ${{ needs.files-changed.outputs.lintable_modified_files }} + else + pnpm run lint:js + fi knip: if: needs.files-changed.outputs.frontend_all == 'true' From 0c94149faf53f2bc898c5aadd4af4918551e1758 Mon Sep 17 00:00:00 2001 From: Ryan Albrecht Date: Tue, 2 Jun 2026 08:44:31 -0700 Subject: [PATCH 3/3] pass values through env vars --- .github/workflows/frontend.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml index e5c26dd94639a0..80c6310c737e89 100644 --- a/.github/workflows/frontend.yml +++ b/.github/workflows/frontend.yml @@ -132,9 +132,12 @@ jobs: - name: eslint id: eslint + env: + LINTABLE_RULES_CHANGED: ${{ needs.files-changed.outputs.lintable_rules_changed }} + LINTABLE_MODIFIED_FILES: ${{ needs.files-changed.outputs.lintable_modified_files }} run: | - if [ "$GITHUB_EVENT_NAME" == "pull_request" && "${{ needs.files-changed.outputs.lintable_rules_changed }}" == "false" ]; then - pnpm run lint:js ${{ needs.files-changed.outputs.lintable_modified_files }} + if [[ "$GITHUB_EVENT_NAME" == "pull_request" && "$LINTABLE_RULES_CHANGED" == "false" ]]; then + pnpm run lint:js $LINTABLE_MODIFIED_FILES else pnpm run lint:js fi