From 8ef36850a54728b8ef9ecab54943b5548caabf02 Mon Sep 17 00:00:00 2001 From: asyncapi-bot <61865014+asyncapi-bot@users.noreply.github.com> Date: Tue, 7 Dec 2021 16:08:23 +0100 Subject: [PATCH] ci: update global workflows --- ...d-ready-to-merge-or-do-not-merge-label.yml | 51 +++++++++++++++++++ .../automerge-for-humans-merging.yml | 32 ++++++++++++ ...ns-remove-ready-to-merge-label-on-edit.yml | 28 ++++++++++ .github/workflows/automerge.yml | 4 +- .github/workflows/help-command.yml | 25 +++++++++ 5 files changed, 138 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/automerge-for-humans-add-ready-to-merge-or-do-not-merge-label.yml create mode 100644 .github/workflows/automerge-for-humans-merging.yml create mode 100644 .github/workflows/automerge-for-humans-remove-ready-to-merge-label-on-edit.yml create mode 100644 .github/workflows/help-command.yml diff --git a/.github/workflows/automerge-for-humans-add-ready-to-merge-or-do-not-merge-label.yml b/.github/workflows/automerge-for-humans-add-ready-to-merge-or-do-not-merge-label.yml new file mode 100644 index 00000000..c19c17fc --- /dev/null +++ b/.github/workflows/automerge-for-humans-add-ready-to-merge-or-do-not-merge-label.yml @@ -0,0 +1,51 @@ +#This workflow is centrally managed in https://github.com/asyncapi/.github/ +#Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo + +#Purpose of this workflow is to enable anyone to label PR with `ready-to-merge` and `do-not-merge` labels to get stuff merged or blocked from merging +name: Add ready-to-merge or do-not-merge label # if proper comment added + +on: issue_comment + +jobs: + parse-comment-and-add-ready: # for handling cases when you want to mark as ready to merge + if: github.event.issue.pull_request && github.event.issue.state != 'closed' + runs-on: ubuntu-latest + steps: + - name: Check if PR is draft # such info is not available in the context of issue_comment event + uses: actions/github-script@v5 + id: checkDraft + with: + result-encoding: string + script: | + const prDetailsUrl = context.payload.issue.pull_request.url; + const response = await github.request(prDetailsUrl); + return response.data.draft; + - name: Add label + if: steps.checkDraft.outputs.result == 'false' && (contains(github.event.comment.body, '/ready-to-merge') || contains(github.event.comment.body, '/rtm' )) + uses: actions/github-script@v5 + with: + github-token: ${{ secrets.GH_TOKEN }} + script: | + github.rest.issues.addLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ['ready-to-merge'] + }) + + parse-comment-and-add-block: # for handling cases when you want to mark as do-not-merge + if: github.event.issue.pull_request && github.event.issue.state != 'closed' + runs-on: ubuntu-latest + steps: + - name: Add label + if: contains(github.event.comment.body, '/do-not-merge') || contains(github.event.comment.body, '/dnm' ) + uses: actions/github-script@v5 + with: + github-token: ${{ secrets.GH_TOKEN }} + script: | + github.rest.issues.addLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ['do-not-merge'] + }) \ No newline at end of file diff --git a/.github/workflows/automerge-for-humans-merging.yml b/.github/workflows/automerge-for-humans-merging.yml new file mode 100644 index 00000000..b91ef754 --- /dev/null +++ b/.github/workflows/automerge-for-humans-merging.yml @@ -0,0 +1,32 @@ +#This workflow is centrally managed in https://github.com/asyncapi/.github/ +#Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo + +#Purpose of this workflow is to allow people to merge PR without a need of maintainer doing it. If all checks are in place (including maintainers approval) - JUST MERGE IT! +name: Automerge For Humans + +on: + pull_request_target: + types: + - labeled + - unlabeled + - synchronize + - opened + - edited + - ready_for_review + - reopened + - unlocked + +jobs: + automerge-for-humans: + if: github.event.pull_request.draft == false && (github.event.pull_request.user.login != 'asyncapi-bot' || github.event.pull_request.user.login != 'dependabot[bot]' || github.event.pull_request.user.login != 'dependabot-preview[bot]') #it runs only if PR actor is not a bot, at least not a bot that we know + runs-on: ubuntu-latest + steps: + - name: Automerge PR + uses: pascalgn/automerge-action@v0.14.3 + env: + GITHUB_TOKEN: "${{ secrets.GH_TOKEN }}" + MERGE_LABELS: "!do-not-merge,ready-to-merge" + MERGE_METHOD: "squash" + MERGE_COMMIT_MESSAGE: "pull-request-title" + MERGE_RETRIES: "20" + MERGE_RETRY_SLEEP: "30000" \ No newline at end of file diff --git a/.github/workflows/automerge-for-humans-remove-ready-to-merge-label-on-edit.yml b/.github/workflows/automerge-for-humans-remove-ready-to-merge-label-on-edit.yml new file mode 100644 index 00000000..d47cf2fb --- /dev/null +++ b/.github/workflows/automerge-for-humans-remove-ready-to-merge-label-on-edit.yml @@ -0,0 +1,28 @@ +#This workflow is centrally managed in https://github.com/asyncapi/.github/ +#Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo + +# Defence from evil contributor that after adding `ready-to-merge` all suddenly makes evil commit or evil change in PR title +# Label is removed once above action is detected +name: Remove ready-to-merge label + +on: + pull_request_target: + types: + - synchronize + - edited + +jobs: + remove-ready-label: + runs-on: ubuntu-latest + steps: + - name: Remove label + uses: actions/github-script@v5 + with: + github-token: ${{ secrets.GH_TOKEN }} + script: | + github.rest.issues.removeLabel({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + name: 'ready-to-merge' + }) \ No newline at end of file diff --git a/.github/workflows/automerge.yml b/.github/workflows/automerge.yml index 293acd7e..4b41128c 100644 --- a/.github/workflows/automerge.yml +++ b/.github/workflows/automerge.yml @@ -21,7 +21,7 @@ on: jobs: autoapprove: - if: (github.event.pull_request.draft == false) && (github.actor == 'asyncapi-bot' || github.actor == 'dependabot[bot]' || github.actor == 'dependabot-preview[bot]') && !contains(github.event.pull_request.labels.*.name, 'released') + if: github.event.pull_request.draft == false && (github.event.pull_request.user.login == 'asyncapi-bot' || github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'dependabot-preview[bot]') && !contains(github.event.pull_request.labels.*.name, 'released') runs-on: ubuntu-latest steps: - name: Autoapproving @@ -44,11 +44,11 @@ jobs: automerge: needs: [autoapprove] + if: github.event.pull_request.user.login == 'asyncapi-bot' || github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'dependabot-preview[bot]' runs-on: ubuntu-latest steps: - name: Automerging uses: pascalgn/automerge-action@v0.13.0 - if: github.actor == 'asyncapi-bot' || github.actor == 'dependabot[bot]' || github.actor == 'dependabot-preview[bot]' env: GITHUB_TOKEN: "${{ secrets.GH_TOKEN }}" GITHUB_LOGIN: asyncapi-bot diff --git a/.github/workflows/help-command.yml b/.github/workflows/help-command.yml new file mode 100644 index 00000000..4f1d64b2 --- /dev/null +++ b/.github/workflows/help-command.yml @@ -0,0 +1,25 @@ +#This workflow is centrally managed in https://github.com/asyncapi/.github/ +#Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo + +name: Create help comment + +on: [issue_comment] + +jobs: + create_help_comment: + if: github.event.issue.pull_request + runs-on: ubuntu-latest + steps: + - uses: actions-ecosystem/action-create-comment@v1 + if: contains(github.event.comment.body, '/help') + with: + github_token: ${{ secrets.GH_TOKEN }} + body: | + Hello, @${{ github.actor }}! 👋🏼 + + I'm Genie from the magic lamp. Looks like somebody needs a hand! 🆘 + + At the moment the following comments are supported in pull requests: + + - `/ready-to-merge` or `/rtm` - This comment will trigger automerge of PR in case all required checks are green, approvals in place and do-not-merge label is not added + - `/do-not-merge` or `/dnm` - This comment will block automerging event if all conditions are met and ready-to-merge label is added \ No newline at end of file