Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
42 lines
1.4 KiB
Markdown
42 lines
1.4 KiB
Markdown
# pkgs.checkpointBuildTools {#sec-checkpoint-build}
|
|
|
|
`pkgs.checkpointBuildTools` provides a way to build derivations incrementally. It consists of two functions to make checkpoint builds using Nix possible.
|
|
|
|
For hermeticity, Nix derivations do not allow any state to be carried over between builds, making a transparent incremental build within a derivation impossible.
|
|
|
|
However, we can tell Nix explicitly what the previous build state was, by representing that previous state as a derivation output. This allows the passed build state to be used for an incremental build.
|
|
|
|
To change a normal derivation to a checkpoint based build, these steps must be taken:
|
|
```nix
|
|
{
|
|
checkpointArtifacts = (pkgs.checkpointBuildTools.prepareCheckpointBuild pkgs.virtualbox);
|
|
}
|
|
```
|
|
```nix
|
|
{
|
|
changedVBox = pkgs.virtualbox.overrideAttrs (old: {
|
|
src = path/to/vbox/sources;
|
|
});
|
|
}
|
|
```
|
|
- use `mkCheckpointBuild changedVBox checkpointArtifacts`
|
|
- enjoy shorter build times
|
|
|
|
## Example {#sec-checkpoint-build-example}
|
|
```nix
|
|
{
|
|
pkgs ? import <nixpkgs> { },
|
|
}:
|
|
let
|
|
inherit (pkgs.checkpointBuildTools) prepareCheckpointBuild mkCheckpointBuild;
|
|
helloCheckpoint = prepareCheckpointBuild pkgs.hello;
|
|
changedHello = pkgs.hello.overrideAttrs (_: {
|
|
doCheck = false;
|
|
postPatch = ''
|
|
sed -i 's/Hello, world!/Hello, Nix!/g' src/hello.c
|
|
'';
|
|
});
|
|
in
|
|
mkCheckpointBuild changedHello helloCheckpoint
|
|
```
|