Skip to content

ci: auto-merge clean Dependabot PRs on plugin repos in update-plugins cron#7493

Merged
JohnMcLear merged 1 commit intodevelopfrom
ci/auto-merge-dependabot-plugin-prs
Apr 8, 2026
Merged

ci: auto-merge clean Dependabot PRs on plugin repos in update-plugins cron#7493
JohnMcLear merged 1 commit intodevelopfrom
ci/auto-merge-dependabot-plugin-prs

Conversation

@JohnMcLear
Copy link
Copy Markdown
Member

Summary

  • Adds a final step to .github/workflows/update-plugins.yml that walks every ether/ep_* repo and squash-merges any open Dependabot PR whose mergeStateStatus is CLEAN (no conflicts, branch up to date, all required checks green).
  • Anything else (DIRTY, BLOCKED, BEHIND, UNSTABLE, …) is left alone for a human to look at.
  • No semver gating: a major bump is allowed to merge if the plugin's own CI is green. If a major breaks the API, plugin CI should fail and mergeStateStatus won't be CLEAN — that's the gate.

Why

The daily update-plugins cron already pushes boilerplate updates (workflows, dependabot.yml, etc.) into every plugin repo via checkPlugin, which causes Dependabot to open PRs against each plugin. But none of the plugin repos have auto-merge configured at the repo level, so those PRs sit green forever — see e.g. ether/ep_loading_message#77, which has been MERGEABLE + CLEAN since it was opened.

This step closes the loop centrally from etherpad-lite, instead of needing to enable auto-merge + add per-repo workflows in 100+ plugin repos.

