Skip to content

Commit 7fb09ac

Browse files
authored
Merge pull request #65 from DaleStudy/feat/unified-ai-review-check-run
feat: merge learning status into a single AI review check run
2 parents c7c4838 + 317d4f1 commit 7fb09ac

18 files changed

Lines changed: 667 additions & 1601 deletions

β€ŽAGENTS.mdβ€Ž

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -51,25 +51,26 @@ wrangler.jsonc Worker μ„€μ •κ³Ό 곡개 κ°’(vars)
5151
| 이벀트 | ν•˜λŠ” 일 |
5252
| ---------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
5353
| `projects_v2_item` | Week 섀정이 λ°”λ€Œλ©΄ κ²½κ³  λŒ“κΈ€μ„ λ‹¬κ±°λ‚˜ μ§€μš΄λ‹€ |
54-
| `pull_request` (`opened`, `reopened`, `synchronize`) | Week 검사, AI 풀이 뢄석 check run(`tagPatterns`), ν•™μŠ΅ ν˜„ν™© λŒ“κΈ€(`postLearningStatus`) |
54+
| `pull_request` (`opened`, `reopened`, `synchronize`) | Week 검사, AI 리뷰 check run(`aiReview`) |
5555
| `issue_comment`, `pull_request_review_comment` (`created`) | `@dalestudy` λ©˜μ…˜μ— μ‘λ‹΅ν•œλ‹€. `approve`Β·`승인` 이면 PR 을 μŠΉμΈν•˜κ³ , κ·Έ λ°–μ—λŠ” AI 리뷰λ₯Ό 단닀 |
5656

57-
Week κ²€μ‚¬λŠ” 제λͺ©μ— `Week 숫자` λ˜λŠ” `Onboarding`이 ν¬ν•¨λœ 풀이 PR을 λŒ€μƒμœΌλ‘œ ν•˜κ³ , κ²½κ³  λŒ“κΈ€μ€ 봇이 단 κ²ƒλ§Œ μ§€μš΄λ‹€. AI 풀이 뢄석과 ν•™μŠ΅ ν˜„ν™© λŒ“κΈ€μ€ 제λͺ©κ³Ό 상관없이 돌리고(`[user] Onboarding` 같은 PR 도 포함), 풀이 파일이 μ—†μœΌλ©΄ 두 ν•Έλ“€λŸ¬κ°€ AI λ₯Ό λΆ€λ₯΄μ§€ μ•Šκ³  κ±΄λ„ˆλ›΄λ‹€.
57+
Week κ²€μ‚¬λŠ” 제λͺ©μ— `Week 숫자` λ˜λŠ” `Onboarding`이 ν¬ν•¨λœ 풀이 PR을 λŒ€μƒμœΌλ‘œ ν•˜κ³ , κ²½κ³  λŒ“κΈ€μ€ 봇이 단 κ²ƒλ§Œ μ§€μš΄λ‹€. AI λ¦¬λ·°λŠ” 제λͺ©κ³Ό 상관없이 돌리고(`[user] Onboarding` 같은 PR 도 포함), 풀이 파일이 μ—†μœΌλ©΄ AI λ₯Ό λΆ€λ₯΄μ§€ μ•Šκ³  κ±΄λ„ˆλ›΄λ‹€.
5858

59-
### AI μž‘μ—…μ„ 별도 invocation 으둜 λ‚˜λˆ„κΈ°
59+
AI λ¦¬λ·°λŠ” 풀이 νŒŒμΌλ³„ μ•Œκ³ λ¦¬μ¦˜ νŒ¨ν„΄, μ˜λ„ν•œ 접근법 일치 μ—¬λΆ€(`problem-categories.json` κΈ°μ€€), μ‹œκ°„/곡간 λ³΅μž‘λ„μ™€ μž‘μ„±μžμ˜ 이번 기수 ν•™μŠ΅ ν˜„ν™©μ„ PR head μ»€λ°‹μ˜ check run ν•˜λ‚˜(`AI 리뷰`)에 λ‹΄λŠ”λ‹€. λŒ€ν™” νƒ­μ—λŠ” κ·Έ check run 으둜 κ°€λŠ” 링크 λŒ“κΈ€ ν•˜λ‚˜λ§Œ μœ μ§€ν•œλ‹€.
6060

