You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat: read gerrit maintainers from lf releng info.yaml - #5336
LF-hosted Gerrit projects (ONAP, OpenDaylight, FD.io, O-RAN-SC) list their project lead and committers in a root INFO.yaml, in the LF Release Engineering format. Maintainer detection never read it, so those committers weren't tagged as maintainers on the contributor leaderboard and didn't count as curated maintainers for bus factor. Most of these repositories ended up with no maintainer file or with AUTHORS, CONTRIBUTORS or a README. Reported in linuxfoundation/insights#2480 (point 3).
The maintainer service now reads INFO.yaml directly, the same way it reads CNCF maintainers.yaml (ADR-0023).
Changes
New services/maintainer/info_yaml_maintainers.py:
Accepts a root INFO.yaml only when it has a project_lead object and a committers list. Anything else returns None, and detection carries on as before.
The project lead (role "Project Lead") and each committer (role "Committer") become maintainers. The lead, usually also listed as a committer, is kept once.
The tsc section is ignored: it's a log of approved changes, including removed committers.
extract_maintainers checks INFO.yaml after the CNCF step and before the saved-file shortcut. Repositories already locked onto AUTHORS or CONTRIBUTORS (140 of 162 FD.io repositories and 88 of 196 OpenDaylight ones in production) switch on their next maintainer run. No LLM call is made for these files.
People resolve by email through the existing lookup. All 30 committers sampled from ONAP, FD.io, OpenDaylight and O-RAN-SC files resolve to a verified identity in production.
Tests for parsing, the tsc log, other formats, the switch from a saved file and the fallback.
ADR-0038 records the decision and the alternatives (adding INFO.yaml to the known file names, reading Gerrit groups).
git_integration README: detection order.
The GitHub mirrors of these repositories also contain INFO.yaml and get the same maintainers. Since #5327 mirrors only count toward security in the project Health Score, so this only duplicates leaderboard tags.
Type of change
Bug fix
New feature
Refactor / cleanup
Performance improvement
Chore / dependency update
Documentation
Deploy
Rebuild and deploy the git integration worker. No migrations or new environment variables. Repositories pick up INFO.yaml on their next maintainer run (MAINTAINER_UPDATE_INTERVAL_HOURS, or MAINTAINER_RETRY_INTERVAL_DAYS for repositories where no maintainer file was found last time).
Medium Risk
Changes maintainer source priority and roster data for many Gerrit/mirror repos; mis-parsed or stale INFO.yaml could tag wrong maintainers until the next diff run.
Overview
Adds deterministic maintainer extraction for LF Release Engineering Gerrit repos via root INFO.yaml (after CNCF .project files, before the saved-file shortcut), so FD.io/OpenDaylight-style repos stuck on AUTHORS/CONTRIBUTORS self-correct on the next run without LLM cost.
info_yaml_maintainers accepts only LF-shaped YAML (project_lead + committers list), maps lead and committers as maintainers, dedupes, and ignores tsc. Invalid or partial files are rejected and excluded from saved-file retry and AI paths.
Fork handling gains get_maintainer_emails_for_repo and email matching in exclude_parent_repo_maintainers so email-only rosters still filter inherited maintainers. Documented in ADR-0038 and the git integration README; covered by new pytest cases.
Reviewed by Cursor Bugbot for commit 26bd46c. Bugbot is set up for automated code reviews on this repo. Configure here.
[Medium impact] The PR appears safe to merge; no actionable issues remain from this review.
Summary
Adds direct maintainer extraction from LF Release Engineering INFO.yaml files.
LF Gerrit repositories now get maintainers from INFO.yaml rosters.
Forks now filter inherited maintainers by email as well as username.
No new actionable issues were found. The four supplied, unnumbered previous threads are addressed in the current code.
Diagram
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Extract maintainers] --> B{CNCF roster accepted?}
B -- Yes --> G[Use parsed roster]
B -- No --> C{Root INFO.yaml accepted?}
C -- Yes --> G
C -- No --> D[Try saved file]
D --> E[Try governance candidates]
E --> F[Ask AI to select another file]
G --> H[Remove inherited fork maintainers]
H --> I[Resolve identities and save changes]
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
Email-only maintainer entries bypass parent filtering on forks, while rejected saved INFO.yaml files can still reach AI analysis, reintroducing removed people and mislabeling current maintainers.
Adds direct parsing of LF Release Engineering INFO.yaml files to the git integration worker, enabling maintainer detection for Gerrit projects and their GitHub mirrors.
Changes:
Extracts and deduplicates project leads and committers as maintainers, ignoring the tsc change log.
Checks INFO.yaml after CNCF detection and before saved-file reuse, without AI extraction for recognized files.
Adds parser and fallback tests, updates detection-order documentation, and records the decision in ADR-0037.
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
Mixed-case INFO.yaml emails are passed unchanged to a case-sensitive identity lookup, causing existing lowercase identities to be missed and maintainers to be skipped.
Normalize the email to lowercase here before passing it to identity resolution. find_maintainer_identity_by_email uses value = $1 (crud.py:359), while email-shaped identity values are stored lowercase (services/libs/common/src/member.ts:28–32). An INFO.yaml entry such as OpenVPP@barachs.net therefore fails to resolve an existing openvpp@barachs.net identity and is skipped. Lowercasing only the deduplication key below does not normalize the email sent to the lookup.
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
The maintainer email lookup excludes verified Git usernames, allowing inherited INFO.yaml entries to bypass the fork filter for maintainers known only through Git ingestion.
No open issues 🎉
1 previously missed issue
In code that hasn't changed since last review
Resolve verified Git usernames in maintainer email lookup
For maintainers known only through Git ingestion, this query returns no email: commit_service.py:316–334 creates a verified git/username containing the email and an unverified git/email. find_maintainer_identity_by_email resolves the verified username, so an inherited INFO.yaml entry can be saved on the parent yet still pass the fork filter. Include verified Git usernames in this lookup and add a regression case using that identity shape.
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
A malformed committer entry is silently dropped while the remaining roster is treated as authoritative, causing reconciliation to end-date an existing maintainer who is still listed.
The reason will be displayed to describe this comment to others. Learn more.
🟢 Approval recommended
The INFO.yaml maintainer-parsing change has no active review issues.
No open issues 🎉
Review effort: Balanced
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
LF-hosted Gerrit projects (ONAP, OpenDaylight, FD.io, O-RAN-SC) list their project lead and committers in a root
INFO.yaml, in the LF Release Engineering format. Maintainer detection never read it, so those committers weren't tagged as maintainers on the contributor leaderboard and didn't count as curated maintainers for bus factor. Most of these repositories ended up with no maintainer file or withAUTHORS,CONTRIBUTORSor aREADME. Reported in linuxfoundation/insights#2480 (point 3).The maintainer service now reads
INFO.yamldirectly, the same way it reads CNCFmaintainers.yaml(ADR-0023).Changes
services/maintainer/info_yaml_maintainers.py:INFO.yamlonly when it has aproject_leadobject and acommitterslist. Anything else returnsNone, and detection carries on as before.tscsection is ignored: it's a log of approved changes, including removed committers.extract_maintainerschecksINFO.yamlafter the CNCF step and before the saved-file shortcut. Repositories already locked ontoAUTHORSorCONTRIBUTORS(140 of 162 FD.io repositories and 88 of 196 OpenDaylight ones in production) switch on their next maintainer run. No LLM call is made for these files.tsclog, other formats, the switch from a saved file and the fallback.INFO.yamlto the known file names, reading Gerrit groups).The GitHub mirrors of these repositories also contain
INFO.yamland get the same maintainers. Since #5327 mirrors only count toward security in the project Health Score, so this only duplicates leaderboard tags.Type of change
Deploy
Rebuild and deploy the git integration worker. No migrations or new environment variables. Repositories pick up
INFO.yamlon their next maintainer run (MAINTAINER_UPDATE_INTERVAL_HOURS, orMAINTAINER_RETRY_INTERVAL_DAYSfor repositories where no maintainer file was found last time).Related issue
Closes linuxfoundation/lfx-cdp-insights-ops#1131