mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-13 14:52:19 +00:00
DATA LAYERS keeps its curated core layers; regional and niche sources live in the Data Library, opened from Browse data library at the foot of the panel. Each entry is a JSON manifest in src/library/entries/ pointing at a live upstream (query API, provider-hosted file or tile endpoint), so nothing is bundled and a self-hosted instance hosts no data. Sources without CORS go through one allowlisted /api/library route. Kinds: dataset (GeoJSON, CSV, JSON records, ArcGIS, partitioned GeoParquet), tiles (XYZ, WMS/ArcGIS bbox export, terrarium relief) and pack. Selections persist and travel in share links as lib=, separate from the core layer tokens. Library rows get Zoom and Remove icon chips that work while the layer is off, rendered through RailChips. Strings are translated in every locale.
155 lines
4.5 KiB
YAML
155 lines
4.5 KiB
YAML
name: CI
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches: [main]
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: ci-${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
verify:
|
|
name: Node ${{ matrix.node }}
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 20
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
node: [24.22.2, 26.x]
|
|
env:
|
|
PUPPETEER_SKIP_DOWNLOAD: '1'
|
|
GEV_REQUIRE_ALLOCATION_GATE: ${{ matrix.node == '24.22.2' && '1' || '0' }}
|
|
steps:
|
|
- name: Check out source
|
|
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
with:
|
|
persist-credentials: false
|
|
fetch-depth: 0
|
|
|
|
- name: Use Node.js
|
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
|
with:
|
|
node-version: ${{ matrix.node }}
|
|
cache: npm
|
|
|
|
- name: Install locked dependencies
|
|
run: npm ci
|
|
|
|
- name: Run setup policy checks
|
|
run: npm run doctor -- --json
|
|
|
|
- name: Check adopted formatting
|
|
run: npm run format:check
|
|
|
|
- name: Check package boundaries
|
|
run: npm run check:boundaries
|
|
|
|
- name: Check published layer-token allocations
|
|
if: github.event_name == 'pull_request'
|
|
run: npm run layer-token:check -- --base-ref origin/main
|
|
|
|
- name: Check Data Library manifests and share tokens
|
|
if: github.event_name == 'pull_request'
|
|
run: npm run library:check -- --base-ref origin/main
|
|
|
|
- name: Run unit tests
|
|
run: npm test
|
|
|
|
- name: Build production bundle
|
|
run: npm run build
|
|
|
|
street-level-browser:
|
|
# Hermetic: every Mapillary request is answered from fixtures, so the
|
|
# dummy token below never leaves the page.
|
|
name: Street Level browser gate
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 30
|
|
env:
|
|
GEV_REQUIRE_ALLOCATION_GATE: '0'
|
|
steps:
|
|
- name: Check out source
|
|
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: Use Node.js
|
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
|
with:
|
|
node-version: 24.22.2
|
|
cache: npm
|
|
|
|
- name: Install locked dependencies and headless Chrome
|
|
run: npm ci
|
|
|
|
- name: Build production bundle with a dummy Mapillary token
|
|
env:
|
|
MAPILLARY_CLIENT_TOKEN: 'MLY|0|qa-fixture'
|
|
run: npm run build
|
|
|
|
- name: Start the preview server
|
|
env:
|
|
MAPILLARY_CLIENT_TOKEN: 'MLY|0|qa-fixture'
|
|
run: |
|
|
npx vite preview --port 4173 --strictPort > preview.log 2>&1 &
|
|
for attempt in $(seq 1 90); do
|
|
curl -sf http://localhost:4173/ > /dev/null && exit 0
|
|
sleep 2
|
|
done
|
|
cat preview.log
|
|
exit 1
|
|
|
|
- name: Street Level gate with Mapillary fixtures
|
|
run: npm run qa:street-level:fixtures -- --strict --url http://localhost:4173
|
|
|
|
- name: Preview server log
|
|
if: failure()
|
|
run: cat preview.log
|
|
|
|
- name: Upload gate evidence
|
|
if: failure()
|
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
with:
|
|
name: browser-gate-evidence
|
|
path: qa-artifacts/
|
|
if-no-files-found: ignore
|
|
retention-days: 14
|
|
|
|
windows-onboarding:
|
|
name: Windows onboarding
|
|
runs-on: windows-latest
|
|
timeout-minutes: 20
|
|
env:
|
|
PUPPETEER_SKIP_DOWNLOAD: '1'
|
|
GEV_REQUIRE_ALLOCATION_GATE: '0'
|
|
steps:
|
|
- name: Check out source
|
|
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: Use Node.js
|
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
|
with:
|
|
node-version: 24.22.2
|
|
cache: npm
|
|
|
|
- name: Run the Pinokio install path
|
|
run: node scripts/pinokio-install.mjs
|
|
|
|
- name: Check adopted formatting
|
|
run: npm run format:check
|
|
|
|
- name: Check package boundaries
|
|
run: npm run check:boundaries
|
|
|
|
- name: Run focused onboarding tests
|
|
run: node --test src/setupDoctor.test.mjs src/pinokioEnvironment.test.mjs src/pinokioPreflight.test.mjs src/pinokioLauncherContract.test.mjs src/keySetupHardening.test.mjs src/mapStartup.test.mjs src/hudSummaryResponse.test.mjs src/codexOauthRealtime.test.mjs
|
|
|
|
- name: Build production bundle
|
|
run: npm run build
|