[SCRUM-318] 관리자 로그인 UI & API 연결 #58
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: Complete Jira Ticket on Issue Close | |
| on: | |
| issues: | |
| types: [closed] | |
| permissions: | |
| issues: write | |
| contents: read | |
| jobs: | |
| complete-jira-ticket: | |
| runs-on: ubuntu-latest | |
| # 모든 닫힌 이슈 처리 (PR 머지든 수동 닫기든 상관없이) | |
| if: github.event.issue.state == 'closed' | |
| steps: | |
| - name: Extract Jira Ticket from Issue | |
| id: extract-jira | |
| uses: actions/github-script@v6 | |
| with: | |
| script: | | |
| // 현재 이슈 정보 가져오기 (최신 제목 포함) | |
| const { data: issue } = await github.rest.issues.get({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: context.issue.number | |
| }); | |
| console.log("=== 이슈 정보 확인 ==="); | |
| console.log("Issue Number:", issue.number); | |
| console.log("Latest Title:", issue.title); | |
| console.log("State Reason:", issue.state_reason); | |
| console.log("========================"); | |
| // 제목에서 [SCRUM-XXX] 패턴 찾기 | |
| const titleMatch = issue.title.match(/\[([A-Z]+-[0-9]+)\]/); | |
| if (titleMatch) { | |
| console.log("✅ 제목에서 Jira 키 발견:", titleMatch[1]); | |
| return titleMatch[1]; | |
| } | |
| console.log("❌ Jira 티켓 키를 찾을 수 없습니다"); | |
| return ''; | |
| result-encoding: string | |
| - name: Get Korean Time | |
| id: korean-time | |
| run: | | |
| # UTC 시간을 KST로 변환 | |
| CLOSED_UTC=${{ github.event.issue.closed_at }} | |
| CLOSED_KST=$(TZ='Asia/Seoul' date -d "${CLOSED_UTC}" '+%Y-%m-%d %H:%M:%S KST') | |
| echo "CLOSED_TIME=${CLOSED_KST}" >> $GITHUB_OUTPUT | |
| - name: Login to Jira | |
| if: steps.extract-jira.outputs.result != '' | |
| uses: atlassian/gajira-login@v3 | |
| env: | |
| JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }} | |
| JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }} | |
| JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }} | |
| - name: Get Current Jira Issue Status | |
| if: steps.extract-jira.outputs.result != '' | |
| id: get-status | |
| run: | | |
| echo "🔍 현재 Jira 이슈 상태 확인중..." | |
| # Jira API로 현재 상태 확인 | |
| RESPONSE=$(curl -s -u "${{ secrets.JIRA_USER_EMAIL }}:${{ secrets.JIRA_API_TOKEN }}" \ | |
| -H "Accept: application/json" \ | |
| "${{ secrets.JIRA_BASE_URL }}/rest/api/3/issue/${{ steps.extract-jira.outputs.result }}") | |
| if [[ $? -eq 0 ]]; then | |
| CURRENT_STATUS=$(echo "$RESPONSE" | jq -r '.fields.status.name') | |
| echo "현재 상태: $CURRENT_STATUS" | |
| echo "CURRENT_STATUS=$CURRENT_STATUS" >> $GITHUB_OUTPUT | |
| else | |
| echo "❌ Jira 이슈 정보를 가져올 수 없습니다" | |
| echo "CURRENT_STATUS=unknown" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Transition Jira Issue to Done | |
| if: steps.extract-jira.outputs.result != '' && steps.get-status.outputs.CURRENT_STATUS != '완료' | |
| uses: atlassian/gajira-transition@v3 | |
| with: | |
| issue: ${{ steps.extract-jira.outputs.result }} | |
| transition: '완료' | |
| - name: Add Completion Comment to Jira | |
| if: steps.extract-jira.outputs.result != '' | |
| uses: atlassian/gajira-comment@v3 | |
| with: | |
| issue: ${{ steps.extract-jira.outputs.result }} | |
| comment: | | |
| ✅ *GitHub에서 자동 완료 처리* | |
| 연결된 GitHub Issue가 닫혔습니다. | |
| 📋 *GitHub Issue*: ${{ github.event.issue.html_url }} | |
| 👤 *닫은 사용자*: ${{ github.event.issue.user.login }} | |
| 🕐 *완료 시간*: ${{ steps.korean-time.outputs.CLOSED_TIME }} | |
| 📝 *닫힌 방식*: ${{ github.event.issue.state_reason == 'completed' && 'PR 머지' || '수동 닫기' }} | |
| - name: Add Success Comment to GitHub Issue | |
| if: steps.extract-jira.outputs.result != '' | |
| uses: actions-cool/issues-helper@v3 | |
| with: | |
| actions: 'create-comment' | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| issue-number: ${{ github.event.issue.number }} | |
| body: | | |
| 🎉 **Jira 티켓 자동 완료!** | |
| 📋 **완료된 티켓**: [${{ steps.extract-jira.outputs.result }}](${{ secrets.JIRA_BASE_URL }}/browse/${{ steps.extract-jira.outputs.result }}) | |
| 📊 **이전 상태**: ${{ steps.get-status.outputs.CURRENT_STATUS }} → 완료 | |
| 🕐 **완료 시간**: ${{ steps.korean-time.outputs.CLOSED_TIME }} | |
| > 💡 GitHub 이슈 closed로 연결된 Jira 티켓이 완료 처리되었습니다! | |
| - name: Add No Jira Comment | |
| if: steps.extract-jira.outputs.result == '' | |
| uses: actions-cool/issues-helper@v3 | |
| with: | |
| actions: 'create-comment' | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| issue-number: ${{ github.event.issue.number }} | |
| body: | | |
| ℹ️ **Jira 연동 없음** | |
| 이 이슈에서 연결된 Jira 티켓을 찾을 수 없어 자동 완료 처리를 건너뜁니다. | |
| > 💡 Jira 연동을 위해서는 이슈 제목에 `[SCRUM-XXX]`를 포함하거나 본문에 Jira 링크를 추가해주세요. |