๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๊ฐœ๋ฐœ

์ž๋ฐ”๋กœ GitHub Actions ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งŒ๋“ค๊ธฐ

ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‹ค ๋ณด๋ฉด PR์ด ์˜ฌ๋ผ์˜จ ๋’ค ๋ฆฌ๋ทฐ๊ฐ€ ์ง€์—ฐ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ์žˆ๋‹ค. ๋ฐ”์œ ์ผ์ • ์†์—์„œ PR์„ ๊นŒ๋จน๊ธฐ๋„ ํ•˜๊ณ , ์–ธ์ œ๊นŒ์ง€ ๋ฆฌ๋ทฐํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ธฐ์ค€์ด ์—†์œผ๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ์ง€๋ถ€์ง€๋˜๊ธฐ๋„ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํŒ€์—์„œ ์ธ์ง€ํ•˜๊ณ , ์ฝ”๋“œ ๋ฆฌ๋ทฐ์— 2์ผ์ด๋ผ๋Š” ์ œํ•œ ์‹œ๊ฐ„์„ ๋‘๊ธฐ๋กœ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๊ฒฐ๊ตญ ์ด๊ฒƒ๋„ ๋จธ๋ฆฌ๋กœ ๊ธฐ์–ตํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

 

๊ทธ๋ž˜์„œ PR์— ๋งˆ๊ฐ์ผ์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œ์‹œํ•ด์ฃผ๋ฉด ์–ด๋–จ๊นŒ ์ƒ๊ฐํ–ˆ๋‹ค. D-2, D-1, D-Day ๊ฐ™์€ ๋ผ๋ฒจ์ด PR์— ๋ถ™์–ด์žˆ์œผ๋ฉด ๋ฆฌ๋ทฐ์–ด ์ž…์žฅ์—์„œ๋„ ๊ธฐ์–ตํ•˜์ง€ ์•Š์•„๋„ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ๋‚จ์€ ๊ธฐ๊ฐ„์— ๋Œ€ํ•ด์„œ ๊ธด๋ฐ•ํ•จ์„ ๋А๋‚„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

๋„์ž…ํ•˜๊ธฐ ์ „์— ๋จผ์ € ์ด๋ฏธ ์žˆ๋Š” ์•ก์…˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์ฐพ์•„๋ณด์•˜๋‹ค. ์œ ๋ ฅํ–ˆ๋˜ ํ›„๋ณด๊ฐ€ ๋„ค์ด๋ฒ„์—์„œ ๋งŒ๋“  d-day-labeler์˜€๋Š”๋ฐ, ์ด๊ฑด ๋งˆ๊ฐ์ผ์„ ๋”ฐ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์—†์—ˆ๊ณ  ํŠน์ • PR์— ๋Œ€ํ•ด์„œ ๋ผ๋ฒจ์„ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค. ์ฆ‰, ๋ชจ๋“  PR์— ๋Œ€ํ•ด์„œ๋งŒ ๋ผ๋ฒจ ์—…๋ฐ์ดํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์˜€๋‹ค.

 

์šฐ๋ฆฌ ํŒ€์— ๋งž๊ฒŒ ์ปค์Šคํ…€ ํ•˜๋Š” ๋ฐฉ์•ˆ์ด ํ•„์š”ํ–ˆ๊ณ , ๊ทธ๋ž˜์„œ ์ง์ ‘ GitHub Actions๋ฅผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค.

 

์ž๋ฐ”๋ฅผ ์„ ํƒํ•œ ์ด์œ 

๊ธฐ๋ณธ์ ์œผ๋กœ ์•ก์…˜ ์Šคํฌ๋ฆฝํŠธ์— ๋ชจ๋“  ๊ณผ์ •์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋‚˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ์•ก์…˜ ์Šคํฌ๋ฆฝํŠธ ๋‚ด์— ๋ชฐ์•„๋„ฃ๋Š” ๋ฐฉ์‹์ด ์‹ซ๋‹ค๋ฉด GitHub Actions Toolkit์„ ์ด์šฉํ•ด GitHub Actions์— ํŠนํ™”๋œ ํŽธ์˜ ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ, ๋‘ ๋ฐฉ์‹ ๋ชจ๋‘ ๊ณต์‹์ ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋งŒ ์ง€์›ํ•œ๋‹ค. ๊ทผ๋ฐ ๋ณธ์ธ์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž˜ ๋ชจ๋ฅด๊ธฐ๋„ ํ•ด์„œ ํ˜„์žฌ ์ƒํ™ฉ์—์„œ๋Š” ๊ฐ€๋…์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ ์ธก๋ฉด์—์„œ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ต์ˆ™ํ•œ ์ž๋ฐ”๋ฅผ ์ด์šฉํ•ด ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ–ˆ๋‹ค.

 

