Skip to content

Commit 3353f76

Browse files
gonzalocasasclaude
andcommitted
Initial commit: COMPAS Mission Control dashboard
Ecosystem health & 2.x migration dashboard for the COMPAS framework — the successor to the archived compas_dashboard. - collector/: Python data collector (GitHub + PyPI APIs; parses pyproject / requirements.txt / conda environment.yml / CI workflows) - site/: Vite + Vue 3 frontend with Health, Migration, Features, and Ecosystem (layered dependency diagram) views - repos.yml / features.yml: curated tracked repos and adoption checks - .github/workflows: nightly collect + build + deploy to GitHub Pages Tracks 56 repositories across compas-dev, blockresearchgroup, gramaziokohler and compas-rrc. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
0 parents  commit 3353f76

24 files changed

Lines changed: 10078 additions & 0 deletions
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
name: Build & Deploy
2+
3+
# Collects ecosystem data (GitHub + PyPI), builds the static dashboard, and
4+
# deploys it to GitHub Pages. See SPEC.md §9.
5+
6+
on:
7+
schedule:
8+
- cron: "0 2 * * *" # nightly, 02:00 UTC
9+
workflow_dispatch: {}
10+
push:
11+
branches: [main]
12+
13+
# Pages deploy + committing the history snapshot back to the repo.
14+
permissions:
15+
contents: write
16+
pages: write
17+
id-token: write
18+
19+
# Never let two runs fight over Pages / the history commit.
20+
concurrency:
21+
group: mission-control-pages
22+
cancel-in-progress: true
23+
24+
jobs:
25+
build:
26+
runs-on: ubuntu-latest
27+
steps:
28+
- uses: actions/checkout@v4
29+
30+
- name: Set up Python
31+
uses: actions/setup-python@v5
32+
with:
33+
python-version: "3.12"
34+
35+
- name: Install collector dependencies
36+
run: pip install PyYAML packaging
37+
38+
- name: Collect data
39+
env:
40+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
41+
run: python -m collector --root .
42+
43+
- name: Commit history snapshot
44+
run: |
45+
git config user.name "github-actions[bot]"
46+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
47+
git add data-history site/public/data.json
48+
if git diff --quiet --cached; then
49+
echo "No data changes to commit."
50+
else
51+
git commit -m "chore: data snapshot $(date -u +%Y-%m-%d) [skip ci]"
52+
git push
53+
fi
54+
55+
- name: Set up Node
56+
uses: actions/setup-node@v4
57+
with:
58+
node-version: "20"
59+
cache: npm
60+
cache-dependency-path: site/package-lock.json
61+
62+
- name: Build site
63+
run: |
64+
npm --prefix site ci
65+
npm --prefix site run build
66+
67+
- name: Upload Pages artifact
68+
uses: actions/upload-pages-artifact@v3
69+
with:
70+
path: site/dist
71+
72+
deploy:
73+
needs: build
74+
runs-on: ubuntu-latest
75+
environment:
76+
name: github-pages
77+
url: ${{ steps.deployment.outputs.page_url }}
78+
steps:
79+
- name: Deploy to GitHub Pages
80+
id: deployment
81+
uses: actions/deploy-pages@v4

.gitignore

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Python
2+
.venv/
3+
__pycache__/
4+
*.pyc
5+
6+
# Node / Vite
7+
node_modules/
8+
site/dist/
9+
10+
# OS / editor
11+
.DS_Store
12+
13+
# Note: site/public/data.json IS committed — it doubles as the sample the
14+
# frontend renders against for local dev without running the collector.

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 COMPAS Association
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
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

Comments
 (0)