Test plan

  • Trigger the workflow manually via workflow_dispatch once merged and verify the new step runs without error against the live plugin set.
  • Confirm that at least one known-clean Dependabot PR (e.g. Bump pnpm/action-setup from 3 to 5 ep_loading_message#77) is squash-merged on the first run.
  • Confirm that PRs with failing checks / conflicts are skipped, not merged.

Notes

  • Uses the existing PLUGINS_PAT secret. The PAT already has contents: write (the cron pushes commits to plugin repos), and needs pull_requests: write for gh pr merge to succeed. If the first run shows WARN: failed to merge ... lines, that's the scope to check.

🤖 Generated with Claude Code

… cron

The daily update-plugins workflow already syncs boilerplate (workflows,
dependabot.yml, etc.) into every ether/ep_* repo via checkPlugin, but it
never closes the loop on the Dependabot PRs that config produces. With
plugin repos having no per-repo auto-merge wiring, those PRs sit green
indefinitely (e.g. ether/ep_loading_message#77).

Add a final step that, after the per-plugin updates run, walks every
ep_* repo and squash-merges any open Dependabot PR whose mergeStateStatus
is CLEAN — i.e. no conflicts, branch up to date, all required checks
green. Anything else (DIRTY, BLOCKED, BEHIND, UNSTABLE, …) is left alone
for a human.

No semver gating: trust each plugin's own CI to fail on a breaking
major bump rather than pre-filtering by version delta.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@JohnMcLear JohnMcLear merged commit 7b6109e into develop Apr 8, 2026
19 of 22 checks passed
@JohnMcLear JohnMcLear deleted the ci/auto-merge-dependabot-plugin-prs branch April 8, 2026 09:53
@qodo-free-for-open-source-projects
Copy link
Copy Markdown

Review Summary by Qodo

Auto-merge clean Dependabot PRs in plugin repos workflow

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Adds auto-merge step for clean Dependabot PRs in plugin repos
• Walks all ether/ep_* repos and squash-merges PRs with CLEAN mergeStateStatus
• Closes loop on boilerplate updates without per-repo auto-merge configuration
• Leaves non-clean PRs (conflicts, failing checks) for manual review
Diagram
flowchart LR
  A["update-plugins cron"] --> B["Sync boilerplate to ep_* repos"]
  B --> C["List all ether/ep_* repos"]
  C --> D["Find open Dependabot PRs"]
  D --> E{mergeStateStatus<br/>CLEAN?}
  E -->|Yes| F["Squash-merge PR"]
  E -->|No| G["Skip for manual review"]
  F --> H["Report merged PRs"]
  G --> H
Loading

Grey Divider

File Changes

1. .github/workflows/update-plugins.yml ✨ Enhancement +31/-0

Add Dependabot PR auto-merge step for plugins

• Adds new "Merge clean Dependabot PRs on plugin repos" step after plugin updates
• Queries all ether/ep_* repos for open Dependabot PRs with CLEAN mergeStateStatus
• Squash-merges qualifying PRs and deletes their branches
• Reports merged PRs and warns on merge failures
• Uses existing PLUGINS_PAT secret for authentication

.github/workflows/update-plugins.yml


Grey Divider

Qodo Logo

@qodo-free-for-open-source-projects
Copy link
Copy Markdown

qodo-free-for-open-source-projects Bot commented Apr 8, 2026

Code Review by Qodo

🐞 Bugs (5)   📘 Rule violations (1)   📎 Requirement gaps (0)   🎨 UX Issues (0)
🐞\ ≡ Correctness (2) ☼ Reliability (2) ◔ Observability (1) ⭐ New (2)
📘\ ☼ Reliability (1) ⭐ New (1)

Grey Divider


Action required

1. Auto-merge step lacks flag 📘
Description
The new step will automatically squash-merge Dependabot PRs on every scheduled run with no feature
flag or default-off gating. This violates the requirement that new features be behind a
disabled-by-default feature flag to preserve prior behavior unless explicitly enabled.
Code

.github/workflows/update-plugins.yml[R81-107]

+      - name: Merge clean Dependabot PRs on plugin repos
+        env:
+          GH_TOKEN: ${{ secrets.PLUGINS_PAT }}
+        run: |
+          # For every ep_* repo under ether, merge any Dependabot PR whose
+          # mergeStateStatus is CLEAN (no conflicts, branch up to date, all
+          # required checks green). Anything else is left alone for a human.
+          plugins=$(gh repo list ether --limit 200 --json name --jq '.[] | select(.name | startswith("ep_")) | .name')
+
+          merged=""
+          for plugin in $plugins; do
+            repo="ether/${plugin}"
+            prs=$(gh pr list --repo "$repo" \
+              --author "app/dependabot" \
+              --state open \
+              --json number,mergeStateStatus,title \
+              --jq '.[] | select(.mergeStateStatus=="CLEAN") | .number') || continue
+
+            for pr in $prs; do
+              echo "Merging ${repo}#${pr}"
+              if gh pr merge --repo "$repo" --squash --delete-branch "$pr"; then
+                merged="$merged ${repo}#${pr}"
+              else
+                echo "WARN: failed to merge ${repo}#${pr}"
+              fi
+            done
+          done
Evidence
PR Compliance ID 4 requires new features to be gated behind a feature flag that is disabled by
default. The added workflow step unconditionally lists plugins and merges any Dependabot PR with
mergeStateStatus=="CLEAN" via gh pr merge, meaning the new behavior is enabled by default on the
cron schedule.

.github/workflows/update-plugins.yml[81-107]
Best Practice: Repository guidelines

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The workflow introduces automatic merging of Dependabot PRs but does not provide a feature flag/explicit enablement mechanism that defaults to off.

## Issue Context
The step `Merge clean Dependabot PRs on plugin repos` runs on the scheduled cron and will merge PRs whenever `mergeStateStatus` is `CLEAN`, changing default behavior for the workflow.

## Fix Focus Areas
- .github/workflows/update-plugins.yml[81-107]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Repo list truncates plugins 🐞
Description
The step enumerates plugin repos via gh repo list ether --limit 200, so any ep_* repos beyond
the first 200 results are silently skipped and their CLEAN Dependabot PRs will never be considered
for merge.
Code

.github/workflows/update-plugins.yml[88]

+          plugins=$(gh repo list ether --limit 200 --json name --jq '.[] | select(.name | startswith("ep_")) | .name')
Evidence
The workflow claims to process every ep_* repo, but hard-caps enumeration at 200 repos. The repo
already contains tooling that manually paginates the ether org repo listing (multiple pages of 100),
which is evidence that a single fixed page/limit is not sufficient for the org in practice.

.github/workflows/update-plugins.yml[85-92]
bin/plugins/listOfficialPlugins[9-13]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The workflow uses `gh repo list ether --limit 200` to discover `ep_*` repos, which can silently omit repos if the org has more than 200 repos (or if `ep_*` repos fall outside the first 200 results). This prevents merging eligible Dependabot PRs for skipped repos.

## Issue Context
There are two occurrences of this pattern in the workflow (one for cloning/updating, one for merging Dependabot PRs). The repo also includes a script that pages through multiple GitHub API pages when listing ether repos, indicating pagination/high limits are expected.

## Fix Focus Areas
- .github/workflows/update-plugins.yml[44-45]
- .github/workflows/update-plugins.yml[85-89]

## Suggested fix
- Increase the limit to something safely above the expected repo count (e.g., `--limit 1000`), **in both places**.
- (Optional) Consider filtering out archived repos by requesting `isArchived` and excluding them in `jq` to avoid wasted API calls.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Repo PR list errors hidden 🐞
Description
If gh pr list fails for a repo, the script uses || continue and emits no warning, so
auth/rate-limit/API failures silently skip repos and leave merges unattempted without any visibility
in the final summary.
Code

.github/workflows/update-plugins.yml[R93-98]

+            prs=$(gh pr list --repo "$repo" \
+              --author "app/dependabot" \
+              --state open \
+              --json number,mergeStateStatus,title \
+              --jq '.[] | select(.mergeStateStatus=="CLEAN") | .number') || continue
+
Evidence
The PR list command’s failure path immediately continues to the next repo with no log message and no
accounting in the final output, making it impossible to tell from workflow logs whether a repo was
processed or skipped due to an error.

.github/workflows/update-plugins.yml[93-110]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Failures from `gh pr list` are swallowed (`|| continue`) with no warning, so the workflow can succeed while skipping many/all repos.
### Issue Context
This step is meant to provide centralized auto-merging; silent skips will look like "nothing to merge" rather than "could not check".
### Fix Focus Areas
- .github/workflows/update-plugins.yml[93-110]
### Suggested change
Replace `|| continue` with explicit error handling that logs a warning including the repo name and tracks failures in a `failed_repos` list (printed in the final summary). Optionally, fail the step if listing fails for an unexpectedly large number of repos.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

4. PR list may be partial 🐞
Description
gh pr list is invoked without an explicit limit/pagination, so only the CLI’s default number of
PRs are considered; if a plugin repo has more open Dependabot PRs than that default, some CLEAN PRs
will be skipped and remain unmerged.
Code

.github/workflows/update-plugins.yml[R93-97]

+            prs=$(gh pr list --repo "$repo" \
+              --author "app/dependabot" \
+              --state open \
+              --json number,mergeStateStatus,title \
+              --jq '.[] | select(.mergeStateStatus=="CLEAN") | .number') || continue
Evidence
The merge loop only iterates over PR numbers returned by gh pr list, but the command does not
specify --limit or any pagination mechanism, so the input set can be silently truncated.

.github/workflows/update-plugins.yml[93-97]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The workflow may miss eligible Dependabot PRs because `gh pr list` is called without `--limit` (or pagination), which can truncate results.

## Issue Context
This step is intended to merge *all* CLEAN Dependabot PRs across plugin repos; missing PRs due to listing truncation undermines that goal.

## Fix Focus Areas
- .github/workflows/update-plugins.yml[93-97]

## Suggested fix
Add a sufficiently high limit, for example:
```sh
prs=$(gh pr list --repo "$repo" \
 --author "app/dependabot" \
 --state open \
 --limit 200 \
 --json number,mergeStateStatus \
 --jq '.[] | select(.mergeStateStatus=="CLEAN") | .number') || continue
```

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


5. Plugin list truncated at 200 🐞
Description
The new merge step claims to process every ep_* repo, but gh repo list ether --limit 200
hard-limits enumeration to 200 repos, so any additional ep_* repos will never be considered for
merging.
Code

.github/workflows/update-plugins.yml[R85-89]

+          # For every ep_* repo under ether, merge any Dependabot PR whose
+          # mergeStateStatus is CLEAN (no conflicts, branch up to date, all
+          # required checks green). Anything else is left alone for a human.
+          plugins=$(gh repo list ether --limit 200 --json name --jq '.[] | select(.name | startswith("ep_")) | .name')
+
Evidence
The step’s comment states it will process every ep_* repo, but the actual repo enumeration
explicitly limits results to 200, so the step cannot cover more than 200 repos.

.github/workflows/update-plugins.yml[85-89]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The workflow enumerates plugin repos with `gh repo list ether --limit 200 ...`, which prevents the step from actually covering all `ep_*` repos if the org has more than 200.
### Issue Context
The step’s own comment says it runs "For every ep_* repo".
### Fix Focus Areas
- .github/workflows/update-plugins.yml[85-89]
### Suggested change
Use a pagination-capable approach (e.g., `gh api` with `--paginate`) or set a sufficiently high explicit limit so the repo list reliably includes all `ep_*` repos.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


6. PR list relies on defaults 🐞
Description
The script intends to merge all open CLEAN Dependabot PRs per repo, but gh pr list is called
without an explicit --limit/pagination, so some matching PRs can be skipped depending on the CLI’s
default result cap.
Code

.github/workflows/update-plugins.yml[R93-97]

+            prs=$(gh pr list --repo "$repo" \
+              --author "app/dependabot" \
+              --state open \
+              --json number,mergeStateStatus,title \
+              --jq '.[] | select(.mergeStateStatus=="CLEAN") | .number') || continue
Evidence
The comment states it will merge any Dependabot PRs that are CLEAN, but the implementation does not
set any explicit list limit/pagination for gh pr list, so the step’s coverage depends on implicit
CLI defaults rather than an explicit 'all results' guarantee.

.github/workflows/update-plugins.yml[85-97]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`gh pr list` is invoked without an explicit `--limit`/pagination, which can cause incomplete results and skipped CLEAN Dependabot PRs.
### Issue Context
The step is intended to merge all qualifying (CLEAN) Dependabot PRs in each plugin repo.
### Fix Focus Areas
- .github/workflows/update-plugins.yml[93-97]
### Suggested change
Add an explicit high `--limit` (and/or a pagination strategy) to ensure all matching PRs are considered before filtering with `jq`.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown

Review Summary by Qodo

Auto-merge clean Dependabot PRs in update-plugins workflow

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Adds auto-merge step for clean Dependabot PRs in plugin repos
• Walks all ether/ep_* repos and squash-merges PRs with CLEAN merge status
• Skips PRs with conflicts, failing checks, or other blocking conditions
• Closes loop on Dependabot PRs that sit green indefinitely without per-repo auto-merge
Diagram
flowchart LR
  A["update-plugins cron"] --> B["Sync boilerplate to ep_* repos"]
  B --> C["Dependabot opens PRs"]
  C --> D["New merge step"]
  D --> E["Query CLEAN PRs"]
  E --> F["Squash-merge PRs"]
  F --> G["Delete branches"]
Loading

Grey Divider

File Changes

1. .github/workflows/update-plugins.yml ✨ Enhancement +31/-0

Add auto-merge step for clean Dependabot plugin PRs

• Adds new Merge clean Dependabot PRs on plugin repos step after plugin updates complete
• Queries all ether/ep_* repos for open Dependabot PRs with CLEAN merge status
• Squash-merges and deletes branches for clean PRs; logs warnings for failed merges
• Reports summary of merged Dependabot PRs at workflow completion

.github/workflows/update-plugins.yml


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown

qodo-code-review Bot commented Apr 8, 2026

Code Review by Qodo

🐞 Bugs (3)   📘 Rule violations (0)   📎 Requirement gaps (0)   🎨 UX Issues (0)
🐞\ ≡ Correctness (1) ☼ Reliability (1) ◔ Observability (1)

Grey Divider


Action required

1. Repo PR list errors hidden 🐞
Description
If gh pr list fails for a repo, the script uses || continue and emits no warning, so
auth/rate-limit/API failures silently skip repos and leave merges unattempted without any visibility
in the final summary.
Code

.github/workflows/update-plugins.yml[R93-98]

+            prs=$(gh pr list --repo "$repo" \
+              --author "app/dependabot" \
+              --state open \
+              --json number,mergeStateStatus,title \
+              --jq '.[] | select(.mergeStateStatus=="CLEAN") | .number') || continue
+
Evidence
The PR list command’s failure path immediately continues to the next repo with no log message and no
accounting in the final output, making it impossible to tell from workflow logs whether a repo was
processed or skipped due to an error.

.github/workflows/update-plugins.yml[93-110]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
Failures from `gh pr list` are swallowed (`|| continue`) with no warning, so the workflow can succeed while skipping many/all repos.

### Issue Context
This step is meant to provide centralized auto-merging; silent skips will look like "nothing to merge" rather than "could not check".

### Fix Focus Areas
- .github/workflows/update-plugins.yml[93-110]

### Suggested change
Replace `|| continue` with explicit error handling that logs a warning including the repo name and tracks failures in a `failed_repos` list (printed in the final summary). Optionally, fail the step if listing fails for an unexpectedly large number of repos.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Plugin list truncated at 200 🐞
Description
The new merge step claims to process every ep_* repo, but gh repo list ether --limit 200
hard-limits enumeration to 200 repos, so any additional ep_* repos will never be considered for
merging.
Code

.github/workflows/update-plugins.yml[R85-89]

+          # For every ep_* repo under ether, merge any Dependabot PR whose
+          # mergeStateStatus is CLEAN (no conflicts, branch up to date, all
+          # required checks green). Anything else is left alone for a human.
+          plugins=$(gh repo list ether --limit 200 --json name --jq '.[] | select(.name | startswith("ep_")) | .name')
+
Evidence
The step’s comment states it will process every ep_* repo, but the actual repo enumeration
explicitly limits results to 200, so the step cannot cover more than 200 repos.

.github/workflows/update-plugins.yml[85-89]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The workflow enumerates plugin repos with `gh repo list ether --limit 200 ...`, which prevents the step from actually covering all `ep_*` repos if the org has more than 200.

### Issue Context
The step’s own comment says it runs "For every ep_* repo".

### Fix Focus Areas
- .github/workflows/update-plugins.yml[85-89]

### Suggested change
Use a pagination-capable approach (e.g., `gh api` with `--paginate`) or set a sufficiently high explicit limit so the repo list reliably includes all `ep_*` repos.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. PR list relies on defaults 🐞
Description
The script intends to merge all open CLEAN Dependabot PRs per repo, but gh pr list is called
without an explicit --limit/pagination, so some matching PRs can be skipped depending on the CLI’s
default result cap.
Code

.github/workflows/update-plugins.yml[R93-97]

+            prs=$(gh pr list --repo "$repo" \
+              --author "app/dependabot" \
+              --state open \
+              --json number,mergeStateStatus,title \
+              --jq '.[] | select(.mergeStateStatus=="CLEAN") | .number') || continue
Evidence
The comment states it will merge any Dependabot PRs that are CLEAN, but the implementation does not
set any explicit list limit/pagination for gh pr list, so the step’s coverage depends on implicit
CLI defaults rather than an explicit 'all results' guarantee.

.github/workflows/update-plugins.yml[85-97]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`gh pr list` is invoked without an explicit `--limit`/pagination, which can cause incomplete results and skipped CLEAN Dependabot PRs.

### Issue Context
The step is intended to merge all qualifying (CLEAN) Dependabot PRs in each plugin repo.

### Fix Focus Areas
- .github/workflows/update-plugins.yml[93-97]

### Suggested change
Add an explicit high `--limit` (and/or a pagination strategy) to ensure all matching PRs are considered before filtering with `jq`.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

Comment on lines +93 to +98
prs=$(gh pr list --repo "$repo" \
--author "app/dependabot" \
--state open \
--json number,mergeStateStatus,title \
--jq '.[] | select(.mergeStateStatus=="CLEAN") | .number') || continue

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. Repo pr list errors hidden 🐞 Bug ◔ Observability

If gh pr list fails for a repo, the script uses || continue and emits no warning, so
auth/rate-limit/API failures silently skip repos and leave merges unattempted without any visibility
in the final summary.
Agent Prompt
### Issue description
Failures from `gh pr list` are swallowed (`|| continue`) with no warning, so the workflow can succeed while skipping many/all repos.

### Issue Context
This step is meant to provide centralized auto-merging; silent skips will look like "nothing to merge" rather than "could not check".

### Fix Focus Areas
- .github/workflows/update-plugins.yml[93-110]

### Suggested change
Replace `|| continue` with explicit error handling that logs a warning including the repo name and tracks failures in a `failed_repos` list (printed in the final summary). Optionally, fail the step if listing fails for an unexpectedly large number of repos.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +81 to +107
- name: Merge clean Dependabot PRs on plugin repos
env:
GH_TOKEN: ${{ secrets.PLUGINS_PAT }}
run: |
# For every ep_* repo under ether, merge any Dependabot PR whose
# mergeStateStatus is CLEAN (no conflicts, branch up to date, all
# required checks green). Anything else is left alone for a human.
plugins=$(gh repo list ether --limit 200 --json name --jq '.[] | select(.name | startswith("ep_")) | .name')

merged=""
for plugin in $plugins; do
repo="ether/${plugin}"
prs=$(gh pr list --repo "$repo" \
--author "app/dependabot" \
--state open \
--json number,mergeStateStatus,title \
--jq '.[] | select(.mergeStateStatus=="CLEAN") | .number') || continue

for pr in $prs; do
echo "Merging ${repo}#${pr}"
if gh pr merge --repo "$repo" --squash --delete-branch "$pr"; then
merged="$merged ${repo}#${pr}"
else
echo "WARN: failed to merge ${repo}#${pr}"
fi
done
done
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. Auto-merge step lacks flag 📘 Rule violation ☼ Reliability

The new step will automatically squash-merge Dependabot PRs on every scheduled run with no feature
flag or default-off gating. This violates the requirement that new features be behind a
disabled-by-default feature flag to preserve prior behavior unless explicitly enabled.
Agent Prompt
## Issue description
The workflow introduces automatic merging of Dependabot PRs but does not provide a feature flag/explicit enablement mechanism that defaults to off.

## Issue Context
The step `Merge clean Dependabot PRs on plugin repos` runs on the scheduled cron and will merge PRs whenever `mergeStateStatus` is `CLEAN`, changing default behavior for the workflow.

## Fix Focus Areas
- .github/workflows/update-plugins.yml[81-107]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

# For every ep_* repo under ether, merge any Dependabot PR whose
# mergeStateStatus is CLEAN (no conflicts, branch up to date, all
# required checks green). Anything else is left alone for a human.
plugins=$(gh repo list ether --limit 200 --json name --jq '.[] | select(.name | startswith("ep_")) | .name')
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

2. Repo list truncates plugins 🐞 Bug ≡ Correctness

The step enumerates plugin repos via gh repo list ether --limit 200, so any ep_* repos beyond
the first 200 results are silently skipped and their CLEAN Dependabot PRs will never be considered
for merge.
Agent Prompt
## Issue description
The workflow uses `gh repo list ether --limit 200` to discover `ep_*` repos, which can silently omit repos if the org has more than 200 repos (or if `ep_*` repos fall outside the first 200 results). This prevents merging eligible Dependabot PRs for skipped repos.

## Issue Context
There are two occurrences of this pattern in the workflow (one for cloning/updating, one for merging Dependabot PRs). The repo also includes a script that pages through multiple GitHub API pages when listing ether repos, indicating pagination/high limits are expected.

## Fix Focus Areas
- .github/workflows/update-plugins.yml[44-45]
- .github/workflows/update-plugins.yml[85-89]

## Suggested fix
- Increase the limit to something safely above the expected repo count (e.g., `--limit 1000`), **in both places**.
- (Optional) Consider filtering out archived repos by requesting `isArchived` and excluding them in `jq` to avoid wasted API calls.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant