|
5 | 5 | branches: [main, master] |
6 | 6 | pull_request: |
7 | 7 | branches: [main, master] |
8 | | - schedule: |
9 | | - - cron: "23 7 * * 1" |
10 | 8 |
|
11 | 9 | permissions: |
12 | 10 | contents: read |
13 | 11 | security-events: write |
14 | 12 | actions: read |
15 | 13 |
|
16 | 14 | jobs: |
| 15 | + detect: |
| 16 | + name: Detect languages |
| 17 | + runs-on: ubuntu-latest |
| 18 | + outputs: |
| 19 | + languages: ${{ steps.set.outputs.languages }} |
| 20 | + has_any: ${{ steps.set.outputs.has_any }} |
| 21 | + steps: |
| 22 | + - name: Checkout |
| 23 | + uses: actions/checkout@v4 |
| 24 | + |
| 25 | + - name: Detect supported languages |
| 26 | + id: set |
| 27 | + shell: bash |
| 28 | + run: | |
| 29 | + set -eu |
| 30 | + langs=() |
| 31 | + # JS/TS detection: any .js .jsx .ts .tsx, OR package.json, OR tsconfig.json |
| 32 | + if find . -type d \( -name node_modules -o -name .git -o -name dist -o -name build \) -prune -o \ |
| 33 | + -type f \( -name '*.js' -o -name '*.jsx' -o -name '*.ts' -o -name '*.tsx' \ |
| 34 | + -o -name 'package.json' -o -name 'tsconfig.json' \) -print -quit \ |
| 35 | + | grep -q .; then |
| 36 | + langs+=("javascript-typescript") |
| 37 | + fi |
| 38 | + # Python detection: any .py, OR pyproject.toml, OR setup.py, OR requirements*.txt |
| 39 | + if find . -type d \( -name node_modules -o -name .git -o -name venv -o -name .venv -o -name dist -o -name build \) -prune -o \ |
| 40 | + -type f \( -name '*.py' -o -name 'pyproject.toml' -o -name 'setup.py' \ |
| 41 | + -o -name 'requirements.txt' -o -name 'requirements-*.txt' \) -print -quit \ |
| 42 | + | grep -q .; then |
| 43 | + langs+=("python") |
| 44 | + fi |
| 45 | + if [ ${#langs[@]} -eq 0 ]; then |
| 46 | + echo "languages=[]" >> "$GITHUB_OUTPUT" |
| 47 | + echo "has_any=false" >> "$GITHUB_OUTPUT" |
| 48 | + echo "No supported languages detected; skipping analysis." |
| 49 | + else |
| 50 | + json=$(printf '%s\n' "${langs[@]}" | jq -R . | jq -sc .) |
| 51 | + echo "languages=$json" >> "$GITHUB_OUTPUT" |
| 52 | + echo "has_any=true" >> "$GITHUB_OUTPUT" |
| 53 | + echo "Detected: $json" |
| 54 | + fi |
| 55 | +
|
17 | 56 | analyze: |
18 | 57 | name: Analyze (${{ matrix.language }}) |
| 58 | + needs: detect |
| 59 | + if: needs.detect.outputs.has_any == 'true' |
19 | 60 | runs-on: ubuntu-latest |
20 | 61 | timeout-minutes: 360 |
21 | 62 | strategy: |
22 | 63 | fail-fast: false |
23 | 64 | matrix: |
24 | | - language: [javascript-typescript, python] |
| 65 | + language: ${{ fromJson(needs.detect.outputs.languages) }} |
25 | 66 |
|
26 | 67 | steps: |
27 | 68 | - name: Checkout |
|
35 | 76 |
|
36 | 77 | - name: Autobuild |
37 | 78 | uses: github/codeql-action/autobuild@v3 |
| 79 | + continue-on-error: true |
38 | 80 |
|
39 | 81 | - name: Perform CodeQL Analysis |
40 | 82 | uses: github/codeql-action/analyze@v3 |
|
0 commit comments