needs:가 그리는 DAG
각 작업은 needs:로 0개 이상의 상위 작업을 선언할 수 있어. GitHub가 이 정보로 DAG를 만들고 위상 순서대로 작업을 실행하지. 서로 경로가 없는 작업들은 병렬로 돌아.
흔히 볼 수 있는 구조는 이렇게 생겼어:
- 선형 — A → B → C. 각 작업이 이전 작업이 끝날 때까지 기다려.
- Fan-out, 팬인 — A → [B, C, D] → E. B, C, D가 A 다음에 병렬로 실행되고, 그 다음 E가 셋 다 끝날 때까지 기다려.
- 다이아몬드 — A → [B, C] → D. 빌드 후 (테스트, 린트) 후 배포하는 흐름에서 자주 써.
- 분리된 체인 — 같은 워크플로 안에 있는 독립적인 파이프라인들이야.
실패 전파
기본적으로 needs:에 지정한 작업 중 하나라도 실패하거나 취소되면 그 작업은 건너뛰어(건너뛰기). 정리나 알림 작업이 상관없이 무조건 실행돼야 한다면 if: always()나 if: failure()로 재정의하면 돼.