From 8216c3a1b13903ae214c5ecf79d802c9ea6379f5 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Fri, 26 May 2023 12:22:18 +0100 Subject: [PATCH] Install CodeQL as part of the action --- lib/resolve-environment-action.js | 20 +++++++---- lib/resolve-environment-action.js.map | 2 +- resolve-environment/action.yml | 4 +++ src/resolve-environment-action.ts | 49 ++++++++++++++++++++++----- 4 files changed, 59 insertions(+), 16 deletions(-) diff --git a/lib/resolve-environment-action.js b/lib/resolve-environment-action.js index b75d83fa4..dfadda2b2 100644 --- a/lib/resolve-environment-action.js +++ b/lib/resolve-environment-action.js @@ -26,9 +26,11 @@ Object.defineProperty(exports, "__esModule", { value: true }); const core = __importStar(require("@actions/core")); const actions_util_1 = require("./actions-util"); const api_client_1 = require("./api-client"); -const configUtils = __importStar(require("./config-utils")); +const feature_flags_1 = require("./feature-flags"); +const init_1 = require("./init"); const languages_1 = require("./languages"); const logging_1 = require("./logging"); +const repository_1 = require("./repository"); const resolve_environment_1 = require("./resolve-environment"); const util_1 = require("./util"); const workflow_1 = require("./workflow"); @@ -37,6 +39,13 @@ async function run() { const startedAt = new Date(); const logger = (0, logging_1.getActionsLogger)(); const language = (0, languages_1.resolveAlias)((0, actions_util_1.getRequiredInput)("language")); + const apiDetails = { + auth: (0, actions_util_1.getRequiredInput)("token"), + externalRepoAuth: (0, actions_util_1.getOptionalInput)("external-repository-token"), + url: (0, util_1.getRequiredEnvParam)("GITHUB_SERVER_URL"), + apiURL: (0, util_1.getRequiredEnvParam)("GITHUB_API_URL"), + }; + const repositoryNwo = (0, repository_1.parseRepositoryNwo)((0, util_1.getRequiredEnvParam)("GITHUB_REPOSITORY")); try { const workflowErrors = await (0, workflow_1.validateWorkflow)(logger); if (!(await (0, actions_util_1.sendStatusReport)(await (0, actions_util_1.createStatusReportBase)(actionName, "starting", startedAt, workflowErrors)))) { @@ -44,16 +53,15 @@ async function run() { } const gitHubVersion = await (0, api_client_1.getGitHubVersion)(); (0, util_1.checkGitHubVersionInRange)(gitHubVersion, logger); - const config = await configUtils.getConfig((0, actions_util_1.getTemporaryDirectory)(), logger); - if (config === undefined) { - throw new Error("Config file could not be found at expected location. Has the 'init' action been called?"); - } + const features = new feature_flags_1.Features(gitHubVersion, repositoryNwo, (0, actions_util_1.getTemporaryDirectory)(), logger); + const codeQLDefaultVersionInfo = await features.getDefaultCliVersion(gitHubVersion.type); + const initCodeQLResult = await (0, init_1.initCodeQL)((0, actions_util_1.getOptionalInput)("tools"), apiDetails, (0, actions_util_1.getTemporaryDirectory)(), gitHubVersion.type, codeQLDefaultVersionInfo, logger); const workingDirectory = (0, actions_util_1.getOptionalInput)("working-directory"); if (workingDirectory) { logger.info(`Changing autobuilder working directory to ${workingDirectory}`); process.chdir(workingDirectory); } - const result = await (0, resolve_environment_1.runResolveBuildEnvironment)(config.codeQLCmd, logger, language); + const result = await (0, resolve_environment_1.runResolveBuildEnvironment)(initCodeQLResult.codeql.getPath(), logger, language); core.setOutput("environment", result); } catch (unwrappedError) { diff --git a/lib/resolve-environment-action.js.map b/lib/resolve-environment-action.js.map index 0183649b4..5f138ab46 100644 --- a/lib/resolve-environment-action.js.map +++ b/lib/resolve-environment-action.js.map @@ -1 +1 @@ -{"version":3,"file":"resolve-environment-action.js","sourceRoot":"","sources":["../src/resolve-environment-action.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAsC;AAEtC,iDAMwB;AACxB,6CAAgD;AAChD,4DAA8C;AAC9C,2CAAqD;AACrD,uCAA6C;AAC7C,+DAAmE;AACnE,iCAA+E;AAC/E,yCAA8C;AAE9C,MAAM,UAAU,GAAG,qBAAqB,CAAC;AAEzC,KAAK,UAAU,GAAG;IAChB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAA,0BAAgB,GAAE,CAAC;IAClC,MAAM,QAAQ,GAAa,IAAA,wBAAY,EAAC,IAAA,+BAAgB,EAAC,UAAU,CAAC,CAAC,CAAC;IAEtE,IAAI;QACF,MAAM,cAAc,GAAG,MAAM,IAAA,2BAAgB,EAAC,MAAM,CAAC,CAAC;QAEtD,IACE,CAAC,CAAC,MAAM,IAAA,+BAAgB,EACtB,MAAM,IAAA,qCAAsB,EAC1B,UAAU,EACV,UAAU,EACV,SAAS,EACT,cAAc,CACf,CACF,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,MAAM,gBAAgB,GAAG,IAAA,+BAAgB,EAAC,mBAAmB,CAAC,CAAC;QAC/D,IAAI,gBAAgB,EAAE;YACpB,MAAM,CAAC,IAAI,CACT,6CAA6C,gBAAgB,EAAE,CAChE,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;SACjC;QAED,MAAM,MAAM,GAAG,MAAM,IAAA,gDAA0B,EAC7C,MAAM,CAAC,SAAS,EAChB,MAAM,EACN,QAAQ,CACT,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;KACvC;IAAC,OAAO,cAAc,EAAE;QACvB,MAAM,KAAK,GAAG,IAAA,gBAAS,EAAC,cAAc,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,IAAA,+BAAgB,EACpB,MAAM,IAAA,qCAAsB,EAC1B,UAAU,EACV,SAAS,EACT,SAAS,EACT,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,KAAK,CACZ,CACF,CAAC;QACF,OAAO;KACR;AACH,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,IAAI;QACF,MAAM,GAAG,EAAE,CAAC;KACb;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,CAAC,SAAS,CAAC,GAAG,UAAU,mBAAmB,IAAA,gBAAS,EAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;KAC5E;IACD,MAAM,IAAA,sBAAe,GAAE,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,EAAE,CAAC"} \ No newline at end of file +{"version":3,"file":"resolve-environment-action.js","sourceRoot":"","sources":["../src/resolve-environment-action.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/resolve-environment/action.yml b/resolve-environment/action.yml index e858c9d8c..16a32df4c 100644 --- a/resolve-environment/action.yml +++ b/resolve-environment/action.yml @@ -2,6 +2,10 @@ name: 'CodeQL: Resolve Build Environment' description: 'Attempt to infer a suitable environment configuration for the autobuilder' author: 'GitHub' inputs: + tools: + description: URL of CodeQL tools + required: false + # If not specified the Action will check in several places until it finds the CodeQL tools. token: default: ${{ github.token }} matrix: diff --git a/src/resolve-environment-action.ts b/src/resolve-environment-action.ts index a549b408f..b5681503d 100644 --- a/src/resolve-environment-action.ts +++ b/src/resolve-environment-action.ts @@ -8,11 +8,18 @@ import { sendStatusReport, } from "./actions-util"; import { getGitHubVersion } from "./api-client"; -import * as configUtils from "./config-utils"; +import { Features } from "./feature-flags"; +import { initCodeQL } from "./init"; import { Language, resolveAlias } from "./languages"; import { getActionsLogger } from "./logging"; +import { parseRepositoryNwo } from "./repository"; import { runResolveBuildEnvironment } from "./resolve-environment"; -import { checkForTimeout, checkGitHubVersionInRange, wrapError } from "./util"; +import { + checkForTimeout, + checkGitHubVersionInRange, + getRequiredEnvParam, + wrapError, +} from "./util"; import { validateWorkflow } from "./workflow"; const actionName = "resolve-environment"; @@ -22,6 +29,17 @@ async function run() { const logger = getActionsLogger(); const language: Language = resolveAlias(getRequiredInput("language")); + const apiDetails = { + auth: getRequiredInput("token"), + externalRepoAuth: getOptionalInput("external-repository-token"), + url: getRequiredEnvParam("GITHUB_SERVER_URL"), + apiURL: getRequiredEnvParam("GITHUB_API_URL"), + }; + + const repositoryNwo = parseRepositoryNwo( + getRequiredEnvParam("GITHUB_REPOSITORY") + ); + try { const workflowErrors = await validateWorkflow(logger); @@ -41,12 +59,25 @@ async function run() { const gitHubVersion = await getGitHubVersion(); checkGitHubVersionInRange(gitHubVersion, logger); - const config = await configUtils.getConfig(getTemporaryDirectory(), logger); - if (config === undefined) { - throw new Error( - "Config file could not be found at expected location. Has the 'init' action been called?" - ); - } + const features = new Features( + gitHubVersion, + repositoryNwo, + getTemporaryDirectory(), + logger + ); + + const codeQLDefaultVersionInfo = await features.getDefaultCliVersion( + gitHubVersion.type + ); + + const initCodeQLResult = await initCodeQL( + getOptionalInput("tools"), + apiDetails, + getTemporaryDirectory(), + gitHubVersion.type, + codeQLDefaultVersionInfo, + logger + ); const workingDirectory = getOptionalInput("working-directory"); if (workingDirectory) { @@ -57,7 +88,7 @@ async function run() { } const result = await runResolveBuildEnvironment( - config.codeQLCmd, + initCodeQLResult.codeql.getPath(), logger, language );