diff options
| author | Leitwolf11 | 2026-11-12 22:40:35 +0300 |
|---|---|---|
| committer | Leitwolf11 | 2026-11-12 22:40:35 +0300 |
| commit | d73260a011d463f492448bc2e29aa46fba657326 (patch) | |
| tree | 838f7b44bd0853b1cd7c5ff82aa9a49f8ff61217 /.github | |
| parent | 86214c96285f73d352f934b0da33d231150898f0 (diff) | |
| download | tazel-feature/action-level-incremental.tar.gz | |
Make builds incremental per action, by contentfeature/action-level-incremental
Every compile, archive, link and Zig build is now an action: a command
line with its directory and environment, the files it reads and the
files it writes. ActionCache keeps a record beside the first output of
each action, with the digest of the action and the SHA-256 of every
input and output. An action runs again only when:
- its command line, directory or environment changed,
- a file it read has other content: the declared inputs, and what the
compiler included, from the depfile it wrote,
- or an output is gone or no longer what the action wrote.
Files are compared by content, not by time. Touching a file reruns
nothing; a translation unit recompiled to the same object (a comment in
a header, say) reruns neither the archive nor the program that use it.
Digests are kept per build by size and modification time, so each file
is read once.
- Zig writes no depfile, so every .zig file beside and below the root
file, and the libraries it links, are the inputs of a Zig build. It
no longer runs on every build.
- Staged headers and data files are copied only when their bytes
differ.
- The .cmd records and the time comparisons of UpToDate are gone.
Tests: the action cache (command, environment, touched, changed and
restored inputs, altered outputs, forgotten records) and, with the C
compiler of the machine, a touch that runs nothing, a comment in a
header that recompiles two units but does not archive or link, and a
change of code that recompiles, archives and relinks.
Diffstat (limited to '.github')
0 files changed, 0 insertions, 0 deletions