Merge pull request #92692 from c0deaddict/fix/docker-layer-created-now

dockerTools.buildLayeredImage: fix created=now

Changed files
+23 -4
nixos
pkgs
build-support
+10 -1
nixos/tests/docker-tools.nix
···
with subtest("Ensure Docker images can use an unstable date"):
docker.succeed(
-
"docker load --input='${examples.bash}'"
)
assert unix_time_second1 not in docker.succeed(
"docker inspect ${examples.unstableDate.imageName} "
+ "| ${pkgs.jq}/bin/jq -r .[].Created"
)
···
with subtest("Ensure Docker images can use an unstable date"):
docker.succeed(
+
"docker load --input='${examples.unstableDate}'"
)
assert unix_time_second1 not in docker.succeed(
"docker inspect ${examples.unstableDate.imageName} "
+
+ "| ${pkgs.jq}/bin/jq -r .[].Created"
+
)
+
+
with subtest("Ensure Layered Docker images can use an unstable date"):
+
docker.succeed(
+
"docker load --input='${examples.unstableDateLayered}'"
+
)
+
assert unix_time_second1 not in docker.succeed(
+
"docker inspect ${examples.unstableDateLayered.imageName} "
+ "| ${pkgs.jq}/bin/jq -r .[].Created"
)
+10
pkgs/build-support/docker/examples.nix
···
Env = [ "USER=root" ];
};
};
}
···
Env = [ "USER=root" ];
};
};
+
+
# 20. Ensure that setting created to now results in a date which
+
# isn't the epoch + 1 for layered images.
+
unstableDateLayered = pkgs.dockerTools.buildLayeredImage {
+
name = "unstable-date-layered";
+
tag = "latest";
+
contents = [ pkgs.coreutils ];
+
created = "now";
+
};
+
}
+3 -3
pkgs/build-support/docker/stream_layered_image.py
···
import tarfile
import itertools
import threading
-
from datetime import datetime
from collections import namedtuple
···
conf = json.load(f)
created = (
-
datetime.now(tz=datetime.timezone.utc)
if conf["created"] == "now"
else datetime.fromisoformat(conf["created"])
)
···
},
"history": [
{
-
"created": conf["created"],
"comment": f"store paths: {layer.paths}"
}
for layer in layers
···
import tarfile
import itertools
import threading
+
from datetime import datetime, timezone
from collections import namedtuple
···
conf = json.load(f)
created = (
+
datetime.now(tz=timezone.utc)
if conf["created"] == "now"
else datetime.fromisoformat(conf["created"])
)
···
},
"history": [
{
+
"created": datetime.isoformat(created),
"comment": f"store paths: {layer.paths}"
}
for layer in layers