Repository navigation
ci: label unlabelled issues with a model and check PR descriptions - #4554
justinmclean wants to merge 3 commits into
Conversation
Issues the form leaves without an area get labels from a self-hosted model on ASF infrastructure, filtered to the allowlist. Contributor PRs fail a check when the description has no linked issue, description or test notes.
|
@justinmclean please use just title |
|
Thanks for the PR. It is labeled Slash commands (own line, regular comment) move it around the queue:
See CONTRIBUTING.md for details. |
|
@justinmclean could you extract the inline logic into standalone scripts, with the workflows calling the same code? Maintainers should be able to run them manually for a specific issue or PR. Please add |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #4554 +/- ##
============================================
- Coverage 89.48% 89.02% -0.47%
Complexity 1785 1785
============================================
Files 1330 1330
Lines 284416 284416
Branches 242865 242866 +1
============================================
- Hits 254502 253192 -1310
- Misses 24273 25606 +1333
+ Partials 5641 5618 -23
🚀 New features to boost your workflow:
|
The workflows now run scripts/ci/issue-labeler.mjs and scripts/ci/pr-description-check.mjs, so maintainers can run them by hand on any issue or PR. The labeler has --dry-run.
|
Done. The labeler and the PR check are now |
Which issue does this PR address?
N/A
Rationale
Issues opened blank, or with "Other / not sure" as the area, get no area label from the issue form, so a maintainer has to label them by hand. Contributor PRs often arrive without a linked issue or test notes, and reviewers have to ask for them.
What changed?
The issue form labelling moves into
scripts/ci/issue-labeler.mjs, which the issue workflow now runs. When the form gives no area, the script asks a self-hosted model on ASF infrastructure (LLMAO, defaultgemma4-26b) for up to three area labels, plusbugorenhancementwhen the issue has no type label. Only exact matches to the existing allowlist are applied, so a prompt injection in the issue body can at worst pick a wrong label from that list. WithoutLLMAO_API_KEYandLLMAO_BASE_URLthe model part does nothing, and model errors are warnings, not failures.A new PR Description check,
scripts/ci/pr-description-check.mjs, fails a contributor PR whose description has no linked issue (or explicit N/A), no description, or no test notes, and names each gap in the job summary. It is plain pattern matching, with no model, and the workflow skips bots, drafts and authors with write access.Both workflows check out only their script, from the default branch or the PR's base commit, without persisted credentials. Maintainers can run either script by hand on any issue or PR:
--dry-runprints the labels the labeler would add and changes nothing on GitHub. Each script's header lists the configuration it reads.Local Execution
Not yet run against the live LLMAO endpoint, which needs the secret and variable set first.
Setup (PMC member)
Create an LLMAO personal key with Project set to Apache Iggy, then add it as a secret. The command prompts for the value, so the key never appears in shell history:
gh secret set LLMAO_API_KEY -R apache/iggySet the base URL from the LLMAO page, ending in
/v1:After merge I'll check the results on the next few issues and contributor PRs.
AI Usage
Claude Code wrote the scripts, the workflow steps and the test harnesses. I reviewed the changes and the test results.