{ pkgs, self }: let version = self.shortRev or self.dirtyShortRev or "unstable-${self.lastModified}"; dockerTag = self.rev or self.dirtyRev or "unstable-${self.lastModified}"; mkDocker = type: server: let PORT = 3000; in pkgs.dockerTools.${type} { name = "registry.fly.io/alanpearce-eu"; tag = dockerTag; contents = [ (pkgs.writeTextDir "config.toml" (builtins.readFile ./../config.toml)) ]; config = { Cmd = [ "${server}/bin/website" ]; Env = [ "PRODUCTION=true" "LISTEN_ADDRESS=::" "PORT=${builtins.toString PORT}" "ROOT=public" ]; ExposedPorts = { "${builtins.toString PORT}/tcp" = { }; }; }; }; mkDockerStream = mkDocker "streamLayeredImage"; mkDockerImage = mkDocker "buildLayeredImage"; in with pkgs; rec{ default = server; builder = buildGoApplication { pname = "website-builder"; inherit version; CGO_ENABLED = 0; src = with lib.fileset; toSource { root = ./..; fileset = unions [ ./../go.mod ./../go.sum ./../cmd ./../internal ]; }; modules = ./gomod2nix.toml; subPackages = [ "cmd/build" ]; }; server = buildGoApplication { pname = "website"; inherit version; CGO_ENABLED = 0; src = with lib.fileset; toSource { root = ./..; fileset = unions [ ./../go.mod ./../go.sum ./../server.go ./../internal ./../config.toml ./../content ./../static ./../templates ]; }; nativeBuildInputs = [ builder ]; prePatch = '' ${builder}/bin/build ''; modules = ./gomod2nix.toml; ldflags = [ "-s" "-w" "-X" "main.Commit=${version}" ]; }; docker-stream = mkDockerStream server; docker-stream-aarch64-linux = mkDockerStream (self.packages.aarch64-linux.server); docker-stream-x86_64-linux = mkDockerStream (self.packages.x86_64-linux.server); docker-image = mkDockerImage server; docker-image-aarch64-linux = mkDockerImage (self.packages.aarch64-linux.server); docker-image-x86_64-linux = mkDockerImage (self.packages.x86_64-linux.server); }