Skip to content
Snippets Groups Projects
  • regnat's avatar
    7c559673
    Add a post-build-hook · 7c559673
    regnat authored
    
    Passing `--post-build-hook /foo/bar` to a nix-* command will cause
    `/foo/bar` to be executed after each build with the following
    environment variables set:
    
        DRV_PATH=/nix/store/drv-that-has-been-built.drv
        OUT_PATHS=/nix/store/...build /nix/store/...build-bin /nix/store/...build-dev
    
    This can be useful in particular to upload all the builded artifacts to
    the cache (including the ones that don't appear in the runtime closure
    of the final derivation or are built because of IFD).
    
    This new feature prints the stderr/stdout output to the `nix-build`
    and `nix build` client, and the output is printed in a Nix 2
    compatible format:
    
        [nix]$ ./inst/bin/nix-build ./test.nix
        these derivations will be built:
          /nix/store/ishzj9ni17xq4hgrjvlyjkfvm00b0ch9-my-example-derivation.drv
        building '/nix/store/ishzj9ni17xq4hgrjvlyjkfvm00b0ch9-my-example-derivation.drv'...
        hello!
        bye!
        running post-build-hook '/home/grahamc/projects/github.com/NixOS/nix/post-hook.sh'...
        post-build-hook: + sleep 1
        post-build-hook: + echo 'Signing paths' /nix/store/qr213vjmibrqwnyp5fw678y7whbkqyny-my-example-derivation
        post-build-hook: Signing paths /nix/store/qr213vjmibrqwnyp5fw678y7whbkqyny-my-example-derivation
        post-build-hook: + sleep 1
        post-build-hook: + echo 'Uploading paths' /nix/store/qr213vjmibrqwnyp5fw678y7whbkqyny-my-example-derivation
        post-build-hook: Uploading paths /nix/store/qr213vjmibrqwnyp5fw678y7whbkqyny-my-example-derivation
        post-build-hook: + sleep 1
        post-build-hook: + printf 'very important stuff'
        /nix/store/qr213vjmibrqwnyp5fw678y7whbkqyny-my-example-derivation
    
        [nix-shell:~/projects/github.com/NixOS/nix]$ ./inst/bin/nix build -L -f ./test.nix
        my-example-derivation> hello!
        my-example-derivation> bye!
        my-example-derivation (post)> + sleep 1
        my-example-derivation (post)> + echo 'Signing paths' /nix/store/c263gzj2kb2609mz8wrbmh53l14wzmfs-my-example-derivation
        my-example-derivation (post)> Signing paths /nix/store/c263gzj2kb2609mz8wrbmh53l14wzmfs-my-example-derivation
        my-example-derivation (post)> + sleep 1
        my-example-derivation (post)> + echo 'Uploading paths' /nix/store/c263gzj2kb2609mz8wrbmh53l14wzmfs-my-example-derivation
        my-example-derivation (post)> Uploading paths /nix/store/c263gzj2kb2609mz8wrbmh53l14wzmfs-my-example-derivation
        my-example-derivation (post)> + sleep 1
        my-example-derivation (post)> + printf 'very important stuff'
        [1 built, 0.0 MiB DL]
    
    Co-authored-by: default avatarGraham Christensen <graham@grahamc.com>
    Co-authored-by: default avatarEelco Dolstra <edolstra@gmail.com>
    7c559673
    History
    Add a post-build-hook
    regnat authored
    
    Passing `--post-build-hook /foo/bar` to a nix-* command will cause
    `/foo/bar` to be executed after each build with the following
    environment variables set:
    
        DRV_PATH=/nix/store/drv-that-has-been-built.drv
        OUT_PATHS=/nix/store/...build /nix/store/...build-bin /nix/store/...build-dev
    
    This can be useful in particular to upload all the builded artifacts to
    the cache (including the ones that don't appear in the runtime closure
    of the final derivation or are built because of IFD).
    
    This new feature prints the stderr/stdout output to the `nix-build`
    and `nix build` client, and the output is printed in a Nix 2
    compatible format:
    
        [nix]$ ./inst/bin/nix-build ./test.nix
        these derivations will be built:
          /nix/store/ishzj9ni17xq4hgrjvlyjkfvm00b0ch9-my-example-derivation.drv
        building '/nix/store/ishzj9ni17xq4hgrjvlyjkfvm00b0ch9-my-example-derivation.drv'...
        hello!
        bye!
        running post-build-hook '/home/grahamc/projects/github.com/NixOS/nix/post-hook.sh'...
        post-build-hook: + sleep 1
        post-build-hook: + echo 'Signing paths' /nix/store/qr213vjmibrqwnyp5fw678y7whbkqyny-my-example-derivation
        post-build-hook: Signing paths /nix/store/qr213vjmibrqwnyp5fw678y7whbkqyny-my-example-derivation
        post-build-hook: + sleep 1
        post-build-hook: + echo 'Uploading paths' /nix/store/qr213vjmibrqwnyp5fw678y7whbkqyny-my-example-derivation
        post-build-hook: Uploading paths /nix/store/qr213vjmibrqwnyp5fw678y7whbkqyny-my-example-derivation
        post-build-hook: + sleep 1
        post-build-hook: + printf 'very important stuff'
        /nix/store/qr213vjmibrqwnyp5fw678y7whbkqyny-my-example-derivation
    
        [nix-shell:~/projects/github.com/NixOS/nix]$ ./inst/bin/nix build -L -f ./test.nix
        my-example-derivation> hello!
        my-example-derivation> bye!
        my-example-derivation (post)> + sleep 1
        my-example-derivation (post)> + echo 'Signing paths' /nix/store/c263gzj2kb2609mz8wrbmh53l14wzmfs-my-example-derivation
        my-example-derivation (post)> Signing paths /nix/store/c263gzj2kb2609mz8wrbmh53l14wzmfs-my-example-derivation
        my-example-derivation (post)> + sleep 1
        my-example-derivation (post)> + echo 'Uploading paths' /nix/store/c263gzj2kb2609mz8wrbmh53l14wzmfs-my-example-derivation
        my-example-derivation (post)> Uploading paths /nix/store/c263gzj2kb2609mz8wrbmh53l14wzmfs-my-example-derivation
        my-example-derivation (post)> + sleep 1
        my-example-derivation (post)> + printf 'very important stuff'
        [1 built, 0.0 MiB DL]
    
    Co-authored-by: default avatarGraham Christensen <graham@grahamc.com>
    Co-authored-by: default avatarEelco Dolstra <edolstra@gmail.com>