Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci(conflicts): create conflicts.yml workflow #7104

Merged
Merged
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions .github/workflows/detect-conflicting-prs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: "Detect conflicting PRs"

on:
workflow_dispatch: # manually
# So that PRs touching the same files as the push are updated
push:
# So that the `dirtyLabel` is removed if conflicts are resolved
pull_request_target: # - A pull request (even with conflicts)
types:
- synchronize # pushing more commits

permissions:
# no checkouts/branching needed
contents: none
# need by "eps1lon/actions-label-merge-conflict" to manage PR label/comments
pull-requests: write

# This allows a subsequently queued workflow run to interrupt/wait for previous runs
concurrency:
group: '${{ github.workflow }}'
cancel-in-progress: false # true: interrupt, false = wait for

jobs:
detect-prs:
name: Detect
if: ${{ github.actor != 'dependabot[bot]' }} # avoid dependabot PRs
runs-on: ubuntu-latest
steps:

- name: Label conflicting PRs that are open
id: pr-labeler
uses: eps1lon/[email protected]
with:
repoToken: ${{ secrets.GITHUB_TOKEN }}
retryAfter: 30 # seconds
retryMax: 5 # atemps
dirtyLabel: conflicts
commentOnDirty: |
Oh no 😟! A dirty status was reached.
davorpa marked this conversation as resolved.
Show resolved Hide resolved

Please 🙏, take a moment and [address the merge conflicts](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts) of your pull request before we can evaluate it again.

Thanks in advance you for your effort and patience ❤️!
davorpa marked this conversation as resolved.
Show resolved Hide resolved
continueOnMissingPermissions: true

- name: Print outputs
run: echo ${{ join(steps.pr-labeler.outputs.*, ',') }}

- name: Set PRs outputs
id: set-prs
run: |
echo "$INPUT_PRS" \
| jq --compact-output --raw-output 'to_entries | map({number: .key, dirty: .value})' \
| sed -e 's/^/::set-output name=prs::/'
echo "$INPUT_PRS" \
| jq --raw-output 'to_entries | length' \
| sed -e 's/^/::set-output name=prs-len::/'
env:
INPUT_PRS: ${{ steps.pr-labeler.outputs.prDirtyStatuses }}

- name: Write job summary
run: |
echo "### Pull Request statuses" \
>> $GITHUB_STEP_SUMMARY
# render json array to a Markdown table with an optional "No records" message if empty
echo "$INPUT_PRS" \
| jq --raw-output 'map("| [#\(.number)](\(env.GITHUB_PUBLIC_URL)/\(.number)) | \(if (.dirty) then "❌" else "✔️" end) |") | join("\n") | if (. == "") then "\nNo records.\n" else "\n| PR | Mergeable? |\n|---:|:----------:|\n\(.)\n" end' \
>> $GITHUB_STEP_SUMMARY
env:
GITHUB_PUBLIC_URL: ${{ format('{0}/{1}/pull', github.server_url, github.repository) }}
INPUT_PRS: ${{ steps.set-prs.outputs.prs }}