jira-subtask-assigned #50
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: 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 .), | |
| \"assignees\": [\"InKyungWoo\"] | |
| }") | |
| ISSUE_NUMBER=$(echo "$RESPONSE" | jq -r '.number') | |
| ISSUE_ID=$(echo "$RESPONSE" | jq -r '.id') | |
| echo "ISSUE_NUMBER=$ISSUE_NUMBER" >> $GITHUB_OUTPUT | |
| echo "ISSUE_ID=$ISSUE_ID" >> $GITHUB_OUTPUT | |
| echo "β GitHub μ΄μ #$ISSUE_NUMBER μμ± μλ£" | |
| - name: Add to Organization Project | |
| if: steps.check-assignee.outputs.CREATE_ISSUE == 'true' | |
| env: | |
| GH_TOKEN: ${{ secrets.PROJECT_TOKEN }} | |
| run: | | |
| ISSUE_NUMBER="${{ steps.create-issue.outputs.ISSUE_NUMBER }}" | |
| # GitHub CLIλ₯Ό μ¬μ©νμ¬ νλ‘μ νΈμ μΆκ° | |
| ITEM_ID=$(gh project item-add 2 --owner RunChuck --url "https://github.com/${{ github.repository }}/issues/${ISSUE_NUMBER}" --format json | jq -r '.id') | |
| echo "β νλ‘μ νΈμ μΆκ° μλ£" | |
| # Status νλμ Todo μ΅μ ID μ°ΎκΈ° | |
| STATUS_FIELD_ID=$(gh project field-list 2 --owner RunChuck --format json | jq -r '.fields[] | select(.name == "Status") | .id') | |
| TODO_OPTION_ID=$(gh project field-list 2 --owner RunChuck --format json | jq -r '.fields[] | select(.name == "Status") | .options[] | select(.name == "Todo") | .id') | |
| if [ -n "$STATUS_FIELD_ID" ] && [ -n "$TODO_OPTION_ID" ]; then | |
| # μνλ₯Ό Todoλ‘ μ€μ | |
| gh project item-edit --id $ITEM_ID --project-id 2 --field-id "$STATUS_FIELD_ID" --single-select-option-id "$TODO_OPTION_ID" | |
| echo "β μνλ₯Ό Todoλ‘ μ€μ μλ£" | |
| else | |
| echo "β οΈ Status νλ λλ Todo μ΅μ μ μ°Ύμ μ μμ΅λλ€" | |
| fi | |
| echo "β μ΄μ #${ISSUE_NUMBER}λ₯Ό νλ‘μ νΈμ μΆκ°νκ³ μνλ₯Ό Todoλ‘ μ€μ μλ£" | |
| - name: Set Active Milestone | |
| if: steps.check-assignee.outputs.CREATE_ISSUE == 'true' | |
| run: | | |
| ISSUE_NUMBER="${{ steps.create-issue.outputs.ISSUE_NUMBER }}" | |
| # νμ± milestone μ°ΎκΈ° (open μνμΈ κ² μ€ μ²« λ²μ§Έ) | |
| MILESTONE_NUMBER=$(curl -s \ | |
| -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
| -H "Accept: application/vnd.github.v3+json" \ | |
| "https://api.github.com/repos/${{ github.repository }}/milestones?state=open" | \ | |
| jq -r '.[0].number // empty') | |
| if [ -n "$MILESTONE_NUMBER" ]; then | |
| # μ΄μμ milestone μ€μ | |
| curl -s -X PATCH \ | |
| -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
| -H "Accept: application/vnd.github.v3+json" \ | |
| "https://api.github.com/repos/${{ github.repository }}/issues/${ISSUE_NUMBER}" \ | |
| -d "{ | |
| \"milestone\": $MILESTONE_NUMBER | |
| }" | |
| echo "β μ΄μ #${ISSUE_NUMBER}μ milestone #${MILESTONE_NUMBER} μ€μ μλ£" | |
| else | |
| echo "βΉοΈ νμ± milestoneμ΄ μμ΄ μ€μ νμ§ μμμ΅λλ€" | |
| fi |