summary refs log tree commit diff
path: root/pkgs/build-support/docker
diff options
context:
space:
mode:
authorRobert Hensing <robert@roberthensing.nl>2020-07-11 15:51:58 +0200
committerRobert Hensing <robert@roberthensing.nl>2020-07-11 16:58:25 +0200
commit8c0459f6118a7021acad0d07eeece08c0d9bd87b (patch)
tree2f9786dcdd998d17f3480e815ccce256849706ad /pkgs/build-support/docker
parentc87c474b17af792e7984ef4f058291f7ce06f594 (diff)
downloadnixpkgs-8c0459f6118a7021acad0d07eeece08c0d9bd87b.tar
nixpkgs-8c0459f6118a7021acad0d07eeece08c0d9bd87b.tar.gz
nixpkgs-8c0459f6118a7021acad0d07eeece08c0d9bd87b.tar.bz2
nixpkgs-8c0459f6118a7021acad0d07eeece08c0d9bd87b.tar.lz
nixpkgs-8c0459f6118a7021acad0d07eeece08c0d9bd87b.tar.xz
nixpkgs-8c0459f6118a7021acad0d07eeece08c0d9bd87b.tar.zst
nixpkgs-8c0459f6118a7021acad0d07eeece08c0d9bd87b.zip
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.nix12
-rw-r--r--pkgs/build-support/docker/examples.nix18
2 files changed, 30 insertions, 0 deletions
diff --git a/pkgs/build-support/docker/default.nix b/pkgs/build-support/docker/default.nix
index 7ff325382a6..bf815af6f7c 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 81dae9b6124..0d907c2d64b 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;
+  };
+
 }