diff options
author | Robert Hensing <robert@roberthensing.nl> | 2020-07-11 15:51:58 +0200 |
---|---|---|
committer | Robert Hensing <robert@roberthensing.nl> | 2020-07-11 16:58:25 +0200 |
commit | 8c0459f6118a7021acad0d07eeece08c0d9bd87b (patch) | |
tree | 2f9786dcdd998d17f3480e815ccce256849706ad /pkgs/build-support/docker | |
parent | c87c474b17af792e7984ef4f058291f7ce06f594 (diff) |
dockerTools: Always set imageTag attribute
The image tag can be specified or generated from the output hash. Previously, a generated tag could be recovered from the evaluated image with some string operations. However, with the introduction of streamLayeredImage, it's not feasible to compute the generated tag yourself. With this change, the imageTag attribute is set unconditionally, for the buildImage, buildLayeredImage, streamLayeredImage functions.
Diffstat (limited to 'pkgs/build-support/docker')
-rw-r--r-- | pkgs/build-support/docker/default.nix | 12 | ||||
-rw-r--r-- | pkgs/build-support/docker/examples.nix | 18 |
2 files changed, 30 insertions, 0 deletions
diff --git a/pkgs/build-support/docker/default.nix b/pkgs/build-support/docker/default.nix index 7ff325382a6b5..bf815af6f7c02 100644 --- a/pkgs/build-support/docker/default.nix +++ b/pkgs/build-support/docker/default.nix @@ -442,6 +442,7 @@ rec { in runCommand "${name}.tar.gz" { inherit (stream) imageName; + passthru = { inherit (stream) imageTag; }; buildInputs = [ pigz ]; } "${stream} | pigz -nT > $out"; @@ -517,6 +518,11 @@ rec { layerClosure = writeReferencesToFile layer; passthru.buildArgs = args; passthru.layer = layer; + passthru.imageTag = + if tag != null + then lib.toLower tag + else + lib.head (lib.strings.splitString "-" (baseNameOf result.outPath)); # Docker can't be made to run darwin binaries meta.badPlatforms = lib.platforms.darwin; } '' @@ -737,6 +743,11 @@ rec { conf = runCommand "${name}-conf.json" { inherit maxLayers created; imageName = lib.toLower name; + passthru.imageTag = + if tag != null + then tag + else + lib.head (lib.strings.splitString "-" (baseNameOf conf.outPath)); paths = referencesByPopularity overallClosure; buildInputs = [ jq ]; } '' @@ -792,6 +803,7 @@ rec { ''; result = runCommand "stream-${name}" { inherit (conf) imageName; + passthru = { inherit (conf) imageTag; }; buildInputs = [ makeWrapper ]; } '' makeWrapper ${streamScript} $out --add-flags ${conf} diff --git a/pkgs/build-support/docker/examples.nix b/pkgs/build-support/docker/examples.nix index 81dae9b612411..0d907c2d64bf2 100644 --- a/pkgs/build-support/docker/examples.nix +++ b/pkgs/build-support/docker/examples.nix @@ -364,4 +364,22 @@ rec { created = "now"; }; + # buildImage without explicit tag + bashNoTag = pkgs.dockerTools.buildImage { + name = "bash-no-tag"; + contents = pkgs.bashInteractive; + }; + + # buildLayeredImage without explicit tag + bashNoTagLayered = pkgs.dockerTools.buildLayeredImage { + name = "bash-no-tag-layered"; + contents = pkgs.bashInteractive; + }; + + # buildImage without explicit tag + bashNoTagStreamLayered = pkgs.dockerTools.streamLayeredImage { + name = "bash-no-tag-stream-layered"; + contents = pkgs.bashInteractive; + }; + } |