docs: introduce PipeCD community contributor ladder and automated generation (#6548) - #7383
Ankitdotraider wants to merge 6 commits into
Conversation
Add Phase 1 of the PipeCD Contributor Ladder to recognize community contributions based on merged pull requests: - Add scripts/generate_contributors.py to query GitHub API, tally merged PRs per contributor, sort, and format CONTRIBUTORS.md - Add .github/workflows/update-contributors.yml for automated daily updates - Add docs/content/en/docs-dev/contribution-guidelines/contributor-ladder.md describing ladder tiers, rules, and progression paths - Generate initial CONTRIBUTORS.md Ref: pipe-cd#6548 Signed-off-by: Ankit Ram <ankiittt15@gmail.com>
…orkflow Signed-off-by: Ankit Ram <ankiittt15@gmail.com>
✅ 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.
…w security and templates Signed-off-by: Ankit Ram <ankiittt15@gmail.com>
Signed-off-by: Ankit Ram <ankiittt15@gmail.com>
Signed-off-by: Ankit Ram <ankiittt15@gmail.com>
…atibility Signed-off-by: Ankit Ram <ankiittt15@gmail.com>
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)