Skip to content

chore: add pr-closer workflow#876

Merged
jdx merged 3 commits intomainfrom
pr-closer
Apr 26, 2026
Merged

chore: add pr-closer workflow#876
jdx merged 3 commits intomainfrom
pr-closer

Conversation

@jdx
Copy link
Copy Markdown
Owner

@jdx jdx commented Apr 26, 2026

Summary

  • Adds .github/workflows/pr-closer.yml, ported from jdx/mise
  • Runs daily and closes non-jdx PRs idle for 30+ days; uses a different message when CI was failing
  • Skips PRs labeled keep-open

Test plan

  • Trigger via workflow_dispatch once merged to confirm it runs cleanly

🤖 Generated with Claude Code


Note

Medium Risk
Introduces an automated GitHub Actions job that closes pull requests, which can unintentionally close active work if the search criteria or labels are misapplied. Otherwise isolated to repo maintenance and uses standard GITHUB_TOKEN permissions.

Overview
Adds a new GitHub Actions workflow, pr-closer, that runs daily (and via manual dispatch) to close open PRs not updated in 30+ days.

The job excludes PRs authored by jdx and PRs labeled keep-open, and posts a different close comment when CI checks are detected as failing.

Reviewed by Cursor Bugbot for commit cfeef5d. Bugbot is set up for automated code reviews on this repo. Configure here.

Closes non-jdx PRs idle for 30+ days, with a different message when CI was failing. Skips PRs labeled keep-open.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Note

Gemini is unable to generate a review for this pull request due to the file types involved not being currently supported.

@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented Apr 26, 2026

Greptile Summary

Adds a daily GitHub Actions workflow that closes non-jdx PRs idle for 30+ days, posting a context-aware message depending on CI status. Previous review feedback (explicit permissions block, dynamic ${{ github.repository }}, and raising --limit to 500) has all been addressed in this version.

Confidence Score: 5/5

Safe to merge — no logic or security issues found in the workflow.

All previously flagged issues (permissions block, hardcoded repo, low limit) are resolved. The jq CI-status detection is correct for both GraphQL (uppercase FAILURE) and REST (lowercase failure) conclusion values. GNU date syntax is valid on ubuntu-latest. No P0 or P1 findings.

No files require special attention.

Important Files Changed

Filename Overview
.github/workflows/pr-closer.yml New daily workflow that closes stale PRs (30+ days idle) skipping jdx-authored and keep-open-labeled PRs; explicitly sets pull-requests: write, uses github.repository for portability, and caps at 500 PRs.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A([Schedule: daily / workflow_dispatch]) --> B[gh pr list\nupdated < 30 days ago\n-author:jdx -label:keep-open\n--limit 500]
    B --> C[jq: extract number + CI status]
    C --> D{statusCheckRollup\nlength > 0 AND\nhas FAILURE?}
    D -- yes --> E[status = failing]
    D -- no --> F[status = passing]
    E --> G[gh pr close\nwith CI-failure message]
    F --> H[gh pr close\nwith standard message]
    G --> I([PR closed])
    H --> I
Loading

Reviews (3): Last reviewed commit: "chore: filter stale PRs server-side in p..." | Re-trigger Greptile

Comment thread .github/workflows/pr-closer.yml
Comment thread .github/workflows/pr-closer.yml Outdated
jdx and others added 2 commits April 26, 2026 15:42
Add explicit pull-requests: write permission, replace hardcoded jdx/hk with github.repository, and bump --limit to 500.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Move staleness, author, and label filters into the gh search query and sort by updated-asc so oldest-stale PRs close first. This avoids any risk of --limit truncating real candidates — only stale PRs are fetched, and any beyond the limit roll into the next daily run.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@jdx jdx enabled auto-merge (squash) April 26, 2026 15:58
@jdx jdx merged commit 79abff2 into main Apr 26, 2026
20 checks passed
@jdx jdx deleted the pr-closer branch April 26, 2026 16:03
@jdx jdx mentioned this pull request Apr 26, 2026
jdx added a commit to jdx/mise that referenced this pull request Apr 26, 2026
## Summary
- Backports improvements made to the same workflow in jdx/hk#876.
- Adds explicit `permissions: pull-requests: write` so the job can't 403
on read-only default tokens.
- Replaces hardcoded `jdx/mise` with `${{ github.repository }}` (via
`REPO` env).
- Filters stale PRs server-side via `--search "updated:<CUTOFF
-author:jdx -label:keep-open sort:updated-asc"` and bumps `--limit` to
500. Only stale candidates are fetched, sorted oldest-first, so anything
beyond the limit rolls into the next daily run instead of being silently
skipped.

