ci: Flutter 검사를 별도 워크플로로 분리 — 기본 비활성
Flutter 잡은 SDK 다운로드로 매 실행 수 분이 걸리는데, backend/frontend 만 고친 커밋에서는 검사할 것이 없다. 러너가 잡을 하나씩 처리하므로 다른 검사까지 같이 느려졌다. ci-flutter.yml 로 분리하고 flutter/ 경로가 바뀐 푸시·PR 에서만 실행되게 한다. 실제로 모바일 앱을 쓰기 시작하면 별도 설정 없이 자동으로 동작하고, 그 전까지는 CI 시간을 차지하지 않는다. workflow_dispatch 로 수동 실행도 가능하다. Redis 를 compose profile 로 기본 비활성화한 것과 같은 방향이다 — 기반은 갖춰두되 쓰지 않을 때는 자원을 차지하지 않게 한다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -250,6 +250,8 @@ await storage.deleteAll();
|
||||
- [ ] **구조 보완 시**: `app.dart` 분리, `core/{constants,theme,storage}` 생성. 공통 위젯은 `lib/shared/widgets/` 에 둔다(이동 완료).
|
||||
- [ ] **권장 패키지**: 모델(`freezed`/`json_serializable`)·라우팅(`go_router`) 도입 시 `pubspec.yaml` 추가 후 `flutter pub get`.
|
||||
- [ ] **analyze/test**: 커밋 전 `flutter analyze` (Warning 0) + `flutter test` 통과.
|
||||
CI(`ci-flutter.yml`)는 **flutter/ 가 바뀐 커밋에서만** 자동 실행된다 (SDK 다운로드가 느려 분리).
|
||||
다른 시점에 검사가 필요하면 Actions 탭의 "Run workflow" 로 수동 실행한다.
|
||||
- [ ] **린트로 강제되는 항목**: `dynamic` 호출·`print`·`const` 누락·await 누락·작은따옴표·import 정렬 (`analysis_options.yaml`).
|
||||
- [ ] **env**: `flutter/.env.example` → `.env` 복사 후 `API_URL` 설정 (Android 에뮬레이터는 `10.0.2.2`).
|
||||
`.env` 는 `pubspec.yaml` 의 asset 이라 **없으면 `flutter analyze` 가 경고**한다.
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
name: CI (Flutter)
|
||||
|
||||
# Flutter 는 기본 CI 에서 분리되어 있다.
|
||||
#
|
||||
# 이유: SDK 다운로드로 매 실행마다 수 분이 걸리는데,
|
||||
# backend/frontend 만 고친 커밋에서는 검사할 것이 없다.
|
||||
#
|
||||
# 언제 도는가:
|
||||
# - flutter/ 아래 파일이 바뀐 푸시·PR (= 실제로 Flutter 를 쓸 때 자동으로)
|
||||
# - Actions 탭의 "Run workflow" 버튼으로 수동 실행
|
||||
#
|
||||
# 모바일 앱을 아예 쓰지 않는 프로젝트라면 이 파일을 지우면 된다.
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'flutter/**'
|
||||
- '.github/workflows/ci-flutter.yml'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'flutter/**'
|
||||
- '.github/workflows/ci-flutter.yml'
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
flutter:
|
||||
name: Flutter (analyze · test)
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: flutter
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: stable
|
||||
cache: true
|
||||
|
||||
# .env 는 pubspec 의 asset 이라 없으면 analyze 가 경고를 낸다
|
||||
- name: Prepare .env
|
||||
run: cp .env.example .env
|
||||
|
||||
- run: flutter pub get
|
||||
|
||||
- name: Analyze
|
||||
run: flutter analyze
|
||||
|
||||
- name: Test
|
||||
run: flutter test
|
||||
@@ -95,32 +95,6 @@ jobs:
|
||||
- name: Test
|
||||
run: npm run test:unit -- --run
|
||||
|
||||
flutter:
|
||||
name: Flutter (analyze · test)
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: flutter
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: stable
|
||||
cache: true
|
||||
|
||||
# .env 는 pubspec 의 asset 이라 없으면 analyze 가 경고를 낸다
|
||||
- name: Prepare .env
|
||||
run: cp .env.example .env
|
||||
|
||||
- run: flutter pub get
|
||||
|
||||
- name: Analyze
|
||||
run: flutter analyze
|
||||
|
||||
- name: Test
|
||||
run: flutter test
|
||||
|
||||
error-codes-sync:
|
||||
name: 에러 코드 SSOT 동기화 검사
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
+15
-4
@@ -59,15 +59,26 @@ GitHub Actions 는 잡이 VM 위에서 직접 돌기 때문에 관례가 다르
|
||||
|
||||
## 리소스 참고
|
||||
|
||||
`ci.yml` 은 네 개의 잡을 실행합니다.
|
||||
워크플로는 두 개로 나뉘어 있습니다.
|
||||
|
||||
**`ci.yml`** — 모든 푸시·PR 에서 실행
|
||||
|
||||
- `backend` — postgres 서비스 컨테이너를 띄워 단위 테스트와 e2e 를 실행
|
||||
- `frontend` — lint·type-check·테스트
|
||||
- `flutter` — **매 실행마다 Flutter SDK 를 내려받아 수 분 소요**
|
||||
- `error-codes-sync` — 에러 코드 생성 파일 드리프트 검사
|
||||
|
||||
서버 사양이 넉넉하지 않다면 처음에는 `flutter` 잡을 빼고 시작해도 됩니다.
|
||||
나머지 세 개만으로도 대부분의 회귀는 걸립니다.
|
||||
**`ci-flutter.yml`** — **기본적으로 돌지 않는다**
|
||||
|
||||
Flutter 는 SDK 다운로드로 매 실행 수 분이 걸리는데, backend/frontend 만 고친 커밋에서는
|
||||
검사할 것이 없다. 그래서 다음 경우에만 실행된다.
|
||||
|
||||
- `flutter/` 아래 파일이 바뀐 푸시·PR — **실제로 Flutter 를 쓰기 시작하면 자동으로 동작한다**
|
||||
- Actions 탭의 **Run workflow** 버튼으로 수동 실행
|
||||
|
||||
모바일 앱을 쓰지 않는 프로젝트라면 `ci-flutter.yml` 을 지우면 된다.
|
||||
|
||||
> 러너는 기본적으로 잡을 **하나씩** 처리한다. 전체 시간을 줄이려면 러너를 여러 개 띄우거나
|
||||
> `act_runner` 설정에서 동시 실행 수를 늘린다.
|
||||
|
||||
## 주의
|
||||
|
||||
|
||||
Reference in New Issue
Block a user