2727 - cron : ' 25 10 * * 6'
2828
2929jobs :
30+ detect-changes :
31+ runs-on : ubuntu-latest
32+ permissions :
33+ contents : read
34+ pull-requests : read
35+ outputs :
36+ matrix : ${{ steps.set-matrix.outputs.matrix }}
37+ steps :
38+ - name : Checkout repository
39+ uses : actions/checkout@v4
40+ - uses : dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d
41+ id : filter
42+ with :
43+ filters : |
44+ actions:
45+ - '.github/**'
46+ go:
47+ - '**/*.go'
48+ - '**/go.mod'
49+ - '**/go.sum'
50+ java-kotlin:
51+ - '**/*.java'
52+ - '**/*.kt'
53+ - '**/*.gradle'
54+ - '**/gradle.properties'
55+ - '**/gradlew'
56+ - '**/gradlew.bat'
57+ javascript-typescript:
58+ - '**/*.js'
59+ - '**/*.ts'
60+ - '**/package.json'
61+ - '**/package-lock.json'
62+ - '**/tsconfig.json'
63+ python:
64+ - '**/*.py'
65+ - '**/*.pyx'
66+ - '**/setup.py'
67+ - '**/setup.cfg'
68+ - '**/pyproject.toml'
69+ - '**/*requirements.txt'
70+ rust:
71+ - '**/*.rs'
72+
73+ - name : Generate Matrix
74+ id : set-matrix
75+ run : |
76+ # Full matrix of all CodeQL supported languages and their build modes in Apache Beam.
77+ ALL_MATRIX='[
78+ {"language": "actions", "build-mode": "none"},
79+ {"language": "go", "build-mode": "manual"},
80+ {"language": "java-kotlin", "build-mode": "autobuild"},
81+ {"language": "javascript-typescript", "build-mode": "none"},
82+ {"language": "python", "build-mode": "none"},
83+ {"language": "rust", "build-mode": "none"}
84+ ]'
85+
86+ # On periodic scheduled runs (cron) or manual dispatches, scan all languages.
87+ if [[ "${{ github.event_name }}" == "schedule" || "${{ github.event_name }}" == "workflow_dispatch" ]]; then
88+ COMPACT_ALL=$(echo "$ALL_MATRIX" | jq -c .)
89+ echo "matrix=$COMPACT_ALL" >> $GITHUB_OUTPUT
90+ else
91+ # Filter ALL_MATRIX entries keeping only entries for languages with path changes.
92+ FILTERED=$(echo "$ALL_MATRIX" | jq -c '[.[] | select(
93+ (.language == "actions" and "${{ steps.filter.outputs.actions }}" == "true") or
94+ (.language == "go" and "${{ steps.filter.outputs.go }}" == "true") or
95+ (.language == "java-kotlin" and "${{ steps.filter.outputs['java-kotlin'] }}" == "true") or
96+ (.language == "javascript-typescript" and "${{ steps.filter.outputs['javascript-typescript'] }}" == "true") or
97+ (.language == "python" and "${{ steps.filter.outputs.python }}" == "true") or
98+ (.language == "rust" and "${{ steps.filter.outputs.rust }}" == "true")
99+ )]')
100+ echo "matrix=$FILTERED" >> $GITHUB_OUTPUT
101+ fi
102+
30103 analyze :
31104 name : Analyze (${{ matrix.language }})
105+ needs : detect-changes
106+ if : needs.detect-changes.outputs.matrix != '[]'
32107 # Runner size impacts CodeQL analysis time. To learn more, please see:
33108 # - https://gh.io/recommended-hardware-resources-for-running-codeql
34109 # - https://gh.io/supported-runners-and-hardware-resources
@@ -49,21 +124,7 @@ jobs:
49124 strategy :
50125 fail-fast : false
51126 matrix :
52- include :
53- - language : actions
54- build-mode : none
55- # - language: c-cpp
56- # build-mode: autobuild
57- - language : go
58- build-mode : manual
59- - language : java-kotlin
60- build-mode : autobuild
61- - language : javascript-typescript
62- build-mode : none
63- - language : python
64- build-mode : none
65- - language : rust
66- build-mode : none
127+ include : ${{ fromJSON(needs.detect-changes.outputs.matrix) }}
67128 # CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift'
68129 # Use `c-cpp` to analyze code written in C, C++ or both
69130 # Use 'java-kotlin' to analyze code written in Java, Kotlin or both
0 commit comments