์ž๋ฐ”๋Š” ์•ก์…˜์„ ๋งŒ๋“ค๋ ค๋ฉด Docker container action ๋ฐฉ์‹์„ ์จ์•ผ ํ•œ๋‹ค. ์ด๋Š” GitHub Actions runner์— JVM์ด ์—†์œผ๋‹ˆ ์ง์ ‘ Docker ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๊ณ , ๊ทธ ์•ˆ์—์„œ ์ž๋ฐ” ์•ฑ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋‹จ์ ์ด๊ธฐ๋Š” ํ•˜๋‹ค๋งŒ ํ•ด๋‹น ์ž‘์—…์ด ์†๋„๊ฐ€ ์ค‘์š”ํ•œ ์•ก์…˜์ด ์•„๋‹ˆ๊ธฐ๋„ ํ•ด์„œ ์ถฉ๋ถ„ํžˆ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„ ๊ฐ€๋Šฅํ•œ ์ง€์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

๊ฐœ๋ฐœ ๊ณผ์ •

์š”๊ตฌ์‚ฌํ•ญ์„ ๋จผ์ € ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

- PR์ด ์ƒ์„ฑ๋  ๋•Œ ์ž๋™์œผ๋กœ ๋ผ๋ฒจ์„ ๋ถ™์ธ๋‹ค.
    - ๊ธฐ๋ณธ์ ์œผ๋กœ D-2์˜ ๋ผ๋ฒจ์„ ๋ถ™์ธ๋‹ค.
- ๋งค์ผ ์ž์ •์— ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” PR์˜ ๋ผ๋ฒจ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
    - ๋ผ๋ฒจ ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ D-1, D-Day, Over-Due ๋ผ๋ฒจ๋กœ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.
    - ์ด๋•Œ, ์ด๋ฏธ Over-Due๋ผ๋ฉด ๋ผ๋ฒจ์„ ์—…๋ฐ์ดํŠธ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    - D-n ๊ด€๋ จ ๋ผ๋ฒจ์ด ์—†๋‹ค๋ฉด, D-2 ๋ผ๋ฒจ๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
- PR์— ๋ฆฌ๋ทฐ๊ฐ€ ๋‹ฌ๋ฆฌ๋ฉด ๋ผ๋ฒจ์„ D-2๋กœ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.

 

๊ฐ„๋‹จํ•˜๊ฒŒ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๊ณ  ๋‚˜์„œ ์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ์ž‘์„ฑํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์š”์ฆ˜ ์กฐ์˜ํ˜ธ๋‹˜์˜ '์˜ค๋ธŒ์ ํŠธ' ์ฑ…์„ ๋‹ค์‹œ ์ฝ๊ณ  ์žˆ์–ด์„œ '์ฑ…์ž„ ์ฃผ๋„ ์„ค๊ณ„(RDD)' ๊ด€์ ์œผ๋กœ ์ ‘๊ทผํ•ด๋ณด์•˜๋‹ค. ๋จผ์ €, ๋‚˜์˜ฌ๋งŒํ•œ ๋„๋ฉ”์ธ ์šฉ์–ด๋“ค์„ ์ •๋ฆฌํ•ด๋ณด์•˜๋Š”๋ฐ ์•„์ฃผ ๊ฐ„๋‹จํ–ˆ๋‹ค.

  • PullRequest
  • Label

์ด์™ธ์—๋„ ๋งˆ๊ฐ์ผ, ์ƒ์„ฑ์ผ, ๊ฒฝ๊ณผ์ผ ๊ฐ™์€ ์šฉ์–ด๋“ค๋„ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ๊ตฌํ˜„ ์„ธ๋ถ€์‚ฌํ•ญ ๊ฐ™์•„์„œ ์ œ์™ธํ–ˆ๋‹ค. ๊ทธ ํ›„์—๋Š” ์‹œ์Šคํ…œ์ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋ฉ”์‹œ์ง€๋ฅผ ๋„์ถœํ–ˆ๋‹ค.

PR์˜ ๋ผ๋ฒจ์„ ๋ถ™์—ฌ๋ผ

 

