Merge pull request #1364 from github/henrymercer/delete-runner-part-2
Delete the runner, part 2
This commit is contained in:
commit
f8b607edaa
63 changed files with 354 additions and 993 deletions
14
lib/actions-util.js
generated
14
lib/actions-util.js
generated
|
|
@ -32,16 +32,11 @@ const sharedEnv = __importStar(require("./shared-environment"));
|
||||||
const util_1 = require("./util");
|
const util_1 = require("./util");
|
||||||
// eslint-disable-next-line import/no-commonjs
|
// eslint-disable-next-line import/no-commonjs
|
||||||
const pkg = require("../package.json");
|
const pkg = require("../package.json");
|
||||||
/**
|
|
||||||
* The utils in this module are meant to be run inside of the action only.
|
|
||||||
* Code paths from the runner should not enter this module.
|
|
||||||
*/
|
|
||||||
/**
|
/**
|
||||||
* Wrapper around core.getInput for inputs that always have a value.
|
* Wrapper around core.getInput for inputs that always have a value.
|
||||||
* Also see getOptionalInput.
|
* Also see getOptionalInput.
|
||||||
*
|
*
|
||||||
* This allows us to get stronger type checking of required/optional inputs
|
* This allows us to get stronger type checking of required/optional inputs.
|
||||||
* and make behaviour more consistent between actions and the runner.
|
|
||||||
*/
|
*/
|
||||||
function getRequiredInput(name) {
|
function getRequiredInput(name) {
|
||||||
return core.getInput(name, { required: true });
|
return core.getInput(name, { required: true });
|
||||||
|
|
@ -51,8 +46,7 @@ exports.getRequiredInput = getRequiredInput;
|
||||||
* Wrapper around core.getInput that converts empty inputs to undefined.
|
* Wrapper around core.getInput that converts empty inputs to undefined.
|
||||||
* Also see getRequiredInput.
|
* Also see getRequiredInput.
|
||||||
*
|
*
|
||||||
* This allows us to get stronger type checking of required/optional inputs
|
* This allows us to get stronger type checking of required/optional inputs.
|
||||||
* and make behaviour more consistent between actions and the runner.
|
|
||||||
*/
|
*/
|
||||||
const getOptionalInput = function (name) {
|
const getOptionalInput = function (name) {
|
||||||
const value = core.getInput(name);
|
const value = core.getInput(name);
|
||||||
|
|
@ -349,7 +343,7 @@ async function getWorkflowPath() {
|
||||||
const owner = repo_nwo[0];
|
const owner = repo_nwo[0];
|
||||||
const repo = repo_nwo[1];
|
const repo = repo_nwo[1];
|
||||||
const run_id = Number((0, util_1.getRequiredEnvParam)("GITHUB_RUN_ID"));
|
const run_id = Number((0, util_1.getRequiredEnvParam)("GITHUB_RUN_ID"));
|
||||||
const apiClient = api.getActionsApiClient();
|
const apiClient = api.getApiClient();
|
||||||
const runsResponse = await apiClient.request("GET /repos/:owner/:repo/actions/runs/:run_id?exclude_pull_requests=true", {
|
const runsResponse = await apiClient.request("GET /repos/:owner/:repo/actions/runs/:run_id?exclude_pull_requests=true", {
|
||||||
owner,
|
owner,
|
||||||
repo,
|
repo,
|
||||||
|
|
@ -582,7 +576,7 @@ async function sendStatusReport(statusReport) {
|
||||||
}
|
}
|
||||||
const nwo = (0, util_1.getRequiredEnvParam)("GITHUB_REPOSITORY");
|
const nwo = (0, util_1.getRequiredEnvParam)("GITHUB_REPOSITORY");
|
||||||
const [owner, repo] = nwo.split("/");
|
const [owner, repo] = nwo.split("/");
|
||||||
const client = api.getActionsApiClient();
|
const client = api.getApiClient();
|
||||||
try {
|
try {
|
||||||
await client.request("PUT /repos/:owner/:repo/code-scanning/analysis/status", {
|
await client.request("PUT /repos/:owner/:repo/code-scanning/analysis/status", {
|
||||||
owner,
|
owner,
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
6
lib/actions-util.test.js
generated
6
lib/actions-util.test.js
generated
|
|
@ -471,12 +471,8 @@ on: ["push"]
|
||||||
`)), []));
|
`)), []));
|
||||||
});
|
});
|
||||||
(0, ava_1.default)("initializeEnvironment", (t) => {
|
(0, ava_1.default)("initializeEnvironment", (t) => {
|
||||||
(0, util_1.initializeEnvironment)(util_1.Mode.actions, "1.2.3");
|
(0, util_1.initializeEnvironment)("1.2.3");
|
||||||
t.deepEqual((0, util_1.getMode)(), util_1.Mode.actions);
|
|
||||||
t.deepEqual(process.env.CODEQL_ACTION_VERSION, "1.2.3");
|
t.deepEqual(process.env.CODEQL_ACTION_VERSION, "1.2.3");
|
||||||
(0, util_1.initializeEnvironment)(util_1.Mode.runner, "4.5.6");
|
|
||||||
t.deepEqual((0, util_1.getMode)(), util_1.Mode.runner);
|
|
||||||
t.deepEqual(process.env.CODEQL_ACTION_VERSION, "4.5.6");
|
|
||||||
});
|
});
|
||||||
(0, ava_1.default)("isAnalyzingDefaultBranch()", async (t) => {
|
(0, ava_1.default)("isAnalyzingDefaultBranch()", async (t) => {
|
||||||
await (0, util_1.withTmpDir)(async (tmpDir) => {
|
await (0, util_1.withTmpDir)(async (tmpDir) => {
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
12
lib/analyze-action.js
generated
12
lib/analyze-action.js
generated
|
|
@ -134,7 +134,7 @@ async function run() {
|
||||||
let trapCacheUploadTime = undefined;
|
let trapCacheUploadTime = undefined;
|
||||||
let dbCreationTimings = undefined;
|
let dbCreationTimings = undefined;
|
||||||
let didUploadTrapCaches = false;
|
let didUploadTrapCaches = false;
|
||||||
util.initializeEnvironment(util.Mode.actions, pkg.version);
|
util.initializeEnvironment(pkg.version);
|
||||||
await util.checkActionVersion(pkg.version);
|
await util.checkActionVersion(pkg.version);
|
||||||
const logger = (0, logging_1.getActionsLogger)();
|
const logger = (0, logging_1.getActionsLogger)();
|
||||||
try {
|
try {
|
||||||
|
|
@ -148,14 +148,14 @@ async function run() {
|
||||||
if (hasBadExpectErrorInput()) {
|
if (hasBadExpectErrorInput()) {
|
||||||
throw new Error("`expect-error` input parameter is for internal use only. It should only be set by codeql-action or a fork.");
|
throw new Error("`expect-error` input parameter is for internal use only. It should only be set by codeql-action or a fork.");
|
||||||
}
|
}
|
||||||
await util.enrichEnvironment(util.Mode.actions, await (0, codeql_1.getCodeQL)(config.codeQLCmd));
|
await util.enrichEnvironment(await (0, codeql_1.getCodeQL)(config.codeQLCmd));
|
||||||
const apiDetails = (0, api_client_1.getApiDetails)();
|
const apiDetails = (0, api_client_1.getApiDetails)();
|
||||||
const outputDir = actionsUtil.getRequiredInput("output");
|
const outputDir = actionsUtil.getRequiredInput("output");
|
||||||
const threads = util.getThreadsFlag(actionsUtil.getOptionalInput("threads") || process.env["CODEQL_THREADS"], logger);
|
const threads = util.getThreadsFlag(actionsUtil.getOptionalInput("threads") || process.env["CODEQL_THREADS"], logger);
|
||||||
const memory = util.getMemoryFlag(actionsUtil.getOptionalInput("ram") || process.env["CODEQL_RAM"]);
|
const memory = util.getMemoryFlag(actionsUtil.getOptionalInput("ram") || process.env["CODEQL_RAM"]);
|
||||||
const repositoryNwo = (0, repository_1.parseRepositoryNwo)(util.getRequiredEnvParam("GITHUB_REPOSITORY"));
|
const repositoryNwo = (0, repository_1.parseRepositoryNwo)(util.getRequiredEnvParam("GITHUB_REPOSITORY"));
|
||||||
const gitHubVersion = await (0, api_client_1.getGitHubVersionActionsOnly)();
|
const gitHubVersion = await (0, api_client_1.getGitHubVersion)();
|
||||||
const features = new feature_flags_1.Features(gitHubVersion, apiDetails, repositoryNwo, logger);
|
const features = new feature_flags_1.Features(gitHubVersion, repositoryNwo, logger);
|
||||||
await runAutobuildIfLegacyGoWorkflow(config, logger);
|
await runAutobuildIfLegacyGoWorkflow(config, logger);
|
||||||
dbCreationTimings = await (0, analyze_1.runFinalize)(outputDir, threads, memory, config, logger);
|
dbCreationTimings = await (0, analyze_1.runFinalize)(outputDir, threads, memory, config, logger);
|
||||||
if (actionsUtil.getRequiredInput("skip-queries") !== "true") {
|
if (actionsUtil.getRequiredInput("skip-queries") !== "true") {
|
||||||
|
|
@ -170,7 +170,7 @@ async function run() {
|
||||||
}
|
}
|
||||||
core.setOutput("db-locations", dbLocations);
|
core.setOutput("db-locations", dbLocations);
|
||||||
if (runStats && actionsUtil.getRequiredInput("upload") === "true") {
|
if (runStats && actionsUtil.getRequiredInput("upload") === "true") {
|
||||||
uploadResult = await upload_lib.uploadFromActions(outputDir, config.gitHubVersion, apiDetails, logger);
|
uploadResult = await upload_lib.uploadFromActions(outputDir, config.gitHubVersion, logger);
|
||||||
core.setOutput("sarif-id", uploadResult.sarifID);
|
core.setOutput("sarif-id", uploadResult.sarifID);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -189,7 +189,7 @@ async function run() {
|
||||||
}
|
}
|
||||||
else if (uploadResult !== undefined &&
|
else if (uploadResult !== undefined &&
|
||||||
actionsUtil.getRequiredInput("wait-for-processing") === "true") {
|
actionsUtil.getRequiredInput("wait-for-processing") === "true") {
|
||||||
await upload_lib.waitForProcessing((0, repository_1.parseRepositoryNwo)(util.getRequiredEnvParam("GITHUB_REPOSITORY")), uploadResult.sarifID, apiDetails, (0, logging_1.getActionsLogger)());
|
await upload_lib.waitForProcessing((0, repository_1.parseRepositoryNwo)(util.getRequiredEnvParam("GITHUB_REPOSITORY")), uploadResult.sarifID, (0, logging_1.getActionsLogger)());
|
||||||
}
|
}
|
||||||
// If we did not throw an error yet here, but we expect one, throw it.
|
// If we did not throw an error yet here, but we expect one, throw it.
|
||||||
if (actionsUtil.getOptionalInput("expect-error") === "true") {
|
if (actionsUtil.getOptionalInput("expect-error") === "true") {
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
46
lib/api-client.js
generated
46
lib/api-client.js
generated
|
|
@ -22,8 +22,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.getGitHubVersionActionsOnly = exports.getActionsApiClient = exports.getApiDetails = exports.getApiClient = exports.DisallowedAPIVersionReason = void 0;
|
exports.getGitHubVersion = exports.getApiClientWithExternalAuth = exports.getApiClient = exports.getApiDetails = exports.DisallowedAPIVersionReason = void 0;
|
||||||
const path = __importStar(require("path"));
|
|
||||||
const githubUtils = __importStar(require("@actions/github/lib/utils"));
|
const githubUtils = __importStar(require("@actions/github/lib/utils"));
|
||||||
const retry = __importStar(require("@octokit/plugin-retry"));
|
const retry = __importStar(require("@octokit/plugin-retry"));
|
||||||
const console_log_level_1 = __importDefault(require("console-log-level"));
|
const console_log_level_1 = __importDefault(require("console-log-level"));
|
||||||
|
|
@ -37,28 +36,14 @@ var DisallowedAPIVersionReason;
|
||||||
DisallowedAPIVersionReason[DisallowedAPIVersionReason["ACTION_TOO_OLD"] = 0] = "ACTION_TOO_OLD";
|
DisallowedAPIVersionReason[DisallowedAPIVersionReason["ACTION_TOO_OLD"] = 0] = "ACTION_TOO_OLD";
|
||||||
DisallowedAPIVersionReason[DisallowedAPIVersionReason["ACTION_TOO_NEW"] = 1] = "ACTION_TOO_NEW";
|
DisallowedAPIVersionReason[DisallowedAPIVersionReason["ACTION_TOO_NEW"] = 1] = "ACTION_TOO_NEW";
|
||||||
})(DisallowedAPIVersionReason = exports.DisallowedAPIVersionReason || (exports.DisallowedAPIVersionReason = {}));
|
})(DisallowedAPIVersionReason = exports.DisallowedAPIVersionReason || (exports.DisallowedAPIVersionReason = {}));
|
||||||
const getApiClient = function (apiDetails, { allowExternal = false } = {}) {
|
function createApiClientWithDetails(apiDetails, { allowExternal = false } = {}) {
|
||||||
const auth = (allowExternal && apiDetails.externalRepoAuth) || apiDetails.auth;
|
const auth = (allowExternal && apiDetails.externalRepoAuth) || apiDetails.auth;
|
||||||
const retryingOctokit = githubUtils.GitHub.plugin(retry.retry);
|
const retryingOctokit = githubUtils.GitHub.plugin(retry.retry);
|
||||||
const apiURL = apiDetails.apiURL || deriveApiUrl(apiDetails.url);
|
|
||||||
return new retryingOctokit(githubUtils.getOctokitOptions(auth, {
|
return new retryingOctokit(githubUtils.getOctokitOptions(auth, {
|
||||||
baseUrl: apiURL,
|
baseUrl: apiDetails.apiURL,
|
||||||
userAgent: `CodeQL-${(0, util_1.getMode)()}/${pkg.version}`,
|
userAgent: `CodeQL-Action/${pkg.version}`,
|
||||||
log: (0, console_log_level_1.default)({ level: "debug" }),
|
log: (0, console_log_level_1.default)({ level: "debug" }),
|
||||||
}));
|
}));
|
||||||
};
|
|
||||||
exports.getApiClient = getApiClient;
|
|
||||||
// Once the runner is deleted, this can also be removed since the GitHub API URL is always available in an environment variable on Actions.
|
|
||||||
function deriveApiUrl(githubUrl) {
|
|
||||||
const url = new URL(githubUrl);
|
|
||||||
// If we detect this is trying to connect to github.com
|
|
||||||
// then return with a fixed canonical URL.
|
|
||||||
if (url.hostname === "github.com" || url.hostname === "api.github.com") {
|
|
||||||
return "https://api.github.com";
|
|
||||||
}
|
|
||||||
// Add the /api/v3 API prefix
|
|
||||||
url.pathname = path.join(url.pathname, "api", "v3");
|
|
||||||
return url.toString();
|
|
||||||
}
|
}
|
||||||
function getApiDetails() {
|
function getApiDetails() {
|
||||||
return {
|
return {
|
||||||
|
|
@ -68,30 +53,27 @@ function getApiDetails() {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
exports.getApiDetails = getApiDetails;
|
exports.getApiDetails = getApiDetails;
|
||||||
// Temporary function to aid in the transition to running on and off of github actions.
|
function getApiClient() {
|
||||||
// Once all code has been converted this function should be removed or made canonical
|
return createApiClientWithDetails(getApiDetails());
|
||||||
// and called only from the action entrypoints.
|
|
||||||
function getActionsApiClient() {
|
|
||||||
return (0, exports.getApiClient)(getApiDetails());
|
|
||||||
}
|
}
|
||||||
exports.getActionsApiClient = getActionsApiClient;
|
exports.getApiClient = getApiClient;
|
||||||
|
function getApiClientWithExternalAuth(apiDetails) {
|
||||||
|
return createApiClientWithDetails(apiDetails, { allowExternal: true });
|
||||||
|
}
|
||||||
|
exports.getApiClientWithExternalAuth = getApiClientWithExternalAuth;
|
||||||
let cachedGitHubVersion = undefined;
|
let cachedGitHubVersion = undefined;
|
||||||
/**
|
/**
|
||||||
* Report the GitHub server version. This is a wrapper around
|
* Report the GitHub server version. This is a wrapper around
|
||||||
* util.getGitHubVersion() that automatically supplies GitHub API details using
|
* util.getGitHubVersion() that automatically supplies GitHub API details using
|
||||||
* GitHub Action inputs. If you need to get the GitHub server version from the
|
* GitHub Action inputs.
|
||||||
* Runner, please call util.getGitHubVersion() instead.
|
|
||||||
*
|
*
|
||||||
* @returns GitHub version
|
* @returns GitHub version
|
||||||
*/
|
*/
|
||||||
async function getGitHubVersionActionsOnly() {
|
async function getGitHubVersion() {
|
||||||
if (!util.isActions()) {
|
|
||||||
throw new Error("getGitHubVersionActionsOnly() works only in an action");
|
|
||||||
}
|
|
||||||
if (cachedGitHubVersion === undefined) {
|
if (cachedGitHubVersion === undefined) {
|
||||||
cachedGitHubVersion = await util.getGitHubVersion(getApiDetails());
|
cachedGitHubVersion = await util.getGitHubVersion(getApiDetails());
|
||||||
}
|
}
|
||||||
return cachedGitHubVersion;
|
return cachedGitHubVersion;
|
||||||
}
|
}
|
||||||
exports.getGitHubVersionActionsOnly = getGitHubVersionActionsOnly;
|
exports.getGitHubVersion = getGitHubVersion;
|
||||||
//# sourceMappingURL=api-client.js.map
|
//# sourceMappingURL=api-client.js.map
|
||||||
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAE7B,uEAAyD;AACzD,6DAA+C;AAC/C,0EAAgD;AAEhD,iDAAkD;AAClD,6CAA+B;AAC/B,iCAAqE;AAErE,8CAA8C;AAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEvC,IAAY,0BAGX;AAHD,WAAY,0BAA0B;IACpC,+FAAc,CAAA;IACd,+FAAc,CAAA;AAChB,CAAC,EAHW,0BAA0B,GAA1B,kCAA0B,KAA1B,kCAA0B,QAGrC;AAiBM,MAAM,YAAY,GAAG,UAC1B,UAAoC,EACpC,EAAE,aAAa,GAAG,KAAK,EAAE,GAAG,EAAE;IAE9B,MAAM,IAAI,GACR,CAAC,aAAa,IAAI,UAAU,CAAC,gBAAgB,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC;IACpE,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,IAAI,eAAe,CACxB,WAAW,CAAC,iBAAiB,CAAC,IAAI,EAAE;QAClC,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,UAAU,IAAA,cAAO,GAAE,IAAI,GAAG,CAAC,OAAO,EAAE;QAC/C,GAAG,EAAE,IAAA,2BAAe,EAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;KACzC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,YAAY,gBAevB;AAEF,2IAA2I;AAC3I,SAAS,YAAY,CAAC,SAAiB;IACrC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAE/B,uDAAuD;IACvD,0CAA0C;IAC1C,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,GAAG,CAAC,QAAQ,KAAK,gBAAgB,EAAE;QACtE,OAAO,wBAAwB,CAAC;KACjC;IAED,6BAA6B;IAC7B,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,SAAgB,aAAa;IAC3B,OAAO;QACL,IAAI,EAAE,IAAA,+BAAgB,EAAC,OAAO,CAAC;QAC/B,GAAG,EAAE,IAAA,0BAAmB,EAAC,mBAAmB,CAAC;QAC7C,MAAM,EAAE,IAAA,0BAAmB,EAAC,gBAAgB,CAAC;KAC9C,CAAC;AACJ,CAAC;AAND,sCAMC;AAED,uFAAuF;AACvF,qFAAqF;AACrF,+CAA+C;AAC/C,SAAgB,mBAAmB;IACjC,OAAO,IAAA,oBAAY,EAAC,aAAa,EAAE,CAAC,CAAC;AACvC,CAAC;AAFD,kDAEC;AAED,IAAI,mBAAmB,GAA8B,SAAS,CAAC;AAE/D;;;;;;;GAOG;AACI,KAAK,UAAU,2BAA2B;IAC/C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;KAC1E;IACD,IAAI,mBAAmB,KAAK,SAAS,EAAE;QACrC,mBAAmB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC;KACpE;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AARD,kEAQC"}
|
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uEAAyD;AACzD,6DAA+C;AAC/C,0EAAgD;AAEhD,iDAAkD;AAClD,6CAA+B;AAC/B,iCAA4D;AAE5D,8CAA8C;AAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEvC,IAAY,0BAGX;AAHD,WAAY,0BAA0B;IACpC,+FAAc,CAAA;IACd,+FAAc,CAAA;AAChB,CAAC,EAHW,0BAA0B,GAA1B,kCAA0B,KAA1B,kCAA0B,QAGrC;AAiBD,SAAS,0BAA0B,CACjC,UAAoC,EACpC,EAAE,aAAa,GAAG,KAAK,EAAE,GAAG,EAAE;IAE9B,MAAM,IAAI,GACR,CAAC,aAAa,IAAI,UAAU,CAAC,gBAAgB,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC;IACpE,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,IAAI,eAAe,CACxB,WAAW,CAAC,iBAAiB,CAAC,IAAI,EAAE;QAClC,OAAO,EAAE,UAAU,CAAC,MAAM;QAC1B,SAAS,EAAE,iBAAiB,GAAG,CAAC,OAAO,EAAE;QACzC,GAAG,EAAE,IAAA,2BAAe,EAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;KACzC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa;IAC3B,OAAO;QACL,IAAI,EAAE,IAAA,+BAAgB,EAAC,OAAO,CAAC;QAC/B,GAAG,EAAE,IAAA,0BAAmB,EAAC,mBAAmB,CAAC;QAC7C,MAAM,EAAE,IAAA,0BAAmB,EAAC,gBAAgB,CAAC;KAC9C,CAAC;AACJ,CAAC;AAND,sCAMC;AAED,SAAgB,YAAY;IAC1B,OAAO,0BAA0B,CAAC,aAAa,EAAE,CAAC,CAAC;AACrD,CAAC;AAFD,oCAEC;AAED,SAAgB,4BAA4B,CAC1C,UAAoC;IAEpC,OAAO,0BAA0B,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AACzE,CAAC;AAJD,oEAIC;AAED,IAAI,mBAAmB,GAA8B,SAAS,CAAC;AAE/D;;;;;;GAMG;AACI,KAAK,UAAU,gBAAgB;IACpC,IAAI,mBAAmB,KAAK,SAAS,EAAE;QACrC,mBAAmB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC;KACpE;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AALD,4CAKC"}
|
||||||
74
lib/api-client.test.js
generated
74
lib/api-client.test.js
generated
|
|
@ -25,9 +25,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const githubUtils = __importStar(require("@actions/github/lib/utils"));
|
const githubUtils = __importStar(require("@actions/github/lib/utils"));
|
||||||
const ava_1 = __importDefault(require("ava"));
|
const ava_1 = __importDefault(require("ava"));
|
||||||
const sinon = __importStar(require("sinon"));
|
const sinon = __importStar(require("sinon"));
|
||||||
|
const actionsUtil = __importStar(require("./actions-util"));
|
||||||
const api_client_1 = require("./api-client");
|
const api_client_1 = require("./api-client");
|
||||||
const testing_utils_1 = require("./testing-utils");
|
const testing_utils_1 = require("./testing-utils");
|
||||||
const util_1 = require("./util");
|
const util = __importStar(require("./util"));
|
||||||
// eslint-disable-next-line import/no-commonjs
|
// eslint-disable-next-line import/no-commonjs
|
||||||
const pkg = require("../package.json");
|
const pkg = require("../package.json");
|
||||||
(0, testing_utils_1.setupTests)(ava_1.default);
|
(0, testing_utils_1.setupTests)(ava_1.default);
|
||||||
|
|
@ -37,66 +38,23 @@ ava_1.default.beforeEach(() => {
|
||||||
pluginStub = sinon.stub(githubUtils.GitHub, "plugin");
|
pluginStub = sinon.stub(githubUtils.GitHub, "plugin");
|
||||||
githubStub = sinon.stub();
|
githubStub = sinon.stub();
|
||||||
pluginStub.returns(githubStub);
|
pluginStub.returns(githubStub);
|
||||||
(0, util_1.initializeEnvironment)(util_1.Mode.actions, pkg.version);
|
util.initializeEnvironment(pkg.version);
|
||||||
});
|
});
|
||||||
(0, ava_1.default)("Get the client API", async (t) => {
|
(0, ava_1.default)("getApiClient", async (t) => {
|
||||||
doTest(t, {
|
sinon.stub(actionsUtil, "getRequiredInput").withArgs("token").returns("xyz");
|
||||||
auth: "xyz",
|
const requiredEnvParamStub = sinon.stub(util, "getRequiredEnvParam");
|
||||||
externalRepoAuth: "abc",
|
requiredEnvParamStub
|
||||||
url: "http://hucairz",
|
.withArgs("GITHUB_SERVER_URL")
|
||||||
}, undefined, {
|
.returns("http://github.localhost");
|
||||||
auth: "token xyz",
|
requiredEnvParamStub
|
||||||
baseUrl: "http://hucairz/api/v3",
|
.withArgs("GITHUB_API_URL")
|
||||||
userAgent: `CodeQL-Action/${pkg.version}`,
|
.returns("http://api.github.localhost");
|
||||||
});
|
(0, api_client_1.getApiClient)();
|
||||||
});
|
t.assert(githubStub.calledOnceWithExactly({
|
||||||
(0, ava_1.default)("Get the client API external", async (t) => {
|
|
||||||
doTest(t, {
|
|
||||||
auth: "xyz",
|
|
||||||
externalRepoAuth: "abc",
|
|
||||||
url: "http://hucairz",
|
|
||||||
}, { allowExternal: true }, {
|
|
||||||
auth: "token abc",
|
|
||||||
baseUrl: "http://hucairz/api/v3",
|
|
||||||
userAgent: `CodeQL-Action/${pkg.version}`,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
(0, ava_1.default)("Get the client API external not present", async (t) => {
|
|
||||||
doTest(t, {
|
|
||||||
auth: "xyz",
|
|
||||||
url: "http://hucairz",
|
|
||||||
}, { allowExternal: true }, {
|
|
||||||
auth: "token xyz",
|
|
||||||
baseUrl: "http://hucairz/api/v3",
|
|
||||||
userAgent: `CodeQL-Action/${pkg.version}`,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
(0, ava_1.default)("Get the client API with github url", async (t) => {
|
|
||||||
doTest(t, {
|
|
||||||
auth: "xyz",
|
|
||||||
url: "https://github.com/some/invalid/url",
|
|
||||||
}, undefined, {
|
|
||||||
auth: "token xyz",
|
|
||||||
baseUrl: "https://api.github.com",
|
|
||||||
userAgent: `CodeQL-Action/${pkg.version}`,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
(0, ava_1.default)("Get the API with an API URL directly", async (t) => {
|
|
||||||
doTest(t, {
|
|
||||||
auth: "xyz",
|
|
||||||
url: "http://github.localhost",
|
|
||||||
apiURL: "http://api.github.localhost",
|
|
||||||
}, undefined, {
|
|
||||||
auth: "token xyz",
|
auth: "token xyz",
|
||||||
baseUrl: "http://api.github.localhost",
|
baseUrl: "http://api.github.localhost",
|
||||||
|
log: sinon.match.any,
|
||||||
userAgent: `CodeQL-Action/${pkg.version}`,
|
userAgent: `CodeQL-Action/${pkg.version}`,
|
||||||
});
|
}));
|
||||||
});
|
});
|
||||||
function doTest(t, clientArgs, clientOptions, expected) {
|
|
||||||
(0, api_client_1.getApiClient)(clientArgs, clientOptions);
|
|
||||||
const firstCallArgs = githubStub.args[0];
|
|
||||||
// log is a function, so we don't need to test for equality of it
|
|
||||||
delete firstCallArgs[0].log;
|
|
||||||
t.deepEqual(firstCallArgs, [expected]);
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=api-client.test.js.map
|
//# sourceMappingURL=api-client.test.js.map
|
||||||
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"api-client.test.js","sourceRoot":"","sources":["../src/api-client.test.ts"],"names":[],"mappings":"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"}
|
{"version":3,"file":"api-client.test.js","sourceRoot":"","sources":["../src/api-client.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,uEAAyD;AACzD,8CAAuB;AACvB,6CAA+B;AAE/B,4DAA8C;AAC9C,6CAA4C;AAC5C,mDAA6C;AAC7C,6CAA+B;AAE/B,8CAA8C;AAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEvC,IAAA,0BAAU,EAAC,aAAI,CAAC,CAAC;AAEjB,IAAI,UAA2B,CAAC;AAChC,IAAI,UAA2B,CAAC;AAEhC,aAAI,CAAC,UAAU,CAAC,GAAG,EAAE;IACnB,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtD,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/B,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC/B,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7E,MAAM,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IACrE,oBAAoB;SACjB,QAAQ,CAAC,mBAAmB,CAAC;SAC7B,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACtC,oBAAoB;SACjB,QAAQ,CAAC,gBAAgB,CAAC;SAC1B,OAAO,CAAC,6BAA6B,CAAC,CAAC;IAE1C,IAAA,yBAAY,GAAE,CAAC;IAEf,CAAC,CAAC,MAAM,CACN,UAAU,CAAC,qBAAqB,CAAC;QAC/B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,6BAA6B;QACtC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG;QACpB,SAAS,EAAE,iBAAiB,GAAG,CAAC,OAAO,EAAE;KAC1C,CAAC,CACH,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
||||||
6
lib/autobuild-action.js
generated
6
lib/autobuild-action.js
generated
|
|
@ -30,7 +30,7 @@ const util_1 = require("./util");
|
||||||
// eslint-disable-next-line import/no-commonjs
|
// eslint-disable-next-line import/no-commonjs
|
||||||
const pkg = require("../package.json");
|
const pkg = require("../package.json");
|
||||||
async function sendCompletedStatusReport(startedAt, allLanguages, failingLanguage, cause) {
|
async function sendCompletedStatusReport(startedAt, allLanguages, failingLanguage, cause) {
|
||||||
(0, util_1.initializeEnvironment)(util_1.Mode.actions, pkg.version);
|
(0, util_1.initializeEnvironment)(pkg.version);
|
||||||
const status = (0, actions_util_1.getActionsStatus)(cause, failingLanguage);
|
const status = (0, actions_util_1.getActionsStatus)(cause, failingLanguage);
|
||||||
const statusReportBase = await (0, actions_util_1.createStatusReportBase)("autobuild", status, startedAt, cause === null || cause === void 0 ? void 0 : cause.message, cause === null || cause === void 0 ? void 0 : cause.stack);
|
const statusReportBase = await (0, actions_util_1.createStatusReportBase)("autobuild", status, startedAt, cause === null || cause === void 0 ? void 0 : cause.message, cause === null || cause === void 0 ? void 0 : cause.stack);
|
||||||
const statusReport = {
|
const statusReport = {
|
||||||
|
|
@ -50,8 +50,8 @@ async function run() {
|
||||||
if (!(await (0, actions_util_1.sendStatusReport)(await (0, actions_util_1.createStatusReportBase)("autobuild", "starting", startedAt)))) {
|
if (!(await (0, actions_util_1.sendStatusReport)(await (0, actions_util_1.createStatusReportBase)("autobuild", "starting", startedAt)))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const gitHubVersion = await (0, api_client_1.getGitHubVersionActionsOnly)();
|
const gitHubVersion = await (0, api_client_1.getGitHubVersion)();
|
||||||
(0, util_1.checkGitHubVersionInRange)(gitHubVersion, logger, util_1.Mode.actions);
|
(0, util_1.checkGitHubVersionInRange)(gitHubVersion, logger);
|
||||||
const config = await configUtils.getConfig((0, actions_util_1.getTemporaryDirectory)(), logger);
|
const config = await configUtils.getConfig((0, actions_util_1.getTemporaryDirectory)(), logger);
|
||||||
if (config === undefined) {
|
if (config === undefined) {
|
||||||
throw new Error("Config file could not be found at expected location. Has the 'init' action been called?");
|
throw new Error("Config file could not be found at expected location. Has the 'init' action been called?");
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"autobuild-action.js","sourceRoot":"","sources":["../src/autobuild-action.ts"],"names":[],"mappings":"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"}
|
{"version":3,"file":"autobuild-action.js","sourceRoot":"","sources":["../src/autobuild-action.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,oDAAsC;AAEtC,iDAOwB;AACxB,6CAAgD;AAChD,2CAAwE;AACxE,4DAA8C;AAC9C,2CAAuC;AACvC,uCAA6C;AAC7C,iCAKgB;AAEhB,8CAA8C;AAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AASvC,KAAK,UAAU,yBAAyB,CACtC,SAAe,EACf,YAAsB,EACtB,eAAwB,EACxB,KAAa;IAEb,IAAA,4BAAqB,EAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAG,IAAA,+BAAgB,EAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IACxD,MAAM,gBAAgB,GAAG,MAAM,IAAA,qCAAsB,EACnD,WAAW,EACX,MAAM,EACN,SAAS,EACT,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,EACd,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CACb,CAAC;IACF,MAAM,YAAY,GAA0B;QAC1C,GAAG,gBAAgB;QACnB,mBAAmB,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3C,iBAAiB,EAAE,eAAe;KACnC,CAAC;IACF,MAAM,IAAA,+BAAgB,EAAC,YAAY,CAAC,CAAC;AACvC,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAA,0BAAgB,GAAE,CAAC;IAClC,MAAM,IAAA,yBAAkB,EAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,eAAe,GAAyB,SAAS,CAAC;IACtD,IAAI,SAAS,GAA2B,SAAS,CAAC;IAClD,IAAI;QACF,IACE,CAAC,CAAC,MAAM,IAAA,+BAAgB,EACtB,MAAM,IAAA,qCAAsB,EAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CACjE,CAAC,EACF;YACA,OAAO;SACR;QAED,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAgB,GAAE,CAAC;QAC/C,IAAA,gCAAyB,EAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,IAAA,oCAAqB,GAAE,EAAE,MAAM,CAAC,CAAC;QAC5E,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;SACH;QAED,SAAS,GAAG,MAAM,IAAA,uCAA2B,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9D,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,MAAM,gBAAgB,GAAG,IAAA,+BAAgB,EAAC,mBAAmB,CAAC,CAAC;YAC/D,IAAI,gBAAgB,EAAE;gBACpB,MAAM,CAAC,IAAI,CACT,6CAA6C,gBAAgB,EAAE,CAChE,CAAC;gBACF,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;aACjC;YACD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAChC,eAAe,GAAG,QAAQ,CAAC;gBAC3B,MAAM,IAAA,wBAAY,EAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC7C,IAAI,QAAQ,KAAK,oBAAQ,CAAC,EAAE,EAAE;oBAC5B,IAAI,CAAC,cAAc,CAAC,oCAA6B,EAAE,MAAM,CAAC,CAAC;iBAC5D;aACF;SACF;KACF;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,CAAC,SAAS,CACZ,mIACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,MAAM,yBAAyB,CAC7B,SAAS,EACT,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,EACf,eAAe,EACf,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;QACF,OAAO;KACR;IAED,MAAM,yBAAyB,CAAC,SAAS,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,IAAI;QACF,MAAM,GAAG,EAAE,CAAC;KACb;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,CAAC,SAAS,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACpB;AACH,CAAC;AAED,KAAK,UAAU,EAAE,CAAC"}
|
||||||
28
lib/codeql.js
generated
28
lib/codeql.js
generated
|
|
@ -127,15 +127,6 @@ function getCodeQLBundleName() {
|
||||||
return `codeql-bundle-${platform}.tar.gz`;
|
return `codeql-bundle-${platform}.tar.gz`;
|
||||||
}
|
}
|
||||||
function getCodeQLActionRepository(logger) {
|
function getCodeQLActionRepository(logger) {
|
||||||
if (!util.isActions()) {
|
|
||||||
return exports.CODEQL_DEFAULT_ACTION_REPOSITORY;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return getActionsCodeQLActionRepository(logger);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.getCodeQLActionRepository = getCodeQLActionRepository;
|
|
||||||
function getActionsCodeQLActionRepository(logger) {
|
|
||||||
if (process.env["GITHUB_ACTION_REPOSITORY"] !== undefined) {
|
if (process.env["GITHUB_ACTION_REPOSITORY"] !== undefined) {
|
||||||
return process.env["GITHUB_ACTION_REPOSITORY"];
|
return process.env["GITHUB_ACTION_REPOSITORY"];
|
||||||
}
|
}
|
||||||
|
|
@ -151,6 +142,7 @@ function getActionsCodeQLActionRepository(logger) {
|
||||||
const relativeScriptPathParts = (0, actions_util_1.getRelativeScriptPath)().split(path.sep);
|
const relativeScriptPathParts = (0, actions_util_1.getRelativeScriptPath)().split(path.sep);
|
||||||
return `${relativeScriptPathParts[0]}/${relativeScriptPathParts[1]}`;
|
return `${relativeScriptPathParts[0]}/${relativeScriptPathParts[1]}`;
|
||||||
}
|
}
|
||||||
|
exports.getCodeQLActionRepository = getCodeQLActionRepository;
|
||||||
async function getCodeQLBundleDownloadURL(apiDetails, variant, logger) {
|
async function getCodeQLBundleDownloadURL(apiDetails, variant, logger) {
|
||||||
const codeQLActionRepository = getCodeQLActionRepository(logger);
|
const codeQLActionRepository = getCodeQLActionRepository(logger);
|
||||||
const potentialDownloadSources = [
|
const potentialDownloadSources = [
|
||||||
|
|
@ -170,14 +162,14 @@ async function getCodeQLBundleDownloadURL(apiDetails, variant, logger) {
|
||||||
if (variant === util.GitHubVariant.GHAE) {
|
if (variant === util.GitHubVariant.GHAE) {
|
||||||
try {
|
try {
|
||||||
const release = await api
|
const release = await api
|
||||||
.getApiClient(apiDetails)
|
.getApiClient()
|
||||||
.request("GET /enterprise/code-scanning/codeql-bundle/find/{tag}", {
|
.request("GET /enterprise/code-scanning/codeql-bundle/find/{tag}", {
|
||||||
tag: CODEQL_BUNDLE_VERSION,
|
tag: CODEQL_BUNDLE_VERSION,
|
||||||
});
|
});
|
||||||
const assetID = release.data.assets[codeQLBundleName];
|
const assetID = release.data.assets[codeQLBundleName];
|
||||||
if (assetID !== undefined) {
|
if (assetID !== undefined) {
|
||||||
const download = await api
|
const download = await api
|
||||||
.getApiClient(apiDetails)
|
.getApiClient()
|
||||||
.request("GET /enterprise/code-scanning/codeql-bundle/download/{asset_id}", { asset_id: assetID });
|
.request("GET /enterprise/code-scanning/codeql-bundle/download/{asset_id}", { asset_id: assetID });
|
||||||
const downloadURL = download.data.url;
|
const downloadURL = download.data.url;
|
||||||
logger.info(`Found CodeQL bundle at GitHub AE endpoint with URL ${downloadURL}.`);
|
logger.info(`Found CodeQL bundle at GitHub AE endpoint with URL ${downloadURL}.`);
|
||||||
|
|
@ -200,7 +192,7 @@ async function getCodeQLBundleDownloadURL(apiDetails, variant, logger) {
|
||||||
}
|
}
|
||||||
const [repositoryOwner, repositoryName] = repository.split("/");
|
const [repositoryOwner, repositoryName] = repository.split("/");
|
||||||
try {
|
try {
|
||||||
const release = await api.getApiClient(apiDetails).repos.getReleaseByTag({
|
const release = await api.getApiClient().repos.getReleaseByTag({
|
||||||
owner: repositoryOwner,
|
owner: repositoryOwner,
|
||||||
repo: repositoryName,
|
repo: repositoryName,
|
||||||
tag: CODEQL_BUNDLE_VERSION,
|
tag: CODEQL_BUNDLE_VERSION,
|
||||||
|
|
@ -511,20 +503,12 @@ async function getCodeQLForCmd(cmd, checkVersion) {
|
||||||
...getExtraOptionsFromEnv(["database", "init"]),
|
...getExtraOptionsFromEnv(["database", "init"]),
|
||||||
]);
|
]);
|
||||||
},
|
},
|
||||||
async databaseInitCluster(config, sourceRoot, processName, processLevel, featureEnablement) {
|
async databaseInitCluster(config, sourceRoot, processName, featureEnablement) {
|
||||||
const extraArgs = config.languages.map((language) => `--language=${language}`);
|
const extraArgs = config.languages.map((language) => `--language=${language}`);
|
||||||
if (config.languages.filter((l) => (0, languages_1.isTracedLanguage)(l)).length > 0) {
|
if (config.languages.filter((l) => (0, languages_1.isTracedLanguage)(l)).length > 0) {
|
||||||
extraArgs.push("--begin-tracing");
|
extraArgs.push("--begin-tracing");
|
||||||
extraArgs.push(...(await (0, trap_caching_1.getTrapCachingExtractorConfigArgs)(config)));
|
extraArgs.push(...(await (0, trap_caching_1.getTrapCachingExtractorConfigArgs)(config)));
|
||||||
if (processName !== undefined) {
|
extraArgs.push(`--trace-process-name=${processName}`);
|
||||||
extraArgs.push(`--trace-process-name=${processName}`);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// We default to 3 if no other arguments are provided since this was the default
|
|
||||||
// behaviour of the Runner. Note this path never happens in the CodeQL Action
|
|
||||||
// because that always passes in a process name.
|
|
||||||
extraArgs.push(`--trace-process-level=${processLevel || 3}`);
|
|
||||||
}
|
|
||||||
if (
|
if (
|
||||||
// There's a bug in Lua tracing for Go on Windows in versions earlier than
|
// There's a bug in Lua tracing for Go on Windows in versions earlier than
|
||||||
// `CODEQL_VERSION_LUA_TRACING_GO_WINDOWS_FIXED`, so don't use Lua tracing
|
// `CODEQL_VERSION_LUA_TRACING_GO_WINDOWS_FIXED`, so don't use Lua tracing
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
13
lib/codeql.test.js
generated
13
lib/codeql.test.js
generated
|
|
@ -55,7 +55,7 @@ const sampleGHAEApiDetails = {
|
||||||
};
|
};
|
||||||
let stubConfig;
|
let stubConfig;
|
||||||
ava_1.default.beforeEach(() => {
|
ava_1.default.beforeEach(() => {
|
||||||
(0, util_1.initializeEnvironment)(util_1.Mode.actions, "1.2.3");
|
(0, util_1.initializeEnvironment)("1.2.3");
|
||||||
stubConfig = {
|
stubConfig = {
|
||||||
languages: [languages_1.Language.cpp],
|
languages: [languages_1.Language.cpp],
|
||||||
queries: {},
|
queries: {},
|
||||||
|
|
@ -291,10 +291,7 @@ for (const [isFeatureEnabled, toolsInput, shouldToolcacheBeBypassed,] of TOOLCAC
|
||||||
});
|
});
|
||||||
(0, ava_1.default)("getCodeQLActionRepository", (t) => {
|
(0, ava_1.default)("getCodeQLActionRepository", (t) => {
|
||||||
const logger = (0, logging_1.getRunnerLogger)(true);
|
const logger = (0, logging_1.getRunnerLogger)(true);
|
||||||
(0, util_1.initializeEnvironment)(util_1.Mode.runner, "1.2.3");
|
(0, util_1.initializeEnvironment)("1.2.3");
|
||||||
const repoActions = codeql.getCodeQLActionRepository(logger);
|
|
||||||
t.deepEqual(repoActions, "github/codeql-action");
|
|
||||||
(0, util_1.initializeEnvironment)(util_1.Mode.actions, "1.2.3");
|
|
||||||
// isRunningLocalAction() === true
|
// isRunningLocalAction() === true
|
||||||
delete process.env["GITHUB_ACTION_REPOSITORY"];
|
delete process.env["GITHUB_ACTION_REPOSITORY"];
|
||||||
process.env["RUNNER_TEMP"] = path.dirname(__dirname);
|
process.env["RUNNER_TEMP"] = path.dirname(__dirname);
|
||||||
|
|
@ -332,7 +329,7 @@ for (const [isFeatureEnabled, toolsInput, shouldToolcacheBeBypassed,] of TOOLCAC
|
||||||
packsInputCombines: false,
|
packsInputCombines: false,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
await codeqlObject.databaseInitCluster(thisStubConfig, "", undefined, undefined, (0, testing_utils_1.createFeatures)([]), (0, logging_1.getRunnerLogger)(true));
|
await codeqlObject.databaseInitCluster(thisStubConfig, "", undefined, (0, testing_utils_1.createFeatures)([]), (0, logging_1.getRunnerLogger)(true));
|
||||||
const args = runnerConstructorStub.firstCall.args[1];
|
const args = runnerConstructorStub.firstCall.args[1];
|
||||||
// should NOT have used an config file
|
// should NOT have used an config file
|
||||||
const configArg = args.find((arg) => arg.startsWith("--codescanning-config="));
|
const configArg = args.find((arg) => arg.startsWith("--codescanning-config="));
|
||||||
|
|
@ -354,7 +351,7 @@ const injectedConfigMacro = ava_1.default.macro({
|
||||||
tempDir,
|
tempDir,
|
||||||
augmentationProperties,
|
augmentationProperties,
|
||||||
};
|
};
|
||||||
await codeqlObject.databaseInitCluster(thisStubConfig, "", undefined, undefined, (0, testing_utils_1.createFeatures)([feature_flags_1.Feature.CliConfigFileEnabled]), (0, logging_1.getRunnerLogger)(true));
|
await codeqlObject.databaseInitCluster(thisStubConfig, "", undefined, (0, testing_utils_1.createFeatures)([feature_flags_1.Feature.CliConfigFileEnabled]), (0, logging_1.getRunnerLogger)(true));
|
||||||
const args = runnerConstructorStub.firstCall.args[1];
|
const args = runnerConstructorStub.firstCall.args[1];
|
||||||
// should have used an config file
|
// should have used an config file
|
||||||
const configArg = args.find((arg) => arg.startsWith("--codescanning-config="));
|
const configArg = args.find((arg) => arg.startsWith("--codescanning-config="));
|
||||||
|
|
@ -554,7 +551,7 @@ const injectedConfigMacro = ava_1.default.macro({
|
||||||
sinon
|
sinon
|
||||||
.stub(codeqlObject, "getVersion")
|
.stub(codeqlObject, "getVersion")
|
||||||
.resolves(codeql.CODEQL_VERSION_CONFIG_FILES);
|
.resolves(codeql.CODEQL_VERSION_CONFIG_FILES);
|
||||||
await codeqlObject.databaseInitCluster(stubConfig, "", undefined, undefined, (0, testing_utils_1.createFeatures)([]), (0, logging_1.getRunnerLogger)(true));
|
await codeqlObject.databaseInitCluster(stubConfig, "", undefined, (0, testing_utils_1.createFeatures)([]), (0, logging_1.getRunnerLogger)(true));
|
||||||
const args = runnerConstructorStub.firstCall.args[1];
|
const args = runnerConstructorStub.firstCall.args[1];
|
||||||
// should have used an config file
|
// should have used an config file
|
||||||
const configArg = args.find((arg) => arg.startsWith("--codescanning-config="));
|
const configArg = args.find((arg) => arg.startsWith("--codescanning-config="));
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
14
lib/config-utils.js
generated
14
lib/config-utils.js
generated
|
|
@ -387,9 +387,9 @@ exports.getUnknownLanguagesError = getUnknownLanguagesError;
|
||||||
/**
|
/**
|
||||||
* Gets the set of languages in the current repository
|
* Gets the set of languages in the current repository
|
||||||
*/
|
*/
|
||||||
async function getLanguagesInRepo(repository, apiDetails, logger) {
|
async function getLanguagesInRepo(repository, logger) {
|
||||||
logger.debug(`GitHub repo ${repository.owner} ${repository.repo}`);
|
logger.debug(`GitHub repo ${repository.owner} ${repository.repo}`);
|
||||||
const response = await api.getApiClient(apiDetails).repos.listLanguages({
|
const response = await api.getApiClient().repos.listLanguages({
|
||||||
owner: repository.owner,
|
owner: repository.owner,
|
||||||
repo: repository.repo,
|
repo: repository.repo,
|
||||||
});
|
});
|
||||||
|
|
@ -417,7 +417,7 @@ async function getLanguagesInRepo(repository, apiDetails, logger) {
|
||||||
* If no languages could be detected from either the workflow or the repository
|
* If no languages could be detected from either the workflow or the repository
|
||||||
* then throw an error.
|
* then throw an error.
|
||||||
*/
|
*/
|
||||||
async function getLanguages(codeQL, languagesInput, repository, apiDetails, logger) {
|
async function getLanguages(codeQL, languagesInput, repository, logger) {
|
||||||
// Obtain from action input 'languages' if set
|
// Obtain from action input 'languages' if set
|
||||||
let languages = (languagesInput || "")
|
let languages = (languagesInput || "")
|
||||||
.split(",")
|
.split(",")
|
||||||
|
|
@ -426,7 +426,7 @@ async function getLanguages(codeQL, languagesInput, repository, apiDetails, logg
|
||||||
logger.info(`Languages from configuration: ${JSON.stringify(languages)}`);
|
logger.info(`Languages from configuration: ${JSON.stringify(languages)}`);
|
||||||
if (languages.length === 0) {
|
if (languages.length === 0) {
|
||||||
// Obtain languages as all languages in the repo that can be analysed
|
// Obtain languages as all languages in the repo that can be analysed
|
||||||
languages = await getLanguagesInRepo(repository, apiDetails, logger);
|
languages = await getLanguagesInRepo(repository, logger);
|
||||||
const availableLanguages = await codeQL.resolveLanguages();
|
const availableLanguages = await codeQL.resolveLanguages();
|
||||||
languages = languages.filter((value) => value in availableLanguages);
|
languages = languages.filter((value) => value in availableLanguages);
|
||||||
logger.info(`Automatically detected languages: ${JSON.stringify(languages)}`);
|
logger.info(`Automatically detected languages: ${JSON.stringify(languages)}`);
|
||||||
|
|
@ -478,7 +478,7 @@ function shouldAddConfigFileQueries(queriesInput) {
|
||||||
* Get the default config for when the user has not supplied one.
|
* Get the default config for when the user has not supplied one.
|
||||||
*/
|
*/
|
||||||
async function getDefaultConfig(languagesInput, rawQueriesInput, rawPacksInput, dbLocation, trapCachingEnabled, debugMode, debugArtifactName, debugDatabaseName, repository, tempDir, codeQL, workspacePath, gitHubVersion, apiDetails, featureEnablement, logger) {
|
async function getDefaultConfig(languagesInput, rawQueriesInput, rawPacksInput, dbLocation, trapCachingEnabled, debugMode, debugArtifactName, debugDatabaseName, repository, tempDir, codeQL, workspacePath, gitHubVersion, apiDetails, featureEnablement, logger) {
|
||||||
const languages = await getLanguages(codeQL, languagesInput, repository, apiDetails, logger);
|
const languages = await getLanguages(codeQL, languagesInput, repository, logger);
|
||||||
const queries = {};
|
const queries = {};
|
||||||
for (const language of languages) {
|
for (const language of languages) {
|
||||||
queries[language] = {
|
queries[language] = {
|
||||||
|
|
@ -552,7 +552,7 @@ async function loadConfig(languagesInput, rawQueriesInput, rawPacksInput, config
|
||||||
throw new Error(getNameInvalid(configFile));
|
throw new Error(getNameInvalid(configFile));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const languages = await getLanguages(codeQL, languagesInput, repository, apiDetails, logger);
|
const languages = await getLanguages(codeQL, languagesInput, repository, logger);
|
||||||
const queries = {};
|
const queries = {};
|
||||||
for (const language of languages) {
|
for (const language of languages) {
|
||||||
queries[language] = {
|
queries[language] = {
|
||||||
|
|
@ -954,7 +954,7 @@ async function getRemoteConfig(configFile, apiDetails) {
|
||||||
throw new Error(getConfigFileRepoFormatInvalidMessage(configFile));
|
throw new Error(getConfigFileRepoFormatInvalidMessage(configFile));
|
||||||
}
|
}
|
||||||
const response = await api
|
const response = await api
|
||||||
.getApiClient(apiDetails, { allowExternal: true })
|
.getApiClientWithExternalAuth(apiDetails)
|
||||||
.repos.getContent({
|
.repos.getContent({
|
||||||
owner: pieces.groups.owner,
|
owner: pieces.groups.owner,
|
||||||
repo: pieces.groups.repo,
|
repo: pieces.groups.repo,
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
1
lib/config-utils.test.js
generated
1
lib/config-utils.test.js
generated
|
|
@ -61,6 +61,7 @@ function mockGetContents(content) {
|
||||||
.stub(client.repos, "getContent")
|
.stub(client.repos, "getContent")
|
||||||
.resolves(response);
|
.resolves(response);
|
||||||
sinon.stub(api, "getApiClient").value(() => client);
|
sinon.stub(api, "getApiClient").value(() => client);
|
||||||
|
sinon.stub(api, "getApiClientWithExternalAuth").value(() => client);
|
||||||
return spyGetContents;
|
return spyGetContents;
|
||||||
}
|
}
|
||||||
function mockListLanguages(languages) {
|
function mockListLanguages(languages) {
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
2
lib/database-upload.js
generated
2
lib/database-upload.js
generated
|
|
@ -41,7 +41,7 @@ async function uploadDatabases(repositoryNwo, config, apiDetails, logger) {
|
||||||
logger.debug("Not analyzing default branch. Skipping upload.");
|
logger.debug("Not analyzing default branch. Skipping upload.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const client = (0, api_client_1.getApiClient)(apiDetails);
|
const client = (0, api_client_1.getApiClient)();
|
||||||
const codeql = await (0, codeql_1.getCodeQL)(config.codeQLCmd);
|
const codeql = await (0, codeql_1.getCodeQL)(config.codeQLCmd);
|
||||||
for (const language of config.languages) {
|
for (const language of config.languages) {
|
||||||
// Upload the database bundle.
|
// Upload the database bundle.
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"database-upload.js","sourceRoot":"","sources":["../src/database-upload.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AAEzB,4DAA8C;AAC9C,6CAA8D;AAC9D,qCAAqC;AAIrC,6CAA+B;AAC/B,iCAAkC;AAE3B,KAAK,UAAU,eAAe,CACnC,aAA4B,EAC5B,MAAc,EACd,UAA4B,EAC5B,MAAc;IAEd,IAAI,WAAW,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,KAAK,MAAM,EAAE;QAC9D,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACvE,OAAO;KACR;IAED,iDAAiD;IACjD,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;QAC3D,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACjE,OAAO;KACR;IAED,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,wBAAwB,EAAE,CAAC,EAAE;QACnD,4EAA4E;QAC5E,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC/D,OAAO;KACR;IAED,MAAM,MAAM,GAAG,IAAA,yBAAY,EAAC,UAAU,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,IAAA,kBAAS,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEjD,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE;QACvC,8BAA8B;QAC9B,2EAA2E;QAC3E,8EAA8E;QAC9E,wEAAwE;QACxE,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAC7B,MAAM,IAAA,eAAQ,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CACnD,CAAC;QACF,IAAI;YACF,MAAM,MAAM,CAAC,OAAO,CAClB,wGAAwG,EACxG;gBACE,KAAK,EAAE,aAAa,CAAC,KAAK;gBAC1B,IAAI,EAAE,aAAa,CAAC,IAAI;gBACxB,QAAQ;gBACR,IAAI,EAAE,GAAG,QAAQ,WAAW;gBAC5B,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE;oBACP,aAAa,EAAE,SAAS,UAAU,CAAC,IAAI,EAAE;oBACzC,cAAc,EAAE,iBAAiB;iBAClC;aACF,CACF,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC;SAChE;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACf,4CAA4C;YAC5C,MAAM,CAAC,OAAO,CAAC,iCAAiC,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;SACnE;KACF;AACH,CAAC;AAxDD,0CAwDC"}
|
{"version":3,"file":"database-upload.js","sourceRoot":"","sources":["../src/database-upload.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AAEzB,4DAA8C;AAC9C,6CAA8D;AAC9D,qCAAqC;AAIrC,6CAA+B;AAC/B,iCAAkC;AAE3B,KAAK,UAAU,eAAe,CACnC,aAA4B,EAC5B,MAAc,EACd,UAA4B,EAC5B,MAAc;IAEd,IAAI,WAAW,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,KAAK,MAAM,EAAE;QAC9D,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACvE,OAAO;KACR;IAED,iDAAiD;IACjD,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;QAC3D,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACjE,OAAO;KACR;IAED,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,wBAAwB,EAAE,CAAC,EAAE;QACnD,4EAA4E;QAC5E,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC/D,OAAO;KACR;IAED,MAAM,MAAM,GAAG,IAAA,yBAAY,GAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,IAAA,kBAAS,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEjD,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE;QACvC,8BAA8B;QAC9B,2EAA2E;QAC3E,8EAA8E;QAC9E,wEAAwE;QACxE,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAC7B,MAAM,IAAA,eAAQ,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CACnD,CAAC;QACF,IAAI;YACF,MAAM,MAAM,CAAC,OAAO,CAClB,wGAAwG,EACxG;gBACE,KAAK,EAAE,aAAa,CAAC,KAAK;gBAC1B,IAAI,EAAE,aAAa,CAAC,IAAI;gBACxB,QAAQ;gBACR,IAAI,EAAE,GAAG,QAAQ,WAAW;gBAC5B,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE;oBACP,aAAa,EAAE,SAAS,UAAU,CAAC,IAAI,EAAE;oBACzC,cAAc,EAAE,iBAAiB;iBAClC;aACF,CACF,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC;SAChE;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACf,4CAA4C;YAC5C,MAAM,CAAC,OAAO,CAAC,iCAAiC,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;SACnE;KACF;AACH,CAAC;AAxDD,0CAwDC"}
|
||||||
2
lib/database-upload.test.js
generated
2
lib/database-upload.test.js
generated
|
|
@ -36,7 +36,7 @@ const testing_utils_1 = require("./testing-utils");
|
||||||
const util_1 = require("./util");
|
const util_1 = require("./util");
|
||||||
(0, testing_utils_1.setupTests)(ava_1.default);
|
(0, testing_utils_1.setupTests)(ava_1.default);
|
||||||
ava_1.default.beforeEach(() => {
|
ava_1.default.beforeEach(() => {
|
||||||
(0, util_1.initializeEnvironment)(util_1.Mode.actions, "1.2.3");
|
(0, util_1.initializeEnvironment)("1.2.3");
|
||||||
});
|
});
|
||||||
const testRepoName = { owner: "github", repo: "example" };
|
const testRepoName = { owner: "github", repo: "example" };
|
||||||
const testApiDetails = {
|
const testApiDetails = {
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
10
lib/feature-flags.js
generated
10
lib/feature-flags.js
generated
|
|
@ -63,8 +63,8 @@ exports.featureConfig = {
|
||||||
* GitHub API is made to determine the enablement status.
|
* GitHub API is made to determine the enablement status.
|
||||||
*/
|
*/
|
||||||
class Features {
|
class Features {
|
||||||
constructor(gitHubVersion, apiDetails, repositoryNwo, logger) {
|
constructor(gitHubVersion, repositoryNwo, logger) {
|
||||||
this.gitHubFeatureFlags = new GitHubFeatureFlags(gitHubVersion, apiDetails, repositoryNwo, logger);
|
this.gitHubFeatureFlags = new GitHubFeatureFlags(gitHubVersion, repositoryNwo, logger);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
@ -108,9 +108,8 @@ class Features {
|
||||||
}
|
}
|
||||||
exports.Features = Features;
|
exports.Features = Features;
|
||||||
class GitHubFeatureFlags {
|
class GitHubFeatureFlags {
|
||||||
constructor(gitHubVersion, apiDetails, repositoryNwo, logger) {
|
constructor(gitHubVersion, repositoryNwo, logger) {
|
||||||
this.gitHubVersion = gitHubVersion;
|
this.gitHubVersion = gitHubVersion;
|
||||||
this.apiDetails = apiDetails;
|
|
||||||
this.repositoryNwo = repositoryNwo;
|
this.repositoryNwo = repositoryNwo;
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
/**/
|
/**/
|
||||||
|
|
@ -139,9 +138,8 @@ class GitHubFeatureFlags {
|
||||||
this.logger.debug("Not running against github.com. Disabling all toggleable features.");
|
this.logger.debug("Not running against github.com. Disabling all toggleable features.");
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
const client = (0, api_client_1.getApiClient)(this.apiDetails);
|
|
||||||
try {
|
try {
|
||||||
const response = await client.request("GET /repos/:owner/:repo/code-scanning/codeql-action/features", {
|
const response = await (0, api_client_1.getApiClient)().request("GET /repos/:owner/:repo/code-scanning/codeql-action/features", {
|
||||||
owner: this.repositoryNwo.owner,
|
owner: this.repositoryNwo.owner,
|
||||||
repo: this.repositoryNwo.repo,
|
repo: this.repositoryNwo.repo,
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"feature-flags.js","sourceRoot":"","sources":["../src/feature-flags.ts"],"names":[],"mappings":"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"}
|
{"version":3,"file":"feature-flags.js","sourceRoot":"","sources":["../src/feature-flags.ts"],"names":[],"mappings":"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"}
|
||||||
9
lib/feature-flags.test.js
generated
9
lib/feature-flags.test.js
generated
|
|
@ -11,13 +11,8 @@ const testing_utils_1 = require("./testing-utils");
|
||||||
const util_1 = require("./util");
|
const util_1 = require("./util");
|
||||||
(0, testing_utils_1.setupTests)(ava_1.default);
|
(0, testing_utils_1.setupTests)(ava_1.default);
|
||||||
ava_1.default.beforeEach(() => {
|
ava_1.default.beforeEach(() => {
|
||||||
(0, util_1.initializeEnvironment)(util_1.Mode.actions, "1.2.3");
|
(0, util_1.initializeEnvironment)("1.2.3");
|
||||||
});
|
});
|
||||||
const testApiDetails = {
|
|
||||||
auth: "1234",
|
|
||||||
url: "https://github.com",
|
|
||||||
apiURL: undefined,
|
|
||||||
};
|
|
||||||
const testRepositoryNwo = (0, repository_1.parseRepositoryNwo)("github/example");
|
const testRepositoryNwo = (0, repository_1.parseRepositoryNwo)("github/example");
|
||||||
const ALL_FEATURES_DISABLED_VARIANTS = [
|
const ALL_FEATURES_DISABLED_VARIANTS = [
|
||||||
{
|
{
|
||||||
|
|
@ -176,7 +171,7 @@ function initializeFeatures(initialValue) {
|
||||||
}
|
}
|
||||||
function setUpTests(tmpDir, logger = (0, logging_1.getRunnerLogger)(true), gitHubVersion = { type: util_1.GitHubVariant.DOTCOM }) {
|
function setUpTests(tmpDir, logger = (0, logging_1.getRunnerLogger)(true), gitHubVersion = { type: util_1.GitHubVariant.DOTCOM }) {
|
||||||
(0, testing_utils_1.setupActionsVars)(tmpDir, tmpDir);
|
(0, testing_utils_1.setupActionsVars)(tmpDir, tmpDir);
|
||||||
return new feature_flags_1.Features(gitHubVersion, testApiDetails, testRepositoryNwo, logger);
|
return new feature_flags_1.Features(gitHubVersion, testRepositoryNwo, logger);
|
||||||
}
|
}
|
||||||
function includeCodeQlIfRequired(feature) {
|
function includeCodeQlIfRequired(feature) {
|
||||||
return feature_flags_1.featureConfig[feature].minimumVersion !== undefined
|
return feature_flags_1.featureConfig[feature].minimumVersion !== undefined
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
12
lib/init-action.js
generated
12
lib/init-action.js
generated
|
|
@ -74,7 +74,7 @@ async function sendSuccessStatusReport(startedAt, config, toolsVersion, logger)
|
||||||
async function run() {
|
async function run() {
|
||||||
const startedAt = new Date();
|
const startedAt = new Date();
|
||||||
const logger = (0, logging_1.getActionsLogger)();
|
const logger = (0, logging_1.getActionsLogger)();
|
||||||
(0, util_1.initializeEnvironment)(util_1.Mode.actions, pkg.version);
|
(0, util_1.initializeEnvironment)(pkg.version);
|
||||||
await (0, util_1.checkActionVersion)(pkg.version);
|
await (0, util_1.checkActionVersion)(pkg.version);
|
||||||
let config;
|
let config;
|
||||||
let codeql;
|
let codeql;
|
||||||
|
|
@ -85,10 +85,10 @@ async function run() {
|
||||||
url: (0, util_1.getRequiredEnvParam)("GITHUB_SERVER_URL"),
|
url: (0, util_1.getRequiredEnvParam)("GITHUB_SERVER_URL"),
|
||||||
apiURL: (0, util_1.getRequiredEnvParam)("GITHUB_API_URL"),
|
apiURL: (0, util_1.getRequiredEnvParam)("GITHUB_API_URL"),
|
||||||
};
|
};
|
||||||
const gitHubVersion = await (0, api_client_1.getGitHubVersionActionsOnly)();
|
const gitHubVersion = await (0, api_client_1.getGitHubVersion)();
|
||||||
(0, util_1.checkGitHubVersionInRange)(gitHubVersion, logger, util_1.Mode.actions);
|
(0, util_1.checkGitHubVersionInRange)(gitHubVersion, logger);
|
||||||
const repositoryNwo = (0, repository_1.parseRepositoryNwo)((0, util_1.getRequiredEnvParam)("GITHUB_REPOSITORY"));
|
const repositoryNwo = (0, repository_1.parseRepositoryNwo)((0, util_1.getRequiredEnvParam)("GITHUB_REPOSITORY"));
|
||||||
const features = new feature_flags_1.Features(gitHubVersion, apiDetails, repositoryNwo, logger);
|
const features = new feature_flags_1.Features(gitHubVersion, repositoryNwo, logger);
|
||||||
try {
|
try {
|
||||||
const workflowErrors = await (0, actions_util_1.validateWorkflow)();
|
const workflowErrors = await (0, actions_util_1.validateWorkflow)();
|
||||||
if (!(await (0, actions_util_1.sendStatusReport)(await (0, actions_util_1.createStatusReportBase)("init", "starting", startedAt, workflowErrors)))) {
|
if (!(await (0, actions_util_1.sendStatusReport)(await (0, actions_util_1.createStatusReportBase)("init", "starting", startedAt, workflowErrors)))) {
|
||||||
|
|
@ -97,7 +97,7 @@ async function run() {
|
||||||
const initCodeQLResult = await (0, init_1.initCodeQL)((0, actions_util_1.getOptionalInput)("tools"), apiDetails, (0, actions_util_1.getTemporaryDirectory)(), gitHubVersion.type, features, logger);
|
const initCodeQLResult = await (0, init_1.initCodeQL)((0, actions_util_1.getOptionalInput)("tools"), apiDetails, (0, actions_util_1.getTemporaryDirectory)(), gitHubVersion.type, features, logger);
|
||||||
codeql = initCodeQLResult.codeql;
|
codeql = initCodeQLResult.codeql;
|
||||||
toolsVersion = initCodeQLResult.toolsVersion;
|
toolsVersion = initCodeQLResult.toolsVersion;
|
||||||
await (0, util_1.enrichEnvironment)(util_1.Mode.actions, codeql);
|
await (0, util_1.enrichEnvironment)(codeql);
|
||||||
config = await (0, init_1.initConfig)((0, actions_util_1.getOptionalInput)("languages"), (0, actions_util_1.getOptionalInput)("queries"), (0, actions_util_1.getOptionalInput)("packs"), (0, actions_util_1.getOptionalInput)("registries"), (0, actions_util_1.getOptionalInput)("config-file"), (0, actions_util_1.getOptionalInput)("db-location"), await getTrapCachingEnabled(features),
|
config = await (0, init_1.initConfig)((0, actions_util_1.getOptionalInput)("languages"), (0, actions_util_1.getOptionalInput)("queries"), (0, actions_util_1.getOptionalInput)("packs"), (0, actions_util_1.getOptionalInput)("registries"), (0, actions_util_1.getOptionalInput)("config-file"), (0, actions_util_1.getOptionalInput)("db-location"), await getTrapCachingEnabled(features),
|
||||||
// Debug mode is enabled if:
|
// Debug mode is enabled if:
|
||||||
// - The `init` Action is passed `debug: true`.
|
// - The `init` Action is passed `debug: true`.
|
||||||
|
|
@ -138,7 +138,7 @@ async function run() {
|
||||||
(0, util_1.getMemoryFlagValue)((0, actions_util_1.getOptionalInput)("ram")).toString());
|
(0, util_1.getMemoryFlagValue)((0, actions_util_1.getOptionalInput)("ram")).toString());
|
||||||
core.exportVariable("CODEQL_THREADS", (0, util_1.getThreadsFlagValue)((0, actions_util_1.getOptionalInput)("threads"), logger).toString());
|
core.exportVariable("CODEQL_THREADS", (0, util_1.getThreadsFlagValue)((0, actions_util_1.getOptionalInput)("threads"), logger).toString());
|
||||||
const sourceRoot = path.resolve((0, util_1.getRequiredEnvParam)("GITHUB_WORKSPACE"), (0, actions_util_1.getOptionalInput)("source-root") || "");
|
const sourceRoot = path.resolve((0, util_1.getRequiredEnvParam)("GITHUB_WORKSPACE"), (0, actions_util_1.getOptionalInput)("source-root") || "");
|
||||||
const tracerConfig = await (0, init_1.runInit)(codeql, config, sourceRoot, "Runner.Worker.exe", undefined, features, logger);
|
const tracerConfig = await (0, init_1.runInit)(codeql, config, sourceRoot, "Runner.Worker.exe", features, logger);
|
||||||
if (tracerConfig !== undefined) {
|
if (tracerConfig !== undefined) {
|
||||||
for (const [key, value] of Object.entries(tracerConfig.env)) {
|
for (const [key, value] of Object.entries(tracerConfig.env)) {
|
||||||
core.exportVariable(key, value);
|
core.exportVariable(key, value);
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
4
lib/init.js
generated
4
lib/init.js
generated
|
|
@ -46,12 +46,12 @@ async function initConfig(languagesInput, queriesInput, packsInput, registriesIn
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
exports.initConfig = initConfig;
|
exports.initConfig = initConfig;
|
||||||
async function runInit(codeql, config, sourceRoot, processName, processLevel, featureEnablement, logger) {
|
async function runInit(codeql, config, sourceRoot, processName, featureEnablement, logger) {
|
||||||
fs.mkdirSync(config.dbLocation, { recursive: true });
|
fs.mkdirSync(config.dbLocation, { recursive: true });
|
||||||
try {
|
try {
|
||||||
if (await (0, util_1.codeQlVersionAbove)(codeql, codeql_1.CODEQL_VERSION_NEW_TRACING)) {
|
if (await (0, util_1.codeQlVersionAbove)(codeql, codeql_1.CODEQL_VERSION_NEW_TRACING)) {
|
||||||
// Init a database cluster
|
// Init a database cluster
|
||||||
await codeql.databaseInitCluster(config, sourceRoot, processName, processLevel, featureEnablement, logger);
|
await codeql.databaseInitCluster(config, sourceRoot, processName, featureEnablement, logger);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (const language of config.languages) {
|
for (const language of config.languages) {
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,yEAA2D;AAC3D,kEAAoD;AAEpD,gEAAkD;AAElD,qCAA2E;AAC3E,4DAA8C;AAI9C,mDAAwE;AACxE,6CAA+B;AAC/B,iCAA4C;AAErC,KAAK,UAAU,UAAU,CAC9B,SAA6B,EAC7B,UAA4B,EAC5B,OAAe,EACf,OAA2B,EAC3B,iBAAoC,EACpC,MAAc;IAEd,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACxC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,oBAAW,EAChD,SAAS,EACT,UAAU,EACV,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,MAAM,EACN,IAAI,CACL,CAAC;IACF,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;IAC5B,MAAM,CAAC,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAClC,CAAC;AArBD,gCAqBC;AAEM,KAAK,UAAU,UAAU,CAC9B,cAAkC,EAClC,YAAgC,EAChC,UAA8B,EAC9B,eAAmC,EACnC,UAA8B,EAC9B,UAA8B,EAC9B,kBAA2B,EAC3B,SAAkB,EAClB,iBAAyB,EACzB,iBAAyB,EACzB,UAAyB,EACzB,OAAe,EACf,MAAc,EACd,aAAqB,EACrB,aAAiC,EACjC,UAAoC,EACpC,iBAAoC,EACpC,MAAc;IAEd,MAAM,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,UAAU,CACzC,cAAc,EACd,YAAY,EACZ,UAAU,EACV,eAAe,EACf,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,OAAO,EACP,MAAM,EACN,aAAa,EACb,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,MAAM,CACP,CAAC;IACF,aAAa,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,CAAC,QAAQ,EAAE,CAAC;IAClB,OAAO,MAAM,CAAC;AAChB,CAAC;AA5CD,gCA4CC;AAEM,KAAK,UAAU,OAAO,CAC3B,MAAc,EACd,MAA0B,EAC1B,UAAkB,EAClB,WAA+B,EAC/B,iBAAoC,EACpC,MAAc;IAEd,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAErD,IAAI;QACF,IAAI,MAAM,IAAA,yBAAkB,EAAC,MAAM,EAAE,mCAA0B,CAAC,EAAE;YAChE,0BAA0B;YAC1B,MAAM,MAAM,CAAC,mBAAmB,CAC9B,MAAM,EACN,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,MAAM,CACP,CAAC;SACH;aAAM;YACL,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE;gBACvC,yBAAyB;gBACzB,MAAM,MAAM,CAAC,YAAY,CACvB,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC5C,QAAQ,EACR,UAAU,CACX,CAAC;aACH;SACF;KACF;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC;KACvB;IACD,OAAO,MAAM,IAAA,uCAAuB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACvD,CAAC;AAlCD,0BAkCC;AAED;;;;;;;;GAQG;AACH,SAAS,YAAY,CAAC,CAAM;;IAC1B,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,EAAE;QACzB,OAAO,CAAC,CAAC;KACV;IAED;IACE,2BAA2B;IAC3B,CAAA,MAAA,CAAC,CAAC,OAAO,0CAAE,QAAQ,CAAC,8BAA8B,CAAC;SACnD,MAAA,CAAC,CAAC,OAAO,0CAAE,QAAQ,CAAC,uCAAuC,CAAC,CAAA,EAC5D;QACA,OAAO,IAAI,IAAI,CAAC,SAAS,CACvB,sDAAsD,CAAC,CAAC,OAAO,EAAE,CAClE,CAAC;KACH;IAED;IACE,+EAA+E;IAC/E,CAAA,MAAA,CAAC,CAAC,OAAO,0CAAE,QAAQ,CAAC,wCAAwC,CAAC;;QAC7D,gEAAgE;QAChE,MAAA,CAAC,CAAC,OAAO,0CAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAA,EAC1C;QACA,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;KACtC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED,sEAAsE;AACtE,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,+CAA+C;AACxC,KAAK,UAAU,mBAAmB,CACvC,WAA+B,EAC/B,YAAgC,EAChC,MAA0B,EAC1B,MAAc,EACd,YAA0B;IAE1B,IAAI,MAAc,CAAC;IACnB,IAAI,WAAW,KAAK,SAAS,EAAE;QAC7B,MAAM,GAAG;;;;;;;;;;;;uCAY0B,WAAW;;8BAEpB,WAAW;;;;;;;;gDAQO,CAAC;KAC9C;SAAM;QACL,oEAAoE;QACpE,mFAAmF;QACnF,+EAA+E;QAC/E,kFAAkF;QAClF,6EAA6E;QAC7E,oFAAoF;QACpF,6CAA6C;QAC7C,YAAY,GAAG,YAAY,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG;;;;;;;;4BAQe,YAAY;;;;;;;;;;;;;;;;;;;;;gDAqBQ,CAAC;KAC9C;IAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IACxE,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAE3C,MAAM,IAAI,UAAU,CAAC,UAAU,CAC7B,MAAM,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,EACvC;QACE,kBAAkB;QAClB,QAAQ;QACR,OAAO;QACP,gBAAgB;QAChB,IAAI,CAAC,OAAO,CACV,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAC9B,OAAO,EACP,OAAO,EACP,YAAY,CACb;KACF,EACD,EAAE,GAAG,EAAE,EAAE,0BAA0B,EAAE,YAAY,CAAC,IAAI,EAAE,EAAE,CAC3D,CAAC,IAAI,EAAE,CAAC;AACX,CAAC;AA5FD,kDA4FC;AAEM,KAAK,UAAU,iBAAiB,CAAC,MAAc,EAAE,MAAc;IACpE,MAAM,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;IAE/C,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAEjE,IAAI;QACF,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;YAChC,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE;gBACvE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,mBAAmB,CAAC;aAC9C,CAAC,CAAC,IAAI,EAAE,CAAC;SACX;aAAM;YACL,MAAM,IAAI,UAAU,CAAC,UAAU,CAC7B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAC7C,CAAC,IAAI,EAAE,CAAC;SACV;QACD,MAAM,MAAM,GAAG,0BAA0B,CAAC;QAC1C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;YAChC,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBAC/D,IAAI;gBACJ,IAAI;gBACJ,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;aAC/B,CAAC,CAAC,IAAI,EAAE,CAAC;SACX;aAAM;YACL,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;gBACpE,IAAI;gBACJ,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;aAC/B,CAAC,CAAC,IAAI,EAAE,CAAC;SACX;KACF;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,CAAC,OAAO,CACZ,gFAAgF,CAAC,IAAI;YACnF,qGAAqG;YACrG,oGAAoG;YACpG,iDAAiD,CACpD,CAAC;QACF,OAAO;KACR;IACD,MAAM,CAAC,QAAQ,EAAE,CAAC;AACpB,CAAC;AAzCD,8CAyCC"}
|
||||||
152
lib/upload-lib.js
generated
152
lib/upload-lib.js
generated
|
|
@ -22,7 +22,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.pruneInvalidResults = exports.validateUniqueCategory = exports.waitForProcessing = exports.buildPayload = exports.validateSarifFileSchema = exports.countResultsInSarif = exports.uploadFromRunner = exports.uploadFromActions = exports.findSarifFilesInDir = exports.populateRunAutomationDetails = exports.combineSarifFiles = void 0;
|
exports.pruneInvalidResults = exports.validateUniqueCategory = exports.waitForProcessing = exports.buildPayload = exports.validateSarifFileSchema = exports.countResultsInSarif = exports.uploadFromActions = exports.findSarifFilesInDir = exports.populateRunAutomationDetails = exports.combineSarifFiles = void 0;
|
||||||
const fs = __importStar(require("fs"));
|
const fs = __importStar(require("fs"));
|
||||||
const path = __importStar(require("path"));
|
const path = __importStar(require("path"));
|
||||||
const process_1 = require("process");
|
const process_1 = require("process");
|
||||||
|
|
@ -83,15 +83,11 @@ function getAutomationID(category, analysis_key, environment) {
|
||||||
}
|
}
|
||||||
return automationID;
|
return automationID;
|
||||||
}
|
}
|
||||||
// analysis_key is undefined for the runner.
|
return actionsUtil.computeAutomationID(analysis_key, environment);
|
||||||
if (analysis_key !== undefined) {
|
|
||||||
return actionsUtil.computeAutomationID(analysis_key, environment);
|
|
||||||
}
|
|
||||||
return undefined;
|
|
||||||
}
|
}
|
||||||
// Upload the given payload.
|
// Upload the given payload.
|
||||||
// If the request fails then this will retry a small number of times.
|
// If the request fails then this will retry a small number of times.
|
||||||
async function uploadPayload(payload, repositoryNwo, apiDetails, logger) {
|
async function uploadPayload(payload, repositoryNwo, logger) {
|
||||||
logger.info("Uploading results");
|
logger.info("Uploading results");
|
||||||
// If in test mode we don't want to upload the results
|
// If in test mode we don't want to upload the results
|
||||||
if (util.isInTestMode()) {
|
if (util.isInTestMode()) {
|
||||||
|
|
@ -101,11 +97,8 @@ async function uploadPayload(payload, repositoryNwo, apiDetails, logger) {
|
||||||
fs.writeFileSync(payloadSaveFile, JSON.stringify(payload, null, 2));
|
fs.writeFileSync(payloadSaveFile, JSON.stringify(payload, null, 2));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const client = api.getApiClient(apiDetails);
|
const client = api.getApiClient();
|
||||||
const reqURL = util.isActions()
|
const response = await client.request("PUT /repos/:owner/:repo/code-scanning/analysis", {
|
||||||
? "PUT /repos/:owner/:repo/code-scanning/analysis"
|
|
||||||
: "POST /repos/:owner/:repo/code-scanning/sarifs";
|
|
||||||
const response = await client.request(reqURL, {
|
|
||||||
owner: repositoryNwo.owner,
|
owner: repositoryNwo.owner,
|
||||||
repo: repositoryNwo.repo,
|
repo: repositoryNwo.repo,
|
||||||
data: payload,
|
data: payload,
|
||||||
|
|
@ -136,17 +129,10 @@ exports.findSarifFilesInDir = findSarifFilesInDir;
|
||||||
// Uploads a single sarif file or a directory of sarif files
|
// Uploads a single sarif file or a directory of sarif files
|
||||||
// depending on what the path happens to refer to.
|
// depending on what the path happens to refer to.
|
||||||
// Returns true iff the upload occurred and succeeded
|
// Returns true iff the upload occurred and succeeded
|
||||||
async function uploadFromActions(sarifPath, gitHubVersion, apiDetails, logger) {
|
async function uploadFromActions(sarifPath, gitHubVersion, logger) {
|
||||||
return await uploadFiles(getSarifFilePaths(sarifPath), (0, repository_1.parseRepositoryNwo)(util.getRequiredEnvParam("GITHUB_REPOSITORY")), await actionsUtil.getCommitOid(actionsUtil.getRequiredInput("checkout_path")), await actionsUtil.getRef(), await actionsUtil.getAnalysisKey(), actionsUtil.getOptionalInput("category"), util.getRequiredEnvParam("GITHUB_WORKFLOW"), actionsUtil.getWorkflowRunID(), actionsUtil.getRequiredInput("checkout_path"), actionsUtil.getRequiredInput("matrix"), gitHubVersion, apiDetails, logger);
|
return await uploadFiles(getSarifFilePaths(sarifPath), (0, repository_1.parseRepositoryNwo)(util.getRequiredEnvParam("GITHUB_REPOSITORY")), await actionsUtil.getCommitOid(actionsUtil.getRequiredInput("checkout_path")), await actionsUtil.getRef(), await actionsUtil.getAnalysisKey(), actionsUtil.getOptionalInput("category"), util.getRequiredEnvParam("GITHUB_WORKFLOW"), actionsUtil.getWorkflowRunID(), actionsUtil.getRequiredInput("checkout_path"), actionsUtil.getRequiredInput("matrix"), gitHubVersion, logger);
|
||||||
}
|
}
|
||||||
exports.uploadFromActions = uploadFromActions;
|
exports.uploadFromActions = uploadFromActions;
|
||||||
// Uploads a single sarif file or a directory of sarif files
|
|
||||||
// depending on what the path happens to refer to.
|
|
||||||
// Returns true iff the upload occurred and succeeded
|
|
||||||
async function uploadFromRunner(sarifPath, repositoryNwo, commitOid, ref, category, sourceRoot, gitHubVersion, apiDetails, logger) {
|
|
||||||
return await uploadFiles(getSarifFilePaths(sarifPath), repositoryNwo, commitOid, ref, undefined, category, undefined, undefined, sourceRoot, undefined, gitHubVersion, apiDetails, logger);
|
|
||||||
}
|
|
||||||
exports.uploadFromRunner = uploadFromRunner;
|
|
||||||
function getSarifFilePaths(sarifPath) {
|
function getSarifFilePaths(sarifPath) {
|
||||||
if (!fs.existsSync(sarifPath)) {
|
if (!fs.existsSync(sarifPath)) {
|
||||||
throw new Error(`Path does not exist: ${sarifPath}`);
|
throw new Error(`Path does not exist: ${sarifPath}`);
|
||||||
|
|
@ -208,59 +194,48 @@ exports.validateSarifFileSchema = validateSarifFileSchema;
|
||||||
// buildPayload constructs a map ready to be uploaded to the API from the given
|
// buildPayload constructs a map ready to be uploaded to the API from the given
|
||||||
// parameters, respecting the current mode and target GitHub instance version.
|
// parameters, respecting the current mode and target GitHub instance version.
|
||||||
function buildPayload(commitOid, ref, analysisKey, analysisName, zippedSarif, workflowRunID, checkoutURI, environment, toolNames, gitHubVersion, mergeBaseCommitOid) {
|
function buildPayload(commitOid, ref, analysisKey, analysisName, zippedSarif, workflowRunID, checkoutURI, environment, toolNames, gitHubVersion, mergeBaseCommitOid) {
|
||||||
if (util.isActions()) {
|
const payloadObj = {
|
||||||
const payloadObj = {
|
commit_oid: commitOid,
|
||||||
commit_oid: commitOid,
|
ref,
|
||||||
ref,
|
analysis_key: analysisKey,
|
||||||
analysis_key: analysisKey,
|
analysis_name: analysisName,
|
||||||
analysis_name: analysisName,
|
sarif: zippedSarif,
|
||||||
sarif: zippedSarif,
|
workflow_run_id: workflowRunID,
|
||||||
workflow_run_id: workflowRunID,
|
checkout_uri: checkoutURI,
|
||||||
checkout_uri: checkoutURI,
|
environment,
|
||||||
environment,
|
started_at: process.env[sharedEnv.CODEQL_WORKFLOW_STARTED_AT],
|
||||||
started_at: process.env[sharedEnv.CODEQL_WORKFLOW_STARTED_AT],
|
tool_names: toolNames,
|
||||||
tool_names: toolNames,
|
base_ref: undefined,
|
||||||
base_ref: undefined,
|
base_sha: undefined,
|
||||||
base_sha: undefined,
|
};
|
||||||
};
|
// This behaviour can be made the default when support for GHES 3.0 is discontinued.
|
||||||
// This behaviour can be made the default when support for GHES 3.0 is discontinued.
|
if (gitHubVersion.type !== util.GitHubVariant.GHES ||
|
||||||
if (gitHubVersion.type !== util.GitHubVariant.GHES ||
|
semver.satisfies(gitHubVersion.version, `>=3.1`)) {
|
||||||
semver.satisfies(gitHubVersion.version, `>=3.1`)) {
|
if (actionsUtil.workflowEventName() === "pull_request") {
|
||||||
if (actionsUtil.workflowEventName() === "pull_request") {
|
if (commitOid === util.getRequiredEnvParam("GITHUB_SHA") &&
|
||||||
if (commitOid === util.getRequiredEnvParam("GITHUB_SHA") &&
|
mergeBaseCommitOid) {
|
||||||
mergeBaseCommitOid) {
|
// We're uploading results for the merge commit
|
||||||
// We're uploading results for the merge commit
|
// and were able to determine the merge base.
|
||||||
// and were able to determine the merge base.
|
// So we use that as the most accurate base.
|
||||||
// So we use that as the most accurate base.
|
payloadObj.base_ref = `refs/heads/${util.getRequiredEnvParam("GITHUB_BASE_REF")}`;
|
||||||
payloadObj.base_ref = `refs/heads/${util.getRequiredEnvParam("GITHUB_BASE_REF")}`;
|
payloadObj.base_sha = mergeBaseCommitOid;
|
||||||
payloadObj.base_sha = mergeBaseCommitOid;
|
}
|
||||||
}
|
else if (process.env.GITHUB_EVENT_PATH) {
|
||||||
else if (process.env.GITHUB_EVENT_PATH) {
|
// Either we're not uploading results for the merge commit
|
||||||
// Either we're not uploading results for the merge commit
|
// or we could not determine the merge base.
|
||||||
// or we could not determine the merge base.
|
// Using the PR base is the only option here
|
||||||
// Using the PR base is the only option here
|
const githubEvent = JSON.parse(fs.readFileSync(process.env.GITHUB_EVENT_PATH, "utf8"));
|
||||||
const githubEvent = JSON.parse(fs.readFileSync(process.env.GITHUB_EVENT_PATH, "utf8"));
|
payloadObj.base_ref = `refs/heads/${githubEvent.pull_request.base.ref}`;
|
||||||
payloadObj.base_ref = `refs/heads/${githubEvent.pull_request.base.ref}`;
|
payloadObj.base_sha = githubEvent.pull_request.base.sha;
|
||||||
payloadObj.base_sha = githubEvent.pull_request.base.sha;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return payloadObj;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return {
|
|
||||||
commit_sha: commitOid,
|
|
||||||
ref,
|
|
||||||
sarif: zippedSarif,
|
|
||||||
checkout_uri: checkoutURI,
|
|
||||||
tool_name: toolNames[0],
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
return payloadObj;
|
||||||
}
|
}
|
||||||
exports.buildPayload = buildPayload;
|
exports.buildPayload = buildPayload;
|
||||||
// Uploads the given set of sarif files.
|
// Uploads the given set of sarif files.
|
||||||
// Returns true iff the upload occurred and succeeded
|
// Returns true iff the upload occurred and succeeded
|
||||||
async function uploadFiles(sarifFiles, repositoryNwo, commitOid, ref, analysisKey, category, analysisName, workflowRunID, sourceRoot, environment, gitHubVersion, apiDetails, logger) {
|
async function uploadFiles(sarifFiles, repositoryNwo, commitOid, ref, analysisKey, category, analysisName, workflowRunID, sourceRoot, environment, gitHubVersion, logger) {
|
||||||
logger.startGroup("Uploading results");
|
logger.startGroup("Uploading results");
|
||||||
logger.info(`Processing sarif files: ${JSON.stringify(sarifFiles)}`);
|
logger.info(`Processing sarif files: ${JSON.stringify(sarifFiles)}`);
|
||||||
// Validate that the files we were asked to upload are all valid SARIF files
|
// Validate that the files we were asked to upload are all valid SARIF files
|
||||||
|
|
@ -286,7 +261,7 @@ async function uploadFiles(sarifFiles, repositoryNwo, commitOid, ref, analysisKe
|
||||||
const numResultInSarif = countResultsInSarif(sarifPayload);
|
const numResultInSarif = countResultsInSarif(sarifPayload);
|
||||||
logger.debug(`Number of results in upload: ${numResultInSarif}`);
|
logger.debug(`Number of results in upload: ${numResultInSarif}`);
|
||||||
// Make the upload
|
// Make the upload
|
||||||
const sarifID = await uploadPayload(payload, repositoryNwo, apiDetails, logger);
|
const sarifID = await uploadPayload(payload, repositoryNwo, logger);
|
||||||
logger.endGroup();
|
logger.endGroup();
|
||||||
return {
|
return {
|
||||||
statusReport: {
|
statusReport: {
|
||||||
|
|
@ -300,9 +275,9 @@ async function uploadFiles(sarifFiles, repositoryNwo, commitOid, ref, analysisKe
|
||||||
const STATUS_CHECK_FREQUENCY_MILLISECONDS = 5 * 1000;
|
const STATUS_CHECK_FREQUENCY_MILLISECONDS = 5 * 1000;
|
||||||
const STATUS_CHECK_TIMEOUT_MILLISECONDS = 2 * 60 * 1000;
|
const STATUS_CHECK_TIMEOUT_MILLISECONDS = 2 * 60 * 1000;
|
||||||
// Waits until either the analysis is successfully processed, a processing error is reported, or STATUS_CHECK_TIMEOUT_MILLISECONDS elapses.
|
// Waits until either the analysis is successfully processed, a processing error is reported, or STATUS_CHECK_TIMEOUT_MILLISECONDS elapses.
|
||||||
async function waitForProcessing(repositoryNwo, sarifID, apiDetails, logger) {
|
async function waitForProcessing(repositoryNwo, sarifID, logger) {
|
||||||
logger.startGroup("Waiting for processing to finish");
|
logger.startGroup("Waiting for processing to finish");
|
||||||
const client = api.getApiClient(apiDetails);
|
const client = api.getApiClient();
|
||||||
const statusCheckingStarted = Date.now();
|
const statusCheckingStarted = Date.now();
|
||||||
// eslint-disable-next-line no-constant-condition
|
// eslint-disable-next-line no-constant-condition
|
||||||
while (true) {
|
while (true) {
|
||||||
|
|
@ -343,27 +318,24 @@ async function waitForProcessing(repositoryNwo, sarifID, apiDetails, logger) {
|
||||||
exports.waitForProcessing = waitForProcessing;
|
exports.waitForProcessing = waitForProcessing;
|
||||||
function validateUniqueCategory(sarif) {
|
function validateUniqueCategory(sarif) {
|
||||||
var _a, _b, _c;
|
var _a, _b, _c;
|
||||||
// This check only works on actions as env vars don't persist between calls to the runner
|
// duplicate categories are allowed in the same sarif file
|
||||||
if (util.isActions()) {
|
// but not across multiple sarif files
|
||||||
// duplicate categories are allowed in the same sarif file
|
const categories = {};
|
||||||
// but not across multiple sarif files
|
for (const run of sarif.runs) {
|
||||||
const categories = {};
|
const id = (_a = run === null || run === void 0 ? void 0 : run.automationDetails) === null || _a === void 0 ? void 0 : _a.id;
|
||||||
for (const run of sarif.runs) {
|
const tool = (_c = (_b = run.tool) === null || _b === void 0 ? void 0 : _b.driver) === null || _c === void 0 ? void 0 : _c.name;
|
||||||
const id = (_a = run === null || run === void 0 ? void 0 : run.automationDetails) === null || _a === void 0 ? void 0 : _a.id;
|
const category = `${sanitize(id)}_${sanitize(tool)}`;
|
||||||
const tool = (_c = (_b = run.tool) === null || _b === void 0 ? void 0 : _b.driver) === null || _c === void 0 ? void 0 : _c.name;
|
categories[category] = { id, tool };
|
||||||
const category = `${sanitize(id)}_${sanitize(tool)}`;
|
}
|
||||||
categories[category] = { id, tool };
|
for (const [category, { id, tool }] of Object.entries(categories)) {
|
||||||
}
|
const sentinelEnvVar = `CODEQL_UPLOAD_SARIF_${category}`;
|
||||||
for (const [category, { id, tool }] of Object.entries(categories)) {
|
if (process.env[sentinelEnvVar]) {
|
||||||
const sentinelEnvVar = `CODEQL_UPLOAD_SARIF_${category}`;
|
throw new Error("Aborting upload: only one run of the codeql/analyze or codeql/upload-sarif actions is allowed per job per tool/category. " +
|
||||||
if (process.env[sentinelEnvVar]) {
|
"The easiest fix is to specify a unique value for the `category` input. If .runs[].automationDetails.id is specified " +
|
||||||
throw new Error("Aborting upload: only one run of the codeql/analyze or codeql/upload-sarif actions is allowed per job per tool/category. " +
|
"in the sarif file, that will take precedence over your configured `category`. " +
|
||||||
"The easiest fix is to specify a unique value for the `category` input. If .runs[].automationDetails.id is specified " +
|
`Category: (${id ? id : "none"}) Tool: (${tool ? tool : "none"})`);
|
||||||
"in the sarif file, that will take precedence over your configured `category`. " +
|
|
||||||
`Category: (${id ? id : "none"}) Tool: (${tool ? tool : "none"})`);
|
|
||||||
}
|
|
||||||
core.exportVariable(sentinelEnvVar, sentinelEnvVar);
|
|
||||||
}
|
}
|
||||||
|
core.exportVariable(sentinelEnvVar, sentinelEnvVar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
exports.validateUniqueCategory = validateUniqueCategory;
|
exports.validateUniqueCategory = validateUniqueCategory;
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
2
lib/upload-lib.test.js
generated
2
lib/upload-lib.test.js
generated
|
|
@ -32,7 +32,7 @@ const upload_lib_1 = require("./upload-lib");
|
||||||
const util_1 = require("./util");
|
const util_1 = require("./util");
|
||||||
(0, testing_utils_1.setupTests)(ava_1.default);
|
(0, testing_utils_1.setupTests)(ava_1.default);
|
||||||
ava_1.default.beforeEach(() => {
|
ava_1.default.beforeEach(() => {
|
||||||
(0, util_1.initializeEnvironment)(util_1.Mode.actions, "1.2.3");
|
(0, util_1.initializeEnvironment)("1.2.3");
|
||||||
});
|
});
|
||||||
(0, ava_1.default)("validateSarifFileSchema - valid", (t) => {
|
(0, ava_1.default)("validateSarifFileSchema - valid", (t) => {
|
||||||
const inputFile = `${__dirname}/../src/testdata/valid-sarif.sarif`;
|
const inputFile = `${__dirname}/../src/testdata/valid-sarif.sarif`;
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
9
lib/upload-sarif-action.js
generated
9
lib/upload-sarif-action.js
generated
|
|
@ -38,22 +38,21 @@ async function sendSuccessStatusReport(startedAt, uploadStats) {
|
||||||
}
|
}
|
||||||
async function run() {
|
async function run() {
|
||||||
const startedAt = new Date();
|
const startedAt = new Date();
|
||||||
(0, util_1.initializeEnvironment)(util_1.Mode.actions, pkg.version);
|
(0, util_1.initializeEnvironment)(pkg.version);
|
||||||
await (0, util_1.checkActionVersion)(pkg.version);
|
await (0, util_1.checkActionVersion)(pkg.version);
|
||||||
if (!(await actionsUtil.sendStatusReport(await actionsUtil.createStatusReportBase("upload-sarif", "starting", startedAt)))) {
|
if (!(await actionsUtil.sendStatusReport(await actionsUtil.createStatusReportBase("upload-sarif", "starting", startedAt)))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const apiDetails = (0, api_client_1.getApiDetails)();
|
const gitHubVersion = await (0, api_client_1.getGitHubVersion)();
|
||||||
const gitHubVersion = await (0, api_client_1.getGitHubVersionActionsOnly)();
|
const uploadResult = await upload_lib.uploadFromActions(actionsUtil.getRequiredInput("sarif_file"), gitHubVersion, (0, logging_1.getActionsLogger)());
|
||||||
const uploadResult = await upload_lib.uploadFromActions(actionsUtil.getRequiredInput("sarif_file"), gitHubVersion, apiDetails, (0, logging_1.getActionsLogger)());
|
|
||||||
core.setOutput("sarif-id", uploadResult.sarifID);
|
core.setOutput("sarif-id", uploadResult.sarifID);
|
||||||
// We don't upload results in test mode, so don't wait for processing
|
// We don't upload results in test mode, so don't wait for processing
|
||||||
if ((0, util_1.isInTestMode)()) {
|
if ((0, util_1.isInTestMode)()) {
|
||||||
core.debug("In test mode. Waiting for processing is disabled.");
|
core.debug("In test mode. Waiting for processing is disabled.");
|
||||||
}
|
}
|
||||||
else if (actionsUtil.getRequiredInput("wait-for-processing") === "true") {
|
else if (actionsUtil.getRequiredInput("wait-for-processing") === "true") {
|
||||||
await upload_lib.waitForProcessing((0, repository_1.parseRepositoryNwo)((0, util_1.getRequiredEnvParam)("GITHUB_REPOSITORY")), uploadResult.sarifID, apiDetails, (0, logging_1.getActionsLogger)());
|
await upload_lib.waitForProcessing((0, repository_1.parseRepositoryNwo)((0, util_1.getRequiredEnvParam)("GITHUB_REPOSITORY")), uploadResult.sarifID, (0, logging_1.getActionsLogger)());
|
||||||
}
|
}
|
||||||
await sendSuccessStatusReport(startedAt, uploadResult.statusReport);
|
await sendSuccessStatusReport(startedAt, uploadResult.statusReport);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"upload-sarif-action.js","sourceRoot":"","sources":["../src/upload-sarif-action.ts"],"names":[],"mappings":"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"}
|
{"version":3,"file":"upload-sarif-action.js","sourceRoot":"","sources":["../src/upload-sarif-action.ts"],"names":[],"mappings":"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"}
|
||||||
121
lib/util.js
generated
121
lib/util.js
generated
|
|
@ -22,7 +22,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.isHostedRunner = exports.checkForTimeout = exports.withTimeout = exports.tryGetFolderBytes = exports.listFolder = exports.doesDirectoryExist = exports.logCodeScanningConfigInCli = exports.useCodeScanningConfigInCli = exports.isInTestMode = exports.checkActionVersion = exports.getMlPoweredJsQueriesStatus = exports.getMlPoweredJsQueriesPack = exports.ML_POWERED_JS_QUERIES_PACK_NAME = exports.isGoodVersion = exports.delay = exports.bundleDb = exports.codeQlVersionAbove = exports.getCachedCodeQlVersion = exports.cacheCodeQlVersion = exports.isHTTPError = exports.UserError = exports.HTTPError = exports.getRequiredEnvParam = exports.isActions = exports.getMode = exports.enrichEnvironment = exports.initializeEnvironment = exports.EnvVar = exports.Mode = exports.assertNever = exports.getGitHubAuth = exports.apiVersionInRange = exports.DisallowedAPIVersionReason = exports.checkGitHubVersionInRange = exports.getGitHubVersion = exports.GitHubVariant = exports.parseGitHubUrl = exports.getCodeQLDatabasePath = exports.getThreadsFlag = exports.getThreadsFlagValue = exports.getAddSnippetsFlag = exports.getMemoryFlag = exports.getMemoryFlagValue = exports.withTmpDir = exports.getToolNames = exports.getExtraOptionsEnvParam = exports.DID_AUTOBUILD_GO_ENV_VAR_NAME = exports.DEFAULT_DEBUG_DATABASE_NAME = exports.DEFAULT_DEBUG_ARTIFACT_NAME = exports.GITHUB_DOTCOM_URL = void 0;
|
exports.isHostedRunner = exports.checkForTimeout = exports.withTimeout = exports.tryGetFolderBytes = exports.listFolder = exports.doesDirectoryExist = exports.logCodeScanningConfigInCli = exports.useCodeScanningConfigInCli = exports.isInTestMode = exports.checkActionVersion = exports.getMlPoweredJsQueriesStatus = exports.getMlPoweredJsQueriesPack = exports.ML_POWERED_JS_QUERIES_PACK_NAME = exports.isGoodVersion = exports.delay = exports.bundleDb = exports.codeQlVersionAbove = exports.getCachedCodeQlVersion = exports.cacheCodeQlVersion = exports.isHTTPError = exports.UserError = exports.HTTPError = exports.getRequiredEnvParam = exports.enrichEnvironment = exports.initializeEnvironment = exports.EnvVar = exports.assertNever = exports.apiVersionInRange = exports.DisallowedAPIVersionReason = exports.checkGitHubVersionInRange = exports.getGitHubVersion = exports.GitHubVariant = exports.parseGitHubUrl = exports.getCodeQLDatabasePath = exports.getThreadsFlag = exports.getThreadsFlagValue = exports.getAddSnippetsFlag = exports.getMemoryFlag = exports.getMemoryFlagValue = exports.withTmpDir = exports.getToolNames = exports.getExtraOptionsEnvParam = exports.DID_AUTOBUILD_GO_ENV_VAR_NAME = exports.DEFAULT_DEBUG_DATABASE_NAME = exports.DEFAULT_DEBUG_ARTIFACT_NAME = exports.GITHUB_DOTCOM_URL = void 0;
|
||||||
const fs = __importStar(require("fs"));
|
const fs = __importStar(require("fs"));
|
||||||
const os = __importStar(require("os"));
|
const os = __importStar(require("os"));
|
||||||
const path = __importStar(require("path"));
|
const path = __importStar(require("path"));
|
||||||
|
|
@ -269,7 +269,7 @@ async function getGitHubVersion(apiDetails) {
|
||||||
}
|
}
|
||||||
// Doesn't strictly have to be the meta endpoint as we're only
|
// Doesn't strictly have to be the meta endpoint as we're only
|
||||||
// using the response headers which are available on every request.
|
// using the response headers which are available on every request.
|
||||||
const apiClient = (0, api_client_1.getApiClient)(apiDetails);
|
const apiClient = (0, api_client_1.getApiClient)();
|
||||||
const response = await apiClient.meta.get();
|
const response = await apiClient.meta.get();
|
||||||
// This happens on dotcom, although we expect to have already returned in that
|
// This happens on dotcom, although we expect to have already returned in that
|
||||||
// case. This can also serve as a fallback in cases we haven't foreseen.
|
// case. This can also serve as a fallback in cases we haven't foreseen.
|
||||||
|
|
@ -283,21 +283,19 @@ async function getGitHubVersion(apiDetails) {
|
||||||
return { type: GitHubVariant.GHES, version };
|
return { type: GitHubVariant.GHES, version };
|
||||||
}
|
}
|
||||||
exports.getGitHubVersion = getGitHubVersion;
|
exports.getGitHubVersion = getGitHubVersion;
|
||||||
function checkGitHubVersionInRange(version, logger, toolName) {
|
function checkGitHubVersionInRange(version, logger) {
|
||||||
if (hasBeenWarnedAboutVersion || version.type !== GitHubVariant.GHES) {
|
if (hasBeenWarnedAboutVersion || version.type !== GitHubVariant.GHES) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const disallowedAPIVersionReason = apiVersionInRange(version.version, apiCompatibility.minimumVersion, apiCompatibility.maximumVersion);
|
const disallowedAPIVersionReason = apiVersionInRange(version.version, apiCompatibility.minimumVersion, apiCompatibility.maximumVersion);
|
||||||
if (disallowedAPIVersionReason === DisallowedAPIVersionReason.ACTION_TOO_OLD) {
|
if (disallowedAPIVersionReason === DisallowedAPIVersionReason.ACTION_TOO_OLD) {
|
||||||
logger.warning(`The CodeQL ${toolName} version you are using is too old to be compatible with GitHub Enterprise ${version.version}. If you experience issues, please upgrade to a more recent version of the CodeQL ${toolName}.`);
|
logger.warning(`The CodeQL Action version you are using is too old to be compatible with GitHub Enterprise ${version.version}. If you experience issues, please upgrade to a more recent version of the CodeQL Action.`);
|
||||||
}
|
}
|
||||||
if (disallowedAPIVersionReason === DisallowedAPIVersionReason.ACTION_TOO_NEW) {
|
if (disallowedAPIVersionReason === DisallowedAPIVersionReason.ACTION_TOO_NEW) {
|
||||||
logger.warning(`GitHub Enterprise ${version.version} is too old to be compatible with this version of the CodeQL ${toolName}. If you experience issues, please upgrade to a more recent version of GitHub Enterprise or use an older version of the CodeQL ${toolName}.`);
|
logger.warning(`GitHub Enterprise ${version.version} is too old to be compatible with this version of the CodeQL Action. If you experience issues, please upgrade to a more recent version of GitHub Enterprise or use an older version of the CodeQL Action.`);
|
||||||
}
|
}
|
||||||
hasBeenWarnedAboutVersion = true;
|
hasBeenWarnedAboutVersion = true;
|
||||||
if (isActions()) {
|
core.exportVariable(CODEQL_ACTION_WARNED_ABOUT_VERSION_ENV_VAR, true);
|
||||||
core.exportVariable(CODEQL_ACTION_WARNED_ABOUT_VERSION_ENV_VAR, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
exports.checkGitHubVersionInRange = checkGitHubVersionInRange;
|
exports.checkGitHubVersionInRange = checkGitHubVersionInRange;
|
||||||
var DisallowedAPIVersionReason;
|
var DisallowedAPIVersionReason;
|
||||||
|
|
@ -315,57 +313,6 @@ function apiVersionInRange(version, minimumVersion, maximumVersion) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
exports.apiVersionInRange = apiVersionInRange;
|
exports.apiVersionInRange = apiVersionInRange;
|
||||||
/**
|
|
||||||
* Retrieves the github auth token for use with the runner. There are
|
|
||||||
* three possible locations for the token:
|
|
||||||
*
|
|
||||||
* 1. from the cli (considered insecure)
|
|
||||||
* 2. from stdin
|
|
||||||
* 3. from the GITHUB_TOKEN environment variable
|
|
||||||
*
|
|
||||||
* If both 1 & 2 are specified, then an error is thrown.
|
|
||||||
* If 1 & 3 or 2 & 3 are specified, then the environment variable is ignored.
|
|
||||||
*
|
|
||||||
* @param githubAuth a github app token or PAT
|
|
||||||
* @param fromStdIn read the github app token or PAT from stdin up to, but excluding the first whitespace
|
|
||||||
* @param readable the readable stream to use for getting the token (defaults to stdin)
|
|
||||||
*
|
|
||||||
* @return a promise resolving to the auth token.
|
|
||||||
*/
|
|
||||||
async function getGitHubAuth(logger, githubAuth, fromStdIn, readable = process.stdin) {
|
|
||||||
if (githubAuth && fromStdIn) {
|
|
||||||
throw new Error("Cannot specify both `--github-auth` and `--github-auth-stdin`. Please use `--github-auth-stdin`, which is more secure.");
|
|
||||||
}
|
|
||||||
if (githubAuth) {
|
|
||||||
logger.warning("Using `--github-auth` via the CLI is insecure. Use `--github-auth-stdin` instead.");
|
|
||||||
return githubAuth;
|
|
||||||
}
|
|
||||||
if (fromStdIn) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
let token = "";
|
|
||||||
readable.on("data", (data) => {
|
|
||||||
token += data.toString("utf8");
|
|
||||||
});
|
|
||||||
readable.on("end", () => {
|
|
||||||
token = token.split(/\s+/)[0].trim();
|
|
||||||
if (token) {
|
|
||||||
resolve(token);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
reject(new Error("Standard input is empty"));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
readable.on("error", (err) => {
|
|
||||||
reject(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (process.env.GITHUB_TOKEN) {
|
|
||||||
return process.env.GITHUB_TOKEN;
|
|
||||||
}
|
|
||||||
throw new Error("No GitHub authentication token was specified. Please provide a token via the GITHUB_TOKEN environment variable, or by adding the `--github-auth-stdin` flag and passing the token via standard input.");
|
|
||||||
}
|
|
||||||
exports.getGitHubAuth = getGitHubAuth;
|
|
||||||
/**
|
/**
|
||||||
* This error is used to indicate a runtime failure of an exhaustivity check enforced at compile time.
|
* This error is used to indicate a runtime failure of an exhaustivity check enforced at compile time.
|
||||||
*/
|
*/
|
||||||
|
|
@ -383,22 +330,12 @@ function assertNever(value) {
|
||||||
throw new ExhaustivityCheckingError(value);
|
throw new ExhaustivityCheckingError(value);
|
||||||
}
|
}
|
||||||
exports.assertNever = assertNever;
|
exports.assertNever = assertNever;
|
||||||
var Mode;
|
|
||||||
(function (Mode) {
|
|
||||||
Mode["actions"] = "Action";
|
|
||||||
Mode["runner"] = "Runner";
|
|
||||||
})(Mode = exports.Mode || (exports.Mode = {}));
|
|
||||||
/**
|
/**
|
||||||
* Environment variables to be set by codeql-action and used by the
|
* Environment variables to be set by codeql-action and used by the
|
||||||
* CLI. These environment variables are relevant for both the runner
|
* CLI.
|
||||||
* and the action.
|
|
||||||
*/
|
*/
|
||||||
var EnvVar;
|
var EnvVar;
|
||||||
(function (EnvVar) {
|
(function (EnvVar) {
|
||||||
/**
|
|
||||||
* The mode of the codeql-action, either 'actions' or 'runner'.
|
|
||||||
*/
|
|
||||||
EnvVar["RUN_MODE"] = "CODEQL_ACTION_RUN_MODE";
|
|
||||||
/**
|
/**
|
||||||
* Semver of the codeql-action as specified in package.json.
|
* Semver of the codeql-action as specified in package.json.
|
||||||
*/
|
*/
|
||||||
|
|
@ -425,55 +362,31 @@ var EnvVar;
|
||||||
*/
|
*/
|
||||||
EnvVar["FEATURE_SANDWICH"] = "CODEQL_ACTION_FEATURE_SANDWICH";
|
EnvVar["FEATURE_SANDWICH"] = "CODEQL_ACTION_FEATURE_SANDWICH";
|
||||||
})(EnvVar = exports.EnvVar || (exports.EnvVar = {}));
|
})(EnvVar = exports.EnvVar || (exports.EnvVar = {}));
|
||||||
const exportVar = (mode, name, value) => {
|
|
||||||
if (mode === Mode.actions) {
|
|
||||||
core.exportVariable(name, value);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
process.env[name] = value;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
/**
|
/**
|
||||||
* Set some initial environment variables that we can set even without
|
* Set some initial environment variables that we can set even without
|
||||||
* knowing what version of CodeQL we're running.
|
* knowing what version of CodeQL we're running.
|
||||||
*/
|
*/
|
||||||
function initializeEnvironment(mode, version) {
|
function initializeEnvironment(version) {
|
||||||
exportVar(mode, EnvVar.RUN_MODE, mode);
|
core.exportVariable(EnvVar.VERSION, version);
|
||||||
exportVar(mode, EnvVar.VERSION, version);
|
core.exportVariable(EnvVar.FEATURE_SARIF_COMBINE, "true");
|
||||||
exportVar(mode, EnvVar.FEATURE_SARIF_COMBINE, "true");
|
core.exportVariable(EnvVar.FEATURE_WILL_UPLOAD, "true");
|
||||||
exportVar(mode, EnvVar.FEATURE_WILL_UPLOAD, "true");
|
|
||||||
}
|
}
|
||||||
exports.initializeEnvironment = initializeEnvironment;
|
exports.initializeEnvironment = initializeEnvironment;
|
||||||
/**
|
/**
|
||||||
* Enrich the environment variables with further flags that we cannot
|
* Enrich the environment variables with further flags that we cannot
|
||||||
* know the value of until we know what version of CodeQL we're running.
|
* know the value of until we know what version of CodeQL we're running.
|
||||||
*/
|
*/
|
||||||
async function enrichEnvironment(mode, codeql) {
|
async function enrichEnvironment(codeql) {
|
||||||
if (await codeQlVersionAbove(codeql, codeql_1.CODEQL_VERSION_NEW_TRACING)) {
|
if (await codeQlVersionAbove(codeql, codeql_1.CODEQL_VERSION_NEW_TRACING)) {
|
||||||
exportVar(mode, EnvVar.FEATURE_MULTI_LANGUAGE, "false");
|
core.exportVariable(EnvVar.FEATURE_MULTI_LANGUAGE, "false");
|
||||||
exportVar(mode, EnvVar.FEATURE_SANDWICH, "false");
|
core.exportVariable(EnvVar.FEATURE_SANDWICH, "false");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
exportVar(mode, EnvVar.FEATURE_MULTI_LANGUAGE, "true");
|
core.exportVariable(EnvVar.FEATURE_MULTI_LANGUAGE, "true");
|
||||||
exportVar(mode, EnvVar.FEATURE_SANDWICH, "true");
|
core.exportVariable(EnvVar.FEATURE_SANDWICH, "true");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
exports.enrichEnvironment = enrichEnvironment;
|
exports.enrichEnvironment = enrichEnvironment;
|
||||||
function getMode() {
|
|
||||||
// Make sure we fail fast if the env var is missing. This should
|
|
||||||
// only happen if there is a bug in our code and we neglected
|
|
||||||
// to set the mode early in the process.
|
|
||||||
const mode = getRequiredEnvParam(EnvVar.RUN_MODE);
|
|
||||||
if (mode !== Mode.actions && mode !== Mode.runner) {
|
|
||||||
throw new Error(`Unknown mode: ${mode}.`);
|
|
||||||
}
|
|
||||||
return mode;
|
|
||||||
}
|
|
||||||
exports.getMode = getMode;
|
|
||||||
function isActions() {
|
|
||||||
return getMode() === Mode.actions;
|
|
||||||
}
|
|
||||||
exports.isActions = isActions;
|
|
||||||
/**
|
/**
|
||||||
* Get an environment parameter, but throw an error if it is not set.
|
* Get an environment parameter, but throw an error if it is not set.
|
||||||
*/
|
*/
|
||||||
|
|
@ -621,7 +534,7 @@ exports.getMlPoweredJsQueriesStatus = getMlPoweredJsQueriesStatus;
|
||||||
async function checkActionVersion(version) {
|
async function checkActionVersion(version) {
|
||||||
var _a;
|
var _a;
|
||||||
if (!semver.satisfies(version, ">=2")) {
|
if (!semver.satisfies(version, ">=2")) {
|
||||||
const githubVersion = await api.getGitHubVersionActionsOnly();
|
const githubVersion = await api.getGitHubVersion();
|
||||||
// Only log a warning for versions of GHES that are compatible with CodeQL Action version 2.
|
// Only log a warning for versions of GHES that are compatible with CodeQL Action version 2.
|
||||||
//
|
//
|
||||||
// GHES 3.4 shipped without the v2 tag, but it also shipped without this warning message code.
|
// GHES 3.4 shipped without the v2 tag, but it also shipped without this warning message code.
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
35
lib/util.test.js
generated
35
lib/util.test.js
generated
|
|
@ -25,7 +25,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const fs = __importStar(require("fs"));
|
const fs = __importStar(require("fs"));
|
||||||
const os = __importStar(require("os"));
|
const os = __importStar(require("os"));
|
||||||
const path_1 = __importDefault(require("path"));
|
const path_1 = __importDefault(require("path"));
|
||||||
const stream = __importStar(require("stream"));
|
|
||||||
const core = __importStar(require("@actions/core"));
|
const core = __importStar(require("@actions/core"));
|
||||||
const github = __importStar(require("@actions/github"));
|
const github = __importStar(require("@actions/github"));
|
||||||
const ava_1 = __importDefault(require("ava"));
|
const ava_1 = __importDefault(require("ava"));
|
||||||
|
|
@ -180,36 +179,6 @@ function mockGetMetaVersionHeader(versionHeader) {
|
||||||
});
|
});
|
||||||
t.deepEqual({ type: util.GitHubVariant.DOTCOM }, v3);
|
t.deepEqual({ type: util.GitHubVariant.DOTCOM }, v3);
|
||||||
});
|
});
|
||||||
(0, ava_1.default)("getGitHubAuth", async (t) => {
|
|
||||||
const msgs = [];
|
|
||||||
const mockLogger = {
|
|
||||||
warning: (msg) => msgs.push(msg),
|
|
||||||
};
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
||||||
t.throwsAsync(async () => util.getGitHubAuth(mockLogger, "abc", true));
|
|
||||||
process.env.GITHUB_TOKEN = "123";
|
|
||||||
t.is("123", await util.getGitHubAuth(mockLogger, undefined, undefined));
|
|
||||||
t.is(msgs.length, 0);
|
|
||||||
t.is("abc", await util.getGitHubAuth(mockLogger, "abc", undefined));
|
|
||||||
t.is(msgs.length, 1); // warning expected
|
|
||||||
msgs.length = 0;
|
|
||||||
await mockStdInForAuth(t, mockLogger, "def", "def");
|
|
||||||
await mockStdInForAuth(t, mockLogger, "def", "", "def");
|
|
||||||
await mockStdInForAuth(t, mockLogger, "def", "def\n some extra garbage", "ghi");
|
|
||||||
await mockStdInForAuth(t, mockLogger, "defghi", "def", "ghi\n123");
|
|
||||||
await mockStdInForAuthExpectError(t, mockLogger, "");
|
|
||||||
await mockStdInForAuthExpectError(t, mockLogger, "", " ", "abc");
|
|
||||||
await mockStdInForAuthExpectError(t, mockLogger, " def\n some extra garbage", "ghi");
|
|
||||||
t.is(msgs.length, 0);
|
|
||||||
});
|
|
||||||
async function mockStdInForAuth(t, mockLogger, expected, ...text) {
|
|
||||||
const stdin = stream.Readable.from(text);
|
|
||||||
t.is(expected, await util.getGitHubAuth(mockLogger, undefined, true, stdin));
|
|
||||||
}
|
|
||||||
async function mockStdInForAuthExpectError(t, mockLogger, ...text) {
|
|
||||||
const stdin = stream.Readable.from(text);
|
|
||||||
await t.throwsAsync(async () => util.getGitHubAuth(mockLogger, undefined, true, stdin));
|
|
||||||
}
|
|
||||||
const ML_POWERED_JS_STATUS_TESTS = [
|
const ML_POWERED_JS_STATUS_TESTS = [
|
||||||
// If no packs are loaded, status is false.
|
// If no packs are loaded, status is false.
|
||||||
[[], "false"],
|
[[], "false"],
|
||||||
|
|
@ -305,9 +274,8 @@ for (const [version, githubVersion, shouldReportWarning,] of CHECK_ACTION_VERSIO
|
||||||
(0, ava_1.default)(`checkActionVersion ${reportWarningDescription} for ${versionsDescription}`, async (t) => {
|
(0, ava_1.default)(`checkActionVersion ${reportWarningDescription} for ${versionsDescription}`, async (t) => {
|
||||||
const warningSpy = sinon.spy(core, "warning");
|
const warningSpy = sinon.spy(core, "warning");
|
||||||
const versionStub = sinon
|
const versionStub = sinon
|
||||||
.stub(api, "getGitHubVersionActionsOnly")
|
.stub(api, "getGitHubVersion")
|
||||||
.resolves(githubVersion);
|
.resolves(githubVersion);
|
||||||
const isActionsStub = sinon.stub(util, "isActions").returns(true);
|
|
||||||
await util.checkActionVersion(version);
|
await util.checkActionVersion(version);
|
||||||
if (shouldReportWarning) {
|
if (shouldReportWarning) {
|
||||||
t.true(warningSpy.calledOnceWithExactly(sinon.match("CodeQL Action v1 will be deprecated")));
|
t.true(warningSpy.calledOnceWithExactly(sinon.match("CodeQL Action v1 will be deprecated")));
|
||||||
|
|
@ -316,7 +284,6 @@ for (const [version, githubVersion, shouldReportWarning,] of CHECK_ACTION_VERSIO
|
||||||
t.false(warningSpy.called);
|
t.false(warningSpy.called);
|
||||||
}
|
}
|
||||||
versionStub.restore();
|
versionStub.restore();
|
||||||
isActionsStub.restore();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
(0, ava_1.default)("doesDirectoryExist", async (t) => {
|
(0, ava_1.default)("doesDirectoryExist", async (t) => {
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -7,7 +7,7 @@ import * as sinon from "sinon";
|
||||||
|
|
||||||
import * as actionsutil from "./actions-util";
|
import * as actionsutil from "./actions-util";
|
||||||
import { setupActionsVars, setupTests } from "./testing-utils";
|
import { setupActionsVars, setupTests } from "./testing-utils";
|
||||||
import { getMode, initializeEnvironment, Mode, withTmpDir } from "./util";
|
import { initializeEnvironment, withTmpDir } from "./util";
|
||||||
|
|
||||||
function errorCodes(
|
function errorCodes(
|
||||||
actual: actionsutil.CodedError[],
|
actual: actionsutil.CodedError[],
|
||||||
|
|
@ -719,13 +719,8 @@ on: ["push"]
|
||||||
});
|
});
|
||||||
|
|
||||||
test("initializeEnvironment", (t) => {
|
test("initializeEnvironment", (t) => {
|
||||||
initializeEnvironment(Mode.actions, "1.2.3");
|
initializeEnvironment("1.2.3");
|
||||||
t.deepEqual(getMode(), Mode.actions);
|
|
||||||
t.deepEqual(process.env.CODEQL_ACTION_VERSION, "1.2.3");
|
t.deepEqual(process.env.CODEQL_ACTION_VERSION, "1.2.3");
|
||||||
|
|
||||||
initializeEnvironment(Mode.runner, "4.5.6");
|
|
||||||
t.deepEqual(getMode(), Mode.runner);
|
|
||||||
t.deepEqual(process.env.CODEQL_ACTION_VERSION, "4.5.6");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test("isAnalyzingDefaultBranch()", async (t) => {
|
test("isAnalyzingDefaultBranch()", async (t) => {
|
||||||
|
|
|
||||||
|
|
@ -24,17 +24,11 @@ import {
|
||||||
// eslint-disable-next-line import/no-commonjs
|
// eslint-disable-next-line import/no-commonjs
|
||||||
const pkg = require("../package.json");
|
const pkg = require("../package.json");
|
||||||
|
|
||||||
/**
|
|
||||||
* The utils in this module are meant to be run inside of the action only.
|
|
||||||
* Code paths from the runner should not enter this module.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrapper around core.getInput for inputs that always have a value.
|
* Wrapper around core.getInput for inputs that always have a value.
|
||||||
* Also see getOptionalInput.
|
* Also see getOptionalInput.
|
||||||
*
|
*
|
||||||
* This allows us to get stronger type checking of required/optional inputs
|
* This allows us to get stronger type checking of required/optional inputs.
|
||||||
* and make behaviour more consistent between actions and the runner.
|
|
||||||
*/
|
*/
|
||||||
export function getRequiredInput(name: string): string {
|
export function getRequiredInput(name: string): string {
|
||||||
return core.getInput(name, { required: true });
|
return core.getInput(name, { required: true });
|
||||||
|
|
@ -44,8 +38,7 @@ export function getRequiredInput(name: string): string {
|
||||||
* Wrapper around core.getInput that converts empty inputs to undefined.
|
* Wrapper around core.getInput that converts empty inputs to undefined.
|
||||||
* Also see getRequiredInput.
|
* Also see getRequiredInput.
|
||||||
*
|
*
|
||||||
* This allows us to get stronger type checking of required/optional inputs
|
* This allows us to get stronger type checking of required/optional inputs.
|
||||||
* and make behaviour more consistent between actions and the runner.
|
|
||||||
*/
|
*/
|
||||||
export const getOptionalInput = function (name: string): string | undefined {
|
export const getOptionalInput = function (name: string): string | undefined {
|
||||||
const value = core.getInput(name);
|
const value = core.getInput(name);
|
||||||
|
|
@ -418,7 +411,7 @@ async function getWorkflowPath(): Promise<string> {
|
||||||
const repo = repo_nwo[1];
|
const repo = repo_nwo[1];
|
||||||
const run_id = Number(getRequiredEnvParam("GITHUB_RUN_ID"));
|
const run_id = Number(getRequiredEnvParam("GITHUB_RUN_ID"));
|
||||||
|
|
||||||
const apiClient = api.getActionsApiClient();
|
const apiClient = api.getApiClient();
|
||||||
const runsResponse = await apiClient.request(
|
const runsResponse = await apiClient.request(
|
||||||
"GET /repos/:owner/:repo/actions/runs/:run_id?exclude_pull_requests=true",
|
"GET /repos/:owner/:repo/actions/runs/:run_id?exclude_pull_requests=true",
|
||||||
{
|
{
|
||||||
|
|
@ -779,7 +772,7 @@ export async function sendStatusReport<S extends StatusReportBase>(
|
||||||
|
|
||||||
const nwo = getRequiredEnvParam("GITHUB_REPOSITORY");
|
const nwo = getRequiredEnvParam("GITHUB_REPOSITORY");
|
||||||
const [owner, repo] = nwo.split("/");
|
const [owner, repo] = nwo.split("/");
|
||||||
const client = api.getActionsApiClient();
|
const client = api.getApiClient();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await client.request(
|
await client.request(
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ import {
|
||||||
runFinalize,
|
runFinalize,
|
||||||
runQueries,
|
runQueries,
|
||||||
} from "./analyze";
|
} from "./analyze";
|
||||||
import { getApiDetails, getGitHubVersionActionsOnly } from "./api-client";
|
import { getApiDetails, getGitHubVersion } from "./api-client";
|
||||||
import { runAutobuild } from "./autobuild";
|
import { runAutobuild } from "./autobuild";
|
||||||
import { getCodeQL } from "./codeql";
|
import { getCodeQL } from "./codeql";
|
||||||
import { Config, getConfig } from "./config-utils";
|
import { Config, getConfig } from "./config-utils";
|
||||||
|
|
@ -170,7 +170,7 @@ async function run() {
|
||||||
let trapCacheUploadTime: number | undefined = undefined;
|
let trapCacheUploadTime: number | undefined = undefined;
|
||||||
let dbCreationTimings: DatabaseCreationTimings | undefined = undefined;
|
let dbCreationTimings: DatabaseCreationTimings | undefined = undefined;
|
||||||
let didUploadTrapCaches = false;
|
let didUploadTrapCaches = false;
|
||||||
util.initializeEnvironment(util.Mode.actions, pkg.version);
|
util.initializeEnvironment(pkg.version);
|
||||||
await util.checkActionVersion(pkg.version);
|
await util.checkActionVersion(pkg.version);
|
||||||
|
|
||||||
const logger = getActionsLogger();
|
const logger = getActionsLogger();
|
||||||
|
|
@ -199,10 +199,7 @@ async function run() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
await util.enrichEnvironment(
|
await util.enrichEnvironment(await getCodeQL(config.codeQLCmd));
|
||||||
util.Mode.actions,
|
|
||||||
await getCodeQL(config.codeQLCmd)
|
|
||||||
);
|
|
||||||
|
|
||||||
const apiDetails = getApiDetails();
|
const apiDetails = getApiDetails();
|
||||||
const outputDir = actionsUtil.getRequiredInput("output");
|
const outputDir = actionsUtil.getRequiredInput("output");
|
||||||
|
|
@ -218,14 +215,9 @@ async function run() {
|
||||||
util.getRequiredEnvParam("GITHUB_REPOSITORY")
|
util.getRequiredEnvParam("GITHUB_REPOSITORY")
|
||||||
);
|
);
|
||||||
|
|
||||||
const gitHubVersion = await getGitHubVersionActionsOnly();
|
const gitHubVersion = await getGitHubVersion();
|
||||||
|
|
||||||
const features = new Features(
|
const features = new Features(gitHubVersion, repositoryNwo, logger);
|
||||||
gitHubVersion,
|
|
||||||
apiDetails,
|
|
||||||
repositoryNwo,
|
|
||||||
logger
|
|
||||||
);
|
|
||||||
|
|
||||||
await runAutobuildIfLegacyGoWorkflow(config, logger);
|
await runAutobuildIfLegacyGoWorkflow(config, logger);
|
||||||
|
|
||||||
|
|
@ -268,7 +260,6 @@ async function run() {
|
||||||
uploadResult = await upload_lib.uploadFromActions(
|
uploadResult = await upload_lib.uploadFromActions(
|
||||||
outputDir,
|
outputDir,
|
||||||
config.gitHubVersion,
|
config.gitHubVersion,
|
||||||
apiDetails,
|
|
||||||
logger
|
logger
|
||||||
);
|
);
|
||||||
core.setOutput("sarif-id", uploadResult.sarifID);
|
core.setOutput("sarif-id", uploadResult.sarifID);
|
||||||
|
|
@ -295,7 +286,6 @@ async function run() {
|
||||||
await upload_lib.waitForProcessing(
|
await upload_lib.waitForProcessing(
|
||||||
parseRepositoryNwo(util.getRequiredEnvParam("GITHUB_REPOSITORY")),
|
parseRepositoryNwo(util.getRequiredEnvParam("GITHUB_REPOSITORY")),
|
||||||
uploadResult.sarifID,
|
uploadResult.sarifID,
|
||||||
apiDetails,
|
|
||||||
getActionsLogger()
|
getActionsLogger()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,11 @@
|
||||||
import * as githubUtils from "@actions/github/lib/utils";
|
import * as githubUtils from "@actions/github/lib/utils";
|
||||||
import test, { ExecutionContext } from "ava";
|
import test from "ava";
|
||||||
import * as sinon from "sinon";
|
import * as sinon from "sinon";
|
||||||
|
|
||||||
|
import * as actionsUtil from "./actions-util";
|
||||||
import { getApiClient } from "./api-client";
|
import { getApiClient } from "./api-client";
|
||||||
import { setupTests } from "./testing-utils";
|
import { setupTests } from "./testing-utils";
|
||||||
import { Mode, initializeEnvironment } from "./util";
|
import * as util from "./util";
|
||||||
|
|
||||||
// eslint-disable-next-line import/no-commonjs
|
// eslint-disable-next-line import/no-commonjs
|
||||||
const pkg = require("../package.json");
|
const pkg = require("../package.json");
|
||||||
|
|
@ -18,102 +19,27 @@ test.beforeEach(() => {
|
||||||
pluginStub = sinon.stub(githubUtils.GitHub, "plugin");
|
pluginStub = sinon.stub(githubUtils.GitHub, "plugin");
|
||||||
githubStub = sinon.stub();
|
githubStub = sinon.stub();
|
||||||
pluginStub.returns(githubStub);
|
pluginStub.returns(githubStub);
|
||||||
initializeEnvironment(Mode.actions, pkg.version);
|
util.initializeEnvironment(pkg.version);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Get the client API", async (t) => {
|
test("getApiClient", async (t) => {
|
||||||
doTest(
|
sinon.stub(actionsUtil, "getRequiredInput").withArgs("token").returns("xyz");
|
||||||
t,
|
const requiredEnvParamStub = sinon.stub(util, "getRequiredEnvParam");
|
||||||
{
|
requiredEnvParamStub
|
||||||
auth: "xyz",
|
.withArgs("GITHUB_SERVER_URL")
|
||||||
externalRepoAuth: "abc",
|
.returns("http://github.localhost");
|
||||||
url: "http://hucairz",
|
requiredEnvParamStub
|
||||||
},
|
.withArgs("GITHUB_API_URL")
|
||||||
undefined,
|
.returns("http://api.github.localhost");
|
||||||
{
|
|
||||||
auth: "token xyz",
|
|
||||||
baseUrl: "http://hucairz/api/v3",
|
|
||||||
userAgent: `CodeQL-Action/${pkg.version}`,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
test("Get the client API external", async (t) => {
|
getApiClient();
|
||||||
doTest(
|
|
||||||
t,
|
|
||||||
{
|
|
||||||
auth: "xyz",
|
|
||||||
externalRepoAuth: "abc",
|
|
||||||
url: "http://hucairz",
|
|
||||||
},
|
|
||||||
{ allowExternal: true },
|
|
||||||
{
|
|
||||||
auth: "token abc",
|
|
||||||
baseUrl: "http://hucairz/api/v3",
|
|
||||||
userAgent: `CodeQL-Action/${pkg.version}`,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
test("Get the client API external not present", async (t) => {
|
t.assert(
|
||||||
doTest(
|
githubStub.calledOnceWithExactly({
|
||||||
t,
|
|
||||||
{
|
|
||||||
auth: "xyz",
|
|
||||||
url: "http://hucairz",
|
|
||||||
},
|
|
||||||
{ allowExternal: true },
|
|
||||||
{
|
|
||||||
auth: "token xyz",
|
|
||||||
baseUrl: "http://hucairz/api/v3",
|
|
||||||
userAgent: `CodeQL-Action/${pkg.version}`,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
test("Get the client API with github url", async (t) => {
|
|
||||||
doTest(
|
|
||||||
t,
|
|
||||||
{
|
|
||||||
auth: "xyz",
|
|
||||||
url: "https://github.com/some/invalid/url",
|
|
||||||
},
|
|
||||||
undefined,
|
|
||||||
{
|
|
||||||
auth: "token xyz",
|
|
||||||
baseUrl: "https://api.github.com",
|
|
||||||
userAgent: `CodeQL-Action/${pkg.version}`,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
test("Get the API with an API URL directly", async (t) => {
|
|
||||||
doTest(
|
|
||||||
t,
|
|
||||||
{
|
|
||||||
auth: "xyz",
|
|
||||||
url: "http://github.localhost",
|
|
||||||
apiURL: "http://api.github.localhost",
|
|
||||||
},
|
|
||||||
undefined,
|
|
||||||
{
|
|
||||||
auth: "token xyz",
|
auth: "token xyz",
|
||||||
baseUrl: "http://api.github.localhost",
|
baseUrl: "http://api.github.localhost",
|
||||||
|
log: sinon.match.any,
|
||||||
userAgent: `CodeQL-Action/${pkg.version}`,
|
userAgent: `CodeQL-Action/${pkg.version}`,
|
||||||
}
|
})
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
function doTest(
|
|
||||||
t: ExecutionContext<unknown>,
|
|
||||||
clientArgs: any,
|
|
||||||
clientOptions: any,
|
|
||||||
expected: any
|
|
||||||
) {
|
|
||||||
getApiClient(clientArgs, clientOptions);
|
|
||||||
|
|
||||||
const firstCallArgs = githubStub.args[0];
|
|
||||||
// log is a function, so we don't need to test for equality of it
|
|
||||||
delete firstCallArgs[0].log;
|
|
||||||
t.deepEqual(firstCallArgs, [expected]);
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,10 @@
|
||||||
import * as path from "path";
|
|
||||||
|
|
||||||
import * as githubUtils from "@actions/github/lib/utils";
|
import * as githubUtils from "@actions/github/lib/utils";
|
||||||
import * as retry from "@octokit/plugin-retry";
|
import * as retry from "@octokit/plugin-retry";
|
||||||
import consoleLogLevel from "console-log-level";
|
import consoleLogLevel from "console-log-level";
|
||||||
|
|
||||||
import { getRequiredInput } from "./actions-util";
|
import { getRequiredInput } from "./actions-util";
|
||||||
import * as util from "./util";
|
import * as util from "./util";
|
||||||
import { getMode, getRequiredEnvParam, GitHubVersion } from "./util";
|
import { getRequiredEnvParam, GitHubVersion } from "./util";
|
||||||
|
|
||||||
// eslint-disable-next-line import/no-commonjs
|
// eslint-disable-next-line import/no-commonjs
|
||||||
const pkg = require("../package.json");
|
const pkg = require("../package.json");
|
||||||
|
|
@ -31,36 +29,20 @@ export interface GitHubApiExternalRepoDetails {
|
||||||
apiURL: string | undefined;
|
apiURL: string | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getApiClient = function (
|
function createApiClientWithDetails(
|
||||||
apiDetails: GitHubApiCombinedDetails,
|
apiDetails: GitHubApiCombinedDetails,
|
||||||
{ allowExternal = false } = {}
|
{ allowExternal = false } = {}
|
||||||
) {
|
) {
|
||||||
const auth =
|
const auth =
|
||||||
(allowExternal && apiDetails.externalRepoAuth) || apiDetails.auth;
|
(allowExternal && apiDetails.externalRepoAuth) || apiDetails.auth;
|
||||||
const retryingOctokit = githubUtils.GitHub.plugin(retry.retry);
|
const retryingOctokit = githubUtils.GitHub.plugin(retry.retry);
|
||||||
const apiURL = apiDetails.apiURL || deriveApiUrl(apiDetails.url);
|
|
||||||
return new retryingOctokit(
|
return new retryingOctokit(
|
||||||
githubUtils.getOctokitOptions(auth, {
|
githubUtils.getOctokitOptions(auth, {
|
||||||
baseUrl: apiURL,
|
baseUrl: apiDetails.apiURL,
|
||||||
userAgent: `CodeQL-${getMode()}/${pkg.version}`,
|
userAgent: `CodeQL-Action/${pkg.version}`,
|
||||||
log: consoleLogLevel({ level: "debug" }),
|
log: consoleLogLevel({ level: "debug" }),
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
};
|
|
||||||
|
|
||||||
// Once the runner is deleted, this can also be removed since the GitHub API URL is always available in an environment variable on Actions.
|
|
||||||
function deriveApiUrl(githubUrl: string): string {
|
|
||||||
const url = new URL(githubUrl);
|
|
||||||
|
|
||||||
// If we detect this is trying to connect to github.com
|
|
||||||
// then return with a fixed canonical URL.
|
|
||||||
if (url.hostname === "github.com" || url.hostname === "api.github.com") {
|
|
||||||
return "https://api.github.com";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the /api/v3 API prefix
|
|
||||||
url.pathname = path.join(url.pathname, "api", "v3");
|
|
||||||
return url.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getApiDetails() {
|
export function getApiDetails() {
|
||||||
|
|
@ -71,11 +53,14 @@ export function getApiDetails() {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Temporary function to aid in the transition to running on and off of github actions.
|
export function getApiClient() {
|
||||||
// Once all code has been converted this function should be removed or made canonical
|
return createApiClientWithDetails(getApiDetails());
|
||||||
// and called only from the action entrypoints.
|
}
|
||||||
export function getActionsApiClient() {
|
|
||||||
return getApiClient(getApiDetails());
|
export function getApiClientWithExternalAuth(
|
||||||
|
apiDetails: GitHubApiCombinedDetails
|
||||||
|
) {
|
||||||
|
return createApiClientWithDetails(apiDetails, { allowExternal: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
let cachedGitHubVersion: GitHubVersion | undefined = undefined;
|
let cachedGitHubVersion: GitHubVersion | undefined = undefined;
|
||||||
|
|
@ -83,15 +68,11 @@ let cachedGitHubVersion: GitHubVersion | undefined = undefined;
|
||||||
/**
|
/**
|
||||||
* Report the GitHub server version. This is a wrapper around
|
* Report the GitHub server version. This is a wrapper around
|
||||||
* util.getGitHubVersion() that automatically supplies GitHub API details using
|
* util.getGitHubVersion() that automatically supplies GitHub API details using
|
||||||
* GitHub Action inputs. If you need to get the GitHub server version from the
|
* GitHub Action inputs.
|
||||||
* Runner, please call util.getGitHubVersion() instead.
|
|
||||||
*
|
*
|
||||||
* @returns GitHub version
|
* @returns GitHub version
|
||||||
*/
|
*/
|
||||||
export async function getGitHubVersionActionsOnly(): Promise<GitHubVersion> {
|
export async function getGitHubVersion(): Promise<GitHubVersion> {
|
||||||
if (!util.isActions()) {
|
|
||||||
throw new Error("getGitHubVersionActionsOnly() works only in an action");
|
|
||||||
}
|
|
||||||
if (cachedGitHubVersion === undefined) {
|
if (cachedGitHubVersion === undefined) {
|
||||||
cachedGitHubVersion = await util.getGitHubVersion(getApiDetails());
|
cachedGitHubVersion = await util.getGitHubVersion(getApiDetails());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import {
|
||||||
sendStatusReport,
|
sendStatusReport,
|
||||||
StatusReportBase,
|
StatusReportBase,
|
||||||
} from "./actions-util";
|
} from "./actions-util";
|
||||||
import { getGitHubVersionActionsOnly } from "./api-client";
|
import { getGitHubVersion } from "./api-client";
|
||||||
import { determineAutobuildLanguages, runAutobuild } from "./autobuild";
|
import { determineAutobuildLanguages, runAutobuild } from "./autobuild";
|
||||||
import * as configUtils from "./config-utils";
|
import * as configUtils from "./config-utils";
|
||||||
import { Language } from "./languages";
|
import { Language } from "./languages";
|
||||||
|
|
@ -18,7 +18,6 @@ import {
|
||||||
checkActionVersion,
|
checkActionVersion,
|
||||||
checkGitHubVersionInRange,
|
checkGitHubVersionInRange,
|
||||||
initializeEnvironment,
|
initializeEnvironment,
|
||||||
Mode,
|
|
||||||
} from "./util";
|
} from "./util";
|
||||||
|
|
||||||
// eslint-disable-next-line import/no-commonjs
|
// eslint-disable-next-line import/no-commonjs
|
||||||
|
|
@ -37,7 +36,7 @@ async function sendCompletedStatusReport(
|
||||||
failingLanguage?: string,
|
failingLanguage?: string,
|
||||||
cause?: Error
|
cause?: Error
|
||||||
) {
|
) {
|
||||||
initializeEnvironment(Mode.actions, pkg.version);
|
initializeEnvironment(pkg.version);
|
||||||
|
|
||||||
const status = getActionsStatus(cause, failingLanguage);
|
const status = getActionsStatus(cause, failingLanguage);
|
||||||
const statusReportBase = await createStatusReportBase(
|
const statusReportBase = await createStatusReportBase(
|
||||||
|
|
@ -70,8 +69,8 @@ async function run() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const gitHubVersion = await getGitHubVersionActionsOnly();
|
const gitHubVersion = await getGitHubVersion();
|
||||||
checkGitHubVersionInRange(gitHubVersion, logger, Mode.actions);
|
checkGitHubVersionInRange(gitHubVersion, logger);
|
||||||
|
|
||||||
const config = await configUtils.getConfig(getTemporaryDirectory(), logger);
|
const config = await configUtils.getConfig(getTemporaryDirectory(), logger);
|
||||||
if (config === undefined) {
|
if (config === undefined) {
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ import { Language } from "./languages";
|
||||||
import { getRunnerLogger } from "./logging";
|
import { getRunnerLogger } from "./logging";
|
||||||
import { setupTests, setupActionsVars, createFeatures } from "./testing-utils";
|
import { setupTests, setupActionsVars, createFeatures } from "./testing-utils";
|
||||||
import * as util from "./util";
|
import * as util from "./util";
|
||||||
import { Mode, initializeEnvironment } from "./util";
|
import { initializeEnvironment } from "./util";
|
||||||
|
|
||||||
setupTests(test);
|
setupTests(test);
|
||||||
|
|
||||||
|
|
@ -39,7 +39,7 @@ const sampleGHAEApiDetails = {
|
||||||
let stubConfig: Config;
|
let stubConfig: Config;
|
||||||
|
|
||||||
test.beforeEach(() => {
|
test.beforeEach(() => {
|
||||||
initializeEnvironment(Mode.actions, "1.2.3");
|
initializeEnvironment("1.2.3");
|
||||||
|
|
||||||
stubConfig = {
|
stubConfig = {
|
||||||
languages: [Language.cpp],
|
languages: [Language.cpp],
|
||||||
|
|
@ -424,11 +424,7 @@ test("getExtraOptions throws for bad content", (t) => {
|
||||||
test("getCodeQLActionRepository", (t) => {
|
test("getCodeQLActionRepository", (t) => {
|
||||||
const logger = getRunnerLogger(true);
|
const logger = getRunnerLogger(true);
|
||||||
|
|
||||||
initializeEnvironment(Mode.runner, "1.2.3");
|
initializeEnvironment("1.2.3");
|
||||||
const repoActions = codeql.getCodeQLActionRepository(logger);
|
|
||||||
t.deepEqual(repoActions, "github/codeql-action");
|
|
||||||
|
|
||||||
initializeEnvironment(Mode.actions, "1.2.3");
|
|
||||||
|
|
||||||
// isRunningLocalAction() === true
|
// isRunningLocalAction() === true
|
||||||
delete process.env["GITHUB_ACTION_REPOSITORY"];
|
delete process.env["GITHUB_ACTION_REPOSITORY"];
|
||||||
|
|
@ -501,7 +497,6 @@ test("databaseInitCluster() without injected codescanning config", async (t) =>
|
||||||
thisStubConfig,
|
thisStubConfig,
|
||||||
"",
|
"",
|
||||||
undefined,
|
undefined,
|
||||||
undefined,
|
|
||||||
createFeatures([]),
|
createFeatures([]),
|
||||||
getRunnerLogger(true)
|
getRunnerLogger(true)
|
||||||
);
|
);
|
||||||
|
|
@ -541,7 +536,6 @@ const injectedConfigMacro = test.macro({
|
||||||
thisStubConfig,
|
thisStubConfig,
|
||||||
"",
|
"",
|
||||||
undefined,
|
undefined,
|
||||||
undefined,
|
|
||||||
createFeatures([Feature.CliConfigFileEnabled]),
|
createFeatures([Feature.CliConfigFileEnabled]),
|
||||||
getRunnerLogger(true)
|
getRunnerLogger(true)
|
||||||
);
|
);
|
||||||
|
|
@ -848,7 +842,6 @@ test("does not use injected config", async (t: ExecutionContext<unknown>) => {
|
||||||
stubConfig,
|
stubConfig,
|
||||||
"",
|
"",
|
||||||
undefined,
|
undefined,
|
||||||
undefined,
|
|
||||||
createFeatures([]),
|
createFeatures([]),
|
||||||
getRunnerLogger(true)
|
getRunnerLogger(true)
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,6 @@ export interface CodeQL {
|
||||||
config: Config,
|
config: Config,
|
||||||
sourceRoot: string,
|
sourceRoot: string,
|
||||||
processName: string | undefined,
|
processName: string | undefined,
|
||||||
processLevel: number | undefined,
|
|
||||||
featureEnablement: FeatureEnablement,
|
featureEnablement: FeatureEnablement,
|
||||||
logger: Logger
|
logger: Logger
|
||||||
): Promise<void>;
|
): Promise<void>;
|
||||||
|
|
@ -304,14 +303,6 @@ function getCodeQLBundleName(): string {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getCodeQLActionRepository(logger: Logger): string {
|
export function getCodeQLActionRepository(logger: Logger): string {
|
||||||
if (!util.isActions()) {
|
|
||||||
return CODEQL_DEFAULT_ACTION_REPOSITORY;
|
|
||||||
} else {
|
|
||||||
return getActionsCodeQLActionRepository(logger);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function getActionsCodeQLActionRepository(logger: Logger): string {
|
|
||||||
if (process.env["GITHUB_ACTION_REPOSITORY"] !== undefined) {
|
if (process.env["GITHUB_ACTION_REPOSITORY"] !== undefined) {
|
||||||
return process.env["GITHUB_ACTION_REPOSITORY"];
|
return process.env["GITHUB_ACTION_REPOSITORY"];
|
||||||
}
|
}
|
||||||
|
|
@ -359,14 +350,14 @@ async function getCodeQLBundleDownloadURL(
|
||||||
if (variant === util.GitHubVariant.GHAE) {
|
if (variant === util.GitHubVariant.GHAE) {
|
||||||
try {
|
try {
|
||||||
const release = await api
|
const release = await api
|
||||||
.getApiClient(apiDetails)
|
.getApiClient()
|
||||||
.request("GET /enterprise/code-scanning/codeql-bundle/find/{tag}", {
|
.request("GET /enterprise/code-scanning/codeql-bundle/find/{tag}", {
|
||||||
tag: CODEQL_BUNDLE_VERSION,
|
tag: CODEQL_BUNDLE_VERSION,
|
||||||
});
|
});
|
||||||
const assetID = release.data.assets[codeQLBundleName];
|
const assetID = release.data.assets[codeQLBundleName];
|
||||||
if (assetID !== undefined) {
|
if (assetID !== undefined) {
|
||||||
const download = await api
|
const download = await api
|
||||||
.getApiClient(apiDetails)
|
.getApiClient()
|
||||||
.request(
|
.request(
|
||||||
"GET /enterprise/code-scanning/codeql-bundle/download/{asset_id}",
|
"GET /enterprise/code-scanning/codeql-bundle/download/{asset_id}",
|
||||||
{ asset_id: assetID }
|
{ asset_id: assetID }
|
||||||
|
|
@ -400,7 +391,7 @@ async function getCodeQLBundleDownloadURL(
|
||||||
}
|
}
|
||||||
const [repositoryOwner, repositoryName] = repository.split("/");
|
const [repositoryOwner, repositoryName] = repository.split("/");
|
||||||
try {
|
try {
|
||||||
const release = await api.getApiClient(apiDetails).repos.getReleaseByTag({
|
const release = await api.getApiClient().repos.getReleaseByTag({
|
||||||
owner: repositoryOwner,
|
owner: repositoryOwner,
|
||||||
repo: repositoryName,
|
repo: repositoryName,
|
||||||
tag: CODEQL_BUNDLE_VERSION,
|
tag: CODEQL_BUNDLE_VERSION,
|
||||||
|
|
@ -808,7 +799,6 @@ async function getCodeQLForCmd(
|
||||||
config: Config,
|
config: Config,
|
||||||
sourceRoot: string,
|
sourceRoot: string,
|
||||||
processName: string | undefined,
|
processName: string | undefined,
|
||||||
processLevel: number | undefined,
|
|
||||||
featureEnablement: FeatureEnablement
|
featureEnablement: FeatureEnablement
|
||||||
) {
|
) {
|
||||||
const extraArgs = config.languages.map(
|
const extraArgs = config.languages.map(
|
||||||
|
|
@ -817,14 +807,7 @@ async function getCodeQLForCmd(
|
||||||
if (config.languages.filter((l) => isTracedLanguage(l)).length > 0) {
|
if (config.languages.filter((l) => isTracedLanguage(l)).length > 0) {
|
||||||
extraArgs.push("--begin-tracing");
|
extraArgs.push("--begin-tracing");
|
||||||
extraArgs.push(...(await getTrapCachingExtractorConfigArgs(config)));
|
extraArgs.push(...(await getTrapCachingExtractorConfigArgs(config)));
|
||||||
if (processName !== undefined) {
|
extraArgs.push(`--trace-process-name=${processName}`);
|
||||||
extraArgs.push(`--trace-process-name=${processName}`);
|
|
||||||
} else {
|
|
||||||
// We default to 3 if no other arguments are provided since this was the default
|
|
||||||
// behaviour of the Runner. Note this path never happens in the CodeQL Action
|
|
||||||
// because that always passes in a process name.
|
|
||||||
extraArgs.push(`--trace-process-level=${processLevel || 3}`);
|
|
||||||
}
|
|
||||||
if (
|
if (
|
||||||
// There's a bug in Lua tracing for Go on Windows in versions earlier than
|
// There's a bug in Lua tracing for Go on Windows in versions earlier than
|
||||||
// `CODEQL_VERSION_LUA_TRACING_GO_WINDOWS_FIXED`, so don't use Lua tracing
|
// `CODEQL_VERSION_LUA_TRACING_GO_WINDOWS_FIXED`, so don't use Lua tracing
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ function mockGetContents(
|
||||||
.stub(client.repos, "getContent")
|
.stub(client.repos, "getContent")
|
||||||
.resolves(response as any);
|
.resolves(response as any);
|
||||||
sinon.stub(api, "getApiClient").value(() => client);
|
sinon.stub(api, "getApiClient").value(() => client);
|
||||||
|
sinon.stub(api, "getApiClientWithExternalAuth").value(() => client);
|
||||||
return spyGetContents;
|
return spyGetContents;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -856,11 +856,10 @@ export function getUnknownLanguagesError(languages: string[]): string {
|
||||||
*/
|
*/
|
||||||
async function getLanguagesInRepo(
|
async function getLanguagesInRepo(
|
||||||
repository: RepositoryNwo,
|
repository: RepositoryNwo,
|
||||||
apiDetails: api.GitHubApiDetails,
|
|
||||||
logger: Logger
|
logger: Logger
|
||||||
): Promise<Language[]> {
|
): Promise<Language[]> {
|
||||||
logger.debug(`GitHub repo ${repository.owner} ${repository.repo}`);
|
logger.debug(`GitHub repo ${repository.owner} ${repository.repo}`);
|
||||||
const response = await api.getApiClient(apiDetails).repos.listLanguages({
|
const response = await api.getApiClient().repos.listLanguages({
|
||||||
owner: repository.owner,
|
owner: repository.owner,
|
||||||
repo: repository.repo,
|
repo: repository.repo,
|
||||||
});
|
});
|
||||||
|
|
@ -895,7 +894,6 @@ async function getLanguages(
|
||||||
codeQL: CodeQL,
|
codeQL: CodeQL,
|
||||||
languagesInput: string | undefined,
|
languagesInput: string | undefined,
|
||||||
repository: RepositoryNwo,
|
repository: RepositoryNwo,
|
||||||
apiDetails: api.GitHubApiDetails,
|
|
||||||
logger: Logger
|
logger: Logger
|
||||||
): Promise<Language[]> {
|
): Promise<Language[]> {
|
||||||
// Obtain from action input 'languages' if set
|
// Obtain from action input 'languages' if set
|
||||||
|
|
@ -907,7 +905,7 @@ async function getLanguages(
|
||||||
|
|
||||||
if (languages.length === 0) {
|
if (languages.length === 0) {
|
||||||
// Obtain languages as all languages in the repo that can be analysed
|
// Obtain languages as all languages in the repo that can be analysed
|
||||||
languages = await getLanguagesInRepo(repository, apiDetails, logger);
|
languages = await getLanguagesInRepo(repository, logger);
|
||||||
const availableLanguages = await codeQL.resolveLanguages();
|
const availableLanguages = await codeQL.resolveLanguages();
|
||||||
languages = languages.filter((value) => value in availableLanguages);
|
languages = languages.filter((value) => value in availableLanguages);
|
||||||
logger.info(
|
logger.info(
|
||||||
|
|
@ -1012,7 +1010,6 @@ export async function getDefaultConfig(
|
||||||
codeQL,
|
codeQL,
|
||||||
languagesInput,
|
languagesInput,
|
||||||
repository,
|
repository,
|
||||||
apiDetails,
|
|
||||||
logger
|
logger
|
||||||
);
|
);
|
||||||
const queries: Queries = {};
|
const queries: Queries = {};
|
||||||
|
|
@ -1142,7 +1139,6 @@ async function loadConfig(
|
||||||
codeQL,
|
codeQL,
|
||||||
languagesInput,
|
languagesInput,
|
||||||
repository,
|
repository,
|
||||||
apiDetails,
|
|
||||||
logger
|
logger
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -1773,7 +1769,7 @@ async function getRemoteConfig(
|
||||||
}
|
}
|
||||||
|
|
||||||
const response = await api
|
const response = await api
|
||||||
.getApiClient(apiDetails, { allowExternal: true })
|
.getApiClientWithExternalAuth(apiDetails)
|
||||||
.repos.getContent({
|
.repos.getContent({
|
||||||
owner: pieces.groups.owner,
|
owner: pieces.groups.owner,
|
||||||
repo: pieces.groups.repo,
|
repo: pieces.groups.repo,
|
||||||
|
|
|
||||||
|
|
@ -24,14 +24,13 @@ import {
|
||||||
GitHubVariant,
|
GitHubVariant,
|
||||||
HTTPError,
|
HTTPError,
|
||||||
initializeEnvironment,
|
initializeEnvironment,
|
||||||
Mode,
|
|
||||||
withTmpDir,
|
withTmpDir,
|
||||||
} from "./util";
|
} from "./util";
|
||||||
|
|
||||||
setupTests(test);
|
setupTests(test);
|
||||||
|
|
||||||
test.beforeEach(() => {
|
test.beforeEach(() => {
|
||||||
initializeEnvironment(Mode.actions, "1.2.3");
|
initializeEnvironment("1.2.3");
|
||||||
});
|
});
|
||||||
|
|
||||||
const testRepoName: RepositoryNwo = { owner: "github", repo: "example" };
|
const testRepoName: RepositoryNwo = { owner: "github", repo: "example" };
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ export async function uploadDatabases(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const client = getApiClient(apiDetails);
|
const client = getApiClient();
|
||||||
const codeql = await getCodeQL(config.codeQLCmd);
|
const codeql = await getCodeQL(config.codeQLCmd);
|
||||||
|
|
||||||
for (const language of config.languages) {
|
for (const language of config.languages) {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
import test from "ava";
|
import test from "ava";
|
||||||
|
|
||||||
import { GitHubApiDetails } from "./api-client";
|
|
||||||
import {
|
import {
|
||||||
Feature,
|
Feature,
|
||||||
featureConfig,
|
featureConfig,
|
||||||
|
|
@ -18,20 +17,14 @@ import {
|
||||||
setupTests,
|
setupTests,
|
||||||
} from "./testing-utils";
|
} from "./testing-utils";
|
||||||
import * as util from "./util";
|
import * as util from "./util";
|
||||||
import { GitHubVariant, initializeEnvironment, Mode, withTmpDir } from "./util";
|
import { GitHubVariant, initializeEnvironment, withTmpDir } from "./util";
|
||||||
|
|
||||||
setupTests(test);
|
setupTests(test);
|
||||||
|
|
||||||
test.beforeEach(() => {
|
test.beforeEach(() => {
|
||||||
initializeEnvironment(Mode.actions, "1.2.3");
|
initializeEnvironment("1.2.3");
|
||||||
});
|
});
|
||||||
|
|
||||||
const testApiDetails: GitHubApiDetails = {
|
|
||||||
auth: "1234",
|
|
||||||
url: "https://github.com",
|
|
||||||
apiURL: undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
const testRepositoryNwo = parseRepositoryNwo("github/example");
|
const testRepositoryNwo = parseRepositoryNwo("github/example");
|
||||||
|
|
||||||
const ALL_FEATURES_DISABLED_VARIANTS: Array<{
|
const ALL_FEATURES_DISABLED_VARIANTS: Array<{
|
||||||
|
|
@ -319,7 +312,7 @@ function setUpTests(
|
||||||
): FeatureEnablement {
|
): FeatureEnablement {
|
||||||
setupActionsVars(tmpDir, tmpDir);
|
setupActionsVars(tmpDir, tmpDir);
|
||||||
|
|
||||||
return new Features(gitHubVersion, testApiDetails, testRepositoryNwo, logger);
|
return new Features(gitHubVersion, testRepositoryNwo, logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
function includeCodeQlIfRequired(feature: string) {
|
function includeCodeQlIfRequired(feature: string) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { getApiClient, GitHubApiDetails } from "./api-client";
|
import { getApiClient } from "./api-client";
|
||||||
import { CodeQL } from "./codeql";
|
import { CodeQL } from "./codeql";
|
||||||
import { Logger } from "./logging";
|
import { Logger } from "./logging";
|
||||||
import { RepositoryNwo } from "./repository";
|
import { RepositoryNwo } from "./repository";
|
||||||
|
|
@ -65,13 +65,11 @@ export class Features implements FeatureEnablement {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
gitHubVersion: util.GitHubVersion,
|
gitHubVersion: util.GitHubVersion,
|
||||||
apiDetails: GitHubApiDetails,
|
|
||||||
repositoryNwo: RepositoryNwo,
|
repositoryNwo: RepositoryNwo,
|
||||||
logger: Logger
|
logger: Logger
|
||||||
) {
|
) {
|
||||||
this.gitHubFeatureFlags = new GitHubFeatureFlags(
|
this.gitHubFeatureFlags = new GitHubFeatureFlags(
|
||||||
gitHubVersion,
|
gitHubVersion,
|
||||||
apiDetails,
|
|
||||||
repositoryNwo,
|
repositoryNwo,
|
||||||
logger
|
logger
|
||||||
);
|
);
|
||||||
|
|
@ -133,7 +131,6 @@ class GitHubFeatureFlags implements FeatureEnablement {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private gitHubVersion: util.GitHubVersion,
|
private gitHubVersion: util.GitHubVersion,
|
||||||
private apiDetails: GitHubApiDetails,
|
|
||||||
private repositoryNwo: RepositoryNwo,
|
private repositoryNwo: RepositoryNwo,
|
||||||
private logger: Logger
|
private logger: Logger
|
||||||
) {
|
) {
|
||||||
|
|
@ -173,9 +170,8 @@ class GitHubFeatureFlags implements FeatureEnablement {
|
||||||
);
|
);
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
const client = getApiClient(this.apiDetails);
|
|
||||||
try {
|
try {
|
||||||
const response = await client.request(
|
const response = await getApiClient().request(
|
||||||
"GET /repos/:owner/:repo/code-scanning/codeql-action/features",
|
"GET /repos/:owner/:repo/code-scanning/codeql-action/features",
|
||||||
{
|
{
|
||||||
owner: this.repositoryNwo.owner,
|
owner: this.repositoryNwo.owner,
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ import {
|
||||||
StatusReportBase,
|
StatusReportBase,
|
||||||
validateWorkflow,
|
validateWorkflow,
|
||||||
} from "./actions-util";
|
} from "./actions-util";
|
||||||
import { getGitHubVersionActionsOnly } from "./api-client";
|
import { getGitHubVersion } from "./api-client";
|
||||||
import { CodeQL, CODEQL_VERSION_NEW_TRACING } from "./codeql";
|
import { CodeQL, CODEQL_VERSION_NEW_TRACING } from "./codeql";
|
||||||
import * as configUtils from "./config-utils";
|
import * as configUtils from "./config-utils";
|
||||||
import { Feature, FeatureEnablement, Features } from "./feature-flags";
|
import { Feature, FeatureEnablement, Features } from "./feature-flags";
|
||||||
|
|
@ -40,7 +40,6 @@ import {
|
||||||
getThreadsFlagValue,
|
getThreadsFlagValue,
|
||||||
initializeEnvironment,
|
initializeEnvironment,
|
||||||
isHostedRunner,
|
isHostedRunner,
|
||||||
Mode,
|
|
||||||
} from "./util";
|
} from "./util";
|
||||||
|
|
||||||
// eslint-disable-next-line import/no-commonjs
|
// eslint-disable-next-line import/no-commonjs
|
||||||
|
|
@ -137,7 +136,7 @@ async function sendSuccessStatusReport(
|
||||||
async function run() {
|
async function run() {
|
||||||
const startedAt = new Date();
|
const startedAt = new Date();
|
||||||
const logger = getActionsLogger();
|
const logger = getActionsLogger();
|
||||||
initializeEnvironment(Mode.actions, pkg.version);
|
initializeEnvironment(pkg.version);
|
||||||
await checkActionVersion(pkg.version);
|
await checkActionVersion(pkg.version);
|
||||||
|
|
||||||
let config: configUtils.Config;
|
let config: configUtils.Config;
|
||||||
|
|
@ -151,19 +150,14 @@ async function run() {
|
||||||
apiURL: getRequiredEnvParam("GITHUB_API_URL"),
|
apiURL: getRequiredEnvParam("GITHUB_API_URL"),
|
||||||
};
|
};
|
||||||
|
|
||||||
const gitHubVersion = await getGitHubVersionActionsOnly();
|
const gitHubVersion = await getGitHubVersion();
|
||||||
checkGitHubVersionInRange(gitHubVersion, logger, Mode.actions);
|
checkGitHubVersionInRange(gitHubVersion, logger);
|
||||||
|
|
||||||
const repositoryNwo = parseRepositoryNwo(
|
const repositoryNwo = parseRepositoryNwo(
|
||||||
getRequiredEnvParam("GITHUB_REPOSITORY")
|
getRequiredEnvParam("GITHUB_REPOSITORY")
|
||||||
);
|
);
|
||||||
|
|
||||||
const features = new Features(
|
const features = new Features(gitHubVersion, repositoryNwo, logger);
|
||||||
gitHubVersion,
|
|
||||||
apiDetails,
|
|
||||||
repositoryNwo,
|
|
||||||
logger
|
|
||||||
);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const workflowErrors = await validateWorkflow();
|
const workflowErrors = await validateWorkflow();
|
||||||
|
|
@ -191,7 +185,7 @@ async function run() {
|
||||||
);
|
);
|
||||||
codeql = initCodeQLResult.codeql;
|
codeql = initCodeQLResult.codeql;
|
||||||
toolsVersion = initCodeQLResult.toolsVersion;
|
toolsVersion = initCodeQLResult.toolsVersion;
|
||||||
await enrichEnvironment(Mode.actions, codeql);
|
await enrichEnvironment(codeql);
|
||||||
|
|
||||||
config = await initConfig(
|
config = await initConfig(
|
||||||
getOptionalInput("languages"),
|
getOptionalInput("languages"),
|
||||||
|
|
@ -276,7 +270,6 @@ async function run() {
|
||||||
config,
|
config,
|
||||||
sourceRoot,
|
sourceRoot,
|
||||||
"Runner.Worker.exe",
|
"Runner.Worker.exe",
|
||||||
undefined,
|
|
||||||
features,
|
features,
|
||||||
logger
|
logger
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,6 @@ export async function runInit(
|
||||||
config: configUtils.Config,
|
config: configUtils.Config,
|
||||||
sourceRoot: string,
|
sourceRoot: string,
|
||||||
processName: string | undefined,
|
processName: string | undefined,
|
||||||
processLevel: number | undefined,
|
|
||||||
featureEnablement: FeatureEnablement,
|
featureEnablement: FeatureEnablement,
|
||||||
logger: Logger
|
logger: Logger
|
||||||
): Promise<TracerConfig | undefined> {
|
): Promise<TracerConfig | undefined> {
|
||||||
|
|
@ -102,7 +101,6 @@ export async function runInit(
|
||||||
config,
|
config,
|
||||||
sourceRoot,
|
sourceRoot,
|
||||||
processName,
|
processName,
|
||||||
processLevel,
|
|
||||||
featureEnablement,
|
featureEnablement,
|
||||||
logger
|
logger
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ import {
|
||||||
GitHubVariant,
|
GitHubVariant,
|
||||||
GitHubVersion,
|
GitHubVersion,
|
||||||
initializeEnvironment,
|
initializeEnvironment,
|
||||||
Mode,
|
|
||||||
SarifFile,
|
SarifFile,
|
||||||
withTmpDir,
|
withTmpDir,
|
||||||
} from "./util";
|
} from "./util";
|
||||||
|
|
@ -19,7 +18,7 @@ import {
|
||||||
setupTests(test);
|
setupTests(test);
|
||||||
|
|
||||||
test.beforeEach(() => {
|
test.beforeEach(() => {
|
||||||
initializeEnvironment(Mode.actions, "1.2.3");
|
initializeEnvironment("1.2.3");
|
||||||
});
|
});
|
||||||
|
|
||||||
test("validateSarifFileSchema - valid", (t) => {
|
test("validateSarifFileSchema - valid", (t) => {
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ export function combineSarifFiles(sarifFiles: string[]): SarifFile {
|
||||||
export function populateRunAutomationDetails(
|
export function populateRunAutomationDetails(
|
||||||
sarif: SarifFile,
|
sarif: SarifFile,
|
||||||
category: string | undefined,
|
category: string | undefined,
|
||||||
analysis_key: string | undefined,
|
analysis_key: string,
|
||||||
environment: string | undefined
|
environment: string | undefined
|
||||||
): SarifFile {
|
): SarifFile {
|
||||||
const automationID = getAutomationID(category, analysis_key, environment);
|
const automationID = getAutomationID(category, analysis_key, environment);
|
||||||
|
|
@ -70,7 +70,7 @@ export function populateRunAutomationDetails(
|
||||||
|
|
||||||
function getAutomationID(
|
function getAutomationID(
|
||||||
category: string | undefined,
|
category: string | undefined,
|
||||||
analysis_key: string | undefined,
|
analysis_key: string,
|
||||||
environment: string | undefined
|
environment: string | undefined
|
||||||
): string | undefined {
|
): string | undefined {
|
||||||
if (category !== undefined) {
|
if (category !== undefined) {
|
||||||
|
|
@ -81,12 +81,7 @@ function getAutomationID(
|
||||||
return automationID;
|
return automationID;
|
||||||
}
|
}
|
||||||
|
|
||||||
// analysis_key is undefined for the runner.
|
return actionsUtil.computeAutomationID(analysis_key, environment);
|
||||||
if (analysis_key !== undefined) {
|
|
||||||
return actionsUtil.computeAutomationID(analysis_key, environment);
|
|
||||||
}
|
|
||||||
|
|
||||||
return undefined;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Upload the given payload.
|
// Upload the given payload.
|
||||||
|
|
@ -94,7 +89,6 @@ function getAutomationID(
|
||||||
async function uploadPayload(
|
async function uploadPayload(
|
||||||
payload: any,
|
payload: any,
|
||||||
repositoryNwo: RepositoryNwo,
|
repositoryNwo: RepositoryNwo,
|
||||||
apiDetails: api.GitHubApiDetails,
|
|
||||||
logger: Logger
|
logger: Logger
|
||||||
) {
|
) {
|
||||||
logger.info("Uploading results");
|
logger.info("Uploading results");
|
||||||
|
|
@ -113,16 +107,16 @@ async function uploadPayload(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const client = api.getApiClient(apiDetails);
|
const client = api.getApiClient();
|
||||||
|
|
||||||
const reqURL = util.isActions()
|
const response = await client.request(
|
||||||
? "PUT /repos/:owner/:repo/code-scanning/analysis"
|
"PUT /repos/:owner/:repo/code-scanning/analysis",
|
||||||
: "POST /repos/:owner/:repo/code-scanning/sarifs";
|
{
|
||||||
const response = await client.request(reqURL, {
|
owner: repositoryNwo.owner,
|
||||||
owner: repositoryNwo.owner,
|
repo: repositoryNwo.repo,
|
||||||
repo: repositoryNwo.repo,
|
data: payload,
|
||||||
data: payload,
|
}
|
||||||
});
|
);
|
||||||
|
|
||||||
logger.debug(`response status: ${response.status}`);
|
logger.debug(`response status: ${response.status}`);
|
||||||
logger.info("Successfully uploaded results");
|
logger.info("Successfully uploaded results");
|
||||||
|
|
@ -168,7 +162,6 @@ export function findSarifFilesInDir(sarifPath: string): string[] {
|
||||||
export async function uploadFromActions(
|
export async function uploadFromActions(
|
||||||
sarifPath: string,
|
sarifPath: string,
|
||||||
gitHubVersion: util.GitHubVersion,
|
gitHubVersion: util.GitHubVersion,
|
||||||
apiDetails: api.GitHubApiDetails,
|
|
||||||
logger: Logger
|
logger: Logger
|
||||||
): Promise<UploadResult> {
|
): Promise<UploadResult> {
|
||||||
return await uploadFiles(
|
return await uploadFiles(
|
||||||
|
|
@ -185,38 +178,6 @@ export async function uploadFromActions(
|
||||||
actionsUtil.getRequiredInput("checkout_path"),
|
actionsUtil.getRequiredInput("checkout_path"),
|
||||||
actionsUtil.getRequiredInput("matrix"),
|
actionsUtil.getRequiredInput("matrix"),
|
||||||
gitHubVersion,
|
gitHubVersion,
|
||||||
apiDetails,
|
|
||||||
logger
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Uploads a single sarif file or a directory of sarif files
|
|
||||||
// depending on what the path happens to refer to.
|
|
||||||
// Returns true iff the upload occurred and succeeded
|
|
||||||
export async function uploadFromRunner(
|
|
||||||
sarifPath: string,
|
|
||||||
repositoryNwo: RepositoryNwo,
|
|
||||||
commitOid: string,
|
|
||||||
ref: string,
|
|
||||||
category: string | undefined,
|
|
||||||
sourceRoot: string,
|
|
||||||
gitHubVersion: util.GitHubVersion,
|
|
||||||
apiDetails: api.GitHubApiDetails,
|
|
||||||
logger: Logger
|
|
||||||
): Promise<UploadResult> {
|
|
||||||
return await uploadFiles(
|
|
||||||
getSarifFilePaths(sarifPath),
|
|
||||||
repositoryNwo,
|
|
||||||
commitOid,
|
|
||||||
ref,
|
|
||||||
undefined,
|
|
||||||
category,
|
|
||||||
undefined,
|
|
||||||
undefined,
|
|
||||||
sourceRoot,
|
|
||||||
undefined,
|
|
||||||
gitHubVersion,
|
|
||||||
apiDetails,
|
|
||||||
logger
|
logger
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -305,61 +266,51 @@ export function buildPayload(
|
||||||
gitHubVersion: util.GitHubVersion,
|
gitHubVersion: util.GitHubVersion,
|
||||||
mergeBaseCommitOid: string | undefined
|
mergeBaseCommitOid: string | undefined
|
||||||
) {
|
) {
|
||||||
if (util.isActions()) {
|
const payloadObj = {
|
||||||
const payloadObj = {
|
commit_oid: commitOid,
|
||||||
commit_oid: commitOid,
|
ref,
|
||||||
ref,
|
analysis_key: analysisKey,
|
||||||
analysis_key: analysisKey,
|
analysis_name: analysisName,
|
||||||
analysis_name: analysisName,
|
sarif: zippedSarif,
|
||||||
sarif: zippedSarif,
|
workflow_run_id: workflowRunID,
|
||||||
workflow_run_id: workflowRunID,
|
checkout_uri: checkoutURI,
|
||||||
checkout_uri: checkoutURI,
|
environment,
|
||||||
environment,
|
started_at: process.env[sharedEnv.CODEQL_WORKFLOW_STARTED_AT],
|
||||||
started_at: process.env[sharedEnv.CODEQL_WORKFLOW_STARTED_AT],
|
tool_names: toolNames,
|
||||||
tool_names: toolNames,
|
base_ref: undefined as undefined | string,
|
||||||
base_ref: undefined as undefined | string,
|
base_sha: undefined as undefined | string,
|
||||||
base_sha: undefined as undefined | string,
|
};
|
||||||
};
|
|
||||||
|
|
||||||
// This behaviour can be made the default when support for GHES 3.0 is discontinued.
|
// This behaviour can be made the default when support for GHES 3.0 is discontinued.
|
||||||
if (
|
if (
|
||||||
gitHubVersion.type !== util.GitHubVariant.GHES ||
|
gitHubVersion.type !== util.GitHubVariant.GHES ||
|
||||||
semver.satisfies(gitHubVersion.version, `>=3.1`)
|
semver.satisfies(gitHubVersion.version, `>=3.1`)
|
||||||
) {
|
) {
|
||||||
if (actionsUtil.workflowEventName() === "pull_request") {
|
if (actionsUtil.workflowEventName() === "pull_request") {
|
||||||
if (
|
if (
|
||||||
commitOid === util.getRequiredEnvParam("GITHUB_SHA") &&
|
commitOid === util.getRequiredEnvParam("GITHUB_SHA") &&
|
||||||
mergeBaseCommitOid
|
mergeBaseCommitOid
|
||||||
) {
|
) {
|
||||||
// We're uploading results for the merge commit
|
// We're uploading results for the merge commit
|
||||||
// and were able to determine the merge base.
|
// and were able to determine the merge base.
|
||||||
// So we use that as the most accurate base.
|
// So we use that as the most accurate base.
|
||||||
payloadObj.base_ref = `refs/heads/${util.getRequiredEnvParam(
|
payloadObj.base_ref = `refs/heads/${util.getRequiredEnvParam(
|
||||||
"GITHUB_BASE_REF"
|
"GITHUB_BASE_REF"
|
||||||
)}`;
|
)}`;
|
||||||
payloadObj.base_sha = mergeBaseCommitOid;
|
payloadObj.base_sha = mergeBaseCommitOid;
|
||||||
} else if (process.env.GITHUB_EVENT_PATH) {
|
} else if (process.env.GITHUB_EVENT_PATH) {
|
||||||
// Either we're not uploading results for the merge commit
|
// Either we're not uploading results for the merge commit
|
||||||
// or we could not determine the merge base.
|
// or we could not determine the merge base.
|
||||||
// Using the PR base is the only option here
|
// Using the PR base is the only option here
|
||||||
const githubEvent = JSON.parse(
|
const githubEvent = JSON.parse(
|
||||||
fs.readFileSync(process.env.GITHUB_EVENT_PATH, "utf8")
|
fs.readFileSync(process.env.GITHUB_EVENT_PATH, "utf8")
|
||||||
);
|
);
|
||||||
payloadObj.base_ref = `refs/heads/${githubEvent.pull_request.base.ref}`;
|
payloadObj.base_ref = `refs/heads/${githubEvent.pull_request.base.ref}`;
|
||||||
payloadObj.base_sha = githubEvent.pull_request.base.sha;
|
payloadObj.base_sha = githubEvent.pull_request.base.sha;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return payloadObj;
|
|
||||||
} else {
|
|
||||||
return {
|
|
||||||
commit_sha: commitOid,
|
|
||||||
ref,
|
|
||||||
sarif: zippedSarif,
|
|
||||||
checkout_uri: checkoutURI,
|
|
||||||
tool_name: toolNames[0],
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
return payloadObj;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uploads the given set of sarif files.
|
// Uploads the given set of sarif files.
|
||||||
|
|
@ -369,14 +320,13 @@ async function uploadFiles(
|
||||||
repositoryNwo: RepositoryNwo,
|
repositoryNwo: RepositoryNwo,
|
||||||
commitOid: string,
|
commitOid: string,
|
||||||
ref: string,
|
ref: string,
|
||||||
analysisKey: string | undefined,
|
analysisKey: string,
|
||||||
category: string | undefined,
|
category: string | undefined,
|
||||||
analysisName: string | undefined,
|
analysisName: string | undefined,
|
||||||
workflowRunID: number | undefined,
|
workflowRunID: number | undefined,
|
||||||
sourceRoot: string,
|
sourceRoot: string,
|
||||||
environment: string | undefined,
|
environment: string | undefined,
|
||||||
gitHubVersion: util.GitHubVersion,
|
gitHubVersion: util.GitHubVersion,
|
||||||
apiDetails: api.GitHubApiDetails,
|
|
||||||
logger: Logger
|
logger: Logger
|
||||||
): Promise<UploadResult> {
|
): Promise<UploadResult> {
|
||||||
logger.startGroup("Uploading results");
|
logger.startGroup("Uploading results");
|
||||||
|
|
@ -430,12 +380,7 @@ async function uploadFiles(
|
||||||
logger.debug(`Number of results in upload: ${numResultInSarif}`);
|
logger.debug(`Number of results in upload: ${numResultInSarif}`);
|
||||||
|
|
||||||
// Make the upload
|
// Make the upload
|
||||||
const sarifID = await uploadPayload(
|
const sarifID = await uploadPayload(payload, repositoryNwo, logger);
|
||||||
payload,
|
|
||||||
repositoryNwo,
|
|
||||||
apiDetails,
|
|
||||||
logger
|
|
||||||
);
|
|
||||||
|
|
||||||
logger.endGroup();
|
logger.endGroup();
|
||||||
|
|
||||||
|
|
@ -456,11 +401,10 @@ const STATUS_CHECK_TIMEOUT_MILLISECONDS = 2 * 60 * 1000;
|
||||||
export async function waitForProcessing(
|
export async function waitForProcessing(
|
||||||
repositoryNwo: RepositoryNwo,
|
repositoryNwo: RepositoryNwo,
|
||||||
sarifID: string,
|
sarifID: string,
|
||||||
apiDetails: api.GitHubApiDetails,
|
|
||||||
logger: Logger
|
logger: Logger
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
logger.startGroup("Waiting for processing to finish");
|
logger.startGroup("Waiting for processing to finish");
|
||||||
const client = api.getApiClient(apiDetails);
|
const client = api.getApiClient();
|
||||||
|
|
||||||
const statusCheckingStarted = Date.now();
|
const statusCheckingStarted = Date.now();
|
||||||
// eslint-disable-next-line no-constant-condition
|
// eslint-disable-next-line no-constant-condition
|
||||||
|
|
@ -510,31 +454,28 @@ export async function waitForProcessing(
|
||||||
}
|
}
|
||||||
|
|
||||||
export function validateUniqueCategory(sarif: SarifFile): void {
|
export function validateUniqueCategory(sarif: SarifFile): void {
|
||||||
// This check only works on actions as env vars don't persist between calls to the runner
|
// duplicate categories are allowed in the same sarif file
|
||||||
if (util.isActions()) {
|
// but not across multiple sarif files
|
||||||
// duplicate categories are allowed in the same sarif file
|
const categories = {} as Record<string, { id?: string; tool?: string }>;
|
||||||
// but not across multiple sarif files
|
|
||||||
const categories = {} as Record<string, { id?: string; tool?: string }>;
|
|
||||||
|
|
||||||
for (const run of sarif.runs) {
|
for (const run of sarif.runs) {
|
||||||
const id = run?.automationDetails?.id;
|
const id = run?.automationDetails?.id;
|
||||||
const tool = run.tool?.driver?.name;
|
const tool = run.tool?.driver?.name;
|
||||||
const category = `${sanitize(id)}_${sanitize(tool)}`;
|
const category = `${sanitize(id)}_${sanitize(tool)}`;
|
||||||
categories[category] = { id, tool };
|
categories[category] = { id, tool };
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const [category, { id, tool }] of Object.entries(categories)) {
|
for (const [category, { id, tool }] of Object.entries(categories)) {
|
||||||
const sentinelEnvVar = `CODEQL_UPLOAD_SARIF_${category}`;
|
const sentinelEnvVar = `CODEQL_UPLOAD_SARIF_${category}`;
|
||||||
if (process.env[sentinelEnvVar]) {
|
if (process.env[sentinelEnvVar]) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
"Aborting upload: only one run of the codeql/analyze or codeql/upload-sarif actions is allowed per job per tool/category. " +
|
"Aborting upload: only one run of the codeql/analyze or codeql/upload-sarif actions is allowed per job per tool/category. " +
|
||||||
"The easiest fix is to specify a unique value for the `category` input. If .runs[].automationDetails.id is specified " +
|
"The easiest fix is to specify a unique value for the `category` input. If .runs[].automationDetails.id is specified " +
|
||||||
"in the sarif file, that will take precedence over your configured `category`. " +
|
"in the sarif file, that will take precedence over your configured `category`. " +
|
||||||
`Category: (${id ? id : "none"}) Tool: (${tool ? tool : "none"})`
|
`Category: (${id ? id : "none"}) Tool: (${tool ? tool : "none"})`
|
||||||
);
|
);
|
||||||
}
|
|
||||||
core.exportVariable(sentinelEnvVar, sentinelEnvVar);
|
|
||||||
}
|
}
|
||||||
|
core.exportVariable(sentinelEnvVar, sentinelEnvVar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import * as core from "@actions/core";
|
import * as core from "@actions/core";
|
||||||
|
|
||||||
import * as actionsUtil from "./actions-util";
|
import * as actionsUtil from "./actions-util";
|
||||||
import { getApiDetails, getGitHubVersionActionsOnly } from "./api-client";
|
import { getGitHubVersion } from "./api-client";
|
||||||
import { getActionsLogger } from "./logging";
|
import { getActionsLogger } from "./logging";
|
||||||
import { parseRepositoryNwo } from "./repository";
|
import { parseRepositoryNwo } from "./repository";
|
||||||
import * as upload_lib from "./upload-lib";
|
import * as upload_lib from "./upload-lib";
|
||||||
|
|
@ -10,7 +10,6 @@ import {
|
||||||
getRequiredEnvParam,
|
getRequiredEnvParam,
|
||||||
initializeEnvironment,
|
initializeEnvironment,
|
||||||
isInTestMode,
|
isInTestMode,
|
||||||
Mode,
|
|
||||||
} from "./util";
|
} from "./util";
|
||||||
|
|
||||||
// eslint-disable-next-line import/no-commonjs
|
// eslint-disable-next-line import/no-commonjs
|
||||||
|
|
@ -38,7 +37,7 @@ async function sendSuccessStatusReport(
|
||||||
|
|
||||||
async function run() {
|
async function run() {
|
||||||
const startedAt = new Date();
|
const startedAt = new Date();
|
||||||
initializeEnvironment(Mode.actions, pkg.version);
|
initializeEnvironment(pkg.version);
|
||||||
await checkActionVersion(pkg.version);
|
await checkActionVersion(pkg.version);
|
||||||
if (
|
if (
|
||||||
!(await actionsUtil.sendStatusReport(
|
!(await actionsUtil.sendStatusReport(
|
||||||
|
|
@ -53,13 +52,11 @@ async function run() {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const apiDetails = getApiDetails();
|
const gitHubVersion = await getGitHubVersion();
|
||||||
const gitHubVersion = await getGitHubVersionActionsOnly();
|
|
||||||
|
|
||||||
const uploadResult = await upload_lib.uploadFromActions(
|
const uploadResult = await upload_lib.uploadFromActions(
|
||||||
actionsUtil.getRequiredInput("sarif_file"),
|
actionsUtil.getRequiredInput("sarif_file"),
|
||||||
gitHubVersion,
|
gitHubVersion,
|
||||||
apiDetails,
|
|
||||||
getActionsLogger()
|
getActionsLogger()
|
||||||
);
|
);
|
||||||
core.setOutput("sarif-id", uploadResult.sarifID);
|
core.setOutput("sarif-id", uploadResult.sarifID);
|
||||||
|
|
@ -71,7 +68,6 @@ async function run() {
|
||||||
await upload_lib.waitForProcessing(
|
await upload_lib.waitForProcessing(
|
||||||
parseRepositoryNwo(getRequiredEnvParam("GITHUB_REPOSITORY")),
|
parseRepositoryNwo(getRequiredEnvParam("GITHUB_REPOSITORY")),
|
||||||
uploadResult.sarifID,
|
uploadResult.sarifID,
|
||||||
apiDetails,
|
|
||||||
getActionsLogger()
|
getActionsLogger()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,15 @@
|
||||||
import * as fs from "fs";
|
import * as fs from "fs";
|
||||||
import * as os from "os";
|
import * as os from "os";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import * as stream from "stream";
|
|
||||||
|
|
||||||
import * as core from "@actions/core";
|
import * as core from "@actions/core";
|
||||||
import * as github from "@actions/github";
|
import * as github from "@actions/github";
|
||||||
import test, { ExecutionContext } from "ava";
|
import test from "ava";
|
||||||
import * as sinon from "sinon";
|
import * as sinon from "sinon";
|
||||||
|
|
||||||
import * as api from "./api-client";
|
import * as api from "./api-client";
|
||||||
import { Config } from "./config-utils";
|
import { Config } from "./config-utils";
|
||||||
import { getRunnerLogger, Logger } from "./logging";
|
import { getRunnerLogger } from "./logging";
|
||||||
import { setupTests } from "./testing-utils";
|
import { setupTests } from "./testing-utils";
|
||||||
import * as util from "./util";
|
import * as util from "./util";
|
||||||
|
|
||||||
|
|
@ -240,65 +239,6 @@ test("getGitHubVersion", async (t) => {
|
||||||
t.deepEqual({ type: util.GitHubVariant.DOTCOM }, v3);
|
t.deepEqual({ type: util.GitHubVariant.DOTCOM }, v3);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("getGitHubAuth", async (t) => {
|
|
||||||
const msgs: string[] = [];
|
|
||||||
const mockLogger = {
|
|
||||||
warning: (msg: string) => msgs.push(msg),
|
|
||||||
} as unknown as Logger;
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
||||||
t.throwsAsync(async () => util.getGitHubAuth(mockLogger, "abc", true));
|
|
||||||
|
|
||||||
process.env.GITHUB_TOKEN = "123";
|
|
||||||
t.is("123", await util.getGitHubAuth(mockLogger, undefined, undefined));
|
|
||||||
t.is(msgs.length, 0);
|
|
||||||
t.is("abc", await util.getGitHubAuth(mockLogger, "abc", undefined));
|
|
||||||
t.is(msgs.length, 1); // warning expected
|
|
||||||
|
|
||||||
msgs.length = 0;
|
|
||||||
await mockStdInForAuth(t, mockLogger, "def", "def");
|
|
||||||
await mockStdInForAuth(t, mockLogger, "def", "", "def");
|
|
||||||
await mockStdInForAuth(
|
|
||||||
t,
|
|
||||||
mockLogger,
|
|
||||||
"def",
|
|
||||||
"def\n some extra garbage",
|
|
||||||
"ghi"
|
|
||||||
);
|
|
||||||
await mockStdInForAuth(t, mockLogger, "defghi", "def", "ghi\n123");
|
|
||||||
|
|
||||||
await mockStdInForAuthExpectError(t, mockLogger, "");
|
|
||||||
await mockStdInForAuthExpectError(t, mockLogger, "", " ", "abc");
|
|
||||||
await mockStdInForAuthExpectError(
|
|
||||||
t,
|
|
||||||
mockLogger,
|
|
||||||
" def\n some extra garbage",
|
|
||||||
"ghi"
|
|
||||||
);
|
|
||||||
t.is(msgs.length, 0);
|
|
||||||
});
|
|
||||||
|
|
||||||
async function mockStdInForAuth(
|
|
||||||
t: ExecutionContext<any>,
|
|
||||||
mockLogger: Logger,
|
|
||||||
expected: string,
|
|
||||||
...text: string[]
|
|
||||||
) {
|
|
||||||
const stdin = stream.Readable.from(text) as any;
|
|
||||||
t.is(expected, await util.getGitHubAuth(mockLogger, undefined, true, stdin));
|
|
||||||
}
|
|
||||||
|
|
||||||
async function mockStdInForAuthExpectError(
|
|
||||||
t: ExecutionContext<unknown>,
|
|
||||||
mockLogger: Logger,
|
|
||||||
...text: string[]
|
|
||||||
) {
|
|
||||||
const stdin = stream.Readable.from(text) as any;
|
|
||||||
await t.throwsAsync(async () =>
|
|
||||||
util.getGitHubAuth(mockLogger, undefined, true, stdin)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const ML_POWERED_JS_STATUS_TESTS: Array<[string[], string]> = [
|
const ML_POWERED_JS_STATUS_TESTS: Array<[string[], string]> = [
|
||||||
// If no packs are loaded, status is false.
|
// If no packs are loaded, status is false.
|
||||||
[[], "false"],
|
[[], "false"],
|
||||||
|
|
@ -406,9 +346,8 @@ for (const [
|
||||||
test(`checkActionVersion ${reportWarningDescription} for ${versionsDescription}`, async (t) => {
|
test(`checkActionVersion ${reportWarningDescription} for ${versionsDescription}`, async (t) => {
|
||||||
const warningSpy = sinon.spy(core, "warning");
|
const warningSpy = sinon.spy(core, "warning");
|
||||||
const versionStub = sinon
|
const versionStub = sinon
|
||||||
.stub(api, "getGitHubVersionActionsOnly")
|
.stub(api, "getGitHubVersion")
|
||||||
.resolves(githubVersion);
|
.resolves(githubVersion);
|
||||||
const isActionsStub = sinon.stub(util, "isActions").returns(true);
|
|
||||||
await util.checkActionVersion(version);
|
await util.checkActionVersion(version);
|
||||||
if (shouldReportWarning) {
|
if (shouldReportWarning) {
|
||||||
t.true(
|
t.true(
|
||||||
|
|
@ -420,7 +359,6 @@ for (const [
|
||||||
t.false(warningSpy.called);
|
t.false(warningSpy.called);
|
||||||
}
|
}
|
||||||
versionStub.restore();
|
versionStub.restore();
|
||||||
isActionsStub.restore();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
137
src/util.ts
137
src/util.ts
|
|
@ -1,7 +1,6 @@
|
||||||
import * as fs from "fs";
|
import * as fs from "fs";
|
||||||
import * as os from "os";
|
import * as os from "os";
|
||||||
import * as path from "path";
|
import * as path from "path";
|
||||||
import { Readable } from "stream";
|
|
||||||
import { promisify } from "util";
|
import { promisify } from "util";
|
||||||
|
|
||||||
import * as core from "@actions/core";
|
import * as core from "@actions/core";
|
||||||
|
|
@ -329,7 +328,7 @@ export async function getGitHubVersion(
|
||||||
|
|
||||||
// Doesn't strictly have to be the meta endpoint as we're only
|
// Doesn't strictly have to be the meta endpoint as we're only
|
||||||
// using the response headers which are available on every request.
|
// using the response headers which are available on every request.
|
||||||
const apiClient = getApiClient(apiDetails);
|
const apiClient = getApiClient();
|
||||||
const response = await apiClient.meta.get();
|
const response = await apiClient.meta.get();
|
||||||
|
|
||||||
// This happens on dotcom, although we expect to have already returned in that
|
// This happens on dotcom, although we expect to have already returned in that
|
||||||
|
|
@ -348,8 +347,7 @@ export async function getGitHubVersion(
|
||||||
|
|
||||||
export function checkGitHubVersionInRange(
|
export function checkGitHubVersionInRange(
|
||||||
version: GitHubVersion,
|
version: GitHubVersion,
|
||||||
logger: Logger,
|
logger: Logger
|
||||||
toolName: Mode
|
|
||||||
) {
|
) {
|
||||||
if (hasBeenWarnedAboutVersion || version.type !== GitHubVariant.GHES) {
|
if (hasBeenWarnedAboutVersion || version.type !== GitHubVariant.GHES) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -365,20 +363,18 @@ export function checkGitHubVersionInRange(
|
||||||
disallowedAPIVersionReason === DisallowedAPIVersionReason.ACTION_TOO_OLD
|
disallowedAPIVersionReason === DisallowedAPIVersionReason.ACTION_TOO_OLD
|
||||||
) {
|
) {
|
||||||
logger.warning(
|
logger.warning(
|
||||||
`The CodeQL ${toolName} version you are using is too old to be compatible with GitHub Enterprise ${version.version}. If you experience issues, please upgrade to a more recent version of the CodeQL ${toolName}.`
|
`The CodeQL Action version you are using is too old to be compatible with GitHub Enterprise ${version.version}. If you experience issues, please upgrade to a more recent version of the CodeQL Action.`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
disallowedAPIVersionReason === DisallowedAPIVersionReason.ACTION_TOO_NEW
|
disallowedAPIVersionReason === DisallowedAPIVersionReason.ACTION_TOO_NEW
|
||||||
) {
|
) {
|
||||||
logger.warning(
|
logger.warning(
|
||||||
`GitHub Enterprise ${version.version} is too old to be compatible with this version of the CodeQL ${toolName}. If you experience issues, please upgrade to a more recent version of GitHub Enterprise or use an older version of the CodeQL ${toolName}.`
|
`GitHub Enterprise ${version.version} is too old to be compatible with this version of the CodeQL Action. If you experience issues, please upgrade to a more recent version of GitHub Enterprise or use an older version of the CodeQL Action.`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
hasBeenWarnedAboutVersion = true;
|
hasBeenWarnedAboutVersion = true;
|
||||||
if (isActions()) {
|
core.exportVariable(CODEQL_ACTION_WARNED_ABOUT_VERSION_ENV_VAR, true);
|
||||||
core.exportVariable(CODEQL_ACTION_WARNED_ABOUT_VERSION_ENV_VAR, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum DisallowedAPIVersionReason {
|
export enum DisallowedAPIVersionReason {
|
||||||
|
|
@ -400,71 +396,6 @@ export function apiVersionInRange(
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves the github auth token for use with the runner. There are
|
|
||||||
* three possible locations for the token:
|
|
||||||
*
|
|
||||||
* 1. from the cli (considered insecure)
|
|
||||||
* 2. from stdin
|
|
||||||
* 3. from the GITHUB_TOKEN environment variable
|
|
||||||
*
|
|
||||||
* If both 1 & 2 are specified, then an error is thrown.
|
|
||||||
* If 1 & 3 or 2 & 3 are specified, then the environment variable is ignored.
|
|
||||||
*
|
|
||||||
* @param githubAuth a github app token or PAT
|
|
||||||
* @param fromStdIn read the github app token or PAT from stdin up to, but excluding the first whitespace
|
|
||||||
* @param readable the readable stream to use for getting the token (defaults to stdin)
|
|
||||||
*
|
|
||||||
* @return a promise resolving to the auth token.
|
|
||||||
*/
|
|
||||||
export async function getGitHubAuth(
|
|
||||||
logger: Logger,
|
|
||||||
githubAuth: string | undefined,
|
|
||||||
fromStdIn: boolean | undefined,
|
|
||||||
readable = process.stdin as Readable
|
|
||||||
): Promise<string> {
|
|
||||||
if (githubAuth && fromStdIn) {
|
|
||||||
throw new Error(
|
|
||||||
"Cannot specify both `--github-auth` and `--github-auth-stdin`. Please use `--github-auth-stdin`, which is more secure."
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (githubAuth) {
|
|
||||||
logger.warning(
|
|
||||||
"Using `--github-auth` via the CLI is insecure. Use `--github-auth-stdin` instead."
|
|
||||||
);
|
|
||||||
return githubAuth;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fromStdIn) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
let token = "";
|
|
||||||
readable.on("data", (data) => {
|
|
||||||
token += data.toString("utf8");
|
|
||||||
});
|
|
||||||
readable.on("end", () => {
|
|
||||||
token = token.split(/\s+/)[0].trim();
|
|
||||||
if (token) {
|
|
||||||
resolve(token);
|
|
||||||
} else {
|
|
||||||
reject(new Error("Standard input is empty"));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
readable.on("error", (err) => {
|
|
||||||
reject(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (process.env.GITHUB_TOKEN) {
|
|
||||||
return process.env.GITHUB_TOKEN;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new Error(
|
|
||||||
"No GitHub authentication token was specified. Please provide a token via the GITHUB_TOKEN environment variable, or by adding the `--github-auth-stdin` flag and passing the token via standard input."
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This error is used to indicate a runtime failure of an exhaustivity check enforced at compile time.
|
* This error is used to indicate a runtime failure of an exhaustivity check enforced at compile time.
|
||||||
*/
|
*/
|
||||||
|
|
@ -482,22 +413,11 @@ export function assertNever(value: never): never {
|
||||||
throw new ExhaustivityCheckingError(value);
|
throw new ExhaustivityCheckingError(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum Mode {
|
|
||||||
actions = "Action",
|
|
||||||
runner = "Runner",
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Environment variables to be set by codeql-action and used by the
|
* Environment variables to be set by codeql-action and used by the
|
||||||
* CLI. These environment variables are relevant for both the runner
|
* CLI.
|
||||||
* and the action.
|
|
||||||
*/
|
*/
|
||||||
export enum EnvVar {
|
export enum EnvVar {
|
||||||
/**
|
|
||||||
* The mode of the codeql-action, either 'actions' or 'runner'.
|
|
||||||
*/
|
|
||||||
RUN_MODE = "CODEQL_ACTION_RUN_MODE",
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Semver of the codeql-action as specified in package.json.
|
* Semver of the codeql-action as specified in package.json.
|
||||||
*/
|
*/
|
||||||
|
|
@ -529,55 +449,30 @@ export enum EnvVar {
|
||||||
FEATURE_SANDWICH = "CODEQL_ACTION_FEATURE_SANDWICH",
|
FEATURE_SANDWICH = "CODEQL_ACTION_FEATURE_SANDWICH",
|
||||||
}
|
}
|
||||||
|
|
||||||
const exportVar = (mode: Mode, name: string, value: string) => {
|
|
||||||
if (mode === Mode.actions) {
|
|
||||||
core.exportVariable(name, value);
|
|
||||||
} else {
|
|
||||||
process.env[name] = value;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set some initial environment variables that we can set even without
|
* Set some initial environment variables that we can set even without
|
||||||
* knowing what version of CodeQL we're running.
|
* knowing what version of CodeQL we're running.
|
||||||
*/
|
*/
|
||||||
export function initializeEnvironment(mode: Mode, version: string) {
|
export function initializeEnvironment(version: string) {
|
||||||
exportVar(mode, EnvVar.RUN_MODE, mode);
|
core.exportVariable(EnvVar.VERSION, version);
|
||||||
exportVar(mode, EnvVar.VERSION, version);
|
core.exportVariable(EnvVar.FEATURE_SARIF_COMBINE, "true");
|
||||||
exportVar(mode, EnvVar.FEATURE_SARIF_COMBINE, "true");
|
core.exportVariable(EnvVar.FEATURE_WILL_UPLOAD, "true");
|
||||||
exportVar(mode, EnvVar.FEATURE_WILL_UPLOAD, "true");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enrich the environment variables with further flags that we cannot
|
* Enrich the environment variables with further flags that we cannot
|
||||||
* know the value of until we know what version of CodeQL we're running.
|
* know the value of until we know what version of CodeQL we're running.
|
||||||
*/
|
*/
|
||||||
export async function enrichEnvironment(mode: Mode, codeql: CodeQL) {
|
export async function enrichEnvironment(codeql: CodeQL) {
|
||||||
if (await codeQlVersionAbove(codeql, CODEQL_VERSION_NEW_TRACING)) {
|
if (await codeQlVersionAbove(codeql, CODEQL_VERSION_NEW_TRACING)) {
|
||||||
exportVar(mode, EnvVar.FEATURE_MULTI_LANGUAGE, "false");
|
core.exportVariable(EnvVar.FEATURE_MULTI_LANGUAGE, "false");
|
||||||
exportVar(mode, EnvVar.FEATURE_SANDWICH, "false");
|
core.exportVariable(EnvVar.FEATURE_SANDWICH, "false");
|
||||||
} else {
|
} else {
|
||||||
exportVar(mode, EnvVar.FEATURE_MULTI_LANGUAGE, "true");
|
core.exportVariable(EnvVar.FEATURE_MULTI_LANGUAGE, "true");
|
||||||
exportVar(mode, EnvVar.FEATURE_SANDWICH, "true");
|
core.exportVariable(EnvVar.FEATURE_SANDWICH, "true");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getMode(): Mode {
|
|
||||||
// Make sure we fail fast if the env var is missing. This should
|
|
||||||
// only happen if there is a bug in our code and we neglected
|
|
||||||
// to set the mode early in the process.
|
|
||||||
const mode = getRequiredEnvParam(EnvVar.RUN_MODE);
|
|
||||||
|
|
||||||
if (mode !== Mode.actions && mode !== Mode.runner) {
|
|
||||||
throw new Error(`Unknown mode: ${mode}.`);
|
|
||||||
}
|
|
||||||
return mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function isActions(): boolean {
|
|
||||||
return getMode() === Mode.actions;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get an environment parameter, but throw an error if it is not set.
|
* Get an environment parameter, but throw an error if it is not set.
|
||||||
*/
|
*/
|
||||||
|
|
@ -739,7 +634,7 @@ export function getMlPoweredJsQueriesStatus(config: Config): string {
|
||||||
*/
|
*/
|
||||||
export async function checkActionVersion(version: string) {
|
export async function checkActionVersion(version: string) {
|
||||||
if (!semver.satisfies(version, ">=2")) {
|
if (!semver.satisfies(version, ">=2")) {
|
||||||
const githubVersion = await api.getGitHubVersionActionsOnly();
|
const githubVersion = await api.getGitHubVersion();
|
||||||
// Only log a warning for versions of GHES that are compatible with CodeQL Action version 2.
|
// Only log a warning for versions of GHES that are compatible with CodeQL Action version 2.
|
||||||
//
|
//
|
||||||
// GHES 3.4 shipped without the v2 tag, but it also shipped without this warning message code.
|
// GHES 3.4 shipped without the v2 tag, but it also shipped without this warning message code.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue