# Warning: This file is generated automatically, and should not be modified. # Instead, please modify the template in the pr-checks directory and run: # pr-checks/sync.sh # to regenerate this file. name: PR Checks env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GO111MODULE: auto on: push: branches: - main - releases/v* pull_request: {} merge_group: types: - checks_requested schedule: - cron: '0 5 * * *' workflow_dispatch: inputs: dotnet-version: type: string description: The version of .NET to install required: false default: 9.x go-version: type: string description: The version of Go to install required: false default: '>=1.21.0' java-version: type: string description: The version of Java to install required: false default: '17' workflow_call: inputs: dotnet-version: type: string description: The version of .NET to install required: false default: 9.x go-version: type: string description: The version of Go to install required: false default: '>=1.21.0' java-version: type: string description: The version of Java to install required: false default: '17' defaults: run: shell: bash jobs: pr-checks: name: Initial checks permissions: contents: read security-events: write uses: ./.github/workflows/pr-checks.yml all-platform-bundle: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: nightly-latest - os: macos-latest-xlarge version: nightly-latest - os: windows-latest version: nightly-latest name: All-platform bundle if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'true' setup-kotlin: 'true' - id: init uses: ./../action/init with: # Swift is not supported on Ubuntu so we manually exclude it from the list here languages: cpp,csharp,go,java,javascript,python,ruby tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Build code run: ./build.sh - uses: ./../action/analyze env: CODEQL_ACTION_TEST_MODE: true analysis-kinds: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked analysis-kinds: code-scanning - os: ubuntu-latest version: linked analysis-kinds: code-quality - os: ubuntu-latest version: linked analysis-kinds: code-scanning,code-quality - os: ubuntu-latest version: linked analysis-kinds: risk-assessment - os: ubuntu-latest version: nightly-latest analysis-kinds: code-scanning - os: ubuntu-latest version: nightly-latest analysis-kinds: code-quality - os: ubuntu-latest version: nightly-latest analysis-kinds: code-scanning,code-quality - os: ubuntu-latest version: nightly-latest analysis-kinds: risk-assessment name: Analysis kinds if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: languages: javascript analysis-kinds: ${{ matrix.analysis-kinds }} tools: ${{ steps.prepare-test.outputs.tools-url }} - uses: ./../action/analyze with: output: '${{ runner.temp }}/results' upload-database: false post-processed-sarif-path: '${{ runner.temp }}/post-processed' - name: Upload SARIF files uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: | analysis-kinds-${{ matrix.os }}-${{ matrix.version }}-${{ matrix.analysis-kinds }} path: '${{ runner.temp }}/results/*.sarif' retention-days: 7 - name: Upload post-processed SARIF uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: | post-processed-${{ matrix.os }}-${{ matrix.version }}-${{ matrix.analysis-kinds }} path: '${{ runner.temp }}/post-processed' retention-days: 7 if-no-files-found: error - name: Check quality query does not appear in security SARIF if: contains(matrix.analysis-kinds, 'code-scanning') uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: SARIF_PATH: '${{ runner.temp }}/results/javascript.sarif' EXPECT_PRESENT: 'false' with: script: ${{ env.CHECK_SCRIPT }} - name: Check quality query appears in quality SARIF if: contains(matrix.analysis-kinds, 'code-quality') uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: SARIF_PATH: '${{ runner.temp }}/results/javascript.quality.sarif' EXPECT_PRESENT: 'true' with: script: ${{ env.CHECK_SCRIPT }} env: CODEQL_ACTION_RISK_ASSESSMENT_ID: 1 CHECK_SCRIPT: | const fs = require('fs'); const sarif = JSON.parse(fs.readFileSync(process.env['SARIF_PATH'], 'utf8')); const expectPresent = JSON.parse(process.env['EXPECT_PRESENT']); const run = sarif.runs[0]; const extensions = run.tool.extensions; if (extensions === undefined) { core.setFailed('`extensions` property not found in the SARIF run property bag.'); } // ID of a query we want to check the presence for const targetId = 'js/regex/always-matches'; const found = extensions.find(extension => extension.rules && extension.rules.find(rule => rule.id === targetId)); if (found && expectPresent) { console.log(`Found rule with id '${targetId}'.`); } else if (!found && !expectPresent) { console.log(`Rule with id '${targetId}' was not found.`); } else { core.setFailed(`${ found ? "Found" : "Didn't find" } rule ${targetId}`); } CODEQL_ACTION_TEST_MODE: true analyze-ref-input: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: default name: "Analyze: 'ref' and 'sha' from inputs" if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: tools: ${{ steps.prepare-test.outputs.tools-url }} languages: cpp,csharp,java,javascript,python config-file: ${{ github.repository }}/tests/multi-language-repo/.github/codeql/custom-queries.yml@${{ github.sha }} - name: Build code run: ./build.sh - uses: ./../action/analyze with: ref: 'refs/heads/main' sha: '5e235361806c361d4d3f8859e3c897658025a9a2' env: CODEQL_ACTION_TEST_MODE: true autobuild-action: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: macos-latest version: linked - os: windows-latest version: linked name: autobuild-action if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: languages: csharp tools: ${{ steps.prepare-test.outputs.tools-url }} - uses: ./../action/autobuild env: # Explicitly disable the CLR tracer. COR_ENABLE_PROFILING: '' COR_PROFILER: '' COR_PROFILER_PATH_64: '' CORECLR_ENABLE_PROFILING: '' CORECLR_PROFILER: '' CORECLR_PROFILER_PATH_64: '' - uses: ./../action/analyze - name: Check database run: | cd "$RUNNER_TEMP/codeql_databases" if [[ ! -d csharp ]]; then echo "Did not find a C# database" exit 1 fi env: CODEQL_ACTION_TEST_MODE: true autobuild-direct-tracing-with-working-dir: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: windows-latest version: linked - os: ubuntu-latest version: nightly-latest - os: windows-latest version: nightly-latest name: Autobuild direct tracing (custom working directory) if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Java uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1 with: java-version: ${{ inputs.java-version || '17' }} distribution: temurin - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Test setup run: | # Make sure that Gradle build succeeds in autobuild-dir ... cp -a ../action/tests/java-repo autobuild-dir # ... and fails if attempted in the current directory echo > build.gradle - uses: ./../action/init with: build-mode: autobuild languages: java tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Check that indirect tracing is disabled run: | if [[ ! -z "${CODEQL_RUNNER}" ]]; then echo "Expected indirect tracing to be disabled, but the" \ "CODEQL_RUNNER environment variable is set." exit 1 fi - uses: ./../action/autobuild with: working-directory: autobuild-dir - uses: ./../action/analyze env: CODEQL_ACTION_AUTOBUILD_BUILD_MODE_DIRECT_TRACING: true CODEQL_ACTION_TEST_MODE: true autobuild-working-dir: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked name: Autobuild working directory if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Test setup run: | # Make sure that Gradle build succeeds in autobuild-dir ... cp -a ../action/tests/java-repo autobuild-dir # ... and fails if attempted in the current directory echo > build.gradle - uses: ./../action/init with: languages: java tools: ${{ steps.prepare-test.outputs.tools-url }} - uses: ./../action/autobuild with: working-directory: autobuild-dir - uses: ./../action/analyze - name: Check database run: | cd "$RUNNER_TEMP/codeql_databases" if [[ ! -d java ]]; then echo "Did not find a Java database" exit 1 fi env: CODEQL_ACTION_TEST_MODE: true build-mode-autobuild: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: windows-latest version: linked - os: ubuntu-latest version: nightly-latest - os: windows-latest version: nightly-latest name: Build mode autobuild if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Java uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1 with: java-version: ${{ inputs.java-version || '17' }} distribution: temurin - name: Install yq if: runner.os == 'Windows' env: YQ_PATH: ${{ runner.temp }}/yq YQ_VERSION: v4.50.1 run: |- gh release download --repo mikefarah/yq --pattern "yq_windows_amd64.exe" "$YQ_VERSION" -O "$YQ_PATH/yq.exe" echo "$YQ_PATH" >> "$GITHUB_PATH" - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Set up Java test repo configuration run: | mv * .github ../action/tests/multi-language-repo/ mv ../action/tests/multi-language-repo/.github/workflows .github mv ../action/tests/java-repo/* . - uses: ./../action/init id: init with: build-mode: autobuild db-location: '${{ runner.temp }}/customDbLocation' languages: java tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Validate database build mode run: | metadata_path="$RUNNER_TEMP/customDbLocation/java/codeql-database.yml" build_mode=$(yq eval '.buildMode' "$metadata_path") if [[ "$build_mode" != "autobuild" ]]; then echo "Expected build mode to be 'autobuild' but was $build_mode" exit 1 fi - name: Check that indirect tracing is disabled run: | if [[ ! -z "${CODEQL_RUNNER}" ]]; then echo "Expected indirect tracing to be disabled, but the" \ "CODEQL_RUNNER environment variable is set." exit 1 fi - uses: ./../action/analyze env: CODEQL_ACTION_TEST_MODE: true build-mode-manual: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: nightly-latest name: Build mode manual if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init id: init with: build-mode: manual db-location: '${{ runner.temp }}/customDbLocation' languages: java tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Validate database build mode run: | metadata_path="$RUNNER_TEMP/customDbLocation/java/codeql-database.yml" build_mode=$(yq eval '.buildMode' "$metadata_path") if [[ "$build_mode" != "manual" ]]; then echo "Expected build mode to be 'manual' but was $build_mode" exit 1 fi - name: Build code run: ./build.sh - uses: ./../action/analyze env: CODEQL_ACTION_TEST_MODE: true build-mode-none: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: nightly-latest name: Build mode none if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init id: init with: build-mode: none db-location: '${{ runner.temp }}/customDbLocation' languages: java tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Validate database build mode run: | metadata_path="$RUNNER_TEMP/customDbLocation/java/codeql-database.yml" build_mode=$(yq eval '.buildMode' "$metadata_path") if [[ "$build_mode" != "none" ]]; then echo "Expected build mode to be 'none' but was $build_mode" exit 1 fi # The latest nightly supports omitting the autobuild Action when the build mode is specified. - uses: ./../action/autobuild if: matrix.version != 'nightly-latest' - uses: ./../action/analyze env: CODEQL_ACTION_TEST_MODE: true build-mode-rollback: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: nightly-latest name: Build mode rollback if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Set up Java test repo configuration run: | mv * .github ../action/tests/multi-language-repo/ mv ../action/tests/multi-language-repo/.github/workflows .github mv ../action/tests/java-repo/* . - uses: ./../action/init id: init with: build-mode: none db-location: '${{ runner.temp }}/customDbLocation' languages: java tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Validate database build mode run: | metadata_path="$RUNNER_TEMP/customDbLocation/java/codeql-database.yml" build_mode=$(yq eval '.buildMode' "$metadata_path") if [[ "$build_mode" != "autobuild" ]]; then echo "Expected build mode to be 'autobuild' but was $build_mode" exit 1 fi - uses: ./../action/analyze env: CODEQL_ACTION_DISABLE_JAVA_BUILDLESS: true CODEQL_ACTION_TEST_MODE: true bundle-from-nightly: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked name: 'Bundle: From nightly' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - id: init uses: ./../action/init env: CODEQL_ACTION_FORCE_NIGHTLY: true with: tools: ${{ steps.prepare-test.outputs.tools-url }} languages: javascript - name: Fail if the CodeQL version is not a nightly if: ${{ !contains(steps.init.outputs.codeql-version, '+') }} run: exit 1 env: CODEQL_ACTION_TEST_MODE: true bundle-from-toolcache: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: toolcache name: 'Bundle: From toolcache' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Install @actions/tool-cache run: npm install @actions/tool-cache@3 - name: Check toolcache contains CodeQL continue-on-error: true uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: script: | const toolcache = require('@actions/tool-cache'); const allCodeqlVersions = toolcache.findAllVersions('CodeQL'); if (allCodeqlVersions.length === 0) { throw new Error(`CodeQL could not be found in the toolcache`); } - id: setup-codeql uses: ./../action/setup-codeql with: tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Check CodeQL is installed within the toolcache uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: script: | const toolcache = require('@actions/tool-cache'); const allCodeqlVersions = toolcache.findAllVersions('CodeQL'); console.log(`Found CodeQL versions: ${allCodeqlVersions}`); if (allCodeqlVersions.length === 0) { throw new Error('CodeQL not found in toolcache'); } env: CODEQL_ACTION_TEST_MODE: true bundle-toolcache: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: macos-latest version: linked - os: windows-latest version: linked name: 'Bundle: Caching checks' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Remove CodeQL from toolcache uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: script: | const fs = require('fs'); const path = require('path'); const codeqlPath = path.join(process.env['RUNNER_TOOL_CACHE'], 'CodeQL'); fs.rmdirSync(codeqlPath, { recursive: true }); - name: Install @actions/tool-cache run: npm install @actions/tool-cache@3 - name: Check toolcache does not contain CodeQL uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: script: | const toolcache = require('@actions/tool-cache'); const allCodeqlVersions = toolcache.findAllVersions('CodeQL'); if (allCodeqlVersions.length !== 0) { throw new Error(`CodeQL should not be found in the toolcache, but found ${allCodeqlVersions}`); } console.log('No versions of CodeQL found in the toolcache'); - id: init uses: ./../action/init with: # Request multiple languages so this check uses the combined bundle. languages: javascript,python tools: ${{ steps.prepare-test.outputs.tools-url }} - uses: ./../action/analyze with: output: ${{ runner.temp }}/results upload-database: false - name: Check CodeQL is installed within the toolcache uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: script: | const toolcache = require('@actions/tool-cache'); const allCodeqlVersions = toolcache.findAllVersions('CodeQL'); console.log(`Found CodeQL versions: ${allCodeqlVersions}`); if (allCodeqlVersions.length === 0) { throw new Error('CodeQL not found in toolcache'); } if (allCodeqlVersions.length > 1) { throw new Error('Multiple CodeQL versions found in toolcache'); } env: CODEQL_ACTION_TEST_MODE: true cleanup-db-cluster-dir: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked name: Clean up database cluster directory if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Add a file to the database cluster directory run: | mkdir -p "${{ runner.temp }}/customDbLocation/javascript" touch "${{ runner.temp }}/customDbLocation/javascript/a-file-to-clean-up.txt" - uses: ./../action/init id: init with: build-mode: none db-location: '${{ runner.temp }}/customDbLocation' languages: javascript tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Validate file cleaned up run: | if [[ -f "${{ runner.temp }}/customDbLocation/javascript/a-file-to-clean-up.txt" ]]; then echo "File was not cleaned up" exit 1 fi echo "File was cleaned up" env: CODEQL_ACTION_TEST_MODE: true config-export: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: nightly-latest name: Config export if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: languages: javascript queries: security-extended tools: ${{ steps.prepare-test.outputs.tools-url }} - uses: ./../action/analyze with: output: '${{ runner.temp }}/results' upload-database: false - name: Upload SARIF uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: config-export-${{ matrix.os }}-${{ matrix.version }}.sarif.json path: '${{ runner.temp }}/results/javascript.sarif' retention-days: 7 - name: Check config properties appear in SARIF uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: SARIF_PATH: '${{ runner.temp }}/results/javascript.sarif' with: script: | const fs = require('fs'); const sarif = JSON.parse(fs.readFileSync(process.env['SARIF_PATH'], 'utf8')); const run = sarif.runs[0]; const configSummary = run.properties.codeqlConfigSummary; if (configSummary === undefined) { core.setFailed('`codeqlConfigSummary` property not found in the SARIF run property bag.'); } if (configSummary.disableDefaultQueries !== false) { core.setFailed('`disableDefaultQueries` property incorrect: expected false, got ' + `${JSON.stringify(configSummary.disableDefaultQueries)}.`); } const expectedQueries = [{ type: 'builtinSuite', uses: 'security-extended' }]; // Use JSON.stringify to deep-equal the arrays. if (JSON.stringify(configSummary.queries) !== JSON.stringify(expectedQueries)) { core.setFailed(`\`queries\` property incorrect: expected ${JSON.stringify(expectedQueries)}, got ` + `${JSON.stringify(configSummary.queries)}.`); } core.info('Finished config export tests.'); env: CODEQL_ACTION_TEST_MODE: true config-input: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked name: Config input if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Node.js uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 20.x cache: npm - name: Install newer npm run: npm install -g npm@11.19.1 - name: Install dependencies run: npm ci - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Copy queries into workspace run: | cp -a ../action/queries . - uses: ./../action/init with: tools: ${{ steps.prepare-test.outputs.tools-url }} languages: javascript build-mode: none config: | disable-default-queries: true queries: - name: Run custom query uses: ./queries/default-setup-environment-variables.ql paths-ignore: - tests - lib - uses: ./../action/analyze with: output: ${{ runner.temp }}/results - name: Check SARIF uses: ./../action/.github/actions/check-sarif with: sarif-file: ${{ runner.temp }}/results/javascript.sarif queries-run: javascript/codeql-action/default-setup-env-vars queries-not-run: javascript/codeql-action/default-setup-context-properties env: CODEQL_ACTION_TEST_MODE: true cpp-deptrace-disabled: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: default - os: ubuntu-latest version: nightly-latest name: 'C/C++: disabling autoinstalling dependencies (Linux)' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Test setup run: | cp -a ../action/tests/cpp-autobuild autobuild-dir - uses: ./../action/init with: languages: cpp tools: ${{ steps.prepare-test.outputs.tools-url }} - uses: ./../action/autobuild with: working-directory: autobuild-dir env: CODEQL_EXTRACTOR_CPP_AUTOINSTALL_DEPENDENCIES: false - run: | if ls /usr/bin/errno; then echo "C/C++ autobuild installed errno, but it should not have since auto-install dependencies is disabled." exit 1 fi env: DOTNET_GENERATE_ASPNET_CERTIFICATE: 'false' CODEQL_ACTION_TEST_MODE: true cpp-deptrace-enabled-on-macos: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: macos-latest version: linked - os: macos-latest version: nightly-latest name: 'C/C++: autoinstalling dependencies is skipped (macOS)' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Test setup run: | cp -a ../action/tests/cpp-autobuild autobuild-dir - uses: ./../action/init with: languages: cpp tools: ${{ steps.prepare-test.outputs.tools-url }} - uses: ./../action/autobuild with: working-directory: autobuild-dir env: CODEQL_EXTRACTOR_CPP_AUTOINSTALL_DEPENDENCIES: true - run: | if ! ls /usr/bin/errno; then echo "As expected, CODEQL_EXTRACTOR_CPP_AUTOINSTALL_DEPENDENCIES is a no-op on macOS" else echo "CODEQL_EXTRACTOR_CPP_AUTOINSTALL_DEPENDENCIES should not have had any effect on macOS" exit 1 fi env: DOTNET_GENERATE_ASPNET_CERTIFICATE: 'false' CODEQL_ACTION_TEST_MODE: true cpp-deptrace-enabled: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: default - os: ubuntu-latest version: nightly-latest name: 'C/C++: autoinstalling dependencies (Linux)' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Test setup run: | cp -a ../action/tests/cpp-autobuild autobuild-dir - uses: ./../action/init with: languages: cpp tools: ${{ steps.prepare-test.outputs.tools-url }} - uses: ./../action/autobuild with: working-directory: autobuild-dir env: CODEQL_EXTRACTOR_CPP_AUTOINSTALL_DEPENDENCIES: true - run: | if ! ls /usr/bin/errno; then echo "Did not autoinstall errno" exit 1 fi env: DOTNET_GENERATE_ASPNET_CERTIFICATE: 'false' CODEQL_ACTION_TEST_MODE: true diagnostics-export: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: nightly-latest name: Diagnostic export if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init id: init with: languages: javascript tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Add test diagnostics env: CODEQL_PATH: ${{ steps.init.outputs.codeql-path }} run: | "$CODEQL_PATH" database add-diagnostic \ "$RUNNER_TEMP/codeql_databases/javascript" \ --file-path /path/to/file \ --plaintext-message "Plaintext message" \ --source-id "lang/diagnostics/example" \ --source-name "Diagnostic name" \ --ready-for-status-page - uses: ./../action/analyze with: output: '${{ runner.temp }}/results' upload-database: false - name: Upload SARIF uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: diagnostics-export-${{ matrix.os }}-${{ matrix.version }}.sarif.json path: '${{ runner.temp }}/results/javascript.sarif' retention-days: 7 - name: Check diagnostics appear in SARIF uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: SARIF_PATH: '${{ runner.temp }}/results/javascript.sarif' with: script: | const fs = require('fs'); function checkStatusPageNotification(n) { const expectedMessage = 'Plaintext message'; if (n.message.text !== expectedMessage) { core.setFailed(`Expected the status page diagnostic to have the message '${expectedMessage}', but found '${n.message.text}'.`); } if (n.locations.length !== 1) { core.setFailed(`Expected the status page diagnostic to have exactly 1 location, but found ${n.locations.length}.`); } } const sarif = JSON.parse(fs.readFileSync(process.env['SARIF_PATH'], 'utf8')); const run = sarif.runs[0]; const toolExecutionNotifications = run.invocations[0].toolExecutionNotifications; const statusPageNotifications = toolExecutionNotifications.filter(n => n.descriptor.id === 'lang/diagnostics/example' && n.properties?.visibility?.statusPage ); if (statusPageNotifications.length !== 1) { core.setFailed( 'Expected exactly one status page reporting descriptor for this diagnostic in the ' + `'runs[].invocations[].toolExecutionNotifications[]' SARIF property, but found ` + `${statusPageNotifications.length}. All notification reporting descriptors: ` + `${JSON.stringify(toolExecutionNotifications)}.` ); } checkStatusPageNotification(statusPageNotifications[0]); const notifications = run.tool.driver.notifications; const diagnosticNotification = notifications.filter(n => n.id === 'lang/diagnostics/example' && n.name === 'lang/diagnostics/example' && n.fullDescription.text === 'Diagnostic name' ); if (diagnosticNotification.length !== 1) { core.setFailed( 'Expected exactly one notification for this diagnostic in the ' + `'runs[].tool.driver.notifications[]' SARIF property, but found ` + `${diagnosticNotification.length}. All notifications: ` + `${JSON.stringify(notifications)}.` ); } core.info('Finished diagnostic export test'); env: CODEQL_ACTION_EXPORT_DIAGNOSTICS: true CODEQL_ACTION_TEST_MODE: true export-file-baseline-information: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: nightly-latest - os: macos-latest version: nightly-latest - os: windows-latest version: nightly-latest name: Export file baseline information if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init id: init with: languages: javascript tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Build code run: ./build.sh - uses: ./../action/analyze with: output: '${{ runner.temp }}/results' - name: Upload SARIF uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: with-baseline-information-${{ matrix.os }}-${{ matrix.version }}.sarif.json path: '${{ runner.temp }}/results/javascript.sarif' retention-days: 7 - name: Check results run: | cd "$RUNNER_TEMP/results" expected_baseline_languages="c csharp go java kotlin javascript python ruby" if [[ $RUNNER_OS == "macOS" ]]; then expected_baseline_languages+=" swift" fi for lang in ${expected_baseline_languages}; do rule_name="cli/expected-extracted-files/${lang}" found_notification=$(jq --arg rule_name "${rule_name}" '[.runs[0].tool.driver.notifications | select(. != null) | flatten | .[].id] | any(. == $rule_name)' javascript.sarif) if [[ "${found_notification}" != "true" ]]; then echo "Expected SARIF output to contain notification '${rule_name}', but found no such notification." exit 1 else echo "Found notification '${rule_name}'." fi done env: CODEQL_ACTION_SKIP_FILE_COVERAGE_ON_PRS: false CODEQL_ACTION_SUBLANGUAGE_FILE_COVERAGE: true CODEQL_ACTION_PER_LANGUAGE_BUNDLES: false CODEQL_ACTION_TEST_MODE: true extractor-ram-threads: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked name: Extractor ram and threads options test if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: languages: java ram: 230 threads: 1 - name: Assert Results run: | if [ "${CODEQL_RAM}" != "230" ]; then echo "CODEQL_RAM is '${CODEQL_RAM}' instead of 230" exit 1 fi if [ "${CODEQL_EXTRACTOR_JAVA_RAM}" != "230" ]; then echo "CODEQL_EXTRACTOR_JAVA_RAM is '${CODEQL_EXTRACTOR_JAVA_RAM}' instead of 230" exit 1 fi if [ "${CODEQL_THREADS}" != "1" ]; then echo "CODEQL_THREADS is '${CODEQL_THREADS}' instead of 1" exit 1 fi if [ "${CODEQL_EXTRACTOR_JAVA_THREADS}" != "1" ]; then echo "CODEQL_EXTRACTOR_JAVA_THREADS is '${CODEQL_EXTRACTOR_JAVA_THREADS}' instead of 1" exit 1 fi env: CODEQL_ACTION_TEST_MODE: true global-proxy: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: nightly-latest name: Proxy test if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'false' - name: Block direct internet access to force proxy usage run: | apt-get update -qq && apt-get install -y -qq iptables >/dev/null 2>&1 PROXY_IP=$(getent hosts squid-proxy | awk '{ print $1 }') echo "Squid proxy IP: $PROXY_IP" # Allow all traffic to the proxy container iptables -A OUTPUT -d "$PROXY_IP" -j ACCEPT # Allow DNS resolution iptables -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT # Allow loopback iptables -A OUTPUT -o lo -j ACCEPT # Allow already-established connections (from checkout/prepare-test) iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Block all other outbound HTTP and HTTPS, ensuring direct access fails iptables -A OUTPUT -p tcp --dport 80 -j REJECT --reject-with tcp-reset iptables -A OUTPUT -p tcp --dport 443 -j REJECT --reject-with tcp-reset echo "Direct HTTP/HTTPS access is now blocked - all traffic must go through the proxy" - name: Set proxy environment variables shell: bash run: | echo "http_proxy=http://squid-proxy:3128" >> $GITHUB_ENV echo "HTTP_PROXY=http://squid-proxy:3128" >> $GITHUB_ENV echo "https_proxy=http://squid-proxy:3128" >> $GITHUB_ENV echo "HTTPS_PROXY=http://squid-proxy:3128" >> $GITHUB_ENV - uses: ./../action/init with: languages: javascript tools: ${{ steps.prepare-test.outputs.tools-url }} - uses: ./../action/analyze env: CODEQL_ACTION_TOLERATE_MISSING_GIT_VERSION: true CODEQL_ACTION_TEST_MODE: true container: image: ubuntu:22.04 options: --cap-add=NET_ADMIN services: squid-proxy: image: ubuntu/squid:latest ports: - 3128:3128 go-custom-queries: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: nightly-latest name: 'Go: Custom queries' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: languages: go config-file: ./.github/codeql/custom-queries.yml tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Build code run: ./build.sh - uses: ./../action/analyze env: DOTNET_GENERATE_ASPNET_CERTIFICATE: 'false' CODEQL_ACTION_TEST_MODE: true go-indirect-tracing-workaround-diagnostic: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: default name: 'Go: diagnostic when Go is changed after init step' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: languages: go tools: ${{ steps.prepare-test.outputs.tools-url }} # Deliberately change Go after the `init` step - uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: '1.20' - name: Build code run: go build main.go - uses: ./../action/analyze with: output: '${{ runner.temp }}/results' upload-database: false - name: Check diagnostic appears in SARIF uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: SARIF_PATH: '${{ runner.temp }}/results/go.sarif' with: script: | const fs = require('fs'); const sarif = JSON.parse(fs.readFileSync(process.env['SARIF_PATH'], 'utf8')); const run = sarif.runs[0]; const toolExecutionNotifications = run.invocations[0].toolExecutionNotifications; const statusPageNotifications = toolExecutionNotifications.filter(n => n.descriptor.id === 'go/workflow/go-installed-after-codeql-init' && n.properties?.visibility?.statusPage ); if (statusPageNotifications.length !== 1) { core.setFailed( 'Expected exactly one status page reporting descriptor for this diagnostic in the ' + `'runs[].invocations[].toolExecutionNotifications[]' SARIF property, but found ` + `${statusPageNotifications.length}. All notification reporting descriptors: ` + `${JSON.stringify(toolExecutionNotifications)}.` ); } env: CODEQL_ACTION_TEST_MODE: true go-indirect-tracing-workaround-no-file-program: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: default name: 'Go: diagnostic when `file` is not installed' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Remove `file` program run: | echo $(which file) sudo rm -rf $(which file) echo $(which file) - uses: ./../action/init with: languages: go tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Build code run: go build main.go - uses: ./../action/analyze with: output: '${{ runner.temp }}/results' upload-database: false - name: Check diagnostic appears in SARIF uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: SARIF_PATH: '${{ runner.temp }}/results/go.sarif' with: script: | const fs = require('fs'); const sarif = JSON.parse(fs.readFileSync(process.env['SARIF_PATH'], 'utf8')); const run = sarif.runs[0]; const toolExecutionNotifications = run.invocations[0].toolExecutionNotifications; const statusPageNotifications = toolExecutionNotifications.filter(n => n.descriptor.id === 'go/workflow/file-program-unavailable' && n.properties?.visibility?.statusPage ); if (statusPageNotifications.length !== 1) { core.setFailed( 'Expected exactly one status page reporting descriptor for this diagnostic in the ' + `'runs[].invocations[].toolExecutionNotifications[]' SARIF property, but found ` + `${statusPageNotifications.length}. All notification reporting descriptors: ` + `${JSON.stringify(toolExecutionNotifications)}.` ); } env: CODEQL_ACTION_TEST_MODE: true go-indirect-tracing-workaround: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: default name: 'Go: workaround for indirect tracing' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: languages: go tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Build code run: go build main.go - uses: ./../action/analyze - run: | if [[ -z "${CODEQL_ACTION_GO_BINARY}" ]]; then echo "Expected the workaround for indirect tracing of static binaries to trigger, but the" \ "CODEQL_ACTION_GO_BINARY environment variable is not set." exit 1 fi if [[ ! -f "${CODEQL_ACTION_GO_BINARY}" ]]; then echo "CODEQL_ACTION_GO_BINARY is set, but the corresponding script does not exist." exit 1 fi # Once we start running Bash 4.2 in all environments, we can replace the # `! -z` flag with the more elegant `-v` which confirms that the variable # is actually unset and not potentially set to a blank value. if [[ ! -z "${CODEQL_ACTION_DID_AUTOBUILD_GOLANG}" ]]; then echo "Expected the Go autobuilder not to be run, but the" \ "CODEQL_ACTION_DID_AUTOBUILD_GOLANG environment variable was set." exit 1 fi cd "$RUNNER_TEMP/codeql_databases" if [[ ! -d go ]]; then echo "Did not find a Go database" exit 1 fi env: CODEQL_ACTION_TEST_MODE: true go-tracing-autobuilder: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: stable-v2.19.4 - os: ubuntu-latest version: stable-v2.20.7 - os: ubuntu-latest version: stable-v2.21.4 - os: ubuntu-latest version: stable-v2.22.4 - os: ubuntu-latest version: stable-v2.23.9 - os: ubuntu-latest version: stable-v2.24.3 - os: ubuntu-latest version: default - os: ubuntu-latest version: linked - os: macos-latest version: linked - os: ubuntu-latest version: nightly-latest - os: macos-latest version: nightly-latest name: 'Go: tracing with autobuilder step' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: languages: go tools: ${{ steps.prepare-test.outputs.tools-url }} - uses: ./../action/autobuild - uses: ./../action/analyze - run: | if [[ "${CODEQL_ACTION_DID_AUTOBUILD_GOLANG}" != true ]]; then echo "Expected the Go autobuilder to be run, but the" \ "CODEQL_ACTION_DID_AUTOBUILD_GOLANG environment variable was not true." exit 1 fi cd "$RUNNER_TEMP/codeql_databases" if [[ ! -d go ]]; then echo "Did not find a Go database" exit 1 fi env: DOTNET_GENERATE_ASPNET_CERTIFICATE: 'false' CODEQL_ACTION_TEST_MODE: true go-tracing-custom-build-steps: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: stable-v2.19.4 - os: ubuntu-latest version: stable-v2.20.7 - os: ubuntu-latest version: stable-v2.21.4 - os: ubuntu-latest version: stable-v2.22.4 - os: ubuntu-latest version: stable-v2.23.9 - os: ubuntu-latest version: stable-v2.24.3 - os: ubuntu-latest version: default - os: ubuntu-latest version: linked - os: macos-latest version: linked - os: ubuntu-latest version: nightly-latest - os: macos-latest version: nightly-latest name: 'Go: tracing with custom build steps' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: languages: go tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Build code run: go build main.go - uses: ./../action/analyze - run: | # Once we start running Bash 4.2 in all environments, we can replace the # `! -z` flag with the more elegant `-v` which confirms that the variable # is actually unset and not potentially set to a blank value. if [[ ! -z "${CODEQL_ACTION_DID_AUTOBUILD_GOLANG}" ]]; then echo "Expected the Go autobuilder not to be run, but the" \ "CODEQL_ACTION_DID_AUTOBUILD_GOLANG environment variable was set." exit 1 fi cd "$RUNNER_TEMP/codeql_databases" if [[ ! -d go ]]; then echo "Did not find a Go database" exit 1 fi env: CODEQL_ACTION_TEST_MODE: true go-tracing-legacy-workflow: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: stable-v2.19.4 - os: ubuntu-latest version: stable-v2.20.7 - os: ubuntu-latest version: stable-v2.21.4 - os: ubuntu-latest version: stable-v2.22.4 - os: ubuntu-latest version: stable-v2.23.9 - os: ubuntu-latest version: stable-v2.24.3 - os: ubuntu-latest version: default - os: ubuntu-latest version: linked - os: macos-latest version: linked - os: ubuntu-latest version: nightly-latest - os: macos-latest version: nightly-latest name: 'Go: tracing with legacy workflow' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: languages: go tools: ${{ steps.prepare-test.outputs.tools-url }} - uses: ./../action/analyze - run: | cd "$RUNNER_TEMP/codeql_databases" if [[ ! -d go ]]; then echo "Did not find a Go database" exit 1 fi env: DOTNET_GENERATE_ASPNET_CERTIFICATE: 'false' CODEQL_ACTION_TEST_MODE: true init-with-registries: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: default - os: ubuntu-latest version: linked - os: ubuntu-latest version: nightly-latest name: 'Packaging: Download using registries' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read packages: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Init with registries uses: ./../action/init with: db-location: '${{ runner.temp }}/customDbLocation' tools: ${{ steps.prepare-test.outputs.tools-url }} config-file: ./.github/codeql/codeql-config-registries.yml languages: javascript registries: | - url: "https://ghcr.io/v2/" packages: "*/*" token: "${{ secrets.GITHUB_TOKEN }}" - name: Verify packages installed run: | PRIVATE_PACK="$HOME/.codeql/packages/codeql-testing/private-pack" CODEQL_PACK1="$HOME/.codeql/packages/codeql-testing/codeql-pack1" if [[ -d $PRIVATE_PACK ]] then echo "$PRIVATE_PACK was installed." else echo "::error $PRIVATE_PACK pack was not installed." exit 1 fi if [[ -d $CODEQL_PACK1 ]] then echo "$CODEQL_PACK1 was installed." else echo "::error $CODEQL_PACK1 pack was not installed." exit 1 fi - name: Verify qlconfig.yml file was created run: | QLCONFIG_PATH=$RUNNER_TEMP/qlconfig.yml echo "Expected qlconfig.yml file to be created at $QLCONFIG_PATH" if [[ -f $QLCONFIG_PATH ]] then echo "qlconfig.yml file was created." else echo "::error qlconfig.yml file was not created." exit 1 fi - name: Verify contents of qlconfig.yml run: | QLCONFIG_PATH=$RUNNER_TEMP/qlconfig.yml cat $QLCONFIG_PATH | yq -e '.registries[] | select(.url == "https://ghcr.io/v2/") | select(.packages == "*/*")' if [[ $? -eq 0 ]] then echo "Registry was added to qlconfig.yml file." else echo "::error Registry was not added to qlconfig.yml file." echo "Contents of qlconfig.yml file:" cat $QLCONFIG_PATH exit 1 fi env: CODEQL_ACTION_TEST_MODE: true javascript-source-root: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: default - os: ubuntu-latest version: nightly-latest name: Custom source root if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Move codeql-action run: | mkdir ../new-source-root mv * ../new-source-root - uses: ./../action/init with: languages: javascript source-root: ../new-source-root tools: ${{ steps.prepare-test.outputs.tools-url }} - uses: ./../action/analyze with: skip-queries: true - name: Assert database exists run: | cd "$RUNNER_TEMP/codeql_databases" if [[ ! -d javascript ]]; then echo "Did not find a JavaScript database" exit 1 fi env: CODEQL_ACTION_TEST_MODE: true job-run-uuid-sarif: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: nightly-latest name: Job run UUID added to SARIF if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init id: init with: languages: javascript tools: ${{ steps.prepare-test.outputs.tools-url }} - uses: ./../action/analyze with: output: '${{ runner.temp }}/results' - name: Upload SARIF uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: ${{ matrix.os }}-${{ matrix.version }}.sarif.json path: '${{ runner.temp }}/results/javascript.sarif' retention-days: 7 - name: Check results run: | cd "$RUNNER_TEMP/results" actual=$(jq -r '.runs[0].properties.jobRunUuid' javascript.sarif) if [[ "$actual" != "$CODEQL_ACTION_JOB_RUN_UUID" ]]; then echo "Expected SARIF output to contain job run UUID '$CODEQL_ACTION_JOB_RUN_UUID', but found '$actual'." exit 1 else echo "Found job run UUID '$actual'." fi env: CODEQL_ACTION_TEST_MODE: true language-aliases: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked name: Language aliases if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: languages: C#,java-kotlin,typescript tools: ${{ steps.prepare-test.outputs.tools-url }} - name: 'Check languages' run: | expected_languages="csharp,java,javascript" actual_languages=$(jq -r '.languages | join(",")' "$RUNNER_TEMP"/config) if [ "$expected_languages" != "$actual_languages" ]; then echo "Resolved languages did not match expected list. " \ "Expected languages: $expected_languages. Actual languages: $actual_languages." exit 1 fi env: CODEQL_ACTION_TEST_MODE: true linux-arm64: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-24.04-arm version: nightly-latest name: Linux Arm64 if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: languages: ${{ env.LANGUAGES }} tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Build code run: ./build.sh - uses: ./../action/analyze with: upload-database: false - name: Assert databases exist run: | cd "$RUNNER_TEMP/codeql_databases" for lang in ${LANGUAGES//,/ }; do if [[ ! -d "$lang" ]]; then echo "Did not find a database for $lang" exit 1 fi echo "Found database for $lang" done env: LANGUAGES: cpp,csharp,go,java,javascript,python,ruby CODEQL_ACTION_TEST_MODE: true local-bundle: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked name: Local CodeQL bundle if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Fetch latest CodeQL bundle run: | wget https://github.com/github/codeql-action/releases/latest/download/codeql-bundle-linux64.tar.zst - id: init uses: ./../action/init with: # Swift is not supported on Ubuntu so we manually exclude it from the list here languages: cpp,csharp,go,java,javascript,python,ruby tools: ./codeql-bundle-linux64.tar.zst - name: Build code run: ./build.sh - uses: ./../action/analyze env: CODEQL_ACTION_TEST_MODE: true multi-language-autodetect: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: stable-v2.19.4 - os: macos-15-xlarge version: stable-v2.19.4 - os: ubuntu-latest version: stable-v2.20.7 - os: macos-15-xlarge version: stable-v2.20.7 - os: ubuntu-latest version: stable-v2.21.4 - os: macos-15-xlarge version: stable-v2.21.4 - os: ubuntu-latest version: stable-v2.22.4 - os: macos-15-xlarge version: stable-v2.22.4 - os: ubuntu-latest version: stable-v2.23.9 - os: macos-latest-xlarge version: stable-v2.23.9 - os: ubuntu-latest version: stable-v2.24.3 - os: macos-latest-xlarge version: stable-v2.24.3 - os: ubuntu-latest version: default - os: macos-latest-xlarge version: default - os: ubuntu-latest version: linked - os: macos-latest-xlarge version: linked - os: ubuntu-latest version: nightly-latest - os: macos-latest-xlarge version: nightly-latest name: Multi-language repository if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Install Python 3.13 for older CLI versions # We need Python 3.13 for older CLI versions because they are not compatible with Python 3.14 or newer. # See https://github.com/github/codeql-action/pull/3212 if: matrix.version != 'nightly-latest' && matrix.version != 'linked' uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: '3.13' - name: Use Xcode 16 # Only the older CodeQL CLI versions need Xcode 16, and these run on macOS 15. if: matrix.os == 'macos-15-xlarge' run: sudo xcode-select -s "/Applications/Xcode_16.app" - uses: ./../action/init id: init with: db-location: '${{ runner.temp }}/customDbLocation' languages: ${{ runner.os == 'Linux' && 'cpp,csharp,go,java,javascript,python,ruby' || '' }} tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Build code run: ./build.sh - uses: ./../action/analyze id: analysis with: upload-database: false - name: Check language autodetect for all languages excluding Swift run: | CPP_DB=${{ fromJson(steps.analysis.outputs.db-locations).cpp }} if [[ ! -d $CPP_DB ]] || [[ ! $CPP_DB == ${{ runner.temp }}/customDbLocation/* ]]; then echo "Did not create a database for CPP, or created it in the wrong location." exit 1 fi CSHARP_DB=${{ fromJson(steps.analysis.outputs.db-locations).csharp }} if [[ ! -d $CSHARP_DB ]] || [[ ! $CSHARP_DB == ${{ runner.temp }}/customDbLocation/* ]]; then echo "Did not create a database for C Sharp, or created it in the wrong location." exit 1 fi GO_DB=${{ fromJson(steps.analysis.outputs.db-locations).go }} if [[ ! -d $GO_DB ]] || [[ ! $GO_DB == ${{ runner.temp }}/customDbLocation/* ]]; then echo "Did not create a database for Go, or created it in the wrong location." exit 1 fi JAVA_DB=${{ fromJson(steps.analysis.outputs.db-locations).java }} if [[ ! -d $JAVA_DB ]] || [[ ! $JAVA_DB == ${{ runner.temp }}/customDbLocation/* ]]; then echo "Did not create a database for Java, or created it in the wrong location." exit 1 fi JAVASCRIPT_DB=${{ fromJson(steps.analysis.outputs.db-locations).javascript }} if [[ ! -d $JAVASCRIPT_DB ]] || [[ ! $JAVASCRIPT_DB == ${{ runner.temp }}/customDbLocation/* ]]; then echo "Did not create a database for Javascript, or created it in the wrong location." exit 1 fi PYTHON_DB=${{ fromJson(steps.analysis.outputs.db-locations).python }} if [[ ! -d $PYTHON_DB ]] || [[ ! $PYTHON_DB == ${{ runner.temp }}/customDbLocation/* ]]; then echo "Did not create a database for Python, or created it in the wrong location." exit 1 fi RUBY_DB=${{ fromJson(steps.analysis.outputs.db-locations).ruby }} if [[ ! -d $RUBY_DB ]] || [[ ! $RUBY_DB == ${{ runner.temp }}/customDbLocation/* ]]; then echo "Did not create a database for Ruby, or created it in the wrong location." exit 1 fi - name: Check language autodetect for Swift on macOS if: runner.os == 'macOS' run: | SWIFT_DB=${{ fromJson(steps.analysis.outputs.db-locations).swift }} if [[ ! -d $SWIFT_DB ]] || [[ ! $SWIFT_DB == ${{ runner.temp }}/customDbLocation/* ]]; then echo "Did not create a database for Swift, or created it in the wrong location." exit 1 fi env: CODEQL_ACTION_CLEANUP_TOOLCACHE_BUNDLES: true CODEQL_ACTION_RESOLVE_SUPPORTED_LANGUAGES_USING_CLI: true CODEQL_ACTION_TEST_MODE: true overlay-init-fallback: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: nightly-latest name: Overlay database init fallback if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: languages: actions # Any language without overlay support will do tools: ${{ steps.prepare-test.outputs.tools-url }} env: CODEQL_OVERLAY_DATABASE_MODE: overlay-base - uses: ./../action/analyze id: analysis with: upload-database: false - name: Check database run: | cd "$RUNNER_TEMP/codeql_databases/actions" if ! grep -q 'overlayBaseDatabase: false' codeql-database.yml ; then echo "This test needs to be updated to use a non-overlay language." exit 1 fi env: CODEQL_ACTION_TEST_MODE: true packaging-codescanning-config-inputs-js: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: default - os: ubuntu-latest version: nightly-latest name: 'Packaging: Config and input passed to the CLI' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Install Node.js uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 20.x cache: npm - name: Install newer npm run: npm install -g npm@11.19.1 - name: Install dependencies run: npm ci - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: config-file: '.github/codeql/codeql-config-packaging3.yml' packs: +codeql-testing/codeql-pack1@1.0.0 languages: javascript tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Build code run: ./build.sh - uses: ./../action/analyze with: output: '${{ runner.temp }}/results' upload-database: false - name: Check results uses: ./../action/.github/actions/check-sarif with: sarif-file: ${{ runner.temp }}/results/javascript.sarif queries-run: javascript/example/empty-or-one-block,javascript/example/empty-or-one-block,javascript/example/other-query-block,javascript/example/two-block queries-not-run: foo,bar - name: Assert Results run: | cd "$RUNNER_TEMP/results" # We should have 4 hits from these rules EXPECTED_RULES="javascript/example/empty-or-one-block javascript/example/empty-or-one-block javascript/example/other-query-block javascript/example/two-block" # use tr to replace newlines with spaces and xargs to trim leading and trailing whitespace RULES="$(cat javascript.sarif | jq -r '.runs[0].results[].ruleId' | sort | tr "\n\r" " " | xargs)" echo "Found matching rules '$RULES'" if [ "$RULES" != "$EXPECTED_RULES" ]; then echo "Did not match expected rules '$EXPECTED_RULES'." exit 1 fi env: CODEQL_ACTION_TEST_MODE: true packaging-config-inputs-js: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: default - os: ubuntu-latest version: nightly-latest name: 'Packaging: Config and input' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Install Node.js uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 20.x cache: npm - name: Install newer npm run: npm install -g npm@11.19.1 - name: Install dependencies run: npm ci - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: config-file: '.github/codeql/codeql-config-packaging3.yml' packs: +codeql-testing/codeql-pack1@1.0.0 languages: javascript tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Build code run: ./build.sh - uses: ./../action/analyze with: output: '${{ runner.temp }}/results' upload-database: false - name: Check results uses: ./../action/.github/actions/check-sarif with: sarif-file: ${{ runner.temp }}/results/javascript.sarif queries-run: javascript/example/empty-or-one-block,javascript/example/empty-or-one-block,javascript/example/other-query-block,javascript/example/two-block queries-not-run: foo,bar - name: Assert Results run: | cd "$RUNNER_TEMP/results" # We should have 4 hits from these rules EXPECTED_RULES="javascript/example/empty-or-one-block javascript/example/empty-or-one-block javascript/example/other-query-block javascript/example/two-block" # use tr to replace newlines with spaces and xargs to trim leading and trailing whitespace RULES="$(cat javascript.sarif | jq -r '.runs[0].results[].ruleId' | sort | tr "\n\r" " " | xargs)" echo "Found matching rules '$RULES'" if [ "$RULES" != "$EXPECTED_RULES" ]; then echo "Did not match expected rules '$EXPECTED_RULES'." exit 1 fi env: CODEQL_ACTION_TEST_MODE: true packaging-config-js: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: default - os: ubuntu-latest version: nightly-latest name: 'Packaging: Config file' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Install Node.js uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 20.x cache: npm - name: Install newer npm run: npm install -g npm@11.19.1 - name: Install dependencies run: npm ci - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: config-file: '.github/codeql/codeql-config-packaging.yml' languages: javascript tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Build code run: ./build.sh - uses: ./../action/analyze with: output: '${{ runner.temp }}/results' upload-database: false - name: Check results uses: ./../action/.github/actions/check-sarif with: sarif-file: ${{ runner.temp }}/results/javascript.sarif queries-run: javascript/example/empty-or-one-block,javascript/example/empty-or-one-block,javascript/example/other-query-block,javascript/example/two-block queries-not-run: foo,bar - name: Assert Results run: | cd "$RUNNER_TEMP/results" # We should have 4 hits from these rules EXPECTED_RULES="javascript/example/empty-or-one-block javascript/example/empty-or-one-block javascript/example/other-query-block javascript/example/two-block" # use tr to replace newlines with spaces and xargs to trim leading and trailing whitespace RULES="$(cat javascript.sarif | jq -r '.runs[0].results[].ruleId' | sort | tr "\n\r" " " | xargs)" echo "Found matching rules '$RULES'" if [ "$RULES" != "$EXPECTED_RULES" ]; then echo "Did not match expected rules '$EXPECTED_RULES'." exit 1 fi env: CODEQL_ACTION_TEST_MODE: true packaging-inputs-js: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: default - os: ubuntu-latest version: nightly-latest name: 'Packaging: Action input' if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Install Node.js uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 20.x cache: npm - name: Install newer npm run: npm install -g npm@11.19.1 - name: Install dependencies run: npm ci - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: config-file: '.github/codeql/codeql-config-packaging2.yml' languages: javascript packs: codeql-testing/codeql-pack1@1.0.0, codeql-testing/codeql-pack2, codeql-testing/codeql-pack3:other-query.ql tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Build code run: ./build.sh - uses: ./../action/analyze with: output: '${{ runner.temp }}/results' - name: Check results uses: ./../action/.github/actions/check-sarif with: sarif-file: ${{ runner.temp }}/results/javascript.sarif queries-run: javascript/example/empty-or-one-block,javascript/example/empty-or-one-block,javascript/example/other-query-block,javascript/example/two-block queries-not-run: foo,bar - name: Assert Results run: | cd "$RUNNER_TEMP/results" # We should have 4 hits from these rules EXPECTED_RULES="javascript/example/empty-or-one-block javascript/example/empty-or-one-block javascript/example/other-query-block javascript/example/two-block" # use tr to replace newlines with spaces and xargs to trim leading and trailing whitespace RULES="$(cat javascript.sarif | jq -r '.runs[0].results[].ruleId' | sort | tr "\n\r" " " | xargs)" echo "Found matching rules '$RULES'" if [ "$RULES" != "$EXPECTED_RULES" ]; then echo "Did not match expected rules '$EXPECTED_RULES'." exit 1 fi env: CODEQL_ACTION_TEST_MODE: true per-language-bundle-validation: needs: - pr-checks strategy: fail-fast: false matrix: include: - language: actions os: ubuntu-latest version: nightly-latest expected-extractors: actions javascript - language: cpp os: ubuntu-latest version: nightly-latest build-mode: manual build-command: gcc -o main main.c - language: csharp os: ubuntu-latest version: nightly-latest build-mode: none - language: go os: ubuntu-latest version: nightly-latest build-mode: autobuild - language: java os: ubuntu-latest version: nightly-latest build-mode: none - language: javascript os: ubuntu-latest version: nightly-latest - language: python os: ubuntu-latest version: nightly-latest - language: ruby os: ubuntu-latest version: nightly-latest - language: rust os: ubuntu-latest version: nightly-latest - language: swift os: macos-latest-xlarge version: nightly-latest build-mode: autobuild name: Per-language bundles if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init id: init with: languages: ${{ matrix.language }} build-mode: ${{ matrix['build-mode'] }} tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Check that the bundle contains only the expected extractors env: CODEQL_PATH: ${{ steps.init.outputs.codeql-path }} LANGUAGE: ${{ matrix.language }} EXPECTED_EXTRACTORS: ${{ matrix['expected-extractors'] || matrix.language }} run: | extractors="$("$CODEQL_PATH" resolve languages --format=json | jq -r 'keys[]')" echo "Extractors in the bundle:" echo "$extractors" echo "Expected: $EXPECTED_EXTRACTORS" for expected in $EXPECTED_EXTRACTORS; do if ! echo "$extractors" | grep -qx "$expected"; then echo "::error::The ${LANGUAGE} bundle does not contain the ${expected} extractor." exit 1 fi done # If the bundle contained extractors beyond those the language needs, then it would not # have been trimmed, and this job would be silently validating the combined bundle. for other in actions cpp csharp go java javascript python ruby rust swift; do if echo "$EXPECTED_EXTRACTORS" | grep -qw "$other"; then continue fi if echo "$extractors" | grep -qx "$other"; then echo "::error::The ${LANGUAGE} bundle also contains the ${other} extractor, so it is not trimmed." exit 1 fi done - name: Check that the bundle was not added to the toolcache env: CODEQL_PATH: ${{ steps.init.outputs.codeql-path }} run: | # A bundle that is missing most of its extractors must never be left in the toolcache, # where a later job analyzing a different language could pick it up. The runner image # ships with its own CodeQL in the toolcache, so check where this bundle was extracted to # rather than whether the toolcache contains CodeQL at all. echo "CodeQL is at $CODEQL_PATH" if [[ "$CODEQL_PATH" == "$RUNNER_TOOL_CACHE"/* ]]; then echo "::error::The per-language bundle was added to the toolcache at $CODEQL_PATH." exit 1 fi if [[ "$CODEQL_PATH" != "$RUNNER_TEMP"/* ]]; then echo "::error::Expected the per-language bundle to be extracted under $RUNNER_TEMP, but found it at $CODEQL_PATH." exit 1 fi - name: Build code if: matrix['build-command'] run: ${{ matrix['build-command'] }} - uses: ./../action/analyze id: analysis with: upload-database: false - name: Check that a database was created for the language env: DB_LOCATIONS: ${{ steps.analysis.outputs.db-locations }} LANGUAGE: ${{ matrix.language }} run: | database="$(echo "$DB_LOCATIONS" | jq -r --arg lang "$LANGUAGE" '.[$lang] // empty')" if [ -z "$database" ] || [ ! -d "$database" ]; then echo "::error::No CodeQL database was created for ${LANGUAGE}." echo "Databases: $DB_LOCATIONS" exit 1 fi echo "Created a ${LANGUAGE} database at ${database}." env: CODEQL_ACTION_PER_LANGUAGE_BUNDLES: true CODEQL_ACTION_TEST_MODE: true remote-config: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: nightly-latest name: Remote config file if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: tools: ${{ steps.prepare-test.outputs.tools-url }} languages: cpp,csharp,java,javascript,python config-file: ${{ github.repository }}/tests/multi-language-repo/.github/codeql/custom-queries.yml@${{ github.sha }} - name: Build code run: ./build.sh - uses: ./../action/analyze env: CODEQL_ACTION_TEST_MODE: true resolve-environment-action: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: default - os: ubuntu-latest version: nightly-latest name: Resolve environment if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: languages: go,javascript-typescript tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Resolve environment for Go uses: ./../action/resolve-environment id: resolve-environment-go with: language: go - name: Fail if Go configuration missing if: (!fromJSON(steps.resolve-environment-go.outputs.environment).configuration.go) run: exit 1 - name: Resolve environment for JavaScript/TypeScript uses: ./../action/resolve-environment id: resolve-environment-js with: language: javascript-typescript - name: Fail if JavaScript/TypeScript configuration present if: fromJSON(steps.resolve-environment-js.outputs.environment).configuration.javascript run: exit 1 env: CODEQL_ACTION_TEST_MODE: true rubocop-multi-language: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: default name: RuboCop multi-language if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Set up Ruby uses: ruby/setup-ruby@14594264cd68ce8a2345dd349bc3d138a4ef85c8 # v1.327.0 with: ruby-version: 2.6 - name: Install Code Scanning integration run: bundle add code-scanning-rubocop --version 0.3.0 --skip-install - name: Install dependencies run: bundle install - name: RuboCop run run: | bash -c " bundle exec rubocop --require code_scanning --format CodeScanning::SarifFormatter -o rubocop.sarif [[ $? -ne 2 ]] " - uses: ./../action/upload-sarif with: sarif_file: rubocop.sarif env: CODEQL_ACTION_TEST_MODE: true ruby: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: macos-latest version: linked - os: ubuntu-latest version: default - os: macos-latest version: default - os: ubuntu-latest version: nightly-latest - os: macos-latest version: nightly-latest name: Ruby analysis if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: languages: ruby tools: ${{ steps.prepare-test.outputs.tools-url }} - uses: ./../action/analyze id: analysis with: upload-database: false - name: Check database run: | RUBY_DB="${{ fromJson(steps.analysis.outputs.db-locations).ruby }}" if [[ ! -d "$RUBY_DB" ]]; then echo "Did not create a database for Ruby." exit 1 fi env: CODEQL_ACTION_TEST_MODE: true rust: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: stable-v2.19.4 - os: ubuntu-latest version: stable-v2.22.1 - os: ubuntu-latest version: linked - os: ubuntu-latest version: default - os: ubuntu-latest version: nightly-latest name: Rust analysis if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: languages: rust tools: ${{ steps.prepare-test.outputs.tools-url }} - uses: ./../action/analyze id: analysis with: upload-database: false - name: Check database run: | RUST_DB="${{ fromJson(steps.analysis.outputs.db-locations).rust }}" if [[ ! -d "$RUST_DB" ]]; then echo "Did not create a database for Rust." exit 1 fi env: CODEQL_ACTION_TEST_MODE: true split-workflow: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: macos-latest version: linked - os: ubuntu-latest version: default - os: macos-latest version: default - os: ubuntu-latest version: nightly-latest - os: macos-latest version: nightly-latest name: Split workflow if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: config-file: '.github/codeql/codeql-config-packaging3.yml' packs: +codeql-testing/codeql-pack1@1.0.0 languages: javascript tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Build code run: ./build.sh - uses: ./../action/analyze with: skip-queries: true output: '${{ runner.temp }}/results' upload-database: false - name: Assert No Results run: | if [ "$(ls -A $RUNNER_TEMP/results)" ]; then echo "Expected results directory to be empty after skipping query execution!" exit 1 fi - uses: ./../action/analyze with: output: '${{ runner.temp }}/results' upload-database: false - name: Assert Results run: | cd "$RUNNER_TEMP/results" # We should have 4 hits from these rules EXPECTED_RULES="javascript/example/empty-or-one-block javascript/example/empty-or-one-block javascript/example/other-query-block javascript/example/two-block" # use tr to replace newlines with spaces and xargs to trim leading and trailing whitespace RULES="$(cat javascript.sarif | jq -r '.runs[0].results[].ruleId' | sort | tr "\n\r" " " | xargs)" echo "Found matching rules '$RULES'" if [ "$RULES" != "$EXPECTED_RULES" ]; then echo "Did not match expected rules '$EXPECTED_RULES'." exit 1 fi env: CODEQL_ACTION_TEST_MODE: true start-proxy: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: macos-latest version: linked - os: windows-latest version: linked name: Start proxy if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Setup proxy for registries id: proxy uses: ./../action/start-proxy with: language: java registry_secrets: | [ { "type": "maven_repository", "url": "https://repo.maven.apache.org/maven2/" }, { "type": "maven_repository", "url": "https://repo1.maven.org/maven2" } ] - name: Print proxy outputs run: | echo "${{ steps.proxy.outputs.proxy_host }}" echo "${{ steps.proxy.outputs.proxy_port }}" echo "${{ steps.proxy.outputs.proxy_urls }}" - name: Fail if proxy outputs are not set if: (!steps.proxy.outputs.proxy_host) || (!steps.proxy.outputs.proxy_port) || (!steps.proxy.outputs.proxy_ca_certificate) || (!steps.proxy.outputs.proxy_urls) run: exit 1 - name: Fail if proxy_urls does not contain all registries if: | join(fromJSON(steps.proxy.outputs.proxy_urls)[*].type, ',') != 'maven_repository,maven_repository' || !contains(steps.proxy.outputs.proxy_urls, 'https://repo.maven.apache.org/maven2/') || !contains(steps.proxy.outputs.proxy_urls, 'https://repo1.maven.org/maven2') run: exit 1 - uses: ./../action/init env: CODEQL_PROXY_HOST: ${{ steps.proxy.outputs.proxy_host }} CODEQL_PROXY_PORT: ${{ steps.proxy.outputs.proxy_port }} CODEQL_PROXY_CA_CERTIFICATE: ${{ steps.proxy.outputs.proxy_ca_certificate }} with: languages: java tools: ${{ steps.prepare-test.outputs.tools-url }} config-file: codeql-action@main:tests/multi-language-repo/.github/codeql/custom-queries.yml env: CODEQL_ACTION_PROXY_API_REQUESTS: 'true' CODEQL_ACTION_TEST_MODE: true submit-sarif-failure: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: default - os: ubuntu-latest version: nightly-latest name: Submit SARIF after failure if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: write timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: ./init with: languages: javascript tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Fail # We want this job to pass if the Action correctly uploads the SARIF file for # the failed run. # Setting this step to continue on error means that it is marked as completing # successfully, so will not fail the job. continue-on-error: true run: exit 1 - uses: ./analyze # In a real workflow, this step wouldn't run. Since we used `continue-on-error` # above, we manually disable it with an `if` condition. if: false with: category: '/test-codeql-version:${{ matrix.version }}' env: CODEQL_ACTION_EXPECT_UPLOAD_FAILED_SARIF: true CODEQL_ACTION_UPLOAD_FAILED_SARIF: true CODEQL_ACTION_TEST_MODE: false CODEQL_ACTION_TESTING_ENVIRONMENT: codeql-action-pr-checks swift-autobuild: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: macos-latest-xlarge version: nightly-latest name: Swift analysis using autobuild if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init id: init with: languages: swift build-mode: autobuild tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Check working directory run: pwd - uses: ./../action/autobuild timeout-minutes: 30 - uses: ./../action/analyze id: analysis with: upload-database: false - name: Check database run: | SWIFT_DB="${{ fromJson(steps.analysis.outputs.db-locations).swift }}" if [[ ! -d "$SWIFT_DB" ]]; then echo "Did not create a database for Swift." exit 1 fi env: CODEQL_ACTION_TEST_MODE: true swift-custom-build: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: macos-latest-xlarge version: linked - os: macos-latest-xlarge version: default - os: macos-latest-xlarge version: nightly-latest name: Swift analysis using a custom build command if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init id: init with: languages: swift tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Check working directory run: pwd - name: Build code run: ./build.sh - uses: ./../action/analyze id: analysis with: upload-database: false - name: Check database run: | SWIFT_DB="${{ fromJson(steps.analysis.outputs.db-locations).swift }}" if [[ ! -d "$SWIFT_DB" ]]; then echo "Did not create a database for Swift." exit 1 fi env: DOTNET_GENERATE_ASPNET_CERTIFICATE: 'false' CODEQL_ACTION_TEST_MODE: true unset-environment: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked - os: ubuntu-latest version: nightly-latest name: Test unsetting environment variables if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init id: init with: db-location: ${{ runner.temp }}/customDbLocation # Swift is not supported on Ubuntu so we manually exclude it from the list here languages: cpp,csharp,go,java,javascript,python,ruby tools: ${{ steps.prepare-test.outputs.tools-url }} - name: Build code run: env -i PATH="$PATH" HOME="$HOME" ./build.sh - uses: ./../action/analyze id: analysis with: upload-database: false - run: | CPP_DB="${{ fromJson(steps.analysis.outputs.db-locations).cpp }}" if [[ ! -d "$CPP_DB" ]] || [[ ! "$CPP_DB" == "${RUNNER_TEMP}/customDbLocation/cpp" ]]; then echo "::error::Did not create a database for CPP, or created it in the wrong location." \ "Expected location was '${RUNNER_TEMP}/customDbLocation/cpp' but actual was '${CPP_DB}'" exit 1 fi CSHARP_DB="${{ fromJson(steps.analysis.outputs.db-locations).csharp }}" if [[ ! -d "$CSHARP_DB" ]] || [[ ! "$CSHARP_DB" == "${RUNNER_TEMP}/customDbLocation/csharp" ]]; then echo "::error::Did not create a database for C Sharp, or created it in the wrong location." \ "Expected location was '${RUNNER_TEMP}/customDbLocation/csharp' but actual was '${CSHARP_DB}'" exit 1 fi GO_DB="${{ fromJson(steps.analysis.outputs.db-locations).go }}" if [[ ! -d "$GO_DB" ]] || [[ ! "$GO_DB" == "${RUNNER_TEMP}/customDbLocation/go" ]]; then echo "::error::Did not create a database for Go, or created it in the wrong location." \ "Expected location was '${RUNNER_TEMP}/customDbLocation/go' but actual was '${GO_DB}'" exit 1 fi JAVA_DB="${{ fromJson(steps.analysis.outputs.db-locations).java }}" if [[ ! -d "$JAVA_DB" ]] || [[ ! "$JAVA_DB" == "${RUNNER_TEMP}/customDbLocation/java" ]]; then echo "::error::Did not create a database for Java, or created it in the wrong location." \ "Expected location was '${RUNNER_TEMP}/customDbLocation/java' but actual was '${JAVA_DB}'" exit 1 fi JAVASCRIPT_DB="${{ fromJson(steps.analysis.outputs.db-locations).javascript }}" if [[ ! -d "$JAVASCRIPT_DB" ]] || [[ ! "$JAVASCRIPT_DB" == "${RUNNER_TEMP}/customDbLocation/javascript" ]]; then echo "::error::Did not create a database for Javascript, or created it in the wrong location." \ "Expected location was '${RUNNER_TEMP}/customDbLocation/javascript' but actual was '${JAVASCRIPT_DB}'" exit 1 fi PYTHON_DB="${{ fromJson(steps.analysis.outputs.db-locations).python }}" if [[ ! -d "$PYTHON_DB" ]] || [[ ! "$PYTHON_DB" == "${RUNNER_TEMP}/customDbLocation/python" ]]; then echo "::error::Did not create a database for Python, or created it in the wrong location." \ "Expected location was '${RUNNER_TEMP}/customDbLocation/python' but actual was '${PYTHON_DB}'" exit 1 fi env: CODEQL_ACTION_TEST_MODE: true upload-ref-sha-input: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: default name: "Upload-sarif: 'ref' and 'sha' from inputs" if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: tools: ${{ steps.prepare-test.outputs.tools-url }} languages: cpp,csharp,java,javascript,python config-file: ${{ github.repository }}/tests/multi-language-repo/.github/codeql/custom-queries.yml@${{ github.sha }} - name: Build code run: ./build.sh # Generate some SARIF we can upload with the upload-sarif step - uses: ./../action/analyze with: ref: 'refs/heads/main' sha: '5e235361806c361d4d3f8859e3c897658025a9a2' upload: never - uses: ./../action/upload-sarif with: ref: 'refs/heads/main' sha: '5e235361806c361d4d3f8859e3c897658025a9a2' env: CODEQL_ACTION_TEST_MODE: true upload-sarif: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: default analysis-kinds: code-scanning - os: ubuntu-latest version: default analysis-kinds: code-quality - os: ubuntu-latest version: default analysis-kinds: code-scanning,code-quality name: Test different uses of `upload-sarif` if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - uses: ./../action/init with: tools: ${{ steps.prepare-test.outputs.tools-url }} languages: csharp,java,javascript,python analysis-kinds: ${{ matrix.analysis-kinds }} - name: Build code run: ./build.sh # Generate some SARIF we can upload with the upload-sarif step - uses: ./../action/analyze with: ref: 'refs/heads/main' sha: '5e235361806c361d4d3f8859e3c897658025a9a2' upload: never output: ${{ runner.temp }}/results - name: | Upload all SARIF files for `analysis-kinds: ${{ matrix.analysis-kinds }}` uses: ./../action/upload-sarif id: upload-sarif with: ref: 'refs/heads/main' sha: '5e235361806c361d4d3f8859e3c897658025a9a2' sarif_file: ${{ runner.temp }}/results category: | ${{ github.workflow }}:upload-sarif/analysis-kinds:${{ matrix.analysis-kinds }}/os:${{ matrix.os }}/version:${{ matrix.version }}/test:all-files/ - name: 'Fail for missing output from `upload-sarif` step for `code-scanning`' if: contains(matrix.analysis-kinds, 'code-scanning') && !(fromJSON(steps.upload-sarif.outputs.sarif-ids).code-scanning) run: exit 1 - name: 'Fail for missing output from `upload-sarif` step for `code-quality`' if: contains(matrix.analysis-kinds, 'code-quality') && !(fromJSON(steps.upload-sarif.outputs.sarif-ids).code-quality) run: exit 1 - name: Upload single SARIF file for Code Scanning uses: ./../action/upload-sarif id: upload-single-sarif-code-scanning if: contains(matrix.analysis-kinds, 'code-scanning') with: ref: 'refs/heads/main' sha: '5e235361806c361d4d3f8859e3c897658025a9a2' sarif_file: ${{ runner.temp }}/results/javascript.sarif category: | ${{ github.workflow }}:upload-sarif/analysis-kinds:${{ matrix.analysis-kinds }}/os:${{ matrix.os }}/version:${{ matrix.version }}/test:single-code-scanning/ - name: 'Fail for missing output from `upload-single-sarif-code-scanning` step' if: contains(matrix.analysis-kinds, 'code-scanning') && !(fromJSON(steps.upload-single-sarif-code-scanning.outputs.sarif-ids).code-scanning) run: exit 1 - name: Upload single SARIF file for Code Quality uses: ./../action/upload-sarif id: upload-single-sarif-code-quality if: contains(matrix.analysis-kinds, 'code-quality') with: ref: 'refs/heads/main' sha: '5e235361806c361d4d3f8859e3c897658025a9a2' sarif_file: ${{ runner.temp }}/results/javascript.quality.sarif category: | ${{ github.workflow }}:upload-sarif/analysis-kinds:${{ matrix.analysis-kinds }}/os:${{ matrix.os }}/version:${{ matrix.version }}/test:single-code-quality/ - name: 'Fail for missing output from `upload-single-sarif-code-quality` step' if: contains(matrix.analysis-kinds, 'code-quality') && !(fromJSON(steps.upload-single-sarif-code-quality.outputs.sarif-ids).code-quality) run: exit 1 - name: Change SARIF file extension if: contains(matrix.analysis-kinds, 'code-scanning') run: mv ${{ runner.temp }}/results/javascript.sarif ${{ runner.temp }}/results/javascript.sarif.json - name: Upload single non-`.sarif` file uses: ./../action/upload-sarif id: upload-single-non-sarif if: contains(matrix.analysis-kinds, 'code-scanning') with: ref: 'refs/heads/main' sha: '5e235361806c361d4d3f8859e3c897658025a9a2' sarif_file: ${{ runner.temp }}/results/javascript.sarif.json category: | ${{ github.workflow }}:upload-sarif/analysis-kinds:${{ matrix.analysis-kinds }}/os:${{ matrix.os }}/version:${{ matrix.version }}/test:non-sarif/ - name: 'Fail for missing output from `upload-single-non-sarif` step' if: contains(matrix.analysis-kinds, 'code-scanning') && !(fromJSON(steps.upload-single-non-sarif.outputs.sarif-ids).code-scanning) run: exit 1 env: CODEQL_ACTION_TEST_MODE: true with-checkout-path: needs: - pr-checks strategy: fail-fast: false matrix: include: - os: ubuntu-latest version: linked name: Use a custom `checkout_path` if: github.triggering_actor != 'dependabot[bot]' permissions: contents: read security-events: read timeout-minutes: 45 runs-on: ${{ matrix.os }} steps: # This ensures we don't accidentally use the original checkout for any part of the test. - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Delete original checkout run: | # delete the original checkout so we don't accidentally use it. # Actions does not support deleting the current working directory, so we # delete the contents of the directory instead. rm -rf ./* .github .git # Check out the actions repo again, but at a different location. # choose an arbitrary SHA so that we can later test that the commit_oid is not from main - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: 474bbf07f9247ffe1856c6a0f94aeeb10e7afee6 path: x/y/z/some-path - uses: ./../action/init with: tools: ${{ steps.prepare-test.outputs.tools-url }} # it's enough to test one compiled language and one interpreted language languages: csharp,javascript source-root: x/y/z/some-path/tests/multi-language-repo - name: Build code working-directory: x/y/z/some-path/tests/multi-language-repo run: | ./build.sh - uses: ./../action/analyze with: checkout_path: x/y/z/some-path/tests/multi-language-repo ref: v1.1.0 sha: 474bbf07f9247ffe1856c6a0f94aeeb10e7afee6 - name: Verify SARIF after upload run: | PAYLOAD_FILE="$RUNNER_TEMP/payload-code-scanning.json" EXPECTED_COMMIT_OID="474bbf07f9247ffe1856c6a0f94aeeb10e7afee6" EXPECTED_REF="v1.1.0" EXPECTED_CHECKOUT_URI_SUFFIX="/x/y/z/some-path/tests/multi-language-repo" ACTUAL_COMMIT_OID="$(cat "$PAYLOAD_FILE" | jq -r .commit_oid)" ACTUAL_REF="$(cat "$PAYLOAD_FILE" | jq -r .ref)" ACTUAL_CHECKOUT_URI="$(cat "$PAYLOAD_FILE" | jq -r .checkout_uri)" if [[ "$EXPECTED_COMMIT_OID" != "$ACTUAL_COMMIT_OID" ]]; then echo "::error Invalid commit oid. Expected: $EXPECTED_COMMIT_OID Actual: $ACTUAL_COMMIT_OID" echo "$PAYLOAD_FILE" exit 1 fi if [[ "$EXPECTED_REF" != "$ACTUAL_REF" ]]; then echo "::error Invalid ref. Expected: '$EXPECTED_REF' Actual: '$ACTUAL_REF'" echo "$PAYLOAD_FILE" exit 1 fi if [[ "$ACTUAL_CHECKOUT_URI" != *$EXPECTED_CHECKOUT_URI_SUFFIX ]]; then echo "::error Invalid checkout URI suffix. Expected suffix: $EXPECTED_CHECKOUT_URI_SUFFIX Actual uri: $ACTUAL_CHECKOUT_URI" echo "$PAYLOAD_FILE" exit 1 fi env: CODEQL_ACTION_TEST_MODE: true concurrency: cancel-in-progress: ${{ github.event_name == 'pull_request' || false }} group: pr-${{github.ref}}-${{inputs.dotnet-version}}-${{inputs.go-version}}-${{inputs.java-version}}