Skip to content

Commit 57c7b0a

Browse files
committed
Rename initAnalysisKinds to getAnalysisKinds and cache results
1 parent 9bd9b03 commit 57c7b0a

File tree

4 files changed

+34
-20
lines changed

4 files changed

+34
-20
lines changed

lib/init-action.js

Lines changed: 10 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/analyses.test.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as sinon from "sinon";
44
import * as actionsUtil from "./actions-util";
55
import {
66
AnalysisKind,
7-
initAnalysisKinds,
7+
getAnalysisKinds,
88
parseAnalysisKinds,
99
supportedAnalysisKinds,
1010
} from "./analyses";
@@ -42,28 +42,28 @@ test("Parsing analysis kinds requires at least one analysis kind", async (t) =>
4242
});
4343
});
4444

45-
test("initAnalysisKinds - returns expected analysis kinds for `analysis-kinds` input", async (t) => {
45+
test("getAnalysisKinds - returns expected analysis kinds for `analysis-kinds` input", async (t) => {
4646
const requiredInputStub = sinon.stub(actionsUtil, "getRequiredInput");
4747
requiredInputStub
4848
.withArgs("analysis-kinds")
4949
.returns("code-scanning,code-quality");
50-
const result = await initAnalysisKinds(getRunnerLogger(true));
50+
const result = await getAnalysisKinds(getRunnerLogger(true), true);
5151
t.assert(result.includes(AnalysisKind.CodeScanning));
5252
t.assert(result.includes(AnalysisKind.CodeQuality));
5353
});
5454

55-
test("initAnalysisKinds - includes `code-quality` when deprecated `quality-queries` input is used", async (t) => {
55+
test("getAnalysisKinds - includes `code-quality` when deprecated `quality-queries` input is used", async (t) => {
5656
const requiredInputStub = sinon.stub(actionsUtil, "getRequiredInput");
5757
requiredInputStub.withArgs("analysis-kinds").returns("code-scanning");
5858
const optionalInputStub = sinon.stub(actionsUtil, "getOptionalInput");
5959
optionalInputStub.withArgs("quality-queries").returns("code-quality");
60-
const result = await initAnalysisKinds(getRunnerLogger(true));
60+
const result = await getAnalysisKinds(getRunnerLogger(true), true);
6161
t.assert(result.includes(AnalysisKind.CodeScanning));
6262
t.assert(result.includes(AnalysisKind.CodeQuality));
6363
});
6464

65-
test("initAnalysisKinds - throws if `analysis-kinds` input is invalid", async (t) => {
65+
test("getAnalysisKinds - throws if `analysis-kinds` input is invalid", async (t) => {
6666
const requiredInputStub = sinon.stub(actionsUtil, "getRequiredInput");
6767
requiredInputStub.withArgs("analysis-kinds").returns("no-such-thing");
68-
await t.throwsAsync(initAnalysisKinds(getRunnerLogger(true)));
68+
await t.throwsAsync(getAnalysisKinds(getRunnerLogger(true), true));
6969
});

src/analyses.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,29 @@ export async function parseAnalysisKinds(
4545
);
4646
}
4747

48+
// Used to avoid re-parsing the input after we have done it once.
49+
let cachedAnalysisKinds: AnalysisKind[] | undefined;
50+
4851
/**
4952
* Initialises the analysis kinds for the analysis based on the `analysis-kinds` input.
5053
* This function will also use the deprecated `quality-queries` input as an indicator to enable `code-quality`.
5154
* If the `analysis-kinds` input cannot be parsed, a `ConfigurationError` is thrown.
5255
*
5356
* @param logger The logger to use.
57+
* @param skipCache For testing, whether to ignore the cached values (default: false).
58+
*
5459
* @returns The array of enabled analysis kinds.
5560
* @throws A `ConfigurationError` if the `analysis-kinds` input cannot be parsed.
5661
*/
57-
export async function initAnalysisKinds(
62+
export async function getAnalysisKinds(
5863
logger: Logger,
64+
skipCache: boolean = false,
5965
): Promise<AnalysisKind[]> {
60-
const analysisKinds = await parseAnalysisKinds(
66+
if (!skipCache && cachedAnalysisKinds !== undefined) {
67+
return cachedAnalysisKinds;
68+
}
69+
70+
cachedAnalysisKinds = await parseAnalysisKinds(
6171
getRequiredInput("analysis-kinds"),
6272
);
6373

@@ -75,13 +85,13 @@ export async function initAnalysisKinds(
7585
// if an input to `quality-queries` was specified. We should remove this once
7686
// `quality-queries` is no longer used.
7787
if (
78-
!analysisKinds.includes(AnalysisKind.CodeQuality) &&
88+
!cachedAnalysisKinds.includes(AnalysisKind.CodeQuality) &&
7989
qualityQueriesInput !== undefined
8090
) {
81-
analysisKinds.push(AnalysisKind.CodeQuality);
91+
cachedAnalysisKinds.push(AnalysisKind.CodeQuality);
8292
}
8393

84-
return analysisKinds;
94+
return cachedAnalysisKinds;
8595
}
8696

8797
/** The queries to use for Code Quality analyses. */

src/init-action.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
getTemporaryDirectory,
1616
persistInputs,
1717
} from "./actions-util";
18-
import { initAnalysisKinds } from "./analyses";
18+
import { getAnalysisKinds } from "./analyses";
1919
import { getGitHubVersion } from "./api-client";
2020
import {
2121
getDependencyCachingEnabled,
@@ -254,7 +254,7 @@ async function run() {
254254

255255
try {
256256
// This may throw a `ConfigurationError` before we have sent the `starting` status report.
257-
const analysisKinds = await initAnalysisKinds(logger);
257+
const analysisKinds = await getAnalysisKinds(logger);
258258
// Send a status report indicating that an analysis is starting.
259259
await sendStartingStatusReport(startedAt, { analysisKinds }, logger);
260260
const codeQLDefaultVersionInfo = await features.getDefaultCliVersion(

0 commit comments

Comments
 (0)