update roadmap milestones and test matrix skill

Signed-off-by: toki <r0bin5736@gmail.com>
This commit is contained in:
toki 2026-05-21 22:15:02 +09:00
parent 081a76c632
commit 3727f394be
10 changed files with 184 additions and 53 deletions

View file

@ -172,7 +172,23 @@ If you want a copyable scaffold for using this module from another repository, s
## Running Tests
Local commands are documented here for development and troubleshooting. Continuous verification automation is tracked in [agent-ops/roadmap/ROADMAP.md](agent-ops/roadmap/ROADMAP.md).
Local commands are documented here for development and troubleshooting. The repeatable repository-local validation entry point is:
```bash
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --all
```
It runs proto schema sync, same-language tests, and cross-language checks, then prints PASS/FAIL tables with reproduction commands for failures. Use `--proto`, `--unit`, or `--cross` to run a smaller slice.
Continuous verification runner integration is tracked in [agent-ops/roadmap/ROADMAP.md](agent-ops/roadmap/ROADMAP.md).
Proto schema sync:
```bash
tools/check_proto_sync.sh
```
Same-language checks:
```bash
cd dart
@ -242,9 +258,3 @@ cd typescript
./node_modules/.bin/tsx crosstest/typescript_kotlin.ts
./node_modules/.bin/tsx crosstest/typescript_python.ts
```
When proto files change, also run:
```bash
tools/check_proto_sync.sh
```

View file

