From a3095527a002bcb710cf0934ae44e6841ea0eff9 Mon Sep 17 00:00:00 2001 From: Marcus Hert Da Coregio Date: Wed, 3 Jul 2024 13:47:28 -0300 Subject: [PATCH] Label superseded dependabot updates as duplicates Issue gh-14484 --- .../mark-duplicate-dependabot-prs.yml | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 .github/workflows/mark-duplicate-dependabot-prs.yml diff --git a/.github/workflows/mark-duplicate-dependabot-prs.yml b/.github/workflows/mark-duplicate-dependabot-prs.yml new file mode 100644 index 00000000000..8dcb5ffd19d --- /dev/null +++ b/.github/workflows/mark-duplicate-dependabot-prs.yml @@ -0,0 +1,46 @@ +name: Mark Duplicate PRs + +on: + pull_request: + types: [closed] + +jobs: + check_duplicate_prs: + runs-on: ubuntu-latest + if: github.event.pull_request.merged == 'true' && github.event.pull_request.user.login == 'dependabot[bot]' + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Extract Dependency Name from PR Title + id: extract + run: | + PR_TITLE="${{ github.event.pull_request.title }}" + DEPENDENCY_NAME=$(echo "$PR_TITLE" | awk -F ' from ' '{print $1}') + echo "dependency_name=$DEPENDENCY_NAME" >> $GITHUB_OUTPUT + + - name: Find PRs + id: find_duplicates + env: + DEPENDENCY_NAME: ${{ steps.extract.outputs.dependency_name }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + PRS=$(gh pr list --search "milestone:${{ github.event.pull_request.milestone.title }} is:merged $DEPENDENCY_NAME" --json number --jq 'map(.number) | join(",")') + echo "prs=$PRS" >> $GITHUB_OUTPUT + + - name: Label Duplicate PRs + if: steps.find_duplicates.outputs.prs != '' + env: + PRS: ${{ steps.find_duplicates.outputs.prs }} + CURRENT_PR_NUMBER: ${{ github.event.pull_request.number }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + shell: bash + run: | + for i in ${PRS//,/ } + do + if [ ! $i -eq "$CURRENT_PR_NUMBER" ]; then + echo "Marking PR $i as duplicate" + gh pr edit "$i" --add-label "status: duplicate" + gh pr comment "$i" --body "Duplicate of #$CURRENT_PR_NUMBER" + fi + done