Files

91 lines
2.9 KiB
YAML

name: Flutter 테스트
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
workflow_dispatch: # 수동 실행 옵션
jobs:
test:
name: 테스트 실행
runs-on: ubuntu-latest
timeout-minutes: 15 # CI 전체 타임아웃 설정
steps:
- name: 코드 체크아웃
uses: actions/checkout@v3
- name: Flutter 설정
uses: subosito/flutter-action@v2
with:
flutter-version: '3.10.0'
channel: 'stable'
cache: true
- name: 의존성 설치
run: flutter pub get
- name: 테스트 디렉토리 생성
run: mkdir -p test_diagnostics
- name: 테스트 실행 권한 설정
run: |
chmod +x ./scripts/run_tests.sh
chmod +x ./scripts/reproduce_test.sh
- name: Flutter 테스트 실행
id: run_tests
continue-on-error: true
run: ./scripts/run_tests.sh ci --verbose
env:
FLUTTER_TEST_IS_CI: true
- name: 플래키 자동 재실행 (실패 시만)
if: steps.run_tests.outcome == 'failure'
run: |
echo "1차 테스트 실패 - 플래키 자동 재실행 시작"
chmod +x ./scripts/run_and_rerun_failed.sh
# 전체 스위트를 재실행하며, 내부적으로 per-file 폴백을 수행
set +e
./scripts/run_and_rerun_failed.sh
RERUN_STATUS=$?
set -e
if [ "$RERUN_STATUS" -eq 0 ]; then
echo "재실행 성공 - 플래키로 간주하고 워크플로를 성공 처리합니다."
echo "::set-output name=flaky_recovered::true"
else
echo "재실행 실패 - 실패를 유지합니다."
exit 1
fi
- name: 임시 flutter 테스트 로그 수집 (/tmp)
if: always()
shell: bash
run: |
echo "임시 flutter 테스트 로그를 test_diagnostics/로 복사합니다"
mkdir -p test_diagnostics
# run_and_rerun_failed.sh가 출력한 /tmp 로그를 수집
cp -v /tmp/flutter_test_*.log test_diagnostics/ 2>/dev/null || true
cp -v /tmp/flutter_test_*.log.clean test_diagnostics/ 2>/dev/null || true
# machine 리포터 로그 등 기타 진단 파일 수집 시도
cp -v /tmp/*flutter*test*.* test_diagnostics/ 2>/dev/null || true
- name: 테스트 진단 정보 수집
if: failure()
run: |
echo "테스트 실패 - 진단 정보 수집 중..."
ls -la test_diagnostics/
cat test_diagnostics/*.log || echo "로그 파일 없음"
cat test_diagnostics/*.txt || echo "분석 파일 없음"
- name: 테스트 진단 정보 업로드
if: always()
uses: actions/upload-artifact@v3
with:
name: test-diagnostics
path: test_diagnostics/
retention-days: 7
if-no-files-found: ignore