Make compile-queries.yml sharded based on language
#35151
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "Compile all queries using the latest stable CodeQL CLI" | |
| on: | |
| push: | |
| branches: # makes sure the cache gets populated - running on the branches people tend to merge into. | |
| - main | |
| - "rc/*" | |
| - "codeql-cli-*" | |
| pull_request: | |
| paths: | |
| - '**.ql' | |
| - '**.qll' | |
| - '**/qlpack.yml' | |
| - '**.dbscheme' | |
| permissions: | |
| contents: read | |
| jobs: | |
| detect-changes: | |
| if: github.repository_owner == 'github' | |
| runs-on: ubuntu-latest | |
| outputs: | |
| languages: ${{ steps.detect.outputs.languages }} | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Detect changed languages | |
| id: detect | |
| run: | | |
| if [[ "${{ github.event_name }}" == "pull_request" ]]; then | |
| # For PRs, detect which languages have changes | |
| changed_files=$(gh pr view ${{ github.event.pull_request.number }} --json files --jq '.files.[].path') | |
| languages=() | |
| for lang in actions cpp csharp go java javascript python ruby rust swift; do | |
| if echo "$changed_files" | grep -qE "^($lang/|shared/)" ; then | |
| languages+=("$lang") | |
| fi | |
| done | |
| # If no specific language matched (e.g., only root files changed), run all | |
| # if [[ ${#languages[@]} -eq 0 ]]; then | |
| # languages=(actions cpp csharp go java javascript python ruby rust swift) | |
| # fi | |
| echo "languages=$(jq -c -n '$ARGS.positional' --args "${languages[@]}")" >> $GITHUB_OUTPUT | |
| else | |
| # For pushes to main/rc branches, run all languages | |
| echo 'languages=["actions","cpp","csharp","go","java","javascript","python","ruby","rust","swift"]' >> $GITHUB_OUTPUT | |
| fi | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| compile-queries: | |
| needs: detect-changes | |
| if: github.repository_owner == 'github' && needs.detect-changes.outputs.languages != '[]' | |
| runs-on: ubuntu-latest-xl | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| language: ${{ fromJson(needs.detect-changes.outputs.languages) }} | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Setup CodeQL | |
| uses: ./.github/actions/fetch-codeql | |
| with: | |
| channel: 'release' | |
| - name: Cache compilation cache | |
| id: query-cache | |
| uses: ./.github/actions/cache-query-compilation | |
| with: | |
| key: ${{ matrix.language }}-queries | |
| - name: check formatting | |
| run: find shared ${{ matrix.language }}/ql -type f \( -name "*.qll" -o -name "*.ql" \) -print0 | xargs -0 -n 3000 -P 10 codeql query format -q --check-only | |
| - name: compile queries - check-only | |
| # run with --check-only if running in a PR (github.sha != main) | |
| if : ${{ github.event_name == 'pull_request' }} | |
| shell: bash | |
| run: codeql query compile -q -j0 ${{ matrix.language }}/ql/{src,examples} --keep-going --warnings=error --check-only --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" --compilation-cache-size=500 --ram=56000 | |
| - name: compile queries - full | |
| # do full compile if running on main - this populates the cache | |
| if : ${{ github.event_name != 'pull_request' }} | |
| shell: bash | |
| run: codeql query compile -q -j0 ${{ matrix.language }}/ql/{src,examples} --keep-going --warnings=error --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" --compilation-cache-size=500 --ram=56000 |