bankserver_rust/package.nix
2025-03-03 11:11:58 +01:00

89 lines
2.0 KiB
Nix

{
lib,
rustPlatform,
stdenv,
redocly,
yq-go,
targetPlatform,
pkgsBuildBuild,
rev ? "dirty",
}:
let
src = lib.fileset.toSource {
root = ./.;
fileset =
with lib.fileset;
intersection (gitTracked ./.) (unions [
(fileFilter (
file:
file.type == "directory"
|| file.hasExt "rs"
|| file.hasExt "toml"
|| file.name == "Cargo.lock"
|| file.hasExt "sql"
|| file.name == "openapi-def.yaml"
|| file.hasExt "html"
) ./.)
]);
};
cargoDeps = rustPlatform.importCargoLock {
lockFile = ./Cargo.lock;
outputHashes = {
"dbmigrator-0.4.4-alpha" = "sha256-Nwxw74IyZeZ9dODb+aneQmuQe0grO+g45B3zv1XaihE=";
};
};
schemas = pkgsBuildBuild.stdenv.mkDerivation {
pname = "bankingserver_schemas";
version = "unstable-${rev}";
inherit src cargoDeps;
cargoBuildType = "debug";
# "CARGO_TARGET_${stdenv.hostPlatform.rust.cargoEnvVarTarget}_LINKER" =
# "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc";
nativeBuildInputs = [
rustPlatform.cargoSetupHook
rustPlatform.rust.cargo
];
buildPhase = ''
touch openapi.json
cargo build --bin generate-schemas
target/debug/generate-schemas
runHook postBuild
'';
installPhase = ''
mkdir -p $out/share/bankserver
cp -r schemas $out/share/bankserver/schemas
'';
doCheck = false;
};
in
rustPlatform.buildRustPackage {
pname = "bankingserver";
version = "unstable-${rev}";
inherit src cargoDeps;
nativeBuildInputs = [
schemas
redocly
yq-go
];
preBuild = ''
echo "Schemas: ${schemas}"
cp -r ${schemas}/share/bankserver/schemas schemas
yq eval-all -n 'load("openapi-def.yaml") *n load("schemas/schemas.json")' > openapi-temp.yaml
redocly bundle openapi-temp.yaml -o openapi.json
'';
buildType = "debug";
cargoBuildFlags = "--bin bankserver";
CARGO_BUILD_TARGET = targetPlatform.config;
TARGET_CC = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc";
doCheck = false;
}