@ -16,7 +16,7 @@ Proto Socket은 여러 언어와 플랫폼에서 일관되게 동작하는 얇
- `README.md` 구현 상태 표: 사용 가능/계획 언어 작업으로 Milestone 목록에 요약했다.
- `README.md` 로드맵 방향 문단: 사용 가능 언어 parity, C# Unity/.NET 포트, Swift Apple 플랫폼 포트의 의존성 및 native platform 방향으로 옮겼다.
- `README.md` Jenkins 계획 메모: 지속 검증으로 옮겼다.
- `README.md` 지속 검증 계획 메모: 지속 검증으로 옮겼다.
- `PORTING_GUIDE.md` C# 및 Swift 가이드: 계획된 포팅 Milestone에 연결했다.
- 이전 로드맵의 순번 붙은 단계명, Milestone 이름, Milestone 파일명은 순번 없는 이름과 slug로 정리했다.
@ -25,9 +25,10 @@ Proto Socket은 여러 언어와 플랫폼에서 일관되게 동작하는 얇
| 단계 | 상태 | 목표 |
|-------|--------|------|
| 프로토콜 기반 | 완료 | 프로토콜 버전 `0.1`, 와이어 포맷, 버전 정책, canonical proto 원본, 레퍼런스 구현 패턴을 정의한다. |
| 검증과 호환성 | 진행 중 | 동일 언어 테스트, 크로스 언어 테스트, proto 동기화 검사, 지속 검증으로 사용 가능한 구현체들을 정렬한다. |
| 남은 native platform 포팅 | 계획 | 프로토콜 계약과 native-first 런타임 방향을 유지하면서 C# 및 Swift 구현을 추가한다. |
| 릴리즈 준비 | 계획 | 외부 사용을 위한 언어 패키지, 릴리즈 문서, 호환성 설명을 준비한다. |
| 검증과 호환성 | 완료 | 동일 언어 테스트, 크로스 언어 테스트, proto 동기화 검사, 지속 검증으로 사용 가능한 구현체들을 정렬한다. |
| 안정화와 유지 | 진행 중 | 현재 5개 언어 구현을 완성형 후보로 보고 안정성 판단, 문서 정합성, 유지 기준을 정리한다. |
| 남은 native platform 포팅 | 보류 | 실제 수요가 생기기 전까지 C# 및 Swift 구현 추가를 보류한다. |
| 릴리즈 준비 | 보류 | Git 기반 사용으로 충분한 동안 외부 package registry 릴리즈 준비를 보류한다. |
## Milestone 목록
@ -35,10 +36,11 @@ Proto Socket은 여러 언어와 플랫폼에서 일관되게 동작하는 얇
|-----------|-------|--------|------|---------|
| 프로토콜 기준선 | 프로토콜 기반 | 완료 | agent-ops/roadmap/milestones/protocol-baseline.md | 프로토콜 `0.1`, canonical proto, 프레이밍, 하트비트, nonce, 버전 정책을 문서화했다. |
| 사용 가능 언어 parity | 검증과 호환성 | 완료 | agent-ops/roadmap/milestones/available-language-parity.md | Dart, Go, Kotlin, Python, TypeScript가 사용 가능 상태이며 동일 언어 및 크로스 언어 테스트 진입점이 있다. |
| 지속 검증 | 검증과 호환성 | 진행 중 | agent-ops/roadmap/milestones/continuous-verification.md | 지원 언어 및 크로스 언어 테스트 매트릭스를 자동화한다. 현재 외부 실행 후보는 Jenkins다. |
| C# Unity/.NET 포트 | 남은 native platform 포팅 | 계획 | agent-ops/roadmap/milestones/csharp-port.md | 가능한 곳에서는 native 런타임 패턴을 사용해 Unity와 .NET용 C# 구현을 추가한다. |
| Swift Apple 플랫폼 포트 | 남은 native platform 포팅 | 계획 | agent-ops/roadmap/milestones/swift-port.md | 가능한 곳에서는 Swift concurrency와 Apple native transport API를 사용해 iOS/macOS용 Swift 구현을 추가한다. |
| 릴리즈 준비 | 릴리즈 준비 | 계획 | agent-ops/roadmap/milestones/release-readiness.md | 언어별 패키지 배포, 호환성 메모, 릴리즈 검증을 준비한다. |
| 지속 검증 | 검증과 호환성 | 완료 | agent-ops/roadmap/milestones/continuous-verification.md | 지원 언어, 크로스 언어 테스트, proto 동기화 검사를 저장소 로컬 검증 진입점으로 자동화했다. 외부 실행기는 상위 `../oto` 프로젝트의 표준 CI/CD 실행 방식이 확정된 뒤 연결한다. |
| 안정화 기준선 | 안정화와 유지 | 진행 중 | agent-ops/roadmap/milestones/stability-baseline.md | 현재 5개 언어 구현을 완성형 후보로 보고 안정성 판단과 유지 기준을 정리한다. |
| C# Unity/.NET 포트 | 남은 native platform 포팅 | 보류 | 실제 Unity/.NET 소비 수요가 생길 때까지 C# 구현 추가를 보류한다. |
| Swift Apple 플랫폼 포트 | 남은 native platform 포팅 | 보류 | 실제 iOS/macOS 소비 수요가 생길 때까지 Swift 구현 추가를 보류한다. |
| 릴리즈 준비 | 릴리즈 준비 | 보류 | Git 기반 사용으로 충분한 동안 package registry 릴리즈 준비를 보류한다. |
## 로딩 정책
@ -48,6 +50,7 @@ Proto Socket은 여러 언어와 플랫폼에서 일관되게 동작하는 얇
## 확인 필요
- 활성 Milestone은 전체 지원 언어 및 크로스 언어 검증에 Jenkins를 계획했던 기존 README 메모에서 추론했다.
- 제품 우선순위가 바뀌면 C#과 Swift의 순서는 달라질 수 있다.
- 릴리즈 대상 registry와 패키지 배포 순서는 아직 확정되지 않았다.
- 안정화 기준선에서 현재 5개 언어 구현을 완성형으로 유지할지 판단한다.
- 실제 소비 수요가 생기면 C# 또는 Swift 포팅 보류를 해제할 수 있다.
- 외부 package registry 릴리즈 필요성이 생기면 릴리즈 준비 보류를 해제한다.
- 상위 `../oto` 프로젝트의 표준 CI/CD 실행 방식과 Proto Socket 검증 진입점의 연결 계약은 아직 확정되지 않았다.

View file

@ -2,7 +2,7 @@
## 활성 Milestone
- 지속 검증: agent-ops/roadmap/milestones/continuous-verification.md
- 안정화 기준선: agent-ops/roadmap/milestones/stability-baseline.md
## 선택 규칙

