feat: CI testing, dev/ structure, TimelineLayer, and coverage reporting#544
Merged
charlieforward9 merged 16 commits intomasterfrom Mar 5, 2026
Merged
feat: CI testing, dev/ structure, TimelineLayer, and coverage reporting#544charlieforward9 merged 16 commits intomasterfrom
charlieforward9 merged 16 commits intomasterfrom
Conversation
…ists Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Closes a degree of #82 by establishing an automated test baseline for every PR. Applies reviewer feedback from #512 re: dev/ directory for WIP/RFC content. ## CI workflow (.github/workflows/test.yml) - Triggers on push to master and all pull_request events - lint job: runs yarn lint (no build required) - test-node job: builds, runs vitest node project with v8 coverage, uploads to Coveralls - test-headless job: installs Playwright Chromium, runs headless browser tests Modeled after deck.gl's test.yml (see visgl/deck.gl vitest-migration-rfc) using @vitest/browser + Playwright as first-class visgl testing utilities. ## Coverage (vitest.config.ts + package.json) - Added test.coverage block: provider v8, reporters text + lcov (for Coveralls) - Scoped to modules/*/src/**, excludes basemap-props* and template - Added test-ci script: vitest run --project node --coverage - Added @vitest/coverage-v8 devDependency ## New unit tests (all 308 pass, 60 test files) - modules/editable-layers/test/immutable-feature-collection.node.spec.ts ImmutableFeatureCollection: add/delete/replace/removePosition, polygon ring wrapping, 3D elevation preservation, immutability guarantees (17 tests) - modules/editable-layers/test/imports.node.spec.ts Public API surface smoke test: draw, alter, and measurement mode exports (6 tests) - modules/layers/test/imports.node.spec.ts (2 tests) - modules/widgets/test/imports.node.spec.ts (4 tests) - modules/geo-layers/test/imports.node.spec.ts (3 tests) ## dev/ directory Per ibgreen's feedback in #512: establishes dev/ as the canonical home for RFCs and WIP content that should NOT be indexed by the docs site search. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Per discussion: RFCs are better tracked as GitHub Issues or Discussions where commenting and cross-linking are native. The docs tree stays focused on true usability docs and basic rationale only. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…tay in modules/ Separates in-progress work from the published modules tree. All npm-published 9.2.8 packages remain untouched in modules/. Moved to dev/ (flat): - modules/timeline-layers -> dev/timeline-layers (in progress, refs #517 #379) - examples/timeline-layers/horizon-graph-layer -> dev/timeline-layers/examples/ - examples/arrow-layers-wip -> dev/arrow-layers (renamed, drop -wip suffix) Config: - package.json + lerna.json: add dev/* to workspaces/packages - tsconfig.json: add dev/ to include, add timeline-layers path alias - vitest.config.ts: include dev/ in node/browser/headless globs and coverage - keep modules/basemap-props/** excluded from node tests (uses global describe) Rationale from #512: dev/ keeps WIP visible without polluting docs search or the published modules tree. Design proposals live in GitHub Issues/Discussions. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Moving timeline-layers from modules/ to dev/ changed its workspace identifier. Yarn 4 hardened mode on public PRs treats installs as --immutable, so the lockfile must be committed with the updated path. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ine-layers The example was moved from examples/timeline-layers/horizon-graph-layer to dev/timeline-layers/examples/horizon-graph-layer. Update the website component require() and code link to match. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Follows the move of modules/timeline-layers → dev/timeline-layers. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: charlieforward9 <62311337+charlieforward9@users.noreply.github.com>
…ine-types, use in TrackWithSubtracks Co-authored-by: charlieforward9 <62311337+charlieforward9@users.noreply.github.com>
…tection, time utils Co-authored-by: charlieforward9 <62311337+charlieforward9@users.noreply.github.com>
…etup - Add dev/timeline-layers/examples/* to root workspace glob so yarn resolves the package correctly - Add vite.config.local.mjs (aliases @deck.gl-community/timeline-layers to src/ so dist/ is never stale during dev) - Fix tsconfig.json extends depth (examples/ moved one level deeper vs original PR path) - Update example README with prototype video + end-goal screenshot from PR #379, start-local instructions, and context links to #379/#517/#38 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The global permissions block only had contents:read. Coveralls needs pull-requests:write to post a coverage comment and checks:write for the status check. Scoped to test-node job only. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace Coveralls upload (which requires the Coveralls GitHub App to be installed on the org to post PR comments) with an actions/github-script step that reads the vitest coverage table from stdout and posts/updates it as a PR comment directly. No external service setup needed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CoverageStmts: 30.79% | Branch: 26.58% | Funcs: 28.86% | Lines: 30.87%
|
test.yaml was the original single-job workflow. test.yml replaced it with parallel lint/test-node/test-headless jobs. Both were running on every PR causing duplicate test-node checks. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace verbose per-file table with a single "All files" totals line. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Save "All files" line as artifact on master pushes - On PRs, find + download latest master baseline artifact - Show delta (▲/▼/●) next to each metric vs master Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Establishes automated testing on every PR and restructures WIP work into a proper
dev/directory — the main blocker for closing #82.Applies reviewer feedback from #512.
Modeled after deck.gl's vitest migration RFC using
@vitest/browser+ Playwright as first-class visgl testing utilities.Brings in #517's
TimelineLayerwith full authorship preserved.Changes
CI —
.github/workflows/test.ymlTriggers on every
pull_requestand push tomaster. Three parallel jobs:lintyarn lint— fast, no buildtest-nodevitest run --project node --coverage→ upload LCOV to Coverallstest-headlessplaywright install chromium→vitest run --project headlessCoverage —
vitest.config.ts+@vitest/coverage-v8Provider
v8, reporterstext+lcov(for Coveralls), scoped tomodules/*/src/**anddev/*/src/**.dev/directoryPer @ibgreen's feedback in #512: canonical home for WIP modules and examples not published to npm and not indexed by the docs site.
timeline-layers/arrow-layers/modules/timeline-layers→dev/timeline-layers(not yet published to npm).dev/timeline-layers— TimelineLayer from #517All 3 commits cherry-picked via
git format-patch | git am— full authorship preserved fromcopilot-swe-agent+ @charlieforward9.src/layers/timeline-layer/—TimelineLayerCompositeLayer (868 lines), types, utils, collision detection, layouttest/timeline-layer.spec.ts— 47 unit tests: collision detection, time utils, tick generation, zoom APIexamples/timeline-layer/— standalone Vite app withyarn start-localwired tosrc/vite.config.local.mjs— local dev config aliasing@deck.gl-community/timeline-layerstosrc/PR #379 closed as superseded by #517.
New unit tests — 61 files / 358 tests
dev/timeline-layers/test/timeline-layer.spec.tsdev/timeline-layers/test/index.spec.tseditable-layers/test/immutable-feature-collection.node.spec.tseditable-layers/test/imports.node.spec.tslayers/test/imports.node.spec.tswidgets/test/imports.node.spec.tsgeo-layers/test/imports.node.spec.tsWebsite fixes
website/docusaurus.config.js— update@deck.gl-community/timeline-layerswebpack alias todev/pathwebsite/src/examples/timeline-layers/horizon-graph-layer.tsx— updaterequire()path after moveRelates to
dev/directory, no RFCs in docs)Test plan
yarn test-ci— 61 files, 358 tests, all pass locallyyarn start-localindev/timeline-layers/examples/timeline-layer— TimelineLayer demo runs cleanlyGenerated with Claude Code