์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ์ ์ ˆํ•œ ์—ญํ• ์€ PullRequest๋‹ค. PR์ด ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์žฅ ์ž˜ ์•Œ๊ณ  ์žˆ์œผ๋‹ˆ๊นŒ. ๊ทธ๋Ÿฐ๋ฐ PR์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•˜์„ ๋•Œ ํ˜ผ์ž ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ๋“ค์ด ์žˆ๋‹ค. ์–ด๋–ค ๋ผ๋ฒจ์„ ๋ถ™์—ฌ์•ผ ํ•˜๋Š”์ง€ ๊ณ„์‚ฐํ•˜๋Š” ์ฑ…์ž„๊ณผ ์‹ค์ œ๋กœ ๋ผ๋ฒจ์„ ๋ถ€์ฐฉํ•˜๋Š” ์ฑ…์ž„์ด ํ•„์š”ํ–ˆ๊ณ  ์ด ์‹œ์ ์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ๋„์ถœ๋๋‹ค.

  • LabelPolicy: ๊ธฐ์ค€์ผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ผ๋ฒจ์„ ๊ณ„์‚ฐํ•˜๋Š” ์ฑ…์ž„
  • LabelAttacher: ์‹ค์ œ๋กœ ๋ผ๋ฒจ์„ ๋ถ€์ฐฉํ•˜๋Š” ์ฑ…์ž„

PR์€ ์ด ๋‘ ๊ฐ€์ง€๋ฅผ ๊ฐ๊ฐ LabelPolicy์™€ LabelAttacher์—๊ฒŒ ์œ„์ž„ํ•œ๋‹ค. LabelAttacher๋Š” GitHub API๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๊ฑด ์ธํ”„๋ผ ๊ด€์‹ฌ์‚ฌ๋‹ค. ๋„๋ฉ”์ธ์ด ์ธํ”„๋ผ๋ฅผ ์•Œ๋ฉด ์•ˆ ๋˜๋‹ˆ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ตฌํ˜„์ฒด๋ฅผ ์™ธ๋ถ€๋กœ ๋บ๋‹ค.

 

 

๊ทธ ๊ฒฐ๊ณผ ์ด๋Ÿฌํ•œ ํ˜•ํƒœ์˜ ๋„๋ฉ”์ธ ํ˜‘๋ ฅ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  PR์„ ๊ฐ€์ ธ์™€ ์ฒ˜๋ฆฌํ•˜๋Š” ์กฐ์œจ์ด ํ•„์š”ํ–ˆ๋Š”๋ฐ, ์ด ์ฑ…์ž„์€ LabelingService๊ฐ€ ๋งก์•˜๋‹ค. PR ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ค๋Š” ์ฑ…์ž„์€ PullRequestRepository ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌํ–ˆ๋‹ค.

 

์ฒ˜์Œ์—” ๋งˆ๊ฐ์ผ์„ D-2๋กœ ๊ณ ์ •ํ•ด๋‘์—ˆ๋Š”๋ฐ, ํŒ€๋งˆ๋‹ค ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฌธํ™”๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์–ด๋–ค ํŒ€์€ 3์ผ, ์–ด๋–ค ํŒ€์€ 5์ผ์„ ๊ธฐ์ค€์œผ๋กœ ์‚ผ์„ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ๊นŒ. ๊ทธ๋ž˜์„œ deadline-days๋ฅผ ์™ธ๋ถ€์—์„œ ๋ฐ›๋„๋ก ์„ค๊ณ„๋ฅผ ๋ฐ”๊ฟจ๋‹ค. LabelPolicy ์ƒ์„ฑ ์‹œ ์ฃผ์ž…๋ฐ›๋Š” ๋ฐฉ์‹์ด๋ผ ๋„๋ฉ”์ธ ๋กœ์ง์€ ์ „ํ˜€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์•„๋„ ๋๋‹ค.

LabelPolicy labelPolicy = new LabelPolicy(Long.parseLong(deadline));

 

5์ผ๋กœ ์„ค์ •ํ•˜๋ฉด D-5 → D-4 → D-3 → D-2 → D-1 → D-Day → OVER-DUE ํ๋ฆ„์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

Docker container action ๊ตฌ์„ฑ

์ž๋ฐ” ์•ฑ์„ GitHub Actions์—์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด Docker ํ™˜๊ฒฝ์ด ํ•„์š”ํ•˜๋‹ค. ๋ฉ€ํ‹ฐ ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋กœ ์ตœ์ข… ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€๋ณ๊ฒŒ ์œ ์ง€ํ–ˆ๋‹ค.

