Skip to content
Open
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
81 changes: 34 additions & 47 deletions .github/workflows/pr-team-labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ jobs:
const labelsToAdd = new Set();

// 각 팀의 멤버들을 확인
for (const [teamName, members] of Object.entries(teams)) {
teamLoop: for (const [teamName, members] of Object.entries(teams)) {
// members가 문자열인 경우 배열로 변환
const memberArray = Array.isArray(members) ? members : members.toString().split(',').map(m => m.trim());
console.log(`Checking team: ${teamName}, members: ${memberArray.join(', ')}`);
Expand All @@ -58,7 +58,7 @@ jobs:
if (prTitle.includes(member.trim())) {
labelsToAdd.add(teamName);
console.log(`Found member: ${member} from team: ${teamName} -> adding label: ${teamName}`);
break; // 해당 팀에서 한 명이라도 찾으면 더 이상 확인하지 않음
break teamLoop; // 팀을 찾으면 모든 검사를 중단
}
}
}
Expand All @@ -67,68 +67,55 @@ jobs:
// 라벨 추가
if (labelsToAdd.size > 0) {
const labelsArray = Array.from(labelsToAdd);
console.log('Labels to add:', labelsArray);

try {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
labels: labelsArray
});

console.log(`Successfully added labels: ${labelsArray.join(', ')}`);

// PR에 코멘트 추가 (선택사항)
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
body: `🏷️ 팀 멤버가 감지되어 자동으로 라벨이 추가되었습니다: ${labelsArray.map(label => `\`${label}\``).join(', ')}`
});

} catch (error) {
console.error('Error adding labels:', error);

// 라벨이 존재하지 않으면 생성
// 팀별 색상 설정
const teamColors = {
'TeamA': '0969da', // GitHub 파란색
'TeamB': 'cf222e', // GitHub 빨간색
'TeamC': '1a7f37', // GitHub 초록색
'TeamD': '9a6700' // GitHub 노란색
};

// 각 라벨에 대해 처리
for (const label of labelsArray) {
console.log(`Processing label: ${label}`);
try {
// 팀별 색상 설정
const teamColors = {
'team-teama': '0052cc',
'team-teamb': 'ff6b6b',
'team-teamc': '4ecdc4',
'team-teamd': 'ffe66d'
};

const color = teamColors[label] || 'E91E63';
// 라벨 생성 시도
const color = teamColors[label] || 'db61a2';
console.log(`Creating/updating label ${label} with color ${color}`);

await github.rest.issues.createLabel({
owner: context.repo.owner,
repo: context.repo.repo,
name: label,
color: color,
description: `Team label for ${label.replace('team-', '')}`
description: `Team label for ${label}`
});
console.log(`Created new label: ${label}`);
console.log(`Label created/updated: ${label}`);
} catch (createError) {
// 이미 존재하는 라벨이면 무시
if (!createError.message.includes('already_exists')) {
console.error(`Error creating label ${label}:`, createError);
console.error(`Error with label ${label}:`, createError);
} else {
console.log(`Label ${label} already exists`);
}
}
}

// PR에 라벨 추가
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
labels: labelsArray
});

// 라벨 생성 후 다시 추가 시도
try {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
labels: labelsArray
});
console.log(`Successfully added labels after creation: ${labelsArray.join(', ')}`);
} catch (retryError) {
console.error('Error adding labels after creation:', retryError);
}
console.log(`Successfully added labels: ${labelsArray.join(', ')}`);
} catch (error) {
console.error('Error in label operations:', error);
throw error;
}
} else {
console.log('No team member names found in PR title');
Expand Down
33 changes: 33 additions & 0 deletions 1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
const teamInfo = {
TeamA: ["이기훈", "이하연", "서주희", "임수빈", "박성택"],
TeamB: ["임수민", "전민희", "홍성우", "민성윤"],
TeamC: ["김민지", "윤영서", "김보경", "박영호"],
TeamD: ["장운서", "이지환", "박성식", "김유빈", "강경민"],
};

for (const [teamName, members] of Object.entries(teamInfo)) {
// members가 문자열인 경우 배열로 변환
const memberArray = Array.isArray(members)
? members
: members
.toString()
.split(",")
.map((m) => m.trim());
console.log(`Checking team: ${teamName}, members: ${memberArray.join(", ")}`);

const prTitle = "윤영서_best time to buy and sell stock ii";
// 팀 멤버들의 이름이 PR 타이틀에 있는지 확인
for (const member of memberArray) {
if (member && member.trim()) {
console.log("member", member);
console.log("prTitle", prTitle);
if (prTitle.includes(member.trim())) {
const labelName = `team-${teamName.toLowerCase()}`;
console.log(
`Found member: ${member} from team: ${teamName} -> adding label: ${labelName}`
);
break; // 해당 팀에서 한 명이라도 찾으면 더 이상 확인하지 않음
}
}
}
}
1 change: 1 addition & 0 deletions TeamC/test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
console.log("hi");