diff options
Diffstat (limited to 'nix/default.nix')
-rw-r--r-- | nix/default.nix | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/nix/default.nix b/nix/default.nix new file mode 100644 index 0000000..de427db --- /dev/null +++ b/nix/default.nix @@ -0,0 +1,102 @@ +{ pkgs, self }: +let + version = "unstable"; + shortSHA = self.shortRev or self.dirtyShortRev; + fullSHA = self.rev or self.dirtyRev; + mkDocker = type: { server, website }: + let + PORT = 80; + in + pkgs.dockerTools.${type} { + name = "registry.fly.io/alanpearce-eu"; + tag = fullSHA; + contents = [ + (pkgs.writeTextDir "config.toml" (builtins.readFile ./../config.toml)) + website + ]; + config = { + Cmd = [ "${server}/bin/server" ]; + Env = [ + "PRODUCTION=true" + "LISTEN_ADDRESS=::" + "PORT=${builtins.toString PORT}" + ]; + 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/build + ./../internal + ]; + }; + modules = ./gomod2nix.toml; + subPackages = [ "cmd/build" ]; + }; + website = runCommandLocal "build" + { + src = with lib.fileset; toSource { + root = ./..; + fileset = unions [ + ./../config.toml + ./../content + ./../static + ./../templates + ]; + }; + } '' + ${builder}/bin/build -s $src -d $out/website + ''; + server = buildGoApplication { + pname = "server"; + inherit version; + CGO_ENABLED = 0; + src = with lib.fileset; toSource { + root = ./..; + fileset = unions [ + ./../go.mod + ./../go.sum + ./../cmd/server + ./../internal + ]; + }; + modules = ./gomod2nix.toml; + subPackages = [ "cmd/server" ]; + ldflags = [ + "-s" + "-w" + "-X" + "website/internal/server.CommitSHA=${fullSHA}" + "-X" + "website/internal/server.ShortSHA=${shortSHA}" + ]; + }; + docker-stream = mkDockerStream { inherit server website; }; + docker-stream-aarch64-linux = mkDockerStream { + inherit website; server = (self.packages.aarch64-linux.server); + }; + docker-stream-x86_64-linux = mkDockerStream { + inherit website; server = (self.packages.x86_64-linux.server); + }; + docker-image = mkDockerImage { inherit server website; }; + docker-image-aarch64-linux = mkDockerImage { + inherit website; server = (self.packages.aarch64-linux.server); + }; + docker-image-x86_64-linux = mkDockerImage { + inherit website; server = (self.packages.x86_64-linux.server); + }; +} |