Skip to content
31 changes: 31 additions & 0 deletions default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,35 @@ in rec {
};
};

dockerImageConfig = args@{exe, name, version, extraContents ? [], extraPaths ? []}:
let
appDirSetupScript = nixpkgs.runCommand "appDirSetupScript.sh" {} ''
mkdir -p $out/var/lib/backend
ln -sft $out/var/lib/backend '${exe}'/*
${nixpkgs.findutils}/bin/find $out/var/lib/backend
'';
in {
name = name;
tag = version;
contents = [ nixpkgs.iana-etc nixpkgs.cacert appDirSetupScript ] ++ extraContents;
keepContentsDirlinks = true;
config = {
Env = [
("PATH=" + builtins.concatStringsSep(":")(extraPaths ++ [
"/var/lib/backend" # put the obelisk project on the path.
"/bin" # put contents on path
] ++ map (pkg: "${pkg}/bin") pkgs.stdenv.initialPath # put common tools in path so docker exec is useful
))
];
Expose = 8000;
Entrypoint = ["/var/lib/backend/backend"];
WorkingDir = "/var/lib/backend";
User = "99:99";
};
};

dockerImage = args: nixpkgs.dockerTools.buildImage (dockerImageConfig args);

serverExe = backend: frontend: assets: optimizationLevel: version:
pkgs.runCommand "serverExe" {} ''
mkdir $out
Expand Down Expand Up @@ -334,6 +363,8 @@ in rec {
exe = serverOn system dummyVersion;
server = args@{ hostName, adminEmail, routeHost, enableHttps, version }:
server (args // { exe = linuxExe version; });
dockerImage = args@{ name, version }:
dockerImage (args // { exe = linuxExe version; });
obelisk = import (base + "/.obelisk/impl") {};
};
haskellPackageSets = {
Expand Down