diff --git a/lib/analyze-action.js b/lib/analyze-action.js index 8b8a7932e..798cdada2 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -108432,10 +108432,13 @@ function isCodeQualityEnabled(config) { return config.analysisKinds.includes("code-quality" /* CodeQuality */); } function getPrimaryAnalysisKind(config) { + if (config.analysisKinds.length === 1) { + return config.analysisKinds[0]; + } return isCodeScanningEnabled(config) ? "code-scanning" /* CodeScanning */ : "code-quality" /* CodeQuality */; } function getPrimaryAnalysisConfig(config) { - return getPrimaryAnalysisKind(config) === "code-scanning" /* CodeScanning */ ? CodeScanning : CodeQuality; + return getAnalysisConfig(getPrimaryAnalysisKind(config)); } // src/setup-codeql.ts diff --git a/src/analyses.test.ts b/src/analyses.test.ts index 3e0fb74bc..b4a24f4ff 100644 --- a/src/analyses.test.ts +++ b/src/analyses.test.ts @@ -1,3 +1,5 @@ +import path from "path"; + import test from "ava"; import * as sinon from "sinon"; @@ -14,7 +16,6 @@ import { import { getRunnerLogger } from "./logging"; import { setupTests } from "./testing-utils"; import { ConfigurationError } from "./util"; -import path from "path"; setupTests(test); diff --git a/src/config-utils.test.ts b/src/config-utils.test.ts index 276a7a344..d0583f167 100644 --- a/src/config-utils.test.ts +++ b/src/config-utils.test.ts @@ -7,7 +7,7 @@ import * as yaml from "js-yaml"; import * as sinon from "sinon"; import * as actionsUtil from "./actions-util"; -import { AnalysisKind } from "./analyses"; +import { AnalysisKind, supportedAnalysisKinds } from "./analyses"; import * as api from "./api-client"; import { CachingKind } from "./caching-utils"; import { createStubCodeQL } from "./codeql"; @@ -1829,3 +1829,22 @@ test("hasActionsWorkflows doesn't throw if workflows folder doesn't exist", asyn t.notThrows(() => configUtils.hasActionsWorkflows(tmpDir)); }); }); + +test("getPrimaryAnalysisConfig - single analysis kind", (t) => { + // If only one analysis kind is configured, we expect to get the matching configuration. + for (const analysisKind of supportedAnalysisKinds) { + const singleKind = createTestConfig({ analysisKinds: [analysisKind] }); + t.is(configUtils.getPrimaryAnalysisConfig(singleKind).kind, analysisKind); + } +}); + +test("getPrimaryAnalysisConfig - Code Scanning + Code Quality", (t) => { + // For CS+CQ, we expect to get the Code Scanning configuration. + const codeScanningAndCodeQuality = createTestConfig({ + analysisKinds: [AnalysisKind.CodeScanning, AnalysisKind.CodeQuality], + }); + t.is( + configUtils.getPrimaryAnalysisConfig(codeScanningAndCodeQuality).kind, + AnalysisKind.CodeScanning, + ); +}); diff --git a/src/config-utils.ts b/src/config-utils.ts index e52070b47..c35bad33b 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -12,9 +12,8 @@ import { import { AnalysisConfig, AnalysisKind, - CodeQuality, codeQualityQueries, - CodeScanning, + getAnalysisConfig, } from "./analyses"; import * as api from "./api-client"; import { CachingKind, getCachingKind } from "./caching-utils"; @@ -1389,28 +1388,27 @@ export function isCodeQualityEnabled(config: Config): boolean { } /** - * Returns the primary analysis kind that the Action is initialised with. This is - * always `AnalysisKind.CodeScanning` unless `AnalysisKind.CodeScanning` is not enabled. + * Returns the primary analysis kind that the Action is initialised with. If there is only + * one analysis kind, then that is returned. * - * @returns Returns `AnalysisKind.CodeScanning` if `AnalysisKind.CodeScanning` is enabled; - * otherwise `AnalysisKind.CodeQuality`. + * The special case is Code Scanning + Code Quality, which can be enabled at the same time. + * In that case, this function returns Code Scanning. */ function getPrimaryAnalysisKind(config: Config): AnalysisKind { + if (config.analysisKinds.length === 1) { + return config.analysisKinds[0]; + } + return isCodeScanningEnabled(config) ? AnalysisKind.CodeScanning : AnalysisKind.CodeQuality; } /** - * Returns the primary analysis configuration that the Action is initialised with. This is - * always `CodeScanning` unless `CodeScanning` is not enabled. - * - * @returns Returns `CodeScanning` if `AnalysisKind.CodeScanning` is enabled; otherwise `CodeQuality`. + * Returns the primary analysis configuration that the Action is initialised with. */ export function getPrimaryAnalysisConfig(config: Config): AnalysisConfig { - return getPrimaryAnalysisKind(config) === AnalysisKind.CodeScanning - ? CodeScanning - : CodeQuality; + return getAnalysisConfig(getPrimaryAnalysisKind(config)); } /** Logs the Git version as a telemetry diagnostic. */