Compare commits

..

19 Commits

Author SHA1 Message Date
Remco Vermeulen
5c02493ebf Merge pull request #2394 from rvermeulen/rvermeulen/extend-init-complete-status-report
Extend init complete status report
2024-08-06 15:24:48 -07:00
Remco Vermeulen
a8ab493c76 Merge branch 'main' into rvermeulen/extend-init-complete-status-report 2024-08-06 14:51:42 -07:00
Henry Mercer
3ec2588ed0 Merge pull request #2411 from github/mergeback/v3.26.0-to-main-eb055d73
Mergeback v3.26.0 refs/heads/releases/v3 into main
2024-08-06 22:02:01 +01:00
Henry Mercer
c056c182c0 Merge pull request #2412 from github/henrymercer/update-required-ignore-skipped
Required checks script: Ignore skipped jobs
2024-08-06 22:01:44 +01:00
github-actions[bot]
50d1f406e9 Update checked-in dependencies 2024-08-06 17:08:17 +00:00
Henry Mercer
ecf465891a Required checks script: Ignore skipped jobs 2024-08-06 17:40:25 +01:00
github-actions[bot]
1c5b392677 Update changelog and version after v3.26.0 2024-08-06 16:39:18 +00:00
Remco Vermeulen
7c2bec0cc3 Merge remote-tracking branch 'upstream/main' into rvermeulen/extend-init-complete-status-report 2024-08-06 09:11:17 -07:00
Remco Vermeulen
0f24d46599 Merge branch 'main' into rvermeulen/extend-init-complete-status-report
Signed-off-by: Remco Vermeulen <rvermeulen@github.com>
2024-08-02 15:12:59 -07:00
Remco Vermeulen
e6c9383ca6 Explicitly set value of registries and query_filters when undefined
Both are arrays, so we will use an empty array if they are undefined.
2024-08-02 15:02:48 -07:00
Remco Vermeulen
ba3ac6f096 Clone packs from configuration to prevent modifications 2024-07-31 17:59:46 -07:00
Remco Vermeulen
7be3a64c02 Move cloneObject into utilities and export it. 2024-07-31 17:56:06 -07:00
Remco Vermeulen
19a1da54d1 Update map and minified JS files 2024-07-31 13:41:41 -07:00
Remco Vermeulen
b7b85bb26f Change removal of credentials to adhere to no-vars-unused 2024-07-31 11:24:51 -07:00
Remco Vermeulen
7ff117d65d Address formatting issues 2024-07-31 11:24:33 -07:00
Remco Vermeulen
060c11b07f Reword comment 2024-07-26 16:55:34 -07:00
Remco Vermeulen
9f7e0af9f6 Add registries to the init status complete report
Registries might require authentication, before we add it to the
report we remove any credentials.
2024-07-26 16:35:29 -07:00
Remco Vermeulen
25d25968e6 Add query-filters to the init complete status report 2024-07-26 16:35:11 -07:00
Remco Vermeulen
a6c4760357 Add packs to init complete status report
To support both the single language and multi language case we turn
the single language case into a multi language case using the
configured language.
The entire packs record is then stored as a stringified JSON object.
2024-07-26 16:32:22 -07:00
17 changed files with 103 additions and 19 deletions

View File

@@ -28,8 +28,7 @@ fi
echo "Getting checks for $GITHUB_SHA"
# Ignore any checks with "https://", CodeQL, LGTM, and Update checks.
# Also ignore the non-matrixed "Unit Tests" job that only runs on pushes to protected branches.
CHECKS="$(gh api repos/github/codeql-action/commits/"${GITHUB_SHA}"/check-runs --paginate | jq --slurp --compact-output --raw-output '[.[].check_runs | .[].name | select(contains("https://") or . == "CodeQL" or . == "Dependabot" or . == "check-expected-release-files" or . == "Unit Tests" or contains("Update") or contains("update") or contains("test-setup-python-scripts") | not)] | unique | sort')"
CHECKS="$(gh api repos/github/codeql-action/commits/"${GITHUB_SHA}"/check-runs --paginate | jq --slurp --compact-output --raw-output '[.[].check_runs.[] | select(.conclusion != "skipped") | .name | select(contains("https://") or . == "CodeQL" or . == "Dependabot" or . == "check-expected-release-files" or contains("Update") or contains("update") or contains("test-setup-python-scripts") | not)] | unique | sort')"
echo "$CHECKS" | jq

