("automated", all work-in-progress and wonky in Firefox)
The story so far: A watcher service polls the GitHub API looking for commits to the repository or open pull
requests.
Should a push event be detected, it gets split into its individual commits (if necessary) and re-pushed
to a fork. This triggers a build pipeline on Microsoft's Azure cloud, resulting in two builds - one
unmodified and one with source maps inlined.
While the unmodified one is used for regular syntax/code checks and linters, the
type search and dependency management modules need the additional location data supplied by
source maps.
The dependency tree gained from running the examples in a headless browser, crossed with a commit's
diff, and more (simpler) heuristics ought to reduce run times while also minimizing storage space (very WIP).
Tests and checks are executed mostly in parallel, thanks to Azure's free 10 hosted workers.
Given GitHub's recent public opening of GitHub Actions, with its even more generous 20 free workers,
there might be a rewrite waiting for us in the future.
Stack: JavaScript with small bits of Bash, databases all SQLite,
and workers by the aforementioned Azure and 3rd party servers. Formerly a (IMO glorious) mess
of microservices, now much less so and soon to be replaced with Docker. VueJS for the frontend.
The official three.js
examples
don't
reference the actual individual
source files in the core library, but rather include the transpiled & bundled version that -
for now
- still needs manual updating and committing. live rebuilds the library artifacts for
every commit (dev
branch & PRs) for easier testing.
Todo: Efficient paging, it's getting slightly out of hand
Currently runs various checks, linters, a frankly excessive type search and file-level
dependency management. Lots of flaky tests that are highly tuned to the file- and code structure
of the library. Fun.
Next: Increase dependencies tracking to function-level, then reduce runtime by only retesting
modified functions.
And cleanup the frontend code, it could use a proper brushing.
Soon: Visual regression tests with Chrome's frame-precision render control,
automated profiling(alpha) and automated performance alerts
Future: Given time and money, a fixed set of bare metal servers for more consistent measurements,
maybe?
Gotta make use of those 500+ MB of logs we're collecting per commit.