본문 바로가기
C.W.K.
Stream
Lesson 04 of 13 · published

Matrix 전략 심화

~14 min · matrix, include, exclude

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

매트릭스는 단순한 데카르트 곱 그 이상이야

매트릭스는 나열한 차원의 모든 조합을 확장해. 하지만 보통 전체 곱을 그대로 돌리기보다는 결과를 원하는 대로 모양짓고 싶을 거야. 이걸 제어하는 세 가지 방법이 있어.

  • include: — 데카르트 곱 위에 특정 셀을 추가해. 추가 필드도 포함할 수 있어.
  • exclude: — 데카르트 곱에서 특정 셀을 제거해.
  • fail-fast: false — 하나가 실패해도 모든 셀을 계속 실행해. 기본값은 true야.

자주 쓰는 패턴

  • 플래그와 함께 실험 셀 추가하기. 3.10부터 3.12 외에 continue-on-error: true로 Python 3.13을 추가하면 PR을 막지 않아.
  • 해당하지 않는 조합 건너뛰기. Postgres 16과 Python 3.10 조합은 드라이버가 지원하지 않을 수 있어. 이럴 땐 exclude를 써.
  • 셀마다 추가 설정 주입하기. 다른 DB 연결 문자열이나 타임아웃, 테스트 마커를 줄 수 있어.
  • 동적 매트릭스. 이전 작업의 jobs.outputs에서 매트릭스를 생성할 수 있어. 이건 재사용 트랙에서 다뤄.

빠른 실패 트레이드오프

fail-fast: true(기본값)는 셀 하나가 실패하면 즉시 나머지 셀을 취소해. 시간은 절약되지만 정보는 손실돼. 반면 fail-fast: false는 모든 셀이 완료될 때까지 실행해. PR에서는 true로 빠른 피드백을 얻고, main 브랜치에서는 false로 전체 결과를 확인하는 게 좋아.

Code

Include / exclude / 오류 허용·yaml
jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest]
        python: ['3.10', '3.11', '3.12']
        exclude:
          # Skip macOS x 3.10 (slow + low value)
          - os: macos-latest
            python: '3.10'
        include:
          # Try the bleeding-edge cell, but don't fail the matrix on it
          - os: ubuntu-latest
            python: '3.13-dev'
            experimental: true
    continue-on-error: ${{ matrix.experimental == true }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with: { python-version: '${{ matrix.python }}' }
      - run: pip install -e . && pytest -q

External links

Exercise

기존 매트릭스를 가져와. 런타임의 다음 메이저 버전을 continue-on-error: true인 실험 셀로 추가해. 일주일 뒤에 결정해. 유지하거나(버전 졸업) 삭제하거나(롤백).

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.