name: "CodeQL" on: [push, pull_request] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: CCACHE_BASEDIR: ${{ github.workspace }} CCACHE_COMPRESS: true CCACHE_MAXSIZE: 200M # CodeQL currently doesn't support ccache CCACHE_DISABLE: true OS_NAME: linux jobs: pre-check: runs-on: ubuntu-latest outputs: should_skip: ${{ steps.skip-check.outputs.should_skip }} steps: - id: skip-check uses: fkirc/skip-duplicate-actions@master with: concurrent_skipping: 'same_content_newer' analyze: needs: pre-check if: ${{ needs.pre-check.outputs.should_skip != 'true' }} runs-on: ubuntu-latest permissions: actions: write security-events: write strategy: fail-fast: false matrix: language: [ 'cpp', 'python', 'ruby' ] steps: - uses: actions/checkout@v6 - name: Initialize CodeQL uses: github/codeql-action/init@v4 with: languages: ${{ matrix.language }} config-file: ./.github/codeql/config.yml - if: matrix.language == 'python' || matrix.language == 'ruby' name: Autobuild uses: github/codeql-action/autobuild@v4 # this follows the steps of the Linux workflow - if: matrix.language == 'cpp' uses: actions/cache/restore@v5 id: cache-restore with: path: ~/.cache/ccache key: ccache-ubuntu-latest-gcc-codeql restore-keys: | ccache-ubuntu-latest-gcc-all ccache-ubuntu-latest-gcc- - if: matrix.language == 'cpp' run: | sudo apt-get install -qq ccache echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV ccache -z - if: matrix.language == 'cpp' env: TEST: codeql uses: ./.github/actions/default - if: matrix.language == 'cpp' run: ccache -sv # delete old cache entry as we currently can't update it any other way - if: matrix.language == 'cpp' && steps.cache-restore.outputs.cache-hit env: GH_TOKEN: ${{ github.token }} continue-on-error: true run: gh cache delete -r ${{ github.ref }} ${{ steps.cache-restore.outputs.cache-primary-key }} - if: matrix.language == 'cpp' uses: actions/cache/save@v5 with: path: ~/.cache/ccache key: ${{ steps.cache-restore.outputs.cache-primary-key }} - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v4 with: category: "/language:${{matrix.language}}"