atagen

macltok

public
Star0
Watch0
55a1b82528146aa58ea1bc612190c22e1915289e
3
ssh://brewery@pls.lobotomise.me:33/atagen/macltok.git
flake.nixNix159 lines5.0 KB
1
{
2
  inputs = {
3
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
4
    fenix = {
5
      url = "github:nix-community/fenix";
6
      inputs.nixpkgs.follows = "nixpkgs";
7
    };
8
  };
9
10
  outputs =
11
    {
12
      self,
13
      nixpkgs,
14
      fenix,
15
    }:
16
    let
17
      forAllSystems = nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed;
18
      webManifest = builtins.fromTOML (builtins.readFile ./harness/web/Cargo.toml);
19
      storeFeature = nixpkgs.lib.removePrefix "macltok/" (builtins.head webManifest.features.store);
20
      webLock = builtins.fromTOML (builtins.readFile ./harness/web/Cargo.lock);
21
      lockedVersion =
22
        name: (nixpkgs.lib.findFirst (p: p.name == name) null webLock.package).version;
23
      # wasm-bindgen-test-runner refuses a module built by any other wasm-bindgen version
24
      wasmBindgenCli =
25
        pkgs:
26
        pkgs.buildWasmBindgenCli rec {
27
          src = pkgs.fetchCrate {
28
            pname = "wasm-bindgen-cli";
29
            version = lockedVersion "wasm-bindgen";
30
            hash = "sha256-a7lcXJnnZkYReja+iUO7NqqrWyv3toxnUgQb8s4IS5s=";
31
          };
32
          cargoDeps = pkgs.rustPlatform.fetchCargoVendor {
33
            inherit src;
34
            inherit (src) pname version;
35
            hash = "sha256-R1Tas33Ursy8kqsxguAkG0ZhNed2n5uFTAhw1l2qlLY=";
36
          };
37
        };
38
      wasmToolchain =
39
        system:
40
        let
41
          toolchains = fenix.packages.${system};
42
        in
43
        toolchains.combine [
44
          toolchains.stable.cargo
45
          toolchains.stable.clippy
46
          toolchains.stable.rustc
47
          toolchains.stable.rustfmt
48
          toolchains.stable.rust-src
49
          toolchains.targets.wasm32-unknown-unknown.stable.rust-std
50
        ];
51
    in
52
    {
53
      packages = forAllSystems (
54
        system:
55
        let
56
          pkgs = nixpkgs.legacyPackages.${system};
57
        in
58
        {
59
          default = pkgs.rustPlatform.buildRustPackage {
60
            pname = "macltok";
61
            version = "0.1.0";
62
            src = self;
63
            cargoLock.lockFile = ./Cargo.lock;
64
            preBuild = "export NIX_BUILD_CORES=2";
65
            SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
66
          };
67
        }
68
      );
69
70
      checks = forAllSystems (
71
        system:
72
        let
73
          pkgs = nixpkgs.legacyPackages.${system};
74
          toolchain = wasmToolchain system;
75
          wasmPlatform = pkgs.makeRustPlatform {
76
            cargo = toolchain;
77
            rustc = toolchain;
78
          };
79
          # continuwuity refuses to start without /etc/resolv.conf, which the build sandbox lacks, or with
80
          # stdenv's deliberately bogus SSL_CERT_FILE
81
          sandboxedHomeserver = pkgs.writeShellScriptBin "conduwuit" ''
82
            export SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt
83
            exec ${pkgs.lib.getExe pkgs.bubblewrap} --dev-bind / / --tmpfs /etc \
84
              --ro-bind ${pkgs.writeText "resolv.conf" "nameserver 127.0.0.1\n"} /etc/resolv.conf \
85
              ${pkgs.lib.getExe' pkgs.matrix-continuwuity "conduwuit"} "$@"
86
          '';
87
        in
88
        {
89
          default = self.packages.${system}.default;
90
          sqlite = pkgs.rustPlatform.buildRustPackage {
91
            pname = "macltok-sqlite-check";
92
            version = "0.1.0";
93
            src = self;
94
            cargoLock.lockFile = ./Cargo.lock;
95
            preBuild = "export NIX_BUILD_CORES=2";
96
            buildFeatures = [ "sqlite" ];
97
            nativeBuildInputs = [ pkgs.pkg-config ];
98
            buildInputs = [ pkgs.sqlite ];
99
            SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
100
          };
101
          web = wasmPlatform.buildRustPackage {
102
            pname = "macltok-web-check";
103
            version = "0.1.0";
104
            src = self;
105
            cargoRoot = "harness/web";
106
            cargoLock.lockFile = ./harness/web/Cargo.lock;
107
            nativeBuildInputs = with pkgs; [
108
              (wasmBindgenCli pkgs)
109
              firefox
110
              geckodriver
111
              sandboxedHomeserver
112
              nushell
113
            ];
114
            buildPhase = ''
115
              runHook preBuild
116
              export HOME=$TMPDIR
117
              nu --no-config-file harness/web/run.nu
118
              runHook postBuild
119
            '';
120
            doCheck = false;
121
            installPhase = "touch $out";
122
          };
123
        }
124
      );
125
126
      devShells = forAllSystems (
127
        system:
128
        let
129
          pkgs = nixpkgs.legacyPackages.${system};
130
        in
131
        {
132
          default = pkgs.mkShell {
133
            packages = with pkgs; [
134
              cargo
135
              clippy
136
              pkg-config
137
              rust-analyzer
138
              rustc
139
              rustfmt
140
              sqlite
141
            ];
142
          };
143
          web = pkgs.mkShell {
144
            packages = with pkgs; [
145
              (wasmToolchain system)
146
              (wasmBindgenCli pkgs)
147
              binaryen
148
              brotli
149
              firefox
150
              geckodriver
151
              matrix-continuwuity
152
              nushell
153
            ];
154
            MACLTOK_STORE_FEATURE = storeFeature;
155
          };
156
        }
157
      );
158
    };
159
}