|
| 1 | +# COMPAS Mission Control |
| 2 | + |
| 3 | +A single-page dashboard that lets a COMPAS maintainer answer, at a glance: |
| 4 | + |
| 5 | +- **Is each package keeping up?** — maintenance health (last release, CI status, issue/PR backlog, staleness). |
| 6 | +- **Where are we in the 2.x migration?** — which COMPAS-core version each package pins, which Python versions it supports, which host apps (Rhino/Grasshopper/Blender). |
| 7 | +- **What still needs adoption across the board?** — a curated adoption matrix (new Scene API, MkDocs migration, dropping deprecated calls, …). |
| 8 | +- **How does the ecosystem fit together?** — a layered dependency diagram, from `compas` at the base up to end-user applications. |
| 9 | + |
| 10 | +It is the spiritual successor to the archived `compas-dev/compas_dashboard`. See [SPEC.md](SPEC.md) for the full design and data contract. |
| 11 | + |
| 12 | +## How it works |
| 13 | + |
| 14 | +A **static site built by a scheduled GitHub Action** — no server, no runtime cost, hosted on GitHub Pages. |
| 15 | + |
| 16 | +``` |
| 17 | +collector (Python) frontend (Vite + Vue 3) |
| 18 | + reads repos.yml + features.yml fetches site/public/data.json |
| 19 | + calls GitHub REST + PyPI APIs renders 4 views: |
| 20 | + parses pyproject / requirements / Health · Migration · Features · Ecosystem |
| 21 | + environment.yml / CI workflows |
| 22 | + writes site/public/data.json ─────► (a dumb renderer — no live API calls) |
| 23 | + + data-history/*.json |
| 24 | +``` |
| 25 | + |
| 26 | +The collector is the heart of the project; the frontend renders `data.json` and works by opening the built site with no backend. Data is at most ~24h stale; a "last updated" timestamp is shown in the UI. |
| 27 | + |
| 28 | +## Repository layout |
| 29 | + |
| 30 | +| Path | What | |
| 31 | +|---|---| |
| 32 | +| [`repos.yml`](repos.yml) | Curated list of tracked repositories (owner, category, tier, PyPI name). | |
| 33 | +| [`features.yml`](features.yml) | Adoption-matrix columns and their detection rules. | |
| 34 | +| [`collector/`](collector/) | Python data collector (`python -m collector`). Stdlib `urllib` + `PyYAML` + `packaging`. | |
| 35 | +| [`site/`](site/) | Vite + Vue 3 frontend. `site/public/data.json` is the committed sample. | |
| 36 | +| [`data-history/`](data-history/) | Compact daily snapshots for trend sparklines. | |
| 37 | +| `.github/workflows/build-and-deploy.yml` | Nightly collect → build → deploy to Pages. | |
| 38 | + |
| 39 | +## Local development |
| 40 | + |
| 41 | +**Collector** (needs a GitHub token for reasonable rate limits): |
| 42 | + |
| 43 | +```bash |
| 44 | +python -m venv .venv && . .venv/bin/activate |
| 45 | +pip install PyYAML packaging |
| 46 | +python -m collector --root . --token "$(gh auth token)" |
| 47 | +``` |
| 48 | + |
| 49 | +This writes `site/public/data.json` and a dated snapshot in `data-history/`. |
| 50 | + |
| 51 | +**Frontend** (renders the committed `data.json`, no collection needed): |
| 52 | + |
| 53 | +```bash |
| 54 | +cd site |
| 55 | +npm install |
| 56 | +npm run dev # http://localhost:5173 |
| 57 | +``` |
| 58 | + |
| 59 | +Views are deep-linkable: `#health`, `#migration`, `#features`, `#ecosystem`, and `?focus=<package>` opens a package's dependency trace. |
| 60 | + |
| 61 | +## Configuration |
| 62 | + |
| 63 | +- **Track a repo** — add an entry to [`repos.yml`](repos.yml) (deliberately curated, not auto-discovered). `owner` defaults to `compas-dev`; override per entry. `tier` (`core` / `foundation` / `domain` / `apps` / `tooling`) defaults from `category` and drives the Ecosystem diagram. |
| 64 | +- **Add an adoption check** — add a column to [`features.yml`](features.yml). Detection kinds: `pin`, `python`, `file` (`any_of` / `none_of`), `code` (GitHub code search), `manual`. |
| 65 | + |
| 66 | +## Deployment |
| 67 | + |
| 68 | +The GitHub Action runs nightly (and on push / manual dispatch): it runs the collector, commits the history snapshot, builds the site, and deploys to Pages. Enable **Settings → Pages → Source: GitHub Actions**. It needs only the default `GITHUB_TOKEN`. |
0 commit comments