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/`.
49 lines
1.9 KiB
Rust
49 lines
1.9 KiB
Rust
//! Render `branding/agent-configs.svg` → `$OUT_DIR/agent-configs.png`
|
||
//! at compile time so the daemon can `include_bytes!` the PNG without
|
||
//! checking the raster into git (#424 mara: "generate png on the fly
|
||
//! or in build"). The SVG is the source of truth; the PNG is a build
|
||
//! artifact.
|
||
//!
|
||
//! Uses `rsvg-convert` from PATH (librsvg, already available in
|
||
//! nixpkgs and added to the crane derivation's `nativeBuildInputs`
|
||
//! in `flake.nix`). For dev builds outside Nix, install librsvg via
|
||
//! your system package manager (Debian/Ubuntu: `librsvg2-bin`,
|
||
//! macOS: `brew install librsvg`).
|
||
|
||
use std::env;
|
||
use std::path::PathBuf;
|
||
use std::process::Command;
|
||
|
||
const SVG_PATH: &str = "../branding/agent-configs.svg";
|
||
const PNG_NAME: &str = "agent-configs.png";
|
||
// 300×300 to match the existing branding/hyperhive.png, which the
|
||
// Forgejo avatar endpoint accepts without resizing on upload.
|
||
const PX: &str = "300";
|
||
|
||
fn main() {
|
||
// Re-run the build script when either the SVG itself or this
|
||
// script change. We deliberately don't watch every file in
|
||
// `branding/` — only the one PNG we generate.
|
||
println!("cargo:rerun-if-changed=build.rs");
|
||
println!("cargo:rerun-if-changed={SVG_PATH}");
|
||
|
||
let out_dir = PathBuf::from(env::var("OUT_DIR").expect("OUT_DIR set by cargo"));
|
||
let png_path = out_dir.join(PNG_NAME);
|
||
|
||
let status = Command::new("rsvg-convert")
|
||
.args(["--width", PX, "--height", PX, "-o"])
|
||
.arg(&png_path)
|
||
.arg(SVG_PATH)
|
||
.status();
|
||
|
||
match status {
|
||
Ok(s) if s.success() => {}
|
||
Ok(s) => panic!("rsvg-convert exited with {s} rendering {SVG_PATH}"),
|
||
Err(e) => panic!(
|
||
"failed to invoke rsvg-convert: {e}\n\
|
||
install librsvg (Debian/Ubuntu: librsvg2-bin, macOS: brew install librsvg, \
|
||
NixOS: pkgs.librsvg). The Nix derivation already pulls it in via \
|
||
flake.nix → craneLib.buildPackage.nativeBuildInputs.",
|
||
),
|
||
}
|
||
}
|