View file

@ -2,7 +2,7 @@
## 목표
외부 CI runner에서 동일 언어 테스트, 크로스 언어 테스트, proto 동기화 검사를 실행해 모든 사용 가능 구현체에 대한 신뢰도를 자동화한다.
저장소 로컬에서 동일 언어 테스트, 크로스 언어 테스트, proto 동기화 검사를 반복 가능한 단일 진입점으로 실행해 모든 사용 가능 구현체에 대한 신뢰도를 유지한다. 외부 CI/CD 실행기 연결은 상위 `../oto` 프로젝트의 표준 실행 방식이 확정된 뒤 진행한다.
## 단계
@ -10,40 +10,52 @@
## 상태
진행 중
완료
## 범위
- README의 테스트 명령 매트릭스를 반복 가능한 CI workflow로 만든다.
- README의 테스트 명령 매트릭스를 반복 가능한 로컬 검증 진입점으로 만든다.
- Dart, Go, Kotlin, Python, TypeScript 동일 언어 테스트를 포함한다.
- 사용 가능한 크로스 언어 테스트 runner를 포함한다.
- proto 파일 변경 시 proto 동기화 검사를 포함한다.
- 기존 로컬 명령 및 프로젝트 test-matrix 스킬과 workflow를 맞춘다.
- 전체 검증에 proto 동기화 검사를 포함한다.
- 기존 로컬 명령 및 프로젝트 test-matrix 스킬을 맞춘다.
- 외부 CI/CD runner 연결은 현재 범위에서 확정하지 않고, 상위 `../oto` 프로젝트의 표준 실행기를 기준 후보로 둔다.
## 필수 기능
- [ ] 외부 CI 진입점을 확정한다. 변경 전까지는 마이그레이션된 로드맵 맥락상 Jenkins를 현재 후보로 유지한다.
- [ ] Dart unit test를 실행한다.
- [ ] Go unit test를 실행한다.
- [ ] Kotlin unit test를 실행한다.
- [ ] Python unit test를 실행한다.
- [ ] TypeScript check와 unit test를 실행한다.
- [ ] Dart, Go, Kotlin, Python, TypeScript 간 사용 가능한 크로스 언어 검사를 실행한다.
- [ ] Proto binding에 영향이 있을 때 `tools/check_proto_sync.sh`를 실행한다.
- [ ] 실패를 확인하고 매트릭스를 로컬에서 다시 실행하는 방법을 문서화한다.
- [x] Dart unit test를 실행하는 로컬 매트릭스 명령을 제공한다.
- [x] Go unit test를 실행하는 로컬 매트릭스 명령을 제공한다.
- [x] Kotlin unit test를 실행하는 로컬 매트릭스 명령을 제공한다.
- [x] Python unit test를 실행하는 로컬 매트릭스 명령을 제공한다.
- [x] TypeScript check와 unit test를 실행하는 로컬 매트릭스 명령을 제공한다.
- [x] Dart, Go, Kotlin, Python, TypeScript 간 사용 가능한 크로스 언어 검사를 실행하는 로컬 매트릭스 명령을 제공한다.
- [x] 전체 검증과 개별 proto 검증에서 `tools/check_proto_sync.sh`를 실행한다.
- [x] 실패를 확인하고 매트릭스를 로컬에서 다시 실행하는 방법을 문서화한다.
- [x] 전체 로컬 매트릭스 실행 결과를 확인한다.
## 완료 기준
- 단일 CI job 또는 pipeline이 전체 지원 언어 및 크로스 언어 매트릭스를 검증할 수 있다.
- CI 실패가 실패한 언어 쌍 또는 동일 언어 package를 명확히 식별한다.
- `README.md`의 로컬 명령이 자동화 workflow와 일치한다.
- 단일 로컬 검증 명령이 proto 동기화, 전체 지원 언어, 크로스 언어 매트릭스를 검증할 수 있다.
- 실패가 proto 동기화, 실패한 언어 쌍, 또는 동일 언어 package를 명확히 식별한다.
- `README.md`의 로컬 명령이 프로젝트 test-matrix 스킬과 일치한다.
- 외부 CI/CD 실행기 연결은 상위 `../oto` 프로젝트와의 실행 계약이 확정될 때 별도 작업으로 진행할 수 있다.
## 범위 제외
- 이 마일스톤에서 C# 또는 Swift 구현 작업을 추가하지 않는다.
- Jenkins 전용 pipeline 또는 설정 파일을 추가하지 않는다.
- 이 마일스톤에서 상위 `../oto` 프로젝트 파일을 수정하지 않는다.
- CI 편의를 위해 프로토콜 동작이나 package API를 변경하지 않는다.
- 모든 일반 개발 작업에서 전체 로드맵을 읽도록 요구하지 않는다.
## 작업 컨텍스트
가장 가까운 기존 자동화 맥락으로 `agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md``agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh`를 사용한다. 사용자가 다른 runner를 선택하기 전까지 Jenkins를 현재 문서화된 후보로 본다.
가장 가까운 기존 자동화 맥락으로 `agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md``agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh`를 사용한다. Jenkins는 후보에서 제외하고, 외부 실행기는 상위 `../oto` 프로젝트의 표준 CI/CD 실행 방식이 정해진 뒤 연결한다.
## 검증 기록
- 2026-05-21: `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --all` 통과. Proto 동기화, Dart/Go/Kotlin/Python/TypeScript 동일 언어 테스트, 20개 크로스 언어 방향이 모두 `PASS`.
## 확인 필요
- 상위 `../oto` 프로젝트의 표준 CI/CD 실행 방식이 확정되면 이 저장소의 로컬 검증 진입점을 외부 실행기로 연결한다.

