[FEAT] 대기방 채팅 기본 구현 (#66) #22
This file contains hidden or 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: PR Assignment | |
| on: | |
| pull_request: | |
| types: [opened, ready_for_review, reopened] | |
| permissions: | |
| pull-requests: write | |
| jobs: | |
| get_meta_data: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| assignees: ${{ steps.get_meta_data.outputs.assignees }} | |
| author: ${{ steps.get_meta_data.outputs.author }} | |
| pr_number: ${{ steps.get_meta_data.outputs.pr_number }} | |
| owner: ${{ steps.get_meta_data.outputs.owner }} | |
| repo: ${{ steps.get_meta_data.outputs.repo }} | |
| steps: | |
| - name: Get PR meta data | |
| uses: actions/github-script@v7 | |
| id: get_meta_data | |
| with: | |
| script: | | |
| const pr = context.payload.pull_request; | |
| const assignees = pr.assignees.map(assignee => assignee.login); | |
| const author = pr.user.login; | |
| const pr_number = pr.number; | |
| const { owner, repo } = context.repo; | |
| core.setOutput('assignees', assignees); | |
| core.setOutput('author', author); | |
| core.setOutput('pr_number', pr_number); | |
| core.setOutput('owner', owner); | |
| core.setOutput('repo', repo); | |
| assign_assignee: | |
| runs-on: ubuntu-latest | |
| needs: get_meta_data | |
| steps: | |
| - name: Assign PR to author | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| try { | |
| const assignees = JSON.parse('${{ needs.get_meta_data.outputs.assignees || '[]' }}'); | |
| if (assignees.length > 0) { | |
| console.log('이미 assignee가 지정되어 있습니다.'); | |
| return; | |
| } | |
| const author = '${{ needs.get_meta_data.outputs.author }}'; | |
| const pr_number = '${{ needs.get_meta_data.outputs.pr_number }}'; | |
| const owner = '${{ needs.get_meta_data.outputs.owner }}'; | |
| const repo = '${{ needs.get_meta_data.outputs.repo }}'; | |
| await github.rest.issues.addAssignees({ | |
| owner, | |
| repo, | |
| issue_number: pr_number, | |
| assignees: [author] | |
| }); | |
| } catch(error) { | |
| console.log('Assignee를 지정하는 중 오류가 발생했습니다:', error); | |
| } | |
| assign_reviewers: | |
| runs-on: ubuntu-latest | |
| if: github.event.pull_request.draft == false | |
| needs: get_meta_data | |
| env: | |
| REVIEWERS: cl-o-lc,dmdeh,HolMoly,yoouyeon,zelkovaria | |
| steps: | |
| - name: Assign reviewers | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| try { | |
| const assignees = JSON.parse('${{ needs.get_meta_data.outputs.assignees || '[]' }}'); | |
| const author = '${{ needs.get_meta_data.outputs.author }}'; | |
| const pr_number = '${{ needs.get_meta_data.outputs.pr_number }}'; | |
| const owner = '${{ needs.get_meta_data.outputs.owner }}'; | |
| const repo = '${{ needs.get_meta_data.outputs.repo }}'; | |
| const reviewers = process.env.REVIEWERS.split(','); | |
| // author와 assignees를 제외한 reviewers 목록을 필터링 | |
| const filteredReviewers = reviewers.filter(reviewer => { | |
| return reviewer !== author && !assignees.includes(reviewer); | |
| }); | |
| if (filteredReviewers.length === 0) { | |
| console.log('할당할 reviewer가 없습니다.'); | |
| return; | |
| } | |
| await github.rest.pulls.requestReviewers({ | |
| owner, | |
| repo, | |
| pull_number: pr_number, | |
| reviewers: filteredReviewers | |
| }); | |
| } catch (error) { | |
| console.log('reviewer를 지정하는 중 오류가 발생했습니다:', error); | |
| } | |