jira-subtask-assigned #51
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λ₯Ό μ¬μ©νμ¬ νλ‘μ νΈμ μΆκ° | |
| gh project item-add 2 --owner RunChuck --url "https://github.com/${{ github.repository }}/issues/${ISSUE_NUMBER}" | |
| echo "β μ΄μ #${ISSUE_NUMBER}λ₯Ό νλ‘μ νΈμ μΆκ° μλ£" | |
| - name: Set Active Milestone | |
| if: steps.check-assignee.outputs.CREATE_ISSUE == 'true' | |
| run: | | |
| ISSUE_NUMBER="${{ steps.create-issue.outputs.ISSUE_NUMBER }}" | |
| # νμ± milestone μ°ΎκΈ° (open μνμΈ κ²λ€) | |
| MILESTONES=$(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") | |
| MILESTONE_COUNT=$(echo "$MILESTONES" | jq 'length') | |
| if [ "$MILESTONE_COUNT" -eq 1 ]; then | |
| # νμ± milestoneμ΄ μ νν νλμΌ λλ§ μ€μ | |
| MILESTONE_NUMBER=$(echo "$MILESTONES" | jq -r '.[0].number') | |
| # μ΄μμ 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} μ€μ μλ£" | |
| elif [ "$MILESTONE_COUNT" -eq 0 ]; then | |
| echo "βΉοΈ νμ± milestoneμ΄ μμ΄ μ€μ νμ§ μμμ΅λλ€" | |
| else | |
| echo "βΉοΈ νμ± milestoneμ΄ ${MILESTONE_COUNT}κ° μμ΄ μ€μ νμ§ μμμ΅λλ€" | |
| fi |