SEO μ΅μ ν #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 Jira Subtask from GitHub Issue | |
| on: | |
| issues: | |
| types: [opened] | |
| permissions: | |
| issues: write | |
| contents: read | |
| jobs: | |
| create-jira-subtask: | |
| runs-on: ubuntu-latest | |
| if: contains(github.event.issue.labels.*.name, 'jira-sync') | |
| concurrency: | |
| group: jira-sync-${{ github.event.issue.number }} | |
| cancel-in-progress: true | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Parse Issue Template | |
| uses: stefanbuck/github-issue-parser@v3 | |
| id: issue-parser | |
| with: | |
| template-path: .github/ISSUE_TEMPLATE/issue_form.yml | |
| - name: Debug Issue Parser Output | |
| run: | | |
| echo "=== Issue Parser Outputs ===" | |
| echo "Parent Ticket: '${{ steps.issue-parser.outputs.issueparser_parent-ticket }}'" | |
| echo "Task Title: '${{ steps.issue-parser.outputs.issueparser_task-title }}'" | |
| echo "Assignee: '${{ steps.issue-parser.outputs.issueparser_assignee }}'" | |
| echo "All outputs:" | |
| echo '${{ toJson(steps.issue-parser.outputs) }}' | |
| echo "==========================" | |
| - 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: Prepare Sub-task Data | |
| id: prepare-data | |
| run: | | |
| echo "π Sub-task μμ± μ€λΉ..." | |
| PARENT_TICKET="${{ steps.issue-parser.outputs.issueparser_parent-ticket }}" | |
| echo "μμ ν°μΌ: $PARENT_TICKET" | |
| echo "νμ€ν¬ μ λͺ©: ${{ steps.issue-parser.outputs.issueparser_task-title }}" | |
| echo "PARENT_TICKET=$PARENT_TICKET" >> $GITHUB_OUTPUT | |
| echo "TASK_TITLE=${{ steps.issue-parser.outputs.issueparser_task-title }}" >> $GITHUB_OUTPUT | |
| - name: Convert markdown to Jira format | |
| uses: peter-evans/jira2md@v1 | |
| id: md2jira | |
| with: | |
| input-text: | | |
| h2. GitHub Issueμμ μμ±λ νμ€ν¬ | |
| * GitHub Issue URL: ${{ github.event.issue.html_url }} | |
| * μμ±μ: ${{ github.event.issue.user.login }} | |
| h2. μμ μ€λͺ | |
| ${{ steps.issue-parser.outputs.issueparser_task-description }} | |
| mode: md2jira | |
| - name: Create Subtask using Gajira | |
| id: create-jira-subtask | |
| uses: atlassian/gajira-create@v3 | |
| with: | |
| project: SCRUM | |
| issuetype: "Sub-task" | |
| summary: '${{ steps.prepare-data.outputs.TASK_TITLE }}' | |
| description: '${{ steps.md2jira.outputs.output-text }}' | |
| fields: | | |
| { | |
| "parent": { | |
| "key": "${{ steps.prepare-data.outputs.PARENT_TICKET }}" | |
| } | |
| } | |
| - name: Check Results and Set Final Issue | |
| id: set-issue-key | |
| run: | | |
| echo "=== μμ± κ²°κ³Ό νμΈ ===" | |
| if [[ "${{ steps.create-jira-subtask.outcome }}" == "success" && -n "${{ steps.create-jira-subtask.outputs.issue }}" ]]; then | |
| echo "β Sub-task μμ± μ±κ³΅: ${{ steps.create-jira-subtask.outputs.issue }}" | |
| echo "FINAL_ISSUE=${{ steps.create-jira-subtask.outputs.issue }}" >> $GITHUB_OUTPUT | |
| echo "SUCCESS=true" >> $GITHUB_OUTPUT | |
| echo "ISSUE_TYPE=Sub-task" >> $GITHUB_OUTPUT | |
| else | |
| echo "β Sub-task μμ± μ€ν¨" | |
| echo "μμ± κ²°κ³Ό: ${{ steps.create-jira-subtask.outcome }}" | |
| echo "" | |
| echo "π‘ μλμΌλ‘ Jiraμμ Sub-taskλ₯Ό μμ±ν΄μ£ΌμΈμ:" | |
| echo " μμ μ΄μ: ${{ steps.prepare-data.outputs.PARENT_TICKET }}" | |
| echo " μ λͺ©: ${{ steps.prepare-data.outputs.TASK_TITLE }}" | |
| echo "SUCCESS=false" >> $GITHUB_OUTPUT | |
| exit 1 | |
| fi | |
| - name: Add Success Comment | |
| if: steps.set-issue-key.outputs.SUCCESS == 'true' | |
| uses: actions-cool/issues-helper@v3 | |
| with: | |
| actions: 'create-comment' | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| issue-number: ${{ github.event.issue.number }} | |
| body: | | |
| π **Jira μ°λ μλ£!** | |
| π **μμ±λ μ΄μ**: [${{ steps.set-issue-key.outputs.FINAL_ISSUE }}](${{ secrets.JIRA_BASE_URL }}/browse/${{ steps.set-issue-key.outputs.FINAL_ISSUE }}) (νμ : ${{ steps.set-issue-key.outputs.ISSUE_TYPE }}) | |
| π **μμ νμ€ν¬**: [${{ steps.issue-parser.outputs.issueparser_parent-ticket }}](${{ secrets.JIRA_BASE_URL }}/browse/${{ steps.issue-parser.outputs.issueparser_parent-ticket }}) | |
| > π‘ μ΄μ Jiraμμ ν΄λΉ νμ€ν¬λ‘ λΈλμΉλ₯Ό μμ±νκ³ μμ μ μμν μ μμ΅λλ€! | |
| - name: Add Failure Comment | |
| if: failure() | |
| uses: actions-cool/issues-helper@v3 | |
| with: | |
| actions: 'create-comment' | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| issue-number: ${{ github.event.issue.number }} | |
| body: | | |
| β **Jira Sub-task μμ± μ€ν¨** | |
| μλμΌλ‘ Jira νμ νμ€ν¬λ₯Ό μμ±νλλ° μ€ν¨νμ΅λλ€. | |
| **μλ μμ± μ 보:** | |
| - μμ ν°μΌ: `${{ steps.issue-parser.outputs.issueparser_parent-ticket }}` | |
| - μ λͺ©: `${{ steps.issue-parser.outputs.issueparser_task-title }}` | |
| - GitHub Issue: ${{ github.event.issue.html_url }} | |
| **κ°λ₯ν μμΈ:** | |
| - API ν ν° κΆν λΆμ‘± (μΌλ° ꡬμ±μμ Sub-task μμ± μ ν) | |
| - νλ‘μ νΈ μ€μ μμ APIλ₯Ό ν΅ν Sub-task μμ± λΉνμ±ν | |
| - Story μνλ Sprint μ€μ λ¬Έμ | |
| > π‘ Jira μΉμμ μλμΌλ‘ νμ μμ μ μμ±ν΄μ£ΌμΈμ. |