View file

@ -10,7 +10,7 @@
## 상태
계획
보류
## 범위
@ -44,4 +44,4 @@
## 작업 컨텍스트
구현 전 `PORTING_GUIDE.md`의 C# 섹션을 사용한다. 동시성과 close-once 패턴은 Go를, public API 형태와 parser map 예시는 Dart를 참고한다.
현재는 새 언어 확장 필요성이 낮아 보류한다. 실제 Unity/.NET 소비 수요가 생기면 `PORTING_GUIDE.md`의 C# 섹션을 사용한다. 동시성과 close-once 패턴은 Go를, public API 형태와 parser map 예시는 Dart를 참고한다.

View file

@ -10,7 +10,7 @@
## 상태
계획
보류
## 범위
@ -41,4 +41,4 @@
## 작업 컨텍스트
릴리즈 호환성 기준 문서는 `VERSIONING.md`다. README는 package가 아직 배포되지 않았더라도 저장소에 포함된 구현체가 문서화된 프로토콜 계약을 유지해야 한다고 설명한다.
현재는 Git 기반 사용으로 충분하고 package registry 릴리즈 필요성이 낮아 보류한다. 릴리즈 호환성 기준 문서는 `VERSIONING.md`다. README는 package가 아직 배포되지 않았더라도 저장소에 포함된 구현체가 문서화된 프로토콜 계약을 유지해야 한다고 설명한다.

View file

