[INFRA-08] deploy-prod.yml — QA 게이트 + 롤백 워크플로

작업 내용 (설계 의도)

변경 사항

근거 TDD: ../TDD.md “QA 게이트 연동 지점”, “실패 경로”, “상태 전이 표”. ADR-003/004. FR-4/7/8, NFR(0-bypass). prod 배포를 private-qa PASS 게이트 뒤에 둔다. dev 워크플로(INFRA-07)와 다른 파일 — 같은 wave 병렬 안전.

  • 트리거: workflow_dispatch(입력 image_tag 옵션 — 미지정 시 main HEAD, 지정 시 롤백).
  • job1 qa-gate(self-hosted runner): qa/verdict.json 3중 검증 — ① status==PASScommit==배포 SHA(stale 차단) ③ 파일·형식 유효. verdict 원문을 artifact + $GITHUB_STEP_SUMMARY에 기록(FR-7). 실패 시 job fail → 배포 미실행.
  • job2 deploy: needs: qa-gate + environment: production(필수 승인 보호) → scripts/deploy.sh prod <sha>. health 실패 시 rollback.sh prod <prev> 후속.
  • concurrency: deploy-prod 그룹.
  • 롤백 경로: workflow_dispatch image_tag=<prev_sha> → qa-gate 재검증 후 deploy.sh prod <prev_sha>(5분 내, NFR).
  • 실패·게이트 차단 시 source=deployment 통지(⑩ 연동).

롤백: prod 배포 실패 → rollback.sh prod <prev> 자동. 게이트 오작동 → 승인 보호 유지한 채 워크플로 입력으로 임시 조정.

의존

  • INFRA-01 (Dockerfile), INFRA-03 (deploy.sh/rollback.sh), INFRA-06 (prod override)

다이어그램

처리 흐름

sequenceDiagram
    participant Dev as 개발자
    participant Wf as deploy-prod.yml
    participant Gate as qa-gate job
    participant Rn as self-hosted runner
    Dev->>Wf: workflow_dispatch
    Wf->>Gate: verdict.json 3중 검증
    Gate-->>Wf: PASS+SHA일치 → 통과
    Wf->>Rn: environment 승인 → deploy.sh prod <sha>
    Rn-->>Wf: health UP / 실패 시 rollback.sh

테스트 케이스

  • actionlint가 error 0건이다
  • verdict status=PASS + SHA 일치 시 deploy job이 진행된다
  • verdict FAIL이면 qa-gate가 실패하고 deploy job이 미실행된다
  • verdict SHA가 배포 대상과 불일치(stale)면 차단된다
  • verdict 파일 부재 시 차단된다(NFR 0-bypass)
  • deploy job이 environment: production 승인 보호를 갖는다
  • image_tag 입력으로 이전 태그 롤백을 트리거할 수 있다
  • prod health 실패 시 rollback.sh 후속 스텝이 실행된다
  • qa-gate가 verdict 원문을 artifact·step summary에 기록한다(FR-7)