diff --git a/.github/workflows/ci-flutter.yml b/.github/workflows/ci-flutter.yml index af51cf8..4d899e8 100644 --- a/.github/workflows/ci-flutter.yml +++ b/.github/workflows/ci-flutter.yml @@ -31,6 +31,8 @@ jobs: flutter: name: Flutter (analyze · test) runs-on: ubuntu-latest + # 멈춘 잡이 러너를 무한 점유하지 않도록 상한을 둔다 + timeout-minutes: 25 defaults: run: working-directory: flutter diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 40346fb..bbd8045 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,6 +14,8 @@ jobs: backend: name: Backend (lint · test · e2e · build) runs-on: ubuntu-latest + # 멈춘 잡이 러너를 무한 점유하지 않도록 상한을 둔다 + timeout-minutes: 20 defaults: run: working-directory: backend @@ -72,6 +74,8 @@ jobs: frontend: name: Frontend (lint · type-check · test) runs-on: ubuntu-latest + # 멈춘 잡이 러너를 무한 점유하지 않도록 상한을 둔다 + timeout-minutes: 15 defaults: run: working-directory: frontend @@ -98,6 +102,8 @@ jobs: error-codes-sync: name: 에러 코드 SSOT 동기화 검사 runs-on: ubuntu-latest + # 멈춘 잡이 러너를 무한 점유하지 않도록 상한을 둔다 + timeout-minutes: 10 steps: - uses: actions/checkout@v4 diff --git a/ci/README.md b/ci/README.md index 6d91390..9147ae6 100644 --- a/ci/README.md +++ b/ci/README.md @@ -80,6 +80,21 @@ Flutter 는 SDK 다운로드로 매 실행 수 분이 걸리는데, backend/fron > 러너는 기본적으로 잡을 **하나씩** 처리한다. 전체 시간을 줄이려면 러너를 여러 개 띄우거나 > `act_runner` 설정에서 동시 실행 수를 늘린다. +## 잡이 멈출 때 + +컨테이너 환경에서 잡이 간헐적으로 멈추는 경우가 있다 (CPU 0%, 네트워크 정지 상태로 진행 없음). +러너가 하나뿐이면 **멈춘 잡 하나가 이후 모든 잡을 굶긴다.** + +그래서 모든 잡에 `timeout-minutes` 를 둔다. 상한에 걸리면 강제 종료되고 다음 잡으로 넘어간다. +새 잡을 추가할 때도 반드시 상한을 지정할 것. + +멈춘 잡을 즉시 해제하려면 해당 컨테이너를 중지하면 된다 (러너가 실패로 처리하고 다음 잡을 집는다). + +```bash +docker ps --format "{{.Names}}" | grep GITEA-ACTIONS # 실행 중인 잡 컨테이너 +docker stop <컨테이너명> +``` + ## 주의 - **토큰은 `ci/.env` 에만** 둡니다. 이 파일은 루트 `.gitignore` 로 커밋되지 않습니다.