Skip to content

jira-subtask-assigned #44

jira-subtask-assigned

jira-subtask-assigned #44

name: Create GitHub Issue from Jira Subtask
on:
repository_dispatch:
types: [jira-subtask-assigned]
permissions:
issues: write
contents: read
jobs:
create-github-issue:
runs-on: ubuntu-latest
steps:
- name: Extract Jira Data
id: extract-data
run: |
echo "=== Jira Webhook Data ==="
echo "Issue Key: ${{ github.event.client_payload.issue_key }}"
echo "Summary: ${{ github.event.client_payload.summary }}"
echo "Assignee: ${{ github.event.client_payload.assignee }}"
echo "Parent Key: ${{ github.event.client_payload.parent_key }}"
echo "Description: (처리 쀑...)"
echo "=========================="
# 데이터 정리 - base64 μΈμ½”λ”©μœΌλ‘œ μ•ˆμ „ν•˜κ²Œ 처리
JIRA_KEY="${{ github.event.client_payload.issue_key }}"
TITLE="${{ github.event.client_payload.summary }}"
ASSIGNEE="${{ github.event.client_payload.assignee }}"
PARENT="${{ github.event.client_payload.parent_key }}"
# Description을 base64둜 μΈμ½”λ”©ν•˜μ—¬ μ•ˆμ „ν•˜κ²Œ 처리
DESC_RAW="${{ github.event.client_payload.description }}"
if [ -n "$DESC_RAW" ]; then
DESC_B64=$(echo -n "$DESC_RAW" | base64 -w 0)
else
DESC_B64=""
fi
echo "JIRA_KEY=$JIRA_KEY" >> $GITHUB_OUTPUT
echo "TITLE=$TITLE" >> $GITHUB_OUTPUT
echo "ASSIGNEE=$ASSIGNEE" >> $GITHUB_OUTPUT
echo "PARENT=$PARENT" >> $GITHUB_OUTPUT
echo "DESC_B64=$DESC_B64" >> $GITHUB_OUTPUT
- name: Check if assigned to me
id: check-assignee
run: |
ASSIGNEE="${{ steps.extract-data.outputs.ASSIGNEE }}"
MY_JIRA_EMAIL="${{ secrets.JIRA_USER_EMAIL }}"
if [[ "$ASSIGNEE" == "$MY_JIRA_EMAIL" ]]; then
echo "βœ… λ‚˜μ—κ²Œ ν• λ‹Ήλœ μž‘μ—…μž…λ‹ˆλ‹€"
echo "CREATE_ISSUE=true" >> $GITHUB_OUTPUT
else
echo "❌ λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ ν• λ‹Ήλœ μž‘μ—…μž…λ‹ˆλ‹€: $ASSIGNEE"
echo "CREATE_ISSUE=false" >> $GITHUB_OUTPUT
fi
- name: Create GitHub Issue
if: steps.check-assignee.outputs.CREATE_ISSUE == 'true'
id: create-issue
run: |
# base64 λ””μ½”λ”©ν•˜μ—¬ description 볡원
if [ -n "${{ steps.extract-data.outputs.DESC_B64 }}" ]; then
DESC_RAW=$(echo "${{ steps.extract-data.outputs.DESC_B64 }}" | base64 -d)
# Jira 이미지 λ§ˆν¬μ—… 제거 (!image.ext|...! ν˜•νƒœ)
DESC_DECODED=$(echo "$DESC_RAW" | sed 's/!image-[^!]*\.png[^!]*!//g' | sed 's/!image-[^!]*\.jpg[^!]*!//g' | sed 's/!image-[^!]*\.jpeg[^!]*!//g' | sed 's/!image-[^!]*\.gif[^!]*!//g')
else
DESC_DECODED="(μ„€λͺ… μ—†μŒ)"
fi
# GitHub 이슈 생성을 μœ„ν•œ JSON νŽ˜μ΄λ‘œλ“œ μ€€λΉ„
ISSUE_TITLE="[${{ steps.extract-data.outputs.JIRA_KEY }}] ${{ steps.extract-data.outputs.TITLE }}"
ISSUE_BODY=$(cat <<EOF
## πŸ“Œ μ—°κ΄€ ν‹°μΌ“
**🎟️ Jira ν‹°μΌ“**: [${{ steps.extract-data.outputs.JIRA_KEY }}](${{ secrets.JIRA_BASE_URL }}/browse/${{ steps.extract-data.outputs.JIRA_KEY }})
**πŸ“ μƒμœ„ ν‹°μΌ“**: [${{ steps.extract-data.outputs.PARENT }}](${{ secrets.JIRA_BASE_URL }}/browse/${{ steps.extract-data.outputs.PARENT }})
## πŸ“ μž‘μ—… μ„€λͺ…
${DESC_DECODED}
---
> πŸ’‘ 이 μ΄μŠˆλŠ” Jira μž‘μ—…κ³Ό μ—°λ™λ˜μ–΄ μžλ™ μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
EOF
)
# GitHub APIλ₯Ό μ‚¬μš©ν•˜μ—¬ 이슈 생성
RESPONSE=$(curl -s -X POST \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/${{ github.repository }}/issues" \
-d "{
\"title\": $(echo "$ISSUE_TITLE" | jq -R .),
\"body\": $(echo "$ISSUE_BODY" | jq -Rs .)
}")
ISSUE_NUMBER=$(echo "$RESPONSE" | jq -r '.number')
echo "ISSUE_NUMBER=$ISSUE_NUMBER" >> $GITHUB_OUTPUT
echo "βœ… GitHub 이슈 #$ISSUE_NUMBER 생성 μ™„λ£Œ"