From b6d0f9daf4cf828566a6314af4cc018162e4a2a8 Mon Sep 17 00:00:00 2001
From: v-lafeychine <vincent.lafeychine@proton.me>
Date: Thu, 29 Sep 2022 14:28:34 +0200
Subject: [PATCH] feat(nix): Build Dockerfile from flake Closes #4

Approved-by: aalbert <augustin.albert@bleu-azure.fr>
Approved-by: loutr <loutr@crans.org>

* Apply 1 suggestion(s) to 1 file(s)

* feat(nix): Build Dockerfile from flake
---
 .gitignore     |  2 +-
 .gitlab-ci.yml | 12 +++++++++++-
 flake.nix      | 53 ++++++++++++++++++++++++++++++++++----------------
 3 files changed, 48 insertions(+), 19 deletions(-)

diff --git a/.gitignore b/.gitignore
index cb72b388..74eee1da 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,5 @@
-/target
 /result
+/target
 
 # Supervisé par:
 chatain
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 138d8618..14c1e255 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,14 @@
-image: "vlafeychine/rust"
+image: vlafeychine/rust
+
+variables:
+  CARGO_HOME: "$CI_PROJECT_DIR/.cache/cargo/"
+
+cache:
+  key:
+    files:
+      - Cargo.lock
+  paths:
+    - .cache/cargo/
 
 format:
   script:
diff --git a/flake.nix b/flake.nix
index 1ba235e0..56f9ec60 100644
--- a/flake.nix
+++ b/flake.nix
@@ -10,32 +10,51 @@
   outputs = { self, flake-utils, rust-overlay, nixpkgs }:
     flake-utils.lib.eachDefaultSystem (system:
       let
-        rustPackages = pkgs.rust-bin.nightly.latest;
-        pkgs = import nixpkgs {
-          inherit system;
-          overlays = [ (import rust-overlay) ];
-        };
+        overlays = [ (import rust-overlay) ];
+        pkgs = import nixpkgs { inherit overlays system; };
+        rust = pkgs.rust-bin.nightly.latest;
       in rec {
-        packages.default = pkgs.rustPlatform.buildRustPackage {
-          pname = "proost";
-          version = "0.1.0";
+        packages = {
+          default = pkgs.rustPlatform.buildRustPackage {
+            pname = "proost";
+            version = "0.1.0";
+
+            nativeBuildInputs = [ rust.minimal ];
+
+            src = ./.;
+            cargoLock.lockFile = ./Cargo.lock;
+
+            meta = with pkgs.lib; {
+              description = "A simple proof assistant written in Rust";
+              homepage = "https://gitlab.crans.org/loutr/proost";
+              license = licenses.gpl3;
+            };
+          };
+
+          docker-ci = let
+            rust-ci =
+              rust.minimal.override { extensions = [ "clippy" "rustfmt" ]; };
+          in pkgs.dockerTools.buildImage {
+            name = "proost-ci";
 
-          nativeBuildInputs = [ rustPackages.default ];
+            copyToRoot = pkgs.buildEnv {
+              name = "proost-dependencies";
+              paths = with pkgs; [ bash coreutils gcc openssh rust-ci ];
+            };
 
-          src = ./.;
-          cargoLock.lockFile = ./Cargo.lock;
+            runAsRoot = "mkdir /tmp";
 
-          meta = with pkgs.lib; {
-            description = "A simple proof assistant written in Rust";
-            homepage = "https://gitlab.crans.org/loutr/proost";
-            license = licenses.gpl3;
+            config = {
+              Env =
+                [ "SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" ];
+              Entrypoint = [ "${pkgs.bash}/bin/sh" "-c" ];
+            };
           };
         };
 
         devShells.default = pkgs.mkShell {
           name = "proost-dev";
-          packages = packages.default.nativeBuildInputs
-            ++ (with rustPackages; [ rustfmt clippy ]);
+          packages = [ rust.default rust.rust-analyzer ]; 
         };
       });
 }
-- 
GitLab