61-
Worker ν•œ 번의 μ‹€ν–‰(invocation)은 subrequest λ₯Ό 50 κ°œκΉŒμ§€ μ“Έ 수 μžˆλ‹€. 파일이 λ§Žμ€ PR μ—μ„œ λ„˜μΉ˜μ§€ μ•Šλ„λ‘, μ›Ήν›… ν•Έλ“€λŸ¬λŠ” 두 AI μž‘μ—…μ„ 자기 μžμ‹ μ—κ²Œ λ‹€μ‹œ μš”μ²­ν•΄ λ”°λ‘œ μ‹€ν–‰ν•œλ‹€.
61+
### AI 리뷰λ₯Ό 별도 invocation 으둜 λ‚˜λˆ„κΈ°
62+
63+
Worker ν•œ 번의 μ‹€ν–‰(invocation)은 subrequest λ₯Ό 50 κ°œκΉŒμ§€ μ“Έ 수 μžˆλ‹€. 파일이 λ§Žμ€ PR μ—μ„œ λ„˜μΉ˜μ§€ μ•Šλ„λ‘, μ›Ήν›… ν•Έλ“€λŸ¬λŠ” AI 리뷰λ₯Ό 자기 μžμ‹ μ—κ²Œ λ‹€μ‹œ μš”μ²­ν•΄ λ”°λ‘œ μ‹€ν–‰ν•œλ‹€.
6264

6365
```
6466
GitHub webhook
6567
β–Ό
6668
[#1] webhook ν•Έλ“€λŸ¬ ← 50 μ˜ˆμ‚°
67-
β”œβ”€ ctx.waitUntil(fetch("/internal/tag-patterns")) β†’ [#2] tagPatterns ← 독립 50 μ˜ˆμ‚°
68-
└─ ctx.waitUntil(fetch("/internal/learning-status")) β†’ [#3] postLearningStatus ← 독립 50 μ˜ˆμ‚°
69+
└─ ctx.waitUntil(fetch("/internal/ai-review")) β†’ [#2] aiReview ← 독립 50 μ˜ˆμ‚°
6970
```
7071

71-
`INTERNAL_SECRET` κ³Ό `WORKER_URL` 이 λ‘˜ λ‹€ μžˆμ–΄μ•Ό μΌœμ§„λ‹€. ν•˜λ‚˜λΌλ„ μ—†μœΌλ©΄ 같은 invocation μ—μ„œ μ°¨λ‘€λ‘œ μ‹€ν–‰λœλ‹€.
72-
`tests/subrequest-budget.test.js` κ°€ fetch 횟수(`tagPatterns` 파일 15 κ°œμ— 37, `postLearningStatus` 파일 5 κ°œμ— 31)λ₯Ό νšŒκ·€ ν…ŒμŠ€νŠΈλ‘œ κ³ μ •ν•œλ‹€.
72+
`INTERNAL_SECRET` κ³Ό `WORKER_URL` 이 λ‘˜ λ‹€ μžˆμ–΄μ•Ό μΌœμ§„λ‹€. ν•˜λ‚˜λΌλ„ μ—†μœΌλ©΄ 같은 invocation μ—μ„œ μ‹€ν–‰λœλ‹€.
73+
`tests/subrequest-budget.test.js` κ°€ fetch 횟수(`aiReview` 파일 15 κ°œμ— 40, AI 호좜 포함)λ₯Ό νšŒκ·€ ν…ŒμŠ€νŠΈλ‘œ κ³ μ •ν•œλ‹€.
7374

7475
## 배포와 μ‹œν¬λ¦Ώ
7576

