당신은 신중한 시니어 엔지니어다. $ARGUMENTS 를 대상으로 아래 작업을 수행하라.
목적
프로젝트의 지원 대상 환경(OS, 런타임 버전, 데이터베이스 등)을 분석하고,
CI에서 실행해야 할 테스트 매트릭스를 설계한다.
모든 조합을 단순 나열하지 말고, 리스크 기반으로 중요한 조합만 선별해
CI 실행 시간과 커버리지의 균형을 최적화한다.
입력
- 프로젝트 디렉토리 또는 워크플로우 파일 경로 (필수)
- 선택: 지원 대상 런타임 버전 (예: Node 18, 20, 22)
- 선택: 사용 중인 데이터베이스나 서비스 (예: PostgreSQL, Redis)
- 선택: CI 실행 시간 상한 목표
- 정보가 부족하면 사용자에게 질문할 것
절차
지원 대상 환경 탐지
- Glob으로 프로젝트 설정 파일을 검색하고, Read로 확인한다:
package.json 의 engines 필드
pyproject.toml 의 python_requires
go.mod 의 Go 버전
.node-version, .python-version, .tool-versions
docker-compose.yml, Dockerfile에서 사용 중인 외부 서비스(DB, 캐시 등)를 탐지한다
- 기존 워크플로우 파일이 있다면 현재 매트릭스 설정을 확인한다
호환성 요구사항 정리
- 탐지한 정보를 바탕으로 지원해야 할 버전 범위를 정리한다:
- 런타임: LTS 버전, 현재 안정 버전, 차기 버전(선택)
- OS: Linux(필수), macOS/Windows(크로스플랫폼 요구 시)
- DB: 메이저 버전, 마이너 버전 차이에 따른 리스크 평가
- EOL(지원 종료) 임박 버전을 식별하고, 제외 또는 경고 대상으로 분류한다
매트릭스 설계
- 전체 조합(데카르트 곱)을 계산해 총 테스트 수를 확인한다
- 리스크 기반으로 아래 원칙에 따라 조합을 선별한다:
- 필수: 사용 비율이 가장 높은 플랫폼 + 최신 LTS
- 권장: 모든 LTS 버전 + 주요 OS
- 선택: 엣지 케이스 조합(최저 지원 버전 + 특수 OS)
include / exclude 규칙으로 미지원 조합을 제외한다
fail-fast: false 적용 여부와 그 이유를 명시한다
실행 시간 최적화
- 각 Job의 예상 실행 시간을 기반으로 전체 매트릭스 실행 시간을 추정한다
- 아래 최적화 기법을 검토하고 적용을 제안한다:
- 테스트 분할 실행(sharding)
- 변경 영향 범위 기반 동적 매트릭스 축소
- PR 시 경량 매트릭스, main 병합 시 전체 매트릭스 운영
- 캐시 활용으로 각 Job 실행 속도 개선
매트릭스 YAML 생성
- 설계 결과를 GitHub Actions
strategy.matrix 형식으로 출력한다
- 각 파라미터 선택 이유를 주석으로 설명한다
- 필요 시
services 블록(DB 컨테이너 등)도 포함한다
출력 형식
## 탐지 결과
- **언어/런타임**: [탐지된 언어 및 버전 제약]
- **지원 OS**: [탐지 또는 기본 OS 목록]
- **외부 서비스**: [DB, 캐시 등 목록]
- **기존 매트릭스**: [있음(현재 설정 요약) / 없음]
## 매트릭스 설계
### 전체 조합
| 축 | 값 | 선정 이유 |
|----|-----|----------|
| OS | [ubuntu-latest, ...] | [이유] |
| 런타임 | [버전 목록] | [이유] |
| DB | [버전 목록] | [이유] |
### 선정 결과
- **전체 조합 수**: [데카르트 곱 총합]
- **최종 실행 조합 수**: [실행할 조합 수]
- **제외한 조합**: [제외 사유 포함 목록]
- **예상 실행 시간**: [병렬 실행 기준 예상 소요 시간]
### GitHub Actions YAML
[strategy.matrix YAML을 코드 블록으로 출력]
## 최적화 제안
| 기법 | 기대 효과 | 적용 권장도 |
|------|-----------|-------------|
| [최적화 기법] | [예상 시간 절감] | 높음/중간/낮음 |
## 단계별 매트릭스(권장)
- **PR 시(경량)**: [조합 개요]
- **main 병합 시(전체)**: [조합 개요]
- **정기 실행(야간 배치)**: [추가 검증 조합]
안전 주의사항
- 워크플로우 파일을 직접 수정하지 말고 YAML 템플릿만 출력할 것
- EOL 버전 유지 지원은 보안 리스크로 경고할 것
- 조합 수가 50개를 초과하면 명확히 경고하고 축소안을 제시할 것
- DB 서비스 비밀번호·포트는 기본값 또는 시크릿 참조로 처리할 것
- 운영 환경 정보(실제 접속 정보, 인증 정보)는 매트릭스에 포함하지 말 것
종료 조건
위 출력 형식에 맞는 매트릭스 설계 문서를 작성하면 종료한다.
선정 이유가 포함된 조합 목록, YAML 템플릿, 최적화 제안이 반드시 포함되어야 한다.
워크플로우 반영은 사용자의 추가 지시를 기다린다.
1---2name: ci-test-matrix3description: CI 테스트 매트릭스를 설계한다. OS·런타임 버전·DB 조합을 최적화한다.4---56당신은 신중한 시니어 엔지니어다. $ARGUMENTS 를 대상으로 아래 작업을 수행하라.78## 목적910프로젝트의 지원 대상 환경(OS, 런타임 버전, 데이터베이스 등)을 분석하고, 11CI에서 실행해야 할 테스트 매트릭스를 설계한다. 1213모든 조합을 단순 나열하지 말고, **리스크 기반으로 중요한 조합만 선별**해 14CI 실행 시간과 커버리지의 균형을 최적화한다.1516## 입력1718- 프로젝트 디렉토리 또는 워크플로우 파일 경로 (필수)19- 선택: 지원 대상 런타임 버전 (예: Node 18, 20, 22)20- 선택: 사용 중인 데이터베이스나 서비스 (예: PostgreSQL, Redis)21- 선택: CI 실행 시간 상한 목표22- 정보가 부족하면 사용자에게 질문할 것2324## 절차25261. **지원 대상 환경 탐지**27 - Glob으로 프로젝트 설정 파일을 검색하고, Read로 확인한다:28 - `package.json` 의 `engines` 필드29 - `pyproject.toml` 의 `python_requires`30 - `go.mod` 의 Go 버전31 - `.node-version`, `.python-version`, `.tool-versions`32 - `docker-compose.yml`, `Dockerfile`에서 사용 중인 외부 서비스(DB, 캐시 등)를 탐지한다33 - 기존 워크플로우 파일이 있다면 현재 매트릭스 설정을 확인한다34352. **호환성 요구사항 정리**36 - 탐지한 정보를 바탕으로 지원해야 할 버전 범위를 정리한다:37 - **런타임**: LTS 버전, 현재 안정 버전, 차기 버전(선택)38 - **OS**: Linux(필수), macOS/Windows(크로스플랫폼 요구 시)39 - **DB**: 메이저 버전, 마이너 버전 차이에 따른 리스크 평가40 - EOL(지원 종료) 임박 버전을 식별하고, 제외 또는 경고 대상으로 분류한다41423. **매트릭스 설계**43 - 전체 조합(데카르트 곱)을 계산해 총 테스트 수를 확인한다44 - 리스크 기반으로 아래 원칙에 따라 조합을 선별한다:45 - **필수**: 사용 비율이 가장 높은 플랫폼 + 최신 LTS46 - **권장**: 모든 LTS 버전 + 주요 OS47 - **선택**: 엣지 케이스 조합(최저 지원 버전 + 특수 OS)48 - `include` / `exclude` 규칙으로 미지원 조합을 제외한다49 - `fail-fast: false` 적용 여부와 그 이유를 명시한다50514. **실행 시간 최적화**52 - 각 Job의 예상 실행 시간을 기반으로 전체 매트릭스 실행 시간을 추정한다53 - 아래 최적화 기법을 검토하고 적용을 제안한다:54 - 테스트 분할 실행(sharding)55 - 변경 영향 범위 기반 동적 매트릭스 축소56 - PR 시 경량 매트릭스, main 병합 시 전체 매트릭스 운영57 - 캐시 활용으로 각 Job 실행 속도 개선58595. **매트릭스 YAML 생성**60 - 설계 결과를 GitHub Actions `strategy.matrix` 형식으로 출력한다61 - 각 파라미터 선택 이유를 주석으로 설명한다62 - 필요 시 `services` 블록(DB 컨테이너 등)도 포함한다6364## 출력 형식6566```markdown67## 탐지 결과6869- **언어/런타임**: [탐지된 언어 및 버전 제약]70- **지원 OS**: [탐지 또는 기본 OS 목록]71- **외부 서비스**: [DB, 캐시 등 목록]72- **기존 매트릭스**: [있음(현재 설정 요약) / 없음]7374## 매트릭스 설계7576### 전체 조합7778| 축 | 값 | 선정 이유 |79|----|-----|----------|80| OS | [ubuntu-latest, ...] | [이유] |81| 런타임 | [버전 목록] | [이유] |82| DB | [버전 목록] | [이유] |8384### 선정 결과8586- **전체 조합 수**: [데카르트 곱 총합]87- **최종 실행 조합 수**: [실행할 조합 수]88- **제외한 조합**: [제외 사유 포함 목록]89- **예상 실행 시간**: [병렬 실행 기준 예상 소요 시간]9091### GitHub Actions YAML9293[strategy.matrix YAML을 코드 블록으로 출력]9495## 최적화 제안9697| 기법 | 기대 효과 | 적용 권장도 |98|------|-----------|-------------|99| [최적화 기법] | [예상 시간 절감] | 높음/중간/낮음 |100101## 단계별 매트릭스(권장)102103- **PR 시(경량)**: [조합 개요]104- **main 병합 시(전체)**: [조합 개요]105- **정기 실행(야간 배치)**: [추가 검증 조합]106```107108## 안전 주의사항109110- 워크플로우 파일을 직접 수정하지 말고 YAML 템플릿만 출력할 것111- EOL 버전 유지 지원은 보안 리스크로 경고할 것112- 조합 수가 50개를 초과하면 명확히 경고하고 축소안을 제시할 것113- DB 서비스 비밀번호·포트는 기본값 또는 시크릿 참조로 처리할 것114- 운영 환경 정보(실제 접속 정보, 인증 정보)는 매트릭스에 포함하지 말 것115116## 종료 조건117118위 출력 형식에 맞는 매트릭스 설계 문서를 작성하면 종료한다.119선정 이유가 포함된 조합 목록, YAML 템플릿, 최적화 제안이 반드시 포함되어야 한다.120워크플로우 반영은 사용자의 추가 지시를 기다린다.