91 lines
2.9 KiB
YAML
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
|