in packages/aws-c2a/lib/toolkit.ts [139:185]
private evaluateReport(report: ChangeAnalysisReport, failCondition?: FAIL_ON) {
if (!failCondition)
return 0;
const aggregationMap = groupArrayBy(report.aggregations, (agg) => agg.characteristics.RISK);
const aggregations = {
high: aggregationMap.get(RuleRisk.High)?.[0]?.subAggs ?? [],
low: aggregationMap.get(RuleRisk.Low)?.[0]?.subAggs ?? [],
unknown: aggregationMap.get(RuleRisk.Unknown)?.[0]?.subAggs ?? [],
};
const evaluateAggregations = (errorMessage: string, ...filter: RuleRisk[]) => {
const filteredAggregations: {[key: string]: number} = Object.entries(aggregations)
.filter(([risk, values]) => filter.includes(risk as RuleRisk) && (values?.length ?? 0) > 0)
.reduce((acc, [risk, values]) => ({...acc, [risk]: values?.length ?? 0}), {});
if (Object.values(filteredAggregations).length > 0) {
const frequencyReport = Object.entries(filteredAggregations)
.reduce((acc, [risk, frequency]) => `${acc}\n * ${risk}: ${frequency}`, 'Risk Aggregation Report:');
error(`${errorMessage}\n\n${frequencyReport}`);
return 1;
}
return 0;
};
switch (failCondition) {
case FAIL_ON.ALL: {
return evaluateAggregations(
`Changes detected. Your changes fall under ${failCondition} rules.`,
RuleRisk.Low, RuleRisk.Unknown, RuleRisk.High,
);
}
case FAIL_ON.UNKNOWN_AND_HIGH: {
return evaluateAggregations(
`Unknown/high risk changes detected. Your changes fall under ${failCondition} rules.`,
RuleRisk.Unknown, RuleRisk.High,
);
}
case FAIL_ON.HIGH: {
return evaluateAggregations(
`High risk changes detected. Your changes fall under ${failCondition} rules.`,
RuleRisk.High,
);
}
default: { return 0; }
}
}