PR Brief
비공개 운영PR이 길어서 리뷰가 밀린다면.
GitHub Pull Request가 열리거나 갱신되면 웹훅을 받아 내용을 요약하고, 그 요약을 PR 댓글로 붙여 줍니다. 리뷰어가 diff를 열기 전에 무엇이 바뀌었고 어디를 봐야 하는지 먼저 읽게 하는 것이 전부입니다.
요약에 담기는 것
모델이 자유롭게 쓰는 글이 아니라 정해진 여섯 칸을 채웁니다. 칸이 고정돼 있어야 매번 같은 자리에서 같은 것을 읽을 수 있고, 봇 댓글을 훑는 데 드는 시간이 줄어듭니다.
- TL;DR
- 이 PR이 무엇을 하는지 한 문단
- 변경점
- 커밋과 파일에서 뽑은 실제 변경 목록
- 영향 범위
- 건드린 모듈·디렉터리
- 리뷰 포인트
- 먼저 봐야 할 자리
- 액션 아이템
- 머지 전에 해야 할 일
- 위험도
- low · medium · high
동작 방식
opened·edited·synchronize이벤트를 처리합니다.- 웹훅 서명을 검증하고, 같은 delivery가 두 번 오면 두 번째는 버립니다.
- 같은 head SHA에 대해서는 요약을 캐시합니다 — 라벨만 바꿔도 다시 모델을 부르지 않습니다.
- 봇 댓글은 새로 달지 않고 기존 댓글을 갱신합니다(설정으로 매번 새 댓글도 가능).
- lock 파일과 생성된 파일은 요약 입력에서 제외하고, 본문이 길면 잘라서 넣습니다.
- 모델 호출이 실패하면 그 이벤트만 실패로 남고 규칙 기반 임시 요약이 대신 나갑니다. 서버는 죽지 않고, 임시 요약은 캐시되지 않아 다음 push에서 다시 시도합니다.
- Slack Incoming Webhook을 등록해 두면 같은 요약을 채널로도 보냅니다. Slack 실패는 전체 실패로 보지 않습니다.
설정
세 번의 요청이면 끝납니다. <host> 자리에는 회신받은 주소를 넣으세요.
-
계정 만들기
API 키는 이 응답에서 한 번만 보여 줍니다. 바로 보관하세요.
curl -X POST https://<host>/api/accounts \ -H "Content-Type: application/json" \ -d '{"name":"팀 이름","email":"you@example.com"}' -
저장소 등록
저장소마다 GitHub 토큰을 함께 넣습니다. 권한은 대상 저장소의 Issues(댓글) write 하나면 충분합니다 — 그 이상은 주지 마세요. 토큰은 암호화해 저장하고, 응답으로 이 저장소 전용 웹훅 시크릿이 나옵니다.
curl -X POST https://<host>/api/repos \ -H "X-Api-Key: prb_..." \ -H "Content-Type: application/json" \ -d '{"full_name":"owner/repo","github_token":"ghp_..."}' -
GitHub 웹훅 걸기
저장소 Settings → Webhooks → Add webhook에서 Payload URL은
https://<host>/webhooks/github, Content type은application/json, Secret은 2번에서 받은 값, 이벤트는 Pull requests만 선택합니다. 저장한 뒤 PR을 하나 열어 보고 Recent Deliveries가 200이면 연결된 것입니다.
사용량은 언제든 확인할 수 있습니다.
curl https://<host>/api/usage -H "X-Api-Key: prb_..."
안 되면 볼 곳
- 댓글이 안 달림
/api/events?status=failed로 원인을 보고POST /api/events/{id}/retry- 401 응답
- 웹훅 시크릿 불일치 — GitHub 설정과 2번에서 받은 값을 대조
- "임시 요약"이 옴
- 모델 호출 실패. 다음 push에서 자동으로 다시 시도합니다
- 재시작 후 밀린 것
- 기동 시 자동 재처리됩니다. 남아 있으면 위의 retry