Selaa lähdekoodia

chore: Add workflow to sync core-team issues with Jira

David Höck 8 kuukautta sitten
vanhempi
sitoutus
1e81de147c
1 muutettua tiedostoa jossa 57 lisäystä ja 0 poistoa
  1. 57 0
      .github/workflows/sync-jira.yml

+ 57 - 0
.github/workflows/sync-jira.yml

@@ -0,0 +1,57 @@
+name: Sync core-team issues to Jira
+
+on:
+  issues:
+    types: [opened, reopened, edited, labeled]
+
+
+permissions:
+  issues: write
+  contents: read
+
+jobs:
+  sync:
+    if: contains(github.event.issue.labels.*.name, 'core-team')
+    runs-on: ubuntu-latest
+    steps:
+      - name: Create or update Jira ticket
+        id: jira
+        env:
+          JIRA_EMAIL:  ${{ secrets.JIRA_EMAIL }}
+          JIRA_TOKEN:  ${{ secrets.JIRA_API_TOKEN }}
+          JIRA_BASE:   ${{ secrets.JIRA_BASE }}    
+          PROJECT_KEY: VEN
+        run: |
+          GH_URL="https://github.com/${{ github.repository }}/issues/${{ github.event.issue.number }}"
+          SUMMARY=$(jq -Rs . <<<"${{ github.event.issue.title }}")
+          DESC=$(jq -Rs . <<<"Imported from GitHub: $GH_URL")
+          # look for an existing ticket whose description contains the GH URL
+          JQL=$(jq -Rs . <<<"description ~ \"$GH_URL\"")
+          SEARCH="$JIRA_BASE/rest/api/3/search?jql=$JQL"
+          KEY=$(curl -s -u "$JIRA_EMAIL:$JIRA_TOKEN" "$SEARCH" \
+                | jq -r '.issues[0].key // empty')
+          if [ -z "$KEY" ]; then
+            BODY=$(jq -n --arg summary "$SUMMARY" --arg desc "$DESC" --arg proj "$PROJECT_KEY" '
+              {fields:{project:{key:$proj},summary:$summary,description:$desc,
+              issuetype:{name:"Task"},labels:["core-team"]}}')
+            KEY=$(curl -s -u "$JIRA_EMAIL:$JIRA_TOKEN" \
+                   -H "Content-Type: application/json" \
+                   --data "$BODY" "$JIRA_BASE/rest/api/3/issue" | jq -r .key)
+          fi
+          echo "key=$KEY" >> $GITHUB_OUTPUT
+      - name: Record the mapping on the GH issue
+        uses: actions/github-script@v7
+        with:
+          script: |
+            const issue_number = context.issue.number;
+            const owner = context.repo.owner;
+            const repo  = context.repo.repo;
+            const jira  = "${{ steps.jira.outputs.key }}";
+            const body  = `🔗 Linked to Core Team Jira ticket **${jira}**`;
+            const {data:comments} = await github.issues.listComments({owner,repo,issue_number});
+            const existing = comments.find(c=>/Linked to Core Team Jira ticket/i.test(c.body));
+            if (existing) {
+              await github.issues.updateComment({owner,repo,comment_id:existing.id,body});
+            } else {
+              await github.issues.createComment({owner,repo,issue_number,body});
+            }