aboutsummaryrefslogtreecommitdiff
path: root/flake.nix
blob: 5107e05ba78b51ffcd05a290b5f73470ffaa93af (plain) (blame)
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
{
  description = "Tricot, a reverse proxy with consul integration";

  # Nixpkgs 24.05 as of 2024-11-08, has rustc v1.77.2
  inputs.nixpkgs.url =
    "github:NixOS/nixpkgs/551ba0fa7653afb9d590db225c3bcbccf68931c0";
  inputs.cargo2nix = {
    # cargo2nix as of 2024-04-25
    # NB: upgrading to a more recent commit of cargo2nix will not work (as of 2024-11-08),
    # because the patch making openssl-sys cross-compilation work has been reverted.
    # (patch: https://github.com/cargo2nix/cargo2nix/pull/237,
    #  revert: https://github.com/cargo2nix/cargo2nix/commit/cfd086deb565314f3a11b5bb25807a3ce17315d4)
    url = "github:cargo2nix/cargo2nix/1efb03f2f794ad5eed17e807e858c4da001dbc3e";

    # Rust overlay as of 2024-11-08
    inputs.rust-overlay.url =
      "github:oxalica/rust-overlay/d52f2a4c103a0acf09ded857b9e2519ae2360e59";

    inputs.nixpkgs.follows = "nixpkgs";
  };

  outputs = { self, nixpkgs, cargo2nix }:
  let
    targetHost = "x86_64-unknown-linux-musl";
    pkgs = import nixpkgs {
      system = "x86_64-linux";
      crossSystem = {
        config = targetHost;
        isStatic = true;
      };
      overlays = [ cargo2nix.overlays.default ];
    };
    packageFun = import ./Cargo.nix;
    rustVersion = "1.77.2";

    compile = args: compileMode:
      let
        packageSet = pkgs.rustBuilder.makePackageSet ({
          inherit packageFun rustVersion;
          target = targetHost;
        } // args);
      in
        packageSet.workspace.tricot {
          inherit compileMode;
        };
  in
  {
    test.x86_64-linux.tricot = compile { release = false; } "test";
    debug.x86_64-linux.tricot = compile { release = false; } "build";
    packages.x86_64-linux.tricot = compile { release = true; } "build";
    packages.x86_64-linux.default = self.packages.x86_64-linux.tricot;

    docker = pkgs.dockerTools.buildImage {
      name = "tricot";
      config = {
        contents = [ pkgs.cacert ];
        Cmd = [ "${self.packages.x86_64-linux.default}/bin/tricot" ];
      };
    };
  };
}