@@ -111,7 +112,6 @@ vi.mock("../utils/github.js", () => ({
111112

112113
- **Workers λŸ°νƒ€μž„μ΄λ‹€.** Node.js λͺ¨λ“ˆκ³Ό Octokit 같은 npm νŒ¨ν‚€μ§€λŠ” λŒ€λΆ€λΆ„ λ™μž‘ν•˜μ§€ μ•ŠλŠ”λ‹€. `fetch` 와 Web Crypto API 둜 직접 κ΅¬ν˜„ν•œλ‹€. Private Key λŠ” PKCS8, PKCS1 λͺ¨λ‘ λ°›λŠ”λ‹€ (`utils/github.js`).
113114
- **GraphQL 쿼리에 값을 λ¬Έμžμ—΄λ‘œ 직접 λΌμ›Œ λ„£λŠ”λ‹€.** GraphQL λ³€μˆ˜ 문법을 μ“°μ§€ μ•ŠμœΌλ―€λ‘œ μž…λ ₯κ°’ 검증을 λΉ λœ¨λ¦¬μ§€ μ•ŠλŠ”λ‹€.
114-
- **λŒ“κΈ€ μˆ¨κΉ€ 마컀(`<!-- xxx-data: ... -->`)의 직렬화 ν˜•μ‹μ„ λ°”κΏ€ λ•ŒλŠ”** μ •κ·œμ‹, λ¬Έμ„œ 주석, ν…ŒμŠ€νŠΈλ₯Ό 같은 PR μ—μ„œ ν•¨κ»˜ κ³ μΉœλ‹€. νŒŒμ‹±μ΄ 빈 κ°’μœΌλ‘œ fallback ν•˜λ©΄ νšŒκ·€κ°€ 쑰용히 λ¬»νžŒλ‹€.
115115
- μ‘λ‹΅μ—λŠ” CORS 헀더(`Access-Control-Allow-Origin: *`)κ°€ λΆ™κ³ , μ—λŸ¬λŠ” 500 으둜 λŒλ €μ€€λ‹€. 원인은 `wrangler tail` 둜 λ³Έλ‹€.
116116
- 401 이 λ‚˜λ©΄ `APP_ID` 와 `PRIVATE_KEY` κ°€ 같은 App 의 것인지 ν™•μΈν•œλ‹€.
117117

@@ -120,6 +120,5 @@ vi.mock("../utils/github.js", () => ({
120120
- Node.js λ‚΄μž₯ λͺ¨λ“ˆμ΄λ‚˜ Octokit 같은 Workers λŸ°νƒ€μž„μ—μ„œ λ™μž‘ν•˜μ§€ μ•ŠλŠ” νŒ¨ν‚€μ§€λ₯Ό μ“°λ©΄ μ§€μ ν•œλ‹€.
121121
- GraphQL 쿼리에 λ¬Έμžμ—΄λ‘œ λΌμ›Œ λ„£λŠ” 값은 λ°˜λ“œμ‹œ κ²€μ¦λ˜μ–΄μ•Ό ν•œλ‹€. μ‚¬μš©μž μž…λ ₯(PR 제λͺ©, λŒ“κΈ€ λ“±)이 검증 없이 λ“€μ–΄κ°€λ©΄ μ‹¬κ°ν•œ 문제둜 μ§€μ ν•œλ‹€.
122122
- μƒˆ μ—”λ“œν¬μΈνŠΈλŠ” 기쑴처럼 `repo_owner`κ°€ `DaleStudy`κ°€ μ•„λ‹ˆλ©΄ 403을 λŒλ €μ•Ό ν•˜κ³ , `/internal/*`λŠ” `X-Internal-Secret`을 검사해야 ν•œλ‹€.
123-
- `tagPatterns`λ‚˜ `postLearningStatus`에 fetchκ°€ λŠ˜μ–΄λ‚˜λ©΄ `tests/subrequest-budget.test.js`의 고정값도 ν•¨κ»˜ κ°±μ‹ λ˜μ–΄μ•Ό ν•œλ‹€.
124-
- λŒ“κΈ€ μˆ¨κΉ€ 마컀(`<!-- xxx-data: ... -->`) ν˜•μ‹μ„ λ°”κΎΈλ©΄ νŒŒμ‹± μ •κ·œμ‹κ³Ό ν…ŒμŠ€νŠΈλ„ 같은 PRμ—μ„œ λ°”λ€Œμ–΄μ•Ό ν•œλ‹€.
123+
- `aiReview`에 fetchκ°€ λŠ˜μ–΄λ‚˜λ©΄ `tests/subrequest-budget.test.js`의 고정값도 ν•¨κ»˜ κ°±μ‹ λ˜μ–΄μ•Ό ν•œλ‹€.
125124
- μƒˆ μ‹œν¬λ¦Ώμ„ `wrangler secret put` μ „μ œλ‘œ μΆ”κ°€ν•˜λ©΄ μ§€μ ν•œλ‹€. μ‹œν¬λ¦Ώμ€ GitHub secret으둜 두고 배포 μ›Œν¬ν”Œλ‘œκ°€ λ„£λŠ”λ‹€.

0 commit comments

Comments
Β (0)