blob: d418e14c5bfb6f04ed4bd0714e69131afc89bdaf [file] [view]
# ASF Data Sources — Reference
Where does the authoritative data live?
## The Hierarchy
```
┌─────────────────────┐
│ LDAP (id.apache.org)│ ← THE source of truth for people,
│ + committee-info.txt│ groups, PMC membership
└──────────┬──────────┘
┌────────────────┼────────────────┐
│ │ │
┌─────────▼──────┐ ┌─────▼─────┐ ┌──────▼──────┐
│ Whimsy/Roster │ │ Incubator │ │ Board │
│ (public JSON) │ │podlings.xml│ │ minutes │
└─────────┬──────┘ └─────┬─────┘ └──────┬──────┘
│ │ │
└────────────────┼────────────────┘
┌──────────▼──────────┐
│ projects.apache.org │ ← SECONDARY: aggregates from above
│ (DOAP + cronjobs) │ + project-maintained DOAP files
└─────────────────────┘
```
## Primary/Authoritative Sources
| Data | Authoritative Source | Access | Notes |
| --- | --- | --- | --- |
| **PMC membership** | `committee-info.txt` (private SVN) | Via Whimsy JSON | Updated by Secretary |
| **Committer list** | LDAP (`id.apache.org`) | Via Whimsy `public_ldap_projects.json` | |
| **Podling status** | `incubator/.../podlings.xml` | Via Whimsy `public_podling_status.json` | Maintained by VP Incubator |
| **Project metadata** | DOAP files (maintained by each PMC) | Listed in `data/projects.xml` on SVN | |
| **Retired projects** | `committee-info.yaml` + Attic | Via Whimsy `committee-retired.json` | |
| **Board actions** | Board minutes | SVN: `private/committers/board/` | |
## Whimsy Public JSON (our best bet for programmatic access)
Base URL: `https://whimsy.apache.org/public/`
| File | Contents | Useful for |
| --- | --- | --- |
| `committee-info.json` | PMC names, members, chairs | Community events (PMC additions) |
| `committee-retired.json` | Retired committees | Project lifecycle |
| `public_ldap_projects.json` | PMC/podling owners + members | Committer additions |
| `public_podling_status.json` | Podling incubation status | Project lifecycle |
| `public_ldap_people.json` | Person names + disabled status | People data |
| `icla-info.json` | ICLA signers with committer IDs | |
These are regenerated hourly by Whimsy cron jobs **only when underlying data changes**.
## What projects.apache.org adds
- **DOAP aggregation**: Project descriptions, categories, programming languages, homepage URLs
- **Release data**: Scraped from various sources
- **Cronjob Python scripts**: Run daily, cache to JSON in SVN
Source: `https://svn.apache.org/repos/asf/comdev/projects.apache.org/trunk/`
## Our Strategy
### Phase 1 (MVP — DONE — use what's publicly available without auth)
- **Mailing lists**: Pony Mail API (`lists.apache.org/api/`) no auth needed- Aggressive caching: past months immutable, only current month refreshed
- **Git metrics**: GitHub API (`api.github.com/orgs/apache`) public, rate-limited (use token from `.secrets`)- Also supports SVN via `svn log --xml` for projects configured with `vcs: svn` or auto-detected from `repositories.json`
- Per-project VCS override in `config.yml` `project_overrides:`
- Per-repo monthly breakdown with aggressive caching (same-day = skip, next-day = incremental)
- Rate-limit tracking with automatic pause-and-wait at 50 remaining calls
- **Project roster changes**: Whimsy public JSON (diff `committee-info.json` between runs)
- **Project list**: projects.apache.org `committees.json` + `podlings.json` (TLPs + active podlings)
- **Repo inventory**: GitHub org listing `_project_map.json` (auto-run on first use)
- **Dashboard**: 12-month rolling window with linear regression trend lines- Current month extrapolated to full-month estimate for trend accuracy
### Phase 2 (richer data, may need ASF Infra coordination)
- **Release history**: projects.apache.org JSON cache or direct DOAP parsing
- **Podling lifecycle**: Whimsy `public_podling_status.json`
- **Retired projects**: Whimsy `committee-retired.json`
- **Board report status**: Would need access to board minutes (private SVN)
### Phase 3 (if we get service account access)
- **LDAP direct queries**: Real-time committer/PMC additions (requires Infra ticket)
- **Next Committer integration**: PMC-only access via LDAP auth
## Key Insight
**projects.apache.org is convenient but not authoritative.** It aggregates from:
1. DOAP files (maintained by PMCs, varying quality/currency)
2. Whimsy/LDAP (the real source of truth for people/committee data)
3. Its own cronjob caches (may lag)
For community activity metrics, **Whimsy public JSON + Pony Mail + GitHub API** gives us everything we need for Phase 1 without any special access. We only need to involve ASF Infra if we want LDAP direct access (for Next Committer) or private SVN (for board data).
## URLs Quick Reference
```
# Whimsy public data
https://whimsy.apache.org/public/committee-info.json
https://whimsy.apache.org/public/public_ldap_projects.json
https://whimsy.apache.org/public/public_podling_status.json
https://whimsy.apache.org/public/committee-retired.json
# Pony Mail
https://lists.apache.org/api/preferences.json (list discovery, POST)
https://lists.apache.org/api/stats.json (per-list stats, POST + JSON body)
# GitHub
https://api.github.com/orgs/apache/repos (repo listing)
# projects.apache.org data (secondary)
https://projects.apache.org/json/projects.json (all projects metadata)
https://projects.apache.org/json/releases.json (release data)
```