|
15 | 15 | };
|
16 | 16 | url = "github:oxalica/rust-overlay";
|
17 | 17 | };
|
| 18 | + |
| 19 | + crane = { |
| 20 | + url = "github:ipetkov/crane"; |
| 21 | + inputs.nixpkgs.follows = "nixpkgs"; |
| 22 | + }; |
| 23 | + |
| 24 | + # The premise is this is the "default" and if you want to do a debug build, |
| 25 | + # pass it in as an arg. |
| 26 | + # like so `nix build --override-input debugBuild github:boolean-option/true` |
| 27 | + debugBuild.url = "github:boolean-option/false/d06b4794a134686c70a1325df88a6e6768c6b212"; |
18 | 28 | };
|
19 |
| - outputs = { self, devenv, flake-utils, nixpkgs, rust-overlay, ... } @ inputs: |
20 |
| - flake-utils.lib.eachDefaultSystem |
| 29 | + outputs = { self, devenv, flake-utils, nixpkgs, rust-overlay, crane, ... } @ inputs: |
| 30 | + (flake-utils.lib.eachDefaultSystem |
21 | 31 | (system:
|
22 | 32 | let
|
| 33 | + features = "--all-features"; |
23 | 34 | overlays = [ (import rust-overlay) ];
|
24 | 35 | pkgs = import nixpkgs {
|
25 | 36 | inherit overlays system;
|
26 | 37 | };
|
| 38 | + stdenv = pkgs.stdenvAdapters.useMoldLinker pkgs.stdenv; |
27 | 39 | rustPlatform = pkgs.makeRustPlatform {
|
28 | 40 | cargo = pkgs.rust-bin.stable.latest.minimal;
|
29 | 41 | rustc = pkgs.rust-bin.stable.latest.minimal;
|
| 42 | + inherit stdenv; |
30 | 43 | };
|
31 |
| - baseDependencies = with pkgs; [ |
| 44 | + |
| 45 | + craneLib = (crane.mkLib pkgs).overrideToolchain pkgs.rust-bin.stable.latest.minimal; |
| 46 | + buildInputs = with pkgs; [ |
32 | 47 | openssl
|
33 |
| - pkg-config |
34 |
| - protobuf |
35 | 48 | sqlite
|
36 | 49 | zlib
|
37 | 50 | ];
|
38 | 51 |
|
39 |
| - cargoConfig = builtins.fromTOML (builtins.readFile ./.cargo/config.toml); # TODO: Set the target CPU conditionally |
40 |
| - cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml); |
| 52 | + nativeBuildInputs = with pkgs; [ |
| 53 | + protobuf |
| 54 | + pkg-config |
| 55 | + rustPlatform.bindgenHook |
| 56 | + ]; |
| 57 | + |
41 | 58 | src = pkgs.lib.cleanSourceWith {
|
42 | 59 | src = pkgs.lib.cleanSource ./.;
|
43 | 60 | filter = name: type:
|
44 | 61 | let baseName = baseNameOf (toString name);
|
45 | 62 | in !(baseName == "flake.lock" || pkgs.lib.hasSuffix ".nix" baseName);
|
46 | 63 | };
|
47 |
| - version = cargoToml.workspace.package.version; |
48 | 64 |
|
49 |
| - basePackage = { |
50 |
| - inherit version src; |
| 65 | + commonArgs = { |
| 66 | + inherit src stdenv buildInputs nativeBuildInputs; |
| 67 | + |
| 68 | + strictDeps = true; |
51 | 69 |
|
52 | 70 | meta = {
|
53 | 71 | description = "ActivityPub-federated microblogging";
|
54 | 72 | homepage = "https://joinkitsune.org";
|
55 | 73 | };
|
56 | 74 |
|
57 |
| - cargoLock = { |
58 |
| - lockFile = ./Cargo.lock; |
59 |
| - allowBuiltinFetchGit = true; |
60 |
| - }; |
| 75 | + OPENSSL_NO_VENDOR = 1; |
| 76 | + NIX_OUTPATH_USED_AS_RANDOM_SEED = "aaaaaaaaaa"; |
| 77 | + cargoExtraArgs = "--locked ${features}"; |
| 78 | + } // (pkgs.lib.optionalAttrs inputs.debugBuild.value { |
| 79 | + # do a debug build, as `dev` is the default debug profile |
| 80 | + CARGO_PROFILE = "dev"; |
| 81 | + }); |
61 | 82 |
|
62 |
| - nativeBuildInputs = baseDependencies; |
63 |
| - |
64 |
| - PKG_CONFIG_PATH = "${pkgs.openssl.dev}/lib/pkgconfig"; # Not sure why this is broken but it is |
65 |
| - RUSTFLAGS = builtins.concatStringsSep " " cargoConfig.build.rustflags; # Oh god help. |
66 |
| - |
67 |
| - checkFlags = [ |
68 |
| - # Depend on creating an HTTP client and that reads from the systems truststore |
69 |
| - # Because nix is fully isolated, these types of tests fail |
70 |
| - # |
71 |
| - # Some (most?) of these also depend on the network? Not good?? |
72 |
| - "--skip=activitypub::fetcher::test::federation_allow" |
73 |
| - "--skip=activitypub::fetcher::test::federation_deny" |
74 |
| - "--skip=activitypub::fetcher::test::fetch_actor" |
75 |
| - "--skip=activitypub::fetcher::test::fetch_note" |
76 |
| - "--skip=resolve::post::test::parse_mentions" |
77 |
| - "--skip=webfinger::test::fetch_qarnax_ap_id" |
78 |
| - "--skip=basic_request" |
79 |
| - "--skip=json_request" |
80 |
| - ]; |
81 |
| - }; |
| 83 | + cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml); |
| 84 | + version = cargoToml.workspace.package.version; |
| 85 | + |
| 86 | + cargoArtifacts = craneLib.buildDepsOnly (commonArgs // { |
| 87 | + pname = "kitsune-workspace"; |
| 88 | + src = craneLib.cleanCargoSource src; |
| 89 | + }); |
82 | 90 | in
|
83 | 91 | {
|
84 | 92 | formatter = pkgs.nixpkgs-fmt;
|
85 | 93 | packages = rec {
|
86 |
| - # Hack to make latest devenv work |
87 |
| - devenv-up = self.devShells.${system}.default.config.procfileScript; |
88 |
| - |
89 | 94 | default = main;
|
90 | 95 |
|
91 |
| - cli = rustPlatform.buildRustPackage (basePackage // { |
| 96 | + cli = craneLib.buildPackage (commonArgs // { |
92 | 97 | pname = "kitsune-cli";
|
93 |
| - cargoBuildFlags = "-p kitsune-cli"; |
| 98 | + cargoExtraArgs = commonArgs.cargoExtraArgs + " --bin kitsune-cli"; |
| 99 | + inherit cargoArtifacts; |
| 100 | + doCheck = false; |
| 101 | + }); |
| 102 | + |
| 103 | + mrf-tool = craneLib.buildPackage (commonArgs // { |
| 104 | + pname = "mrf-tool"; |
| 105 | + cargoExtraArgs = commonArgs.cargoExtraArgs + " --bin mrf-tool"; |
| 106 | + inherit cargoArtifacts; |
| 107 | + doCheck = false; |
94 | 108 | });
|
95 | 109 |
|
96 |
| - main = rustPlatform.buildRustPackage (basePackage // { |
| 110 | + main = craneLib.buildPackage (commonArgs // rec { |
97 | 111 | pname = "kitsune";
|
98 |
| - buildFeatures = [ "meilisearch" "oidc" ]; |
99 |
| - cargoBuildFlags = "-p kitsune"; |
| 112 | + cargoExtraArgs = commonArgs.cargoExtraArgs + " --bin kitsune --bin kitsune-job-runner"; |
| 113 | + inherit cargoArtifacts; |
| 114 | + doCheck = false; |
100 | 115 | });
|
101 | 116 |
|
102 | 117 | frontend = pkgs.mkYarnPackage {
|
103 | 118 | inherit version;
|
104 |
| - |
| 119 | + packageJSON = "${src}/kitsune-fe/package.json"; |
| 120 | + yarnLock = "${src}/kitsune-fe/yarn.lock"; |
105 | 121 | src = "${src}/kitsune-fe";
|
106 | 122 |
|
107 | 123 | buildPhase = ''
|
| 124 | + export HOME=$(mktemp -d) |
108 | 125 | yarn --offline build
|
109 | 126 | '';
|
110 | 127 |
|
|
131 | 148 | rust-bin.stable.latest.default
|
132 | 149 | ]
|
133 | 150 | ++
|
134 |
| - baseDependencies; |
| 151 | + buildInputs ++ nativeBuildInputs; |
135 | 152 |
|
136 | 153 | enterShell = ''
|
137 | 154 | export PG_HOST=127.0.0.1
|
|
171 | 188 | default = kitsune;
|
172 | 189 | kitsune = (import ./module.nix);
|
173 | 190 | };
|
| 191 | + }) // { |
| 192 | + nixci.default = { |
| 193 | + debug = { |
| 194 | + dir = "."; |
| 195 | + overrideInputs.debugBuild = "github:boolean-option/true/6ecb49143ca31b140a5273f1575746ba93c3f698"; |
| 196 | + }; |
| 197 | + }; |
174 | 198 | };
|
175 | 199 | }
|
0 commit comments