Merge branch 'main' into henrymercer/enable-direct-tracing

This commit is contained in:
Henry Mercer 2024-07-09 13:20:32 +01:00
commit 264cbe20c6
1621 changed files with 37815 additions and 3170 deletions

View file

@ -296,10 +296,11 @@ async function run() {
core.setOutput("sarif-output", path.resolve(outputDir));
const uploadInput = actionsUtil.getOptionalInput("upload");
if (runStats && actionsUtil.getUploadValue(uploadInput) === "always") {
uploadResult = await uploadLib.uploadFromActions(
uploadResult = await uploadLib.uploadFiles(
outputDir,
actionsUtil.getRequiredInput("checkout_path"),
actionsUtil.getOptionalInput("category"),
features,
logger,
);
core.setOutput("sarif-id", uploadResult.sarifID);

View file

@ -368,8 +368,8 @@ async function testFailedSarifUpload(
sinon.stub(workflow, "getWorkflow").resolves(actionsWorkflow);
const uploadFromActions = sinon.stub(uploadLib, "uploadFromActions");
uploadFromActions.resolves({
const uploadFiles = sinon.stub(uploadLib, "uploadFiles");
uploadFiles.resolves({
sarifID: "42",
statusReport: { raw_upload_size_bytes: 20, zipped_upload_size_bytes: 10 },
} as uploadLib.UploadResult);
@ -414,13 +414,14 @@ async function testFailedSarifUpload(
);
}
t.true(
uploadFromActions.calledOnceWith(
uploadFiles.calledOnceWith(
sinon.match.string,
sinon.match.string,
category,
sinon.match.any,
sinon.match.any,
),
`Actual args were: ${uploadFromActions.args}`,
`Actual args were: ${uploadFiles.args}`,
);
t.true(
waitForProcessing.calledOnceWith(sinon.match.any, "42", sinon.match.any, {
@ -429,7 +430,7 @@ async function testFailedSarifUpload(
);
} else {
t.true(diagnosticsExportStub.notCalled);
t.true(uploadFromActions.notCalled);
t.true(uploadFiles.notCalled);
t.true(waitForProcessing.notCalled);
}
return result;

View file

@ -104,10 +104,11 @@ async function maybeUploadFailedSarif(
}
logger.info(`Uploading failed SARIF file ${sarifFile}`);
const uploadResult = await uploadLib.uploadFromActions(
const uploadResult = await uploadLib.uploadFiles(
sarifFile,
checkoutPath,
category,
features,
logger,
);
await uploadLib.waitForProcessing(

View file

@ -15,7 +15,7 @@ import { getGitHubVersion, wrapApiConfigurationError } from "./api-client";
import { CodeQL, getCodeQL } from "./codeql";
import { getConfig } from "./config-utils";
import { EnvVar } from "./environment";
import { FeatureEnablement, Features } from "./feature-flags";
import { FeatureEnablement } from "./feature-flags";
import * as fingerprints from "./fingerprints";
import { initCodeQL } from "./init";
import { Logger } from "./logging";
@ -391,32 +391,6 @@ export function findSarifFilesInDir(sarifPath: string): string[] {
return sarifFiles;
}
/**
* Uploads a single SARIF file or a directory of SARIF files depending on what `sarifPath` refers
* to.
*/
export async function uploadFromActions(
sarifPath: string,
checkoutPath: string,
category: string | undefined,
logger: Logger,
): Promise<UploadResult> {
return await uploadFiles(
getSarifFilePaths(sarifPath),
parseRepositoryNwo(util.getRequiredEnvParam("GITHUB_REPOSITORY")),
await actionsUtil.getCommitOid(checkoutPath),
await actionsUtil.getRef(),
await api.getAnalysisKey(),
category,
util.getRequiredEnvParam("GITHUB_WORKFLOW"),
actionsUtil.getWorkflowRunID(),
actionsUtil.getWorkflowRunAttempt(),
checkoutPath,
actionsUtil.getRequiredInput("matrix"),
logger,
);
}
function getSarifFilePaths(sarifPath: string) {
if (!fs.existsSync(sarifPath)) {
// This is always a configuration error, even for first-party runs.
@ -563,32 +537,23 @@ export function buildPayload(
return payloadObj;
}
// Uploads the given set of sarif files.
// Returns true iff the upload occurred and succeeded
async function uploadFiles(
sarifFiles: string[],
repositoryNwo: RepositoryNwo,
commitOid: string,
ref: string,
analysisKey: string,
/**
* Uploads a single SARIF file or a directory of SARIF files depending on what `sarifPath` refers
* to.
*/
export async function uploadFiles(
sarifPath: string,
checkoutPath: string,
category: string | undefined,
analysisName: string | undefined,
workflowRunID: number,
workflowRunAttempt: number,
sourceRoot: string,
environment: string | undefined,
features: FeatureEnablement,
logger: Logger,
): Promise<UploadResult> {
const sarifFiles = getSarifFilePaths(sarifPath);
logger.startGroup("Uploading results");
logger.info(`Processing sarif files: ${JSON.stringify(sarifFiles)}`);
const gitHubVersion = await getGitHubVersion();
const features = new Features(
gitHubVersion,
repositoryNwo,
actionsUtil.getTemporaryDirectory(),
logger,
);
// Validate that the files we were asked to upload are all valid SARIF files
for (const file of sarifFiles) {
@ -601,8 +566,10 @@ async function uploadFiles(
features,
logger,
);
sarif = await fingerprints.addFingerprints(sarif, sourceRoot, logger);
sarif = await fingerprints.addFingerprints(sarif, checkoutPath, logger);
const analysisKey = await api.getAnalysisKey();
const environment = actionsUtil.getRequiredInput("matrix");
sarif = populateRunAutomationDetails(
sarif,
category,
@ -618,16 +585,16 @@ async function uploadFiles(
const sarifPayload = JSON.stringify(sarif);
logger.debug(`Compressing serialized SARIF`);
const zippedSarif = zlib.gzipSync(sarifPayload).toString("base64");
const checkoutURI = fileUrl(sourceRoot);
const checkoutURI = fileUrl(checkoutPath);
const payload = buildPayload(
commitOid,
ref,
await actionsUtil.getCommitOid(checkoutPath),
await actionsUtil.getRef(),
analysisKey,
analysisName,
util.getRequiredEnvParam("GITHUB_WORKFLOW"),
zippedSarif,
workflowRunID,
workflowRunAttempt,
actionsUtil.getWorkflowRunID(),
actionsUtil.getWorkflowRunAttempt(),
checkoutURI,
environment,
toolNames,
@ -643,7 +610,11 @@ async function uploadFiles(
logger.debug(`Number of results in upload: ${numResultInSarif}`);
// Make the upload
const sarifID = await uploadPayload(payload, repositoryNwo, logger);
const sarifID = await uploadPayload(
payload,
parseRepositoryNwo(util.getRequiredEnvParam("GITHUB_REPOSITORY")),
logger,
);
logger.endGroup();

View file

@ -1,8 +1,9 @@
import * as core from "@actions/core";
import * as actionsUtil from "./actions-util";
import { getActionVersion } from "./actions-util";
import { getActionVersion, getTemporaryDirectory } from "./actions-util";
import { getGitHubVersion } from "./api-client";
import { Features } from "./feature-flags";
import { Logger, getActionsLogger } from "./logging";
import { parseRepositoryNwo } from "./repository";
import {
@ -58,6 +59,16 @@ async function run() {
const gitHubVersion = await getGitHubVersion();
checkActionVersion(getActionVersion(), gitHubVersion);
const repositoryNwo = parseRepositoryNwo(
getRequiredEnvParam("GITHUB_REPOSITORY"),
);
const features = new Features(
gitHubVersion,
repositoryNwo,
getTemporaryDirectory(),
logger,
);
const startingStatusReportBase = await createStatusReportBase(
ActionName.UploadSarif,
"starting",
@ -71,10 +82,11 @@ async function run() {
}
try {
const uploadResult = await upload_lib.uploadFromActions(
const uploadResult = await upload_lib.uploadFiles(
actionsUtil.getRequiredInput("sarif_file"),
actionsUtil.getRequiredInput("checkout_path"),
actionsUtil.getOptionalInput("category"),
features,
logger,
);
core.setOutput("sarif-id", uploadResult.sarifID);