Skip to content
Merged
Changes from all 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
79 changes: 1 addition & 78 deletions .github/workflows/dependabot-automerge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,6 @@ on:
- opened
- reopened
- synchronize
push:
branches:
- main
workflow_dispatch:

permissions:
contents: write
Expand All @@ -28,7 +24,7 @@ jobs:
steps:
- name: Fetch Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v3
uses: dependabot/fetch-metadata@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}

Expand Down Expand Up @@ -95,76 +91,3 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_URL: ${{ github.event.pull_request.html_url }}

refresh-behind-dependabot-prs:
name: Refresh behind Dependabot PRs
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
steps:
- name: Update behind safe Dependabot PRs
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REPOSITORY: ${{ github.repository }}
run: |
prs_json="$(gh pr list \
--repo "$REPOSITORY" \
--author 'app/dependabot' \
--state open \
--json number,title,mergeStateStatus)"

export PRS_JSON="$prs_json"
prs="$(python - <<'PY'
import json
import os
import re


def parse_release(version: str) -> tuple[int, int, int] | None:
match = re.match(r"^v?(?P<num>\d+(?:\.\d+){0,2})", version.strip())
if not match:
return None
parts = [int(part) for part in match.group("num").split(".")]
while len(parts) < 3:
parts.append(0)
return tuple(parts[:3])


def classify_from_title(title: str) -> str:
match = re.search(r" from (?P<old>\S+) to (?P<new>\S+)", title)
if not match:
return "unknown"
old = parse_release(match.group("old"))
new = parse_release(match.group("new"))
if old is None or new is None or new <= old:
return "unknown"
if new[0] != old[0]:
return "major"
if new[1] != old[1]:
return "minor"
if new[2] != old[2]:
return "patch"
return "unknown"


for pr in json.loads(os.environ["PRS_JSON"]):
if pr["mergeStateStatus"] != "BEHIND":
continue
if classify_from_title(pr["title"]) not in {"patch", "minor"}:
continue
print(pr["number"])
PY
)"

if [ -z "$prs" ]; then
echo "No behind patch or minor Dependabot PRs."
exit 0
fi

while IFS= read -r pr; do
[ -n "$pr" ] || continue
echo "Updating branch for PR #$pr"
gh api \
--method PUT \
-H "Accept: application/vnd.github+json" \
"repos/$REPOSITORY/pulls/$pr/update-branch"
done <<< "$prs"