@ -0,0 +1,46 @@
# 안정화 기준선
## 목표
현재 사용 가능한 Dart, Go, Kotlin, Python, TypeScript 구현을 완성형 후보로 보고, 새 언어 확장이나 package 릴리즈보다 안정성 판단과 장기 유지 기준을 먼저 정리한다.
## 단계
안정화와 유지
## 상태
진행 중
## 범위
- 현재 5개 언어 구현이 프로토콜 `0.1` 계약을 안정적으로 유지하는지 확인한다.
- 전체 로컬 검증 매트릭스와 proto 동기화 검사를 안정성 판단의 기준으로 둔다.
- README, PROTOCOL, VERSIONING, PORTING_GUIDE의 설명이 현재 운영 방식과 맞는지 점검한다.
- Git 기반 사용을 현재 주 사용 방식으로 보고, package registry 릴리즈는 보류 상태로 유지한다.
- 새 언어 확장은 실제 수요가 생기기 전까지 보류 상태로 유지한다.
## 필수 기능
- [ ] 현재 지원 언어 범위와 비목표를 README 또는 로드맵에 명확히 정리한다.
- [ ] 전체 검증 매트릭스를 안정성 확인 기준으로 반복 실행하고 결과를 기록한다.
- [ ] PROTOCOL, VERSIONING, README, PORTING_GUIDE 간 설명 충돌이 없는지 점검한다.
- [ ] 프로토콜/API 변경 필요 후보를 검토하고, 없으면 현재 계약을 동결 후보로 기록한다.
- [ ] 유지보수 모드에서 허용할 작업 범위와 재개 조건을 문서화한다.
## 완료 기준
- 현재 5개 언어 구현을 당분간 완성형으로 유지할지 판단할 수 있는 근거가 정리되어 있다.
- 전체 검증 매트릭스와 proto 동기화 검사가 안정성 판단 기준으로 문서화되어 있다.
- 새 언어 확장, package 릴리즈, 프로토콜 변경을 언제 재개할지 기준이 명확하다.
## 범위 제외
- C# 또는 Swift 구현을 시작하지 않는다.
- Package registry 릴리즈 작업을 시작하지 않는다.
- 안정화 판단 없이 프로토콜이나 public API를 변경하지 않는다.
- 상위 `../oto` 프로젝트의 CI/CD 실행기를 연결하지 않는다.
## 작업 컨텍스트
가장 가까운 검증 근거는 `agent-ops/roadmap/milestones/continuous-verification.md`의 검증 기록과 `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh`다. 새 언어 포팅과 릴리즈 준비는 실제 필요가 생길 때 보류를 해제한다.

View file

@ -10,7 +10,7 @@
## 상태
계획
보류
## 범위
@ -44,4 +44,4 @@
## 작업 컨텍스트
구현 전 `PORTING_GUIDE.md`의 Swift 섹션을 사용한다. 공유 상태와 cancellation 동작이 프로토콜 core에 맞는 곳에서는 actor isolation과 Swift concurrency를 우선한다.
현재는 새 언어 확장 필요성이 낮아 보류한다. 실제 iOS/macOS 소비 수요가 생기면 `PORTING_GUIDE.md`의 Swift 섹션을 사용한다. 공유 상태와 cancellation 동작이 프로토콜 core에 맞는 곳에서는 actor isolation과 Swift concurrency를 우선한다.

View file

