Add a flake package output for the library
`nix build` now works, using `rustPlatform.buildRustPackage` built with the pinned dev toolchain rather than whatever rustc nixpkgs happens to carry, so it compiles with the same compiler `nix develop` and CI do. `cargoLock` points at the repo's own `Cargo.lock` rather than a separately maintained hash. The crate has no `[[bin]]` target — see the "No CLI, and no binary at all" non-goal just added to `GOALS.md` — so the resulting store path comes out empty: `cargoInstallHook` only copies files matching a `[[bin]]` target out of `target/release`, and there is nothing to copy. Verified rather than assumed; the first version of this comment claimed the output held "an rlib and docs", which is not what actually lands in the store path. What `nix build` is good for regardless: it compiles with the pinned toolchain and runs the full suite, doctests included, inside the Nix sandbox with no network — matching the "no credentials needed" property `CLAUDE.md` already claims for `cargo test`, now exercised a second way. Treat it as a build-and-test gate, not a source of an installable artifact. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -43,6 +43,14 @@
|
||||
packages = [ toolchain pkgs.pkg-config pkgs.openssl pkgs.jq ];
|
||||
RUST_SRC_PATH = "${toolchain}/lib/rustlib/src/rust/library";
|
||||
};
|
||||
|
||||
# Built with the pinned dev toolchain, not nixpkgs' own rustc, so a
|
||||
# `nix build` matches what `nix develop` and CI compile with rather
|
||||
# than whatever stable nixpkgs happens to carry.
|
||||
rustPlatform = pkgs.makeRustPlatform {
|
||||
cargo = rustToolchain;
|
||||
rustc = rustToolchain;
|
||||
};
|
||||
in
|
||||
{
|
||||
devShells.default = shellFor rustToolchain;
|
||||
@@ -50,5 +58,25 @@
|
||||
# Verifies the declared MSRV still builds:
|
||||
# nix develop .#msrv --command cargo test
|
||||
devShells.msrv = shellFor msrvToolchain;
|
||||
|
||||
# This is a library with no `[[bin]]` target (see the "No CLI, and
|
||||
# no binary at all" non-goal in GOALS.md), so the output directory
|
||||
# ends up empty: `cargoInstallHook` only copies binaries matching a
|
||||
# `[[bin]]` target out of `target/release`, and there are none to
|
||||
# copy. `nix build` is still meaningful as a build-and-test gate —
|
||||
# it compiles with the pinned toolchain and runs the full suite,
|
||||
# including doctests, inside the Nix sandbox (no network, matching
|
||||
# the "no credentials needed" property in CLAUDE.md) — just not as
|
||||
# a source of an installable artifact.
|
||||
packages.default = rustPlatform.buildRustPackage {
|
||||
pname = "invoiceninjars";
|
||||
version = (builtins.fromTOML (builtins.readFile ./Cargo.toml)).package.version;
|
||||
src = self;
|
||||
cargoLock.lockFile = ./Cargo.lock;
|
||||
nativeBuildInputs = [ pkgs.pkg-config ];
|
||||
buildInputs = [ pkgs.openssl ];
|
||||
# The test suite needs no network (see CLAUDE.md), so the default
|
||||
# `cargo test` checkPhase runs unmodified in the sandboxed build.
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user