nix/default.nix (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | { pkgs, self }:
let
revision = "${self.lastModifiedDate}-${self.shortRev or self.dirtyShortRev or "dirty"}";
version = self.shortRev or self.dirtyShortRev or "unstable-${self.lastModified}";
mkDocker = server:
let
PORT = 3000;
in
pkgs.dockerTools.streamLayeredImage {
name = "registry.fly.io/alanpearce-eu";
tag = revision;
contents = [ server ];
config = {
Cmd = [ "website" ];
Env = [
"PRODUCTION=true"
"PORT=${builtins.toString PORT}"
"ROOT=public"
];
ExposedPorts = {
"${builtins.toString PORT}/tcp" = { };
};
};
};
in
rec {
default = server;
builder = pkgs.buildGoApplication {
pname = "website-builder";
inherit version;
CGO_ENABLED = 0;
src = with pkgs.lib.fileset; toSource {
root = ./..;
fileset = unions [
./../go.mod
./../go.sum
./../cmd
./../internal
];
};
modules = ./gomod2nix.toml;
subPackages = [ "cmd/build" ];
};
server = pkgs.buildGoApplication {
pname = "website";
inherit version;
CGO_ENABLED = 0;
src = with pkgs.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 = mkDocker server;
docker-aarch64-linux = mkDocker (self.packages.aarch64-linux.server);
docker-x86_64-linux = mkDocker (self.packages.x86_64-linux.server);
fly = docker-x86_64-linux;
}
|