diff --git a/lib/actions-util.js b/lib/actions-util.js index b9aefd777..d2a2b8cc5 100644 --- a/lib/actions-util.js +++ b/lib/actions-util.js @@ -7,10 +7,12 @@ var __importStar = (this && this.__importStar) || function (mod) { return result; }; Object.defineProperty(exports, "__esModule", { value: true }); +const fs = __importStar(require("fs")); const path = __importStar(require("path")); const core = __importStar(require("@actions/core")); const toolrunner = __importStar(require("@actions/exec/lib/toolrunner")); const safeWhich = __importStar(require("@chrisgavin/safe-which")); +const yaml = __importStar(require("js-yaml")); const api = __importStar(require("./api-client")); const sharedEnv = __importStar(require("./shared-environment")); const util_1 = require("./util"); @@ -96,10 +98,163 @@ exports.getCommitOid = async function () { return getRequiredEnvParam("GITHUB_SHA"); } }; +function isObject(o) { + return o !== null && typeof o === "object"; +} +var MissingTriggers; +(function (MissingTriggers) { + MissingTriggers[MissingTriggers["None"] = 0] = "None"; + MissingTriggers[MissingTriggers["Push"] = 1] = "Push"; + MissingTriggers[MissingTriggers["PullRequest"] = 2] = "PullRequest"; +})(MissingTriggers || (MissingTriggers = {})); +function toCodedErrors(errors) { + return Object.entries(errors).reduce((acc, [key, value]) => { + acc[key] = { message: value, code: key }; + return acc; + }, {}); +} +exports.WorkflowErrors = toCodedErrors({ + MismatchedBranches: `Please make sure that every branch in on.pull_request is also in on.push so that Code Scanning can compare pull requests against the state of the base branch.`, + MissingHooks: `Please specify on.push and on.pull_request hooks so that Code Scanning can compare pull requests against the state of the base branch.`, + MissingPullRequestHook: `Please specify an on.pull_request hook so that Code Scanning is run against pull requests.`, + MissingPushHook: `Please specify an on.push hook so that Code Scanning can compare pull requests against the state of the base branch.`, + PathsSpecified: `Using on.push.paths can prevent Code Scanning annotating new alerts in your pull requests.`, + PathsIgnoreSpecified: `Using on.push.paths-ignore can prevent Code Scanning annotating new alerts in your pull requests.`, + CheckoutWrongHead: `git checkout HEAD^2 is no longer necessary. Please remove this step as Code Scanning recommends analyzing the merge commit for best results.`, +}); +function validateWorkflow(doc) { + var _a, _b, _c, _d, _e; + const errors = []; + // .jobs[key].steps[].run + for (const job of Object.values(((_a = doc) === null || _a === void 0 ? void 0 : _a.jobs) || {})) { + for (const step of ((_b = job) === null || _b === void 0 ? void 0 : _b.steps) || []) { + // this was advice that we used to give in the README + // we actually want to run the analysis on the merge commit + // to produce results that are more inline with expectations + // (i.e: this is what will happen if you merge this PR) + // and avoid some race conditions + if (((_c = step) === null || _c === void 0 ? void 0 : _c.run) === "git checkout HEAD^2") { + errors.push(exports.WorkflowErrors.CheckoutWrongHead); + } + } + } + let missing = MissingTriggers.None; + if (doc.on === undefined) { + missing = MissingTriggers.Push | MissingTriggers.PullRequest; + } + else if (typeof doc.on === "string") { + switch (doc.on) { + case "push": + missing = MissingTriggers.PullRequest; + break; + case "pull_request": + missing = MissingTriggers.Push; + break; + default: + missing = MissingTriggers.Push | MissingTriggers.PullRequest; + break; + } + } + else if (Array.isArray(doc.on)) { + if (!doc.on.includes("push")) { + missing = missing | MissingTriggers.Push; + } + if (!doc.on.includes("pull_request")) { + missing = missing | MissingTriggers.PullRequest; + } + } + else if (isObject(doc.on)) { + if (!Object.prototype.hasOwnProperty.call(doc.on, "pull_request")) { + missing = missing | MissingTriggers.PullRequest; + } + if (!Object.prototype.hasOwnProperty.call(doc.on, "push")) { + missing = missing | MissingTriggers.Push; + } + else { + const paths = (_d = doc.on.push) === null || _d === void 0 ? void 0 : _d.paths; + // if you specify paths or paths-ignore you can end up with commits that have no baseline + // if they didn't change any files + // currently we cannot go back through the history and find the most recent baseline + if (Array.isArray(paths) && paths.length > 0) { + errors.push(exports.WorkflowErrors.PathsSpecified); + } + const pathsIgnore = (_e = doc.on.push) === null || _e === void 0 ? void 0 : _e["paths-ignore"]; + if (Array.isArray(pathsIgnore) && pathsIgnore.length > 0) { + errors.push(exports.WorkflowErrors.PathsIgnoreSpecified); + } + } + if (doc.on.push) { + const push = doc.on.push.branches || []; + if (doc.on.pull_request) { + const pull_request = doc.on.pull_request.branches || []; + const difference = pull_request.filter((value) => !push.includes(value)); + if (difference.length > 0) { + // there are branches in pull_request that may not have a baseline + // because we are not building them on push + errors.push(exports.WorkflowErrors.MismatchedBranches); + } + } + else if (push.length > 0) { + // push is set up to run on a subset of branches + // and you could open a PR against a branch with no baseline + errors.push(exports.WorkflowErrors.MismatchedBranches); + } + } + } + switch (missing) { + case MissingTriggers.PullRequest | MissingTriggers.Push: + errors.push(exports.WorkflowErrors.MissingHooks); + break; + case MissingTriggers.PullRequest: + errors.push(exports.WorkflowErrors.MissingPullRequestHook); + break; + case MissingTriggers.Push: + errors.push(exports.WorkflowErrors.MissingPushHook); + break; + } + return errors; +} +exports.validateWorkflow = validateWorkflow; +async function getWorkflowErrors() { + const workflow = await getWorkflow(); + if (workflow === undefined) { + return []; + } + return validateWorkflow(workflow); +} +exports.getWorkflowErrors = getWorkflowErrors; +function formatWorkflowErrors(errors) { + const issuesWere = errors.length === 1 ? "issue was" : "issues were"; + const errorsList = errors.map((e) => e.message).join(" "); + return `${errors.length} ${issuesWere} detected with this workflow: ${errorsList}`; +} +exports.formatWorkflowErrors = formatWorkflowErrors; +function formatWorkflowCause(errors) { + if (errors.length === 0) { + return undefined; + } + return errors.map((e) => e.code).join(","); +} +exports.formatWorkflowCause = formatWorkflowCause; +async function getWorkflow() { + const relativePath = await getWorkflowPath(); + const absolutePath = path.join(getRequiredEnvParam("GITHUB_WORKSPACE"), relativePath); + try { + return yaml.safeLoad(fs.readFileSync(absolutePath, "utf-8")); + } + catch (e) { + core.warning(`Could not read workflow: ${e.toString()}`); + return undefined; + } +} +exports.getWorkflow = getWorkflow; /** * Get the path of the currently executing workflow. */ async function getWorkflowPath() { + if (util_1.isLocalRun()) { + return getRequiredEnvParam("WORKFLOW_PATH"); + } const repo_nwo = getRequiredEnvParam("GITHUB_REPOSITORY").split("/"); const owner = repo_nwo[0]; const repo = repo_nwo[1]; diff --git a/lib/actions-util.js.map b/lib/actions-util.js.map index a1d8d68a0..297a109ee 100644 --- a/lib/actions-util.js.map +++ b/lib/actions-util.js.map @@ -1 +1 @@ -{"version":3,"file":"actions-util.js","sourceRoot":"","sources":["../src/actions-util.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"actions-util.js","sourceRoot":"","sources":["../src/actions-util.ts"],"names":[],"mappings":";;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,oDAAsC;AACtC,yEAA2D;AAC3D,kEAAoD;AACpD,8CAAgC;AAEhC,kDAAoC;AACpC,gEAAkD;AAClD,iCAAuD;AAEvD;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC;AAFD,4CAEC;AAED;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC;AAHD,4CAGC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,SAAiB;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7C,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,mCAAmC,CAAC,CAAC;KAClE;IACD,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC;AACf,CAAC;AAPD,kDAOC;AAED;;GAEG;AACH,SAAgB,0BAA0B;IACxC,IAAI,CAAC,iBAAU,EAAE,EAAE;QACjB,OAAO;KACR;IAED,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE;QAC3B,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;KAClD;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE;QAC3C,IAAI,CAAC,cAAc,CACjB,4BAA4B,EAC5B,aAAa,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CACtC,CAAC;KACH;AACH,CAAC;AAfD,gEAeC;AAED;;GAEG;AACU,QAAA,YAAY,GAAG,KAAK;IAC/B,mEAAmE;IACnE,8EAA8E;IAC9E,6EAA6E;IAC7E,4EAA4E;IAC5E,2DAA2D;IAC3D,wEAAwE;IACxE,gCAAgC;IAChC,IAAI;QACF,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,MAAM,IAAI,UAAU,CAAC,UAAU,CAC7B,MAAM,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,EAChC,CAAC,WAAW,EAAE,MAAM,CAAC,EACrB;YACE,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE;gBACT,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBACf,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC/B,CAAC;gBACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;aACF;SACF,CACF,CAAC,IAAI,EAAE,CAAC;QACT,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC;KACzB;IAAC,OAAO,CAAC,EAAE;QACV,IAAI,CAAC,IAAI,CACP,oFAAoF,CAAC,EAAE,CACxF,CAAC;QACF,OAAO,mBAAmB,CAAC,YAAY,CAAC,CAAC;KAC1C;AACH,CAAC,CAAC;AA8BF,SAAS,QAAQ,CAAC,CAAU;IAC1B,OAAO,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC;AAC7C,CAAC;AAED,IAAK,eAIJ;AAJD,WAAK,eAAe;IAClB,qDAAQ,CAAA;IACR,qDAAQ,CAAA;IACR,mEAAe,CAAA;AACjB,CAAC,EAJI,eAAe,KAAf,eAAe,QAInB;AAOD,SAAS,aAAa,CAAC,MAEtB;IACC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACzD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QACzC,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAsC,CAAC,CAAC;AAC7C,CAAC;AAEY,QAAA,cAAc,GAAG,aAAa,CAAC;IAC1C,kBAAkB,EAAE,gKAAgK;IACpL,YAAY,EAAE,wIAAwI;IACtJ,sBAAsB,EAAE,4FAA4F;IACpH,eAAe,EAAE,sHAAsH;IACvI,cAAc,EAAE,4FAA4F;IAC5G,oBAAoB,EAAE,mGAAmG;IACzH,iBAAiB,EAAE,8IAA8I;CAClK,CAAC,CAAC;AAEH,SAAgB,gBAAgB,CAAC,GAAa;;IAC5C,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,yBAAyB;IACzB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAA,GAAG,0CAAE,IAAI,KAAI,EAAE,CAAC,EAAE;QAChD,KAAK,MAAM,IAAI,IAAI,OAAA,GAAG,0CAAE,KAAK,KAAI,EAAE,EAAE;YACnC,qDAAqD;YACrD,2DAA2D;YAC3D,4DAA4D;YAC5D,uDAAuD;YACvD,iCAAiC;YACjC,IAAI,OAAA,IAAI,0CAAE,GAAG,MAAK,qBAAqB,EAAE;gBACvC,MAAM,CAAC,IAAI,CAAC,sBAAc,CAAC,iBAAiB,CAAC,CAAC;aAC/C;SACF;KACF;IAED,IAAI,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC;IAEnC,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS,EAAE;QACxB,OAAO,GAAG,eAAe,CAAC,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC;KAC9D;SAAM,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,EAAE;QACrC,QAAQ,GAAG,CAAC,EAAE,EAAE;YACd,KAAK,MAAM;gBACT,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC;gBACtC,MAAM;YACR,KAAK,cAAc;gBACjB,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC;gBAC/B,MAAM;YACR;gBACE,OAAO,GAAG,eAAe,CAAC,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC;gBAC7D,MAAM;SACT;KACF;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAChC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC5B,OAAO,GAAG,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC;SAC1C;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;YACpC,OAAO,GAAG,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC;SACjD;KACF;SAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE;YACjE,OAAO,GAAG,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC;SACjD;QACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE;YACzD,OAAO,GAAG,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC;SAC1C;aAAM;YACL,MAAM,KAAK,SAAG,GAAG,CAAC,EAAE,CAAC,IAAI,0CAAE,KAAK,CAAC;YACjC,yFAAyF;YACzF,kCAAkC;YAClC,oFAAoF;YACpF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5C,MAAM,CAAC,IAAI,CAAC,sBAAc,CAAC,cAAc,CAAC,CAAC;aAC5C;YACD,MAAM,WAAW,SAAG,GAAG,CAAC,EAAE,CAAC,IAAI,0CAAG,cAAc,CAAC,CAAC;YAClD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBACxD,MAAM,CAAC,IAAI,CAAC,sBAAc,CAAC,oBAAoB,CAAC,CAAC;aAClD;SACF;QAED,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE;YACf,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;YAExC,IAAI,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE;gBACvB,MAAM,YAAY,GAAG,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,IAAI,EAAE,CAAC;gBACxD,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CACpC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CACjC,CAAC;gBACF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,kEAAkE;oBAClE,2CAA2C;oBAC3C,MAAM,CAAC,IAAI,CAAC,sBAAc,CAAC,kBAAkB,CAAC,CAAC;iBAChD;aACF;iBAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,gDAAgD;gBAChD,4DAA4D;gBAC5D,MAAM,CAAC,IAAI,CAAC,sBAAc,CAAC,kBAAkB,CAAC,CAAC;aAChD;SACF;KACF;IAED,QAAQ,OAAO,EAAE;QACf,KAAK,eAAe,CAAC,WAAW,GAAG,eAAe,CAAC,IAAI;YACrD,MAAM,CAAC,IAAI,CAAC,sBAAc,CAAC,YAAY,CAAC,CAAC;YACzC,MAAM;QACR,KAAK,eAAe,CAAC,WAAW;YAC9B,MAAM,CAAC,IAAI,CAAC,sBAAc,CAAC,sBAAsB,CAAC,CAAC;YACnD,MAAM;QACR,KAAK,eAAe,CAAC,IAAI;YACvB,MAAM,CAAC,IAAI,CAAC,sBAAc,CAAC,eAAe,CAAC,CAAC;YAC5C,MAAM;KACT;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AA9FD,4CA8FC;AAEM,KAAK,UAAU,iBAAiB;IACrC,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;IAErC,IAAI,QAAQ,KAAK,SAAS,EAAE;QAC1B,OAAO,EAAE,CAAC;KACX;IAED,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AARD,8CAQC;AAED,SAAgB,oBAAoB,CAAC,MAAoB;IACvD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC;IAErE,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE1D,OAAO,GAAG,MAAM,CAAC,MAAM,IAAI,UAAU,iCAAiC,UAAU,EAAE,CAAC;AACrF,CAAC;AAND,oDAMC;AAED,SAAgB,mBAAmB,CAAC,MAAoB;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO,SAAS,CAAC;KAClB;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7C,CAAC;AALD,kDAKC;AAEM,KAAK,UAAU,WAAW;IAC/B,MAAM,YAAY,GAAG,MAAM,eAAe,EAAE,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAC5B,mBAAmB,CAAC,kBAAkB,CAAC,EACvC,YAAY,CACb,CAAC;IAEF,IAAI;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;KAC9D;IAAC,OAAO,CAAC,EAAE;QACV,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACzD,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AAbD,kCAaC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe;IAC5B,IAAI,iBAAU,EAAE,EAAE;QAChB,OAAO,mBAAmB,CAAC,eAAe,CAAC,CAAC;KAC7C;IAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC;IAE5D,MAAM,SAAS,GAAG,GAAG,CAAC,mBAAmB,EAAE,CAAC;IAC5C,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,OAAO,CAC1C,8CAA8C,EAC9C;QACE,KAAK;QACL,IAAI;QACJ,MAAM;KACP,CACF,CAAC;IACF,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;IAEnD,MAAM,gBAAgB,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,WAAW,EAAE,CAAC,CAAC;IAEvE,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB;IAC9B,MAAM,aAAa,GAAG,QAAQ,CAAC,mBAAmB,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;IACzE,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;KACxE;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAND,4CAMC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,cAAc;IAClC,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;IAEvD,IAAI,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACjD,IAAI,WAAW,KAAK,SAAS,EAAE;QAC7B,OAAO,WAAW,CAAC;KACpB;IAED,MAAM,YAAY,GAAG,MAAM,eAAe,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAElD,WAAW,GAAG,GAAG,YAAY,IAAI,OAAO,EAAE,CAAC;IAC3C,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;IACpD,OAAO,WAAW,CAAC;AACrB,CAAC;AAdD,wCAcC;AAED;;GAEG;AACI,KAAK,UAAU,MAAM;IAC1B,0DAA0D;IAC1D,6DAA6D;IAC7D,MAAM,GAAG,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAE9C,+DAA+D;IAC/D,iEAAiE;IACjE,+DAA+D;IAC/D,kBAAkB;IAClB,MAAM,cAAc,GAAG,0BAA0B,CAAC;IAClD,MAAM,WAAW,GAAG,MAAM,oBAAY,EAAE,CAAC;IAEzC,IACE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;QACxB,WAAW,KAAK,mBAAmB,CAAC,YAAY,CAAC,EACjD;QACA,OAAO,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;KACzD;SAAM;QACL,OAAO,GAAG,CAAC;KACZ;AACH,CAAC;AApBD,wBAoBC;AAwCD;;;;;;;;GAQG;AACI,KAAK,UAAU,sBAAsB,CAC1C,UAAsB,EACtB,MAAoB,EACpB,eAAqB,EACrB,KAAc,EACd,SAAkB;IAElB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAClD,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;IAC3B,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACtD,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,gBAAgB,EAAE;QACpB,aAAa,GAAG,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;KAChD;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAChD,MAAM,YAAY,GAAG,MAAM,cAAc,EAAE,CAAC;IAC5C,IAAI,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAC1E,IAAI,iBAAiB,KAAK,SAAS,EAAE;QACnC,iBAAiB,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;QAClD,IAAI,CAAC,cAAc,CACjB,SAAS,CAAC,0BAA0B,EACpC,iBAAiB,CAClB,CAAC;KACH;IACD,uGAAuG;IACvG,mDAAmD;IACnD,MAAM,SAAS,GAAG,oBAAoB,EAAE;QACtC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAErC,MAAM,YAAY,GAAqB;QACrC,eAAe,EAAE,aAAa;QAC9B,aAAa,EAAE,YAAY;QAC3B,QAAQ,EAAE,OAAO;QACjB,YAAY;QACZ,UAAU,EAAE,SAAS;QACrB,GAAG;QACH,WAAW,EAAE,UAAU;QACvB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,iBAAiB;QAC7B,iBAAiB,EAAE,eAAe,CAAC,WAAW,EAAE;QAChD,MAAM;KACP,CAAC;IAEF,0BAA0B;IAC1B,IAAI,KAAK,EAAE;QACT,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC;KAC5B;IACD,IAAI,SAAS,EAAE;QACb,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC;KACpC;IACD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE;QACxE,YAAY,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;KACtD;IACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,MAAM,EAAE;QACV,YAAY,CAAC,WAAW,GAAG,MAAM,CAAC;KACnC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AA9DD,wDA8DC;AAMD,SAAS,WAAW,CAAC,GAAQ;;IAC3B,OAAO,OAAA,GAAG,0CAAE,MAAM,MAAK,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,gBAAgB,CACpC,YAAe;IAEf,IAAI,iBAAU,EAAE,EAAE;QAChB,IAAI,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;KACb;IAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK,CAAC,0BAA0B,gBAAgB,EAAE,CAAC,CAAC;IAEzD,MAAM,GAAG,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,GAAG,CAAC,mBAAmB,EAAE,CAAC;IAEzC,IAAI;QACF,MAAM,MAAM,CAAC,OAAO,CAClB,uDAAuD,EACvD;YACE,KAAK;YACL,IAAI;YACJ,IAAI,EAAE,gBAAgB;SACvB,CACF,CAAC;QAEF,OAAO,IAAI,CAAC;KACb;IAAC,OAAO,CAAC,EAAE;QACV,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;YAClB,QAAQ,CAAC,CAAC,MAAM,EAAE;gBAChB,KAAK,GAAG;oBACN,IAAI,CAAC,SAAS,CACZ,mFAAmF,CACpF,CAAC;oBACF,OAAO,KAAK,CAAC;gBACf,KAAK,GAAG;oBACN,IAAI,CAAC,SAAS,CACZ,uEAAuE,CACxE,CAAC;oBACF,OAAO,KAAK,CAAC;gBACf,KAAK,GAAG;oBACN,+CAA+C;oBAC/C,2EAA2E;oBAC3E,4EAA4E;oBAC5E,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,KAAK,wBAAiB,EAAE;wBAClE,IAAI,CAAC,OAAO,CACV,gIAAgI,CACjI,CAAC;qBACH;yBAAM;wBACL,IAAI,CAAC,OAAO,CACV,sFAAsF,CACvF,CAAC;qBACH;oBAED,OAAO,IAAI,CAAC;aACf;SACF;QAED,mFAAmF;QACnF,0EAA0E;QAC1E,IAAI,CAAC,KAAK,CACR,uEAAuE,CACxE,CAAC;QACF,OAAO,IAAI,CAAC;KACb;AACH,CAAC;AAhED,4CAgEC;AAED,gHAAgH;AAChH,+EAA+E;AAC/E,SAAgB,oBAAoB;IAClC,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;IACnD,OAAO,CACL,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAC3E,CAAC;AACJ,CAAC;AALD,oDAKC;AAED,qDAAqD;AACrD,oFAAoF;AACpF,SAAgB,qBAAqB;IACnC,MAAM,UAAU,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;IACtD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;AACrD,CAAC;AAJD,sDAIC"} \ No newline at end of file diff --git a/lib/actions-util.test.js b/lib/actions-util.test.js index a3654fad4..9b21a6dc1 100644 --- a/lib/actions-util.test.js +++ b/lib/actions-util.test.js @@ -68,4 +68,119 @@ ava_1.default("prepareEnvironment() when a local run", (t) => { t.deepEqual(process.env.GITHUB_JOB, "UNKNOWN-JOB"); t.deepEqual(process.env.CODEQL_ACTION_ANALYSIS_KEY, "LOCAL-RUN:UNKNOWN-JOB"); }); +ava_1.default("validateWorkflow() when on is missing", (t) => { + const errors = actionsutil.validateWorkflow({}); + t.deepEqual(errors, [actionsutil.WorkflowErrors.MissingHooks]); +}); +ava_1.default("validateWorkflow() when on.push is missing", (t) => { + const errors = actionsutil.validateWorkflow({ on: {} }); + console.log(errors); + t.deepEqual(errors, [actionsutil.WorkflowErrors.MissingHooks]); +}); +ava_1.default("validateWorkflow() when on.push is an array missing pull_request", (t) => { + const errors = actionsutil.validateWorkflow({ on: ["push"] }); + t.deepEqual(errors, [actionsutil.WorkflowErrors.MissingPullRequestHook]); +}); +ava_1.default("validateWorkflow() when on.push is an array missing push", (t) => { + const errors = actionsutil.validateWorkflow({ on: ["pull_request"] }); + t.deepEqual(errors, [actionsutil.WorkflowErrors.MissingPushHook]); +}); +ava_1.default("validateWorkflow() when on.push is valid", (t) => { + const errors = actionsutil.validateWorkflow({ + on: ["push", "pull_request"], + }); + t.deepEqual(errors.length, 0); +}); +ava_1.default("validateWorkflow() when on.push is a valid superset", (t) => { + const errors = actionsutil.validateWorkflow({ + on: ["push", "pull_request", "schedule"], + }); + t.deepEqual(errors.length, 0); +}); +ava_1.default("validateWorkflow() when on.push should not have a path", (t) => { + const errors = actionsutil.validateWorkflow({ + on: { + push: { branches: ["main"], paths: ["test/*"] }, + pull_request: { branches: ["main"] }, + }, + }); + t.deepEqual(errors, [actionsutil.WorkflowErrors.PathsSpecified]); +}); +ava_1.default("validateWorkflow() when on.push is a correct object", (t) => { + const errors = actionsutil.validateWorkflow({ + on: { push: { branches: ["main"] }, pull_request: { branches: ["main"] } }, + }); + t.deepEqual(errors.length, 0); +}); +ava_1.default("validateWorkflow() when on.push is correct with empty objects", (t) => { + const errors = actionsutil.validateWorkflow({ + on: { push: undefined, pull_request: undefined }, + }); + console.log(errors); + t.deepEqual(errors.length, 0); +}); +ava_1.default("validateWorkflow() when on.push is mismatched", (t) => { + const errors = actionsutil.validateWorkflow({ + on: { + push: { branches: ["main"] }, + pull_request: { branches: ["feature"] }, + }, + }); + t.deepEqual(errors, [actionsutil.WorkflowErrors.MismatchedBranches]); +}); +ava_1.default("validateWorkflow() when on.push is not mismatched", (t) => { + const errors = actionsutil.validateWorkflow({ + on: { + push: { branches: ["main", "feature"] }, + pull_request: { branches: ["main"] }, + }, + }); + t.deepEqual(errors.length, 0); +}); +ava_1.default("validateWorkflow() when on.push is mismatched for pull_request", (t) => { + const errors = actionsutil.validateWorkflow({ + on: { + push: { branches: ["main"] }, + pull_request: { branches: ["main", "feature"] }, + }, + }); + t.deepEqual(errors, [actionsutil.WorkflowErrors.MismatchedBranches]); +}); +ava_1.default("validateWorkflow() when on.pull_request for every branch but push specifies branches", (t) => { + const errors = actionsutil.validateWorkflow({ + on: { + push: { branches: ["main"] }, + pull_request: null, + }, + }); + t.deepEqual(errors, [actionsutil.WorkflowErrors.MismatchedBranches]); +}); +ava_1.default("validateWorkflow() when HEAD^2 is checked out", (t) => { + const errors = actionsutil.validateWorkflow({ + on: ["push", "pull_request"], + jobs: { test: { steps: [{ run: "git checkout HEAD^2" }] } }, + }); + t.deepEqual(errors, [actionsutil.WorkflowErrors.CheckoutWrongHead]); +}); +ava_1.default("formatWorkflowErrors() when there is one error", (t) => { + const message = actionsutil.formatWorkflowErrors([ + actionsutil.WorkflowErrors.CheckoutWrongHead, + ]); + t.true(message.startsWith("1 issue was detected with this workflow:")); +}); +ava_1.default("formatWorkflowErrors() when there are multiple errors", (t) => { + const message = actionsutil.formatWorkflowErrors([ + actionsutil.WorkflowErrors.CheckoutWrongHead, + actionsutil.WorkflowErrors.PathsSpecified, + ]); + t.true(message.startsWith("2 issues were detected with this workflow:")); +}); +ava_1.default("formatWorkflowCause()", (t) => { + const message = actionsutil.formatWorkflowCause([ + actionsutil.WorkflowErrors.CheckoutWrongHead, + actionsutil.WorkflowErrors.PathsSpecified, + ]); + t.deepEqual(message, "CheckoutWrongHead,PathsSpecified"); + t.deepEqual(actionsutil.formatWorkflowCause([]), undefined); +}); //# sourceMappingURL=actions-util.test.js.map \ No newline at end of file diff --git a/lib/actions-util.test.js.map b/lib/actions-util.test.js.map index 5ce4ef2b9..521172213 100644 --- a/lib/actions-util.test.js.map +++ b/lib/actions-util.test.js.map @@ -1 +1 @@ -{"version":3,"file":"actions-util.test.js","sourceRoot":"","sources":["../src/actions-util.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"actions-util.test.js","sourceRoot":"","sources":["../src/actions-util.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/init-action.js b/lib/init-action.js index 781d19765..1d2de172c 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -55,7 +55,11 @@ async function run() { let toolsVersion; try { actionsUtil.prepareLocalRunEnvironment(); - if (!(await actionsUtil.sendStatusReport(await actionsUtil.createStatusReportBase("init", "starting", startedAt)))) { + const workflowErrors = await actionsUtil.getWorkflowErrors(); + if (workflowErrors.length > 0) { + core.warning(actionsUtil.formatWorkflowErrors(workflowErrors)); + } + if (!(await actionsUtil.sendStatusReport(await actionsUtil.createStatusReportBase("init", "starting", startedAt, actionsUtil.formatWorkflowCause(workflowErrors))))) { return; } const apiDetails = { diff --git a/lib/init-action.js.map b/lib/init-action.js.map index 3fde8a107..8a7e913a7 100644 --- a/lib/init-action.js.map +++ b/lib/init-action.js.map @@ -1 +1 @@ -{"version":3,"file":"init-action.js","sourceRoot":"","sources":["../src/init-action.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"init-action.js","sourceRoot":"","sources":["../src/init-action.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/actions-util.test.ts b/src/actions-util.test.ts index 385f3ab44..8bd6250bf 100644 --- a/src/actions-util.test.ts +++ b/src/actions-util.test.ts @@ -81,3 +81,152 @@ test("prepareEnvironment() when a local run", (t) => { t.deepEqual(process.env.GITHUB_JOB, "UNKNOWN-JOB"); t.deepEqual(process.env.CODEQL_ACTION_ANALYSIS_KEY, "LOCAL-RUN:UNKNOWN-JOB"); }); + +test("validateWorkflow() when on is missing", (t) => { + const errors = actionsutil.validateWorkflow({}); + + t.deepEqual(errors, [actionsutil.WorkflowErrors.MissingHooks]); +}); + +test("validateWorkflow() when on.push is missing", (t) => { + const errors = actionsutil.validateWorkflow({ on: {} }); + + console.log(errors); + + t.deepEqual(errors, [actionsutil.WorkflowErrors.MissingHooks]); +}); + +test("validateWorkflow() when on.push is an array missing pull_request", (t) => { + const errors = actionsutil.validateWorkflow({ on: ["push"] }); + + t.deepEqual(errors, [actionsutil.WorkflowErrors.MissingPullRequestHook]); +}); + +test("validateWorkflow() when on.push is an array missing push", (t) => { + const errors = actionsutil.validateWorkflow({ on: ["pull_request"] }); + + t.deepEqual(errors, [actionsutil.WorkflowErrors.MissingPushHook]); +}); + +test("validateWorkflow() when on.push is valid", (t) => { + const errors = actionsutil.validateWorkflow({ + on: ["push", "pull_request"], + }); + + t.deepEqual(errors.length, 0); +}); + +test("validateWorkflow() when on.push is a valid superset", (t) => { + const errors = actionsutil.validateWorkflow({ + on: ["push", "pull_request", "schedule"], + }); + + t.deepEqual(errors.length, 0); +}); + +test("validateWorkflow() when on.push should not have a path", (t) => { + const errors = actionsutil.validateWorkflow({ + on: { + push: { branches: ["main"], paths: ["test/*"] }, + pull_request: { branches: ["main"] }, + }, + }); + + t.deepEqual(errors, [actionsutil.WorkflowErrors.PathsSpecified]); +}); + +test("validateWorkflow() when on.push is a correct object", (t) => { + const errors = actionsutil.validateWorkflow({ + on: { push: { branches: ["main"] }, pull_request: { branches: ["main"] } }, + }); + + t.deepEqual(errors.length, 0); +}); + +test("validateWorkflow() when on.push is correct with empty objects", (t) => { + const errors = actionsutil.validateWorkflow({ + on: { push: undefined, pull_request: undefined }, + }); + + console.log(errors); + + t.deepEqual(errors.length, 0); +}); + +test("validateWorkflow() when on.push is mismatched", (t) => { + const errors = actionsutil.validateWorkflow({ + on: { + push: { branches: ["main"] }, + pull_request: { branches: ["feature"] }, + }, + }); + + t.deepEqual(errors, [actionsutil.WorkflowErrors.MismatchedBranches]); +}); + +test("validateWorkflow() when on.push is not mismatched", (t) => { + const errors = actionsutil.validateWorkflow({ + on: { + push: { branches: ["main", "feature"] }, + pull_request: { branches: ["main"] }, + }, + }); + + t.deepEqual(errors.length, 0); +}); + +test("validateWorkflow() when on.push is mismatched for pull_request", (t) => { + const errors = actionsutil.validateWorkflow({ + on: { + push: { branches: ["main"] }, + pull_request: { branches: ["main", "feature"] }, + }, + }); + + t.deepEqual(errors, [actionsutil.WorkflowErrors.MismatchedBranches]); +}); + +test("validateWorkflow() when on.pull_request for every branch but push specifies branches", (t) => { + const errors = actionsutil.validateWorkflow({ + on: { + push: { branches: ["main"] }, + pull_request: null, + }, + }); + + t.deepEqual(errors, [actionsutil.WorkflowErrors.MismatchedBranches]); +}); + +test("validateWorkflow() when HEAD^2 is checked out", (t) => { + const errors = actionsutil.validateWorkflow({ + on: ["push", "pull_request"], + jobs: { test: { steps: [{ run: "git checkout HEAD^2" }] } }, + }); + + t.deepEqual(errors, [actionsutil.WorkflowErrors.CheckoutWrongHead]); +}); + +test("formatWorkflowErrors() when there is one error", (t) => { + const message = actionsutil.formatWorkflowErrors([ + actionsutil.WorkflowErrors.CheckoutWrongHead, + ]); + t.true(message.startsWith("1 issue was detected with this workflow:")); +}); + +test("formatWorkflowErrors() when there are multiple errors", (t) => { + const message = actionsutil.formatWorkflowErrors([ + actionsutil.WorkflowErrors.CheckoutWrongHead, + actionsutil.WorkflowErrors.PathsSpecified, + ]); + t.true(message.startsWith("2 issues were detected with this workflow:")); +}); + +test("formatWorkflowCause()", (t) => { + const message = actionsutil.formatWorkflowCause([ + actionsutil.WorkflowErrors.CheckoutWrongHead, + actionsutil.WorkflowErrors.PathsSpecified, + ]); + + t.deepEqual(message, "CheckoutWrongHead,PathsSpecified"); + t.deepEqual(actionsutil.formatWorkflowCause([]), undefined); +}); diff --git a/src/actions-util.ts b/src/actions-util.ts index 57f4380d0..9494e53ad 100644 --- a/src/actions-util.ts +++ b/src/actions-util.ts @@ -1,8 +1,10 @@ +import * as fs from "fs"; import * as path from "path"; import * as core from "@actions/core"; import * as toolrunner from "@actions/exec/lib/toolrunner"; import * as safeWhich from "@chrisgavin/safe-which"; +import * as yaml from "js-yaml"; import * as api from "./api-client"; import * as sharedEnv from "./shared-environment"; @@ -100,10 +102,212 @@ export const getCommitOid = async function (): Promise { } }; +interface WorkflowJobStep { + run: any; +} + +interface WorkflowJob { + steps?: WorkflowJobStep[]; +} + +interface WorkflowTrigger { + branches?: string[]; + paths?: string[]; +} + +// on: {} then push/pull_request are undefined +// on: +// push: +// pull_request: +// then push/pull_request are null +interface WorkflowTriggers { + push?: WorkflowTrigger | null; + pull_request?: WorkflowTrigger | null; +} + +interface Workflow { + jobs?: { [key: string]: WorkflowJob }; + on?: string | string[] | WorkflowTriggers; +} + +function isObject(o: unknown): o is object { + return o !== null && typeof o === "object"; +} + +enum MissingTriggers { + None = 0, + Push = 1, + PullRequest = 2, +} + +interface CodedError { + message: string; + code: string; +} + +function toCodedErrors(errors: { + [key: string]: string; +}): { [key: string]: CodedError } { + return Object.entries(errors).reduce((acc, [key, value]) => { + acc[key] = { message: value, code: key }; + return acc; + }, {} as ReturnType); +} + +export const WorkflowErrors = toCodedErrors({ + MismatchedBranches: `Please make sure that every branch in on.pull_request is also in on.push so that Code Scanning can compare pull requests against the state of the base branch.`, + MissingHooks: `Please specify on.push and on.pull_request hooks so that Code Scanning can compare pull requests against the state of the base branch.`, + MissingPullRequestHook: `Please specify an on.pull_request hook so that Code Scanning is run against pull requests.`, + MissingPushHook: `Please specify an on.push hook so that Code Scanning can compare pull requests against the state of the base branch.`, + PathsSpecified: `Using on.push.paths can prevent Code Scanning annotating new alerts in your pull requests.`, + PathsIgnoreSpecified: `Using on.push.paths-ignore can prevent Code Scanning annotating new alerts in your pull requests.`, + CheckoutWrongHead: `git checkout HEAD^2 is no longer necessary. Please remove this step as Code Scanning recommends analyzing the merge commit for best results.`, +}); + +export function validateWorkflow(doc: Workflow): CodedError[] { + const errors: CodedError[] = []; + + // .jobs[key].steps[].run + for (const job of Object.values(doc?.jobs || {})) { + for (const step of job?.steps || []) { + // this was advice that we used to give in the README + // we actually want to run the analysis on the merge commit + // to produce results that are more inline with expectations + // (i.e: this is what will happen if you merge this PR) + // and avoid some race conditions + if (step?.run === "git checkout HEAD^2") { + errors.push(WorkflowErrors.CheckoutWrongHead); + } + } + } + + let missing = MissingTriggers.None; + + if (doc.on === undefined) { + missing = MissingTriggers.Push | MissingTriggers.PullRequest; + } else if (typeof doc.on === "string") { + switch (doc.on) { + case "push": + missing = MissingTriggers.PullRequest; + break; + case "pull_request": + missing = MissingTriggers.Push; + break; + default: + missing = MissingTriggers.Push | MissingTriggers.PullRequest; + break; + } + } else if (Array.isArray(doc.on)) { + if (!doc.on.includes("push")) { + missing = missing | MissingTriggers.Push; + } + if (!doc.on.includes("pull_request")) { + missing = missing | MissingTriggers.PullRequest; + } + } else if (isObject(doc.on)) { + if (!Object.prototype.hasOwnProperty.call(doc.on, "pull_request")) { + missing = missing | MissingTriggers.PullRequest; + } + if (!Object.prototype.hasOwnProperty.call(doc.on, "push")) { + missing = missing | MissingTriggers.Push; + } else { + const paths = doc.on.push?.paths; + // if you specify paths or paths-ignore you can end up with commits that have no baseline + // if they didn't change any files + // currently we cannot go back through the history and find the most recent baseline + if (Array.isArray(paths) && paths.length > 0) { + errors.push(WorkflowErrors.PathsSpecified); + } + const pathsIgnore = doc.on.push?.["paths-ignore"]; + if (Array.isArray(pathsIgnore) && pathsIgnore.length > 0) { + errors.push(WorkflowErrors.PathsIgnoreSpecified); + } + } + + if (doc.on.push) { + const push = doc.on.push.branches || []; + + if (doc.on.pull_request) { + const pull_request = doc.on.pull_request.branches || []; + const difference = pull_request.filter( + (value) => !push.includes(value) + ); + if (difference.length > 0) { + // there are branches in pull_request that may not have a baseline + // because we are not building them on push + errors.push(WorkflowErrors.MismatchedBranches); + } + } else if (push.length > 0) { + // push is set up to run on a subset of branches + // and you could open a PR against a branch with no baseline + errors.push(WorkflowErrors.MismatchedBranches); + } + } + } + + switch (missing) { + case MissingTriggers.PullRequest | MissingTriggers.Push: + errors.push(WorkflowErrors.MissingHooks); + break; + case MissingTriggers.PullRequest: + errors.push(WorkflowErrors.MissingPullRequestHook); + break; + case MissingTriggers.Push: + errors.push(WorkflowErrors.MissingPushHook); + break; + } + + return errors; +} + +export async function getWorkflowErrors(): Promise { + const workflow = await getWorkflow(); + + if (workflow === undefined) { + return []; + } + + return validateWorkflow(workflow); +} + +export function formatWorkflowErrors(errors: CodedError[]): string { + const issuesWere = errors.length === 1 ? "issue was" : "issues were"; + + const errorsList = errors.map((e) => e.message).join(" "); + + return `${errors.length} ${issuesWere} detected with this workflow: ${errorsList}`; +} + +export function formatWorkflowCause(errors: CodedError[]): undefined | string { + if (errors.length === 0) { + return undefined; + } + return errors.map((e) => e.code).join(","); +} + +export async function getWorkflow(): Promise { + const relativePath = await getWorkflowPath(); + const absolutePath = path.join( + getRequiredEnvParam("GITHUB_WORKSPACE"), + relativePath + ); + + try { + return yaml.safeLoad(fs.readFileSync(absolutePath, "utf-8")); + } catch (e) { + core.warning(`Could not read workflow: ${e.toString()}`); + return undefined; + } +} + /** * Get the path of the currently executing workflow. */ async function getWorkflowPath(): Promise { + if (isLocalRun()) { + return getRequiredEnvParam("WORKFLOW_PATH"); + } + const repo_nwo = getRequiredEnvParam("GITHUB_REPOSITORY").split("/"); const owner = repo_nwo[0]; const repo = repo_nwo[1]; diff --git a/src/init-action.ts b/src/init-action.ts index 5e41b16e0..81817e583 100644 --- a/src/init-action.ts +++ b/src/init-action.ts @@ -96,9 +96,20 @@ async function run() { try { actionsUtil.prepareLocalRunEnvironment(); + const workflowErrors = await actionsUtil.getWorkflowErrors(); + + if (workflowErrors.length > 0) { + core.warning(actionsUtil.formatWorkflowErrors(workflowErrors)); + } + if ( !(await actionsUtil.sendStatusReport( - await actionsUtil.createStatusReportBase("init", "starting", startedAt) + await actionsUtil.createStatusReportBase( + "init", + "starting", + startedAt, + actionsUtil.formatWorkflowCause(workflowErrors) + ) )) ) { return;