From 7c9fc79008b426e1fe4bdc50bd9dc9513b9fee27 Mon Sep 17 00:00:00 2001 From: Nikita Belonogov Date: Wed, 29 Nov 2023 03:13:43 +0400 Subject: [PATCH] ci: PLATE-675: Add /jira chatops command --- .github/workflows/jira-command.yml | 97 ++++++++++++++++++++ .github/workflows/slash-command-dispatch.yml | 7 +- 2 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/jira-command.yml diff --git a/.github/workflows/jira-command.yml b/.github/workflows/jira-command.yml new file mode 100644 index 00000000..bde6b9c8 --- /dev/null +++ b/.github/workflows/jira-command.yml @@ -0,0 +1,97 @@ +name: "/git command" + +on: + repository_dispatch: + types: [ jira-command ] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.client_payload.github.payload.issue.number }}-${{ github.event.client_payload.slash_command.command }}-${{ github.event.client_payload.slash_command.args.unnamed.arg1 || github.event.client_payload.slash_command.args.all }} + +jobs: + create: + if: ${{ github.event.client_payload.slash_command.args.unnamed.arg1 == 'create' }} + runs-on: ubuntu-latest + timeout-minutes: 3 + steps: + - uses: hmarr/debug-action@v2.1.0 + + - name: Check user's membership + uses: actions/github-script@v7 + id: check-membership + env: + ACTOR: ${{ github.actor }} + with: + github-token: ${{ secrets.GIT_PAT }} + script: | + const { repo, owner } = context.repo; + const actor = process.env.ACTOR; + const { data: membership } = await github.rest.orgs.getMembershipForUser({ + org: owner, + username: actor, + }); + if (membership.state != "active") { + const error = `Unfortunately you don't have membership in ${owner} organization, Jira Issue was not created`; + core.setOutput("error", error); + core.setFailed(error); + } + + - name: Checkout Actions Hub + uses: actions/checkout@v4 + with: + token: ${{ secrets.GIT_PAT }} + repository: HumanSignal/actions-hub + path: ./.github/actions-hub + + - name: Jira Create Issue + id: jira-create-issue + uses: ./.github/actions-hub/actions/jira-create-issue + with: + jira_server: ${{ vars.JIRA_SERVER }} + jira_username: ${{ secrets.JIRA_USERNAME }} + jira_token: ${{ secrets.JIRA_TOKEN }} + summary: ${{ github.event.client_payload.github.payload.issue.title }} + description: ${{ github.event.client_payload.github.payload.issue.body }} + project: ${{ github.event.client_payload.slash_command.args.unnamed.arg3 || 'TRIAG' }} + type: ${{ github.event.client_payload.slash_command.args.unnamed.arg2 || 'task' }} + + - name: Add reaction to command comment on success + uses: peter-evans/create-or-update-comment@v3 + with: + token: ${{ secrets.GIT_PAT }} + repository: ${{ github.event.client_payload.github.payload.repository.full_name }} + comment-id: ${{ github.event.client_payload.github.payload.comment.id }} + body: | + > Jira issue [${{ steps.jira-create-issue.outputs.key }}](${{ steps.jira-create-issue.outputs.link }}) is created + > + > [Workflow run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) + reactions: "+1" + + - name: Add reaction to command comment on failure + uses: peter-evans/create-or-update-comment@v3 + if: failure() + with: + token: ${{ secrets.GIT_PAT }} + repository: ${{ github.event.client_payload.github.payload.repository.full_name }} + comment-id: ${{ github.event.client_payload.github.payload.comment.id }} + body: | + > **Error**: failed to execute "${{ github.event.client_payload.slash_command.args.unnamed.arg1 }}" command + > ${{ steps.check-membership.outputs.error }} + > [Workflow run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) + reactions: "-1" + + help: + if: github.event.client_payload.slash_command.args.unnamed.arg1 == 'help' || !contains(fromJson('["create"]'), github.event.client_payload.slash_command.args.unnamed.arg1) + runs-on: ubuntu-latest + timeout-minutes: 1 + steps: + - name: Update comment + uses: peter-evans/create-or-update-comment@v3 + with: + token: ${{ secrets.GIT_PAT }} + repository: ${{ github.event.client_payload.github.payload.repository.full_name }} + comment-id: ${{ github.event.client_payload.github.payload.comment.id }} + body: | + > Command | Description + > --- | --- + > /jira create [task|bug|story] `PROJECT` | Create a Jira issue in project `PROJECT` + reaction-type: hooray diff --git a/.github/workflows/slash-command-dispatch.yml b/.github/workflows/slash-command-dispatch.yml index 181fef29..ae0f9c29 100644 --- a/.github/workflows/slash-command-dispatch.yml +++ b/.github/workflows/slash-command-dispatch.yml @@ -1,4 +1,4 @@ -name: "/Slash Command Dispatch" +name: Slash Command Dispatch on: issue_comment: types: [created] @@ -7,6 +7,7 @@ env: commands_list: | help git + jira jobs: slashCommandDispatch: @@ -39,7 +40,7 @@ jobs: - name: Slash Command Dispatch id: scd - if: steps.determine_command.outputs.command_state != 'unknown' + if: ${{ steps.determine_command.outputs.command_state != 'unknown' }} uses: peter-evans/slash-command-dispatch@v3 with: token: ${{ secrets.GIT_PAT }} @@ -48,7 +49,7 @@ jobs: commands: ${{ env.commands_list }} - name: Edit comment with error message - if: steps.determine_command.outputs.command_state == 'unknown' + if: ${{ steps.determine_command.outputs.command_state == 'unknown' }} uses: peter-evans/create-or-update-comment@v3 with: comment-id: ${{ github.event.comment.id }}