Skip to content

Add the Certificate of Contribution - #948

Merged
wu-sheng merged 1 commit into
masterfrom
feat/certificate
Oct 20, 2026
Merged

wu-sheng merged 1 commit into
masterfrom
feat/certificate

Conversation

@wu-sheng

Copy link
Copy Markdown
Member

Every PMC member, committer and contributor listed on skywalking.apache.org can get an Apache SkyWalking Certificate of Contribution at /certificate/. Nothing is pre-generated: the browser draws the certificate on demand from data the build publishes, as a PNG download or a one-page A4 print. Its QR code links back to the site, where anyone can verify it.

What a certificate shows

  • Name, role (PMC member, committer, contributor), total contributions, number of projects, and the top two projects with their ranks.
  • A contribution polygon with one vertex per category of the new repository catalog. A vertex's distance is the person's rank among everyone who contributed to that category, in ten 10% bands (top 10% reach the outer ring); untouched categories sit at the centre.
  • Official SkyWalking and ASF (oak leaf) logos unaltered, the site's trademark line, and no third-party assets: the QR library is vendored (MIT).

Repository catalog: data/repositories.yml

Every repository the site counts (data/projects.yml, Showcase, Website) is listed under one of eight categories: Protocol, Main, Agent, Database, Blogs & Website, Tools, Visualization, Community Projects. The order is the polygon's vertex order. scripts/project-config.js rejects a missing, duplicated or stale entry, and it runs in every build, so a new repository must be added here in the same PR that adds it to the site. Please review the category of each repository; judgement calls include Showcase → Tools, BanyanDB Client Proto → Database, CN Documentations → Community Projects.

Verification

  • scripts/certificate.js runs after npm run team and writes two gitignored files: today's page data, rebuilt on every build and never kept, and certificate/verify/<date>.txt, a header naming that day's categories followed by the code of every certificate that can be issued that day (about 15 KB, 858 codes today).
  • A certificate ID is its date plus a code: the first 80 bits of SHA-256 over the date, the person, role, total contributions, projects and the polygon bands, in Crockford base32. The QR link carries the ID and those facts.
  • Verifying recomputes the code from the link's facts, checks it matches the ID, and looks it up in that day's list. An altered number, a recomputed code for inflated numbers, or a date with no list all fail. A verified link shows a certificate-style record with a VERIFIED stamp and how today's data compares.
  • The model (assets/js/certificate/model.js) is shared by the build and the browser, so both compute identical codes.

Deploy change

peaceiris/actions-gh-pages replaces the whole asf-site tree on every deploy. A new step, "Keep issued certificate records", carries only certificate/verify/ forward from the current asf-site (a blobless fetch, so only those files are downloaded) and merges same-day lists. Every other page is replaced as before. The deploy job now has a concurrency group, so two deploys cannot drop each other's records; PR builds keep their own groups.

Other changes

  • Team page: a certificate badge in the header. Contributor pages: a "Get your Certificate of Contribution" button.
  • Contributors page: the header now spans the full width, like the team page. A project-level layouts/contributors/list.html replaces the theme's container wrapper.
  • js-yaml becomes a direct dependency: yamljs reads an unquoted login such as 0xAlanYin as a hex number.
  • README.md and CLAUDE.md document the catalog rule and the certificate data. Anonymous commits, bots and name-only extras (e.g. Adrian Cole in extraContributors) get no certificate, since they cannot be verified against a GitHub account; the contributors page still lists them.

Testing

  • npm test: 19 tests pass, 7 new (catalog validation, data building, bands, codes, the day file, unusual logins).
  • Browser, against a local build: issuing for every role; verifying genuine, tampered, forged-but-consistent, missing-date and former-member links; one-page A4 print and 2246×1588 PNG export with the QR decoding to the verify link; a 375 px phone layout.
  • The deploy step was run against a simulated asf-site: old days kept, same-day lists merged, stale pages not carried. It has not run in real CI yet; the first deploy finds no folder and starts it.
  • Reviewed in two rounds by GPT-6 Astra (max); every finding that held was fixed.

🤖 Generated with Claude Code

Every PMC member, committer and contributor listed on the site can get an
Apache SkyWalking certificate at /certificate/. It is drawn in the browser
from data the build publishes, downloads as PNG and prints on one A4 page.

- data/repositories.yml catalogs every counted repository into eight
  contribution categories; validation fails while a repository is missing,
  duplicated or stale. The certificate's contribution polygon has one vertex
  per category, placed by the person's rank in it in 10% bands.
- scripts/certificate.js builds the page data and each day's list of issued
  certificate codes (certificate/verify/<date>.txt). A certificate ID is the
  date plus an 80-bit SHA-256 code over its facts; its QR code carries both,
  and the page verifies them against that day's list.
- The deploy carries certificate/verify/ forward on asf-site, and only that
  folder; deploying runs share one concurrency group.
- Team page certificate badge, a certificate button on contributor pages, and
  a full-width contributors page header.
@netlify

netlify Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for skywalking-website-preview ready!

Name Link
🔨 Latest commit daded30
🔍 Latest deploy log https://app.netlify.com/projects/skywalking-website-preview/deploys/6ad74a79eca22477455161b0
😎 Deploy Preview https://deploy-preview-948--skywalking-website-preview.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@wu-sheng
wu-sheng merged commit edc30fd into master Oct 20, 2026
4 of 5 checks passed
@wu-sheng
wu-sheng deleted the feat/certificate branch October 20, 2026 11:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant