From 29958508b29a8fb264d4f9c50e9a90d1b8931276 Mon Sep 17 00:00:00 2001 From: Sin-Kang Date: Sat, 17 Oct 2026 18:06:20 +0900 Subject: [PATCH] chore: focus tests on behavior and reduce redundant CI work --- AGENTS.md | 16 ++++++++++++++++ TESTING.md | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 AGENTS.md create mode 100644 TESTING.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..b0436fd --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,16 @@ +# .github 작업 지침 + + +## 테스트 가치와 CI 비용 + +- 테스트는 실제 사용자 동작, 공개 API/호환성, 권한·보안, 데이터 무결성/손실 방지와 재현된 장애의 회귀 방지에 집중한다. +- 문서·문구·단순 스타일·설정 등 영향이 작은 변경에 테스트를 자동으로 추가하지 않는다. 새 파일보다 기존 테스트 보강을 우선한다. +- 구현을 그대로 복사한 예상값, 특정 변수명·CSS/JSX 문자열·파일 배치·전체 설정 스냅샷은 실제 계약이 아닌 한 새로 고정하지 않는다. 실제 접근성·보안·배포 계약을 소스 검사라는 이유만으로 없애지 않는다. +- 중복 검사는 보호 대상과 기존 대체 검사를 확인해 통합한다. 중요한 단위·통합·E2E 검사가 서로 다른 실패를 잡는다면 유지한다. 삭제/통합 이유와 남는 검증을 PR에 기록한다. +- 수정 중에는 실패한 테스트와 변경 영향 범위부터 실행한다. 실패를 확인하고 원인을 고치며, 성공할 때까지 근거 없이 반복 실행하거나 기준을 낮추지 않는다. +- 같은 커밋(SHA)의 CI 재시도는 `gh run rerun RUN_ID --failed --repo devslab-kr/REPOSITORY` 또는 특정 `--job JOB_ID`를 우선한다. 성공한 작업까지 다시 돌리는 전체 재시도는 필요한 근거가 있을 때만 한다. +- GitHub의 실패 작업 재시도는 그 작업의 준비 단계 전체와 필요한 후속 작업을 다시 실행할 수 있다. 로컬은 테스트 도구의 파일/케이스 필터로 실패 범위를 좁힌다. +- 코드를 수정해 SHA가 바뀌면 과거 SHA의 성공을 새 코드의 검증으로 간주하지 않는다. 수정 영향·의존 범위를 재검증하고 저장소의 필수 병합/릴리스 검증을 충족한다. 같은 SHA에서 이미 성공한 작업은 불필요하게 반복하지 않는다. +- PR의 오래된 실행은 concurrency로 취소하되 배포·릴리스 작업은 임의로 중단하지 않는다. 캐시·빌드 재사용으로 중복 비용을 줄이고 테스트 생략·실패 무시로 비용을 줄이지 않는다. +- 보고에는 검증한 SHA, 실행 명령/작업, 결과, 실행하지 않은 범위와 이유를 남긴다. 테스트 파일 수·커버리지 수치 자체를 목표로 삼지 않는다. + diff --git a/TESTING.md b/TESTING.md new file mode 100644 index 0000000..ea97acf --- /dev/null +++ b/TESTING.md @@ -0,0 +1,36 @@ +# DevsLab 테스트 운영 기준 + +2026-10-17 조직 공통 기준. 각 저장소의 `AGENTS.md`에서 작업 에이전트에게 같은 규칙을 적용한다. 저장소별 추가 보안·릴리스 요구는 유지한다. + + +## 테스트 가치와 CI 비용 + +- 테스트는 실제 사용자 동작, 공개 API/호환성, 권한·보안, 데이터 무결성/손실 방지와 재현된 장애의 회귀 방지에 집중한다. +- 문서·문구·단순 스타일·설정 등 영향이 작은 변경에 테스트를 자동으로 추가하지 않는다. 새 파일보다 기존 테스트 보강을 우선한다. +- 구현을 그대로 복사한 예상값, 특정 변수명·CSS/JSX 문자열·파일 배치·전체 설정 스냅샷은 실제 계약이 아닌 한 새로 고정하지 않는다. 실제 접근성·보안·배포 계약을 소스 검사라는 이유만으로 없애지 않는다. +- 중복 검사는 보호 대상과 기존 대체 검사를 확인해 통합한다. 중요한 단위·통합·E2E 검사가 서로 다른 실패를 잡는다면 유지한다. 삭제/통합 이유와 남는 검증을 PR에 기록한다. +- 수정 중에는 실패한 테스트와 변경 영향 범위부터 실행한다. 실패를 확인하고 원인을 고치며, 성공할 때까지 근거 없이 반복 실행하거나 기준을 낮추지 않는다. +- 같은 커밋(SHA)의 CI 재시도는 `gh run rerun RUN_ID --failed --repo devslab-kr/REPOSITORY` 또는 특정 `--job JOB_ID`를 우선한다. 성공한 작업까지 다시 돌리는 전체 재시도는 필요한 근거가 있을 때만 한다. +- GitHub의 실패 작업 재시도는 그 작업의 준비 단계 전체와 필요한 후속 작업을 다시 실행할 수 있다. 로컬은 테스트 도구의 파일/케이스 필터로 실패 범위를 좁힌다. +- 코드를 수정해 SHA가 바뀌면 과거 SHA의 성공을 새 코드의 검증으로 간주하지 않는다. 수정 영향·의존 범위를 재검증하고 저장소의 필수 병합/릴리스 검증을 충족한다. 같은 SHA에서 이미 성공한 작업은 불필요하게 반복하지 않는다. +- PR의 오래된 실행은 concurrency로 취소하되 배포·릴리스 작업은 임의로 중단하지 않는다. 캐시·빌드 재사용으로 중복 비용을 줄이고 테스트 생략·실패 무시로 비용을 줄이지 않는다. +- 보고에는 검증한 SHA, 실행 명령/작업, 결과, 실행하지 않은 범위와 이유를 남긴다. 테스트 파일 수·커버리지 수치 자체를 목표로 삼지 않는다. + + +## 재시도 예시 + +```sh +# 코드 변경 없이 동일 SHA의 실패 작업만 다시 실행 +gh run rerun RUN_ID --failed --repo devslab-kr/REPOSITORY + +# 특정 실패 작업: 실행(run) ID가 아니라 job 데이터베이스 ID +gh run rerun RUN_ID --job JOB_ID --repo devslab-kr/REPOSITORY + +# 로컬 Vitest: 실패 파일과 테스트 이름을 한정 +pnpm exec vitest run path/to/file.spec.ts -t "test name" + +# Playwright: 같은 체크아웃/설정에서 직전 실패 케이스만 재실행 +pnpm exec playwright test --last-failed +``` + +`--last-failed`는 직전 결과 파일이 남아 있는 환경에서만 유효하다. 새 러너에는 이 상태가 없으므로 GitHub에서는 실패 job 재시도를 사용한다. 의존성·환경·코드가 바뀌면 영향 범위를 다시 판단한다. 전체 실행이 필요한 변경은 한 번 실행하고, 같은 SHA의 실패 복구에서 전체 실행을 반복하지 않는다.