Skip to content

ethpandaops/coredevs

Repository files navigation

coredevs

An index of Ethereum core developers, assembled from multiple datasources and exposed over a small HTTP API.

coredevs answers questions like "which GitHub handles are on the Teku team?" by taking the superset of contributors across datasources, per team. It exists to replace hand-maintained lists of client-team GitHub handles (for example the per-client authorized_keys lists in devnet tooling) with an endpoint that refreshes itself.

Datasources

Source What it provides
protocol-guild Parses the Protocol Guild membership document and maps each working-group section (Teku, Lighthouse, Geth, …) onto a canonical team. This is the precise per-client signal.
github-org Resolves the public members of a GitHub organisation (GET /orgs/{org}/public_members). Available on demand for any org; only folded into a team's superset when that team explicitly opts an org in (see below).
manual Static handles listed per team in config (members:). For people who belong to a team but aren't yet in an upstream source — e.g. a new joiner before they're added to Protocol Guild. Always included; not subject to rate limits or the member floor.

Sources refresh every syncInterval (default 3h). The last good result of each source is kept in memory, so a transient upstream outage never drops a team. The built index is persisted to snapshotPath and reloaded on restart, so the service serves last-known-good data immediately on boot.

Superset semantics & the org caveat

A team's member list is the union of the handles its configured sources report, deduplicated case-insensitively, with provenance (which sources/orgs each handle came from) retained.

By default teams are sourced from Protocol Guild only. The obvious candidate GitHub orgs (Consensys, OffchainLabs, ChainSafe, status-im, NethermindEth, …) are whole-company orgs whose public membership is much broader than the client dev team — wiring them into a team's superset pollutes it with unrelated employees. Opt an org into a team (via githubOrgs in the config) only once you've confirmed its membership approximates the team. Any org can always be queried ad-hoc via /api/v1/orgs/{org}/members without wiring.

API

Teams span four kinds — client (the 11 EL/CL clients), research, coordination (EL/CL spec coordination), and delivery (testing, devnets, security, and the ethPandaOps team) — mirroring the Protocol Guild working groups plus a few non-PG teams. Filter with /api/v1/teams?kind=client to get just the client teams.

Method & path Description
GET /api/v1/teams All teams with per-source member counts. ?kind= filters by role.
GET /api/v1/users/{team} The superset of handles for a team.
GET /api/v1/handles/{handle} Reverse lookup: every team a handle appears on.
GET /api/v1/orgs/{org}/members Public members of an arbitrary GitHub org, on demand.
GET /api/v1/sources Per-source sync status (last attempt/success/error).
GET /api/v1/export The full index as JSON.
GET /healthz Liveness.
GET /readyz Readiness — 503 until the first index is available.
GET /metrics Prometheus metrics.

GET /api/v1/users/{team} parameters

  • source=protocol-guild|github-org — restrict to a single source.
  • format=json|txt|yamljson (default) returns handles plus provenance; txt returns newline-separated handles; yaml returns a YAML list of handles (drops straight into an ansible variable).
# Ansible-ready handle list for the Teku team
curl https://coredevs.example/api/v1/users/teku?format=yaml

# Only the Protocol Guild members of Lighthouse
curl https://coredevs.example/api/v1/users/lighthouse?source=protocol-guild

# Who publicly lists the sigp org on their profile
curl https://coredevs.example/api/v1/orgs/sigp/members

Configuration

See config.yaml. A GITHUB_TOKEN environment variable is optional but lifts the unauthenticated GitHub rate limit.

Running

go run ./cmd/coredevs --config config.yaml
# or
make run

About

Index of Ethereum core developers per client team, from Protocol Guild + GitHub orgs

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors