summary refs log tree commit diff
path: root/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix71
1 files changed, 71 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..2326526
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,71 @@
+{
+  inputs = {
+    nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05";
+    flake-utils.url = "github:numtide/flake-utils";
+
+    rust-overlay = {
+      url = "github:oxalica/rust-overlay";
+      inputs = {
+        nixpkgs.follows = "nixpkgs";
+        flake-utils.follows = "flake-utils";
+      };
+    };
+    crane = {
+      url = "github:ipetkov/crane";
+      inputs = {
+        nixpkgs.follows = "nixpkgs";
+        flake-utils.follows = "flake-utils";
+        rust-overlay.follows = "rust-overlay";
+      };
+    };
+  };
+  outputs = { self, nixpkgs, flake-utils, rust-overlay, crane }:
+    flake-utils.lib.eachDefaultSystem
+      (system:
+        let
+          overlays = [ (import rust-overlay) ];
+          pkgs = import nixpkgs {
+            inherit system overlays;
+          };
+          craneLib = crane.lib.${system};
+          src = craneLib.cleanCargoSource (craneLib.path ./.);
+          nativeBuildInputs = with pkgs; [ rust-bin.stable.latest.default pkg-config ];
+          buildInputs = with pkgs; [ openssl sqlite ];
+          commonArgs = {
+            inherit src nativeBuildInputs buildInputs;
+          };
+          cargoArtifacts = craneLib.buildDepsOnly commonArgs;
+          bin = craneLib.buildPackage (commonArgs // { inherit cargoArtifacts; });
+          dockerImage = pkgs.dockerTools.streamLayeredImage {
+            name = "vavbot";
+            tag = "latest";
+            contents = [ bin pkgs.cacert ];
+            config = {
+              Cmd = [ "${bin}/bin/vavbot" ];
+            };
+          };
+        in
+        with pkgs;
+        {
+          checks = {
+            inherit bin;
+            fmt = craneLib.cargoFmt { inherit src; };
+            tests = craneLib.cargoNextest (commonArgs // {
+              inherit cargoArtifacts;
+            });
+            clippy = craneLib.cargoClippy (commonArgs // {
+              inherit cargoArtifacts;
+            });
+          };
+          packages = {
+            inherit bin dockerImage;
+            default = bin;
+          };
+          devShells.default = mkShell {
+            inputsFrom = [ bin ];
+            buildInputs = [ pkgs.cargo-nextest pkgs.dive pkgs.docker ];
+          };
+        }
+      );
+}
+