59 lines
1.6 KiB
JavaScript
59 lines
1.6 KiB
JavaScript
export const PROMOTION_FORMULA = Object.freeze({
|
|
MERGE_READY: Object.freeze([
|
|
"FE-GATE-001",
|
|
"FE-GATE-002",
|
|
"FE-GATE-003",
|
|
"FE-GATE-004",
|
|
"FE-GATE-005",
|
|
"FE-GATE-006",
|
|
"FE-GATE-007",
|
|
"FE-GATE-008",
|
|
"FE-GATE-009",
|
|
"FE-GATE-010",
|
|
"FE-GATE-011",
|
|
"FE-GATE-013",
|
|
"FE-GATE-020",
|
|
]),
|
|
RELEASE_READY: Object.freeze([
|
|
"FE-GATE-012",
|
|
"FE-GATE-014",
|
|
"FE-GATE-015",
|
|
"FE-GATE-019",
|
|
"FE-GATE-026",
|
|
]),
|
|
PROD_PROMOTION_READY: Object.freeze([
|
|
"FE-GATE-016",
|
|
"FE-GATE-021",
|
|
"FE-GATE-022",
|
|
"FE-GATE-023",
|
|
"FE-GATE-024",
|
|
"FE-GATE-025",
|
|
]),
|
|
FIELD_SLO_READY: Object.freeze(["FE-GATE-018"]),
|
|
DOCUMENTATION_READY: Object.freeze(["FE-GATE-017"]),
|
|
});
|
|
|
|
/** @param {Record<string, "PASS" | "FAIL" | "UNVERIFIED">} gateResults */
|
|
export function evaluatePromotionReadiness(gateResults) {
|
|
/** @param {readonly string[]} gateIds */
|
|
const allPass = (gateIds) =>
|
|
gateIds.every((gateId) => gateResults[gateId] === "PASS");
|
|
|
|
const mergeReady = allPass(PROMOTION_FORMULA.MERGE_READY);
|
|
const releaseReady =
|
|
mergeReady && allPass(PROMOTION_FORMULA.RELEASE_READY);
|
|
const productionReady =
|
|
releaseReady && allPass(PROMOTION_FORMULA.PROD_PROMOTION_READY);
|
|
const fieldReady =
|
|
productionReady && allPass(PROMOTION_FORMULA.FIELD_SLO_READY);
|
|
const documentationReady = allPass(PROMOTION_FORMULA.DOCUMENTATION_READY);
|
|
|
|
return Object.freeze({
|
|
MERGE_READY: mergeReady,
|
|
RELEASE_READY: releaseReady,
|
|
PROD_PROMOTION_READY: productionReady,
|
|
FIELD_SLO_READY: fieldReady,
|
|
DOCUMENTATION_READY: documentationReady,
|
|
});
|
|
}
|