지원 버전 테스트
README에 'Python 3.10-3.12 지원'이라고 적었다면, CI가 모든 PR마다 이를 증명해야 해. 그렇지 않으면 그 지원 주장은 언젠가 들통날 거짓말일 뿐이야.
기본 패턴은 지원하는 각 차원에 대한 매트릭스를 만드는 거야. 차원의 예시는 이런 것들이 있어:
- 언어 버전 (Python 3.10, 3.11, 3.12, 3.13).
- 운영체제 (ubuntu-latest, macos-latest, windows-latest).
- 데이터베이스 드라이버 (postgres 14, 15, 16).
- 프레임워크 버전 (Django 4.2, 5.0).
매트릭스의 각 셀은 자기만의 작업을 가지고 병렬로 실행되며 각자 로그를 남겨. UI에서 작업 이름은 템플릿을 기반으로 만들어져 (예: test (python-3.12, ubuntu-latest)).
비용 통제
단순하게 4×3 매트릭스를 구성하면 PR 하나당 12번의 실행이 발생해. 비용이 급격히 늘어나지. 두 가지 타협안이 있어:
- main 브랜치엔 전체 매트릭스, PR엔 스모크 매트릭스. PR에서는 리눅스의 최저 버전과 최고 버전만 테스트해. main 브랜치에서 전체 매트릭스를 돌리는 거지.
- 리눅스 실패 시 느린 운영체제 취소. 작업 수준에서
fail-fast: true를 설정해 첫 번째 실패가 발생하면 전체 매트릭스를 중단하는 거야.