From 89817b41fd380b17972f04a45ef5ac9cf8d70bba Mon Sep 17 00:00:00 2001 From: Gabriel Gonzalez Date: Mon, 13 May 2019 10:37:03 -0700 Subject: [PATCH] Build docker images for each package in CI (#950) Fixes #513 --- README.md | 30 ++++++++++++++++++++++++++++++ nix/shared.nix | 45 +++++++++++++++++++++++++++++++++------------ release.nix | 9 +++++++++ 3 files changed, 72 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 357490c..d3c319a 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,36 @@ $ nix-env -i "$(curl -L https://hydra.dhall-lang.org/job/dhall-haskell/master/li These instructions also work for any pull request, too, by replacing `master` with the pull request number for any of the above URLs. +## Pre-built containers + +You can download pre-built `docker` image archives for each package using the +following URLs: + +* [https://hydra.dhall-lang.org/job/dhall-haskell/master/image-dhall/latest/download/1/docker-image-dhall.tar.gz](https://hydra.dhall-lang.org/job/dhall-haskell/master/image-dhall/latest/download/1/docker-image-dhall.tar.gz) +* [https://hydra.dhall-lang.org/job/dhall-haskell/master/image-dhall-bash/latest/download/1/docker-image-dhall-bash.tar.gz](https://hydra.dhall-lang.org/job/dhall-haskell/master/image-dhall-bash/latest/download/1/docker-image-dhall-bash.tar.gz) +* [https://hydra.dhall-lang.org/job/dhall-haskell/master/image-dhall-json/latest/download/1/docker-image-dhall-json.tar.gz](https://hydra.dhall-lang.org/job/dhall-haskell/master/image-dhall-json/latest/download/1/docker-image-dhall-json.tar.gz) +* [https://hydra.dhall-lang.org/job/dhall-haskell/master/image-dhall-lsp-server/latest/download/1/docker-image-dhall-lsp-server.tar.gz](https://hydra.dhall-lang.org/job/dhall-haskell/master/image-dhall-lsp-server/latest/download/1/docker-image-dhall-lsp-server.tar.gz) +* [https://hydra.dhall-lang.org/job/dhall-haskell/master/image-dhall-nix/latest/download/1/docker-image-dhall-nix.tar.gz](https://hydra.dhall-lang.org/job/dhall-haskell/master/image-dhall-nix/latest/download/1/docker-image-dhall-nix.tar.gz) +* [https://hydra.dhall-lang.org/job/dhall-haskell/master/image-dhall-text/latest/download/1/docker-image-dhall-text.tar.gz](https://hydra.dhall-lang.org/job/dhall-haskell/master/image-dhall-text/latest/download/1/docker-image-dhall-text.tar.gz) + +You can then load and run one of these archives like so: + +``` +$ NAME="dhall" + +$ curl --location --remote-name "https://hydra.dhall-lang.org/job/dhall-haskell/master/image-${NAME}/latest/download/1/docker-image-${NAME}.tar.gz" + +$ docker load < "docker-image-${NAME}.tar.gz" +... +Loaded image: dhall:vx95jiijmp2i07f5ynl8h6sllf34jggz + +$ docker run -i dhall:vx95jiijmp2i07f5ynl8h6sllf34jggz dhall <<< '2 + 2' +4 +``` + +These instructions also work for any pull request, too, by replacing `master` +with the pull request number for any of the above URLs. + ## Building from source For all of the following instructions, make sure to first check out the diff --git a/nix/shared.nix b/nix/shared.nix index 72481cf..88d5fb1 100644 --- a/nix/shared.nix +++ b/nix/shared.nix @@ -596,20 +596,34 @@ let # Benchmark dependencies aren't added by default (pkgs.haskell.lib.doBenchmark drv).env; + possibly-static = { + dhall = makeStaticIfPossible "dhall" ; + dhall-bash = makeStaticIfPossible "dhall-bash" ; + dhall-json = makeStaticIfPossible "dhall-json" ; + dhall-lsp-server = makeStaticIfPossible "dhall-lsp-server"; + dhall-nix = makeStaticIfPossible "dhall-nix" ; + dhall-text = makeStaticIfPossible "dhall-text" ; + }; + + toDockerImage = name: + let + image = + pkgs.dockerTools.buildImage { + inherit name; + + contents = [ possibly-static."${name}" ]; + }; + + in + pkgs.runCommand "image-${name}" {} '' + ${pkgs.coreutils}/bin/mkdir --parents "$out/nix-support" + ${pkgs.coreutils}/bin/ln --symbolic '${image}' "$out/docker-image-${name}.tar.gz" + echo "file binary-dist $out/docker-image-${name}.tar.gz" >> $out/nix-support/hydra-build-products + ''; + in rec { - inherit trivial; - - inherit pkgs; - - possibly-static = { - dhall = makeStaticIfPossible "dhall" ; - dhall-bash = makeStaticIfPossible "dhall-bash" ; - dhall-json = makeStaticIfPossible "dhall-json" ; - dhall-lsp-server = makeStaticIfPossible "dhall-lsp-server"; - dhall-nix = makeStaticIfPossible "dhall-nix" ; - dhall-text = makeStaticIfPossible "dhall-text" ; - }; + inherit trivial pkgs possibly-static; tarball-dhall = makeTarball "dhall" ; tarball-dhall-bash = makeTarball "dhall-bash" ; @@ -632,6 +646,13 @@ in shell-dhall-text = toShell pkgs.haskell.packages."${compiler}".dhall-text ; shell-dhall-try = toShell pkgs.haskell.packages."${compiler}".dhall-try ; + image-dhall = toDockerImage "dhall" ; + image-dhall-bash = toDockerImage "dhall-bash" ; + image-dhall-json = toDockerImage "dhall-json" ; + image-dhall-lsp-server = toDockerImage "dhall-lsp-server"; + image-dhall-nix = toDockerImage "dhall-nix" ; + image-dhall-text = toDockerImage "dhall-text" ; + test-dhall = pkgs.mkShell { buildInputs = diff --git a/release.nix b/release.nix index 77374c5..35e9703 100644 --- a/release.nix +++ b/release.nix @@ -85,4 +85,13 @@ in linux-dhall-lsp-server = shared_linux.possibly-static.dhall-lsp-server; linux-dhall-nix = shared_linux.possibly-static.dhall-nix; linux-dhall-text = shared_linux.possibly-static.dhall-text; + + inherit (shared_linux) + image-dhall + image-dhall-bash + image-dhall-json + image-dhall-lsp-server + image-dhall-nix + image-dhall-text + ; }