name: Jira creation on: issues: types: [opened] issue_comment: types: [created] jobs: create-issue: runs-on: ubuntu-latest permissions: issues: write if: ((github.event_name == 'issue_comment' && github.event.comment.body == 'recreate jira' && github.event.comment.user.login == 'sfc-gh-mkeller') || (github.event_name == 'issues' && github.event.pull_request.user.login != 'whitesource-for-github-com[bot]')) steps: - name: Create JIRA Ticket id: create env: JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }} JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }} JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }} ISSUE_TITLE: ${{ github.event.issue.title }} ISSUE_BODY: ${{ github.event.issue.body }} ISSUE_URL: ${{ github.event.issue.html_url }} run: | # Build the JSON payload with jq so quotes, control characters, # and nested JSON inside the title or body are encoded safely. PAYLOAD=$(jq -n \ --arg title "$ISSUE_TITLE" \ --arg body "$ISSUE_BODY" \ --arg url "$ISSUE_URL" \ '{ "fields": { "project": { "key": "SNOW" }, "issuetype": { "name": "Bug" }, "summary": $title, "description": ($body + " \\\\ \\\\ _Created from GitHub Action_ for " + $url), "customfield_11401": {"id": "14723"}, "assignee": {"id": "712020:e527ae71-55cc-4e02-9217-1ca4ca8028a2"}, "components": [{"id": "19287"}], "labels": ["oss"], "priority": {"id": "10001"} } }') # Create JIRA issue using REST API RESPONSE=$(curl -s -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -u "$JIRA_USER_EMAIL:$JIRA_API_TOKEN" \ "$JIRA_BASE_URL/rest/api/2/issue" \ -d "$PAYLOAD") # Extract JIRA issue key from response JIRA_KEY=$(echo "$RESPONSE" | jq -r '.key') if [ "$JIRA_KEY" = "null" ] || [ -z "$JIRA_KEY" ]; then echo "Failed to create JIRA issue" echo "Response: $RESPONSE" exit 1 fi echo "Created JIRA issue: $JIRA_KEY" echo "jira_key=$JIRA_KEY" >> $GITHUB_OUTPUT - name: Update GitHub Issue env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} REPOSITORY: ${{ github.repository }} ISSUE_NUMBER: ${{ github.event.issue.number }} JIRA_KEY: ${{ steps.create.outputs.jira_key }} ISSUE_TITLE: ${{ github.event.issue.title }} run: | TITLE=$(echo "${ISSUE_TITLE//`/\\`}" | sed 's/"/\\"/g' | sed "s/'/\\\'/g") PAYLOAD=$(jq -n \ --arg issuetitle "$TITLE" \ --arg jirakey "$JIRA_KEY" \ '{ title: ($jirakey + ": " + $issuetitle) }') # Update Github issue title with jira id curl -s \ -X PATCH \ -H "Authorization: Bearer $GITHUB_TOKEN" \ -H "Accept: application/vnd.github+json" \ -H "X-GitHub-Api-Version: 2022-11-28" \ "https://api.github.com/repos/$REPOSITORY/issues/$ISSUE_NUMBER" \ -d "$PAYLOAD" if [ "$?" != 0 ]; then echo "Failed to update GH issue. Payload was:" echo "$PAYLOAD" exit 1 fi