pytrainer: unpin python 3.10
[NixPkgs.git] / pkgs / build-support / fetchdocker / default.nix
blobef6132bfe3a5adb69ce5d02ebd04e7aaf5d36096
1 { stdenv, lib, coreutils, bash, gnutar, writeText }:
2 let
3   stripScheme =
4     builtins.replaceStrings [ "https://" "http://" ] [ "" "" ];
5   stripNixStore =
6     s: lib.removePrefix "${builtins.storeDir}/" s;
7 in
8 { name
9 , registry         ? "https://registry-1.docker.io/v2/"
10 , repository       ? "library"
11 , imageName
12 , tag
13 , imageLayers
14 , imageConfig
15 , image            ? "${stripScheme registry}/${repository}/${imageName}:${tag}"
18 # Make sure there are *no* slashes in the repository or container
19 # names since we use these to make the output derivation name for the
20 # nix-store path.
21 assert null == lib.findFirst (c: "/"==c) null (lib.stringToCharacters repository);
22 assert null == lib.findFirst (c: "/"==c) null (lib.stringToCharacters imageName);
24 let
25   # Abuse paths to collapse possible double slashes
26   repoTag0 = builtins.toString (/. + "/${stripScheme registry}/${repository}/${imageName}");
27   repoTag1 = lib.removePrefix "/" repoTag0;
29   layers = builtins.map stripNixStore imageLayers;
31   manifest =
32     writeText "manifest.json" (builtins.toJSON [
33       { Config   = stripNixStore imageConfig;
34         Layers   = layers;
35         RepoTags = [ "${repoTag1}:${tag}" ];
36       }]);
38   repositories =
39     writeText "repositories" (builtins.toJSON {
40       ${repoTag1} = {
41         ${tag} = lib.last layers;
42       };
43     });
45   imageFileStorePaths =
46     writeText "imageFileStorePaths.txt"
47       (lib.concatStringsSep "\n" ((lib.unique imageLayers) ++ [imageConfig]));
49 stdenv.mkDerivation {
50   builder     = ./fetchdocker-builder.sh;
51   buildInputs = [ coreutils ];
52   preferLocalBuild = true;
54   inherit name imageName repository tag;
55   inherit bash gnutar manifest repositories;
56   inherit imageFileStorePaths;
58   passthru = {
59     inherit image;
60   };