From f9c33c375e3afae596972d1a69dadad9f22d7f39 Mon Sep 17 00:00:00 2001 From: zimbatm Date: Sat, 16 Mar 2019 14:43:16 +0100 Subject: [PATCH 1/4] docker-compose: move condition to package make the default.nix self-sufficient --- docker-compose/default.nix | 9 +++++++-- overlay.nix | 8 +------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/docker-compose/default.nix b/docker-compose/default.nix index 6751321..1ca1665 100644 --- a/docker-compose/default.nix +++ b/docker-compose/default.nix @@ -1,6 +1,11 @@ { buildCLIImage -, docker-compose +, docker-compose ? null +, python3Packages }: buildCLIImage { - drv = docker-compose; + drv = + if docker-compose == null + then python3Packages.docker_compose + else docker-compose # nixos 19.03+ + ; } diff --git a/overlay.nix b/overlay.nix index 49ad27d..6e61274 100644 --- a/overlay.nix +++ b/overlay.nix @@ -8,13 +8,7 @@ _: pkgs: { bash = pkgs.callPackage ./bash {}; busybox = pkgs.callPackage ./busybox {}; curl = pkgs.callPackage ./curl {}; - docker-compose = pkgs.callPackage ./docker-compose { - docker-compose = - # master - pkgs.docker-compose or - # 18.09 or later - pkgs.python3Packages.docker_compose; - }; + docker-compose = pkgs.callPackage ./docker-compose {}; kubectl = pkgs.callPackage ./kubectl {}; kubernetes-helm = pkgs.callPackage ./kubernetes-helm {}; nix = pkgs.callPackage ./nix {}; From 9c5e06ad076d1ebe51dff59d2076997715ea930b Mon Sep 17 00:00:00 2001 From: zimbatm Date: Sat, 16 Mar 2019 14:46:37 +0100 Subject: [PATCH 2/4] nix-unstable: transform into package move the logic into the package --- nix-unstable/default.nix | 6 ++++++ overlay.nix | 6 ++---- 2 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 nix-unstable/default.nix diff --git a/nix-unstable/default.nix b/nix-unstable/default.nix new file mode 100644 index 0000000..4d74e9d --- /dev/null +++ b/nix-unstable/default.nix @@ -0,0 +1,6 @@ +{ docker-nixpkgs +, nixUnstable +}: +docker-nixpkgs.nix.override { + nix = nixUnstable; +} diff --git a/overlay.nix b/overlay.nix index 6e61274..4b6d31d 100644 --- a/overlay.nix +++ b/overlay.nix @@ -3,7 +3,7 @@ _: pkgs: { buildCLIImage = pkgs.callPackage ./lib/buildCLIImage.nix {}; # docker images must be lower-cased - docker-nixpkgs = rec { + docker-nixpkgs = { bash = pkgs.callPackage ./bash {}; busybox = pkgs.callPackage ./busybox {}; @@ -12,9 +12,7 @@ _: pkgs: { kubectl = pkgs.callPackage ./kubectl {}; kubernetes-helm = pkgs.callPackage ./kubernetes-helm {}; nix = pkgs.callPackage ./nix {}; - nix-unstable = nix.override { - nix = pkgs.nixUnstable; - }; + nix-unstable = pkgs.callPackage ./nix-unstable {}; }; } From fd0323f40fc81ced9c0bfd7c46bfdf57690d668a Mon Sep 17 00:00:00 2001 From: zimbatm Date: Sat, 16 Mar 2019 14:48:13 +0100 Subject: [PATCH 3/4] move images into ./images having a folder with all of the images makes things easier --- {bash => images/bash}/default.nix | 0 {busybox => images/busybox}/default.nix | 0 {curl => images/curl}/default.nix | 0 .../docker-compose}/default.nix | 0 {kubectl => images/kubectl}/default.nix | 0 .../kubernetes-helm}/default.nix | 0 .../nix-unstable}/default.nix | 0 {nix => images/nix}/default.nix | 0 {nix => images/nix}/root/etc/group | 0 {nix => images/nix}/root/etc/nsswitch.conf | 0 {nix => images/nix}/root/etc/passwd | 0 overlay.nix | 16 ++++++++-------- 12 files changed, 8 insertions(+), 8 deletions(-) rename {bash => images/bash}/default.nix (100%) rename {busybox => images/busybox}/default.nix (100%) rename {curl => images/curl}/default.nix (100%) rename {docker-compose => images/docker-compose}/default.nix (100%) rename {kubectl => images/kubectl}/default.nix (100%) rename {kubernetes-helm => images/kubernetes-helm}/default.nix (100%) rename {nix-unstable => images/nix-unstable}/default.nix (100%) rename {nix => images/nix}/default.nix (100%) rename {nix => images/nix}/root/etc/group (100%) rename {nix => images/nix}/root/etc/nsswitch.conf (100%) rename {nix => images/nix}/root/etc/passwd (100%) diff --git a/bash/default.nix b/images/bash/default.nix similarity index 100% rename from bash/default.nix rename to images/bash/default.nix diff --git a/busybox/default.nix b/images/busybox/default.nix similarity index 100% rename from busybox/default.nix rename to images/busybox/default.nix diff --git a/curl/default.nix b/images/curl/default.nix similarity index 100% rename from curl/default.nix rename to images/curl/default.nix diff --git a/docker-compose/default.nix b/images/docker-compose/default.nix similarity index 100% rename from docker-compose/default.nix rename to images/docker-compose/default.nix diff --git a/kubectl/default.nix b/images/kubectl/default.nix similarity index 100% rename from kubectl/default.nix rename to images/kubectl/default.nix diff --git a/kubernetes-helm/default.nix b/images/kubernetes-helm/default.nix similarity index 100% rename from kubernetes-helm/default.nix rename to images/kubernetes-helm/default.nix diff --git a/nix-unstable/default.nix b/images/nix-unstable/default.nix similarity index 100% rename from nix-unstable/default.nix rename to images/nix-unstable/default.nix diff --git a/nix/default.nix b/images/nix/default.nix similarity index 100% rename from nix/default.nix rename to images/nix/default.nix diff --git a/nix/root/etc/group b/images/nix/root/etc/group similarity index 100% rename from nix/root/etc/group rename to images/nix/root/etc/group diff --git a/nix/root/etc/nsswitch.conf b/images/nix/root/etc/nsswitch.conf similarity index 100% rename from nix/root/etc/nsswitch.conf rename to images/nix/root/etc/nsswitch.conf diff --git a/nix/root/etc/passwd b/images/nix/root/etc/passwd similarity index 100% rename from nix/root/etc/passwd rename to images/nix/root/etc/passwd diff --git a/overlay.nix b/overlay.nix index 4b6d31d..1497acd 100644 --- a/overlay.nix +++ b/overlay.nix @@ -5,14 +5,14 @@ _: pkgs: { # docker images must be lower-cased docker-nixpkgs = { - bash = pkgs.callPackage ./bash {}; - busybox = pkgs.callPackage ./busybox {}; - curl = pkgs.callPackage ./curl {}; - docker-compose = pkgs.callPackage ./docker-compose {}; - kubectl = pkgs.callPackage ./kubectl {}; - kubernetes-helm = pkgs.callPackage ./kubernetes-helm {}; - nix = pkgs.callPackage ./nix {}; - nix-unstable = pkgs.callPackage ./nix-unstable {}; + bash = pkgs.callPackage ./images/bash {}; + busybox = pkgs.callPackage ./images/busybox {}; + curl = pkgs.callPackage ./images/curl {}; + docker-compose = pkgs.callPackage ./images/docker-compose {}; + kubectl = pkgs.callPackage ./images/kubectl {}; + kubernetes-helm = pkgs.callPackage ./images/kubernetes-helm {}; + nix = pkgs.callPackage ./images/nix {}; + nix-unstable = pkgs.callPackage ./images/nix-unstable {}; }; } From 6385004fa8bfa6b22b2d01da8f2b90c9143ebae3 Mon Sep 17 00:00:00 2001 From: zimbatm Date: Sat, 16 Mar 2019 14:53:36 +0100 Subject: [PATCH 4/4] introduce importDir avoid repeating myself to create a new image, create a new folder under ./images that contains a default.nix. That's it. --- README.md | 9 +++++++++ lib/importDir.nix | 21 +++++++++++++++++++++ overlay.nix | 21 +++++++-------------- 3 files changed, 37 insertions(+), 14 deletions(-) create mode 100644 lib/importDir.nix diff --git a/README.md b/README.md index b496330..e7d5df0 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,15 @@ All images are automatically built and pushed to Docker Hub. | [nixpkgs/nix](https://hub.docker.com/r/nixpkgs/nix) | ![](https://images.microbadger.com/badges/image/nixpkgs/nix.svg) | ![](https://images.microbadger.com/badges/image/nixpkgs/nix:nixos-18.09.svg) | | [nixpkgs/nix-unstable](https://hub.docker.com/r/nixpkgs/nix-unstable) | ![](https://images.microbadger.com/badges/image/nixpkgs/nix-unstable.svg) | ![](https://images.microbadger.com/badges/image/nixpkgs/nix-unstable:nixos-18.09.svg) | +## Adding new images + +To add a new image to the project, create a new folder under +`./images/` with a default.nix that returns the docker image. + +Then run `nix-build release.nix -A ` to test that it builds, and +then use +`docker load -i /nix/store/....tar.gz` to load and test the image. + ## Related projects The [docker-library](https://github.com/docker-library/official-images#readme) diff --git a/lib/importDir.nix b/lib/importDir.nix new file mode 100644 index 0000000..0038a0a --- /dev/null +++ b/lib/importDir.nix @@ -0,0 +1,21 @@ +{ lib }: + +importFn: baseDir: +let + dirEntries = + builtins.attrNames + (lib.filterAttrs + (k: v: v == "directory") + (builtins.readDir baseDir)); + + absDirs = + builtins.map + (dir: "${toString baseDir}/${dir}") + dirEntries; + + imports = + builtins.map + (dir: { name = builtins.baseNameOf dir; value = importFn dir; }) + absDirs; +in + builtins.listToAttrs imports diff --git a/overlay.nix b/overlay.nix index 1497acd..69dec46 100644 --- a/overlay.nix +++ b/overlay.nix @@ -1,18 +1,11 @@ -_: pkgs: { - # lib stuff can be in the top-level +_: pkgs: let + importDir = import ./lib/importDir.nix { + inherit (pkgs) lib; + }; +in { + # builder stuff can be in the top-level buildCLIImage = pkgs.callPackage ./lib/buildCLIImage.nix {}; # docker images must be lower-cased - docker-nixpkgs = { - - bash = pkgs.callPackage ./images/bash {}; - busybox = pkgs.callPackage ./images/busybox {}; - curl = pkgs.callPackage ./images/curl {}; - docker-compose = pkgs.callPackage ./images/docker-compose {}; - kubectl = pkgs.callPackage ./images/kubectl {}; - kubernetes-helm = pkgs.callPackage ./images/kubernetes-helm {}; - nix = pkgs.callPackage ./images/nix {}; - nix-unstable = pkgs.callPackage ./images/nix-unstable {}; - - }; + docker-nixpkgs = importDir (path: pkgs.callPackage path {}) ./images; }