mirror of
https://github.com/github/codeql-action.git
synced 2026-08-05 04:57:19 -05:00
Compare commits
181 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4869139f44 | |||
| 712b51a568 | |||
| 0d61442a70 | |||
| c4b6a67406 | |||
| 90b2d28dad | |||
| 1314d3d17e | |||
| f7f9d3f341 | |||
| eb5bd2d0b9 | |||
| 9aa0515f67 | |||
| 0720e13f0b | |||
| 38ba96d2aa | |||
| 679da45cc3 | |||
| d5dd165f8b | |||
| fbf75ebd7b | |||
| 6a50972d16 | |||
| 5cb12c41c2 | |||
| e8f487178f | |||
| a0671be58e | |||
| 9ea34c5169 | |||
| 9fda641d8d | |||
| b126facd4e | |||
| 835dadecbf | |||
| a02edfe319 | |||
| 173919c9d5 | |||
| 6095dc4d51 | |||
| b333fc6f5b | |||
| 60b658ed10 | |||
| e4e324705e | |||
| faf7a50b01 | |||
| 2591c2031f | |||
| 34cae51104 | |||
| 9308bcd6bb | |||
| fa9b76ac37 | |||
| 6059a66dec | |||
| cb4fc9e8db | |||
| be82188a2a | |||
| c656a11252 | |||
| bd9f639752 | |||
| 0a0c3a2e09 | |||
| 46a8de52fc | |||
| f8cea24201 | |||
| b1993d9139 | |||
| ee1e1399e2 | |||
| e7d3af2e1e | |||
| 13a6d8be95 | |||
| b20883b0cd | |||
| bf20b3e07b | |||
| f1aa4f497a | |||
| 9a55d5bc5f | |||
| 17cd475099 | |||
| c9aa45dd0f | |||
| e3b8227a28 | |||
| 8a01181ce2 | |||
| 80e142568f | |||
| b748848f27 | |||
| 5e767eff5a | |||
| 9752869470 | |||
| c62c214723 | |||
| 18c2cfc765 | |||
| 1996ca9f5d | |||
| 12c4c7d0e9 | |||
| 25a224b808 | |||
| 919e8aaa40 | |||
| 4918026b93 | |||
| e8c164b902 | |||
| 3657da1eac | |||
| 605d404db0 | |||
| efea9cca02 | |||
| 9fccf271ff | |||
| c12cf8d49a | |||
| 0fcbec3eec | |||
| 0ae8b05d08 | |||
| 49cdf744d9 | |||
| aac4202424 | |||
| e7ece62b96 | |||
| d9e374ef85 | |||
| f4b47e7013 | |||
| 4e14537b54 | |||
| e142eee9b4 | |||
| dcd1b12beb | |||
| 55252c7a3a | |||
| 7381f9750d | |||
| 6e162a0930 | |||
| 19b2f06db2 | |||
| 03afde035d | |||
| 9469107033 | |||
| 1601acf88b | |||
| fba78720ca | |||
| a8dd5ab7a4 | |||
| 28bfb7b7b5 | |||
| 91f3460006 | |||
| edebb7861e | |||
| 529c266223 | |||
| 6bd84b6a82 | |||
| 5e98e18a17 | |||
| 229e0cd749 | |||
| 14bd76753f | |||
| b715292b74 | |||
| 7c72e12ecb | |||
| b5bb69ad4b | |||
| 1c4c0b36be | |||
| bc75091173 | |||
| dc2428c879 | |||
| cb2dd2ed29 | |||
| 9e2fa7419d | |||
| 6a02be43ee | |||
| e19f95e73f | |||
| 4325937dc6 | |||
| d5b3d42fd4 | |||
| 417a8c2176 | |||
| fa03060d60 | |||
| f58cb3d53e | |||
| 51975ff7b7 | |||
| 32d41f36fe | |||
| d60bbdfd70 | |||
| 93a99bf571 | |||
| dce83e1c1e | |||
| ec4eda1b42 | |||
| 1df1c9f85d | |||
| 9483bd5a7f | |||
| b880a1a7bd | |||
| 5ac04769eb | |||
| 1ac62705ed | |||
| 9a57e78a04 | |||
| 7e96d45489 | |||
| 13eb1818b9 | |||
| f950f7f442 | |||
| 69173ea009 | |||
| a886c30690 | |||
| 044ff10e29 | |||
| 84edfc05fa | |||
| df0cc0ca39 | |||
| 24f1cbdafb | |||
| 8881a4160f | |||
| 1191c09db6 | |||
| 90f4ffcc7e | |||
| 03e3f60d99 | |||
| 778f83ff16 | |||
| 75716abfa3 | |||
| ebffc48bf5 | |||
| d51b375a03 | |||
| 3a7caafd73 | |||
| 4d4ae1fbe8 | |||
| 064fafeb49 | |||
| a7783c507b | |||
| 0d94aab48f | |||
| 1ec7dd2bc4 | |||
| 1b4c62b79d | |||
| 4bd7556a48 | |||
| 7beb64218a | |||
| 546ea07303 | |||
| 9c3f69d7a3 | |||
| 5f5c095469 | |||
| c7d0b92094 | |||
| 055e6b6f36 | |||
| 644e2b9bd7 | |||
| 02b2c55c51 | |||
| 1782089bde | |||
| 6c5e0ea335 | |||
| c99e493099 | |||
| f687ebf1c9 | |||
| 070e2a5f21 | |||
| fb650c22f9 | |||
| 21c5dc0f33 | |||
| bdabb8f1bc | |||
| 39105f35da | |||
| dc7e2ff87d | |||
| 642eca368e | |||
| e20d24fb28 | |||
| f301585a01 | |||
| c8914af920 | |||
| a2d9de63c2 | |||
| 4672d7807f | |||
| be6e3c4480 | |||
| 79939d8ca5 | |||
| d32cd4ddde | |||
| d6efb85cdf | |||
| b4db38273c | |||
| 846f8590dc | |||
| 3eaf00092b | |||
| 1512f400b3 |
@@ -4,13 +4,14 @@ updates:
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
cooldown:
|
||||
default-days: 7
|
||||
exclude:
|
||||
- "@actions/*"
|
||||
labels:
|
||||
- Rebuild
|
||||
# Ignore incompatible dependency updates
|
||||
ignore:
|
||||
# There is a type incompatibility issue between v0.0.9 and our other dependencies.
|
||||
- dependency-name: "@octokit/plugin-retry"
|
||||
versions: ["~6.0.0"]
|
||||
# This is broken due to the way configuration files have changed.
|
||||
# This might be fixed when we move to eslint v9.
|
||||
- dependency-name: "eslint-plugin-import"
|
||||
@@ -28,6 +29,10 @@ updates:
|
||||
- "/.github/actions"
|
||||
schedule:
|
||||
interval: weekly
|
||||
cooldown:
|
||||
default-days: 7
|
||||
exclude:
|
||||
- "actions/*"
|
||||
labels:
|
||||
- Rebuild
|
||||
groups:
|
||||
|
||||
+3
-2
@@ -48,8 +48,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
all-platform-bundle-${{github.ref}}-${{inputs.go-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
all-platform-bundle:
|
||||
strategy:
|
||||
|
||||
+3
-2
@@ -58,8 +58,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
analyze-ref-input-${{github.ref}}-${{inputs.go-version}}-${{inputs.python-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
analyze-ref-input:
|
||||
strategy:
|
||||
|
||||
Generated
+2
-2
@@ -38,8 +38,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: autobuild-action-${{github.ref}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
autobuild-action:
|
||||
strategy:
|
||||
|
||||
@@ -38,8 +38,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
autobuild-direct-tracing-with-working-dir-${{github.ref}}-${{inputs.java-version}}
|
||||
jobs:
|
||||
autobuild-direct-tracing-with-working-dir:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: autobuild-working-dir-${{github.ref}}
|
||||
jobs:
|
||||
autobuild-working-dir:
|
||||
strategy:
|
||||
|
||||
+10
-7
@@ -38,8 +38,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: build-mode-autobuild-${{github.ref}}-${{inputs.java-version}}
|
||||
jobs:
|
||||
build-mode-autobuild:
|
||||
strategy:
|
||||
@@ -76,6 +76,14 @@ jobs:
|
||||
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: Set up Java test repo configuration
|
||||
run: |
|
||||
mv * .github ../action/tests/multi-language-repo/
|
||||
@@ -90,11 +98,6 @@ jobs:
|
||||
languages: java
|
||||
tools: ${{ steps.prepare-test.outputs.tools-url }}
|
||||
|
||||
- name: Install yq
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
choco install yq -y
|
||||
|
||||
- name: Validate database build mode
|
||||
run: |
|
||||
metadata_path="$RUNNER_TEMP/customDbLocation/java/codeql-database.yml"
|
||||
|
||||
+3
-2
@@ -48,8 +48,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
build-mode-manual-${{github.ref}}-${{inputs.go-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
build-mode-manual:
|
||||
strategy:
|
||||
|
||||
Generated
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: build-mode-none-${{github.ref}}
|
||||
jobs:
|
||||
build-mode-none:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: build-mode-rollback-${{github.ref}}
|
||||
jobs:
|
||||
build-mode-rollback:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: bundle-from-toolcache-${{github.ref}}
|
||||
jobs:
|
||||
bundle-from-toolcache:
|
||||
strategy:
|
||||
|
||||
Generated
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: bundle-toolcache-${{github.ref}}
|
||||
jobs:
|
||||
bundle-toolcache:
|
||||
strategy:
|
||||
|
||||
Generated
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: bundle-zstd-${{github.ref}}
|
||||
jobs:
|
||||
bundle-zstd:
|
||||
strategy:
|
||||
|
||||
Generated
+87
@@ -0,0 +1,87 @@
|
||||
# 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 Check - CCR
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GO111MODULE: auto
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- releases/v*
|
||||
pull_request:
|
||||
types:
|
||||
- opened
|
||||
- synchronize
|
||||
- reopened
|
||||
- ready_for_review
|
||||
schedule:
|
||||
- cron: '0 5 * * *'
|
||||
workflow_dispatch:
|
||||
inputs: {}
|
||||
workflow_call:
|
||||
inputs: {}
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: ccr-${{github.ref}}
|
||||
jobs:
|
||||
ccr:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- os: ubuntu-latest
|
||||
version: stable-v2.17.6
|
||||
- os: ubuntu-latest
|
||||
version: stable-v2.18.4
|
||||
- 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: default
|
||||
- os: ubuntu-latest
|
||||
version: linked
|
||||
- os: ubuntu-latest
|
||||
version: nightly-latest
|
||||
name: CCR
|
||||
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@v6
|
||||
- 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
|
||||
id: analysis
|
||||
with:
|
||||
upload-database: false
|
||||
|
||||
env:
|
||||
CODEQL_ACTION_ANALYSIS_KEY: dynamic/copilot-pull-request-reviewer/codeql-action-test
|
||||
CODEQL_ACTION_TEST_MODE: true
|
||||
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: cleanup-db-cluster-dir-${{github.ref}}
|
||||
jobs:
|
||||
cleanup-db-cluster-dir:
|
||||
strategy:
|
||||
|
||||
Generated
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: config-export-${{github.ref}}
|
||||
jobs:
|
||||
config-export:
|
||||
strategy:
|
||||
|
||||
Generated
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: config-input-${{github.ref}}
|
||||
jobs:
|
||||
config-input:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: cpp-deptrace-disabled-${{github.ref}}
|
||||
jobs:
|
||||
cpp-deptrace-disabled:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: cpp-deptrace-enabled-on-macos-${{github.ref}}
|
||||
jobs:
|
||||
cpp-deptrace-enabled-on-macos:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: cpp-deptrace-enabled-${{github.ref}}
|
||||
jobs:
|
||||
cpp-deptrace-enabled:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: diagnostics-export-${{github.ref}}
|
||||
jobs:
|
||||
diagnostics-export:
|
||||
strategy:
|
||||
|
||||
+4
-2
@@ -48,8 +48,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
export-file-baseline-information-${{github.ref}}-${{inputs.go-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
export-file-baseline-information:
|
||||
strategy:
|
||||
@@ -124,5 +125,6 @@ jobs:
|
||||
fi
|
||||
done
|
||||
env:
|
||||
CODEQL_ACTION_SKIP_FILE_COVERAGE_ON_PRS: false
|
||||
CODEQL_ACTION_SUBLANGUAGE_FILE_COVERAGE: true
|
||||
CODEQL_ACTION_TEST_MODE: true
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: extractor-ram-threads-${{github.ref}}
|
||||
jobs:
|
||||
extractor-ram-threads:
|
||||
strategy:
|
||||
|
||||
Generated
+2
-14
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: global-proxy-${{github.ref}}
|
||||
jobs:
|
||||
global-proxy:
|
||||
strategy:
|
||||
@@ -48,18 +48,6 @@ jobs:
|
||||
timeout-minutes: 45
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
# These steps are required to initialise the `gh` cli in a container that doesn't
|
||||
# come pre-installed with it. The reason for that is that this is later
|
||||
# needed by the `prepare-test` workflow to find the latest release of CodeQL.
|
||||
- name: Set up GitHub CLI
|
||||
run: |
|
||||
apt update
|
||||
apt install -y curl libreadline8 gnupg2 software-properties-common zstd
|
||||
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
|
||||
apt-key add /usr/share/keyrings/githubcli-archive-keyring.gpg
|
||||
apt-add-repository https://cli.github.com/packages
|
||||
apt install -y gh
|
||||
env: {}
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v6
|
||||
- name: Prepare test
|
||||
|
||||
+3
-2
@@ -48,8 +48,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
go-custom-queries-${{github.ref}}-${{inputs.go-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
go-custom-queries:
|
||||
strategy:
|
||||
|
||||
@@ -38,8 +38,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: go-indirect-tracing-workaround-diagnostic-${{github.ref}}-${{inputs.go-version}}
|
||||
jobs:
|
||||
go-indirect-tracing-workaround-diagnostic:
|
||||
strategy:
|
||||
|
||||
@@ -38,8 +38,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
go-indirect-tracing-workaround-no-file-program-${{github.ref}}-${{inputs.go-version}}
|
||||
jobs:
|
||||
go-indirect-tracing-workaround-no-file-program:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -38,8 +38,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: go-indirect-tracing-workaround-${{github.ref}}-${{inputs.go-version}}
|
||||
jobs:
|
||||
go-indirect-tracing-workaround:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -38,8 +38,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: go-tracing-autobuilder-${{github.ref}}-${{inputs.go-version}}
|
||||
jobs:
|
||||
go-tracing-autobuilder:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -38,8 +38,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: go-tracing-custom-build-steps-${{github.ref}}-${{inputs.go-version}}
|
||||
jobs:
|
||||
go-tracing-custom-build-steps:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -38,8 +38,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: go-tracing-legacy-workflow-${{github.ref}}-${{inputs.go-version}}
|
||||
jobs:
|
||||
go-tracing-legacy-workflow:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: init-with-registries-${{github.ref}}
|
||||
jobs:
|
||||
init-with-registries:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: javascript-source-root-${{github.ref}}
|
||||
jobs:
|
||||
javascript-source-root:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: job-run-uuid-sarif-${{github.ref}}
|
||||
jobs:
|
||||
job-run-uuid-sarif:
|
||||
strategy:
|
||||
|
||||
Generated
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: language-aliases-${{github.ref}}
|
||||
jobs:
|
||||
language-aliases:
|
||||
strategy:
|
||||
|
||||
Generated
+3
-2
@@ -58,8 +58,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
local-bundle-${{github.ref}}-${{inputs.go-version}}-${{inputs.python-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
local-bundle:
|
||||
strategy:
|
||||
|
||||
+3
-2
@@ -58,8 +58,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
multi-language-autodetect-${{github.ref}}-${{inputs.go-version}}-${{inputs.python-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
multi-language-autodetect:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: overlay-init-fallback-${{github.ref}}
|
||||
jobs:
|
||||
overlay-init-fallback:
|
||||
strategy:
|
||||
|
||||
@@ -58,8 +58,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
packaging-codescanning-config-inputs-js-${{github.ref}}-${{inputs.go-version}}-${{inputs.python-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
packaging-codescanning-config-inputs-js:
|
||||
strategy:
|
||||
|
||||
+3
-2
@@ -48,8 +48,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
packaging-config-inputs-js-${{github.ref}}-${{inputs.go-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
packaging-config-inputs-js:
|
||||
strategy:
|
||||
|
||||
+3
-2
@@ -48,8 +48,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
packaging-config-js-${{github.ref}}-${{inputs.go-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
packaging-config-js:
|
||||
strategy:
|
||||
|
||||
+3
-2
@@ -48,8 +48,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
packaging-inputs-js-${{github.ref}}-${{inputs.go-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
packaging-inputs-js:
|
||||
strategy:
|
||||
|
||||
Generated
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: quality-queries-${{github.ref}}
|
||||
jobs:
|
||||
quality-queries:
|
||||
strategy:
|
||||
|
||||
Generated
+3
-2
@@ -58,8 +58,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
remote-config-${{github.ref}}-${{inputs.go-version}}-${{inputs.python-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
remote-config:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: resolve-environment-action-${{github.ref}}
|
||||
jobs:
|
||||
resolve-environment-action:
|
||||
strategy:
|
||||
|
||||
+3
-3
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: rubocop-multi-language-${{github.ref}}
|
||||
jobs:
|
||||
rubocop-multi-language:
|
||||
strategy:
|
||||
@@ -56,7 +56,7 @@ jobs:
|
||||
use-all-platform-bundle: 'false'
|
||||
setup-kotlin: 'true'
|
||||
- name: Set up Ruby
|
||||
uses: ruby/setup-ruby@4c24fa5ec04b2e79eb40571b1cee2a0d2b705771 # v1.278.0
|
||||
uses: ruby/setup-ruby@90be1154f987f4dc0fe0dd0feedac9e473aa4ba8 # v1.286.0
|
||||
with:
|
||||
ruby-version: 2.6
|
||||
- name: Install Code Scanning integration
|
||||
|
||||
Generated
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: ruby-${{github.ref}}
|
||||
jobs:
|
||||
ruby:
|
||||
strategy:
|
||||
|
||||
Generated
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: rust-${{github.ref}}
|
||||
jobs:
|
||||
rust:
|
||||
strategy:
|
||||
|
||||
Generated
+2
-2
@@ -48,8 +48,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: split-workflow-${{github.ref}}-${{inputs.go-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
split-workflow:
|
||||
strategy:
|
||||
|
||||
Generated
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: start-proxy-${{github.ref}}
|
||||
jobs:
|
||||
start-proxy:
|
||||
strategy:
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: submit-sarif-failure-${{github.ref}}
|
||||
jobs:
|
||||
submit-sarif-failure:
|
||||
strategy:
|
||||
|
||||
Generated
+2
-2
@@ -28,8 +28,8 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group: swift-autobuild-${{github.ref}}
|
||||
jobs:
|
||||
swift-autobuild:
|
||||
strategy:
|
||||
|
||||
+3
-2
@@ -48,8 +48,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
swift-custom-build-${{github.ref}}-${{inputs.go-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
swift-custom-build:
|
||||
strategy:
|
||||
|
||||
+3
-2
@@ -58,8 +58,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
unset-environment-${{github.ref}}-${{inputs.go-version}}-${{inputs.python-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
unset-environment:
|
||||
strategy:
|
||||
|
||||
+3
-2
@@ -58,8 +58,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
upload-ref-sha-input-${{github.ref}}-${{inputs.go-version}}-${{inputs.python-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
upload-ref-sha-input:
|
||||
strategy:
|
||||
|
||||
Generated
+3
-2
@@ -58,8 +58,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
upload-sarif-${{github.ref}}-${{inputs.go-version}}-${{inputs.python-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
upload-sarif:
|
||||
strategy:
|
||||
|
||||
+3
-2
@@ -58,8 +58,9 @@ defaults:
|
||||
run:
|
||||
shell: bash
|
||||
concurrency:
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || false }}
|
||||
group:
|
||||
with-checkout-path-${{github.ref}}-${{inputs.go-version}}-${{inputs.python-version}}-${{inputs.dotnet-version}}
|
||||
jobs:
|
||||
with-checkout-path:
|
||||
strategy:
|
||||
|
||||
@@ -123,9 +123,8 @@ jobs:
|
||||
- name: Prepare partial Changelog
|
||||
env:
|
||||
PARTIAL_CHANGELOG: "${{ runner.temp }}/partial_changelog.md"
|
||||
VERSION: "${{ steps.getVersion.outputs.version }}"
|
||||
run: |
|
||||
python .github/workflows/script/prepare_changelog.py CHANGELOG.md "$VERSION" > $PARTIAL_CHANGELOG
|
||||
python .github/workflows/script/prepare_changelog.py CHANGELOG.md > $PARTIAL_CHANGELOG
|
||||
|
||||
echo "::group::Partial CHANGELOG"
|
||||
cat $PARTIAL_CHANGELOG
|
||||
|
||||
@@ -127,9 +127,8 @@ jobs:
|
||||
env:
|
||||
NEW_CHANGELOG: "${{ runner.temp }}/new_changelog.md"
|
||||
PARTIAL_CHANGELOG: "${{ runner.temp }}/partial_changelog.md"
|
||||
VERSION: "${{ needs.prepare.outputs.version }}"
|
||||
run: |
|
||||
python .github/workflows/script/prepare_changelog.py $NEW_CHANGELOG "$VERSION" > $PARTIAL_CHANGELOG
|
||||
python .github/workflows/script/prepare_changelog.py $NEW_CHANGELOG > $PARTIAL_CHANGELOG
|
||||
|
||||
echo "::group::Partial CHANGELOG"
|
||||
cat $PARTIAL_CHANGELOG
|
||||
|
||||
Regular → Executable
+6
-1
@@ -1,9 +1,14 @@
|
||||
#!/usr/bin/env python3
|
||||
import os
|
||||
import re
|
||||
|
||||
cli_version = os.environ['CLI_VERSION']
|
||||
|
||||
# The GitHub Release for the new bundle version.
|
||||
bundle_release_url = f"https://github.com/github/codeql-action/releases/tag/codeql-bundle-v{cli_version}"
|
||||
# Get the PR number from the PR URL.
|
||||
pr_number = os.environ['PR_URL'].split('/')[-1]
|
||||
changelog_note = f"- Update default CodeQL bundle version to {os.environ['CLI_VERSION']}. [#{pr_number}]({os.environ['PR_URL']})"
|
||||
changelog_note = f"- Update default CodeQL bundle version to [{cli_version}]({bundle_release_url}). [#{pr_number}]({os.environ['PR_URL']})"
|
||||
|
||||
# If the "[UNRELEASED]" section starts with "no user facing changes", remove that line.
|
||||
with open('CHANGELOG.md', 'r') as f:
|
||||
|
||||
Regular → Executable
+9
-11
@@ -1,3 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
import os
|
||||
import sys
|
||||
|
||||
@@ -6,7 +7,7 @@ EMPTY_CHANGELOG = 'No changes.\n\n'
|
||||
# Prepare the changelog for the new release
|
||||
# This function will extract the part of the changelog that
|
||||
# we want to include in the new release.
|
||||
def extract_changelog_snippet(changelog_file, version_tag):
|
||||
def extract_changelog_snippet(changelog_file):
|
||||
output = ''
|
||||
if (not os.path.exists(changelog_file)):
|
||||
output = EMPTY_CHANGELOG
|
||||
@@ -15,23 +16,20 @@ def extract_changelog_snippet(changelog_file, version_tag):
|
||||
with open(changelog_file, 'r') as f:
|
||||
lines = f.readlines()
|
||||
|
||||
# Include everything up to, but excluding the second heading
|
||||
# Include only the contents of the first section
|
||||
found_first_section = False
|
||||
for i, line in enumerate(lines):
|
||||
for line in lines:
|
||||
if line.startswith('## '):
|
||||
if found_first_section:
|
||||
break
|
||||
found_first_section = True
|
||||
elif found_first_section:
|
||||
output += line
|
||||
|
||||
output += f"See the full [CHANGELOG.md](https://github.com/github/codeql-action/blob/{version_tag}/CHANGELOG.md) for more information."
|
||||
|
||||
return output
|
||||
return output.strip()
|
||||
|
||||
|
||||
if len(sys.argv) < 3:
|
||||
raise Exception('Expecting argument: changelog_file version_tag')
|
||||
if len(sys.argv) < 2:
|
||||
raise Exception('Expecting argument: changelog_file')
|
||||
changelog_file = sys.argv[1]
|
||||
version_tag = sys.argv[2]
|
||||
|
||||
print(extract_changelog_snippet(changelog_file, version_tag))
|
||||
print(extract_changelog_snippet(changelog_file))
|
||||
|
||||
@@ -57,6 +57,24 @@ jobs:
|
||||
- name: Update bundle
|
||||
uses: ./.github/actions/update-bundle
|
||||
|
||||
- name: Bump Action minor version if new CodeQL minor version series
|
||||
id: bump-action-version
|
||||
run: |
|
||||
prior_cli_version=$(jq -r '.priorCliVersion' src/defaults.json)
|
||||
cli_version=$(jq -r '.cliVersion' src/defaults.json)
|
||||
|
||||
prior_minor=$(echo "$prior_cli_version" | cut -d. -f2)
|
||||
current_minor=$(echo "$cli_version" | cut -d. -f2)
|
||||
|
||||
if [[ "$current_minor" != "$prior_minor" ]]; then
|
||||
echo "New CodeQL minor version series ($prior_cli_version -> $cli_version), bumping Action minor version"
|
||||
npm version minor --no-git-tag-version
|
||||
echo "bumped=true" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "Same minor version series ($prior_cli_version -> $cli_version), skipping Action version bump"
|
||||
echo "bumped=false" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
- name: Rebuild Action
|
||||
run: npm run build
|
||||
|
||||
@@ -71,11 +89,19 @@ jobs:
|
||||
- name: Open pull request
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
ACTION_VERSION_BUMPED: ${{ steps.bump-action-version.outputs.bumped }}
|
||||
run: |
|
||||
cli_version=$(jq -r '.cliVersion' src/defaults.json)
|
||||
action_version=$(jq -r '.version' package.json)
|
||||
|
||||
pr_body="This pull request updates the default CodeQL bundle, as used with \`tools: linked\` and on GHES, to $cli_version."
|
||||
if [[ "$ACTION_VERSION_BUMPED" == "true" ]]; then
|
||||
pr_body+=$'\n\n'"Since this is a new CodeQL minor version series, this PR also bumps the Action version to $action_version."
|
||||
fi
|
||||
|
||||
pr_url=$(gh pr create \
|
||||
--title "Update default bundle to $cli_version" \
|
||||
--body "This pull request updates the default CodeQL bundle, as used with \`tools: linked\` and on GHES, to $cli_version." \
|
||||
--body "$pr_body" \
|
||||
--assignee "$GITHUB_ACTOR" \
|
||||
--draft \
|
||||
)
|
||||
|
||||
@@ -2,6 +2,21 @@
|
||||
|
||||
See the [releases page](https://github.com/github/codeql-action/releases) for the relevant changes to the CodeQL CLI and language packs.
|
||||
|
||||
## [UNRELEASED]
|
||||
|
||||
No user facing changes.
|
||||
|
||||
## 4.32.0 - 26 Jan 2026
|
||||
|
||||
- Update default CodeQL bundle version to [2.24.0](https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.24.0). [#3425](https://github.com/github/codeql-action/pull/3425)
|
||||
|
||||
## 4.31.11 - 23 Jan 2026
|
||||
|
||||
- When running a Default Setup workflow with [Actions debugging enabled](https://docs.github.com/en/actions/how-tos/monitor-workflows/enable-debug-logging), the CodeQL Action will now use more unique names when uploading logs from the Dependabot authentication proxy as workflow artifacts. This ensures that the artifact names do not clash between multiple jobs in a build matrix. [#3409](https://github.com/github/codeql-action/pull/3409)
|
||||
- Improved error handling throughout the CodeQL Action. [#3415](https://github.com/github/codeql-action/pull/3415)
|
||||
- Added experimental support for automatically excluding [generated files](https://docs.github.com/en/repositories/working-with-files/managing-files/customizing-how-changed-files-appear-on-github) from the analysis. This feature is not currently enabled for any analysis. In the future, it may be enabled by default for some GitHub-managed analyses. [#3318](https://github.com/github/codeql-action/pull/3318)
|
||||
- The changelog extracts that are included with releases of the CodeQL Action are now shorter to avoid duplicated information from appearing in Dependabot PRs. [#3403](https://github.com/github/codeql-action/pull/3403)
|
||||
|
||||
## 4.31.10 - 12 Jan 2026
|
||||
|
||||
- Update default CodeQL bundle version to 2.23.9. [#3393](https://github.com/github/codeql-action/pull/3393)
|
||||
|
||||
+4
-1
@@ -78,7 +78,7 @@ export default [
|
||||
|
||||
typescript: {},
|
||||
},
|
||||
"import/ignore": ["sinon", "uuid", "@octokit/plugin-retry", "del", "get-folder-size"],
|
||||
"import/ignore": ["sinon", "uuid", "@octokit/plugin-retry", "del", "get-folder-size", "@actions/github"],
|
||||
},
|
||||
|
||||
rules: {
|
||||
@@ -152,9 +152,12 @@ export default [
|
||||
|
||||
rules: {
|
||||
"@typescript-eslint/no-explicit-any": "off",
|
||||
"@typescript-eslint/no-unsafe-argument": "off",
|
||||
"@typescript-eslint/no-unsafe-assignment": "off",
|
||||
"@typescript-eslint/no-unsafe-call": "off",
|
||||
"@typescript-eslint/no-unsafe-enum-comparison": "off",
|
||||
"@typescript-eslint/no-unsafe-member-access": "off",
|
||||
"@typescript-eslint/no-unsafe-return": "off",
|
||||
"@typescript-eslint/no-var-requires": "off",
|
||||
"@typescript-eslint/prefer-regexp-exec": "off",
|
||||
"@typescript-eslint/require-await": "off",
|
||||
|
||||
Generated
+29219
-9907
File diff suppressed because one or more lines are too long
Generated
+24058
-9471
File diff suppressed because one or more lines are too long
Generated
+24014
-9451
File diff suppressed because one or more lines are too long
+4
-4
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"bundleVersion": "codeql-bundle-v2.23.9",
|
||||
"cliVersion": "2.23.9",
|
||||
"priorBundleVersion": "codeql-bundle-v2.23.8",
|
||||
"priorCliVersion": "2.23.8"
|
||||
"bundleVersion": "codeql-bundle-v2.24.0",
|
||||
"cliVersion": "2.24.0",
|
||||
"priorBundleVersion": "codeql-bundle-v2.23.9",
|
||||
"priorCliVersion": "2.23.9"
|
||||
}
|
||||
|
||||
Generated
+29773
-10392
File diff suppressed because one or more lines are too long
Generated
+24950
-10210
File diff suppressed because one or more lines are too long
Generated
+24007
-9449
File diff suppressed because one or more lines are too long
Generated
+24016
-9453
File diff suppressed because one or more lines are too long
Generated
+30635
-11055
File diff suppressed because one or more lines are too long
Generated
+24099
-9487
File diff suppressed because one or more lines are too long
Generated
+23971
-9443
File diff suppressed because one or more lines are too long
Generated
+29174
-9871
File diff suppressed because one or more lines are too long
Generated
+24021
-9455
File diff suppressed because one or more lines are too long
Generated
+464
-491
File diff suppressed because it is too large
Load Diff
+10
-10
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "codeql",
|
||||
"version": "4.31.10",
|
||||
"version": "4.32.1",
|
||||
"private": true,
|
||||
"description": "CodeQL action",
|
||||
"scripts": {
|
||||
@@ -24,17 +24,17 @@
|
||||
},
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/artifact": "^5.0.1",
|
||||
"@actions/artifact": "^5.0.2",
|
||||
"@actions/artifact-legacy": "npm:@actions/artifact@^1.1.2",
|
||||
"@actions/cache": "^5.0.1",
|
||||
"@actions/core": "^2.0.1",
|
||||
"@actions/cache": "^5.0.3",
|
||||
"@actions/core": "^2.0.2",
|
||||
"@actions/exec": "^2.0.0",
|
||||
"@actions/github": "^6.0.1",
|
||||
"@actions/github": "^9.0.0",
|
||||
"@actions/glob": "^0.5.0",
|
||||
"@actions/http-client": "^3.0.0",
|
||||
"@actions/io": "^2.0.0",
|
||||
"@actions/tool-cache": "^2.0.2",
|
||||
"@octokit/plugin-retry": "^6.0.0",
|
||||
"@actions/tool-cache": "^3.0.0",
|
||||
"@octokit/plugin-retry": "^8.0.0",
|
||||
"@schemastore/package": "0.0.10",
|
||||
"archiver": "^7.0.1",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
@@ -49,7 +49,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@ava/typescript": "6.0.0",
|
||||
"@eslint/compat": "^2.0.0",
|
||||
"@eslint/compat": "^2.0.1",
|
||||
"@eslint/eslintrc": "^3.3.3",
|
||||
"@eslint/js": "^9.39.2",
|
||||
"@microsoft/eslint-formatter-sarif": "^3.1.0",
|
||||
@@ -61,7 +61,7 @@
|
||||
"@types/node-forge": "^1.3.14",
|
||||
"@types/semver": "^7.7.1",
|
||||
"@types/sinon": "^21.0.0",
|
||||
"@typescript-eslint/eslint-plugin": "^8.52.0",
|
||||
"@typescript-eslint/eslint-plugin": "^8.53.1",
|
||||
"@typescript-eslint/parser": "^8.48.0",
|
||||
"ava": "^6.4.1",
|
||||
"esbuild": "^0.27.2",
|
||||
@@ -70,7 +70,7 @@
|
||||
"eslint-plugin-filenames": "^1.3.2",
|
||||
"eslint-plugin-github": "^5.1.8",
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"eslint-plugin-jsdoc": "^61.5.0",
|
||||
"eslint-plugin-jsdoc": "^62.2.0",
|
||||
"eslint-plugin-no-async-foreach": "^0.1.1",
|
||||
"glob": "^11.1.0",
|
||||
"nock": "^14.0.10",
|
||||
|
||||
@@ -3,6 +3,7 @@ description: "An end-to-end integration test of a Java repository built using 'b
|
||||
operatingSystems: ["ubuntu", "windows"]
|
||||
versions: ["linked", "nightly-latest"]
|
||||
installJava: "true"
|
||||
installYq: "true"
|
||||
steps:
|
||||
- name: Set up Java test repo configuration
|
||||
run: |
|
||||
@@ -18,11 +19,6 @@ steps:
|
||||
languages: java
|
||||
tools: ${{ steps.prepare-test.outputs.tools-url }}
|
||||
|
||||
- name: Install yq
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
choco install yq -y
|
||||
|
||||
- name: Validate database build mode
|
||||
run: |
|
||||
metadata_path="$RUNNER_TEMP/customDbLocation/java/codeql-database.yml"
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
name: "CCR"
|
||||
description: "A standard analysis in CCR mode"
|
||||
env:
|
||||
CODEQL_ACTION_ANALYSIS_KEY: "dynamic/copilot-pull-request-reviewer/codeql-action-test"
|
||||
steps:
|
||||
- uses: ./../action/init
|
||||
id: init
|
||||
with:
|
||||
languages: javascript
|
||||
tools: ${{ steps.prepare-test.outputs.tools-url }}
|
||||
|
||||
- uses: ./../action/analyze
|
||||
id: analysis
|
||||
with:
|
||||
upload-database: false
|
||||
|
||||
@@ -5,6 +5,7 @@ versions: ["nightly-latest"]
|
||||
installGo: true
|
||||
installDotNet: true
|
||||
env:
|
||||
CODEQL_ACTION_SKIP_FILE_COVERAGE_ON_PRS: false
|
||||
CODEQL_ACTION_SUBLANGUAGE_FILE_COVERAGE: true
|
||||
steps:
|
||||
- uses: ./../action/init
|
||||
|
||||
@@ -3,19 +3,6 @@ description: "Tests using a proxy specified by the https_proxy environment varia
|
||||
versions: ["linked", "nightly-latest"]
|
||||
container:
|
||||
image: ubuntu:22.04
|
||||
container-init-steps:
|
||||
# These steps are required to initialise the `gh` cli in a container that doesn't
|
||||
# come pre-installed with it. The reason for that is that this is later
|
||||
# needed by the `prepare-test` workflow to find the latest release of CodeQL.
|
||||
name: Set up GitHub CLI
|
||||
run: |
|
||||
apt update
|
||||
apt install -y curl libreadline8 gnupg2 software-properties-common zstd
|
||||
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
|
||||
apt-key add /usr/share/keyrings/githubcli-archive-keyring.gpg
|
||||
apt-add-repository https://cli.github.com/packages
|
||||
apt install -y gh
|
||||
env: {}
|
||||
services:
|
||||
squid-proxy:
|
||||
image: ubuntu/squid:latest
|
||||
|
||||
@@ -4,7 +4,7 @@ description: "Tests using RuboCop to analyze a multi-language repository and the
|
||||
versions: ["default"]
|
||||
steps:
|
||||
- name: Set up Ruby
|
||||
uses: ruby/setup-ruby@4c24fa5ec04b2e79eb40571b1cee2a0d2b705771 # v1.278.0
|
||||
uses: ruby/setup-ruby@90be1154f987f4dc0fe0dd0feedac9e473aa4ba8 # v1.286.0
|
||||
with:
|
||||
ruby-version: 2.6
|
||||
- name: Install Code Scanning integration
|
||||
|
||||
+33
-4
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import ruamel.yaml
|
||||
from ruamel.yaml.scalarstring import SingleQuotedScalarString
|
||||
from ruamel.yaml.scalarstring import SingleQuotedScalarString, LiteralScalarString
|
||||
import pathlib
|
||||
import os
|
||||
|
||||
@@ -223,6 +223,25 @@ for file in sorted((this_dir / 'checks').glob('*.yml')):
|
||||
}
|
||||
})
|
||||
|
||||
installYq = is_truthy(checkSpecification.get('installYq', ''))
|
||||
|
||||
if installYq:
|
||||
steps.append({
|
||||
'name': 'Install yq',
|
||||
'if': "runner.os == 'Windows'",
|
||||
'env': {
|
||||
'YQ_PATH': '${{ runner.temp }}/yq',
|
||||
# This is essentially an arbitrary version of `yq`, which happened to be the one that
|
||||
# `choco` fetched when we moved away from using that here.
|
||||
# See https://github.com/github/codeql-action/pull/3423
|
||||
'YQ_VERSION': 'v4.50.1'
|
||||
},
|
||||
'run': LiteralScalarString(
|
||||
'gh release download --repo mikefarah/yq --pattern "yq_windows_amd64.exe" "$YQ_VERSION" -O "$YQ_PATH/yq.exe"\n'
|
||||
'echo "$YQ_PATH" >> "$GITHUB_PATH"'
|
||||
),
|
||||
})
|
||||
|
||||
# If container initialisation steps are present in the check specification,
|
||||
# make sure to execute them first.
|
||||
if 'container' in checkSpecification and 'container-init-steps' in checkSpecification:
|
||||
@@ -271,6 +290,10 @@ for file in sorted((this_dir / 'checks').glob('*.yml')):
|
||||
|
||||
raw_file = this_dir.parent / ".github" / "workflows" / f"__{checkName}.yml.raw"
|
||||
with open(raw_file, 'w', newline='\n') as output_stream:
|
||||
extraGroupName = ""
|
||||
for inputName in workflowInputs.keys():
|
||||
extraGroupName += "-${{inputs." + inputName + "}}"
|
||||
|
||||
writeHeader(output_stream)
|
||||
yaml.dump({
|
||||
'name': f"PR Check - {checkSpecification['name']}",
|
||||
@@ -305,9 +328,15 @@ for file in sorted((this_dir / 'checks').glob('*.yml')):
|
||||
# For other events, the new workflows should wait until earlier ones have finished.
|
||||
# This should help reduce the number of concurrent workflows on the repo, and
|
||||
# consequently the number of concurrent API requests.
|
||||
'cancel-in-progress': "${{ github.event_name == 'pull_request' }}",
|
||||
# The group is determined by the workflow name + the ref
|
||||
'group': "${{ github.workflow }}-${{ github.ref }}"
|
||||
# Note, the `|| false` is intentional to rule out that this somehow ends up being
|
||||
# `true` since we observed workflows for non-`pull_request` events getting cancelled.
|
||||
'cancel-in-progress': "${{ github.event_name == 'pull_request' || false }}",
|
||||
# The group is determined by the workflow name, the ref, and the input values.
|
||||
# The base name is hard-coded to avoid issues when the workflow is triggered by
|
||||
# a `workflow_call` event (where `github.workflow` would be the name of the caller).
|
||||
# The input values are added, since they may result in different behaviour for a
|
||||
# given workflow on the same ref.
|
||||
'group': checkName + "-${{github.ref}}" + extraGroupName
|
||||
},
|
||||
'jobs': {
|
||||
checkName: checkJob
|
||||
|
||||
@@ -5,6 +5,9 @@ import {
|
||||
fixCodeQualityCategory,
|
||||
getPullRequestBranches,
|
||||
isAnalyzingPullRequest,
|
||||
isCCR,
|
||||
isDefaultSetup,
|
||||
isDynamicWorkflow,
|
||||
} from "./actions-util";
|
||||
import { computeAutomationID } from "./api-client";
|
||||
import { EnvVar } from "./environment";
|
||||
@@ -246,3 +249,24 @@ test("fixCodeQualityCategory", (t) => {
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
test("isDynamicWorkflow() returns true if event name is `dynamic`", (t) => {
|
||||
process.env.GITHUB_EVENT_NAME = "dynamic";
|
||||
t.assert(isDynamicWorkflow());
|
||||
process.env.GITHUB_EVENT_NAME = "push";
|
||||
t.false(isDynamicWorkflow());
|
||||
});
|
||||
|
||||
test("isCCR() returns true when expected", (t) => {
|
||||
process.env.GITHUB_EVENT_NAME = "dynamic";
|
||||
process.env[EnvVar.ANALYSIS_KEY] = "dynamic/copilot-pull-request-reviewer";
|
||||
t.assert(isCCR());
|
||||
t.false(isDefaultSetup());
|
||||
});
|
||||
|
||||
test("isDefaultSetup() returns true when expected", (t) => {
|
||||
process.env.GITHUB_EVENT_NAME = "dynamic";
|
||||
process.env[EnvVar.ANALYSIS_KEY] = "dynamic/github-code-scanning";
|
||||
t.assert(isDefaultSetup());
|
||||
t.false(isCCR());
|
||||
});
|
||||
|
||||
+10
-1
@@ -8,6 +8,7 @@ import * as io from "@actions/io";
|
||||
import { JSONSchemaForNPMPackageJsonFiles } from "@schemastore/package";
|
||||
|
||||
import type { Config } from "./config-utils";
|
||||
import { EnvVar } from "./environment";
|
||||
import { Logger } from "./logging";
|
||||
import {
|
||||
doesDirectoryExist,
|
||||
@@ -254,7 +255,15 @@ export function isDynamicWorkflow(): boolean {
|
||||
|
||||
/** Determines whether we are running in default setup. */
|
||||
export function isDefaultSetup(): boolean {
|
||||
return isDynamicWorkflow();
|
||||
return isDynamicWorkflow() && !isCCR();
|
||||
}
|
||||
|
||||
/* The analysis key prefix used for CCR. */
|
||||
const CCR_KEY_PREFIX = "dynamic/copilot-pull-request-reviewer";
|
||||
|
||||
/** Determines whether we are running in CCR. */
|
||||
export function isCCR(): boolean {
|
||||
return process.env[EnvVar.ANALYSIS_KEY]?.startsWith(CCR_KEY_PREFIX) || false;
|
||||
}
|
||||
|
||||
export function prettyPrintInvocation(cmd: string, args: string[]): string {
|
||||
|
||||
@@ -21,6 +21,9 @@ import { getActionsLogger } from "./logging";
|
||||
import { checkGitHubVersionInRange, getErrorMessage } from "./util";
|
||||
|
||||
async function runWrapper() {
|
||||
// To capture errors appropriately, keep as much code within the try-catch as
|
||||
// possible, and only use safe functions outside.
|
||||
|
||||
try {
|
||||
actionsUtil.restoreInputs();
|
||||
const logger = getActionsLogger();
|
||||
|
||||
+18
-5
@@ -41,6 +41,7 @@ import {
|
||||
createStatusReportBase,
|
||||
DatabaseCreationTimings,
|
||||
getActionsStatus,
|
||||
sendUnhandledErrorStatusReport,
|
||||
StatusReportBase,
|
||||
} from "./status-report";
|
||||
import {
|
||||
@@ -208,8 +209,10 @@ async function runAutobuildIfLegacyGoWorkflow(config: Config, logger: Logger) {
|
||||
await runAutobuild(config, KnownLanguage.go, logger);
|
||||
}
|
||||
|
||||
async function run() {
|
||||
const startedAt = new Date();
|
||||
async function run(startedAt: Date) {
|
||||
// To capture errors appropriately, keep as much code within the try-catch as
|
||||
// possible, and only use safe functions outside.
|
||||
|
||||
let uploadResults:
|
||||
| Partial<Record<analyses.AnalysisKind, UploadResult>>
|
||||
| undefined = undefined;
|
||||
@@ -222,14 +225,15 @@ async function run() {
|
||||
let didUploadTrapCaches = false;
|
||||
let dependencyCacheResults: DependencyCacheUploadStatusReport | undefined;
|
||||
let databaseUploadResults: DatabaseUploadResult[] = [];
|
||||
const logger = getActionsLogger();
|
||||
|
||||
try {
|
||||
util.initializeEnvironment(actionsUtil.getActionVersion());
|
||||
|
||||
// Make inputs accessible in the `post` step, details at
|
||||
// https://github.com/github/codeql-action/issues/2553
|
||||
actionsUtil.persistInputs();
|
||||
|
||||
const logger = getActionsLogger();
|
||||
try {
|
||||
const statusReportBase = await createStatusReportBase(
|
||||
ActionName.Analyze,
|
||||
"starting",
|
||||
@@ -522,13 +526,22 @@ async function run() {
|
||||
}
|
||||
}
|
||||
|
||||
export const runPromise = run();
|
||||
// Module-level startedAt so it can be accessed by runWrapper for error reporting
|
||||
const startedAt = new Date();
|
||||
export const runPromise = run(startedAt);
|
||||
|
||||
async function runWrapper() {
|
||||
const logger = getActionsLogger();
|
||||
try {
|
||||
await runPromise;
|
||||
} catch (error) {
|
||||
core.setFailed(`analyze action failed: ${util.getErrorMessage(error)}`);
|
||||
await sendUnhandledErrorStatusReport(
|
||||
ActionName.Analyze,
|
||||
startedAt,
|
||||
error,
|
||||
logger,
|
||||
);
|
||||
}
|
||||
await util.checkForTimeout();
|
||||
}
|
||||
|
||||
@@ -87,7 +87,6 @@ test("status report fields", async (t) => {
|
||||
);
|
||||
return "";
|
||||
},
|
||||
databasePrintBaseline: async () => "",
|
||||
});
|
||||
|
||||
const config = createTestConfig({
|
||||
|
||||
+9
-1
@@ -495,10 +495,18 @@ export async function runQueries(
|
||||
endTimeInterpretResults.getTime() - startTimeInterpretResults.getTime();
|
||||
logger.endGroup();
|
||||
|
||||
if (analysisSummary.trim()) {
|
||||
logger.info(analysisSummary);
|
||||
if (qualityAnalysisSummary) {
|
||||
}
|
||||
if (qualityAnalysisSummary?.trim()) {
|
||||
logger.info(qualityAnalysisSummary);
|
||||
}
|
||||
if (!config.enableFileCoverageInformation) {
|
||||
logger.info(
|
||||
"To speed up pull request analysis, file coverage information is only enabled when analyzing " +
|
||||
"the default branch and protected branches.",
|
||||
);
|
||||
}
|
||||
|
||||
if (await features.getValue(Feature.QaTelemetryEnabled)) {
|
||||
// Note: QA adds the `code-quality` query suite to the `queries` input,
|
||||
|
||||
@@ -52,7 +52,6 @@ function mockGetMetaVersionHeader(
|
||||
};
|
||||
const spyGetContents = sinon
|
||||
.stub(client.rest.meta, "get")
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
||||
.resolves(response as any);
|
||||
sinon.stub(api, "getApiClient").value(() => client);
|
||||
return spyGetContents;
|
||||
|
||||
+3
-5
@@ -3,6 +3,7 @@ import * as githubUtils from "@actions/github/lib/utils";
|
||||
import * as retry from "@octokit/plugin-retry";
|
||||
|
||||
import { getActionVersion, getRequiredInput } from "./actions-util";
|
||||
import { EnvVar } from "./environment";
|
||||
import { Logger } from "./logging";
|
||||
import { getRepositoryNwo, RepositoryNwo } from "./repository";
|
||||
import {
|
||||
@@ -115,7 +116,6 @@ export async function getGitHubVersionFromApi(
|
||||
|
||||
// Doesn't strictly have to be the meta endpoint as we're only
|
||||
// using the response headers which are available on every request.
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
||||
const response = await apiClient.rest.meta.get();
|
||||
|
||||
// This happens on dotcom, although we expect to have already returned in that
|
||||
@@ -189,9 +189,7 @@ export async function getWorkflowRelativePath(): Promise<string> {
|
||||
* the GitHub API, but after that the result will be cached.
|
||||
*/
|
||||
export async function getAnalysisKey(): Promise<string> {
|
||||
const analysisKeyEnvVar = "CODEQL_ACTION_ANALYSIS_KEY";
|
||||
|
||||
let analysisKey = process.env[analysisKeyEnvVar];
|
||||
let analysisKey = process.env[EnvVar.ANALYSIS_KEY];
|
||||
if (analysisKey !== undefined) {
|
||||
return analysisKey;
|
||||
}
|
||||
@@ -200,7 +198,7 @@ export async function getAnalysisKey(): Promise<string> {
|
||||
const jobName = getRequiredEnvParam("GITHUB_JOB");
|
||||
|
||||
analysisKey = `${workflowPath}:${jobName}`;
|
||||
core.exportVariable(analysisKeyEnvVar, analysisKey);
|
||||
core.exportVariable(EnvVar.ANALYSIS_KEY, analysisKey);
|
||||
return analysisKey;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,21 +4,100 @@ import * as path from "path";
|
||||
|
||||
import test from "ava";
|
||||
|
||||
import { scanArtifactsForTokens } from "./artifact-scanner";
|
||||
import {
|
||||
GITHUB_PAT_CLASSIC_PATTERN,
|
||||
isAuthToken,
|
||||
scanArtifactsForTokens,
|
||||
TokenType,
|
||||
} from "./artifact-scanner";
|
||||
import { getRunnerLogger } from "./logging";
|
||||
import { getRecordingLogger, LoggedMessage } from "./testing-utils";
|
||||
import {
|
||||
checkExpectedLogMessages,
|
||||
getRecordingLogger,
|
||||
LoggedMessage,
|
||||
makeTestToken,
|
||||
} from "./testing-utils";
|
||||
|
||||
test("scanArtifactsForTokens detects GitHub tokens in files", async (t) => {
|
||||
const logger = getRunnerLogger(true);
|
||||
test("makeTestToken", (t) => {
|
||||
t.is(makeTestToken().length, 36);
|
||||
t.is(makeTestToken(255).length, 255);
|
||||
});
|
||||
|
||||
test("isAuthToken", (t) => {
|
||||
// Undefined for strings that aren't tokens
|
||||
t.is(isAuthToken("some string"), undefined);
|
||||
t.is(isAuthToken("ghp_"), undefined);
|
||||
t.is(isAuthToken("ghp_123"), undefined);
|
||||
|
||||
// Token types for strings that are tokens.
|
||||
t.is(isAuthToken(`ghp_${makeTestToken()}`), TokenType.PersonalAccessClassic);
|
||||
t.is(isAuthToken(`ghp_${makeTestToken()}`), TokenType.PersonalAccessClassic);
|
||||
t.is(
|
||||
isAuthToken(`ghs_${makeTestToken(255)}`),
|
||||
TokenType.AppInstallationAccess,
|
||||
);
|
||||
t.is(
|
||||
isAuthToken(`github_pat_${makeTestToken(22)}_${makeTestToken(59)}`),
|
||||
TokenType.PersonalAccessFineGrained,
|
||||
);
|
||||
|
||||
// With a custom pattern set
|
||||
t.is(
|
||||
isAuthToken(`ghp_${makeTestToken()}`, [GITHUB_PAT_CLASSIC_PATTERN]),
|
||||
TokenType.PersonalAccessClassic,
|
||||
);
|
||||
t.is(
|
||||
isAuthToken(`github_pat_${makeTestToken(22)}_${makeTestToken(59)}`, [
|
||||
GITHUB_PAT_CLASSIC_PATTERN,
|
||||
]),
|
||||
undefined,
|
||||
);
|
||||
});
|
||||
|
||||
const testTokens = [
|
||||
{
|
||||
type: TokenType.PersonalAccessClassic,
|
||||
value: `ghp_${makeTestToken()}`,
|
||||
checkPattern: "Personal Access Token",
|
||||
},
|
||||
{
|
||||
type: TokenType.PersonalAccessFineGrained,
|
||||
value:
|
||||
"github_pat_1234567890ABCDEFGHIJKL_MNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHI",
|
||||
checkPattern: "Personal Access Token",
|
||||
},
|
||||
{
|
||||
type: TokenType.OAuth,
|
||||
value: `gho_${makeTestToken()}`,
|
||||
},
|
||||
{
|
||||
type: TokenType.UserToServer,
|
||||
value: `ghu_${makeTestToken()}`,
|
||||
},
|
||||
{
|
||||
type: TokenType.ServerToServer,
|
||||
value: `ghs_${makeTestToken()}`,
|
||||
},
|
||||
{
|
||||
type: TokenType.Refresh,
|
||||
value: `ghr_${makeTestToken()}`,
|
||||
},
|
||||
{
|
||||
type: TokenType.AppInstallationAccess,
|
||||
value: `ghs_${makeTestToken(255)}`,
|
||||
},
|
||||
];
|
||||
|
||||
for (const { type, value, checkPattern } of testTokens) {
|
||||
test(`scanArtifactsForTokens detects GitHub ${type} tokens in files`, async (t) => {
|
||||
const logMessages = [];
|
||||
const logger = getRecordingLogger(logMessages, { logToConsole: false });
|
||||
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "scanner-test-"));
|
||||
|
||||
try {
|
||||
// Create a test file with a fake GitHub token
|
||||
const testFile = path.join(tempDir, "test.txt");
|
||||
fs.writeFileSync(
|
||||
testFile,
|
||||
"This is a test file with token ghp_1234567890123456789012345678901234AB",
|
||||
);
|
||||
fs.writeFileSync(testFile, `This is a test file with token ${value}`);
|
||||
|
||||
const error = await t.throwsAsync(
|
||||
async () => await scanArtifactsForTokens([testFile], logger),
|
||||
@@ -26,14 +105,20 @@ test("scanArtifactsForTokens detects GitHub tokens in files", async (t) => {
|
||||
|
||||
t.regex(
|
||||
error?.message || "",
|
||||
/Found 1 potential GitHub token.*Personal Access Token/,
|
||||
new RegExp(`Found 1 potential GitHub token.*${checkPattern || type}`),
|
||||
);
|
||||
t.regex(error?.message || "", /test\.txt/);
|
||||
|
||||
checkExpectedLogMessages(t, logMessages, [
|
||||
"Starting best-effort check",
|
||||
`Found 1 ${type}`,
|
||||
]);
|
||||
} finally {
|
||||
// Clean up
|
||||
fs.rmSync(tempDir, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
test("scanArtifactsForTokens handles files without tokens", async (t) => {
|
||||
const logger = getRunnerLogger(true);
|
||||
|
||||
+60
-13
@@ -7,33 +7,62 @@ import * as exec from "@actions/exec";
|
||||
import { Logger } from "./logging";
|
||||
import { getErrorMessage } from "./util";
|
||||
|
||||
/**
|
||||
* Enumerates known types of GitHub token formats.
|
||||
*/
|
||||
export enum TokenType {
|
||||
PersonalAccessClassic = "Personal Access Token (Classic)",
|
||||
PersonalAccessFineGrained = "Personal Access Token (Fine-grained)",
|
||||
OAuth = "OAuth Access Token",
|
||||
UserToServer = "User-to-Server Token",
|
||||
ServerToServer = "Server-to-Server Token",
|
||||
Refresh = "Refresh Token",
|
||||
AppInstallationAccess = "App Installation Access Token",
|
||||
}
|
||||
|
||||
/** A value of this type associates a token type with its pattern. */
|
||||
export interface TokenPattern {
|
||||
type: TokenType;
|
||||
pattern: RegExp;
|
||||
}
|
||||
|
||||
/** The pattern for PATs (Classic) */
|
||||
export const GITHUB_PAT_CLASSIC_PATTERN: TokenPattern = {
|
||||
type: TokenType.PersonalAccessClassic,
|
||||
pattern: /\bghp_[a-zA-Z0-9]{36}\b/g,
|
||||
};
|
||||
|
||||
/** The pattern for PATs (Fine-grained) */
|
||||
export const GITHUB_PAT_FINE_GRAINED_PATTERN: TokenPattern = {
|
||||
type: TokenType.PersonalAccessFineGrained,
|
||||
pattern: /\bgithub_pat_[a-zA-Z0-9_]+\b/g,
|
||||
};
|
||||
|
||||
/**
|
||||
* GitHub token patterns to scan for.
|
||||
* These patterns match various GitHub token formats.
|
||||
*/
|
||||
const GITHUB_TOKEN_PATTERNS = [
|
||||
const GITHUB_TOKEN_PATTERNS: TokenPattern[] = [
|
||||
GITHUB_PAT_CLASSIC_PATTERN,
|
||||
GITHUB_PAT_FINE_GRAINED_PATTERN,
|
||||
{
|
||||
name: "Personal Access Token",
|
||||
pattern: /\bghp_[a-zA-Z0-9]{36}\b/g,
|
||||
},
|
||||
{
|
||||
name: "OAuth Access Token",
|
||||
type: TokenType.OAuth,
|
||||
pattern: /\bgho_[a-zA-Z0-9]{36}\b/g,
|
||||
},
|
||||
{
|
||||
name: "User-to-Server Token",
|
||||
type: TokenType.UserToServer,
|
||||
pattern: /\bghu_[a-zA-Z0-9]{36}\b/g,
|
||||
},
|
||||
{
|
||||
name: "Server-to-Server Token",
|
||||
type: TokenType.ServerToServer,
|
||||
pattern: /\bghs_[a-zA-Z0-9]{36}\b/g,
|
||||
},
|
||||
{
|
||||
name: "Refresh Token",
|
||||
type: TokenType.Refresh,
|
||||
pattern: /\bghr_[a-zA-Z0-9]{36}\b/g,
|
||||
},
|
||||
{
|
||||
name: "App Installation Access Token",
|
||||
type: TokenType.AppInstallationAccess,
|
||||
pattern: /\bghs_[a-zA-Z0-9]{255}\b/g,
|
||||
},
|
||||
];
|
||||
@@ -48,6 +77,24 @@ interface ScanResult {
|
||||
findings: TokenFinding[];
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether `value` matches any token `patterns`.
|
||||
* @param value The value to match against.
|
||||
* @param patterns The patterns to check.
|
||||
* @returns The type of the first matching pattern, or `undefined` if none match.
|
||||
*/
|
||||
export function isAuthToken(
|
||||
value: string,
|
||||
patterns: TokenPattern[] = GITHUB_TOKEN_PATTERNS,
|
||||
) {
|
||||
for (const { type, pattern } of patterns) {
|
||||
if (value.match(pattern)) {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scans a file for GitHub tokens.
|
||||
*
|
||||
@@ -65,13 +112,13 @@ function scanFileForTokens(
|
||||
try {
|
||||
const content = fs.readFileSync(filePath, "utf8");
|
||||
|
||||
for (const { name, pattern } of GITHUB_TOKEN_PATTERNS) {
|
||||
for (const { type, pattern } of GITHUB_TOKEN_PATTERNS) {
|
||||
const matches = content.match(pattern);
|
||||
if (matches) {
|
||||
for (let i = 0; i < matches.length; i++) {
|
||||
findings.push({ tokenType: name, filePath: relativePath });
|
||||
findings.push({ tokenType: type, filePath: relativePath });
|
||||
}
|
||||
logger.debug(`Found ${matches.length} ${name}(s) in ${relativePath}`);
|
||||
logger.debug(`Found ${matches.length} ${type}(s) in ${relativePath}`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+14
-3
@@ -17,6 +17,7 @@ import {
|
||||
getActionsStatus,
|
||||
createStatusReportBase,
|
||||
sendStatusReport,
|
||||
sendUnhandledErrorStatusReport,
|
||||
ActionName,
|
||||
} from "./status-report";
|
||||
import { endTracingForCluster } from "./tracer-config";
|
||||
@@ -68,8 +69,10 @@ async function sendCompletedStatusReport(
|
||||
}
|
||||
}
|
||||
|
||||
async function run() {
|
||||
const startedAt = new Date();
|
||||
async function run(startedAt: Date) {
|
||||
// To capture errors appropriately, keep as much code within the try-catch as
|
||||
// possible, and only use safe functions outside.
|
||||
|
||||
const logger = getActionsLogger();
|
||||
let config: Config | undefined;
|
||||
let currentLanguage: Language | undefined;
|
||||
@@ -140,10 +143,18 @@ async function run() {
|
||||
}
|
||||
|
||||
async function runWrapper() {
|
||||
const startedAt = new Date();
|
||||
const logger = getActionsLogger();
|
||||
try {
|
||||
await run();
|
||||
await run(startedAt);
|
||||
} catch (error) {
|
||||
core.setFailed(`autobuild action failed. ${getErrorMessage(error)}`);
|
||||
await sendUnhandledErrorStatusReport(
|
||||
ActionName.Autobuild,
|
||||
startedAt,
|
||||
error,
|
||||
logger,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+32
-20
@@ -147,11 +147,20 @@ export interface CodeQL {
|
||||
): Promise<void>;
|
||||
/**
|
||||
* Run 'codeql database bundle'.
|
||||
*
|
||||
* @param alsoIncludeRelativePaths Additional paths that should be included in the bundle if
|
||||
* supported by the version of the CodeQL CLI.
|
||||
*
|
||||
* These paths are relative to the database root.
|
||||
*
|
||||
* Older versions of the CodeQL CLI do not support including additional paths in the bundle.
|
||||
* In those cases, this parameter will be ignored.
|
||||
*/
|
||||
databaseBundle(
|
||||
databasePath: string,
|
||||
outputFilePath: string,
|
||||
dbName: string,
|
||||
alsoIncludeRelativePaths: string[],
|
||||
): Promise<void>;
|
||||
/**
|
||||
* Run 'codeql database run-queries'. If no `queries` are specified, then the CLI
|
||||
@@ -177,10 +186,6 @@ export interface CodeQL {
|
||||
config: Config,
|
||||
features: FeatureEnablement,
|
||||
): Promise<string>;
|
||||
/**
|
||||
* Run 'codeql database print-baseline'.
|
||||
*/
|
||||
databasePrintBaseline(databasePath: string): Promise<string>;
|
||||
/**
|
||||
* Run 'codeql database export-diagnostics'
|
||||
*
|
||||
@@ -484,10 +489,6 @@ export function createStubCodeQL(partialCodeql: Partial<CodeQL>): CodeQL {
|
||||
partialCodeql,
|
||||
"databaseInterpretResults",
|
||||
),
|
||||
databasePrintBaseline: resolveFunction(
|
||||
partialCodeql,
|
||||
"databasePrintBaseline",
|
||||
),
|
||||
databaseExportDiagnostics: resolveFunction(
|
||||
partialCodeql,
|
||||
"databaseExportDiagnostics",
|
||||
@@ -619,6 +620,13 @@ async function getCodeQLForCmd(
|
||||
extraArgs.push("--overlay-base");
|
||||
}
|
||||
|
||||
const baselineFilesOptions = config.enableFileCoverageInformation
|
||||
? [
|
||||
"--calculate-language-specific-baseline",
|
||||
"--sublanguage-file-coverage",
|
||||
]
|
||||
: ["--no-calculate-baseline"];
|
||||
|
||||
await runCli(
|
||||
cmd,
|
||||
[
|
||||
@@ -630,12 +638,14 @@ async function getCodeQLForCmd(
|
||||
"--db-cluster",
|
||||
config.dbLocation,
|
||||
`--source-root=${sourceRoot}`,
|
||||
"--calculate-language-specific-baseline",
|
||||
...baselineFilesOptions,
|
||||
"--extractor-include-aliases",
|
||||
"--sublanguage-file-coverage",
|
||||
...extraArgs,
|
||||
...getExtraOptionsFromEnv(["database", "init"], {
|
||||
ignoringOptions: ["--overwrite"],
|
||||
// Some user configs specify `--no-calculate-baseline` as an additional
|
||||
// argument to `codeql database init`. Therefore ignore the baseline file
|
||||
// options here to avoid specifying the same argument twice and erroring.
|
||||
ignoringOptions: ["--overwrite", ...baselineFilesOptions],
|
||||
}),
|
||||
],
|
||||
{ stdin: externalRepositoryToken },
|
||||
@@ -876,15 +886,6 @@ async function getCodeQLForCmd(
|
||||
noStreamStdout: true,
|
||||
});
|
||||
},
|
||||
async databasePrintBaseline(databasePath: string): Promise<string> {
|
||||
const codeqlArgs = [
|
||||
"database",
|
||||
"print-baseline",
|
||||
...getExtraOptionsFromEnv(["database", "print-baseline"]),
|
||||
databasePath,
|
||||
];
|
||||
return await runCli(cmd, codeqlArgs);
|
||||
},
|
||||
async databaseCleanupCluster(
|
||||
config: Config,
|
||||
cleanupLevel: CleanupLevel,
|
||||
@@ -911,6 +912,7 @@ async function getCodeQLForCmd(
|
||||
databasePath: string,
|
||||
outputFilePath: string,
|
||||
databaseName: string,
|
||||
alsoIncludeRelativePaths: string[],
|
||||
): Promise<void> {
|
||||
const args = [
|
||||
"database",
|
||||
@@ -920,6 +922,16 @@ async function getCodeQLForCmd(
|
||||
`--name=${databaseName}`,
|
||||
...getExtraOptionsFromEnv(["database", "bundle"]),
|
||||
];
|
||||
if (
|
||||
await this.supportsFeature(ToolsFeature.BundleSupportsIncludeOption)
|
||||
) {
|
||||
args.push(
|
||||
...alsoIncludeRelativePaths.flatMap((relativePath) => [
|
||||
"--include",
|
||||
relativePath,
|
||||
]),
|
||||
);
|
||||
}
|
||||
await new toolrunner.ToolRunner(cmd, args).exec();
|
||||
},
|
||||
async databaseExportDiagnostics(
|
||||
|
||||
@@ -89,6 +89,7 @@ function createTestInitConfigInputs(
|
||||
},
|
||||
features: createFeatures([]),
|
||||
repositoryProperties: {},
|
||||
enableFileCoverageInformation: true,
|
||||
logger: getRunnerLogger(true),
|
||||
} satisfies configUtils.InitConfigInputs,
|
||||
overrides,
|
||||
@@ -114,7 +115,6 @@ function mockGetContents(
|
||||
};
|
||||
const spyGetContents = sinon
|
||||
.stub(client.rest.repos, "getContent")
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
||||
.resolves(response as any);
|
||||
sinon.stub(api, "getApiClient").value(() => client);
|
||||
sinon.stub(api, "getApiClientWithExternalAuth").value(() => client);
|
||||
@@ -130,7 +130,6 @@ function mockListLanguages(languages: string[]) {
|
||||
for (const language of languages) {
|
||||
response.data[language] = 123;
|
||||
}
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
||||
sinon.stub(client.rest.repos, "listLanguages").resolves(response as any);
|
||||
sinon.stub(api, "getApiClient").value(() => client);
|
||||
}
|
||||
|
||||
+79
-6
@@ -4,7 +4,11 @@ import { performance } from "perf_hooks";
|
||||
|
||||
import * as yaml from "js-yaml";
|
||||
|
||||
import { getActionVersion, isAnalyzingPullRequest } from "./actions-util";
|
||||
import {
|
||||
getActionVersion,
|
||||
isAnalyzingPullRequest,
|
||||
isCCR,
|
||||
} from "./actions-util";
|
||||
import {
|
||||
AnalysisConfig,
|
||||
AnalysisKind,
|
||||
@@ -22,13 +26,17 @@ import {
|
||||
parseUserConfig,
|
||||
UserConfig,
|
||||
} from "./config/db-config";
|
||||
import { addDiagnostic, makeTelemetryDiagnostic } from "./diagnostics";
|
||||
import {
|
||||
addNoLanguageDiagnostic,
|
||||
makeTelemetryDiagnostic,
|
||||
} from "./diagnostics";
|
||||
import { shouldPerformDiffInformedAnalysis } from "./diff-informed-analysis-utils";
|
||||
import { EnvVar } from "./environment";
|
||||
import * as errorMessages from "./error-messages";
|
||||
import { Feature, FeatureEnablement } from "./feature-flags";
|
||||
import { RepositoryProperties } from "./feature-flags/properties";
|
||||
import {
|
||||
getGeneratedFiles,
|
||||
getGitRoot,
|
||||
getGitVersionOrThrow,
|
||||
GIT_MINIMUM_VERSION_FOR_OVERLAY,
|
||||
@@ -55,6 +63,7 @@ import {
|
||||
getCodeQLMemoryLimit,
|
||||
getErrorMessage,
|
||||
isInTestMode,
|
||||
joinAtMost,
|
||||
} from "./util";
|
||||
|
||||
export * from "./config/db-config";
|
||||
@@ -208,6 +217,11 @@ export interface Config {
|
||||
* A partial mapping from repository properties that affect us to their values.
|
||||
*/
|
||||
repositoryProperties: RepositoryProperties;
|
||||
|
||||
/**
|
||||
* Whether to enable file coverage information.
|
||||
*/
|
||||
enableFileCoverageInformation: boolean;
|
||||
}
|
||||
|
||||
async function getSupportedLanguageMap(
|
||||
@@ -427,6 +441,7 @@ export interface InitConfigInputs {
|
||||
apiDetails: api.GitHubApiCombinedDetails;
|
||||
features: FeatureEnablement;
|
||||
repositoryProperties: RepositoryProperties;
|
||||
enableFileCoverageInformation: boolean;
|
||||
analysisKinds: AnalysisKind[];
|
||||
logger: Logger;
|
||||
}
|
||||
@@ -456,6 +471,7 @@ export async function initActionState(
|
||||
repositoryProperties,
|
||||
analysisKinds,
|
||||
logger,
|
||||
enableFileCoverageInformation,
|
||||
}: InitConfigInputs,
|
||||
userConfig: UserConfig,
|
||||
): Promise<Config> {
|
||||
@@ -536,6 +552,7 @@ export async function initActionState(
|
||||
overlayDatabaseMode: OverlayDatabaseMode.None,
|
||||
useOverlayDatabaseCaching: false,
|
||||
repositoryProperties,
|
||||
enableFileCoverageInformation,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -948,6 +965,39 @@ export async function initConfig(
|
||||
}
|
||||
}
|
||||
|
||||
// If we are in CCR or the corresponding FF is enabled, try to determine
|
||||
// which files in the repository are marked as generated and add them to
|
||||
// the `paths-ignore` configuration.
|
||||
if ((await features.getValue(Feature.IgnoreGeneratedFiles)) && isCCR()) {
|
||||
try {
|
||||
const generatedFilesCheckStartedAt = performance.now();
|
||||
const generatedFiles = await getGeneratedFiles(inputs.sourceRoot);
|
||||
const generatedFilesDuration = Math.round(
|
||||
performance.now() - generatedFilesCheckStartedAt,
|
||||
);
|
||||
|
||||
if (generatedFiles.length > 0) {
|
||||
config.computedConfig["paths-ignore"] ??= [];
|
||||
config.computedConfig["paths-ignore"].push(...generatedFiles);
|
||||
logger.info(
|
||||
`Detected ${generatedFiles.length} generated file(s), which will be excluded from analysis: ${joinAtMost(generatedFiles, ", ", 10)}`,
|
||||
);
|
||||
} else {
|
||||
logger.info(`Found no generated files.`);
|
||||
}
|
||||
|
||||
await logGeneratedFilesTelemetry(
|
||||
config,
|
||||
generatedFilesDuration,
|
||||
generatedFiles.length,
|
||||
);
|
||||
} catch (error) {
|
||||
logger.info(`Cannot ignore generated files: ${getErrorMessage(error)}`);
|
||||
}
|
||||
} else {
|
||||
logger.debug(`Skipping check for generated files.`);
|
||||
}
|
||||
|
||||
// The choice of overlay database mode depends on the selection of languages
|
||||
// and queries, which in turn depends on the user config and the augmentation
|
||||
// properties. So we need to calculate the overlay database mode after the
|
||||
@@ -1369,11 +1419,8 @@ async function logGitVersionTelemetry(
|
||||
gitVersion: GitVersionInfo,
|
||||
): Promise<void> {
|
||||
if (config.languages.length > 0) {
|
||||
addDiagnostic(
|
||||
addNoLanguageDiagnostic(
|
||||
config,
|
||||
// Arbitrarily choose the first language. We could also choose all languages, but that
|
||||
// increases the risk of misinterpreting the data.
|
||||
config.languages[0],
|
||||
makeTelemetryDiagnostic(
|
||||
"codeql-action/git-version-telemetry",
|
||||
"Git version telemetry",
|
||||
@@ -1385,3 +1432,29 @@ async function logGitVersionTelemetry(
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs the time it took to identify generated files and how many were discovered as
|
||||
* a telemetry diagnostic.
|
||||
* */
|
||||
async function logGeneratedFilesTelemetry(
|
||||
config: Config,
|
||||
duration: number,
|
||||
generatedFilesCount: number,
|
||||
): Promise<void> {
|
||||
if (config.languages.length < 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
addNoLanguageDiagnostic(
|
||||
config,
|
||||
makeTelemetryDiagnostic(
|
||||
"codeql-action/generated-files-telemetry",
|
||||
"Generated files telemetry",
|
||||
{
|
||||
duration,
|
||||
generatedFilesCount,
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -24,6 +24,37 @@ test("sanitizeArtifactName", (t) => {
|
||||
);
|
||||
});
|
||||
|
||||
test("getArtifactSuffix", (t) => {
|
||||
// No suffix if there's no `matrix` input, it is invalid, or has no keys.
|
||||
t.is(debugArtifacts.getArtifactSuffix(undefined), "");
|
||||
t.is(debugArtifacts.getArtifactSuffix(""), "");
|
||||
t.is(debugArtifacts.getArtifactSuffix("invalid json"), "");
|
||||
t.is(debugArtifacts.getArtifactSuffix("{}"), "");
|
||||
t.is(debugArtifacts.getArtifactSuffix("null"), "");
|
||||
t.is(debugArtifacts.getArtifactSuffix("123"), "");
|
||||
t.is(debugArtifacts.getArtifactSuffix('"string"'), "");
|
||||
|
||||
// Suffixes for non-empty, valid `matrix` inputs.
|
||||
const testMatrices = [
|
||||
{ matrix: { language: "go" }, expected: "-go" },
|
||||
{
|
||||
matrix: { language: "javascript", "build-mode": "none" },
|
||||
expected: "-none-javascript",
|
||||
},
|
||||
{
|
||||
matrix: { "build-mode": "none", language: "javascript" },
|
||||
expected: "-none-javascript",
|
||||
},
|
||||
];
|
||||
|
||||
for (const testMatrix of testMatrices) {
|
||||
const suffix = debugArtifacts.getArtifactSuffix(
|
||||
JSON.stringify(testMatrix.matrix),
|
||||
);
|
||||
t.is(suffix, testMatrix.expected);
|
||||
}
|
||||
});
|
||||
|
||||
// These next tests check the correctness of the logic to determine whether or not
|
||||
// artifacts are uploaded in debug mode. Since it's not easy to mock the actual
|
||||
// call to upload an artifact, we just check that we get an "upload-failed" result,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user