Consistently use resolved path

This commit is contained in:
Michael B. Gale
2026-09-22 16:25:29 +01:00
parent a876e23075
commit 72509a81ba
4 changed files with 521 additions and 519 deletions

1005
lib/entry-points.js generated

File diff suppressed because it is too large Load Diff

View File

@@ -33,13 +33,13 @@ setupTests(test);
test.serial(
"determineCheckoutPath - logs when checkout_path is not in a work tree",
async (t) => {
const expectedPath = "/checkout/path";
const expectedPath = path.resolve("/checkout/path");
const target = callee(determineCheckoutPath)
.withActions((actions) => {
sinon
.stub(actions, "getRequiredInput")
.withArgs("checkout_path")
.returns("/checkout/path");
.returns(expectedPath);
})
.withArgs(createTestConfig({}));
sinon.stub(gitUtils, "getGitRoot").resolves(undefined);
@@ -53,13 +53,13 @@ test.serial(
test.serial(
"determineCheckoutPath - logs when checkout_path is not a repo root",
async (t) => {
const expectedPath = "/checkout/path";
const expectedPath = path.resolve("/checkout/path");
const target = callee(determineCheckoutPath)
.withActions((actions) => {
sinon
.stub(actions, "getRequiredInput")
.withArgs("checkout_path")
.returns("/checkout/path");
.returns(expectedPath);
})
.withArgs(createTestConfig({}));
sinon.stub(gitUtils, "getGitRoot").resolves("/checkout");
@@ -73,16 +73,16 @@ test.serial(
test.serial(
"determineCheckoutPath - logs when checkout_path is not the same as repo root in config",
async (t) => {
const expectedPath = "/checkout/path";
const expectedPath = path.resolve("/checkout/path");
const target = callee(determineCheckoutPath)
.withActions((actions) => {
sinon
.stub(actions, "getRequiredInput")
.withArgs("checkout_path")
.returns("/checkout/path");
.returns(expectedPath);
})
.withArgs(createTestConfig({ repositoryRoot: "/some/other/path" }));
sinon.stub(gitUtils, "getGitRoot").resolves("/checkout/path");
sinon.stub(gitUtils, "getGitRoot").resolves(expectedPath);
await target
.logs(t, "does not match that found by the 'codeql-action/init' step")
@@ -93,16 +93,16 @@ test.serial(
test.serial(
"determineCheckoutPath - doesn't log any of the messages when all is as expected",
async (t) => {
const expectedPath = "/checkout/path";
const expectedPath = path.resolve("/checkout/path");
const target = callee(determineCheckoutPath)
.withActions((actions) => {
sinon
.stub(actions, "getRequiredInput")
.withArgs("checkout_path")
.returns("/checkout/path");
.returns(expectedPath);
})
.withArgs(createTestConfig({ repositoryRoot: "/checkout/path" }));
sinon.stub(gitUtils, "getGitRoot").resolves("/checkout/path");
.withArgs(createTestConfig({ repositoryRoot: expectedPath }));
sinon.stub(gitUtils, "getGitRoot").resolves(expectedPath);
await target
.notLogs(

View File

@@ -102,21 +102,22 @@ export async function determineCheckoutPath(
const checkoutPathInput = action.actions.getRequiredInput("checkout_path");
// Try to obtain the root path of the repository and validate that it matches the input.
const repositoryRoot = await getGitRoot(checkoutPathInput);
const absCheckoutPathInput = path.resolve(checkoutPathInput);
const repositoryRoot = await getGitRoot(absCheckoutPathInput);
if (repositoryRoot === undefined) {
action.logger.warning(
[
`The directory at '${checkoutPathInput}' is not in the work tree of a git repository.`,
`The directory at '${absCheckoutPathInput}' is not in the work tree of a git repository.`,
"If the repository being analyzed is checked out elsewhere,",
"you must explicitly set the 'checkout_path' input for the 'codeql-action/analyze' step to",
"the checkout path.",
].join(" "),
);
} else if (repositoryRoot !== path.resolve(checkoutPathInput)) {
} else if (repositoryRoot !== absCheckoutPathInput) {
action.logger.warning(
[
`The directory at '${checkoutPathInput}' is not the root of the repository ('${repositoryRoot}').`,
`The directory at '${absCheckoutPathInput}' is not the root of the repository ('${repositoryRoot}').`,
"Set the 'checkout_path' input for the 'codeql-action/analyze' step to the root path of the checkout.",
].join(" "),
);
@@ -135,7 +136,7 @@ export async function determineCheckoutPath(
);
}
return checkoutPathInput;
return absCheckoutPathInput;
}
async function setupPythonExtractor(logger: Logger) {

View File

@@ -245,7 +245,7 @@ export const getGitRoot = async function (
["rev-parse", "--show-toplevel"],
`Cannot find Git repository root from the source root ${sourceRoot}.`,
);
return path.normalize(stdout.trim());
return path.resolve(stdout.trim());
} catch {
// Errors are already logged by runGitCommand()
return undefined;