bankserver_rust/flake.nix
2025-03-07 08:25:51 +01:00

166 lines
4.5 KiB
Nix

{
description = "A very basic flake";
inputs = {
nixpkgs.url = "flake:nixpkgs";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
self,
nixpkgs,
rust-overlay,
}:
let
inherit (nixpkgs) lib;
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"
) ./.)
]);
};
forAllSystems =
function:
nixpkgs.lib.genAttrs
[
"x86_64-linux"
"aarch64-linux"
]
(
system:
function (
import nixpkgs {
inherit system;
overlays = [
(import rust-overlay)
(_: final: overlay final)
];
}
)
);
overlay =
pkgs:
let
rev = self.shortRev or "dirty";
cargoDeps =
platform:
platform.importCargoLock {
lockFile = ./Cargo.lock;
outputHashes = {
"dbmigrator-0.4.4-alpha" = "sha256-Nwxw74IyZeZ9dODb+aneQmuQe0grO+g45B3zv1XaihE=";
};
};
mkRustPlatform =
pkgs: rustVersion:
pkgs.makeRustPlatform {
cargo = rustVersion;
rustc = rustVersion;
};
buildRustVersion = pkgs.pkgsBuildBuild.rust-bin.stable.latest.minimal;
buildRustPlatform = mkRustPlatform pkgs.pkgsBuildBuild buildRustVersion;
schemas = pkgs.pkgsBuildBuild.stdenv.mkDerivation {
pname = "bankingserver_schemas";
version = "unstable-${rev}";
inherit src;
cargoDeps = cargoDeps buildRustPlatform;
cargoBuildType = "debug";
# "CARGO_TARGET_${stdenv.hostPlatform.rust.cargoEnvVarTarget}_LINKER" =
# "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc";
nativeBuildInputs = [
buildRustPlatform.cargoSetupHook
buildRustVersion
];
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;
};
rustVersion = pkgs.pkgsBuildHost.rust-bin.fromRustupToolchain {
channel = "stable";
targets = [
pkgs.pkgsBuildHost.targetPlatform.rust.rustcTarget
pkgs.pkgsBuildHost.buildPlatform.rust.rustcTarget
];
};
rustPlatform = mkRustPlatform pkgs rustVersion;
bankserver = pkgs.callPackage ./package.nix {
inherit
src
rustPlatform
schemas
rev
;
cargoDeps = cargoDeps rustPlatform;
};
in
{
inherit bankserver;
bankserverDocker = pkgs.dockerTools.buildLayeredImage {
name = "bankserver";
# tag = "latest";
created = "now";
contents = [
bankserver
pkgs.catatonit
];
config = {
Env = [ "HOST=::" ];
# Entrypoint = ["/bin/bankserver"];
Entrypoint = [
"/bin/catatonit"
"--"
];
Cmd = [ "/bin/bankserver" ];
ExposedPorts = {
"3845/tcp" = { };
};
};
};
};
in
{
packages = forAllSystems (pkgs: {
default = pkgs.bankserver;
dockerImage = pkgs.bankserverDocker;
dockerImage-cross-aarch64-linux = pkgs.pkgsCross.aarch64-multiplatform.bankserverDocker;
});
devShells = forAllSystems (pkgs: {
default = pkgs.mkShell {
packages = with pkgs; [
hurl
redocly
yq-go
just
];
};
});
};
}