Registered a repo-scoped self-hosted runner (hcl-local-deploy) directly on
the box serving hcl.archipelago-foundation.org, running in host (not
docker) execution mode. Deploy is a plain local rsync — no SSH keys or
remote credentials needed, since the runner already has filesystem access
to the docroot. Runs as the debian user with no sudo; docroot ownership
was changed from www-data to debian so this works without any privilege
escalation (nginx only needs read access to serve it).
ci.yml now runs on pull_request only — deploy.yml already validates before
deploying on push to main, so running both on every push would just
duplicate the check.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Modeled on three researched precedents (see README): OpenWrt's Table of
Hardware for the browsable sortable/filterable table UX, postmarketOS's
working/community/testing tiers for the status field (collapsed to
working/partial/broken here), and RaspiBlitz's scattered GitHub-issues
approach as a negative example to avoid — hence structured YAML report
files validated against a JSON Schema instead of free-text issue threads.
- data/reports/*.yml + data/schema.json: one file per report, schema
requires `issues` whenever status is partial/broken
- scripts/build.py: validates every report and builds site/data.json,
fails loudly on bad data (same idea as archy's own
validate-app-manifest.sh)
- site/: plain HTML/CSS/JS, no framework or build step, fetches data.json
client-side — search, filter by status/form-factor, sortable columns,
click a row for issues/notes detail
- .github/ISSUE_TEMPLATE/hardware-report.yml: structured submission path
for contributors who don't want to touch git directly
- .gitea/workflows/ci.yml: runs the build/validate step on push and PRs
Not yet deployed anywhere — see README's Deployment section.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>