Add CI workflow (header lint + typecheck + tests + build) and license
GitHub Actions on push/PR: mandatory author-header lint, strict typecheck across all packages, full 142-test suite, build with the widget 15 KB gzip gate. README gains the dynamic CI badge and a License section. LICENSE: all rights reserved, source-available; third-party data stays under each source's own license. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Showing 3 changed files with +70 and −0
added
.github/workflows/ci.yml
+48 −0
@@ -0,0 +1,48 @@ | ||
| 1 | +# earth-now.co | |
| 2 | +# Author: Simon-Pierre Boucher | |
| 3 | +# Contact: contact@spboucher.ai | |
| 4 | +# File: .github/workflows/ci.yml | |
| 5 | +# Purpose: CI — mandatory header lint, strict typecheck, full test suite and build (incl. widget size gate) on every push/PR | |
| 6 | + | |
| 7 | +name: CI | |
| 8 | + | |
| 9 | +on: | |
| 10 | + push: | |
| 11 | + branches: [main] | |
| 12 | + pull_request: | |
| 13 | + | |
| 14 | +concurrency: | |
| 15 | + group: ci-${{ github.ref }} | |
| 16 | + cancel-in-progress: true | |
| 17 | + | |
| 18 | +jobs: | |
| 19 | + ci: | |
| 20 | + runs-on: ubuntu-latest | |
| 21 | + timeout-minutes: 20 | |
| 22 | + env: | |
| 23 | + ENABLE_RT_POLLERS: "0" | |
| 24 | + steps: | |
| 25 | + - uses: actions/checkout@v4 | |
| 26 | + | |
| 27 | + - uses: pnpm/action-setup@v4 | |
| 28 | + # version is read from package.json "packageManager" | |
| 29 | + | |
| 30 | + - uses: actions/setup-node@v4 | |
| 31 | + with: | |
| 32 | + node-version: 20 | |
| 33 | + cache: pnpm | |
| 34 | + | |
| 35 | + - name: Install | |
| 36 | + run: pnpm install --frozen-lockfile | |
| 37 | + | |
| 38 | + - name: Header lint (mandatory author header on every source file) | |
| 39 | + run: npx tsx scripts/check-headers.ts | |
| 40 | + | |
| 41 | + - name: Typecheck (strict, all packages) | |
| 42 | + run: pnpm typecheck | |
| 43 | + | |
| 44 | + - name: Tests (golden, property-based, client/server consistency) | |
| 45 | + run: pnpm test | |
| 46 | + | |
| 47 | + - name: Build (apps + widget ≤ 15 KB gzip gate) | |
| 48 | + run: pnpm build | |
added
LICENSE
+17 −0
@@ -0,0 +1,17 @@ | ||
| 1 | +Copyright (c) 2026 Simon-Pierre Boucher <contact@spboucher.ai> | |
| 2 | + | |
| 3 | +All rights reserved. | |
| 4 | + | |
| 5 | +This repository is source-available for reading, evaluation and personal | |
| 6 | +study. No permission is granted to copy, modify, redistribute, sublicense, | |
| 7 | +or use this software or its data models, in whole or in part, for any | |
| 8 | +commercial or production purpose without prior written authorization from | |
| 9 | +the copyright holder. | |
| 10 | + | |
| 11 | +Third-party data displayed by earth-now.co remains the property of its | |
| 12 | +respective sources (UN, NOAA, Global Carbon Project, Copernicus, FAO, | |
| 13 | +Global Forest Watch, Ember/IEA, USGS, and others), each under its own | |
| 14 | +license as documented in packages/registry/metrics/ and on the public | |
| 15 | +methodology page. | |
| 16 | + | |
| 17 | +For licensing inquiries: contact@spboucher.ai | |
modified
README.md
+5 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | |
| 3 | 3 | <p align="center"> |
| 4 | 4 | <a href="https://www.earth-now.co"><img src="https://img.shields.io/badge/live-www.earth--now.co-2a78d6?style=flat-square" alt="Live site"></a> |
| 5 | + <a href="https://github.com/spboucher-ai/earth-now/actions/workflows/ci.yml"><img src="https://github.com/spboucher-ai/earth-now/actions/workflows/ci.yml/badge.svg" alt="CI"></a> | |
| 5 | 6 | <img src="https://img.shields.io/badge/metrics-76-1baf7a?style=flat-square" alt="76 metrics"> |
| 6 | 7 | <img src="https://img.shields.io/badge/tests-142%20passing-0ca30c?style=flat-square" alt="142 tests"> |
| 7 | 8 | <img src="https://img.shields.io/badge/TypeScript-strict-2a78d6?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript strict"> |
@@ -134,6 +135,10 @@ Production is exposed at **https://www.earth-now.co** (reverse proxy → Next.js | ||
| 134 | 135 | |
| 135 | 136 | Every source file in this repository carries the mandatory author header (enforced by `scripts/check-headers.ts` in CI). Data sources are credited in the UI, in API responses and on the methodology page — licenses are tracked per source in the registry, with `licenseNote` flags on anything requiring legal review before commercial launch. |
| 136 | 137 | |
| 138 | +## 📄 License | |
| 139 | + | |
| 140 | +**All rights reserved** — this repository is source-available for reading and evaluation; commercial or production use requires written authorization (see [`LICENSE`](./LICENSE)). Third-party data remains under each source's own license, documented per metric in the registry. | |
| 141 | + | |
| 137 | 142 | --- |
| 138 | 143 | |
| 139 | 144 | <p align="center"><em>Chaque compteur est un modèle statistique documenté — jamais une extrapolation opaque.</em></p> |
| 140 | 145 | |