Merge remote-tracking branch 'origin/main' into hmakholm/pr/2.7.1
This commit is contained in:
commit
720bf9d157
10 changed files with 101 additions and 22 deletions
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
- The `init` step of the Action now supports `ram` and `threads` inputs to limit resource use of CodeQL extractors. These inputs also serve as defaults to the subsequent `analyze` step, which finalizes the database and executes queries. [#738](https://github.com/github/codeql-action/pull/738)
|
- The `init` step of the Action now supports `ram` and `threads` inputs to limit resource use of CodeQL extractors. These inputs also serve as defaults to the subsequent `analyze` step, which finalizes the database and executes queries. [#738](https://github.com/github/codeql-action/pull/738)
|
||||||
- When used with CodeQL 2.7.1 or above, the Action now includes custom query help in the analysis results uploaded to GitHub code scanning, if available. To add help text for a custom query, create a Markdown file next to the `.ql` file containing the query, using the same base name but the file extension `.md`. [#804](https://github.com/github/codeql-action/pull/804)
|
- When used with CodeQL 2.7.1 or above, the Action now includes custom query help in the analysis results uploaded to GitHub code scanning, if available. To add help text for a custom query, create a Markdown file next to the `.ql` file containing the query, using the same base name but the file extension `.md`. [#804](https://github.com/github/codeql-action/pull/804)
|
||||||
|
- The `upload-sarif` action now allows multiple uploads in a single job, as long as they have different categories. [#801](https://github.com/github/codeql-action/pull/801)
|
||||||
|
|
||||||
## 1.0.21 - 28 Oct 2021
|
## 1.0.21 - 28 Oct 2021
|
||||||
|
|
||||||
|
|
|
||||||
1
lib/actions-util.js
generated
1
lib/actions-util.js
generated
|
|
@ -98,6 +98,7 @@ const getCommitOid = async function (ref = "HEAD") {
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
core.info(`Failed to call git to get current commit. Continuing with data from environment: ${e}`);
|
core.info(`Failed to call git to get current commit. Continuing with data from environment: ${e}`);
|
||||||
|
core.info(e.stack || "NO STACK");
|
||||||
return (0, util_1.getRequiredEnvParam)("GITHUB_SHA");
|
return (0, util_1.getRequiredEnvParam)("GITHUB_SHA");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
36
lib/upload-lib.js
generated
36
lib/upload-lib.js
generated
|
|
@ -22,7 +22,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.buildPayload = exports.validateSarifFileSchema = exports.countResultsInSarif = exports.uploadFromRunner = exports.uploadFromActions = exports.findSarifFilesInDir = exports.populateRunAutomationDetails = exports.combineSarifFiles = void 0;
|
exports.validateUniqueCategory = exports.buildPayload = exports.validateSarifFileSchema = exports.countResultsInSarif = exports.uploadFromRunner = exports.uploadFromActions = exports.findSarifFilesInDir = exports.populateRunAutomationDetails = exports.combineSarifFiles = void 0;
|
||||||
const fs = __importStar(require("fs"));
|
const fs = __importStar(require("fs"));
|
||||||
const path = __importStar(require("path"));
|
const path = __importStar(require("path"));
|
||||||
const zlib_1 = __importDefault(require("zlib"));
|
const zlib_1 = __importDefault(require("zlib"));
|
||||||
|
|
@ -243,14 +243,7 @@ exports.buildPayload = buildPayload;
|
||||||
async function uploadFiles(sarifFiles, repositoryNwo, commitOid, ref, analysisKey, category, analysisName, workflowRunID, sourceRoot, environment, gitHubVersion, apiDetails, logger) {
|
async function uploadFiles(sarifFiles, repositoryNwo, commitOid, ref, analysisKey, category, analysisName, workflowRunID, sourceRoot, environment, gitHubVersion, apiDetails, logger) {
|
||||||
logger.startGroup("Uploading results");
|
logger.startGroup("Uploading results");
|
||||||
logger.info(`Processing sarif files: ${JSON.stringify(sarifFiles)}`);
|
logger.info(`Processing sarif files: ${JSON.stringify(sarifFiles)}`);
|
||||||
if (util.isActions()) {
|
validateUniqueCategory(category);
|
||||||
// This check only works on actions as env vars don't persist between calls to the runner
|
|
||||||
const sentinelEnvVar = "CODEQL_UPLOAD_SARIF";
|
|
||||||
if (process.env[sentinelEnvVar]) {
|
|
||||||
throw new Error("Aborting upload: only one run of the codeql/analyze or codeql/upload-sarif actions is allowed per job");
|
|
||||||
}
|
|
||||||
core.exportVariable(sentinelEnvVar, sentinelEnvVar);
|
|
||||||
}
|
|
||||||
// Validate that the files we were asked to upload are all valid SARIF files
|
// Validate that the files we were asked to upload are all valid SARIF files
|
||||||
for (const file of sarifFiles) {
|
for (const file of sarifFiles) {
|
||||||
validateSarifFileSchema(file, logger);
|
validateSarifFileSchema(file, logger);
|
||||||
|
|
@ -278,4 +271,29 @@ async function uploadFiles(sarifFiles, repositoryNwo, commitOid, ref, analysisKe
|
||||||
num_results_in_sarif: numResultInSarif,
|
num_results_in_sarif: numResultInSarif,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
function validateUniqueCategory(category) {
|
||||||
|
if (util.isActions()) {
|
||||||
|
// This check only works on actions as env vars don't persist between calls to the runner
|
||||||
|
const sentinelEnvVar = `CODEQL_UPLOAD_SARIF${category ? `_${sanitize(category)}` : ""}`;
|
||||||
|
if (process.env[sentinelEnvVar]) {
|
||||||
|
throw new Error("Aborting upload: only one run of the codeql/analyze or codeql/upload-sarif actions is allowed per job per category. " +
|
||||||
|
"Please specify a unique `category` to call this action multiple times. " +
|
||||||
|
`Category: ${category ? category : "(none)"}`);
|
||||||
|
}
|
||||||
|
core.exportVariable(sentinelEnvVar, sentinelEnvVar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.validateUniqueCategory = validateUniqueCategory;
|
||||||
|
/**
|
||||||
|
* Santizes a string to be used as an environment variable name.
|
||||||
|
* This will replace all non-alphanumeric characters with underscores.
|
||||||
|
* There could still be some false category clashes if two uploads
|
||||||
|
* occur that differ only in their non-alphanumeric characters. This is
|
||||||
|
* unlikely.
|
||||||
|
*
|
||||||
|
* @param str the initial value to sanitize
|
||||||
|
*/
|
||||||
|
function sanitize(str) {
|
||||||
|
return str.replace(/[^a-zA-Z0-9_]/g, "_");
|
||||||
|
}
|
||||||
//# sourceMappingURL=upload-lib.js.map
|
//# sourceMappingURL=upload-lib.js.map
|
||||||
File diff suppressed because one or more lines are too long
16
lib/upload-lib.test.js
generated
16
lib/upload-lib.test.js
generated
|
|
@ -113,4 +113,20 @@ ava_1.default.beforeEach(() => {
|
||||||
modifiedSarif = uploadLib.populateRunAutomationDetails(sarif, undefined, analysisKey, '{"os": "linux", "language": "javascript"}');
|
modifiedSarif = uploadLib.populateRunAutomationDetails(sarif, undefined, analysisKey, '{"os": "linux", "language": "javascript"}');
|
||||||
t.deepEqual(modifiedSarif, expectedSarif);
|
t.deepEqual(modifiedSarif, expectedSarif);
|
||||||
});
|
});
|
||||||
|
(0, ava_1.default)("validateUniqueCategory", (t) => {
|
||||||
|
t.notThrows(() => uploadLib.validateUniqueCategory(undefined));
|
||||||
|
t.throws(() => uploadLib.validateUniqueCategory(undefined));
|
||||||
|
t.notThrows(() => uploadLib.validateUniqueCategory("abc"));
|
||||||
|
t.throws(() => uploadLib.validateUniqueCategory("abc"));
|
||||||
|
t.notThrows(() => uploadLib.validateUniqueCategory("def"));
|
||||||
|
t.throws(() => uploadLib.validateUniqueCategory("def"));
|
||||||
|
// Our category sanitization is not perfect. Here are some examples
|
||||||
|
// of where we see false clashes
|
||||||
|
t.notThrows(() => uploadLib.validateUniqueCategory("abc/def"));
|
||||||
|
t.throws(() => uploadLib.validateUniqueCategory("abc@def"));
|
||||||
|
t.throws(() => uploadLib.validateUniqueCategory("abc_def"));
|
||||||
|
t.throws(() => uploadLib.validateUniqueCategory("abc def"));
|
||||||
|
// this one is fine
|
||||||
|
t.notThrows(() => uploadLib.validateUniqueCategory("abc_ def"));
|
||||||
|
});
|
||||||
//# sourceMappingURL=upload-lib.test.js.map
|
//# sourceMappingURL=upload-lib.test.js.map
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -85,6 +85,7 @@ export const getCommitOid = async function (ref = "HEAD"): Promise<string> {
|
||||||
core.info(
|
core.info(
|
||||||
`Failed to call git to get current commit. Continuing with data from environment: ${e}`
|
`Failed to call git to get current commit. Continuing with data from environment: ${e}`
|
||||||
);
|
);
|
||||||
|
core.info((e as Error).stack || "NO STACK");
|
||||||
return getRequiredEnvParam("GITHUB_SHA");
|
return getRequiredEnvParam("GITHUB_SHA");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -175,3 +175,24 @@ test("populateRunAutomationDetails", (t) => {
|
||||||
);
|
);
|
||||||
t.deepEqual(modifiedSarif, expectedSarif);
|
t.deepEqual(modifiedSarif, expectedSarif);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("validateUniqueCategory", (t) => {
|
||||||
|
t.notThrows(() => uploadLib.validateUniqueCategory(undefined));
|
||||||
|
t.throws(() => uploadLib.validateUniqueCategory(undefined));
|
||||||
|
|
||||||
|
t.notThrows(() => uploadLib.validateUniqueCategory("abc"));
|
||||||
|
t.throws(() => uploadLib.validateUniqueCategory("abc"));
|
||||||
|
|
||||||
|
t.notThrows(() => uploadLib.validateUniqueCategory("def"));
|
||||||
|
t.throws(() => uploadLib.validateUniqueCategory("def"));
|
||||||
|
|
||||||
|
// Our category sanitization is not perfect. Here are some examples
|
||||||
|
// of where we see false clashes
|
||||||
|
t.notThrows(() => uploadLib.validateUniqueCategory("abc/def"));
|
||||||
|
t.throws(() => uploadLib.validateUniqueCategory("abc@def"));
|
||||||
|
t.throws(() => uploadLib.validateUniqueCategory("abc_def"));
|
||||||
|
t.throws(() => uploadLib.validateUniqueCategory("abc def"));
|
||||||
|
|
||||||
|
// this one is fine
|
||||||
|
t.notThrows(() => uploadLib.validateUniqueCategory("abc_ def"));
|
||||||
|
});
|
||||||
|
|
|
||||||
|
|
@ -343,16 +343,7 @@ async function uploadFiles(
|
||||||
logger.startGroup("Uploading results");
|
logger.startGroup("Uploading results");
|
||||||
logger.info(`Processing sarif files: ${JSON.stringify(sarifFiles)}`);
|
logger.info(`Processing sarif files: ${JSON.stringify(sarifFiles)}`);
|
||||||
|
|
||||||
if (util.isActions()) {
|
validateUniqueCategory(category);
|
||||||
// This check only works on actions as env vars don't persist between calls to the runner
|
|
||||||
const sentinelEnvVar = "CODEQL_UPLOAD_SARIF";
|
|
||||||
if (process.env[sentinelEnvVar]) {
|
|
||||||
throw new Error(
|
|
||||||
"Aborting upload: only one run of the codeql/analyze or codeql/upload-sarif actions is allowed per job"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
core.exportVariable(sentinelEnvVar, sentinelEnvVar);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validate that the files we were asked to upload are all valid SARIF files
|
// Validate that the files we were asked to upload are all valid SARIF files
|
||||||
for (const file of sarifFiles) {
|
for (const file of sarifFiles) {
|
||||||
|
|
@ -409,3 +400,33 @@ async function uploadFiles(
|
||||||
num_results_in_sarif: numResultInSarif,
|
num_results_in_sarif: numResultInSarif,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function validateUniqueCategory(category: string | undefined) {
|
||||||
|
if (util.isActions()) {
|
||||||
|
// This check only works on actions as env vars don't persist between calls to the runner
|
||||||
|
const sentinelEnvVar = `CODEQL_UPLOAD_SARIF${
|
||||||
|
category ? `_${sanitize(category)}` : ""
|
||||||
|
}`;
|
||||||
|
if (process.env[sentinelEnvVar]) {
|
||||||
|
throw new Error(
|
||||||
|
"Aborting upload: only one run of the codeql/analyze or codeql/upload-sarif actions is allowed per job per category. " +
|
||||||
|
"Please specify a unique `category` to call this action multiple times. " +
|
||||||
|
`Category: ${category ? category : "(none)"}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
core.exportVariable(sentinelEnvVar, sentinelEnvVar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Santizes a string to be used as an environment variable name.
|
||||||
|
* This will replace all non-alphanumeric characters with underscores.
|
||||||
|
* There could still be some false category clashes if two uploads
|
||||||
|
* occur that differ only in their non-alphanumeric characters. This is
|
||||||
|
* unlikely.
|
||||||
|
*
|
||||||
|
* @param str the initial value to sanitize
|
||||||
|
*/
|
||||||
|
function sanitize(str: string) {
|
||||||
|
return str.replace(/[^a-zA-Z0-9_]/g, "_");
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue