From 91db4415f8b4113b391467422cb020b0ab23dac7 Mon Sep 17 00:00:00 2001 From: sebhmg Date: Fri, 5 Jul 2024 00:19:59 -0400 Subject: [PATCH] workflow to auto-add summary from JIRA issue ID --- .github/workflows/pr_add_jira_summary.yml | 64 +++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 .github/workflows/pr_add_jira_summary.yml diff --git a/.github/workflows/pr_add_jira_summary.yml b/.github/workflows/pr_add_jira_summary.yml new file mode 100644 index 0000000000..f0c8a8dda0 --- /dev/null +++ b/.github/workflows/pr_add_jira_summary.yml @@ -0,0 +1,64 @@ +# This workflow will comment the PR with the JIRA issue summary +# if a JIRA issue number is detected in the branch name or title + +name: Add JIRA issue summary + +on: + pull_request_target: + types: [opened] + +jobs: + add_jira_summary: + runs-on: ubuntu-latest + + steps: + - name: Find JIRA issue key + id: find_jira_key + env: + HEAD_REF: ${{ github.head_ref}} + PR_TITLE: ${{ github.event.pull_request.title }} + run: > + echo $HEAD_REF $PR_TITLE + | echo "issue_key=$( + grep -osi "\b\(GA\|GEOPY\|DEVOPS\)[ #-]*[0-9]\+" + | head -n1 + | sed -E "s/([A-Z]+)[-# ]*([0-9]+)/\1-\2/i" + | tr [:lower:] [:upper:] + )" + >> $GITHUB_OUTPUT + - name: Get JIRA summary + id: get_jira_summary + if: ${{ steps.find_jira_key.outputs.issue_key }} + env: + JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }} + JIRA_BASIC_AUTH: ${{ secrets.JIRA_BASIC_AUTH }} + run: > + curl -sS -X GET + -H "Authorization: Basic $JIRA_BASIC_AUTH" + -H "Content-Type: application/json" + "$JIRA_BASE_URL/rest/api/2/issue/${{ steps.find_jira_key.outputs.issue_key }}" + | echo "summary=$(jq -r '.fields.summary // empty')" >> $GITHUB_OUTPUT + - name: Extract PR title + id: get_pr_title + env: + PR_TITLE: ${{ github.event.pull_request.title }} + run: | + echo "text=$(echo $PR_TITLE | sed -E "s/^\s*[?[A-Z]+[-# ]*[0-9]+]?[-: ]*(.*)/\1/i")" >> $GITHUB_OUTPUT + - name: Add comment + if: ${{ steps.find_jira_key.outputs.issue_key }} + env: + ISSUE_SUMMARY: ${{ steps.get_jira_summary.outputs.summary }} + TITLE_TEXT: ${{ steps.get_pr_title.outputs.text }} + PR_BODY: ${{ github.event.pull_request.body }} + run: > + jq + --arg ISSUE_ID "${{ steps.find_jira_key.outputs.issue_key }}" + --arg ISSUE_SUMMARY "$(cat <<< $ISSUE_SUMMARY)" + --arg TITLE_TEXT "$(cat <<< ${TITLE_TEXT:-$ISSUE_SUMMARY})" + --arg PR_BODY "$(cat <<< $PR_BODY)" + -c '{"title": ($ISSUE_ID + ": " + $TITLE_TEXT), "body": ("**" + $ISSUE_ID + " - " + $ISSUE_SUMMARY + "**\n" + $PR_BODY)}' <<< {} + | curl -sS -X POST -d @- + -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" + -H "Content-Type: application/json" + "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/pulls/${{ github.event.pull_request.number }}" + > /dev/null