about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFranck Cuny <franck@fcuny.net>2022-06-10 11:29:54 -0700
committerFranck Cuny <franck@fcuny.net>2022-06-10 13:13:15 -0700
commit21977f91c8ede350b6a58633b11c09bb94198e62 (patch)
tree02a36afcfba5bea7b9e9662cb5efcb3e2851d2ac
parentfix(fmt): correct formatting for all nix files (diff)
downloadworld-21977f91c8ede350b6a58633b11c09bb94198e62.tar.gz
ci(fmt): add a script to check the formatting
Add a script for CI to check that all the files are formatted correctly.
This is done by using `treefmt' with a configuration for go and nix
files (for now).

Running `nix run .#ci.fmt' in the repository will check all the files,
and fail if there's any problems. It will not modify any files.

The pipeline in builKite needs to be updated to run that command.

Change-Id: Iec91163f1ab56ceb0cfff6db8f8ce93367ebeefe
Reviewed-on: https://cl.fcuny.net/c/world/+/403
Tested-by: CI
Reviewed-by: Franck Cuny <franck@fcuny.net>
-rw-r--r--flake.nix9
-rw-r--r--ops/ci/fmt.nix27
2 files changed, 34 insertions, 2 deletions
diff --git a/flake.nix b/flake.nix
index 86d32c8..db58906 100644
--- a/flake.nix
+++ b/flake.nix
@@ -29,7 +29,7 @@
   };
 
   # Output config, or config for NixOS system
-  outputs = { ... }@inputs:
+  outputs = { self, ... }@inputs:
     let lib = import ./nix { inherit inputs; };
     in
     {
@@ -42,7 +42,9 @@
       let
         pkgs = import inputs.nixpkgs { inherit system; };
         home-manager = inputs.home-manager.defaultPackage."${system}";
-      in {
+        ci = import ./ops/ci/fmt.nix { inherit pkgs; };
+      in
+      {
         packages = pkgs // {
           inherit home-manager;
 
@@ -58,6 +60,9 @@
           };
         };
 
+        # `nix run .#ci.format` formats in current directory!
+        apps.ci.format = ci.mkFmtScript self;
+
         devShell = pkgs.mkShell {
           buildInputs = with pkgs; [
             nixUnstable
diff --git a/ops/ci/fmt.nix b/ops/ci/fmt.nix
new file mode 100644
index 0000000..a3d697c
--- /dev/null
+++ b/ops/ci/fmt.nix
@@ -0,0 +1,27 @@
+{ pkgs, ... }:
+let
+  config = pkgs.writeText "depot-treefmt-config" ''
+    [formatter.go]
+    command = "${pkgs.go}/bin/gofmt"
+    includes = ["*.go"]
+
+    [formatter.nix]
+    command = "${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt"
+    options = [ "--check"]
+    includes = [ "*.nix" ]
+  '';
+in
+rec {
+  mkFmtScript = src:
+    let
+      script = pkgs.writeScript "format" ''
+        set -euo pipefail
+        ROOT=$(${pkgs.git}/bin/git rev-parse --show-toplevel)
+        ${pkgs.treefmt}/bin/treefmt --clear-cache --fail-on-change --config-file ${config} --tree-root $ROOT
+      '';
+    in
+    {
+      type = "app";
+      program = "${script}";
+    };
+}