diff --git a/.github/workflows/jira-close.yml b/.github/workflows/jira-close.yml index c70d91bf..15d22e1b 100644 --- a/.github/workflows/jira-close.yml +++ b/.github/workflows/jira-close.yml @@ -2,40 +2,48 @@ name: Jira closure on: issues: - types: [closed, deleted] - -permissions: - issues: write + types: + - closed + - deleted jobs: close-issue: runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v2 - with: - repository: snowflakedb/gh-actions - ref: jira_v1 - token: ${{ secrets.SNOWFLAKE_GITHUB_TOKEN }} - path: . - - - name: Jira login - uses: atlassian/gajira-login@master - env: - JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }} - JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }} - JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }} - - name: Extract issue from title id: extract env: TITLE: "${{ github.event.issue.title }}" - run: | + run: |- jira=$(echo -n $TITLE | awk '{print $1}' | sed -e 's/://') echo ::set-output name=jira::$jira - - name: Close issue - uses: ./jira/gajira-close + - name: Close Jira Issue if: startsWith(steps.extract.outputs.jira, 'SNOW-') - with: - issue: "${{ steps.extract.outputs.jira }}" + env: + ISSUE_KEY: ${{ steps.extract.outputs.jira }} + JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }} + JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }} + JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }} + run: | + JIRA_API_URL="${JIRA_BASE_URL}/rest/api/2/issue/${ISSUE_KEY}/transitions" + + curl -X POST \ + --url "$JIRA_API_URL" \ + --user "${JIRA_USER_EMAIL}:${JIRA_API_TOKEN}" \ + --header "Content-Type: application/json" \ + --data '{ + "update": { + "comment": [ + { "add": { "body": "Closed on GitHub" } } + ] + }, + "fields": { + "customfield_12860": { "id": "11506" }, + "customfield_10800": { "id": "-1" }, + "customfield_12500": { "id": "11302" }, + "customfield_12400": { "id": "-1" }, + "resolution": { "name": "Done" } + }, + "transition": { "id": "71" } + }' diff --git a/.github/workflows/jira-issue.yml b/.github/workflows/jira-issue.yml index 51d603ff..f6c3a6f4 100644 --- a/.github/workflows/jira-issue.yml +++ b/.github/workflows/jira-issue.yml @@ -2,51 +2,75 @@ name: Jira creation on: issues: - types: [opened, reopened] + types: + - opened issue_comment: - types: [created] - -permissions: - issues: write + types: + - created jobs: create-issue: runs-on: ubuntu-latest + permissions: + issues: write if: (github.event_name == 'issues' && github.event.pull_request.user.login != 'whitesource-for-github-com[bot]') steps: - - name: Checkout - uses: actions/checkout@v2 - with: - repository: snowflakedb/gh-actions - ref: jira_v1 - token: ${{ secrets.SNOWFLAKE_GITHUB_TOKEN }} # stored in GitHub secrets - path: . - - - name: Login - uses: atlassian/gajira-login@v2.0.0 + - 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 }} + run: | + # Escape special characters in title and body + TITLE=$(echo '${{ github.event.issue.title }}' | sed 's/"/\\"/g' | sed "s/'/\\\'/g") + BODY=$(echo '${{ github.event.issue.body }}' | sed 's/"/\\"/g' | sed "s/'/\\\'/g") - - name: Create JIRA Ticket - id: create - uses: atlassian/gajira-create@v2.0.1 - with: - project: SNOW - issuetype: Bug - summary: '${{ github.event.issue.title }} (snowflakedb/snowpark-java-scala)' - description: | - ${{ github.event.issue.body }} \\ \\ _Created from GitHub Action_ for ${{ github.event.issue.html_url }} - fields: '{"customfield_11401":{"id":"14586"},"assignee":{"id":"6360642413f37118d727c8ce"},"components":[{"id":"16408"},{"id":"16407"}]}' - # 11401 = "Snowpark: Stored Procs & APIs" ; 6360642413f37118d727c8ce = "Jason Freeberg" ; 16408 = "Snowpark - Scala API" ; 16407 = "Snowpark - Java API" + # 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 '{ + "fields": { + "project": { + "key": "SNOW" + }, + "issuetype": { + "name": "Bug" + }, + "summary": "'"$TITLE"'", + "description": "'"$BODY"' \\\\ \\\\ _Created from GitHub Action_ for ${{ github.event.issue.html_url }}", + "customfield_11401": {"id": "14723"}, + "assignee": {"id": "712020:e527ae71-55cc-4e02-9217-1ca4ca8028a2"}, + "components": [{"id": "19292"}], + "labels": ["oss"], + "priority": {"id": "10001"} + } + }') + + # 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 - uses: ./jira/gajira-issue-update env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - issue_number: "{{ event.issue.id }}" - owner: "{{ event.repository.owner.login }}" - name: "{{ event.repository.name }}" - jira: "${{ steps.create.outputs.issue }}" + run: | + # Add comment to GitHub issue with JIRA link + curl -s -X POST \ + -H "Authorization: token $GITHUB_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + "https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/comments" \ + -d '{ + "body": "JIRA ticket created: [${{ steps.create.outputs.jira_key }}](${{ secrets.JIRA_BASE_URL }}/browse/${{ steps.create.outputs.jira_key }})" + }'