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.
This commit is contained in:
parent
c87c474b17
commit
8c0459f611
|
@ -30,8 +30,45 @@ import ./make-test-python.nix ({ pkgs, ... }: {
|
||||||
)
|
)
|
||||||
|
|
||||||
docker.succeed("docker run --rm ${examples.bash.imageName} bash --version")
|
docker.succeed("docker run --rm ${examples.bash.imageName} bash --version")
|
||||||
|
# Check imageTag attribute matches image
|
||||||
|
docker.succeed("docker images --format '{{.Tag}}' | grep -F '${examples.bash.imageTag}'")
|
||||||
docker.succeed("docker rmi ${examples.bash.imageName}")
|
docker.succeed("docker rmi ${examples.bash.imageName}")
|
||||||
|
|
||||||
|
# The remaining combinations
|
||||||
|
with subtest("Ensure imageTag attribute matches image"):
|
||||||
|
docker.succeed(
|
||||||
|
"docker load --input='${examples.bashNoTag}'"
|
||||||
|
)
|
||||||
|
docker.succeed(
|
||||||
|
"docker images --format '{{.Tag}}' | grep -F '${examples.bashNoTag.imageTag}'"
|
||||||
|
)
|
||||||
|
docker.succeed("docker rmi ${examples.bashNoTag.imageName}:${examples.bashNoTag.imageTag}")
|
||||||
|
|
||||||
|
docker.succeed(
|
||||||
|
"docker load --input='${examples.bashNoTagLayered}'"
|
||||||
|
)
|
||||||
|
docker.succeed(
|
||||||
|
"docker images --format '{{.Tag}}' | grep -F '${examples.bashNoTagLayered.imageTag}'"
|
||||||
|
)
|
||||||
|
docker.succeed("docker rmi ${examples.bashNoTagLayered.imageName}:${examples.bashNoTagLayered.imageTag}")
|
||||||
|
|
||||||
|
docker.succeed(
|
||||||
|
"${examples.bashNoTagStreamLayered} | docker load"
|
||||||
|
)
|
||||||
|
docker.succeed(
|
||||||
|
"docker images --format '{{.Tag}}' | grep -F '${examples.bashNoTagStreamLayered.imageTag}'"
|
||||||
|
)
|
||||||
|
docker.succeed(
|
||||||
|
"docker rmi ${examples.bashNoTagStreamLayered.imageName}:${examples.bashNoTagStreamLayered.imageTag}"
|
||||||
|
)
|
||||||
|
|
||||||
|
docker.succeed(
|
||||||
|
"docker load --input='${examples.nixLayered}'"
|
||||||
|
)
|
||||||
|
docker.succeed("docker images --format '{{.Tag}}' | grep -F '${examples.nixLayered.imageTag}'")
|
||||||
|
docker.succeed("docker rmi ${examples.nixLayered.imageName}")
|
||||||
|
|
||||||
|
|
||||||
with subtest(
|
with subtest(
|
||||||
"Check if the nix store is correctly initialized by listing "
|
"Check if the nix store is correctly initialized by listing "
|
||||||
"dependencies of the installed Nix binary"
|
"dependencies of the installed Nix binary"
|
||||||
|
|
|
@ -442,6 +442,7 @@ rec {
|
||||||
in
|
in
|
||||||
runCommand "${name}.tar.gz" {
|
runCommand "${name}.tar.gz" {
|
||||||
inherit (stream) imageName;
|
inherit (stream) imageName;
|
||||||
|
passthru = { inherit (stream) imageTag; };
|
||||||
buildInputs = [ pigz ];
|
buildInputs = [ pigz ];
|
||||||
} "${stream} | pigz -nT > $out";
|
} "${stream} | pigz -nT > $out";
|
||||||
|
|
||||||
|
@ -517,6 +518,11 @@ rec {
|
||||||
layerClosure = writeReferencesToFile layer;
|
layerClosure = writeReferencesToFile layer;
|
||||||
passthru.buildArgs = args;
|
passthru.buildArgs = args;
|
||||||
passthru.layer = layer;
|
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
|
# Docker can't be made to run darwin binaries
|
||||||
meta.badPlatforms = lib.platforms.darwin;
|
meta.badPlatforms = lib.platforms.darwin;
|
||||||
} ''
|
} ''
|
||||||
|
@ -737,6 +743,11 @@ rec {
|
||||||
conf = runCommand "${name}-conf.json" {
|
conf = runCommand "${name}-conf.json" {
|
||||||
inherit maxLayers created;
|
inherit maxLayers created;
|
||||||
imageName = lib.toLower name;
|
imageName = lib.toLower name;
|
||||||
|
passthru.imageTag =
|
||||||
|
if tag != null
|
||||||
|
then tag
|
||||||
|
else
|
||||||
|
lib.head (lib.strings.splitString "-" (baseNameOf conf.outPath));
|
||||||
paths = referencesByPopularity overallClosure;
|
paths = referencesByPopularity overallClosure;
|
||||||
buildInputs = [ jq ];
|
buildInputs = [ jq ];
|
||||||
} ''
|
} ''
|
||||||
|
@ -792,6 +803,7 @@ rec {
|
||||||
'';
|
'';
|
||||||
result = runCommand "stream-${name}" {
|
result = runCommand "stream-${name}" {
|
||||||
inherit (conf) imageName;
|
inherit (conf) imageName;
|
||||||
|
passthru = { inherit (conf) imageTag; };
|
||||||
buildInputs = [ makeWrapper ];
|
buildInputs = [ makeWrapper ];
|
||||||
} ''
|
} ''
|
||||||
makeWrapper ${streamScript} $out --add-flags ${conf}
|
makeWrapper ${streamScript} $out --add-flags ${conf}
|
||||||
|
|
|
@ -364,4 +364,22 @@ rec {
|
||||||
created = "now";
|
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;
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue