#package-manager

app cargo-nbuild

A Rust builder that uses the nix package manager

3 releases

0.1.2 Jun 19, 2023
0.1.1 Jun 9, 2023
0.1.0 Jun 9, 2023

#131 in #package-manager

Apache-2.0

135KB
3K SLoC

A cargo builder that uses the buildRustCrate from the nix package manager.

This yields the following benefits:

  • Sandbox builds: A malicious dependency in project A cannot alter the filesystem or inject source code into libraries that will affect the build of another project B.
  • Shared cache: If project A has a dependency on some crate, let's say tokio, with features macros and rt, then this builder will cache each dependency individually. So if project B also uses tokio with the same features and version, then the tokio dependency will not be rebuild.
  • Reproducible: Given the same version and targets, any project will build exactly the same on different machines.

Install

cargo install cargo-nbuild

⚠️ The nix package manager needs to be installed on your system.

💡 You also need to enable the new nix command in the user specific configuration or system wide configuration.

Usage

From a Rust project run

cargo nbuild

Missing

This builder is still in early days and is missing features

  • Choosing target: like with cargo build --target ...
  • Choosing workspace package: builds only work when inside the workspace member, and not when you are at the workspace root. Ie the cargo build --package ... equavalent is missing.
  • Remote builds: nix supports remote builds which are not currently possible
  • Custom rust version: it should be possible to change the version of rustc used for the compiles
  • ... other cargo build options

Dependencies

~9–20MB
~264K SLoC