From 38846b64f51f0cfca9d9a088590180a8883fe86a Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Thu, 28 Aug 2025 16:47:33 +0100 Subject: [PATCH] Move `UploadTarget` definitions to `analyses.ts` --- lib/analyze-action.js | 40 +++++++++++++------------- lib/init-action-post.js | 24 ++++++++-------- lib/upload-lib.js | 51 +++++++++++++--------------------- lib/upload-sarif-action.js | 40 +++++++++++++------------- src/analyses.ts | 31 +++++++++++++++++++++ src/analyze-action.ts | 5 ++-- src/init-action-post-helper.ts | 3 +- src/upload-lib.test.ts | 7 +++-- src/upload-lib.ts | 40 ++++---------------------- src/upload-sarif-action.ts | 7 +++-- 10 files changed, 121 insertions(+), 127 deletions(-) diff --git a/lib/analyze-action.js b/lib/analyze-action.js index f7d53f053..751d20137 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -92657,6 +92657,26 @@ function fixCodeQualityCategory(logger, category) { return category; } +// 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 CodeScanningTarget = { + name: "code scanning", + target: "PUT /repos/:owner/:repo/code-scanning/analysis" /* CODE_SCANNING */, + sarifPredicate: (name) => name.endsWith(".sarif") && !CodeQualityTarget.sarifPredicate(name), + sentinelPrefix: "CODEQL_UPLOAD_SARIF_" +}; +var CodeQualityTarget = { + name: "code quality", + target: "PUT /repos/:owner/:repo/code-quality/analysis" /* CODE_QUALITY */, + sarifPredicate: (name) => name.endsWith(".quality.sarif"), + sentinelPrefix: "CODEQL_UPLOAD_QUALITY_SARIF_" +}; + // src/analyze.ts var fs12 = __toESM(require("fs")); var path12 = __toESM(require("path")); @@ -93071,14 +93091,6 @@ var fs6 = __toESM(require("fs")); var path6 = __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 core5 = __toESM(require_core()); async function getTotalCacheSize(paths, logger, quiet = false) { @@ -98080,18 +98092,6 @@ function buildPayload(commitOid, ref, analysisKey, analysisName, zippedSarif, wo } return payloadObj; } -var CodeScanningTarget = { - name: "code scanning", - target: "PUT /repos/:owner/:repo/code-scanning/analysis" /* CODE_SCANNING */, - sarifPredicate: (name) => name.endsWith(".sarif") && !CodeQualityTarget.sarifPredicate(name), - sentinelPrefix: "CODEQL_UPLOAD_SARIF_" -}; -var CodeQualityTarget = { - name: "code quality", - target: "PUT /repos/:owner/:repo/code-quality/analysis" /* CODE_QUALITY */, - sarifPredicate: (name) => name.endsWith(".quality.sarif"), - sentinelPrefix: "CODEQL_UPLOAD_QUALITY_SARIF_" -}; async function uploadFiles(inputSarifPath, checkoutPath, category, features, logger, uploadTarget) { const sarifPaths = getSarifFilePaths( inputSarifPath, diff --git a/lib/init-action-post.js b/lib/init-action-post.js index 486174c91..a4794d6aa 100644 --- a/lib/init-action-post.js +++ b/lib/init-action-post.js @@ -130478,6 +130478,18 @@ var AnalysisKind = /* @__PURE__ */ ((AnalysisKind2) => { return AnalysisKind2; })(AnalysisKind || {}); var supportedAnalysisKinds = new Set(Object.values(AnalysisKind)); +var CodeScanningTarget = { + name: "code scanning", + target: "PUT /repos/:owner/:repo/code-scanning/analysis" /* CODE_SCANNING */, + sarifPredicate: (name) => name.endsWith(".sarif") && !CodeQualityTarget.sarifPredicate(name), + sentinelPrefix: "CODEQL_UPLOAD_SARIF_" +}; +var CodeQualityTarget = { + name: "code quality", + target: "PUT /repos/:owner/:repo/code-quality/analysis" /* CODE_QUALITY */, + sarifPredicate: (name) => name.endsWith(".quality.sarif"), + sentinelPrefix: "CODEQL_UPLOAD_QUALITY_SARIF_" +}; // src/caching-utils.ts var core5 = __toESM(require_core()); @@ -134744,18 +134756,6 @@ function buildPayload(commitOid, ref, analysisKey, analysisName, zippedSarif, wo } return payloadObj; } -var CodeScanningTarget = { - name: "code scanning", - target: "PUT /repos/:owner/:repo/code-scanning/analysis" /* CODE_SCANNING */, - sarifPredicate: (name) => name.endsWith(".sarif") && !CodeQualityTarget.sarifPredicate(name), - sentinelPrefix: "CODEQL_UPLOAD_SARIF_" -}; -var CodeQualityTarget = { - name: "code quality", - target: "PUT /repos/:owner/:repo/code-quality/analysis" /* CODE_QUALITY */, - sarifPredicate: (name) => name.endsWith(".quality.sarif"), - sentinelPrefix: "CODEQL_UPLOAD_QUALITY_SARIF_" -}; async function uploadFiles(inputSarifPath, checkoutPath, category, features, logger, uploadTarget) { const sarifPaths = getSarifFilePaths( inputSarifPath, diff --git a/lib/upload-lib.js b/lib/upload-lib.js index ce3c1ba0b..8b880c93c 100644 --- a/lib/upload-lib.js +++ b/lib/upload-lib.js @@ -88103,10 +88103,7 @@ var require_sarif_schema_2_1_0 = __commonJS({ // src/upload-lib.ts var upload_lib_exports = {}; __export(upload_lib_exports, { - CodeQualityTarget: () => CodeQualityTarget, - CodeScanningTarget: () => CodeScanningTarget, InvalidSarifUploadError: () => InvalidSarifUploadError, - SARIF_UPLOAD_ENDPOINT: () => SARIF_UPLOAD_ENDPOINT, buildPayload: () => buildPayload, findSarifFilesInDir: () => findSarifFilesInDir, getSarifFilePaths: () => getSarifFilePaths, @@ -91034,6 +91031,26 @@ 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 CodeScanningTarget = { + name: "code scanning", + target: "PUT /repos/:owner/:repo/code-scanning/analysis" /* CODE_SCANNING */, + sarifPredicate: (name) => name.endsWith(".sarif") && !CodeQualityTarget.sarifPredicate(name), + sentinelPrefix: "CODEQL_UPLOAD_SARIF_" +}; +var CodeQualityTarget = { + name: "code quality", + target: "PUT /repos/:owner/:repo/code-quality/analysis" /* CODE_QUALITY */, + sarifPredicate: (name) => name.endsWith(".quality.sarif"), + sentinelPrefix: "CODEQL_UPLOAD_QUALITY_SARIF_" +}; + // src/api-client.ts var core4 = __toESM(require_core()); var githubUtils = __toESM(require_utils4()); @@ -91418,14 +91435,6 @@ var fs4 = __toESM(require("fs")); var path5 = __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 core5 = __toESM(require_core()); @@ -94782,11 +94791,6 @@ function getAutomationID(category, analysis_key, environment) { } return computeAutomationID(analysis_key, environment); } -var SARIF_UPLOAD_ENDPOINT = /* @__PURE__ */ ((SARIF_UPLOAD_ENDPOINT2) => { - SARIF_UPLOAD_ENDPOINT2["CODE_SCANNING"] = "PUT /repos/:owner/:repo/code-scanning/analysis"; - SARIF_UPLOAD_ENDPOINT2["CODE_QUALITY"] = "PUT /repos/:owner/:repo/code-quality/analysis"; - return SARIF_UPLOAD_ENDPOINT2; -})(SARIF_UPLOAD_ENDPOINT || {}); async function uploadPayload(payload, repositoryNwo, logger, target) { logger.info("Uploading results"); if (isInTestMode()) { @@ -94955,18 +94959,6 @@ function buildPayload(commitOid, ref, analysisKey, analysisName, zippedSarif, wo } return payloadObj; } -var CodeScanningTarget = { - name: "code scanning", - target: "PUT /repos/:owner/:repo/code-scanning/analysis" /* CODE_SCANNING */, - sarifPredicate: (name) => name.endsWith(".sarif") && !CodeQualityTarget.sarifPredicate(name), - sentinelPrefix: "CODEQL_UPLOAD_SARIF_" -}; -var CodeQualityTarget = { - name: "code quality", - target: "PUT /repos/:owner/:repo/code-quality/analysis" /* CODE_QUALITY */, - sarifPredicate: (name) => name.endsWith(".quality.sarif"), - sentinelPrefix: "CODEQL_UPLOAD_QUALITY_SARIF_" -}; async function uploadFiles(inputSarifPath, checkoutPath, category, features, logger, uploadTarget) { const sarifPaths = getSarifFilePaths( inputSarifPath, @@ -95209,10 +95201,7 @@ function filterAlertsByDiffRange(logger, sarif) { } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { - CodeQualityTarget, - CodeScanningTarget, InvalidSarifUploadError, - SARIF_UPLOAD_ENDPOINT, buildPayload, findSarifFilesInDir, getSarifFilePaths, diff --git a/lib/upload-sarif-action.js b/lib/upload-sarif-action.js index 3d12e80bf..ca551aa0f 100644 --- a/lib/upload-sarif-action.js +++ b/lib/upload-sarif-action.js @@ -91261,6 +91261,26 @@ function fixCodeQualityCategory(logger, category) { return category; } +// 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 CodeScanningTarget = { + name: "code scanning", + target: "PUT /repos/:owner/:repo/code-scanning/analysis" /* CODE_SCANNING */, + sarifPredicate: (name) => name.endsWith(".sarif") && !CodeQualityTarget.sarifPredicate(name), + sentinelPrefix: "CODEQL_UPLOAD_SARIF_" +}; +var CodeQualityTarget = { + name: "code quality", + target: "PUT /repos/:owner/:repo/code-quality/analysis" /* CODE_QUALITY */, + sarifPredicate: (name) => name.endsWith(".quality.sarif"), + sentinelPrefix: "CODEQL_UPLOAD_QUALITY_SARIF_" +}; + // src/api-client.ts var core4 = __toESM(require_core()); var githubUtils = __toESM(require_utils4()); @@ -92553,14 +92573,6 @@ var fs5 = __toESM(require("fs")); var path6 = __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 core8 = __toESM(require_core()); @@ -95632,18 +95644,6 @@ function buildPayload(commitOid, ref, analysisKey, analysisName, zippedSarif, wo } return payloadObj; } -var CodeScanningTarget = { - name: "code scanning", - target: "PUT /repos/:owner/:repo/code-scanning/analysis" /* CODE_SCANNING */, - sarifPredicate: (name) => name.endsWith(".sarif") && !CodeQualityTarget.sarifPredicate(name), - sentinelPrefix: "CODEQL_UPLOAD_SARIF_" -}; -var CodeQualityTarget = { - name: "code quality", - target: "PUT /repos/:owner/:repo/code-quality/analysis" /* CODE_QUALITY */, - sarifPredicate: (name) => name.endsWith(".quality.sarif"), - sentinelPrefix: "CODEQL_UPLOAD_QUALITY_SARIF_" -}; async function uploadFiles(inputSarifPath, checkoutPath, category, features, logger, uploadTarget) { const sarifPaths = getSarifFilePaths( inputSarifPath, diff --git a/src/analyses.ts b/src/analyses.ts index 3ef85745f..47cb6f6f1 100644 --- a/src/analyses.ts +++ b/src/analyses.ts @@ -38,3 +38,34 @@ export async function parseAnalysisKinds( new Set(components.map((component) => component as AnalysisKind)), ); } + +// Enumerates API endpoints that accept SARIF files. +export enum SARIF_UPLOAD_ENDPOINT { + CODE_SCANNING = "PUT /repos/:owner/:repo/code-scanning/analysis", + CODE_QUALITY = "PUT /repos/:owner/:repo/code-quality/analysis", +} + +// Represents configurations for different services that we can upload SARIF to. +export interface UploadTarget { + name: string; + target: SARIF_UPLOAD_ENDPOINT; + sarifPredicate: (name: string) => boolean; + sentinelPrefix: string; +} + +// Represents the Code Scanning upload target. +export const CodeScanningTarget: UploadTarget = { + name: "code scanning", + target: SARIF_UPLOAD_ENDPOINT.CODE_SCANNING, + sarifPredicate: (name) => + name.endsWith(".sarif") && !CodeQualityTarget.sarifPredicate(name), + sentinelPrefix: "CODEQL_UPLOAD_SARIF_", +}; + +// Represents the Code Quality upload target. +export const CodeQualityTarget: UploadTarget = { + name: "code quality", + target: SARIF_UPLOAD_ENDPOINT.CODE_QUALITY, + sarifPredicate: (name) => name.endsWith(".quality.sarif"), + sentinelPrefix: "CODEQL_UPLOAD_QUALITY_SARIF_", +}; diff --git a/src/analyze-action.ts b/src/analyze-action.ts index 87af6fcca..24da7e876 100644 --- a/src/analyze-action.ts +++ b/src/analyze-action.ts @@ -5,6 +5,7 @@ import { performance } from "perf_hooks"; import * as core from "@actions/core"; import * as actionsUtil from "./actions-util"; +import * as analyses from "./analyses"; import { CodeQLAnalysisError, dbIsFinalized, @@ -332,7 +333,7 @@ async function run() { actionsUtil.getOptionalInput("category"), features, logger, - uploadLib.CodeScanningTarget, + analyses.CodeScanningTarget, ); core.setOutput("sarif-id", uploadResult.sarifID); @@ -346,7 +347,7 @@ async function run() { ), features, logger, - uploadLib.CodeQualityTarget, + analyses.CodeQualityTarget, ); core.setOutput("quality-sarif-id", qualityUploadResult.sarifID); } diff --git a/src/init-action-post-helper.ts b/src/init-action-post-helper.ts index b04e62c29..16822aa49 100644 --- a/src/init-action-post-helper.ts +++ b/src/init-action-post-helper.ts @@ -4,6 +4,7 @@ import * as core from "@actions/core"; import * as github from "@actions/github"; import * as actionsUtil from "./actions-util"; +import { CodeScanningTarget } from "./analyses"; import { getApiClient } from "./api-client"; import { CodeQL, getCodeQL } from "./codeql"; import { Config } from "./config-utils"; @@ -104,7 +105,7 @@ async function maybeUploadFailedSarif( category, features, logger, - uploadLib.CodeScanningTarget, + CodeScanningTarget, ); await uploadLib.waitForProcessing( repositoryNwo, diff --git a/src/upload-lib.test.ts b/src/upload-lib.test.ts index 96f132b21..9848d9a71 100644 --- a/src/upload-lib.test.ts +++ b/src/upload-lib.test.ts @@ -3,6 +3,7 @@ import * as path from "path"; import test from "ava"; +import { CodeQualityTarget, CodeScanningTarget } from "./analyses"; import { getRunnerLogger, Logger } from "./logging"; import { setupTests } from "./testing-utils"; import * as uploadLib from "./upload-lib"; @@ -128,7 +129,7 @@ test("finding SARIF files", async (t) => { const sarifFiles = uploadLib.findSarifFilesInDir( tmpDir, - uploadLib.CodeScanningTarget.sarifPredicate, + CodeScanningTarget.sarifPredicate, ); t.deepEqual(sarifFiles, [ @@ -140,7 +141,7 @@ test("finding SARIF files", async (t) => { const qualitySarifFiles = uploadLib.findSarifFilesInDir( tmpDir, - uploadLib.CodeQualityTarget.sarifPredicate, + CodeQualityTarget.sarifPredicate, ); t.deepEqual(qualitySarifFiles, [ @@ -335,7 +336,7 @@ test("validateUniqueCategory with different prefixes", (t) => { t.notThrows(() => uploadLib.validateUniqueCategory( createMockSarif(), - uploadLib.CodeQualityTarget.sentinelPrefix, + CodeQualityTarget.sentinelPrefix, ), ); }); diff --git a/src/upload-lib.ts b/src/upload-lib.ts index 9f4a9f103..ba1d262b4 100644 --- a/src/upload-lib.ts +++ b/src/upload-lib.ts @@ -8,6 +8,7 @@ import fileUrl from "file-url"; import * as jsonschema from "jsonschema"; import * as actionsUtil from "./actions-util"; +import * as analyses from "./analyses"; import * as api from "./api-client"; import { getGitHubVersion, wrapApiConfigurationError } from "./api-client"; import { CodeQL, getCodeQL } from "./codeql"; @@ -345,19 +346,13 @@ function getAutomationID( return api.computeAutomationID(analysis_key, environment); } -// Enumerates API endpoints that accept SARIF files. -export enum SARIF_UPLOAD_ENDPOINT { - CODE_SCANNING = "PUT /repos/:owner/:repo/code-scanning/analysis", - CODE_QUALITY = "PUT /repos/:owner/:repo/code-quality/analysis", -} - // Upload the given payload. // If the request fails then this will retry a small number of times. async function uploadPayload( payload: any, repositoryNwo: RepositoryNwo, logger: Logger, - target: SARIF_UPLOAD_ENDPOINT, + target: analyses.SARIF_UPLOAD_ENDPOINT, ): Promise { logger.info("Uploading results"); @@ -616,31 +611,6 @@ export function buildPayload( return payloadObj; } -// Represents configurations for different services that we can upload SARIF to. -export interface UploadTarget { - name: string; - target: SARIF_UPLOAD_ENDPOINT; - sarifPredicate: (name: string) => boolean; - sentinelPrefix: string; -} - -// Represents the Code Scanning upload target. -export const CodeScanningTarget: UploadTarget = { - name: "code scanning", - target: SARIF_UPLOAD_ENDPOINT.CODE_SCANNING, - sarifPredicate: (name) => - name.endsWith(".sarif") && !CodeQualityTarget.sarifPredicate(name), - sentinelPrefix: "CODEQL_UPLOAD_SARIF_", -}; - -// Represents the Code Quality upload target. -export const CodeQualityTarget: UploadTarget = { - name: "code quality", - target: SARIF_UPLOAD_ENDPOINT.CODE_QUALITY, - sarifPredicate: (name) => name.endsWith(".quality.sarif"), - sentinelPrefix: "CODEQL_UPLOAD_QUALITY_SARIF_", -}; - /** * Uploads a single SARIF file or a directory of SARIF files depending on what `inputSarifPath` refers * to. @@ -651,7 +621,7 @@ export async function uploadFiles( category: string | undefined, features: FeatureEnablement, logger: Logger, - uploadTarget: UploadTarget, + uploadTarget: analyses.UploadTarget, ): Promise { const sarifPaths = getSarifFilePaths( inputSarifPath, @@ -677,7 +647,7 @@ export async function uploadSpecifiedFiles( category: string | undefined, features: FeatureEnablement, logger: Logger, - uploadTarget: UploadTarget = CodeScanningTarget, + uploadTarget: analyses.UploadTarget = analyses.CodeScanningTarget, ): Promise { logger.startGroup(`Uploading ${uploadTarget.name} results`); logger.info(`Processing sarif files: ${JSON.stringify(sarifPaths)}`); @@ -943,7 +913,7 @@ function handleProcessingResultForUnsuccessfulExecution( export function validateUniqueCategory( sarif: SarifFile, - sentinelPrefix: string = CodeScanningTarget.sentinelPrefix, + sentinelPrefix: string = analyses.CodeScanningTarget.sentinelPrefix, ): void { // duplicate categories are allowed in the same sarif file // but not across multiple sarif files diff --git a/src/upload-sarif-action.ts b/src/upload-sarif-action.ts index 25e884ea0..e18d96b14 100644 --- a/src/upload-sarif-action.ts +++ b/src/upload-sarif-action.ts @@ -4,6 +4,7 @@ import * as core from "@actions/core"; import * as actionsUtil from "./actions-util"; import { getActionVersion, getTemporaryDirectory } from "./actions-util"; +import * as analyses from "./analyses"; import { getGitHubVersion } from "./api-client"; import { Features } from "./feature-flags"; import { Logger, getActionsLogger } from "./logging"; @@ -95,7 +96,7 @@ async function run() { category, features, logger, - upload_lib.CodeScanningTarget, + analyses.CodeScanningTarget, ); core.setOutput("sarif-id", uploadResult.sarifID); @@ -105,7 +106,7 @@ async function run() { if (fs.lstatSync(sarifPath).isDirectory()) { const qualitySarifFiles = upload_lib.findSarifFilesInDir( sarifPath, - upload_lib.CodeQualityTarget.sarifPredicate, + analyses.CodeQualityTarget.sarifPredicate, ); if (qualitySarifFiles.length !== 0) { @@ -115,7 +116,7 @@ async function run() { actionsUtil.fixCodeQualityCategory(logger, category), features, logger, - upload_lib.CodeQualityTarget, + analyses.CodeQualityTarget, ); } }