Skip to content

Commit 8e22350

Browse files
committed
Thread ActionState to initConfig
1 parent 69c9e8c commit 8e22350

6 files changed

Lines changed: 58 additions & 32 deletions

File tree

lib/entry-points.js

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

src/config-utils.test.ts

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import {
3636
mockCodeQLVersion,
3737
createTestConfig,
3838
makeMacro,
39+
initAllState,
3940
} from "./testing-utils";
4041
import {
4142
GitHubVariant,
@@ -160,8 +161,9 @@ test.serial("load empty config", async (t) => {
160161
},
161162
});
162163

164+
const state = initAllState({ logger });
163165
const config = await configUtils.initConfig(
164-
createFeatures([]),
166+
state,
165167
createTestInitConfigInputs({
166168
languagesInput: languages,
167169
repository: { owner: "github", repo: "example" },
@@ -202,8 +204,9 @@ test.serial("load code quality config", async (t) => {
202204
},
203205
});
204206

207+
const state = initAllState({ logger });
205208
const config = await configUtils.initConfig(
206-
createFeatures([]),
209+
state,
207210
createTestInitConfigInputs({
208211
analysisKinds: [AnalysisKind.CodeQuality],
209212
languagesInput: languages,
@@ -280,9 +283,10 @@ test.serial(
280283
repositoryProperties,
281284
});
282285

286+
const state = initAllState({ logger });
283287
await t.notThrowsAsync(async () => {
284288
const config = await configUtils.initConfig(
285-
createFeatures([]),
289+
state,
286290
createTestInitConfigInputs({
287291
analysisKinds: [AnalysisKind.CodeQuality],
288292
languagesInput: languages,
@@ -321,8 +325,9 @@ test.serial("loading a saved config produces the same config", async (t) => {
321325
// Sanity check that getConfig returns undefined before we have called initConfig
322326
t.deepEqual(await configUtils.getConfig(tempDir, logger), undefined);
323327

328+
const state = initAllState({ logger });
324329
const config1 = await configUtils.initConfig(
325-
createFeatures([]),
330+
state,
326331
createTestInitConfigInputs({
327332
languagesInput: "javascript,python",
328333
tempDir,
@@ -373,8 +378,9 @@ test.serial("loading config with version mismatch throws", async (t) => {
373378
.stub(actionsUtil, "getActionVersion")
374379
.returns("does-not-exist");
375380

381+
const state = initAllState({ logger });
376382
const config = await configUtils.initConfig(
377-
createFeatures([]),
383+
state,
378384
createTestInitConfigInputs({
379385
languagesInput: "javascript,python",
380386
tempDir,
@@ -402,8 +408,9 @@ test.serial("loading config with version mismatch throws", async (t) => {
402408
test.serial("load input outside of workspace", async (t) => {
403409
return await withTmpDir(async (tempDir) => {
404410
try {
411+
const state = initAllState();
405412
await configUtils.initConfig(
406-
createFeatures([]),
413+
state,
407414
createTestInitConfigInputs({
408415
configFile: "../input",
409416
tempDir,
@@ -431,8 +438,9 @@ test.serial("load non-existent input", async (t) => {
431438
t.false(fs.existsSync(path.join(tempDir, configFile)));
432439

433440
try {
441+
const state = initAllState();
434442
await configUtils.initConfig(
435-
createFeatures([]),
443+
state,
436444
createTestInitConfigInputs({
437445
languagesInput,
438446
configFile,
@@ -508,8 +516,9 @@ test.serial("load non-empty input", async (t) => {
508516
const languagesInput = "javascript";
509517
const configFilePath = createConfigFile(inputFileContents, tempDir);
510518

519+
const state = initAllState();
511520
const actualConfig = await configUtils.initConfig(
512-
createFeatures([]),
521+
state,
513522
createTestInitConfigInputs({
514523
languagesInput,
515524
buildModeInput: "none",
@@ -567,8 +576,9 @@ test.serial(
567576
// Only JS, python packs will be ignored
568577
const languagesInput = "javascript";
569578

579+
const state = initAllState();
570580
const config = await configUtils.initConfig(
571-
createFeatures([]),
581+
state,
572582
createTestInitConfigInputs({
573583
languagesInput,
574584
configFile: configFilePath,
@@ -619,8 +629,9 @@ test.serial("API client used when reading remote config", async (t) => {
619629
const configFile = "octo-org/codeql-config/config.yaml@main";
620630
const languagesInput = "javascript";
621631

632+
const state = initAllState();
622633
await configUtils.initConfig(
623-
createFeatures([]),
634+
state,
624635
createTestInitConfigInputs({
625636
languagesInput,
626637
configFile,
@@ -641,9 +652,10 @@ test.serial(
641652
mockGetContents(dummyResponse);
642653

643654
const repoReference = "octo-org/codeql-config/config.yaml@main";
655+
const state = initAllState();
644656
try {
645657
await configUtils.initConfig(
646-
createFeatures([]),
658+
state,
647659
createTestInitConfigInputs({
648660
configFile: repoReference,
649661
tempDir,
@@ -671,9 +683,10 @@ test.serial("Invalid format of remote config handled correctly", async (t) => {
671683
mockGetContents(dummyResponse);
672684

673685
const repoReference = "octo-org/codeql-config/config.yaml@main";
686+
const state = initAllState();
674687
try {
675688
await configUtils.initConfig(
676-
createFeatures([]),
689+
state,
677690
createTestInitConfigInputs({
678691
configFile: repoReference,
679692
tempDir,
@@ -701,9 +714,10 @@ test.serial("No detected languages", async (t) => {
701714
},
702715
});
703716

717+
const state = initAllState();
704718
try {
705719
await configUtils.initConfig(
706-
createFeatures([]),
720+
state,
707721
createTestInitConfigInputs({
708722
tempDir,
709723
codeql,
@@ -724,9 +738,10 @@ test.serial("Unknown languages", async (t) => {
724738
return await withTmpDir(async (tempDir) => {
725739
const languagesInput = "rubbish,english";
726740

741+
const state = initAllState();
727742
try {
728743
await configUtils.initConfig(
729-
createFeatures([]),
744+
state,
730745
createTestInitConfigInputs({
731746
languagesInput,
732747
tempDir,

src/config-utils.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ import {
8585
Success,
8686
Failure,
8787
isHostedRunner,
88-
getEnv,
8988
} from "./util";
9089

9190
export { type Config } from "./config/action-config";
@@ -1004,10 +1003,11 @@ export async function applyIncrementalAnalysisSettings(
10041003
* a default config. The parsed config is then stored to a known location.
10051004
*/
10061005
export async function initConfig(
1007-
features: FeatureEnablement,
1006+
actionState: ActionState<["Logger", "Env", "FeatureFlags"]>,
10081007
inputs: InitConfigInputs,
10091008
): Promise<Config> {
1010-
const { logger, tempDir } = inputs;
1009+
const { logger, features } = actionState;
1010+
const { tempDir } = inputs;
10111011

10121012
// if configInput is set, it takes precedence over configFile
10131013
if (inputs.configInput) {
@@ -1026,7 +1026,6 @@ export async function initConfig(
10261026
logger.debug("No configuration file was provided");
10271027
} else {
10281028
logger.debug(`Using configuration file: ${inputs.configFile}`);
1029-
const actionState = { logger, features, env: getEnv() };
10301029
userConfig = await loadUserConfig(
10311030
actionState,
10321031
inputs.configFile,

src/init-action.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ import {
9999
getOptionalEnvVar,
100100
Success,
101101
Failure,
102+
getEnv,
102103
} from "./util";
103104
import { checkWorkflow } from "./workflow";
104105

@@ -361,7 +362,8 @@ async function run(startedAt: Date) {
361362
repositoryProperties,
362363
);
363364

364-
config = await initConfig(features, {
365+
const actionState = { logger, env: getEnv(), features };
366+
config = await initConfig(actionState, {
365367
analysisKinds,
366368
languagesInput: getOptionalInput("languages"),
367369
queriesInput: getOptionalInput("queries"),

src/init.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import * as github from "@actions/github";
77
import * as io from "@actions/io";
88
import * as yaml from "js-yaml";
99

10+
import { ActionState } from "./action-common";
1011
import {
1112
getOptionalInput,
1213
isAnalyzingPullRequest,
@@ -81,11 +82,11 @@ export async function initCodeQL(
8182
}
8283

8384
export async function initConfig(
84-
features: FeatureEnablement,
85+
actionState: ActionState<["Logger", "Env", "FeatureFlags"]>,
8586
inputs: configUtils.InitConfigInputs,
8687
): Promise<configUtils.Config> {
8788
return await withGroupAsync("Load language configuration", async () => {
88-
return await configUtils.initConfig(features, inputs);
89+
return await configUtils.initConfig(actionState, inputs);
8990
});
9091
}
9192

src/testing-utils.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,18 @@ export function getTestActionsEnv(): ActionsEnv {
192192
/** For testing purposes, we make all available state features accessible in `TestEnv`. */
193193
type AllState = ["Logger", "Env", "FeatureFlags"];
194194

195+
/** Initialise a fresh `ActionState<AllState>` value. */
196+
export function initAllState(
197+
overrides?: Partial<ActionState<AllState>>,
198+
): ActionState<AllState> {
199+
return {
200+
logger: new RecordingLogger(),
201+
env: getTestEnv(),
202+
features: createFeatures([]),
203+
...overrides,
204+
};
205+
}
206+
195207
/**
196208
* Wraps a function that accepts an `ActionEnv` for testing in different environments.
197209
*/
@@ -211,11 +223,7 @@ export class TestEnv<
211223
) {
212224
this.fn = fn;
213225
this.args = args;
214-
this.state = initialState || {
215-
logger: new RecordingLogger(),
216-
env: getTestEnv(),
217-
features: createFeatures([]),
218-
};
226+
this.state = initialState || initAllState();
219227
}
220228

221229
private clone(): TestEnv<Args, R, Fs> {

0 commit comments

Comments
 (0)