Skip to content

Commit 804b127

Browse files
authored
add language filtering for codeql (#39327)
* add language filtering for codeql * fix workflow file * remove third party dorny action * add comments * use approved SHA of dorny/paths-filter to dynamically filter matrix * add checkout step before paths-filter * compact ALL_MATRIX JSON to a single line before writing to GITHUB_OUTPUT * update path filters to use file extensions and build configuration files * remove uncessary checks
1 parent 023ca6d commit 804b127

1 file changed

Lines changed: 76 additions & 15 deletions

File tree

.github/workflows/codeql.yml

Lines changed: 76 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,83 @@ on:
2727
- cron: '25 10 * * 6'
2828

2929
jobs:
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

Comments
 (0)