mirror of
https://github.com/github/codeql-action.git
synced 2025-12-12 02:34:39 +08:00
339 lines
16 KiB
JavaScript
Generated
339 lines
16 KiB
JavaScript
Generated
"use strict";
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
}) : (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
o[k2] = m[k];
|
|
}));
|
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
}) : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = (this && this.__importStar) || (function () {
|
|
var ownKeys = function(o) {
|
|
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
var ar = [];
|
|
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
return ar;
|
|
};
|
|
return ownKeys(o);
|
|
};
|
|
return function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
})();
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const fs = __importStar(require("fs"));
|
|
const path = __importStar(require("path"));
|
|
const core = __importStar(require("@actions/core"));
|
|
const ava_1 = __importDefault(require("ava"));
|
|
const sinon = __importStar(require("sinon"));
|
|
const actionsUtil = __importStar(require("./actions-util"));
|
|
const gitUtils = __importStar(require("./git-utils"));
|
|
const testing_utils_1 = require("./testing-utils");
|
|
const util_1 = require("./util");
|
|
(0, testing_utils_1.setupTests)(ava_1.default);
|
|
(0, ava_1.default)("getRef() throws on the empty string", async (t) => {
|
|
process.env["GITHUB_REF"] = "";
|
|
await t.throwsAsync(gitUtils.getRef);
|
|
});
|
|
(0, ava_1.default)("getRef() returns merge PR ref if GITHUB_SHA still checked out", async (t) => {
|
|
await (0, util_1.withTmpDir)(async (tmpDir) => {
|
|
(0, testing_utils_1.setupActionsVars)(tmpDir, tmpDir);
|
|
const expectedRef = "refs/pull/1/merge";
|
|
const currentSha = "a".repeat(40);
|
|
process.env["GITHUB_REF"] = expectedRef;
|
|
process.env["GITHUB_SHA"] = currentSha;
|
|
const callback = sinon.stub(gitUtils, "getCommitOid");
|
|
callback.withArgs("HEAD").resolves(currentSha);
|
|
const actualRef = await gitUtils.getRef();
|
|
t.deepEqual(actualRef, expectedRef);
|
|
callback.restore();
|
|
});
|
|
});
|
|
(0, ava_1.default)("getRef() returns merge PR ref if GITHUB_REF still checked out but sha has changed (actions checkout@v1)", async (t) => {
|
|
await (0, util_1.withTmpDir)(async (tmpDir) => {
|
|
(0, testing_utils_1.setupActionsVars)(tmpDir, tmpDir);
|
|
const expectedRef = "refs/pull/1/merge";
|
|
process.env["GITHUB_REF"] = expectedRef;
|
|
process.env["GITHUB_SHA"] = "b".repeat(40);
|
|
const sha = "a".repeat(40);
|
|
const callback = sinon.stub(gitUtils, "getCommitOid");
|
|
callback.withArgs("refs/remotes/pull/1/merge").resolves(sha);
|
|
callback.withArgs("HEAD").resolves(sha);
|
|
const actualRef = await gitUtils.getRef();
|
|
t.deepEqual(actualRef, expectedRef);
|
|
callback.restore();
|
|
});
|
|
});
|
|
(0, ava_1.default)("getRef() returns head PR ref if GITHUB_REF no longer checked out", async (t) => {
|
|
await (0, util_1.withTmpDir)(async (tmpDir) => {
|
|
(0, testing_utils_1.setupActionsVars)(tmpDir, tmpDir);
|
|
process.env["GITHUB_REF"] = "refs/pull/1/merge";
|
|
process.env["GITHUB_SHA"] = "a".repeat(40);
|
|
const callback = sinon.stub(gitUtils, "getCommitOid");
|
|
callback.withArgs(tmpDir, "refs/pull/1/merge").resolves("a".repeat(40));
|
|
callback.withArgs(tmpDir, "HEAD").resolves("b".repeat(40));
|
|
const actualRef = await gitUtils.getRef();
|
|
t.deepEqual(actualRef, "refs/pull/1/head");
|
|
callback.restore();
|
|
});
|
|
});
|
|
(0, ava_1.default)("getRef() returns ref provided as an input and ignores current HEAD", async (t) => {
|
|
await (0, util_1.withTmpDir)(async (tmpDir) => {
|
|
(0, testing_utils_1.setupActionsVars)(tmpDir, tmpDir);
|
|
const getAdditionalInputStub = sinon.stub(actionsUtil, "getOptionalInput");
|
|
getAdditionalInputStub.withArgs("ref").resolves("refs/pull/2/merge");
|
|
getAdditionalInputStub.withArgs("sha").resolves("b".repeat(40));
|
|
// These values are be ignored
|
|
process.env["GITHUB_REF"] = "refs/pull/1/merge";
|
|
process.env["GITHUB_SHA"] = "a".repeat(40);
|
|
const callback = sinon.stub(gitUtils, "getCommitOid");
|
|
callback.withArgs("refs/pull/1/merge").resolves("b".repeat(40));
|
|
callback.withArgs("HEAD").resolves("b".repeat(40));
|
|
const actualRef = await gitUtils.getRef();
|
|
t.deepEqual(actualRef, "refs/pull/2/merge");
|
|
callback.restore();
|
|
getAdditionalInputStub.restore();
|
|
});
|
|
});
|
|
(0, ava_1.default)("getRef() returns CODE_SCANNING_REF as a fallback for GITHUB_REF", async (t) => {
|
|
await (0, util_1.withTmpDir)(async (tmpDir) => {
|
|
(0, testing_utils_1.setupActionsVars)(tmpDir, tmpDir);
|
|
const expectedRef = "refs/pull/1/HEAD";
|
|
const currentSha = "a".repeat(40);
|
|
process.env["CODE_SCANNING_REF"] = expectedRef;
|
|
process.env["GITHUB_REF"] = "";
|
|
process.env["GITHUB_SHA"] = currentSha;
|
|
const actualRef = await gitUtils.getRef();
|
|
t.deepEqual(actualRef, expectedRef);
|
|
});
|
|
});
|
|
(0, ava_1.default)("getRef() returns GITHUB_REF over CODE_SCANNING_REF if both are provided", async (t) => {
|
|
await (0, util_1.withTmpDir)(async (tmpDir) => {
|
|
(0, testing_utils_1.setupActionsVars)(tmpDir, tmpDir);
|
|
const expectedRef = "refs/pull/1/merge";
|
|
const currentSha = "a".repeat(40);
|
|
process.env["CODE_SCANNING_REF"] = "refs/pull/1/HEAD";
|
|
process.env["GITHUB_REF"] = expectedRef;
|
|
process.env["GITHUB_SHA"] = currentSha;
|
|
const actualRef = await gitUtils.getRef();
|
|
t.deepEqual(actualRef, expectedRef);
|
|
});
|
|
});
|
|
(0, ava_1.default)("getRef() throws an error if only `ref` is provided as an input", async (t) => {
|
|
await (0, util_1.withTmpDir)(async (tmpDir) => {
|
|
(0, testing_utils_1.setupActionsVars)(tmpDir, tmpDir);
|
|
const getAdditionalInputStub = sinon.stub(actionsUtil, "getOptionalInput");
|
|
getAdditionalInputStub.withArgs("ref").resolves("refs/pull/1/merge");
|
|
await t.throwsAsync(async () => {
|
|
await gitUtils.getRef();
|
|
}, {
|
|
instanceOf: Error,
|
|
message: "Both 'ref' and 'sha' are required if one of them is provided.",
|
|
});
|
|
getAdditionalInputStub.restore();
|
|
});
|
|
});
|
|
(0, ava_1.default)("getRef() throws an error if only `sha` is provided as an input", async (t) => {
|
|
await (0, util_1.withTmpDir)(async (tmpDir) => {
|
|
(0, testing_utils_1.setupActionsVars)(tmpDir, tmpDir);
|
|
process.env["GITHUB_WORKSPACE"] = "/tmp";
|
|
const getAdditionalInputStub = sinon.stub(actionsUtil, "getOptionalInput");
|
|
getAdditionalInputStub.withArgs("sha").resolves("a".repeat(40));
|
|
await t.throwsAsync(async () => {
|
|
await gitUtils.getRef();
|
|
}, {
|
|
instanceOf: Error,
|
|
message: "Both 'ref' and 'sha' are required if one of them is provided.",
|
|
});
|
|
getAdditionalInputStub.restore();
|
|
});
|
|
});
|
|
(0, ava_1.default)("isAnalyzingDefaultBranch()", async (t) => {
|
|
process.env["GITHUB_EVENT_NAME"] = "push";
|
|
process.env["CODE_SCANNING_IS_ANALYZING_DEFAULT_BRANCH"] = "true";
|
|
t.deepEqual(await gitUtils.isAnalyzingDefaultBranch(), true);
|
|
process.env["CODE_SCANNING_IS_ANALYZING_DEFAULT_BRANCH"] = "false";
|
|
await (0, util_1.withTmpDir)(async (tmpDir) => {
|
|
(0, testing_utils_1.setupActionsVars)(tmpDir, tmpDir);
|
|
const envFile = path.join(tmpDir, "event.json");
|
|
fs.writeFileSync(envFile, JSON.stringify({
|
|
repository: {
|
|
default_branch: "main",
|
|
},
|
|
}));
|
|
process.env["GITHUB_EVENT_PATH"] = envFile;
|
|
process.env["GITHUB_REF"] = "main";
|
|
process.env["GITHUB_SHA"] = "1234";
|
|
t.deepEqual(await gitUtils.isAnalyzingDefaultBranch(), true);
|
|
process.env["GITHUB_REF"] = "refs/heads/main";
|
|
t.deepEqual(await gitUtils.isAnalyzingDefaultBranch(), true);
|
|
process.env["GITHUB_REF"] = "feature";
|
|
t.deepEqual(await gitUtils.isAnalyzingDefaultBranch(), false);
|
|
fs.writeFileSync(envFile, JSON.stringify({
|
|
schedule: "0 0 * * *",
|
|
}));
|
|
process.env["GITHUB_EVENT_NAME"] = "schedule";
|
|
process.env["GITHUB_REF"] = "refs/heads/main";
|
|
t.deepEqual(await gitUtils.isAnalyzingDefaultBranch(), true);
|
|
const getAdditionalInputStub = sinon.stub(actionsUtil, "getOptionalInput");
|
|
getAdditionalInputStub
|
|
.withArgs("ref")
|
|
.resolves("refs/heads/something-else");
|
|
getAdditionalInputStub
|
|
.withArgs("sha")
|
|
.resolves("0000000000000000000000000000000000000000");
|
|
process.env["GITHUB_EVENT_NAME"] = "schedule";
|
|
process.env["GITHUB_REF"] = "refs/heads/main";
|
|
t.deepEqual(await gitUtils.isAnalyzingDefaultBranch(), false);
|
|
getAdditionalInputStub.restore();
|
|
});
|
|
});
|
|
(0, ava_1.default)("determineBaseBranchHeadCommitOid non-pullrequest", async (t) => {
|
|
const infoStub = sinon.stub(core, "info");
|
|
process.env["GITHUB_EVENT_NAME"] = "hucairz";
|
|
process.env["GITHUB_SHA"] = "100912429fab4cb230e66ffb11e738ac5194e73a";
|
|
const result = await gitUtils.determineBaseBranchHeadCommitOid(__dirname);
|
|
t.deepEqual(result, undefined);
|
|
t.deepEqual(0, infoStub.callCount);
|
|
infoStub.restore();
|
|
});
|
|
(0, ava_1.default)("determineBaseBranchHeadCommitOid not git repository", async (t) => {
|
|
const infoStub = sinon.stub(core, "info");
|
|
process.env["GITHUB_EVENT_NAME"] = "pull_request";
|
|
process.env["GITHUB_SHA"] = "100912429fab4cb230e66ffb11e738ac5194e73a";
|
|
await (0, util_1.withTmpDir)(async (tmpDir) => {
|
|
await gitUtils.determineBaseBranchHeadCommitOid(tmpDir);
|
|
});
|
|
t.deepEqual(1, infoStub.callCount);
|
|
t.deepEqual(infoStub.firstCall.args[0], "git call failed. Will calculate the base branch SHA on the server. Error: " +
|
|
"The checkout path provided to the action does not appear to be a git repository.");
|
|
infoStub.restore();
|
|
});
|
|
(0, ava_1.default)("determineBaseBranchHeadCommitOid other error", async (t) => {
|
|
const infoStub = sinon.stub(core, "info");
|
|
process.env["GITHUB_EVENT_NAME"] = "pull_request";
|
|
process.env["GITHUB_SHA"] = "100912429fab4cb230e66ffb11e738ac5194e73a";
|
|
const result = await gitUtils.determineBaseBranchHeadCommitOid(path.join(__dirname, "../../i-dont-exist"));
|
|
t.deepEqual(result, undefined);
|
|
t.deepEqual(1, infoStub.callCount);
|
|
t.assert(infoStub.firstCall.args[0].startsWith("git call failed. Will calculate the base branch SHA on the server. Error: "));
|
|
t.assert(!infoStub.firstCall.args[0].endsWith("The checkout path provided to the action does not appear to be a git repository."));
|
|
infoStub.restore();
|
|
});
|
|
(0, ava_1.default)("decodeGitFilePath unquoted strings", async (t) => {
|
|
t.deepEqual(gitUtils.decodeGitFilePath("foo"), "foo");
|
|
t.deepEqual(gitUtils.decodeGitFilePath("foo bar"), "foo bar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath("foo\\\\bar"), "foo\\\\bar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath('foo\\"bar'), 'foo\\"bar');
|
|
t.deepEqual(gitUtils.decodeGitFilePath("foo\\001bar"), "foo\\001bar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath("foo\\abar"), "foo\\abar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath("foo\\bbar"), "foo\\bbar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath("foo\\fbar"), "foo\\fbar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath("foo\\nbar"), "foo\\nbar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath("foo\\rbar"), "foo\\rbar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath("foo\\tbar"), "foo\\tbar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath("foo\\vbar"), "foo\\vbar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath("\\a\\b\\f\\n\\r\\t\\v"), "\\a\\b\\f\\n\\r\\t\\v");
|
|
});
|
|
(0, ava_1.default)("decodeGitFilePath quoted strings", async (t) => {
|
|
t.deepEqual(gitUtils.decodeGitFilePath('"foo"'), "foo");
|
|
t.deepEqual(gitUtils.decodeGitFilePath('"foo bar"'), "foo bar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath('"foo\\\\bar"'), "foo\\bar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath('"foo\\"bar"'), 'foo"bar');
|
|
t.deepEqual(gitUtils.decodeGitFilePath('"foo\\001bar"'), "foo\x01bar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath('"foo\\abar"'), "foo\x07bar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath('"foo\\bbar"'), "foo\bbar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath('"foo\\fbar"'), "foo\fbar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath('"foo\\nbar"'), "foo\nbar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath('"foo\\rbar"'), "foo\rbar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath('"foo\\tbar"'), "foo\tbar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath('"foo\\vbar"'), "foo\vbar");
|
|
t.deepEqual(gitUtils.decodeGitFilePath('"\\a\\b\\f\\n\\r\\t\\v"'), "\x07\b\f\n\r\t\v");
|
|
});
|
|
(0, ava_1.default)("getFileOidsUnderPath returns correct file mapping", async (t) => {
|
|
const runGitCommandStub = sinon
|
|
.stub(gitUtils, "runGitCommand")
|
|
.resolves("30d998ded095371488be3a729eb61d86ed721a18_lib/git-utils.js\n" +
|
|
"d89514599a9a99f22b4085766d40af7b99974827_lib/git-utils.js.map\n" +
|
|
"a47c11f5bfdca7661942d2c8f1b7209fb0dfdf96_src/git-utils.ts");
|
|
try {
|
|
const result = await gitUtils.getFileOidsUnderPath("/fake/path");
|
|
t.deepEqual(result, {
|
|
"lib/git-utils.js": "30d998ded095371488be3a729eb61d86ed721a18",
|
|
"lib/git-utils.js.map": "d89514599a9a99f22b4085766d40af7b99974827",
|
|
"src/git-utils.ts": "a47c11f5bfdca7661942d2c8f1b7209fb0dfdf96",
|
|
});
|
|
t.deepEqual(runGitCommandStub.firstCall.args, [
|
|
"/fake/path",
|
|
["ls-files", "--recurse-submodules", "--format=%(objectname)_%(path)"],
|
|
"Cannot list Git OIDs of tracked files.",
|
|
]);
|
|
}
|
|
finally {
|
|
runGitCommandStub.restore();
|
|
}
|
|
});
|
|
(0, ava_1.default)("getFileOidsUnderPath handles quoted paths", async (t) => {
|
|
const runGitCommandStub = sinon
|
|
.stub(gitUtils, "runGitCommand")
|
|
.resolves("30d998ded095371488be3a729eb61d86ed721a18_lib/normal-file.js\n" +
|
|
'd89514599a9a99f22b4085766d40af7b99974827_"lib/file with spaces.js"\n' +
|
|
'a47c11f5bfdca7661942d2c8f1b7209fb0dfdf96_"lib/file\\twith\\ttabs.js"');
|
|
try {
|
|
const result = await gitUtils.getFileOidsUnderPath("/fake/path");
|
|
t.deepEqual(result, {
|
|
"lib/normal-file.js": "30d998ded095371488be3a729eb61d86ed721a18",
|
|
"lib/file with spaces.js": "d89514599a9a99f22b4085766d40af7b99974827",
|
|
"lib/file\twith\ttabs.js": "a47c11f5bfdca7661942d2c8f1b7209fb0dfdf96",
|
|
});
|
|
}
|
|
finally {
|
|
runGitCommandStub.restore();
|
|
}
|
|
});
|
|
(0, ava_1.default)("getFileOidsUnderPath handles empty output", async (t) => {
|
|
const runGitCommandStub = sinon
|
|
.stub(gitUtils, "runGitCommand")
|
|
.resolves("");
|
|
try {
|
|
const result = await gitUtils.getFileOidsUnderPath("/fake/path");
|
|
t.deepEqual(result, {});
|
|
}
|
|
finally {
|
|
runGitCommandStub.restore();
|
|
}
|
|
});
|
|
(0, ava_1.default)("getFileOidsUnderPath throws on unexpected output format", async (t) => {
|
|
const runGitCommandStub = sinon
|
|
.stub(gitUtils, "runGitCommand")
|
|
.resolves("30d998ded095371488be3a729eb61d86ed721a18_lib/git-utils.js\n" +
|
|
"invalid-line-format\n" +
|
|
"a47c11f5bfdca7661942d2c8f1b7209fb0dfdf96_src/git-utils.ts");
|
|
try {
|
|
await t.throwsAsync(async () => {
|
|
await gitUtils.getFileOidsUnderPath("/fake/path");
|
|
}, {
|
|
instanceOf: Error,
|
|
message: 'Unexpected "git ls-files" output: invalid-line-format',
|
|
});
|
|
}
|
|
finally {
|
|
runGitCommandStub.restore();
|
|
}
|
|
});
|
|
//# sourceMappingURL=git-utils.test.js.map
|