123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- {
- description = "CDK Flake";
- inputs = {
- nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
- rust-overlay = {
- url = "github:oxalica/rust-overlay";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- };
- };
- fenix = {
- url = "github:nix-community/fenix";
- inputs.nixpkgs.follows = "nixpkgs";
- inputs.rust-analyzer-src.follows = "";
- };
- flake-utils.url = "github:numtide/flake-utils";
- crane = {
- url = "github:ipetkov/crane";
- inputs.nixpkgs.follows = "nixpkgs";
- };
- pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix";
- };
- outputs = { self, nixpkgs, rust-overlay, flake-utils, pre-commit-hooks, crane, fenix, ... }:
- flake-utils.lib.eachDefaultSystem (system:
- let
- overlays = [ (import rust-overlay) ];
- lib = pkgs.lib;
- stdenv = pkgs.stdenv;
- isDarwin = stdenv.isDarwin;
- libsDarwin = with pkgs; lib.optionals isDarwin [
- # Additional darwin specific inputs can be set here
- darwin.apple_sdk.frameworks.Security
- darwin.apple_sdk.frameworks.SystemConfiguration
- ];
- # Dependencies
- pkgs = import nixpkgs {
- inherit system overlays;
- };
- # Toolchains
- # latest stable
- stable_toolchain = pkgs.rust-bin.stable."1.82.0".default.override {
- targets = [ "wasm32-unknown-unknown" ]; # wasm
- extensions = [ "rustfmt" "clippy" "rust-analyzer" ];
- };
- # MSRV stable
- msrv_toolchain = pkgs.rust-bin.stable."1.63.0".default.override {
- targets = [ "wasm32-unknown-unknown" ]; # wasm
- };
- # DB MSRV stable
- db_msrv_toolchain = pkgs.rust-bin.stable."1.66.0".default.override {
- targets = [ "wasm32-unknown-unknown" ]; # wasm
- };
- # Nightly for creating lock files
- nightly_toolchain = pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.default.override {
- extensions = [ "rustfmt" "clippy" "rust-analyzer" ];
- });
- # Common inputs
- envVars = { };
- buildInputs = with pkgs; [
- # Add additional build inputs here
- git
- pkg-config
- curl
- just
- protobuf
- nixpkgs-fmt
- typos
- lnd
- clightning
- bitcoind
- sqlx-cli
- # Needed for github ci
- libz
- ] ++ libsDarwin;
- # WASM deps
- WASMInputs = with pkgs; [
- ];
- craneLib = crane.mkLib pkgs;
- src = craneLib.cleanCargoSource ./.;
- # Common arguments can be set here to avoid repeating them later
- commonArgs = {
- inherit src;
- strictDeps = true;
- buildInputs = [
- # Add additional build inputs here
- pkgs.protobuf
- pkgs.pkg-config
- ] ++ lib.optionals pkgs.stdenv.isDarwin [
- # Additional darwin specific inputs can be set here
- pkgs.libiconv
- ];
- # Additional environment variables can be set directly
- # MY_CUSTOM_VAR = "some value";
- PROTOC = "${pkgs.protobuf}/bin/protoc";
- PROTOC_INCLUDE = "${pkgs.protobuf}/include";
- };
- craneLibLLvmTools = craneLib.overrideToolchain
- (fenix.packages.${system}.complete.withComponents [
- "cargo"
- "llvm-tools"
- "rustc"
- ]);
- cargoArtifacts = craneLib.buildDepsOnly commonArgs;
- individualCrateArgs = commonArgs // {
- inherit cargoArtifacts;
- inherit (craneLib.crateNameFromCargoToml { inherit src; }) version;
- # NB: we disable tests since we'll run them all via cargo-nextest
- doCheck = false;
- };
- fileSetForCrate = crate: lib.fileset.toSource {
- root = ./.;
- fileset = lib.fileset.unions [
- ./Cargo.toml
- ./Cargo.lock
- (craneLib.fileset.commonCargoSources ./crates/cdk)
- (craneLib.fileset.commonCargoSources ./crates/cdk-axum)
- (craneLib.fileset.commonCargoSources ./crates/cdk-cln)
- (craneLib.fileset.commonCargoSources ./crates/cdk-lnd)
- (craneLib.fileset.commonCargoSources ./crates/cdk-fake-wallet)
- (craneLib.fileset.commonCargoSources ./crates/cdk-lnbits)
- (craneLib.fileset.commonCargoSources ./crates/cdk-strike)
- (craneLib.fileset.commonCargoSources ./crates/cdk-phoenixd)
- (craneLib.fileset.commonCargoSources ./crates/cdk-redb)
- (craneLib.fileset.commonCargoSources ./crates/cdk-sqlite)
- ./crates/cdk-sqlite/src/mint/migrations
- ./crates/cdk-sqlite/src/wallet/migrations
- (craneLib.fileset.commonCargoSources crate)
- ];
- };
- cdk-mintd = craneLib.buildPackage (individualCrateArgs // {
- pname = "cdk-mintd";
- name = "cdk-mintd-${individualCrateArgs.version}";
- cargoExtraArgs = "-p cdk-mintd";
- src = fileSetForCrate ./crates/cdk-mintd;
- });
- nativeBuildInputs = with pkgs; [
- #Add additional build inputs here
- ] ++ lib.optionals isDarwin [
- # Additional darwin specific native inputs can be set here
- ];
- in
- {
- checks = {
- # Pre-commit checks
- pre-commit-check =
- let
- # this is a hack based on https://github.com/cachix/pre-commit-hooks.nix/issues/126
- # we want to use our own rust stuff from oxalica's overlay
- _rust = pkgs.rust-bin.stable.latest.default;
- rust = pkgs.buildEnv {
- name = _rust.name;
- inherit (_rust) meta;
- buildInputs = [ pkgs.makeWrapper ];
- paths = [ _rust ];
- pathsToLink = [ "/" "/bin" ];
- postBuild = ''
- for i in $out/bin/*; do
- wrapProgram "$i" --prefix PATH : "$out/bin"
- done
- '';
- };
- in
- pre-commit-hooks.lib.${system}.run {
- src = ./.;
- hooks = {
- rustfmt = {
- enable = true;
- entry = lib.mkForce "${rust}/bin/cargo-fmt fmt --all -- --config format_code_in_doc_comments=true --check --color always";
- };
- nixpkgs-fmt.enable = true;
- typos.enable = true;
- commitizen.enable = true; # conventional commits
- };
- };
- };
- packages = {
- inherit cdk-mintd;
- default = cdk-mintd;
- } // lib.optionalAttrs (!pkgs.stdenv.isDarwin) {
- my-workspace-llvm-coverage = craneLibLLvmTools.cargoLlvmCov (commonArgs // {
- inherit cargoArtifacts;
- });
- };
- apps = {
- cdk-mintd = flake-utils.lib.mkApp {
- drv = cdk-mintd;
- };
- };
- devShells =
- let
- # pre-commit-checks
- _shellHook = (self.checks.${system}.pre-commit-check.shellHook or "");
- # devShells
- msrv = pkgs.mkShell ({
- shellHook = "
- ${_shellHook}
- cargo update -p half --precise 2.2.1
- cargo update -p tokio --precise 1.38.1
- cargo update -p tokio-util --precise 0.7.11
- cargo update -p tokio-stream --precise 0.1.15
- cargo update -p reqwest --precise 0.12.4
- cargo update -p serde_with --precise 3.1.0
- cargo update -p regex --precise 1.9.6
- cargo update -p backtrace --precise 0.3.58
- # For wasm32-unknown-unknown target
- cargo update -p bumpalo --precise 3.12.0
- cargo update -p moka --precise 0.11.1
- cargo update -p triomphe --precise 0.1.11
- cargo update -p url --precise 2.5.2
- ";
- buildInputs = buildInputs ++ WASMInputs ++ [ msrv_toolchain ];
- inherit nativeBuildInputs;
- } // envVars);
- stable = pkgs.mkShell ({
- shellHook = ''${_shellHook}'';
- buildInputs = buildInputs ++ WASMInputs ++ [ stable_toolchain ];
- inherit nativeBuildInputs;
- } // envVars);
- db_shell = pkgs.mkShell ({
- shellHook = ''
- ${_shellHook}
- cargo update -p half --precise 2.2.1
- cargo update -p home --precise 0.5.5
- cargo update -p tokio --precise 1.38.1
- cargo update -p tokio-stream --precise 0.1.15
- cargo update -p serde_with --precise 3.1.0
- cargo update -p reqwest --precise 0.12.4
- cargo update -p url --precise 2.5.2
- cargo update -p allocator-api2 --precise 0.2.18
- '';
- buildInputs = buildInputs ++ WASMInputs ++ [ db_msrv_toolchain ];
- inherit nativeBuildInputs;
- } // envVars);
- nightly = pkgs.mkShell ({
- shellHook = ''
- ${_shellHook}
- # Needed for github ci
- export LD_LIBRARY_PATH=${pkgs.lib.makeLibraryPath [
- pkgs.zlib
- ]}:$LD_LIBRARY_PATH
- '';
- buildInputs = buildInputs ++ [ nightly_toolchain ];
- inherit nativeBuildInputs;
- } // envVars);
- in
- {
- inherit msrv stable nightly db_shell;
- default = stable;
- };
- }
- );
- }
|