[REFACTOR] D-n 라벨 자동화 스크립트를 통한 코드 리뷰 병목 개선 #7
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Update PR Labels Daily | |
on: | |
schedule: | |
- cron: "0 15 * * *" # 매일 밤 12시 실행 | |
workflow_dispatch: # 수동 실행 허용 | |
pull_request: # 스크립트 동작 테스트 목적 | |
branches: | |
- develop | |
jobs: | |
update-labels: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Update PR Labels with github-script | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const owner = context.repo.owner; | |
const repo = context.repo.repo; | |
// 열려 있는 모든 PR을 가져온다. | |
const pullRequests = await github.rest.pulls.list({ | |
owner, | |
repo, | |
state: 'open', | |
}); | |
for (const pr of pullRequests.data) { | |
const { number, labels } = pr; | |
// 열려 있는 PR에 FE 라벨이 달려있는지 확인한다. | |
const hasFeLabel = labels.some(label => label.name === '🫧 FE'); | |
if (!hasFeLabel) { | |
console.log(`PR #${number} does not have 'FE' label. Skipping.`); | |
continue; | |
} | |
// 'D-'로 시작하는 라벨이 있는지 확인한다. | |
const dLabel = labels.find(label => label.name.startsWith('D-')); | |
// 'D-'로 시작하는 라벨이 없다면 D-3' 라벨을 추가하고 끝낸다. | |
if (!dLabel) { | |
await github.rest.issues.addLabels({ | |
owner, | |
repo, | |
issue_number: number, | |
labels: ['D-3'], | |
}); | |
console.log(`Added 'D-3' label to PR #${number}`); | |
continue; | |
} | |
// 'D-0'이면 카운팅을 스킵한다. | |
if (dLabel.name === 'D-0') { | |
console.log(`PR #${number} already at 'D-0'. Skipping decrement.`); | |
continue; | |
} | |
// 'D-n'로 시작하는 라벨이 있다면 n 값을 가져온다. | |
const currentDay = parseInt(dLabel.name.split('-')[1], 10); | |
if (isNaN(currentDay) || currentDay < 1) { | |
console.log(`PR #${number} 유효하지 않은 라벨이거나 연산할 수 없는 라벨 '${dLabel.name}'.`); | |
continue; | |
} | |
// 현재 'D-n' 라벨을 제거한다. | |
await github.rest.issues.removeLabel({ | |
owner, | |
repo, | |
issue_number: number, | |
name: dLabel.name, | |
}); | |
// 'D-(n-1)' 라벨을 새로 추가한다. | |
const newDay = currentDay - 1; | |
const newLabel = `D-${newDay}`; | |
await github.rest.issues.addLabels({ | |
owner, | |
repo, | |
issue_number: number, | |
labels: [newLabel], | |
}); | |
console.log(`Updated PR #${number}: '${dLabel.name}' -> '${newLabel}'`); | |
} |