atagen

macltok

public
Star0
Watch0
dc609022bb53f98a7c12d4f5ae0df872fc521de8
3
ssh://brewery@pls.lobotomise.me:33/atagen/macltok.git
flake.nixNix176 lines5.8 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
            SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
65
          };
66
        }
67
      );
68
69
      checks = forAllSystems (
70
        system:
71
        let
72
          pkgs = nixpkgs.legacyPackages.${system};
73
          toolchain = wasmToolchain system;
74
          wasmPlatform = pkgs.makeRustPlatform {
75
            cargo = toolchain;
76
            rustc = toolchain;
77
          };
78
          # continuwuity refuses to start without /etc/resolv.conf, which the build sandbox lacks, or with
79
          # stdenv's deliberately bogus SSL_CERT_FILE. no exec, run.nu launches through a shell that exits at
80
          # once and would trip --die-with-parent, so this shell stays as the parent run.nu kills
81
          sandboxedHomeserver = pkgs.writeShellScriptBin "conduwuit" ''
82
            export SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt
83
            ${pkgs.lib.getExe pkgs.bubblewrap} --die-with-parent --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
            buildFeatures = [
96
              "sqlite"
97
              "mirror"
98
            ];
99
            nativeBuildInputs = [ pkgs.pkg-config ];
100
            buildInputs = [ pkgs.sqlite ];
101
            SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
102
          };
103
          wasm = wasmPlatform.buildRustPackage {
104
            pname = "macltok-wasm-check";
105
            version = "0.1.0";
106
            src = self;
107
            cargoLock.lockFile = ./Cargo.lock;
108
            buildPhase = ''
109
              runHook preBuild
110
              cargo check --offline --frozen --lib --target wasm32-unknown-unknown -j $NIX_BUILD_CORES
111
              cargo check --offline --frozen --lib \
112
                --target wasm32-unknown-unknown --features ${storeFeature},mirror -j $NIX_BUILD_CORES
113
              runHook postBuild
114
            '';
115
            doCheck = false;
116
            installPhase = "touch $out";
117
          };
118
          web = wasmPlatform.buildRustPackage {
119
            pname = "macltok-web-check";
120
            version = "0.1.0";
121
            src = self;
122
            cargoRoot = "harness/web";
123
            cargoLock.lockFile = ./harness/web/Cargo.lock;
124
            nativeBuildInputs = with pkgs; [
125
              (wasmBindgenCli pkgs)
126
              firefox
127
              geckodriver
128
              sandboxedHomeserver
129
              nushell
130
            ];
131
            buildPhase = ''
132
              runHook preBuild
133
              export HOME=$TMPDIR
134
              nu --no-config-file harness/web/run.nu
135
              runHook postBuild
136
            '';
137
            doCheck = false;
138
            installPhase = "touch $out";
139
          };
140
        }
141
      );
142
143
      devShells = forAllSystems (
144
        system:
145
        let
146
          pkgs = nixpkgs.legacyPackages.${system};
147
        in
148
        {
149
          default = pkgs.mkShell {
150
            packages = with pkgs; [
151
              cargo
152
              clippy
153
              pkg-config
154
              rust-analyzer
155
              rustc
156
              rustfmt
157
              sqlite
158
            ];
159
          };
160
          web = pkgs.mkShell {
161
            packages = with pkgs; [
162
              (wasmToolchain system)
163
              (wasmBindgenCli pkgs)
164
              binaryen
165
              brotli
166
              firefox
167
              geckodriver
168
              matrix-continuwuity
169
              nushell
170
            ];
171
            MACLTOK_STORE_FEATURE = storeFeature;
172
          };
173
        }
174
      );
175
    };
176
}