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} 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, }); }