최상위 구조 전체
지금까지 조각들을 모두 살펴봤어. 이제 워크플로 파일의 최상위 구조를 GitHub가 기대하는 순서대로 정리해 보자.
name— 표시 이름.run-name— 실행마다 부여되는 이름(템플릿 기반, 선택 사항).on— 이벤트.permissions—GITHUB_TOKEN이 할 수 있는 일.env— 워크플로 수준 환경 변수.defaults— 기본 셸과 작업 디렉터리.concurrency— 진행 중인 실행을 취소하는 그룹.jobs— 실제 작업.
자주 놓치는 필드
permissions— 기본적으로GITHUB_TOKEN권한이 너무 관대해. 워크플로 수준에서permissions: read-all을 지정하고 작업마다 덮어써서 최소 권한을 강제하자.concurrency— 이게 없으면 모든 푸시마다 새 실행이 시작돼. 있으면 같은 브랜치나 PR에서 진행 중인 실행을 취소할 수 있어.defaults.run.shell— 스크립트에 bash 문법이 필요하면 Linux나 macOS에서bash를 명시해(Mac 기본sh가 까다로울 수 있어).