Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/auto-issue.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
'[DOCS]': '📝 Docs',
'[CI]': '😎 DevOps',
'[TEST]': '🌊 TEST',
'[REFACTOR]': '🧹 CHORE',
'[REFACTOR]': '♻ Refactor',
'[UI]': '⌚ Timo-Design-system',
'[STYLE]': '⌚ Timo-Design-system',
'[PERF]': '✨ Feature',
Expand Down
97 changes: 63 additions & 34 deletions .github/workflows/auto-label.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,39 @@ name: Auto Label
on:
pull_request:
types: [opened, synchronize, edited, reopened]
issues:
types: [opened]

permissions:
contents: read
pull-requests: write

jobs:
label-by-files:
if: github.event_name == 'pull_request'
permissions:
contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v5
Comment thread
kimminna marked this conversation as resolved.
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
Comment thread
kimminna marked this conversation as resolved.
sync-labels: false

label-by-prefix:
if: github.event.action != 'synchronize'
label-pr:
if: github.event_name == 'pull_request' && github.event.action != 'synchronize'
needs: label-by-files
permissions:
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v7
with:
script: |
const title = context.payload.pull_request.title;
const pr = context.payload.pull_request;
const action = context.payload.action;
const prNumber = pr.number;

const prefixMap = {
'[FEAT]': '✨ Feature',
'[FIX]': '🐛 Bug',
Expand All @@ -39,41 +50,64 @@ jobs:
'[PERF]': '✨ Feature',
'[API]': '🌟 API',
};

// edited 이벤트는 본문 수정만으로도 트리거되므로 제목 변경 여부를 확인
if (context.payload.action === 'edited' && !context.payload.changes?.title) return;

const allPrefixLabels = [...new Set(Object.values(prefixMap))];
const match = Object.entries(prefixMap).find(([prefix]) => title.startsWith(prefix));
const authorMap = {
'kimminna': '♦️ 민아',
'ehye1': '♥️ 혜원',
'jjangminii': '♠️ 정민',
'yumin-kim2': '♣️ 유민',
};

const { data: currentLabels } = await github.rest.issues.listLabelsOnIssue({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
issue_number: prNumber,
});
const currentLabelNames = new Set(currentLabels.map(l => l.name));

for (const label of currentLabels) {
if (allPrefixLabels.includes(label.name)) {
await github.rest.issues.removeLabel({
// --- prefix 라벨 ---
// edited 이벤트는 본문 수정만으로도 트리거되므로 제목 변경 여부를 확인
if (action !== 'edited' || context.payload.changes?.title) {
const allPrefixLabels = [...new Set(Object.values(prefixMap))];
const match = Object.entries(prefixMap).find(([prefix]) => pr.title.startsWith(prefix));
const desiredLabel = match ? match[1] : null;

for (const label of currentLabels) {
if (allPrefixLabels.includes(label.name) && label.name !== desiredLabel) {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
name: label.name,
});
}
}
if (desiredLabel && !currentLabelNames.has(desiredLabel)) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
name: label.name,
issue_number: prNumber,
labels: [desiredLabel],
});
}
}

if (!match) return;

await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
labels: [match[1]],
});
// --- 작성자 라벨 (opened / reopened 시에만, 이미 있으면 생략) ---
if (action === 'opened' || action === 'reopened') {
const label = authorMap[pr.user.login];
if (label && !currentLabelNames.has(label)) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
labels: [label],
});
}
}

label-by-author:
if: github.event.action == 'opened' || github.event.action == 'reopened'
label-issues:
if: github.event_name == 'issues'
permissions:
issues: write
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v7
Comment thread
kimminna marked this conversation as resolved.
Expand All @@ -86,17 +120,12 @@ jobs:
'yumin-kim2': '♣️ 유민',

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

엇 label-issues authorMap에 저만 있는 것 같아요..! 나머지 분들 매핑이 빠진 것 같은데 확인 부탁드려요 🙏

};

const author = context.payload.pull_request.user.login;
const label = authorMap[author];

if (!label) {
console.log(`"${author}"에 대한 라벨 매핑이 없습니다.`);
return;
}
const label = authorMap[context.payload.issue.user.login];
if (!label) return;

await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
issue_number: context.payload.issue.number,
labels: [label],
});
Loading