Files
sea-orm-generator/flake.nix
2025-04-08 08:13:41 +04:00

160 lines
4.2 KiB
Nix

{
description = "A very basic flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
crane.url = "github:ipetkov/crane";
flake-utils.url = "github:numtide/flake-utils";
process-compose-wrapper = {
url = "git+https://gitlab.scug.io/Nikkuss/process-compose-wrapper.git?ref=dev";
};
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
advisory-db = {
url = "github:rustsec/advisory-db";
flake = false;
};
};
outputs =
{
self,
nixpkgs,
crane,
flake-utils,
process-compose-wrapper,
rust-overlay,
advisory-db,
...
}:
flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ (import rust-overlay) ];
};
process-compose = process-compose-wrapper.lib.mkLib pkgs;
inherit (pkgs) lib;
craneLib = (crane.mkLib pkgs).overrideToolchain (
p:
p.rust-bin.stable.latest.default.override {
extensions = [ "llvm-tools-preview" ];
}
);
unfilteredRoot = ./.; # The original, unfiltered source
src = lib.fileset.toSource {
root = unfilteredRoot;
fileset = lib.fileset.unions [
# Default files from crane (Rust and cargo files)
(craneLib.fileset.commonCargoSources unfilteredRoot)
./.cargo/audit.toml
./templates
];
};
commonArgs = {
inherit src;
strictDeps = true;
doCheck = false;
};
cargoArtifacts = craneLib.buildDepsOnly commonArgs;
generator = craneLib.buildPackage (
commonArgs
// {
inherit cargoArtifacts;
}
);
in
rec {
checks = {
# inherit generator;
clippy = craneLib.cargoClippy (
commonArgs
// {
inherit cargoArtifacts;
cargoClippyExtraArgs = "--all-targets -- --deny warnings";
}
);
fmt = craneLib.cargoFmt {
inherit src;
};
audit = craneLib.cargoAudit {
inherit src advisory-db;
};
nextest = craneLib.cargoNextest (
commonArgs
// {
inherit cargoArtifacts;
partitions = 1;
partitionType = "count";
cargoNextestPartitionsExtraArgs = "--no-tests=pass";
}
);
crateCoverage = craneLib.cargoTarpaulin (
commonArgs
// {
inherit cargoArtifacts;
}
);
};
packages = {
process-compose = process-compose.mkWrapper {
name = "process-compose";
config = (import ./process-compose.nix { inherit pkgs; });
# enableTui = true;
modules = [
(process-compose.mkPostgres {
name = "postgres";
initialDatabases = [
{
name = "db";
user = "root";
password = "root";
}
];
})
(process-compose.mkRedis {
name = "redis";
})
];
};
llvm-coverage = craneLib.cargoLlvmCov (
commonArgs
// {
inherit cargoArtifacts;
}
);
inherit generator;
};
devShells.default = craneLib.devShell {
checks = self.checks.${system};
DATABASE_URL = "postgres://root:root@localhost/db";
REDIS_HOST = "localhost:6379";
MIGRATION_DIR = "crates/server/migration";
RUSTFLAGS = "-Clinker=clang -Clink-arg=-fuse-ld=mold";
packages = with pkgs; [
sea-orm-cli
cargo-watch
llvmPackages.clang
llvmPackages.bintools
mold
cargo-nextest
cargo-llvm-cov
cargo-audit
cargo-tarpaulin
];
};
}
);
}