diff --git a/lib/analyze-action.js b/lib/analyze-action.js index c73256b98..c7fa77f57 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -95557,7 +95557,7 @@ async function uploadFiles(inputSarifPath, checkoutPath, category, features, log uploadTarget ); } -async function uploadSpecifiedFiles(sarifPaths, checkoutPath, category, features, logger, uploadTarget = CodeScanning) { +async function uploadSpecifiedFiles(sarifPaths, checkoutPath, category, features, logger, uploadTarget) { logger.startGroup(`Uploading ${uploadTarget.name} results`); logger.info(`Processing sarif files: ${JSON.stringify(sarifPaths)}`); const gitHubVersion = await getGitHubVersion(); @@ -95728,7 +95728,7 @@ function handleProcessingResultForUnsuccessfulExecution(response, status, logger assertNever(status); } } -function validateUniqueCategory(sarif, sentinelPrefix = CodeScanning.sentinelPrefix) { +function validateUniqueCategory(sarif, sentinelPrefix) { const categories = {}; for (const run2 of sarif.runs) { const id = run2?.automationDetails?.id; diff --git a/lib/init-action-post.js b/lib/init-action-post.js index 558d20426..be3378279 100644 --- a/lib/init-action-post.js +++ b/lib/init-action-post.js @@ -133010,7 +133010,7 @@ async function uploadFiles(inputSarifPath, checkoutPath, category, features, log uploadTarget ); } -async function uploadSpecifiedFiles(sarifPaths, checkoutPath, category, features, logger, uploadTarget = CodeScanning) { +async function uploadSpecifiedFiles(sarifPaths, checkoutPath, category, features, logger, uploadTarget) { logger.startGroup(`Uploading ${uploadTarget.name} results`); logger.info(`Processing sarif files: ${JSON.stringify(sarifPaths)}`); const gitHubVersion = await getGitHubVersion(); @@ -133181,7 +133181,7 @@ function handleProcessingResultForUnsuccessfulExecution(response, status, logger assertNever(status); } } -function validateUniqueCategory(sarif, sentinelPrefix = CodeScanning.sentinelPrefix) { +function validateUniqueCategory(sarif, sentinelPrefix) { const categories = {}; for (const run2 of sarif.runs) { const id = run2?.automationDetails?.id; diff --git a/lib/upload-lib.js b/lib/upload-lib.js index b3acaa33d..2483ea10e 100644 --- a/lib/upload-lib.js +++ b/lib/upload-lib.js @@ -88490,30 +88490,6 @@ async function runTool(cmd, args = [], opts = {}) { return stdout; } -// src/analyses.ts -var AnalysisKind = /* @__PURE__ */ ((AnalysisKind2) => { - AnalysisKind2["CodeScanning"] = "code-scanning"; - AnalysisKind2["CodeQuality"] = "code-quality"; - return AnalysisKind2; -})(AnalysisKind || {}); -var supportedAnalysisKinds = new Set(Object.values(AnalysisKind)); -var CodeScanning = { - kind: "code-scanning" /* CodeScanning */, - name: "code scanning", - target: "PUT /repos/:owner/:repo/code-scanning/analysis" /* CODE_SCANNING */, - sarifExtension: ".sarif", - sarifPredicate: (name) => name.endsWith(CodeScanning.sarifExtension) && !CodeQuality.sarifPredicate(name), - sentinelPrefix: "CODEQL_UPLOAD_SARIF_" -}; -var CodeQuality = { - kind: "code-quality" /* CodeQuality */, - name: "code quality", - target: "PUT /repos/:owner/:repo/code-quality/analysis" /* CODE_QUALITY */, - sarifExtension: ".quality.sarif", - sarifPredicate: (name) => name.endsWith(CodeQuality.sarifExtension), - sentinelPrefix: "CODEQL_UPLOAD_QUALITY_SARIF_" -}; - // src/api-client.ts var core5 = __toESM(require_core()); var githubUtils = __toESM(require_utils4()); @@ -88898,6 +88874,14 @@ var fs7 = __toESM(require("fs")); var path9 = __toESM(require("path")); var semver4 = __toESM(require_semver2()); +// src/analyses.ts +var AnalysisKind = /* @__PURE__ */ ((AnalysisKind2) => { + AnalysisKind2["CodeScanning"] = "code-scanning"; + AnalysisKind2["CodeQuality"] = "code-quality"; + return AnalysisKind2; +})(AnalysisKind || {}); +var supportedAnalysisKinds = new Set(Object.values(AnalysisKind)); + // src/caching-utils.ts var core6 = __toESM(require_core()); @@ -92398,7 +92382,7 @@ async function uploadFiles(inputSarifPath, checkoutPath, category, features, log uploadTarget ); } -async function uploadSpecifiedFiles(sarifPaths, checkoutPath, category, features, logger, uploadTarget = CodeScanning) { +async function uploadSpecifiedFiles(sarifPaths, checkoutPath, category, features, logger, uploadTarget) { logger.startGroup(`Uploading ${uploadTarget.name} results`); logger.info(`Processing sarif files: ${JSON.stringify(sarifPaths)}`); const gitHubVersion = await getGitHubVersion(); @@ -92569,7 +92553,7 @@ function handleProcessingResultForUnsuccessfulExecution(response, status, logger assertNever(status); } } -function validateUniqueCategory(sarif, sentinelPrefix = CodeScanning.sentinelPrefix) { +function validateUniqueCategory(sarif, sentinelPrefix) { const categories = {}; for (const run of sarif.runs) { const id = run?.automationDetails?.id; diff --git a/lib/upload-sarif-action.js b/lib/upload-sarif-action.js index 6d5a9c8f7..7fed9664b 100644 --- a/lib/upload-sarif-action.js +++ b/lib/upload-sarif-action.js @@ -93083,7 +93083,7 @@ async function uploadFiles(inputSarifPath, checkoutPath, category, features, log uploadTarget ); } -async function uploadSpecifiedFiles(sarifPaths, checkoutPath, category, features, logger, uploadTarget = CodeScanning) { +async function uploadSpecifiedFiles(sarifPaths, checkoutPath, category, features, logger, uploadTarget) { logger.startGroup(`Uploading ${uploadTarget.name} results`); logger.info(`Processing sarif files: ${JSON.stringify(sarifPaths)}`); const gitHubVersion = await getGitHubVersion(); @@ -93254,7 +93254,7 @@ function handleProcessingResultForUnsuccessfulExecution(response, status, logger assertNever(status); } } -function validateUniqueCategory(sarif, sentinelPrefix = CodeScanning.sentinelPrefix) { +function validateUniqueCategory(sarif, sentinelPrefix) { const categories = {}; for (const run2 of sarif.runs) { const id = run2?.automationDetails?.id; diff --git a/src/upload-lib.test.ts b/src/upload-lib.test.ts index 3e463b944..bfa5e9844 100644 --- a/src/upload-lib.test.ts +++ b/src/upload-lib.test.ts @@ -212,109 +212,237 @@ test("populateRunAutomationDetails", (t) => { }); test("validateUniqueCategory when empty", (t) => { - t.notThrows(() => uploadLib.validateUniqueCategory(createMockSarif())); - t.throws(() => uploadLib.validateUniqueCategory(createMockSarif())); + t.notThrows(() => + uploadLib.validateUniqueCategory( + createMockSarif(), + CodeScanning.sentinelPrefix, + ), + ); + t.throws(() => + uploadLib.validateUniqueCategory( + createMockSarif(), + CodeScanning.sentinelPrefix, + ), + ); }); test("validateUniqueCategory for automation details id", (t) => { - t.notThrows(() => uploadLib.validateUniqueCategory(createMockSarif("abc"))); - t.throws(() => uploadLib.validateUniqueCategory(createMockSarif("abc"))); - t.throws(() => uploadLib.validateUniqueCategory(createMockSarif("AbC"))); + t.notThrows(() => + uploadLib.validateUniqueCategory( + createMockSarif("abc"), + CodeScanning.sentinelPrefix, + ), + ); + t.throws(() => + uploadLib.validateUniqueCategory( + createMockSarif("abc"), + CodeScanning.sentinelPrefix, + ), + ); + t.throws(() => + uploadLib.validateUniqueCategory( + createMockSarif("AbC"), + CodeScanning.sentinelPrefix, + ), + ); - t.notThrows(() => uploadLib.validateUniqueCategory(createMockSarif("def"))); - t.throws(() => uploadLib.validateUniqueCategory(createMockSarif("def"))); + t.notThrows(() => + uploadLib.validateUniqueCategory( + createMockSarif("def"), + CodeScanning.sentinelPrefix, + ), + ); + t.throws(() => + uploadLib.validateUniqueCategory( + createMockSarif("def"), + CodeScanning.sentinelPrefix, + ), + ); // Our category sanitization is not perfect. Here are some examples // of where we see false clashes t.notThrows(() => - uploadLib.validateUniqueCategory(createMockSarif("abc/def")), + uploadLib.validateUniqueCategory( + createMockSarif("abc/def"), + CodeScanning.sentinelPrefix, + ), + ); + t.throws(() => + uploadLib.validateUniqueCategory( + createMockSarif("abc@def"), + CodeScanning.sentinelPrefix, + ), + ); + t.throws(() => + uploadLib.validateUniqueCategory( + createMockSarif("abc_def"), + CodeScanning.sentinelPrefix, + ), + ); + t.throws(() => + uploadLib.validateUniqueCategory( + createMockSarif("abc def"), + CodeScanning.sentinelPrefix, + ), ); - t.throws(() => uploadLib.validateUniqueCategory(createMockSarif("abc@def"))); - t.throws(() => uploadLib.validateUniqueCategory(createMockSarif("abc_def"))); - t.throws(() => uploadLib.validateUniqueCategory(createMockSarif("abc def"))); // this one is fine t.notThrows(() => - uploadLib.validateUniqueCategory(createMockSarif("abc_ def")), + uploadLib.validateUniqueCategory( + createMockSarif("abc_ def"), + CodeScanning.sentinelPrefix, + ), ); }); test("validateUniqueCategory for tool name", (t) => { t.notThrows(() => - uploadLib.validateUniqueCategory(createMockSarif(undefined, "abc")), + uploadLib.validateUniqueCategory( + createMockSarif(undefined, "abc"), + CodeScanning.sentinelPrefix, + ), ); t.throws(() => - uploadLib.validateUniqueCategory(createMockSarif(undefined, "abc")), + uploadLib.validateUniqueCategory( + createMockSarif(undefined, "abc"), + CodeScanning.sentinelPrefix, + ), ); t.throws(() => - uploadLib.validateUniqueCategory(createMockSarif(undefined, "AbC")), + uploadLib.validateUniqueCategory( + createMockSarif(undefined, "AbC"), + CodeScanning.sentinelPrefix, + ), ); t.notThrows(() => - uploadLib.validateUniqueCategory(createMockSarif(undefined, "def")), + uploadLib.validateUniqueCategory( + createMockSarif(undefined, "def"), + CodeScanning.sentinelPrefix, + ), ); t.throws(() => - uploadLib.validateUniqueCategory(createMockSarif(undefined, "def")), + uploadLib.validateUniqueCategory( + createMockSarif(undefined, "def"), + CodeScanning.sentinelPrefix, + ), ); // Our category sanitization is not perfect. Here are some examples // of where we see false clashes t.notThrows(() => - uploadLib.validateUniqueCategory(createMockSarif(undefined, "abc/def")), + uploadLib.validateUniqueCategory( + createMockSarif(undefined, "abc/def"), + CodeScanning.sentinelPrefix, + ), ); t.throws(() => - uploadLib.validateUniqueCategory(createMockSarif(undefined, "abc@def")), + uploadLib.validateUniqueCategory( + createMockSarif(undefined, "abc@def"), + CodeScanning.sentinelPrefix, + ), ); t.throws(() => - uploadLib.validateUniqueCategory(createMockSarif(undefined, "abc_def")), + uploadLib.validateUniqueCategory( + createMockSarif(undefined, "abc_def"), + CodeScanning.sentinelPrefix, + ), ); t.throws(() => - uploadLib.validateUniqueCategory(createMockSarif(undefined, "abc def")), + uploadLib.validateUniqueCategory( + createMockSarif(undefined, "abc def"), + CodeScanning.sentinelPrefix, + ), ); // this one is fine t.notThrows(() => - uploadLib.validateUniqueCategory(createMockSarif("abc_ def")), + uploadLib.validateUniqueCategory( + createMockSarif("abc_ def"), + CodeScanning.sentinelPrefix, + ), ); }); test("validateUniqueCategory for automation details id and tool name", (t) => { t.notThrows(() => - uploadLib.validateUniqueCategory(createMockSarif("abc", "abc")), + uploadLib.validateUniqueCategory( + createMockSarif("abc", "abc"), + CodeScanning.sentinelPrefix, + ), ); t.throws(() => - uploadLib.validateUniqueCategory(createMockSarif("abc", "abc")), + uploadLib.validateUniqueCategory( + createMockSarif("abc", "abc"), + CodeScanning.sentinelPrefix, + ), ); t.notThrows(() => - uploadLib.validateUniqueCategory(createMockSarif("abc_", "def")), + uploadLib.validateUniqueCategory( + createMockSarif("abc_", "def"), + CodeScanning.sentinelPrefix, + ), ); t.throws(() => - uploadLib.validateUniqueCategory(createMockSarif("abc_", "def")), + uploadLib.validateUniqueCategory( + createMockSarif("abc_", "def"), + CodeScanning.sentinelPrefix, + ), ); t.notThrows(() => - uploadLib.validateUniqueCategory(createMockSarif("ghi", "_jkl")), + uploadLib.validateUniqueCategory( + createMockSarif("ghi", "_jkl"), + CodeScanning.sentinelPrefix, + ), ); t.throws(() => - uploadLib.validateUniqueCategory(createMockSarif("ghi", "_jkl")), + uploadLib.validateUniqueCategory( + createMockSarif("ghi", "_jkl"), + CodeScanning.sentinelPrefix, + ), ); // Our category sanitization is not perfect. Here are some examples // of where we see false clashes - t.notThrows(() => uploadLib.validateUniqueCategory(createMockSarif("abc"))); - t.throws(() => uploadLib.validateUniqueCategory(createMockSarif("abc", "_"))); - t.notThrows(() => - uploadLib.validateUniqueCategory(createMockSarif("abc", "def__")), - ); - t.throws(() => uploadLib.validateUniqueCategory(createMockSarif("abc_def"))); - - t.notThrows(() => - uploadLib.validateUniqueCategory(createMockSarif("mno_", "pqr")), + uploadLib.validateUniqueCategory( + createMockSarif("abc"), + CodeScanning.sentinelPrefix, + ), ); t.throws(() => - uploadLib.validateUniqueCategory(createMockSarif("mno", "_pqr")), + uploadLib.validateUniqueCategory( + createMockSarif("abc", "_"), + CodeScanning.sentinelPrefix, + ), + ); + + t.notThrows(() => + uploadLib.validateUniqueCategory( + createMockSarif("abc", "def__"), + CodeScanning.sentinelPrefix, + ), + ); + t.throws(() => + uploadLib.validateUniqueCategory( + createMockSarif("abc_def"), + CodeScanning.sentinelPrefix, + ), + ); + + t.notThrows(() => + uploadLib.validateUniqueCategory( + createMockSarif("mno_", "pqr"), + CodeScanning.sentinelPrefix, + ), + ); + t.throws(() => + uploadLib.validateUniqueCategory( + createMockSarif("mno", "_pqr"), + CodeScanning.sentinelPrefix, + ), ); }); @@ -324,15 +452,26 @@ test("validateUniqueCategory for multiple runs", (t) => { // duplicate categories are allowed within the same sarif file const multiSarif = { runs: [sarif1.runs[0], sarif1.runs[0], sarif2.runs[0]] }; - t.notThrows(() => uploadLib.validateUniqueCategory(multiSarif)); + t.notThrows(() => + uploadLib.validateUniqueCategory(multiSarif, CodeScanning.sentinelPrefix), + ); // should throw if there are duplicate categories in separate validations - t.throws(() => uploadLib.validateUniqueCategory(sarif1)); - t.throws(() => uploadLib.validateUniqueCategory(sarif2)); + t.throws(() => + uploadLib.validateUniqueCategory(sarif1, CodeScanning.sentinelPrefix), + ); + t.throws(() => + uploadLib.validateUniqueCategory(sarif2, CodeScanning.sentinelPrefix), + ); }); test("validateUniqueCategory with different prefixes", (t) => { - t.notThrows(() => uploadLib.validateUniqueCategory(createMockSarif())); + t.notThrows(() => + uploadLib.validateUniqueCategory( + createMockSarif(), + CodeScanning.sentinelPrefix, + ), + ); t.notThrows(() => uploadLib.validateUniqueCategory( createMockSarif(), diff --git a/src/upload-lib.ts b/src/upload-lib.ts index cd11b8e3f..8939e1694 100644 --- a/src/upload-lib.ts +++ b/src/upload-lib.ts @@ -647,7 +647,7 @@ export async function uploadSpecifiedFiles( category: string | undefined, features: FeatureEnablement, logger: Logger, - uploadTarget: analyses.AnalysisConfig = analyses.CodeScanning, + uploadTarget: analyses.AnalysisConfig, ): Promise { logger.startGroup(`Uploading ${uploadTarget.name} results`); logger.info(`Processing sarif files: ${JSON.stringify(sarifPaths)}`); @@ -913,7 +913,7 @@ function handleProcessingResultForUnsuccessfulExecution( export function validateUniqueCategory( sarif: SarifFile, - sentinelPrefix: string = analyses.CodeScanning.sentinelPrefix, + sentinelPrefix: string, ): void { // duplicate categories are allowed in the same sarif file // but not across multiple sarif files