FROM gradle:8.5-jdk21 AS build  
  
WORKDIR /app  
COPY . .  
RUN gradle jar --no-daemon  
  
FROM eclipse-temurin:21-jre-jammy  
  
WORKDIR /app  
COPY --from=build /app/build/libs/deadline-labeler-0.0.1.jar app.jar  
  
ENTRYPOINT ["java", "-jar", "/app/app.jar"]

 

์ฒซ ๋ฒˆ์งธ ์Šคํ…Œ์ด์ง€์—์„œ ๋นŒ๋“œํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ ์Šคํ…Œ์ด์ง€์—์„œ jar๋งŒ ๊ฐ€์ ธ์™€ ์‹คํ–‰ํ•œ๋‹ค. ์ตœ์ข… ์ด๋ฏธ์ง€์— Gradle์ด๋‚˜ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค. ํ•œ ๊ฐ€์ง€ ๋น ์ง„ ๊ฒŒ ์žˆ์—ˆ๋Š”๋ฐ, jar ํƒœ์Šคํฌ์— Main-Class๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด java -jar๋กœ ์‹คํ–‰ํ•  ๋•Œ ์ง„์ž…์ ์„ ๋ชป ์ฐพ๋Š”๋‹ค.

tasks.jar {
    manifest {
        attributes["Main-Class"] = "Main"
    }
    from(configurations.runtimeClasspath.get().map {
        if (it.isDirectory) it else zipTree(it)
    })
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

 

action.yml

๊ตฌ์„ฑ ์•ก์…˜์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ํŒŒ์ผ์ด๋‹ค. ์™ธ๋ถ€์—์„œ ์–ด๋–ค ๊ฐ’์„ ๋„˜๊ธธ ์ˆ˜ ์žˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋˜๋Š”์ง€๋ฅผ ๋ช…์‹œํ•œ๋‹ค.

name: 'PR Deadline Labeler'
description: 'PR ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋งˆ๊ฐ์ผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ผ๋ฒจ์„ ์ž๋™ ๋ถ€์ฐฉํ•ฉ๋‹ˆ๋‹ค.'

inputs:
  github-token:
    required: true
    description: 'Github ์ ‘๊ทผ์„ ์œ„ํ•œ ํ† ํฐ'
  base-date:
    required: false
    description: '์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ ๊ธฐ์ค€์ผ์ž'
  pr-number:
    required: false
    description: '์—…๋ฐ์ดํŠธํ•˜๊ณ ์ž ํ•˜๋Š” PR ๋ฒˆํ˜ธ'
  deadline-days:
    required: false
    default: '2'
    description: '์ฝ”๋“œ๋ฆฌ๋ทฐ ์ตœ๋Œ€ ๋งˆ๊ฐ์ผ ์ง€์ •'

runs:
  using: 'docker'
  image: 'Dockerfile'

 

runs.using: 'docker'๋กœ ์„ค์ •ํ•˜๋ฉด GitHub Actions๊ฐ€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๋ช…์‹œ๋œ Dockerfile์„ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•œ๋‹ค. inputs์— ์ •์˜๋œ ๊ฐ’๋“ค์€ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ 'INPUT_๋ณ€์ˆ˜๋ช…'ํ˜•ํƒœ์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ฃผ์ž…๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'github-token'์€ 'INPUT_GITHUB-TOKEN'์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

String token = System.getenv("INPUT_GITHUB-TOKEN");

 

์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์„ฑ

์„ธ ๊ฐ€์ง€ ํŠธ๋ฆฌ๊ฑฐ์—์„œ ๋™์ž‘ํ•˜๋„๋ก ์˜๋„ํ–ˆ๋‹ค. ๊ฐ๊ฐ pull request ์ƒ์„ฑ, cron ์Šค์ผ€์ค„, pull request ๋ฆฌ๋ทฐ ๋“ฑ๋ก ์‹œ์ ์ด๋‹ค.

on:
  pull_request:
    types: [opened]
  schedule:
    - cron: '0 15 * * *'  # KST 00:00
  pull_request_review:
    types: [submitted]

 

๊ฐ ํŠธ๋ฆฌ๊ฑฐ๋ณ„๋กœ ์ ์ ˆํ•œ baseDate๋ฅผ ์•ก์…˜์— ๋„˜๊ฒจ์ค€๋‹ค. ์•ก์…˜์€ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋ชจ๋ฅด๊ณ  baseDate๋งŒ ๋ฐ›๋Š”๋‹ค. ๊ถŒํ•œ ์„ค์ •๋„ ๋น ๋œจ๋ฆฌ๋ฉด ์•ˆ ๋œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ GITHUB_TOKEN์€ ์ฝ๊ธฐ ๊ถŒํ•œ๋งŒ ์žˆ์–ด์„œ ๋ผ๋ฒจ ์“ฐ๊ธฐ๊ฐ€ ์•ˆ ๋œ๋‹ค.

permissions:
  issues: write
  pull-requests: write

 

๋งˆ์น˜๋ฉฐ

์ •๋ง ํŒ€์˜ ํ•„์š”์— ์˜ํ•ด์„œ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋‹ˆ ๋˜๊ฒŒ ์žฌ๋ฐŒ๋Š” ๊ฒฝํ—˜์ด์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ์ด๋Ÿฌํ•œ ์•ก์…˜์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ๋ณ€ํ™”๊ฐ€ ๊ต‰์žฅํžˆ ๊ธฐ๋Œ€๊ฐ€ ๋œ๋‹ค. ๊ธฐํšŒ๊ฐ€ ๋œ๋‹ค๋ฉด ์ด๋ฅผ ๋”ฐ๋กœ ๊ธ€๋กœ ์ž‘์„ฑํ•  ์ƒ๊ฐ์ด๋‹ค.

 

๊ฐœ๋ฐœ ์–˜๊ธฐ๋ฅผ ์ข€ ํ•˜์ž๋ฉด ์ฑ…์ž„ ์ฃผ๋„ ์„ค๊ณ„๋ฅผ ์ œ๋Œ€๋กœ ํ•ด๋ณธ ๊ฒƒ์€ ์ฒ˜์Œ์ธ๋ฐ ์ฑ…์ž„ ์ฃผ๋„ ์„ค๊ณ„๋กœ ์‹œ์ž‘ํ•˜๋‹ˆ ์ฝ”๋“œ ์ž‘์„ฑ ์ „์— ๊ตฌ์กฐ๊ฐ€ ๋ช…ํ™•ํ•ด์กŒ๋‹ค. ๋„๋ฉ”์ธ์ด ์ธํ”„๋ผ๋ฅผ ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ๊ตฌ์กฐ๋ฅผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๊ณ , ์–ด๋””์— ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋Š”์ง€ ๊ณ ๋ฏผํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ๋‹ค.

 

์กฐ์˜ํ˜ธ๋‹˜์€ ์ฝ”๋“œ ๋ฐฐ์น˜๋ฅผ ๋”ฐ๋กœ ๋‘๊ณ  ๊ฐ์ฒด์ง€ํ–ฅ์„ ๋งํ•  ์ˆ˜๋Š” ์—†๋‹ค ํ–ˆ๋Š”๋ฐ, ์ด๋ฒˆ์—๋Š” ๋‹จ์ˆœํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ˜‘๋ ฅ์˜ ๊ตฌ์กฐ๊ฐ€ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ์˜ ๋ฐฐ์น˜์™€ ์•Œ๋งž์ง€ ์•Š์•˜๋‚˜ ์‹ถ๋‹ค. ์–ด์จŒ๋“  ์ด๋ ‡๊ฒŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—†์ด ์ž๋ฐ”๋กœ๋„ GitHub Actions์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. Docker container action์ด๋ผ๋Š” ๋ฐฉ์‹์ด ์žˆ์œผ๋‹ˆ๊นŒ.

 

ํ˜„์žฌ ๊ฐ์ข… ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  v1.0.0๊ฐ€ ๋ฆด๋ฆฌ์ฆˆ๋๊ณ , ๋‹ค๋ฅธ ๋ ˆํฌ์—์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

- uses: kkiseug/pr-deadline-labeler@v1
  with:
    github-token: ${{ secrets.GITHUB_TOKEN }}
    base-date: ${{ github.event.pull_request.created_at }}
    pr-number: ${{ github.event.pull_request.number }}
    deadline-days: 5

 

 

 

GitHub - kkiseug/pr-deadline-labeler: PR์˜ D-Day ๋ผ๋ฒจ์„ ๋“ฑ๋ก ๋ฐ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์•ก์…˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

PR์˜ D-Day ๋ผ๋ฒจ์„ ๋“ฑ๋ก ๋ฐ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์•ก์…˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. Contribute to kkiseug/pr-deadline-labeler development by creating an account on GitHub.

github.com