## Test plan
- [x] Verified the search query against jdx/mise — currently returns 0
stale candidates (workflow has been keeping things tidy)
- [ ] Trigger via `workflow_dispatch` once merged to confirm a clean run

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk: limited to a GitHub Actions workflow and only changes how
stale PRs are queried/closed; main risk is mis-filtering PRs and closing
the wrong ones.
> 
> **Overview**
> Improves the `pr-closer` GitHub Actions workflow by granting explicit
`pull-requests: write` permissions and removing the hardcoded repository
in favor of `${{ github.repository }}`.
> 
> Changes stale-PR selection to be filtered server-side using a date
cutoff search (sorted oldest-first) and increases the fetch limit to 500
before closing candidates, while keeping the “failing vs passing checks”
close message behavior.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
ae0b5f8. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
jdx added a commit that referenced this pull request Apr 26, 2026
### 🐛 Bug Fixes

- **(builtins)** silence pklr deprecation warnings on Builtins.pkl load
by [@jdx](https://github.com/jdx) in
[#880](#880)
- **(ci)** serialize docs lint step by [@jdx](https://github.com/jdx) in
[#874](#874)
- **(config)** include main pkl path in cache fresh files by
[@jdx](https://github.com/jdx) in
[#879](#879)
- **(docs)** stack banner message and link on mobile by
[@jdx](https://github.com/jdx) in
[#865](#865)
- **(docs)** pin banner close button to top-right corner on mobile by
[@jdx](https://github.com/jdx) in
[#867](#867)

### 📚 Documentation

- **(site)** show release version and github stars by
[@jdx](https://github.com/jdx) in
[#872](#872)

### 🔍 Other Changes

- add pr-closer workflow by [@jdx](https://github.com/jdx) in
[#876](#876)

### 📦️ Dependency Updates

- bump communique 1.0.3 → 1.0.4 by [@jdx](https://github.com/jdx) in
[#868](#868)
- update anthropics/claude-code-action digest to 2da6cfa by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#869](#869)
- update anthropics/claude-code-action digest to 567fe95 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#870](#870)
- bump communique to 1.1.2 by [@jdx](https://github.com/jdx) in
[#875](#875)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> <sup>[Cursor Bugbot](https://cursor.com/bugbot) is generating a
summary for commit 62ff432. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: mise-en-dev <123107610+mise-en-dev@users.noreply.github.com>
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request May 8, 2026
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [hk](https://github.com/jdx/hk) | minor | `1.43.0` → `1.45.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>jdx/hk (hk)</summary>

### [`v1.45.0`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1450---2026-05-04)

[Compare Source](jdx/hk@v1.44.3...v1.45.0)

##### 🚀 Features

- **(builtins)** add `buildifier` format and lint built-ins by [@&#8203;plx](https://github.com/plx) in [#&#8203;896](jdx/hk#896)

##### 🐛 Bug Fixes

- **(step)** only auto-batch when rendered command exceeds ARG\_MAX by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;901](jdx/hk#901)

##### 📚 Documentation

- thank Namespace for GitHub Actions runner support by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;895](jdx/hk#895)

##### 🔍 Other Changes

- **(ci)** use !cancelled() instead of always() for final job by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;906](jdx/hk#906)
- **(docs)** remove shrill.en.dev analytics script by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;903](jdx/hk#903)
- remove rust-cache from release jobs by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;893](jdx/hk#893)
- invert CLAUDE.md/AGENTS.md so AGENTS.md is canonical by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;905](jdx/hk#905)
- set dev profile debug to 1 by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;907](jdx/hk#907)

##### 📦️ Dependency Updates

- update anthropics/claude-code-action digest to [`fefa07e`](jdx/hk@fefa07e) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;897](jdx/hk#897)
- update jdx/mise-action digest to [`1648a78`](jdx/hk@1648a78) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;898](jdx/hk#898)
- update apple-actions/import-codesign-certs action to v7 by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;900](jdx/hk#900)
- update autofix-ci/action action to v1.3.4 by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;899](jdx/hk#899)
- lock file maintenance by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;908](jdx/hk#908)

##### New Contributors

- [@&#8203;plx](https://github.com/plx) made their first contribution in [#&#8203;896](jdx/hk#896)

### [`v1.44.3`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1443---2026-04-30)

[Compare Source](jdx/hk@v1.44.2...v1.44.3)

##### 🐛 Bug Fixes

- **(hook)** do not stage fixes when fail\_on\_fix=true by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;892](jdx/hk#892)
- use site domain for plausible data-domain by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;886](jdx/hk#886)
- make text-mode progress output usable in CI by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;890](jdx/hk#890)

##### 📚 Documentation

- prefix GitHub star count with ★ glyph by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;883](jdx/hk#883)

##### 🔍 Other Changes

- **(release)** dedupe sponsor section in release notes by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;881](jdx/hk#881)
- switch analytics from gtm/goatcounter to plausible by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;885](jdx/hk#885)
- migrate to namespace.so runners by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;891](jdx/hk#891)

### [`v1.44.2`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1442---2026-04-26)

[Compare Source](jdx/hk@v1.44.1...v1.44.2)

##### 🐛 Bug Fixes

- **(builtins)** silence pklr deprecation warnings on Builtins.pkl load by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;880](jdx/hk#880)
- **(ci)** serialize docs lint step by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;874](jdx/hk#874)
- **(config)** include main pkl path in cache fresh files by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;879](jdx/hk#879)
- **(docs)** stack banner message and link on mobile by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;865](jdx/hk#865)
- **(docs)** pin banner close button to top-right corner on mobile by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;867](jdx/hk#867)

##### 📚 Documentation

- **(site)** show release version and github stars by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;872](jdx/hk#872)

##### 🔍 Other Changes

- add pr-closer workflow by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;876](jdx/hk#876)

##### 📦️ Dependency Updates

- bump communique 1.0.3 → 1.0.4 by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;868](jdx/hk#868)
- update anthropics/claude-code-action digest to [`2da6cfa`](jdx/hk@2da6cfa) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;869](jdx/hk#869)
- update anthropics/claude-code-action digest to [`567fe95`](jdx/hk@567fe95) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;870](jdx/hk#870)
- bump communique to 1.1.2 by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;875](jdx/hk#875)

### [`v1.44.1`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1441---2026-04-24)

[Compare Source](jdx/hk@v1.44.0...v1.44.1)

##### 🐛 Bug Fixes

- **(git)** skip untracked scan when HK\_STASH\_UNTRACKED=false by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;861](jdx/hk#861)
- **(run)** add post-commit and pre-rebase subcommands by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;858](jdx/hk#858)

##### 📚 Documentation

- **(install)** recommend global hooks as primary setup path by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;855](jdx/hk#855)
- add cross-site announcement banner by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;857](jdx/hk#857)
- respect banner expires field by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;862](jdx/hk#862)

##### 🔍 Other Changes

- vendor bats test helpers instead of git submodules by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;859](jdx/hk#859)

##### 📦️ Dependency Updates

- bump communique to 1.0.3 by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;863](jdx/hk#863)
- update anthropics/claude-code-action digest to [`e58dfa5`](jdx/hk@e58dfa5) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;864](jdx/hk#864)

### [`v1.44.0`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1440---2026-04-23)

[Compare Source](jdx/hk@v1.43.0...v1.44.0)

##### 🚀 Features

- **(check)** implement --plan, --why, and --json by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;848](jdx/hk#848)
- **(cocogitto)** add cocogitto conventional commits config to hk builtin config by [@&#8203;hituzi-no-sippo](https://github.com/hituzi-no-sippo) in [#&#8203;838](jdx/hk#838)
- **(git)** support GIT\_DIR/GIT\_WORK\_TREE for bare-repo dotfile managers by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;847](jdx/hk#847)
- **(install)** use Git 2.54 config-based hooks with --global support by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;853](jdx/hk#853)

##### 🐛 Bug Fixes

- use text progress in CI by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;845](jdx/hk#845)

##### 📚 Documentation

- generalize agent guidelines by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;846](jdx/hk#846)
- add releases nav and aube lock by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;849](jdx/hk#849)

##### 🔍 Other Changes

- **(release)** append en.dev sponsor blurb to release notes by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;854](jdx/hk#854)
- bump communique to 1.0.1 by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;850](jdx/hk#850)

##### 📦️ Dependency Updates

- update actions-rust-lang/setup-rust-toolchain digest to [`2b1f5e9`](jdx/hk@2b1f5e9) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;832](jdx/hk#832)
- update anthropics/claude-code-action digest to [`c3d45e8`](jdx/hk@c3d45e8) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;833](jdx/hk#833)
- update rust crate tokio to v1.52.1 by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;834](jdx/hk#834)
- update actions/upload-pages-artifact action to v5 by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;835](jdx/hk#835)
- update taiki-e/upload-rust-binary-action digest to [`f0d45ae`](jdx/hk@f0d45ae) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;839](jdx/hk#839)
- update rust crate clx to v2 by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;836](jdx/hk#836)
- update anthropics/claude-code-action digest to [`0d2971c`](jdx/hk@0d2971c) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;841](jdx/hk#841)
- update anthropics/claude-code-action digest to [`38ec876`](jdx/hk@38ec876) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;842](jdx/hk#842)
- lock file maintenance by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;851](jdx/hk#851)

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNjguNSIsInVwZGF0ZWRJblZlciI6IjQzLjE2OC41IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6bWlub3IiXX0=-->
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