docs: introduce PipeCD community contributor ladder and automated generation (#6548) - #7383
Ankitdotraider wants to merge 2 commits into
Conversation
✅ Deploy Preview for pipecd-site ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved workflow, generator, and RSS issues—including an unpinned privileged action—block approval.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
Adds an automated PipeCD contributor ladder based on merged pull requests, generated contributor documentation, daily refresh automation, and RSS configuration.
Changes:
- Adds GitHub API-based contributor generation.
- Adds ladder documentation and
CONTRIBUTORS.md. - Adds scheduled workflow automation.
- Adds RSS and Hugo author configuration.
File summaries
| File | Summary |
|---|---|
scripts/generate_contributors.py |
Generates contributor tiers and documentation; requires fixes for API pagination, timeouts, repository handling, and configurable tier text. |
docs/layouts/_default/list.rss.xml |
Adds an RSS override, but author metadata lookups do not match the configured Hugo author block. |
docs/content/en/docs-dev/contribution-guidelines/contributor-ladder.md |
Documents contributor tiers, counting rules, and eligibility. |
docs/config.toml |
Adds author and security configuration; the author configuration is not consumed by the RSS template. |
CONTRIBUTORS.md |
Provides the initial generated contributor listing. |
.github/workflows/update-contributors.yml |
Automates refreshes; requires fixes for caching, concurrency, action pinning, publication triggering, and timestamp-driven commits. |
Review details
Suppressed comments (8)
.github/workflows/update-contributors.yml:59
- Even aside from
GITHUB_TOKENevent suppression, this commit message contains[skip ci], which prevents push-triggered workflows such aspublish_sitefrom running. The generated docs will therefore be committed but the live site will not rebuild; remove the skip marker and use a token whose push can trigger workflows, or explicitly dispatch the publication workflow.
git commit -m "docs: update contributors ladder and documentation [skip ci]"
git push
.github/workflows/update-contributors.yml:50
- Because the generator always embeds the current timestamp in both output files, this
git diffis non-empty on every daily run even when no contributor data changed. The scheduled job will therefore create a commit every day, contrary to the apparent change-only behavior and adding avoidable history/noise; remove the volatile timestamp or compare stable generated content before committing.
if git diff --quiet CONTRIBUTORS.md docs/content/en/docs-dev/contribution-guidelines/contributor-ladder.md; then
docs/config.toml:58
- The new RSS override reads
.Site.Params.author, but the added configuration block is[author], which populates.Site.Authorinstead. As a result, the configured name and email are never emitted in the feed's editor/webmaster/item-author fields.
[author]
name = "PipeCD Authors"
email = "pipecd.dev@gmail.com"
docs/layouts/_default/list.rss.xml:30
- This RSS author lookup has the same mismatch with the
[author]configuration:.Site.Params.author.emailis unset, so item-level<author>elements are omitted. Use.Site.Authoras in the theme template.
{{ with .Site.Params.author.email }}<author>{{.}}{{ with $.Site.Params.author.name }} ({{.}}){{end}}</author>{{end}}
scripts/generate_contributors.py:442
- The generator only queries
args.repo(the workflow passespipe-cd/pipecd), so this requirement is not supported by the data shown in the ladder: PRs in otherpipe-cdrepositories are neither counted nor listed. Either aggregate all organization repositories or state that the five PRs must be inpipe-cd/pipecd.
"1. Have at least **5 merged PRs** in repositories under the `pipe-cd` organization.",
scripts/generate_contributors.py:198
- The Search API request also has no timeout, so
--method searchcan hang indefinitely on a stalled connection. Use the same bounded request timeout as the pulls path.
resp = session.get(url, headers=headers, params=params)
scripts/generate_contributors.py:379
- The displayed repository name is hard-coded to
pipe-cd/pipecd, even though this function acceptsrepoand the CLI exposes--repo. Generating the docs for any other repository would produce a misleading description; interpolate the target repository consistently with the link.
f"The contributor ladder tracks contributions based on **merged pull requests** to the [`pipe-cd/pipecd`](https://github.com/{repo}) repository:",
scripts/generate_contributors.py:385
- The tier table duplicates the threshold values instead of deriving them from
TIERS. Changing the advertised configurable constants at the top will update the generated headings but leave this table—and the membership text below—stale, so generate these ranges and eligibility wording from the configured tier data.
"| Tier | Merged PRs | Description & Recognition |",
"| :--- | :---: | :--- |",
"| 🌱 **Newcomer** | **1** | Welcome to the community! Listed in the Newcomers tier. |",
"| 🛠️ **Contributor** | **2–4** | Continued active involvement and consistent contributions across any part of the project. |",
"| 🚀 **Core Contributor** | **5+** | Established and trusted contributors with a strong track record. Eligible to apply for membership in the `pipe-cd` GitHub organization. |",
- Files reviewed: 6/6 changed files
- Comments generated: 7
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
cc: @rahulshendre |
|
@Ankitdotraider can you please check deploy preview https://deploy-preview-7383--pipecd-site.netlify.app/docs/
|
c89fc5e to
a41ca86
Compare
|
ive looked Into it and fixed it, could you take another look at it |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #7383 +/- ##
==========================================
- Coverage 30.36% 30.36% -0.01%
==========================================
Files 601 601
Lines 52622 52622
==========================================
- Hits 15980 15977 -3
- Misses 35123 35125 +2
- Partials 1519 1520 +1
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
@Ankitdotraider, thank you for putting this together.
For now let's focus the 1st itself, in this PR, and 2 and 3 can be covered in follow ups! @eeshaanSA @Ayushmore1214, please share your thoughts as well! |
Add static contributor ladder documentation outlining community contributor tiers (Newcomer, Contributor, Core Contributor), roles, responsibilities, progression criteria, and GitHub organization membership requirements. Closes pipe-cd#6548 Signed-off-by: Ankit Ram <ankiittt15@gmail.com>
a41ca86 to
0cd3293
Compare
|
Thanks for the suggestion! I've moved the generator script and automated daily GitHub Actions workflow to a separate follow up branch, and will open follow up PRs for them once we merge the initial ladder docs. |
| | :--- | :---: | :--- | :--- | | ||
| | 🌱 **Newcomer** | 1 merged PR | First-time contributor getting familiar with the codebase, submission workflows, and community norms. | Recognized community member; welcome to join community meetings and CNCF Slack. | | ||
| | 🛠️ **Contributor** | 2–4 merged PRs | Regular contributor actively submitting improvements, helping review issues, and participating in discussions. | Can be assigned issues directly; community peer recognition. | | ||
| | 🚀 **Core Contributor** | 5+ merged PRs | Experienced, trusted contributor with a sustained track record of quality contributions across the project. | Eligible to apply for `pipe-cd` GitHub organization membership; eligible for subproject reviewer roles. | |
There was a problem hiding this comment.
@Ankitdotraider do you think 5+ merged pr is enough to be a core contributor ?
There was a problem hiding this comment.
no cutoff is rigid as of now and we can tweak it however we want to.
| - Adhere to the contribution guidelines, developer certificate of origin (DCO) sign-off, and PR submission templates. | ||
| - **Privileges:** | ||
| - Welcomed into the PipeCD contributor community. | ||
| - Access to community Slack channels and bi-weekly community meetings. |
There was a problem hiding this comment.
Access to slack and bi-weekly is already open to public and I think the statement seems to be wrong here, because that's not a privilege you get after merging your first PR it is already available to anyone in the public
| - Participate in issue discussions and help clarify bugs or feature requests. | ||
| - **Privileges:** | ||
| - Issue assignment upon request. | ||
| - Peer review participation on related pull requests. |
There was a problem hiding this comment.
hey this is going a bit on confused side for me, can you elaborate the privileges of Contributor ?
| - Actively participate in project discussions and roadmap planning. | ||
| - **Privileges:** | ||
| - Eligible to request official membership in the [`pipe-cd`](https://github.com/pipe-cd) GitHub organization. | ||
| - Organization member badge on GitHub. |
There was a problem hiding this comment.
This is again misleading, the reader would think that if he/she merges 5 PR's they would get the member badge, but apparently that's not the truth, lets have something like Eligible to get the Org member badge if accepted the membership above, maybe you can have some better wording here but just gave an example!
There was a problem hiding this comment.
how'd you like to play it out, would be helpful if you suggest something that you & other members would like to see
| - **Privileges:** | ||
| - Eligible to request official membership in the [`pipe-cd`](https://github.com/pipe-cd) GitHub organization. | ||
| - Organization member badge on GitHub. | ||
| - Pathway toward becoming an official Reviewer or Subproject Maintainer. |
There was a problem hiding this comment.
does positions like these really exists or we planning to add those ?
|
Hey @rahulshendre how are we planning to assign these roles, how frequent do we assign ? per project meet ? |
|
@rahulshendre @eeshaanSA @khanhtc1202 for the org membership, as it is going to be very frequent requests due to the contributor ladder, I propose adding a issue template specifically for org membership request with the org-membership label on it, to reduce the maintainer load and make the process clear, there are already some project who are implementing this : https://github.com/backstage/community/blob/main/.github/ISSUE_TEMPLATE/org_member.yaml |
| - At least **5 merged PRs** in `pipe-cd` repositories. | ||
| - Attendance at least one community meeting. | ||
| 2. Open an issue or reach out to the project maintainers in the `#pipecd` channel on [CNCF Slack](https://slack.cncf.io/) or during a community meeting. | ||
| 3. Two existing maintainers will sponsor and approve the membership invitation. |
There was a problem hiding this comment.
According to this : https://github.com/pipe-cd/pipecd/blob/master/CONTRIBUTING.md#join-our-team-on-github the membership doesn't requires sponsors, please check it out thank you!
| ### How to Apply: | ||
| 1. Verify that you meet the requirements: | ||
| - At least **5 merged PRs** in `pipe-cd` repositories. | ||
| - Attendance at least one community meeting. |
There was a problem hiding this comment.
I'd add a line saying PR counts are a minimum and maintainers will still use judgement
@Ankitdotraider @rahulshendre thoughts ?
There was a problem hiding this comment.
yea that would be great to have a human judgment in the loop before handing out member badges
Ayushmore1214
left a comment
There was a problem hiding this comment.
@Ankitdotraider how are we planning to remove the inactive contributors ?
this is great starting point btw, thanks!
we can have a 2 or 3 months non active window , where if a contributor isnt actively doing anything in the repo, like review, opening an issue or discussing with maintainers we label them as grey (or inactive) and then give a one month window before removing from the leader board. would be very happy to discuss if anyone else got any idea @rahulshendre @Ayushmore1214 |
- Remove misleading claim that Slack/community meeting access is a Newcomer privilege (it is open to the public) - Clarify Contributor privileges: issue assignment means maintainers can officially assign GitHub issues to the contributor, enabling them to take clear ownership of work items - Fix Core Contributor privileges: organization member badge is not automatically granted on reaching 5 PRs; it is granted at maintainer discretion after a successful membership application - Remove mention of 'sponsor' requirement for org membership; per CONTRIBUTING.md no sponsors are required, just a ping in Slack or at a community meeting - Add explicit note that PR counts are minimums and maintainers retain final judgment on tier progression and membership - Align membership requirements section directly with CONTRIBUTING.md Signed-off-by: Ankit Ram <ankiittt15@gmail.com>
|
pushed an update regarding the issues @Ayushmore1214 pointed:
On your issue template idea for org membership requests, thats really a great idea. |

What this PR does
Fixes #6548
Adds a contributor ladder so we can recognize people who've had PRs merged into PipeCD, something that's come up a few times in the newcomers meeting and got discussed on the linked issue.
The generator script (scripts/generate_contributors.py) hits the GitHub API for merged PRs and buckets contributors into three tiers by count: Newcomer at 1, Contributor at 2-4, Core Contributor at 5+ (also the point where someone's eligible to ask about org membership). Bots get filtered out. It writes CONTRIBUTORS.md and updates the docs page.
There's a workflow that reruns this daily and on manual trigger, only committing if something actually changed. Docs page explains how the tiers work.
CONTRIBUTORS.md in this PR is just the initial seed from running it once locally.
Tier cutoffs are just a first guess and happy to change it as the reviewer wants me to.
Checklist
Signed-off-by)