View File

@@ -4,6 +4,10 @@ See the [releases page](https://github.com/github/codeql-action/releases) for th
Note that the only difference between `v2` and `v3` of the CodeQL Action is the node version they support, with `v3` running on node 20 while we continue to release `v2` to support running on node 16. For example `3.22.11` was the first `v3` release and is functionally identical to `2.22.11`. This approach ensures an easy way to track exactly which features are included in different versions, indicated by the minor and patch version numbers.
## [UNRELEASED]
No user facing changes.
## 3.26.0 - 06 Aug 2024
- _Deprecation:_ Swift analysis on Ubuntu runner images is no longer supported. Please migrate to a macOS runner if this affects you. [#2403](https://github.com/github/codeql-action/pull/2403)

5
lib/codeql.js generated
View File

@@ -788,7 +788,7 @@ async function runTool(cmd, args = [], opts = {}) {
async function generateCodeScanningConfig(config, logger) {
const codeScanningConfigFile = getGeneratedCodeScanningConfigPath(config);
// make a copy so we can modify it
const augmentedConfig = cloneObject(config.originalUserInput);
const augmentedConfig = (0, util_1.cloneObject)(config.originalUserInput);
// Inject the queries from the input
if (config.augmentationProperties.queriesInput) {
if (config.augmentationProperties.queriesInputCombines) {
@@ -832,9 +832,6 @@ async function generateCodeScanningConfig(config, logger) {
fs.writeFileSync(codeScanningConfigFile, yaml.dump(augmentedConfig));
return codeScanningConfigFile;
}
function cloneObject(obj) {
return JSON.parse(JSON.stringify(obj));
}
// This constant sets the size of each TRAP cache in megabytes.
const TRAP_CACHE_SIZE_MB = 1024;
async function getTrapCachingExtractorConfigArgs(config) {

File diff suppressed because one or more lines are too long

7
lib/config-utils.js generated
View File

@@ -42,6 +42,7 @@ exports.parsePacksFromInput = parsePacksFromInput;
exports.parsePacksSpecification = parsePacksSpecification;
exports.validatePackSpecification = validatePackSpecification;
exports.initConfig = initConfig;
exports.parseRegistriesWithoutCredentials = parseRegistriesWithoutCredentials;
exports.getPathToParsedConfigFile = getPathToParsedConfigFile;
exports.getConfig = getConfig;
exports.generateRegistries = generateRegistries;
@@ -507,6 +508,12 @@ function parseRegistries(registriesInput) {
throw new util_1.ConfigurationError("Invalid registries input. Must be a YAML string.");
}
}
function parseRegistriesWithoutCredentials(registriesInput) {
return parseRegistries(registriesInput)?.map((r) => {
const { url, packages } = r;
return { url, packages };
});
}
function isLocal(configPath) {
// If the path starts with ./, look locally
if (configPath.indexOf("./") === 0) {

File diff suppressed because one or more lines are too long

22
lib/init-action.js generated
View File

@@ -30,6 +30,7 @@ const safe_which_1 = require("@chrisgavin/safe-which");
const uuid_1 = require("uuid");
const actions_util_1 = require("./actions-util");
const api_client_1 = require("./api-client");
const configUtils = __importStar(require("./config-utils"));
const diagnostics_1 = require("./diagnostics");
const environment_1 = require("./environment");
const feature_flags_1 = require("./feature-flags");
@@ -82,6 +83,24 @@ async function sendCompletedStatusReport(startedAt, config, toolsDownloadDuratio
: queriesInput;
queries.push(...queriesInput.split(","));
}
let packs = {};
if ((config.augmentationProperties.packsInputCombines ||
!config.augmentationProperties.packsInput) &&
config.originalUserInput.packs) {
// Make a copy, because we might modify `packs`.
const copyPacksFromOriginalUserInput = (0, util_1.cloneObject)(config.originalUserInput.packs);
// If it is an array, then assume there is only a single language being analyzed.
if (Array.isArray(copyPacksFromOriginalUserInput)) {
packs[config.languages[0]] = copyPacksFromOriginalUserInput;
}
else {
packs = copyPacksFromOriginalUserInput;
}
}
if (config.augmentationProperties.packsInput) {
packs[config.languages[0]] ??= [];
packs[config.languages[0]].push(...config.augmentationProperties.packsInput);
}
// Append fields that are dependent on `config`
const initWithConfigStatusReport = {
...initStatusReport,
@@ -89,9 +108,12 @@ async function sendCompletedStatusReport(startedAt, config, toolsDownloadDuratio
paths,
paths_ignore: pathsIgnore,
queries: queries.join(","),
packs: JSON.stringify(packs),
trap_cache_languages: Object.keys(config.trapCaches).join(","),
trap_cache_download_size_bytes: Math.round(await (0, trap_caching_1.getTotalCacheSize)(config.trapCaches, logger)),
trap_cache_download_duration_ms: Math.round(config.trapCacheDownloadTime),
query_filters: JSON.stringify(config.originalUserInput["query-filters"] ?? []),
registries: JSON.stringify(configUtils.parseRegistriesWithoutCredentials((0, actions_util_1.getOptionalInput)("registries")) ?? []),
};
await (0, status_report_1.sendStatusReport)({
...initWithConfigStatusReport,

File diff suppressed because one or more lines are too long

4
lib/util.js generated
View File

@@ -66,6 +66,7 @@ exports.getErrorMessage = getErrorMessage;
exports.prettyPrintPack = prettyPrintPack;
exports.checkDiskUsage = checkDiskUsage;
exports.checkActionVersion = checkActionVersion;
exports.cloneObject = cloneObject;
const fs = __importStar(require("fs"));
const os = __importStar(require("os"));
const path = __importStar(require("path"));
@@ -858,4 +859,7 @@ var BuildMode;
/** The database will be created by building the source root using manually specified build steps. */
BuildMode["Manual"] = "manual";
})(BuildMode || (exports.BuildMode = BuildMode = {}));
function cloneObject(obj) {
return JSON.parse(JSON.stringify(obj));
}
//# sourceMappingURL=util.js.map

File diff suppressed because one or more lines are too long

2
node_modules/.package-lock.json generated vendored
View File

@@ -1,6 +1,6 @@
{
"name": "codeql",
"version": "3.26.0",
"version": "3.26.1",
"lockfileVersion": 3,
"requires": true,
"packages": {

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "codeql",
"version": "3.26.0",
"version": "3.26.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "codeql",
"version": "3.26.0",
"version": "3.26.1",
"license": "MIT",
"dependencies": {
"@actions/artifact": "^1.1.2",

View File

@@ -1,6 +1,6 @@
{
"name": "codeql",
"version": "3.26.0",
"version": "3.26.1",
"private": true,
"description": "CodeQL action",
"scripts": {

View File

@@ -31,7 +31,7 @@ import * as setupCodeql from "./setup-codeql";
import { ToolsFeature, isSupportedToolsFeature } from "./tools-features";
import { shouldEnableIndirectTracing } from "./tracer-config";
import * as util from "./util";
import { BuildMode, wrapError } from "./util";
import { BuildMode, wrapError, cloneObject } from "./util";
type Options = Array<string | number | boolean>;
@@ -1306,10 +1306,6 @@ async function generateCodeScanningConfig(
return codeScanningConfigFile;
}
function cloneObject<T>(obj: T): T {
return JSON.parse(JSON.stringify(obj)) as T;
}
// This constant sets the size of each TRAP cache in megabytes.
const TRAP_CACHE_SIZE_MB = 1024;

View File

@@ -881,6 +881,15 @@ function parseRegistries(
}
}
export function parseRegistriesWithoutCredentials(
registriesInput?: string,
): RegistryConfigNoCredentials[] | undefined {
return parseRegistries(registriesInput)?.map((r) => {
const { url, packages } = r;
return { url, packages };
});
}
function isLocal(configPath: string): boolean {
// If the path starts with ./, look locally
if (configPath.indexOf("./") === 0) {

View File

@@ -60,6 +60,7 @@ import {
ConfigurationError,
wrapError,
checkActionVersion,
cloneObject,
} from "./util";
import { validateWorkflow } from "./workflow";
@@ -85,12 +86,19 @@ interface InitWithConfigStatusReport extends InitStatusReport {
paths_ignore: string;
/** Comma-separated list of queries sources, from the 'queries' config field or workflow input. */
queries: string;
/** Stringified JSON object of packs, from the 'packs' config field or workflow input. */
packs: string;
/** Comma-separated list of languages for which we are using TRAP caching. */
trap_cache_languages: string;
/** Size of TRAP caches that we downloaded, in bytes. */
trap_cache_download_size_bytes: number;
/** Time taken to download TRAP caches, in milliseconds. */
trap_cache_download_duration_ms: number;
/** Stringified JSON array of registry configuration objects, from the 'registries' config field
or workflow input. **/
registries: string;
/** Stringified JSON object representing a query-filters, from the 'query-filters' config field. **/
query_filters: string;
}
/** Fields of the init status report populated when the tools source is `download`. */
@@ -174,6 +182,31 @@ async function sendCompletedStatusReport(
queries.push(...queriesInput.split(","));
}
let packs: Record<string, string[]> = {};
if (
(config.augmentationProperties.packsInputCombines ||
!config.augmentationProperties.packsInput) &&
config.originalUserInput.packs
) {
// Make a copy, because we might modify `packs`.
const copyPacksFromOriginalUserInput = cloneObject(
config.originalUserInput.packs,
);
// If it is an array, then assume there is only a single language being analyzed.
if (Array.isArray(copyPacksFromOriginalUserInput)) {
packs[config.languages[0]] = copyPacksFromOriginalUserInput;
} else {
packs = copyPacksFromOriginalUserInput;
}
}
if (config.augmentationProperties.packsInput) {
packs[config.languages[0]] ??= [];
packs[config.languages[0]].push(
...config.augmentationProperties.packsInput,
);
}
// Append fields that are dependent on `config`
const initWithConfigStatusReport: InitWithConfigStatusReport = {
...initStatusReport,
@@ -181,11 +214,20 @@ async function sendCompletedStatusReport(
paths,
paths_ignore: pathsIgnore,
queries: queries.join(","),
packs: JSON.stringify(packs),
trap_cache_languages: Object.keys(config.trapCaches).join(","),
trap_cache_download_size_bytes: Math.round(
await getTotalCacheSize(config.trapCaches, logger),
),
trap_cache_download_duration_ms: Math.round(config.trapCacheDownloadTime),
query_filters: JSON.stringify(
config.originalUserInput["query-filters"] ?? [],
),
registries: JSON.stringify(
configUtils.parseRegistriesWithoutCredentials(
getOptionalInput("registries"),
) ?? [],
),
};
await sendStatusReport({
...initWithConfigStatusReport,

View File

@@ -1100,3 +1100,7 @@ export enum BuildMode {
/** The database will be created by building the source root using manually specified build steps. */
Manual = "manual",
}
export function cloneObject<T>(obj: T): T {
return JSON.parse(JSON.stringify(obj)) as T;
}