lesson 5 of 5 · a gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatelesson 5 of 5 · a gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatelesson 5 of 5 · a gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatelesson 5 of 5 · a gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatelesson 5 of 5 · a gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatelesson 5 of 5 · a gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatelesson 5 of 5 · a gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatelesson 5 of 5 · a gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatelesson 5 of 5 · a gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatelesson 5 of 5 · a gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatelesson 5 of 5 · a gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gatea gate that can't fail isn't a gate
Checkpoint
One last thing before we move on. pass this to mark the lesson done, or skip and keep moving.
Final drill: the override path. Gates get overridden in real
pipelines — the sin isn't overriding, it's overriding without a
record. Write decide(gate_results, override):
gate_resultsis a list of{"name": str, "passed": bool}.- If every gate passed, return
"SHIP". - If any failed and
overrideisNone, return"BLOCK (failed: <names>)"— failed gate names joined with", ". - If any failed and
overrideis a dict withwhoandreason, return"SHIP-OVERRIDE by <who>: <reason> (failed: <names>)"— the deploy happens, and the log names the human who owns it.
Expected output:
SHIP
BLOCK (failed: regression)
SHIP-OVERRIDE by maya (eng lead): regression is in a deprecated locale (failed: regression)