Skip to content

Commit bc93b04

Browse files
committed
Add initAnalysisKinds for analysis-kinds enablement logic
1 parent adf39dd commit bc93b04

File tree

2 files changed

+77
-1
lines changed

2 files changed

+77
-1
lines changed

src/analyses.test.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
import test from "ava";
2+
import * as sinon from "sinon";
23

4+
import * as actionsUtil from "./actions-util";
35
import {
46
AnalysisKind,
7+
initAnalysisKinds,
58
parseAnalysisKinds,
69
supportedAnalysisKinds,
710
} from "./analyses";
11+
import { getRunnerLogger } from "./logging";
12+
import { setupTests } from "./testing-utils";
813
import { ConfigurationError } from "./util";
914

15+
setupTests(test);
16+
1017
test("All known analysis kinds can be parsed successfully", async (t) => {
1118
for (const analysisKind of supportedAnalysisKinds) {
1219
t.deepEqual(await parseAnalysisKinds(analysisKind), [analysisKind]);
@@ -34,3 +41,29 @@ test("Parsing analysis kinds requires at least one analysis kind", async (t) =>
3441
instanceOf: ConfigurationError,
3542
});
3643
});
44+
45+
test("initAnalysisKinds - returns expected analysis kinds for `analysis-kinds` input", async (t) => {
46+
const requiredInputStub = sinon.stub(actionsUtil, "getRequiredInput");
47+
requiredInputStub
48+
.withArgs("analysis-kinds")
49+
.returns("code-scanning,code-quality");
50+
const result = await initAnalysisKinds(getRunnerLogger(true));
51+
t.assert(result.includes(AnalysisKind.CodeScanning));
52+
t.assert(result.includes(AnalysisKind.CodeQuality));
53+
});
54+
55+
test("initAnalysisKinds - includes `code-quality` when deprecated `quality-queries` input is used", async (t) => {
56+
const requiredInputStub = sinon.stub(actionsUtil, "getRequiredInput");
57+
requiredInputStub.withArgs("analysis-kinds").returns("code-scanning");
58+
const optionalInputStub = sinon.stub(actionsUtil, "getOptionalInput");
59+
optionalInputStub.withArgs("quality-queries").returns("code-quality");
60+
const result = await initAnalysisKinds(getRunnerLogger(true));
61+
t.assert(result.includes(AnalysisKind.CodeScanning));
62+
t.assert(result.includes(AnalysisKind.CodeQuality));
63+
});
64+
65+
test("initAnalysisKinds - throws if `analysis-kinds` input is invalid", async (t) => {
66+
const requiredInputStub = sinon.stub(actionsUtil, "getRequiredInput");
67+
requiredInputStub.withArgs("analysis-kinds").returns("no-such-thing");
68+
await t.throwsAsync(initAnalysisKinds(getRunnerLogger(true)));
69+
});

src/analyses.ts

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { fixCodeQualityCategory } from "./actions-util";
1+
import {
2+
fixCodeQualityCategory,
3+
getOptionalInput,
4+
getRequiredInput,
5+
} from "./actions-util";
26
import { Logger } from "./logging";
37
import { ConfigurationError } from "./util";
48

@@ -41,6 +45,45 @@ export async function parseAnalysisKinds(
4145
);
4246
}
4347

48+
/**
49+
* Initialises the analysis kinds for the analysis based on the `analysis-kinds` input.
50+
* This function will also use the deprecated `quality-queries` input as an indicator to enable `code-quality`.
51+
* If the `analysis-kinds` input cannot be parsed, a `ConfigurationError` is thrown.
52+
*
53+
* @param logger The logger to use.
54+
* @returns The array of enabled analysis kinds.
55+
* @throws A `ConfigurationError` if the `analysis-kinds` input cannot be parsed.
56+
*/
57+
export async function initAnalysisKinds(
58+
logger: Logger,
59+
): Promise<AnalysisKind[]> {
60+
const analysisKinds = await parseAnalysisKinds(
61+
getRequiredInput("analysis-kinds"),
62+
);
63+
64+
// Warn that `quality-queries` is deprecated if there is an argument for it.
65+
const qualityQueriesInput = getOptionalInput("quality-queries");
66+
67+
if (qualityQueriesInput !== undefined) {
68+
logger.warning(
69+
"The `quality-queries` input is deprecated and will be removed in a future version of the CodeQL Action. " +
70+
"Use the `analysis-kinds` input to configure different analysis kinds instead.",
71+
);
72+
}
73+
74+
// For backwards compatibility, add Code Quality to the enabled analysis kinds
75+
// if an input to `quality-queries` was specified. We should remove this once
76+
// `quality-queries` is no longer used.
77+
if (
78+
!analysisKinds.includes(AnalysisKind.CodeQuality) &&
79+
qualityQueriesInput !== undefined
80+
) {
81+
analysisKinds.push(AnalysisKind.CodeQuality);
82+
}
83+
84+
return analysisKinds;
85+
}
86+
4487
/** The queries to use for Code Quality analyses. */
4588
export const codeQualityQueries: string[] = ["code-quality"];
4689

0 commit comments

Comments
 (0)