flake: replace naersk with crane (#538)
Framework swap, no public API change. - naersk input → crane (`github:ipetkov/crane`); crane is stateless, no nixpkgs.follows needed. - `forAllSystems` exposes `craneLib = crane.mkLib pkgs`, `cargoArtifacts = craneLib.buildDepsOnly` (built once, reused), and a shared `nativeBuildInputs = [ pkgs.librsvg pkgs.git ]` consumed by buildDepsOnly + buildPackage + cargoClippy so the three derivations see the same toolchain shape. - `packages.default = craneLib.buildPackage` (was naersk-lib.buildPackage) with explicit `pname = "hyperhive-workspace"; version = "0.1.0";` — the virtual workspace Cargo.toml has no [package].name so crane needs the hint. - `checks.clippy = craneLib.cargoClippy` (was naersk + overrideAttrs hack). Crane parses `cargoClippyExtraArgs = "--workspace --all-targets -- -D warnings"` correctly; naersk's `mode = "clippy"` used to mangle the `--` separator which is why the old wiring went through overrideAttrs. The whole hack — including `doCheck = false`, `copyTarget = false`, and the swapped buildPhase/installPhase — is now gone. - librsvg native dep (#424) preserved on all three derivations. Added pkgs.git too — naersk auto-included it; crane is more minimal, so hive-c0re's `lifecycle::tests::setup_proposed_*` (which shell out to `git init`+commit) need it explicit to pass under `cargo test` in the sandbox. - build.rs + hive-c0re/Cargo.toml comments updated from "naersk derivation" to "crane derivation". - 3 doc-list-indentation lints in hive-sh4re/src/lib.rs cleaned up (replaced `+`-at-line-start with `and`/`/` so doc continuations don't trigger `clippy::doc_lazy_continuation`). Validated locally: `nix build .#default --fallback` succeeds, all 117 tests pass, all four bins in `result/bin/`.
This commit is contained in:
parent
b652e6a6b0
commit
4b6c733afb
5 changed files with 88 additions and 111 deletions
116
flake.nix
116
flake.nix
|
|
@ -4,10 +4,10 @@
|
|||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
|
||||
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||
naersk = {
|
||||
url = "github:nix-community/naersk";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
# Crane (replaces naersk #538). Stateless — no nixpkgs input to
|
||||
# follow; `crane.mkLib pkgs` returns the lib at whatever pkgs we
|
||||
# pass it (we use the project's pinned nixpkgs).
|
||||
crane.url = "github:ipetkov/crane";
|
||||
treefmt-nix = {
|
||||
url = "github:numtide/treefmt-nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
|
@ -19,7 +19,7 @@
|
|||
self,
|
||||
nixpkgs,
|
||||
nixpkgs-unstable,
|
||||
naersk,
|
||||
crane,
|
||||
treefmt-nix,
|
||||
}:
|
||||
let
|
||||
|
|
@ -45,22 +45,59 @@
|
|||
inherit system;
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
treefmt-eval = treefmt-nix.lib.evalModule pkgs treefmt-config;
|
||||
naersk-lib = pkgs.callPackage naersk { };
|
||||
craneLib = crane.mkLib pkgs;
|
||||
# Build the workspace's dependency tree once, cached as
|
||||
# its own derivation. `buildPackage` and `cargoClippy`
|
||||
# both reuse this via `inherit cargoArtifacts;` so a
|
||||
# workspace-only edit doesn't rebuild deps. Same
|
||||
# `nativeBuildInputs` as the workspace build itself —
|
||||
# build.rs runs during dep-build too (any deps with a
|
||||
# build.rs need rsvg too if they transitively pull it
|
||||
# in; harmless if they don't).
|
||||
cargoArtifacts = craneLib.buildDepsOnly {
|
||||
src = ./.;
|
||||
# Workspace Cargo.toml is virtual (no `[package].name`),
|
||||
# so crane can't auto-derive a name. Spell it out
|
||||
# explicitly here and below — keeps the derivation name
|
||||
# stable across crane bumps + silences the placeholder
|
||||
# warning. Same `pname` everywhere so dep + workspace +
|
||||
# clippy share a clean naming family.
|
||||
pname = "hyperhive-workspace";
|
||||
version = "0.1.0";
|
||||
inherit nativeBuildInputs;
|
||||
};
|
||||
# Shared between buildDepsOnly + buildPackage + cargoClippy
|
||||
# so the three derivations see the same toolchain shape.
|
||||
# librsvg: hive-c0re/build.rs invokes `rsvg-convert` to
|
||||
# render branding/agent-configs.svg → PNG that the daemon
|
||||
# `include_bytes!`s (#424); SVG stays source-of-truth.
|
||||
# git: naersk used to auto-include it; crane is more
|
||||
# minimal, so we add it explicitly so hive-c0re's
|
||||
# `lifecycle::tests::setup_proposed_*` (which shell out to
|
||||
# `git init` + commit) pass under `cargo test` in the
|
||||
# sandbox.
|
||||
nativeBuildInputs = [
|
||||
pkgs.librsvg
|
||||
pkgs.git
|
||||
];
|
||||
}
|
||||
);
|
||||
in
|
||||
{
|
||||
packages = forAllSystems (
|
||||
{ pkgs, naersk-lib, ... }:
|
||||
{
|
||||
default = naersk-lib.buildPackage {
|
||||
pkgs,
|
||||
craneLib,
|
||||
cargoArtifacts,
|
||||
nativeBuildInputs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
default = craneLib.buildPackage {
|
||||
src = ./.;
|
||||
# librsvg ships `rsvg-convert`, which hive-c0re/build.rs
|
||||
# invokes to render branding/agent-configs.svg into the
|
||||
# PNG it embeds via `include_bytes!` (#424). Keeps the
|
||||
# raster out of git — SVG stays source-of-truth, PNG is
|
||||
# a build artifact in $OUT_DIR.
|
||||
nativeBuildInputs = [ pkgs.librsvg ];
|
||||
inherit cargoArtifacts nativeBuildInputs;
|
||||
pname = "hyperhive-workspace";
|
||||
version = "0.1.0";
|
||||
meta.description = "hyperhive workspace (hive-c0re, hive-ag3nt, hive-m1nd)";
|
||||
};
|
||||
# Bundled browser assets — see ./nix/frontend.nix. Output is
|
||||
|
|
@ -201,43 +238,28 @@
|
|||
checks = forAllSystems (
|
||||
{
|
||||
treefmt-eval,
|
||||
pkgs,
|
||||
naersk-lib,
|
||||
craneLib,
|
||||
cargoArtifacts,
|
||||
nativeBuildInputs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
formatting = treefmt-eval.config.build.check self;
|
||||
# Clippy as a check: reuse naersk's vendored-deps environment but
|
||||
# replace the build phase with `cargo clippy --workspace --all-targets
|
||||
# -- -D warnings`. Naersk's own `mode = "clippy"` mangles the `--`
|
||||
# separator, so we go through overrideAttrs instead.
|
||||
clippy =
|
||||
(naersk-lib.buildPackage {
|
||||
src = ./.;
|
||||
# Skip the actual build; we only care about the clippy lint.
|
||||
doCheck = false;
|
||||
copyTarget = false;
|
||||
# hive-c0re/build.rs needs rsvg-convert on PATH (#424);
|
||||
# mirror the runtime derivation's nativeBuildInputs so
|
||||
# clippy's vendored-deps build phase doesn't break on
|
||||
# the missing tool.
|
||||
nativeBuildInputs = [ pkgs.librsvg ];
|
||||
}).overrideAttrs
|
||||
(old: {
|
||||
name = "${old.name}-clippy";
|
||||
nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.clippy ];
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
cargo clippy --workspace --all-targets -- -D warnings
|
||||
runHook postBuild
|
||||
'';
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p $out
|
||||
touch $out/.clippy-passed
|
||||
runHook postInstall
|
||||
'';
|
||||
});
|
||||
# Clippy as a check via crane's first-class `cargoClippy`
|
||||
# builder. Reuses the shared `cargoArtifacts` (deps already
|
||||
# built) and runs `cargo clippy --workspace --all-targets
|
||||
# -- -D warnings` directly — no `overrideAttrs` hack needed,
|
||||
# because crane parses `cargoClippyExtraArgs` correctly
|
||||
# (naersk's `mode = "clippy"` used to mangle the `--`
|
||||
# separator, which is why the old wiring went through
|
||||
# overrideAttrs).
|
||||
clippy = craneLib.cargoClippy {
|
||||
src = ./.;
|
||||
inherit cargoArtifacts nativeBuildInputs;
|
||||
pname = "hyperhive-workspace";
|
||||
version = "0.1.0";
|
||||
cargoClippyExtraArgs = "--workspace --all-targets -- -D warnings";
|
||||
};
|
||||
}
|
||||
);
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue