(opt: RuleResultOpt, gitData: GitData, jobWhen: string = "on_success", jobAllowFailure: boolean | {exit_codes: number | number[]} | undefined = undefined)
| 202 | } |
| 203 | |
| 204 | static getRulesResult (opt: RuleResultOpt, gitData: GitData, jobWhen: string = "on_success", jobAllowFailure: boolean | {exit_codes: number | number[]} | undefined = undefined): {when: string; allowFailure: boolean | {exit_codes: number | number[]}; variables?: {[name: string]: string}; needs?: Need[]} { |
| 205 | let when = "never"; |
| 206 | const {evaluateRuleChanges} = opt.argv; |
| 207 | |
| 208 | // optional manual jobs allowFailure defaults to true https://docs.gitlab.com/ee/ci/jobs/job_control.html#types-of-manual-jobs |
| 209 | let allowFailure: boolean | {exit_codes: number | number[]} = jobAllowFailure ?? jobWhen === "manual"; |
| 210 | let ruleVariable: {[name: string]: string} | undefined; |
| 211 | let ruleNeeds: Need[] | undefined; |
| 212 | |
| 213 | for (const rule of opt.rules) { |
| 214 | if (!Utils.evaluateRuleIf(rule.if, opt.variables)) continue; |
| 215 | if (!Utils.evaluateRuleExist(opt.cwd, rule.exists)) continue; |
| 216 | if (evaluateRuleChanges && !Utils.evaluateRuleChanges(gitData.branches.default, rule.changes, opt.cwd)) continue; |
| 217 | |
| 218 | when = rule.when ? rule.when : jobWhen; |
| 219 | allowFailure = rule.allow_failure ?? allowFailure; |
| 220 | ruleVariable = rule.variables; |
| 221 | ruleNeeds = rule.needs?.map((n: any) => needsComplex(n)); |
| 222 | |
| 223 | break; // Early return, will not evaluate the remaining rules |
| 224 | } |
| 225 | |
| 226 | return {when, allowFailure, variables: ruleVariable, needs: ruleNeeds}; |
| 227 | } |
| 228 | |
| 229 | static evaluateRuleIf (ruleIf: string | undefined, envs: {[key: string]: string}): boolean { |
| 230 | if (ruleIf === undefined) return true; |
no test coverage detected