๋ฌธ์
PR์ synchronize ์ด๋ฒคํธ ๋ฐ์ ์(์ฌpush), ์ด๋ฒ push์์ ์ค์ ๋ก ๋ณ๊ฒฝ๋ ํ์ผ๋ง ์์ด๋ PR ์ ์ฒด ์๋ฃจ์
ํ์ผ์ ๋ชจ๋ ์ฌ๋ถ์ํ๊ณ ๋ด ์ฝ๋ฉํธ๋ฅผ ๋ชจ๋ ์ญ์ /์ฌ์์ฑํ๋ค.
์์ธ
GET /repos/{owner}/{repo}/pulls/{pr_number}/files API๋ PR ์ ์ฒด์ ๋์ diff(base ๋ธ๋์น ๋๋น)๋ฅผ ๋ฐํํ๋ฏ๋ก, "์ด๋ฒ push์์ ๋ณ๊ฒฝ๋ ํ์ผ"์ ์๋ณํ ์ ์๋ค.
์ํฅ
- ๋ถํ์ํ OpenAI API ํธ์ถ (๋น์ฉ ๋ญ๋น)
- GitHub ์๋ฆผ ์คํธ ("๋ด์ด ๋๊ธ ๋ฌ์์ด์" ร ํ์ผ ์)
- ์ด๋ฏธ ๋ฌ๋ ค์๋ ๋์ผํ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์์ฑ
๋ฐ๊ฒฌ ๊ฒฝ์
ํด๊ฒฐ ๋ฐฉ์
์ต์
1: webhook payload์ before/after SHA ํ์ฉ (์ถ์ฒ)
synchronize ์ด๋ฒคํธ payload์๋ before/after ์ปค๋ฐ SHA๊ฐ ํฌํจ๋จ.
opened/reopened: ๊ธฐ์กด๋๋ก ๋ชจ๋ ํ์ผ ๋ถ์ (์ด๊ธฐ ์์ฑ)
synchronize: GET /repos/{owner}/{repo}/compare/{before}...{after}๋ก ์ค์ ๋ณ๊ฒฝ ํ์ผ๋ง ์กฐํ โ ํด๋น ํ์ผ์ ๊ธฐ์กด ๋ด ์ฝ๋ฉํธ๋ง ์ญ์ + ์ฌ์์ฑ
์ฅ์ : ๊ฐ๋จ, synchronize ์๋์ ๋ถํฉ
๋จ์ : ์ด๋ฒคํธ ํ์
๋ณ๋ก ๋ถ๊ธฐ ํ์
์ต์
2: ํ์ผ SHA๋ฅผ ์ฝ๋ฉํธ์ ์ ์ฅ
๋ด ์ฝ๋ฉํธ์ ํ์ผ์ blob SHA ์ ์ฅ:
<!-- dalestudy-pattern-tag sha:abc123def -->
๋ค์ push ์ ํ์ฌ ํ์ผ SHA์ ์ฝ๋ฉํธ์ SHA ๋น๊ต โ ๋์ผํ๋ฉด ์คํต.
์ฅ์ : ๋ชจ๋ ์ด๋ฒคํธ ํ์
์ ๋์ผํ๊ฒ ์ ์ฉ, ์๋ ์ญ์ /์์๋ ์ฝ๋ฉํธ๋ ๊ฐ์ง
๋จ์ : ํ์ฑ ๋ก์ง ์ถ๊ฐ ํ์
๋ฌธ์
PR์
synchronize์ด๋ฒคํธ ๋ฐ์ ์(์ฌpush), ์ด๋ฒ push์์ ์ค์ ๋ก ๋ณ๊ฒฝ๋ ํ์ผ๋ง ์์ด๋ PR ์ ์ฒด ์๋ฃจ์ ํ์ผ์ ๋ชจ๋ ์ฌ๋ถ์ํ๊ณ ๋ด ์ฝ๋ฉํธ๋ฅผ ๋ชจ๋ ์ญ์ /์ฌ์์ฑํ๋ค.์์ธ
GET /repos/{owner}/{repo}/pulls/{pr_number}/filesAPI๋ PR ์ ์ฒด์ ๋์ diff(base ๋ธ๋์น ๋๋น)๋ฅผ ๋ฐํํ๋ฏ๋ก, "์ด๋ฒ push์์ ๋ณ๊ฒฝ๋ ํ์ผ"์ ์๋ณํ ์ ์๋ค.์ํฅ
๋ฐ๊ฒฌ ๊ฒฝ์
synchronizeํ ์คํธ ์ค ํ์ธํด๊ฒฐ ๋ฐฉ์
์ต์ 1: webhook payload์ before/after SHA ํ์ฉ (์ถ์ฒ)
synchronize์ด๋ฒคํธ payload์๋before/after์ปค๋ฐ SHA๊ฐ ํฌํจ๋จ.opened/reopened: ๊ธฐ์กด๋๋ก ๋ชจ๋ ํ์ผ ๋ถ์ (์ด๊ธฐ ์์ฑ)synchronize:GET /repos/{owner}/{repo}/compare/{before}...{after}๋ก ์ค์ ๋ณ๊ฒฝ ํ์ผ๋ง ์กฐํ โ ํด๋น ํ์ผ์ ๊ธฐ์กด ๋ด ์ฝ๋ฉํธ๋ง ์ญ์ + ์ฌ์์ฑ์ฅ์ : ๊ฐ๋จ,
synchronize์๋์ ๋ถํฉ๋จ์ : ์ด๋ฒคํธ ํ์ ๋ณ๋ก ๋ถ๊ธฐ ํ์
์ต์ 2: ํ์ผ SHA๋ฅผ ์ฝ๋ฉํธ์ ์ ์ฅ
๋ด ์ฝ๋ฉํธ์ ํ์ผ์ blob SHA ์ ์ฅ:
<!-- dalestudy-pattern-tag sha:abc123def -->๋ค์ push ์ ํ์ฌ ํ์ผ SHA์ ์ฝ๋ฉํธ์ SHA ๋น๊ต โ ๋์ผํ๋ฉด ์คํต.
์ฅ์ : ๋ชจ๋ ์ด๋ฒคํธ ํ์ ์ ๋์ผํ๊ฒ ์ ์ฉ, ์๋ ์ญ์ /์์๋ ์ฝ๋ฉํธ๋ ๊ฐ์ง
๋จ์ : ํ์ฑ ๋ก์ง ์ถ๊ฐ ํ์