We improve test speed by 95%
We can tell exactly the point that a file is read by each individual test by combining two Linux features:
- Memory snapshotting - we take full snapshots of the process state as it progresses.
- Syscall tracing - we see, at the operating system level, which files each process reads.
Our approach is to map tests to files, and then files to commits. By following this process, we can avoid running tests that aren't changed by a specific commit. Additionally, we can load a previous memory snapshot to avoid expensive overhead such as starting test dependencies.
Parallelizing is messy in practice. We can help.
If each test takes 3 seconds to set up, you'll only be able to write 300 tests before your pipelines take over 15 minutes to run.
A common solution to this problem is to split up your tests into several groups, where each group is run on a different server. Parallelization is difficult in practice, because you need to make many copies of the test runner. Because LayerCI takes full-memory snapshots, we allow you to make copies of the runner after your app has loaded. This makes it much easier to parallelize your tests, allowing you to turn 15 minutes into 1 minute.
A text-only change shouldn't cause all of your tests to run.
You're probably familiar with the scenario: You fix a
typo on a webpage, and then push your changes to GitHub.
All you'd like to do is merge your trivial commit, but
you get stuck when the CI pipeline fails randomly after
A retry later, and it passes the second time.
What should've been a 5 second change turned into a 30 minute ordeal. Layer helps you avoid CI-waiting-pain by noticing that none of your tests read the change you made and skipping them entirely. The "Approve merge request" button will be available as soon as you look for it.