# Not everyone has a suitable remote builder set up, so the cross-compilation # tests that _include_ running the result are separate. That way, most people # can run the majority of the test suite without the extra setup. import ./make-test-python.nix ( { pkgs, ... }: let remoteSystem = if pkgs.stdenv.hostPlatform.system == "aarch64-linux" then "x86_64-linux" else "aarch64-linux"; remoteCrossPkgs = import ../.. # nixpkgs { # NOTE: This is the machine that runs the build - local from the # 'perspective' of the build script. localSystem = remoteSystem; # NOTE: Since this file can't control where the test will be _run_ we don't # cross-compile _to_ a different system but _from_ a different system crossSystem = pkgs.stdenv.hostPlatform.system; }; hello1 = remoteCrossPkgs.dockerTools.buildImage { name = "hello1"; tag = "latest"; copyToRoot = remoteCrossPkgs.buildEnv { name = "image-root"; pathsToLink = [ "/bin" ]; paths = [ remoteCrossPkgs.hello ]; }; }; hello2 = remoteCrossPkgs.dockerTools.buildLayeredImage { name = "hello2"; tag = "latest"; contents = remoteCrossPkgs.hello; }; in { name = "docker-tools"; meta = with pkgs.lib.maintainers; { maintainers = [ roberth ]; }; nodes = { docker = { ... }: { virtualisation = { diskSize = 2048; docker.enable = true; }; }; }; testScript = '' docker.wait_for_unit("sockets.target") with subtest("Ensure cross compiled buildImage image can run."): docker.succeed( "docker load --input='${hello1}'" ) assert "Hello, world!" in docker.succeed( "docker run --rm ${hello1.imageName} hello", ) docker.succeed( "docker rmi ${hello1.imageName}", ) with subtest("Ensure cross compiled buildLayeredImage image can run."): docker.succeed( "docker load --input='${hello2}'" ) assert "Hello, world!" in docker.succeed( "docker run --rm ${hello2.imageName} hello", ) docker.succeed( "docker rmi ${hello2.imageName}", ) ''; } )