atagen

macltok

public
Star0
Watch0
6db49c0ecf71cdcf132041e6ca6e135c711a0b33
3
ssh://brewery@pls.lobotomise.me:33/atagen/macltok.git
flake.nixNix173 lines5.5 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
          wasm = wasmPlatform.buildRustPackage {
102
            pname = "macltok-wasm-check";
103
            version = "0.1.0";
104
            src = self;
105
            cargoLock.lockFile = ./Cargo.lock;
106
            buildPhase = ''
107
              runHook preBuild
108
              cargo check --offline --frozen --lib \
109
                --target wasm32-unknown-unknown --features ${storeFeature},mirror -j 2
110
              runHook postBuild
111
            '';
112
            doCheck = false;
113
            installPhase = "touch $out";
114
          };
115
          web = wasmPlatform.buildRustPackage {
116
            pname = "macltok-web-check";
117
            version = "0.1.0";
118
            src = self;
119
            cargoRoot = "harness/web";
120
            cargoLock.lockFile = ./harness/web/Cargo.lock;
121
            nativeBuildInputs = with pkgs; [
122
              (wasmBindgenCli pkgs)
123
              firefox
124
              geckodriver
125
              sandboxedHomeserver
126
              nushell
127
            ];
128
            buildPhase = ''
129
              runHook preBuild
130
              export HOME=$TMPDIR
131
              nu --no-config-file harness/web/run.nu
132
              runHook postBuild
133
            '';
134
            doCheck = false;
135
            installPhase = "touch $out";
136
          };
137
        }
138
      );
139
140
      devShells = forAllSystems (
141
        system:
142
        let
143
          pkgs = nixpkgs.legacyPackages.${system};
144
        in
145
        {
146
          default = pkgs.mkShell {
147
            packages = with pkgs; [
148
              cargo
149
              clippy
150
              pkg-config
151
              rust-analyzer
152
              rustc
153
              rustfmt
154
              sqlite
155
            ];
156
          };
157
          web = pkgs.mkShell {
158
            packages = with pkgs; [
159
              (wasmToolchain system)
160
              (wasmBindgenCli pkgs)
161
              binaryen
162
              brotli
163
              firefox
164
              geckodriver
165
              matrix-continuwuity
166
              nushell
167
            ];
168
            MACLTOK_STORE_FEATURE = storeFeature;
169
          };
170
        }
171
      );
172
    };
173
}