@ -1,23 +1,24 @@
---
name: run-proto-socket-test-matrix
description: Run and summarize the Proto Socket validation matrix across Dart, Go, Kotlin, Python, and TypeScript. Use when the user asks for "전체 테스트", "전체테스트해", "전체 검증", "테스트 매트릭스", "언어별 크로스 테스트", "언어간 크로스 테스트", "크로스 테스트해", "통신 테스트", or similar requests that require same-language unit/transport tests plus cross-language server/client communication checks with PASS/FAIL tables.
description: Run and summarize the Proto Socket validation matrix across proto schema sync plus Dart, Go, Kotlin, Python, and TypeScript tests. Use when the user asks for "전체 테스트", "전체테스트해", "전체 검증", "테스트 매트릭스", "proto 동기화 검사", "언어별 크로스 테스트", "언어간 크로스 테스트", "크로스 테스트해", "통신 테스트", or similar requests that require proto sync, same-language unit/transport tests, and cross-language server/client communication checks with PASS/FAIL tables.
---
# Run Proto Socket Test Matrix
## 목적
Proto Socket의 지원 언어 전체 테스트 상태를 재현 가능한 명령으로 확인하고, 사용자에게 `PASS`/`FAIL` 표로 보고한다. 기본 범위는 동일 언어 테스트와 언어간 크로스 통신 테스트 전체이며, 요청이 크로스 테스트만이면 크로스 범위만 실행한다.
Proto Socket의 proto schema sync와 지원 언어 전체 테스트 상태를 재현 가능한 명령으로 확인하고, 사용자에게 `PASS`/`FAIL` 표로 보고한다. 기본 범위는 proto 동기화 검사, 동일 언어 테스트, 언어간 크로스 통신 테스트 전체이며, 요청이 크로스 테스트만이면 크로스 범위만 실행한다.
## 언제 호출할지
- 사용자가 “전체 테스트해”, “전체테스트”, “전체 검증”, “테스트 매트릭스”처럼 전체 검증을 요청할 때
- 사용자가 “proto 동기화 검사”, “프로토 동기화”, “스키마 sync”처럼 proto 복사본 동기화 검증을 요청할 때
- 사용자가 “언어간 크로스 테스트해”, “언어별 크로스 테스트”, “통신 테스트”처럼 언어 간 통신 검증을 요청할 때
- 새 언어 추가, 통신 구현 변경, 테스트 정리 후 지원 언어 매트릭스의 현재 통과 여부를 표로 정리해야 할 때
## 입력
- `scope`: `all`, `unit`, `cross` 중 하나. 사용자가 범위를 지정하지 않으면 `all`.
- `scope`: `all`, `unit`, `cross`, `proto` 중 하나. 사용자가 범위를 지정하지 않으면 `all`.
- `report-format`: 기본은 Markdown 표. 실패 시 실패 로그 tail과 재현 명령을 함께 적는다.
## 먼저 확인할 것
@ -31,6 +32,7 @@ Proto Socket의 지원 언어 전체 테스트 상태를 재현 가능한 명령
1. **범위 결정**
- “전체 테스트”, “전체 검증”, “테스트 매트릭스” 요청은 `all`로 실행한다.
- “proto 동기화 검사”, “프로토 sync” 요청은 `proto`로 실행한다.
- “언어간 크로스 테스트”, “크로스 테스트”, “통신 테스트” 요청은 사용자가 유닛 테스트도 요구하지 않는 한 `cross`로 실행한다.
- “유닛 테스트”, “동일 언어 테스트” 요청은 `unit`으로 실행한다.
@ -41,14 +43,21 @@ Proto Socket의 지원 언어 전체 테스트 상태를 재현 가능한 명령
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --all
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --unit
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --cross
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --proto
```
3. **수동 fallback**
- 스크립트를 쓸 수 없으면 README의 package-local 명령을 사용한다.
- Proto 동기화 검사:
```bash
tools/check_proto_sync.sh
```
- 동일 언어 테스트:
```bash
(cd dart && dart test)
(cd dart && dart pub get && dart test)
(cd go && go test ./...)
(cd kotlin && ./gradlew test)
(cd python && python3 -m pytest -q)
@ -82,11 +91,12 @@ bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh
4. **결과 판정**
- 명령 종료 코드가 0이고 `FAIL` 라인이 없으면 `PASS`.
- Proto 동기화 검사는 `tools/check_proto_sync.sh` 종료 코드가 0이면 `PASS`.
- 크로스테스트는 각 방향의 `PASS scenario=...` 라인 수가 기대 개수와 일치하는지도 검증한다.
- 동일 언어 대각선 셀은 `unit` 또는 `all` 범위에서 해당 언어 동일 언어 테스트가 통과했을 때 `PASS`로 표시한다. `cross`만 실행했다면 대각선은 `-`로 둔다.
5. **결과 보고**
- 동일 언어 테스트 표와 서버/클라이언트 크로스 통신 표를 한국어로 보고한다.
- 요청 범위에 맞춰 proto 동기화 표, 동일 언어 테스트 표, 서버/클라이언트 크로스 통신 표를 한국어로 보고한다.
- 실패가 있으면 실패 행을 먼저 보여주고, 실패 로그 tail과 재현 명령을 적는다.
- 코드 변경은 하지 않았는지, 테스트 실행으로 생성된 캐시/빌드 산출물 외 작업트리 변경이 있는지 확인해 함께 알린다.
@ -101,10 +111,15 @@ bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh
## 출력 형식
```markdown
**Proto 동기화**
| 검사 | 명령 | 결과 |
|---|---|---|
| schema sync | `tools/check_proto_sync.sh` | PASS |
**동일언어**
| 언어 | 명령 | 결과 |
|---|---|---|
| Dart | `dart test` | PASS |
| Dart | `dart pub get && dart test` | PASS |
**언어간 통신**
| 서버 \ 클라이언트 | Dart | Go | Kotlin | Python | TypeScript |

View file

@ -3,10 +3,11 @@ set -u
usage() {
cat <<'USAGE'
Usage: run_matrix.sh [--all|--unit|--cross]
Usage: run_matrix.sh [--all|--unit|--cross|--proto]
Runs Proto Socket unit/same-language tests and/or cross-language communication
tests, then prints Markdown PASS/FAIL tables. Defaults to --all.
Runs Proto Socket proto schema sync, unit/same-language tests, and/or
cross-language communication tests, then prints Markdown PASS/FAIL tables.
Defaults to --all.
USAGE
}
@ -15,6 +16,7 @@ case "${1:-}" in
""|--all) mode="all" ;;
--unit) mode="unit" ;;
--cross) mode="cross" ;;
--proto) mode="proto" ;;
-h|--help) usage; exit 0 ;;
*) usage >&2; exit 2 ;;
esac
@ -26,7 +28,7 @@ log_dir="$(mktemp -d "${TMPDIR:-/tmp}/proto-socket-matrix.XXXXXX")"
languages=("Dart" "Go" "Kotlin" "Python" "TypeScript")
declare -A unit_cmds=(
["Dart"]="dart test"
["Dart"]="dart pub get && dart test"
["Go"]="go test ./..."
["Kotlin"]="./gradlew test"
["Python"]="python3 -m pytest -q"
@ -43,6 +45,12 @@ declare -A unit_result
declare -A unit_status
declare -A unit_summary
proto_cmd="tools/check_proto_sync.sh"
proto_dir="$repo_root"
proto_result="-"
proto_status=""
proto_summary=""
cross_cases=(
"Go|Dart|$repo_root/go|go run ./crosstest/go_dart.go"
"Go|Kotlin|$repo_root/go|go run ./crosstest/go_kotlin.go"
@ -116,6 +124,20 @@ run_unit_tests() {
done
}
run_proto_sync() {
local log_file status
log_file="$log_dir/proto_sync.log"
run_logged "proto sync: $proto_cmd" "$proto_dir" "$proto_cmd" "$log_file"
status=$?
proto_status="$status"
if [ "$status" -eq 0 ]; then
proto_result="PASS"
else
proto_result="FAIL"
fi
proto_summary="$(tail -n 1 "$log_file" | tr '\n' ' ')"
}
run_cross_tests() {
local item server client dir cmd key log_file status pass_count fail_count
for item in "${cross_cases[@]}"; do
@ -138,6 +160,13 @@ run_cross_tests() {
done
}
print_proto_table() {
printf '\n**Proto 동기화**\n'
printf '| 검사 | 명령 | 결과 |\n'
printf '|---|---|---|\n'
printf '| schema sync | `%s` | %s |\n' "$proto_cmd" "$proto_result"
}
print_unit_table() {
local lang
printf '\n**동일언어**\n'
@ -194,6 +223,15 @@ print_failures() {
local failed=0
local lang item server client dir cmd key log_file
if [ "${proto_result:-}" = "FAIL" ]; then
failed=1
log_file="$log_dir/proto_sync.log"
printf '\n**실패: Proto 동기화 검사**\n'
printf '재현 명령: `(cd . && %s)`\n\n' "$proto_cmd"
tail -n 80 "$log_file"
printf '\n'
fi
for lang in "${languages[@]}"; do
if [ "${unit_result[$lang]:-}" = "FAIL" ]; then
failed=1
@ -224,6 +262,7 @@ print_failures() {
main() {
case "$mode" in
all)
run_proto_sync
run_unit_tests
run_cross_tests
;;
@ -233,8 +272,14 @@ main() {
cross)
run_cross_tests
;;
proto)
run_proto_sync
;;
esac
if [ "$mode" = "all" ] || [ "$mode" = "proto" ]; then
print_proto_table
fi
if [ "$mode" = "all" ] || [ "$mode" = "unit" ]; then
print_unit_table
fi