Move resolve-tools-input.ts and tests to src/config

This commit is contained in:
Óscar San José
2026-05-29 13:16:55 +02:00
parent 3d8236de69
commit 063bb8b614
4 changed files with 2 additions and 197 deletions
+1 -1
View File
@@ -58,7 +58,7 @@ import {
} from "./overlay/caching";
import { OverlayDatabaseMode } from "./overlay/overlay-database-mode";
import { getRepositoryNwo } from "./repository";
import { resolveToolsInput } from "./resolve-tools-input";
import { resolveToolsInput } from "./config/resolve-tools-input";
import { ToolsSource } from "./setup-codeql";
import {
ActionName,
-145
View File
@@ -1,145 +0,0 @@
import test from "ava";
import { RepositoryPropertyName } from "./feature-flags/properties";
import type { RepositoryProperties } from "./feature-flags/properties";
import { resolveToolsInput } from "./resolve-tools-input";
import { getRecordingLogger, LoggedMessage, setupTests } from "./testing-utils";
setupTests(test);
test("resolveToolsInput returns undefined when no tools input or repository property is set", (t) => {
const loggedMessages: LoggedMessage[] = [];
const logger = getRecordingLogger(loggedMessages);
const result = resolveToolsInput(undefined, true, {}, logger);
t.is(result, undefined);
t.is(loggedMessages.length, 0);
});
test("resolveToolsInput returns workflow input when only workflow input is provided", (t) => {
const loggedMessages: LoggedMessage[] = [];
const logger = getRecordingLogger(loggedMessages);
const result = resolveToolsInput("latest", true, {}, logger);
t.is(result, "latest");
t.is(loggedMessages.length, 1);
t.is(
loggedMessages[0].message,
"Setting tools: latest based on workflow input.",
);
});
test("resolveToolsInput returns repository property when only repository property is provided", (t) => {
const loggedMessages: LoggedMessage[] = [];
const logger = getRecordingLogger(loggedMessages);
const repositoryProperties: RepositoryProperties = {
[RepositoryPropertyName.TOOLS]: "toolcache",
};
const result = resolveToolsInput(
undefined,
true,
repositoryProperties,
logger,
);
t.is(result, "toolcache");
t.is(loggedMessages.length, 1);
t.is(
loggedMessages[0].message,
"Setting tools: toolcache based on the 'github-codeql-tools' repository property.",
);
});
test("resolveToolsInput prioritizes workflow input over repository property", (t) => {
const loggedMessages: LoggedMessage[] = [];
const logger = getRecordingLogger(loggedMessages);
const repositoryProperties: RepositoryProperties = {
[RepositoryPropertyName.TOOLS]: "toolcache",
};
const result = resolveToolsInput(
"nightly",
true,
repositoryProperties,
logger,
);
t.is(result, "nightly");
t.is(loggedMessages.length, 1);
t.is(
loggedMessages[0].message,
"Setting tools: nightly based on workflow input.",
);
});
test("resolveToolsInput treats empty string workflow input as not set", (t) => {
const loggedMessages: LoggedMessage[] = [];
const logger = getRecordingLogger(loggedMessages);
const repositoryProperties: RepositoryProperties = {
[RepositoryPropertyName.TOOLS]: "toolcache",
};
const result = resolveToolsInput("", true, repositoryProperties, logger);
t.is(result, "toolcache");
t.is(loggedMessages.length, 1);
t.is(
loggedMessages[0].message,
"Setting tools: toolcache based on the 'github-codeql-tools' repository property.",
);
});
test("resolveToolsInput returns undefined when repository property is undefined", (t) => {
const loggedMessages: LoggedMessage[] = [];
const logger = getRecordingLogger(loggedMessages);
const repositoryProperties: RepositoryProperties = {
[RepositoryPropertyName.TOOLS]: undefined,
};
const result = resolveToolsInput(
undefined,
true,
repositoryProperties,
logger,
);
t.is(result, undefined);
t.is(loggedMessages.length, 0);
});
test("resolveToolsInput ignores repository property when fallback is disabled", (t) => {
const loggedMessages: LoggedMessage[] = [];
const logger = getRecordingLogger(loggedMessages);
const repositoryProperties: RepositoryProperties = {
[RepositoryPropertyName.TOOLS]: "toolcache",
};
const result = resolveToolsInput(
undefined,
false,
repositoryProperties,
logger,
);
t.is(result, undefined);
t.is(loggedMessages.length, 1);
const fallbackDisabledMessage = String(loggedMessages[0].message);
t.true(
/Ignoring 'github-codeql-tools' repository property because it is only supported for dynamic workflows\./.test(
fallbackDisabledMessage,
),
);
});
test("resolveToolsInput does not log when fallback is disabled and repository property is not set", (t) => {
const loggedMessages: LoggedMessage[] = [];
const logger = getRecordingLogger(loggedMessages);
const result = resolveToolsInput(undefined, false, {}, logger);
t.is(result, undefined);
t.is(loggedMessages.length, 0);
});
-50
View File
@@ -1,50 +0,0 @@
import {
RepositoryProperties,
RepositoryPropertyName,
} from "./feature-flags/properties";
import { Logger } from "./logging";
/**
* Resolves the effective tools input by combining the workflow input and repository properties.
* The explicit `tools` workflow input takes precedence. If none is provided,
* falls back to the repository property (if set and enabled for this workflow).
*
* @param toolsWorkflowInput - The value of the `tools` workflow input, if provided.
* @param allowRepositoryPropertyFallback - Whether the repository property fallback is enabled.
* @param repositoryProperties - The parsed repository properties.
* @param logger - Logger for outputting resolution messages.
* @returns The effective tools input value.
*/
export function resolveToolsInput(
toolsWorkflowInput: string | undefined,
allowRepositoryPropertyFallback: boolean,
repositoryProperties: RepositoryProperties,
logger: Logger,
): string | undefined {
if (toolsWorkflowInput) {
logger.info(
`Setting tools: ${toolsWorkflowInput} based on workflow input.`,
);
return toolsWorkflowInput;
}
const toolsPropertyValue = repositoryProperties[RepositoryPropertyName.TOOLS];
if (!allowRepositoryPropertyFallback) {
if (toolsPropertyValue) {
logger.info(
`No explicit tools input was provided. Ignoring '${RepositoryPropertyName.TOOLS}' repository property because it is only supported for dynamic workflows.`,
);
}
return undefined;
}
if (toolsPropertyValue) {
logger.info(
`Setting tools: ${toolsPropertyValue} based on the '${RepositoryPropertyName.TOOLS}' repository property.`,
);
return toolsPropertyValue;
}
return undefined;
}
+1 -1
View File
@@ -18,7 +18,7 @@ import { loadRepositoryProperties } from "./feature-flags/properties";
import { initCodeQL } from "./init";
import { getActionsLogger, Logger } from "./logging";
import { getRepositoryNwo } from "./repository";
import { resolveToolsInput } from "./resolve-tools-input";
import { resolveToolsInput } from "./config/resolve-tools-input";
import { ToolsSource } from "./setup-codeql";
import {
ActionName,