-
Notifications
You must be signed in to change notification settings - Fork 0
108 lines (92 loc) · 3.96 KB
/
close-jira-issue.yml
File metadata and controls
108 lines (92 loc) · 3.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
name: Close Jira Issue
on:
issues:
types:
- closed
jobs:
close-issue:
runs-on: ubuntu-latest
steps:
- name: Login to Jira
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: Extract Jira issue key from GitHub issue title
id: extract-key
run: |
ISSUE_TITLE=$(cat <<'EOF'
${{ github.event.issue.title }}
EOF
)
echo "📋 Issue Title: $ISSUE_TITLE"
# 대괄호 안의 Jira 키 우선 추출 (예: [BOOK-123] 작업명)
JIRA_KEY=$(echo "$ISSUE_TITLE" | grep -oP '(?<=\[)[A-Z]+-\d+(?=\])' | head -1)
# 없으면 일반 패턴으로 추출
if [ -z "$JIRA_KEY" ]; then
JIRA_KEY=$(echo "$ISSUE_TITLE" | grep -oP '\b[A-Z]+-\d+\b' | head -1)
fi
if [ -z "$JIRA_KEY" ]; then
echo "⚠️ No Jira key found in issue title"
echo "JIRA_KEY=" >> $GITHUB_ENV
echo "found=false" >> $GITHUB_OUTPUT
else
echo "✅ Found Jira key: $JIRA_KEY"
echo "JIRA_KEY=$JIRA_KEY" >> $GITHUB_ENV
echo "found=true" >> $GITHUB_OUTPUT
fi
- name: Stop if no Jira key
if: steps.extract-key.outputs.found == 'false'
run: |
echo "⚠️ No Jira key found. Skipping Jira transition."
exit 0
- name: Get available transitions
if: steps.extract-key.outputs.found == 'true'
id: transitions
continue-on-error: true
run: |
echo "🔍 Checking available transitions for ${{ env.JIRA_KEY }}"
RESPONSE=$(curl -s -u ${{ secrets.JIRA_USER_EMAIL }}:${{ secrets.JIRA_API_TOKEN }} \
-X GET \
-H "Content-Type: application/json" \
"${{ secrets.JIRA_BASE_URL }}/rest/api/3/issue/${{ env.JIRA_KEY }}/transitions")
echo "$RESPONSE" | jq '.transitions[] | {id, name, to: .to.name}'
# 개발 완료 transition이 있는지 확인
HAS_TRANSITION=$(echo "$RESPONSE" | jq -r '.transitions[] | select(.name == "개발 완료") | .id')
if [ -n "$HAS_TRANSITION" ]; then
echo "transition_available=true" >> $GITHUB_OUTPUT
echo "✅ '개발 완료' transition is available (ID: $HAS_TRANSITION)"
else
echo "transition_available=false" >> $GITHUB_OUTPUT
echo "⚠️ '개발 완료' transition is not available"
echo "Available transitions:"
echo "$RESPONSE" | jq -r '.transitions[] | .name'
fi
- name: Close Jira issue
if: |
steps.extract-key.outputs.found == 'true' &&
steps.transitions.outputs.transition_available == 'true'
uses: atlassian/gajira-transition@v3
with:
issue: ${{ env.JIRA_KEY }}
transition: 개발 완료
- name: Add comment to GitHub issue
if: |
steps.extract-key.outputs.found == 'true' &&
steps.transitions.outputs.transition_available == 'true'
uses: actions-cool/issues-helper@v3
with:
actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
body: |
✅ **Jira Issue Closed:** [${{ env.JIRA_KEY }}](${{ secrets.JIRA_BASE_URL }}/browse/${{ env.JIRA_KEY }})
Status transitioned to: **개발 완료**
- name: Log transition failure
if: |
steps.extract-key.outputs.found == 'true' &&
steps.transitions.outputs.transition_available == 'false'
run: |
echo "❌ Failed to transition ${{ env.JIRA_KEY }} to '개발 완료'"
echo "The issue might already be in that state or the transition is not available."