name: ESLint Code Quality Checks on: pull_request: branches: - main - dev - release/* jobs: eslint_checks: name: Run ESLint Linting runs-on: ubuntu-latest permissions: contents: read security-events: write actions: read steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Node.js 20.x uses: actions/setup-node@v4 with: node-version: 20 cache: npm - name: Install dependencies run: npm ci # Use a paths filter (v3) to detect changes in JavaScript/TypeScript files, # but only consider files that are added or modified (ignoring deleted files). - name: Filter changed files for ESLint id: file_filter uses: dorny/paths-filter@v3 with: filters: | eslint: - added|modified: '**/*.js' - added|modified: '**/*.jsx' - added|modified: '**/*.ts' - added|modified: '**/*.tsx' # Run ESLint only if relevant files have been added or modified. - name: Run ESLint on changed files if: steps.file_filter.outputs.eslint == 'true' env: SARIF_ESLINT_IGNORE_SUPPRESSED: "true" run: | # Extract the base commit SHA from the pull_request event payload. BASE_SHA=$(jq --raw-output .pull_request.base.sha "$GITHUB_EVENT_PATH") echo "Base commit SHA: $BASE_SHA" # List files changed between the base commit and current HEAD, # but only include files that are not deleted (ACMRTUXB: A, C, M, R, T, U, X, B). CHANGED_FILES=$(git diff --name-only --diff-filter=ACMRTUXB "$BASE_SHA" HEAD | grep -E '\.(js|jsx|ts|tsx)$') echo "Files to lint:" echo "$CHANGED_FILES" # Run ESLint on the changed files. npx eslint --no-error-on-unmatched-pattern \ --config eslint.config.mjs \ --format @microsoft/eslint-formatter-sarif \ --output-file eslint-results.sarif $CHANGED_FILES || true # If no JavaScript/TypeScript files were added or modified, # create a valid (non-empty) SARIF file containing one run. - name: Create empty SARIF results file if: steps.file_filter.outputs.eslint != 'true' run: | cat << 'EOF' > eslint-results.sarif { "version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [ { "tool": { "driver": { "name": "ESLint", "informationUri": "https://eslint.org", "version": "0.0.0", "rules": [] } }, "results": [] } ] } EOF - name: Upload analysis results to GitHub uses: github/codeql-action/upload-sarif@v3 with: sarif_file: eslint-results.sarif wait-for-processing: true