๋ฐฐ๊ฒฝ
์๋ํฌ์ธํธ๋ง๋ค ์ธ์ฆ ๋ฐฉ์์ด ์ ๊ฐ๊ฐ์
๋๋ค. /webhooks๋ ์๋ช
์ผ๋ก, /internal/*๋ ๋น๋ฐ ํค๋๋ก ํ์ธํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ /check-weeksยท/approve-prsยท/merge-prs๋ ์๋ฌด๊ฒ๋ ํ์ธํ์ง ์์ต๋๋ค.
๋ฐฉ์ด๋ผ๊ณ ํ ๋งํ ๊ฑด validateOrganization ํ๋๋ฟ์
๋๋ค. ์์ฒญ ๋ฐ๋์ repo_owner๊ฐ "DaleStudy"์ธ์ง๋ง ๋ด
๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๊ฐ์ ์ ๋ณด๋ด๋ฉด ๊ธฐ๋ณธ๊ฐ์ด "DaleStudy"๋ผ์ ์๋ฌด๋ ํธ์ถํด๋ ํต๊ณผํฉ๋๋ค. ์ฌ์ค์ ์๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
๋ฌธ์
/approve-prsยท/merge-prs๊ฐ ์ฐ๋ parsePrActionPayload์๋ repo_name์ leetcode-study๋ก ๋ฌถ๋ ์ฒดํฌ๊ฐ ์์ต๋๋ค. check-weeks.js์๋ ์์ต๋๋ค. CORS๋ *๋ผ ๋ธ๋ผ์ฐ์ ์์ ๋ฐ๋ก ํธ์ถํ ์ ์์ต๋๋ค.
๊ฒฐ๊ตญ ์ด ๋ ์๋ํฌ์ธํธ๋ ์ธ์ฆ๋ ์๋ช
๋ ๋น๋ฐ๊ฐ๋ ์์ด ๋ฐ๋์ repo_name๋ง์ผ๋ก ๋์ํฉ๋๋ค. ์ ์ผํ ๊ฒ์ดํธ์ธ ์กฐ์ง ๊ฒ์ฆ์ ์๊ธฐ ์ ๊ณ ๋ผ ์์ผ๋ ๋ง๋์
๋๋ค.
์๋
cross-repo ์ชฝ์ ์๊ฐ๋ณด๋ค week ํํฐ๊ฐ ์ด๋ ์ ๋ ๋ง์์ค๋๋ค. /approve-prsยท/merge-prs๋ week๋ฅผ ํ์๋ก ๋ฐ๊ณ ๊ฐ PR์ Projects v2 "Week" ํ๋๋ก ๊ฑฐ๋ฆ
๋๋ค. Week ํ๋๊ฐ ์๋ PR์ week: null์ด๋ผ ์ด๋ค week๋ฅผ ๋ฃ์ด๋ ๊ฑธ๋ฆฌ์ง ์๊ณ ์คํต๋ฉ๋๋ค(approved: 0).
๊ทธ๋์ leetcode-study ๋ณด๋์ ์๋ ๋ ํฌ๋ ์ด ๋ ์๋ํฌ์ธํธ๋ก ์น์ธํ๊ฑฐ๋ ๋ณํฉํ ์ ์์ต๋๋ค. daleui.com์ ์ค์ dependabot PR(DaleStudy/daleui.com#86)๋ก ํ์ธํด๋ดค๋๋ฐ ๊ฑธ๋ฆฌ์ง ์์ต๋๋ค. ์์ ๋ ํฌ ๋ฌด์ธ์ฆ ์น์ธ์ Week ํ๋๊ฐ ์๋ ๋ ํฌ์์๋ง ๋ฉ๋๋ค.
๋ฌผ๋ก ์น์ธ๊น์ง๋ ์ ๋๋๋ผ๋ App ํ ํฐ์ผ๋ก PR ๋ชฉ๋ก์ด๋ ํ๋ก์ ํธ ํ๋๋ฅผ ์ฝ๋ ํธ์ถ์ ๋ฌด์ธ์ฆ์ผ๋ก ๊ทธ๋ฅ ๋๊ฐ๋๋ค(App์ด ์ค์น๋ ๋ ํฌ์ ํํฉ๋๋ค).
์ํ
๋ฌธ์ ๋ leetcode-study ์์ฒด์
๋๋ค. ์ฌ๊ธฐ๋ Week ํ๋๊ฐ ์์ผ๋ ์๋ฌด๋ {"repo_name":"leetcode-study","week":"<ํ์ฌ ์ฃผ์ฐจ>"} ํ๋๋ง ๋์ง๋ฉด ์ธ์ฆ ์์ด ๊ทธ ์ฃผ์ฐจ PR์ ํต์งธ๋ก ์น์ธํ๊ฑฐ๋ auto-merge๋ฅผ ๊ฑธ ์ ์์ต๋๋ค. ์น์ธ๊ณผ ๋ณํฉ์ ๋๋๋ฆฌ๊ธฐ ํ๋ ๋์์ด๋ผ ๊ณง๋ฐ๋ก ์ฌ๊ณ ๋ก ์ด์ด์ง๋๋ค.
์์ผ๋ก ์ด ๋ณด๋(Week ํ๋)๋ฅผ ์ฐ๋ ๋ ํฌ๊ฐ ๋์ด๋๋ฉด ๊ทธ ๋ ํฌ๋ค๋ ๋๊ฐ์ด ๋
ธ์ถ๋ฉ๋๋ค.
์ ์
/approve-prsยท/merge-prs(๊ทธ๋ฆฌ๊ณ /check-weeks)์๋ /internal/*์ฒ๋ผ ์์ฒญ ์ธ์ฆ(๋น๋ฐ ํค๋๋ ์๋ช
)์ ๋ถ์
๋๋ค. week ํํฐ๋ ๋ฏฟ์ผ๋ฉด ์ ๋ฉ๋๋ค. ์ด์ฉ๋ค ๋งํ ๊ฒ์ด์ง ์ธ์ฆ์ด ์๋๋๋ค.
parsePrActionPayload์๋ check-weeks.js์ฒ๋ผ repo_name === ALLOWED_REPO ์ฒดํฌ๋ฅผ ๋ฃ์ต๋๋ค. ํ์ฉ ๋ ํฌ ๋ชฉ๋ก์ผ๋ก ๊ด๋ฆฌํด๋ ๋ฉ๋๋ค.
validateOrganization์ด ๋ฐ๋ ์๊ธฐ ์ ๊ณ ๋์ ์ค์ ์ธ์ฆ๋ ์ปจํ
์คํธ๋ฅผ ๋ณด๋๋ก ๊ณ ์นฉ๋๋ค.
๋ฐฐ๊ฒฝ
์๋ํฌ์ธํธ๋ง๋ค ์ธ์ฆ ๋ฐฉ์์ด ์ ๊ฐ๊ฐ์ ๋๋ค.
/webhooks๋ ์๋ช ์ผ๋ก,/internal/*๋ ๋น๋ฐ ํค๋๋ก ํ์ธํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ/check-weeksยท/approve-prsยท/merge-prs๋ ์๋ฌด๊ฒ๋ ํ์ธํ์ง ์์ต๋๋ค.๋ฐฉ์ด๋ผ๊ณ ํ ๋งํ ๊ฑด
validateOrganizationํ๋๋ฟ์ ๋๋ค. ์์ฒญ ๋ฐ๋์repo_owner๊ฐ"DaleStudy"์ธ์ง๋ง ๋ด ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๊ฐ์ ์ ๋ณด๋ด๋ฉด ๊ธฐ๋ณธ๊ฐ์ด"DaleStudy"๋ผ์ ์๋ฌด๋ ํธ์ถํด๋ ํต๊ณผํฉ๋๋ค. ์ฌ์ค์ ์๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.๋ฌธ์
/approve-prsยท/merge-prs๊ฐ ์ฐ๋parsePrActionPayload์๋repo_name์leetcode-study๋ก ๋ฌถ๋ ์ฒดํฌ๊ฐ ์์ต๋๋ค.check-weeks.js์๋ ์์ต๋๋ค. CORS๋*๋ผ ๋ธ๋ผ์ฐ์ ์์ ๋ฐ๋ก ํธ์ถํ ์ ์์ต๋๋ค.๊ฒฐ๊ตญ ์ด ๋ ์๋ํฌ์ธํธ๋ ์ธ์ฆ๋ ์๋ช ๋ ๋น๋ฐ๊ฐ๋ ์์ด ๋ฐ๋์
repo_name๋ง์ผ๋ก ๋์ํฉ๋๋ค. ์ ์ผํ ๊ฒ์ดํธ์ธ ์กฐ์ง ๊ฒ์ฆ์ ์๊ธฐ ์ ๊ณ ๋ผ ์์ผ๋ ๋ง๋์ ๋๋ค.์๋
cross-repo ์ชฝ์ ์๊ฐ๋ณด๋ค week ํํฐ๊ฐ ์ด๋ ์ ๋ ๋ง์์ค๋๋ค.
/approve-prsยท/merge-prs๋week๋ฅผ ํ์๋ก ๋ฐ๊ณ ๊ฐ PR์ Projects v2 "Week" ํ๋๋ก ๊ฑฐ๋ฆ ๋๋ค. Week ํ๋๊ฐ ์๋ PR์week: null์ด๋ผ ์ด๋ค week๋ฅผ ๋ฃ์ด๋ ๊ฑธ๋ฆฌ์ง ์๊ณ ์คํต๋ฉ๋๋ค(approved: 0).๊ทธ๋์ leetcode-study ๋ณด๋์ ์๋ ๋ ํฌ๋ ์ด ๋ ์๋ํฌ์ธํธ๋ก ์น์ธํ๊ฑฐ๋ ๋ณํฉํ ์ ์์ต๋๋ค.
daleui.com์ ์ค์ dependabot PR(DaleStudy/daleui.com#86)๋ก ํ์ธํด๋ดค๋๋ฐ ๊ฑธ๋ฆฌ์ง ์์ต๋๋ค. ์์ ๋ ํฌ ๋ฌด์ธ์ฆ ์น์ธ์ Week ํ๋๊ฐ ์๋ ๋ ํฌ์์๋ง ๋ฉ๋๋ค.๋ฌผ๋ก ์น์ธ๊น์ง๋ ์ ๋๋๋ผ๋ App ํ ํฐ์ผ๋ก PR ๋ชฉ๋ก์ด๋ ํ๋ก์ ํธ ํ๋๋ฅผ ์ฝ๋ ํธ์ถ์ ๋ฌด์ธ์ฆ์ผ๋ก ๊ทธ๋ฅ ๋๊ฐ๋๋ค(App์ด ์ค์น๋ ๋ ํฌ์ ํํฉ๋๋ค).
์ํ
๋ฌธ์ ๋ leetcode-study ์์ฒด์ ๋๋ค. ์ฌ๊ธฐ๋ Week ํ๋๊ฐ ์์ผ๋ ์๋ฌด๋
{"repo_name":"leetcode-study","week":"<ํ์ฌ ์ฃผ์ฐจ>"}ํ๋๋ง ๋์ง๋ฉด ์ธ์ฆ ์์ด ๊ทธ ์ฃผ์ฐจ PR์ ํต์งธ๋ก ์น์ธํ๊ฑฐ๋ auto-merge๋ฅผ ๊ฑธ ์ ์์ต๋๋ค. ์น์ธ๊ณผ ๋ณํฉ์ ๋๋๋ฆฌ๊ธฐ ํ๋ ๋์์ด๋ผ ๊ณง๋ฐ๋ก ์ฌ๊ณ ๋ก ์ด์ด์ง๋๋ค.์์ผ๋ก ์ด ๋ณด๋(Week ํ๋)๋ฅผ ์ฐ๋ ๋ ํฌ๊ฐ ๋์ด๋๋ฉด ๊ทธ ๋ ํฌ๋ค๋ ๋๊ฐ์ด ๋ ธ์ถ๋ฉ๋๋ค.
์ ์
/approve-prsยท/merge-prs(๊ทธ๋ฆฌ๊ณ/check-weeks)์๋/internal/*์ฒ๋ผ ์์ฒญ ์ธ์ฆ(๋น๋ฐ ํค๋๋ ์๋ช )์ ๋ถ์ ๋๋ค. week ํํฐ๋ ๋ฏฟ์ผ๋ฉด ์ ๋ฉ๋๋ค. ์ด์ฉ๋ค ๋งํ ๊ฒ์ด์ง ์ธ์ฆ์ด ์๋๋๋ค.parsePrActionPayload์๋check-weeks.js์ฒ๋ผrepo_name === ALLOWED_REPO์ฒดํฌ๋ฅผ ๋ฃ์ต๋๋ค. ํ์ฉ ๋ ํฌ ๋ชฉ๋ก์ผ๋ก ๊ด๋ฆฌํด๋ ๋ฉ๋๋ค.validateOrganization์ด ๋ฐ๋ ์๊ธฐ ์ ๊ณ ๋์ ์ค์ ์ธ์ฆ๋ ์ปจํ ์คํธ๋ฅผ ๋ณด๋๋ก ๊ณ ์นฉ๋๋ค.