-
-
Notifications
You must be signed in to change notification settings - Fork 769
feat(ci): auto-close PRs from non-maintainers #7108
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
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR introduces an automated workflow to restrict pull request creation to maintainers only. The workflow automatically closes PRs from non-maintainers with a message directing them to open an issue first for discussion.
Key changes:
- Adds a new GitHub Actions workflow that triggers on PR open events
- Implements conditional logic to close PRs unless authored by
jdxor labeledkeep-open - Uses
pull_request_targetevent to ensure proper permissions for closing PRs from forks
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
.github/workflows/pr-closer.yml
Outdated
| if: github.actor != 'jdx' && !contains(github.event.pull_request.labels.*.name, 'keep-open') | ||
|
|
||
| steps: | ||
| - run: gh pr close "${{ github.event.pull_request.number }}" -R jdx/mise -c "PRs may only be created by maintainers. If you'd like to contribute, please open an issue first to discuss your proposed changes." |
Copilot
AI
Nov 28, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The hardcoded repository 'jdx/mise' creates a security risk when using pull_request_target. If this workflow runs in a fork, it would attempt to close PRs in the hardcoded repository rather than the fork. Use ${{ github.repository }} instead to reference the current repository dynamically.
| - run: gh pr close "${{ github.event.pull_request.number }}" -R jdx/mise -c "PRs may only be created by maintainers. If you'd like to contribute, please open an issue first to discuss your proposed changes." | |
| - run: gh pr close "${{ github.event.pull_request.number }}" -R "${{ github.repository }}" -c "PRs may only be created by maintainers. If you'd like to contribute, please open an issue first to discuss your proposed changes." |
.github/workflows/pr-closer.yml
Outdated
| jobs: | ||
| close-pr: | ||
| runs-on: ubuntu-latest | ||
| if: github.actor != 'jdx' && !contains(github.event.pull_request.labels.*.name, 'keep-open') |
Copilot
AI
Nov 28, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The maintainer username 'jdx' is hardcoded. Consider using github.repository_owner or a repository variable to make this workflow more maintainable and reusable if the repository owner changes or if this workflow is copied to other repositories.
| if: github.actor != 'jdx' && !contains(github.event.pull_request.labels.*.name, 'keep-open') | |
| if: github.actor != github.repository_owner && !contains(github.event.pull_request.labels.*.name, 'keep-open') |
Automatically closes PRs unless authored by jdx or labeled with 'keep-open'. Similar to the existing issue-closer workflow. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
a469d8f to
a3da051
Compare
| ) | .number' | \ | ||
| while read -r pr; do | ||
| echo "Closing PR #$pr" | ||
| gh pr close "$pr" -R jdx/mise -c "This PR has been open for more than 30 days without activity. Please reopen if you'd like to continue working on it." |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bug: Closing message claims no activity but code only checks creation date
The workflow filters PRs based on createdAt (when the PR was first opened) but the closing message states the PR had no "activity". A PR created more than 30 days ago could have had recent commits or comments, yet would still be closed with a misleading message claiming lack of activity. Either the filter needs to use updatedAt to actually check for recent activity, or the closing message needs to accurately reflect that closure is based on creation date, not activity.
Hyperfine Performance
|
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2025.11.10 x -- echo |
20.1 ± 0.6 | 19.1 | 23.3 | 1.01 ± 0.05 |
mise x -- echo |
19.9 ± 0.8 | 18.7 | 24.5 | 1.00 |
mise env
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2025.11.10 env |
19.5 ± 0.5 | 18.6 | 23.2 | 1.02 ± 0.05 |
mise env |
19.1 ± 0.8 | 18.1 | 24.8 | 1.00 |
mise hook-env
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2025.11.10 hook-env |
19.5 ± 0.6 | 18.6 | 22.6 | 1.01 ± 0.05 |
mise hook-env |
19.3 ± 0.8 | 18.2 | 23.6 | 1.00 |
mise ls
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2025.11.10 ls |
17.1 ± 0.5 | 16.1 | 20.5 | 1.03 ± 0.05 |
mise ls |
16.5 ± 0.6 | 15.4 | 20.3 | 1.00 |
xtasks/test/perf
| Command | mise-2025.11.10 | mise | Variance |
|---|---|---|---|
| install (cached) | 108ms | 108ms | +0% |
| ls (cached) | 68ms | 65ms | +4% |
| bin-paths (cached) | 73ms | 73ms | +0% |
| task-ls (cached) | 424ms | 429ms | -1% |
### 🚀 Features - **(backend)** add filter_bins option to github/gitlab backends by @risu729 in [#7105](#7105) - **(ci)** auto-close PRs from non-maintainers by @jdx in [#7108](#7108) - **(conda)** add conda backend for installing packages from conda-forge by @jdx in [#7139](#7139) - **(github)** add rename_exe option and switch elm, opam, yt-dlp from ubi by @jdx in [#7140](#7140) - **(install)** add --locked flag for strict lockfile mode by @jdx in [#7098](#7098) - **(lock)** implement cross-platform lockfile generation by @jdx in [#7091](#7091) - **(lockfile)** add options field for tool artifact identity by @jdx in [#7092](#7092) - **(lockfile)** add env field and local lockfile support by @jdx in [#7099](#7099) - **(lockfile)** add URL support for deno, go, and zig backends by @jdx in [#7112](#7112) - **(lockfile)** add URL support for vfox backend by @jdx in [#7114](#7114) - **(lockfile)** add multi-platform checksums without downloading tarballs by @jdx in [#7113](#7113) ### 🐛 Bug Fixes - **(backend)** allow platform-specific strip_components by @risu729 in [#7106](#7106) - **(backend)** prefer path root for bin path if it contains an executable by @risu729 in [#7151](#7151) - **(bash)** avoid deactivate error on (no)unset PROMPT_COMMAND by @scop in [#7096](#7096) - **(ci)** use updatedAt instead of createdAt for stale PR detection by @jdx in [#7109](#7109) - **(github)** search subdirectories for executables in discover_bin_paths by @jdx in [#7138](#7138) - **(lockfile)** combine api_url with asset_pattern for GitHub release URLs by @jdx in [#7111](#7111) ### 🚜 Refactor - **(lock)** simplify lockfile to always use array format by @jdx in [#7093](#7093) - **(lockfile)** use compact inline table format by @jdx in [#7141](#7141) ### 📚 Documentation - **(gitlab)** document rename_exe option also for gitlab backend by @risu729 in [#7149](#7149) - **(lockfile)** update documentation for recent lockfile changes by @jdx in [#7107](#7107) - **(node)** use config_root in _.path for pnpm example by @risu729 in [#7146](#7146) - **(registry)** add github/gitlab backends to the preferred backends list by @risu729 in [#7148](#7148) - **(registry)** add url mappings for all backends by @risu729 in [#7147](#7147) ### 📦️ Dependency Updates - update docker/metadata-action digest to c299e40 by @renovate[bot] in [#7101](#7101) - update ghcr.io/jdx/mise:alpine docker digest to 693c5f6 by @renovate[bot] in [#7102](#7102) - update ghcr.io/jdx/mise:deb docker digest to 9985cab by @renovate[bot] in [#7104](#7104) - update ghcr.io/jdx/mise:copr docker digest to 564d8e1 by @renovate[bot] in [#7103](#7103) - update rust crate ubi to 0.8.4 by @risu729 in [#7154](#7154) ### 📦 Registry - add aqua backend as primary for e1s by @jdx in [#7115](#7115) - add gem backend for bashly by @jdx in [6af6607](6af6607) - switch 1password from asdf to vfox backend by @jdx in [#7116](#7116) - add vfox backend for bfs by @jdx in [#7126](#7126) - add github backend for btrace by @jdx in [#7129](#7129) - add github backend for cf by @jdx in [#7131](#7131) - add vfox backend for bpkg by @jdx in [#7130](#7130) - switch apollo-ios from asdf to github backend by @jdx in [#7118](#7118) - add vfox backend for chromedriver by @jdx in [#7134](#7134) - switch superhtml, vespa-cli, xcsift from ubi to github backend by @jdx in [#7137](#7137) - add vfox backend for clickhouse by @jdx in [#7136](#7136) - switch chicken to vfox plugin by @jdx in [#7135](#7135) - switch chezscheme from asdf to vfox backend by @jdx in [#7132](#7132) - add vfox backend for carthage by @jdx in [#7133](#7133) - switch azure-functions-core-tools from asdf to vfox backend by @jdx in [#7128](#7128) - switch aapt2 to vfox backend by @jdx in [#7117](#7117) - switch ant to vfox backend by @jdx in [#7119](#7119) - switch asciidoctorj from asdf to vfox backend by @jdx in [#7121](#7121) - switch awscli-local to pipx backend by @jdx in [#7120](#7120) - add omnictl by @risu729 in [#7145](#7145) - remove pnpm asdf plugin from fallback by @risu729 in [#7143](#7143) - switch tanzu to github backend by @jdx in [#7124](#7124) - switch android-sdk to vfox plugin by @jdx in [#7127](#7127) - add vfox backend for ag (The Silver Searcher) by @jdx in [#7122](#7122) ### Chore - **(registry)** ignore deleted tools in test-tool workflow by @risu729 in [#7081](#7081) - **(release)** show registry section last in changelog by @jdx in [#7156](#7156) - update mise.lock with checksums by @jdx in [71e9123](71e9123) - disable cancel-in-progress for test workflow on main branch by @risu729 in [#7152](#7152) ## 📦 Aqua Registry Updates #### Updated Packages (1) - [`orf/gping`](https://github.com/orf/gping)
Summary
jdxkeep-open🤖 Generated with Claude Code
Note
Adds a scheduled GitHub Actions workflow that closes open PRs >30 days old unless authored by
jdxor labeledkeep-open./.github/workflows/pr-closer.yml:gh/jq.jdxand those labeledkeep-open.Written by Cursor Bugbot for commit a3da051. This will update automatically on new commits. Configure here.