about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2022-02-16T18·30+0300
committertazjin <tazjin@tvl.su>2022-02-16T23·03+0000
commitcb8f050b9c6322c060af8580bfdac44fbd13cb5e (patch)
treeb9a45c4b773c5a3acbe57c6447e26876da539a84
parent7e65edcb16d2aafa2240bda5d4b255f499ff7e4a (diff)
refactor(ops/modules): Move cgit configuration into a module r/3836
The ancient `//web/cgit-taz` path stems from the time I had
code.tazj.in serving my initial version of the depot.

I've been meaning to clean this up for forever, so here we go.

Note that this leaves the git-serving module in a strange state where
it only deals with josh. I'll rename it accordingly.

Change-Id: I47ed1e9d90958299b5440a18a1b9075274754e33
Reviewed-on: https://cl.tvl.fyi/c/depot/+/5294
Tested-by: BuildkiteCI
Autosubmit: tazjin <tazjin@tvl.su>
Reviewed-by: sterni <sternenseemann@systemli.org>
-rw-r--r--ops/machines/whitby/default.nix2
-rw-r--r--ops/modules/cgit/default.nix (renamed from web/cgit-taz/default.nix)54
-rw-r--r--ops/modules/cgit/thttpd_cgi_idx.patch (renamed from web/cgit-taz/thttpd_cgi_idx.patch)0
-rw-r--r--ops/modules/git-serving.nix23
4 files changed, 40 insertions, 39 deletions
diff --git a/ops/machines/whitby/default.nix b/ops/machines/whitby/default.nix
index 11493b930bdb..66f5890f8b2b 100644
--- a/ops/machines/whitby/default.nix
+++ b/ops/machines/whitby/default.nix
@@ -8,6 +8,7 @@ in
 {
   imports = [
     "${depot.path}/ops/modules/atward.nix"
+    "${depot.path}/ops/modules/cgit/default.nix"
     "${depot.path}/ops/modules/clbot.nix"
     "${depot.path}/ops/modules/gerrit-queue.nix"
     "${depot.path}/ops/modules/git-serving.nix"
@@ -392,6 +393,7 @@ in
     nixery.enable = true;
 
     # Run cgit & josh to serve git
+    cgit.enable = true;
     git-serving.enable = true;
 
     # Configure backups to GleSYS
diff --git a/web/cgit-taz/default.nix b/ops/modules/cgit/default.nix
index d20bbbe3135b..580b8384bd90 100644
--- a/web/cgit-taz/default.nix
+++ b/ops/modules/cgit/default.nix
@@ -1,14 +1,10 @@
-# This derivation configures a 'cgit' instance to serve repositories
-# from a different source.
-{ depot, pkgs, ... }:
+# Configuration for running the TVL cgit instance using thttpd.
+{ config, depot, lib, pkgs, ... }:
 
 let
-  inherit (pkgs)
-    mime-types
-    thttpd
-    writeShellScriptBin
-    writeText
-    ;
+  inherit (pkgs) writeText;
+
+  cfg = config.services.depot.cgit;
 
   cgitConfig = writeText "cgitrc" ''
     # Global configuration
@@ -21,7 +17,7 @@ let
     enable-log-linecount=1
     enable-follow-links=1
     enable-blame=1
-    mimetype-file=${mime-types}/etc/mime.types
+    mimetype-file=${pkgs.mime-types}/etc/mime.types
     logo=https://static.tvl.fyi/${depot.web.static.drvHash}/logo-animated.svg
 
     # Repository configuration
@@ -33,7 +29,7 @@ let
   '';
 
   thttpdConfig = writeText "thttpd.conf" ''
-    port=2448
+    port=${toString cfg.port}
     dir=${depot.third_party.cgit}/cgit
     nochroot
     novhost
@@ -45,8 +41,7 @@ let
   # configuration.
   #
   # Things are done this way because recompilation of thttpd is much
-  # faster than cgit and I don't want to wait long when iterating on
-  # config.
+  # faster than cgit.
   thttpdConfigPatch = writeText "thttpd_cgit_conf.patch" ''
     diff --git a/libhttpd.c b/libhttpd.c
     index c6b1622..eef4b73 100644
@@ -60,13 +55,38 @@ let
          envp[envn++] = build_env( "PATH=%s", CGI_PATH );
      #ifdef CGI_LD_LIBRARY_PATH
   '';
-  thttpdCgit = thttpd.overrideAttrs (old: {
+
+  thttpdCgit = pkgs.thttpd.overrideAttrs (old: {
     patches = [
       ./thttpd_cgi_idx.patch
       thttpdConfigPatch
     ];
   });
 in
-writeShellScriptBin "cgit-launch" ''
-  exec ${thttpdCgit}/bin/thttpd -D -C ${thttpdConfig}
-''
+{
+  options.services.depot.cgit = with lib; {
+    enable = mkEnableOption "Run cgit web interface for depot";
+
+    port = mkOption {
+      description = "Port on which cgit should listen";
+      type = types.int;
+      default = 2448;
+    };
+  };
+
+  config = lib.mkIf cfg.enable {
+    systemd.services.cgit = {
+      wantedBy = [ "multi-user.target" ];
+
+      serviceConfig = {
+        Restart = "on-failure";
+        User = "git";
+        Group = "git";
+
+        ExecStart = pkgs.writeShellScript "cgit-launch" ''
+          exec ${thttpdCgit}/bin/thttpd -D -C ${thttpdConfig}
+        '';
+      };
+    };
+  };
+}
diff --git a/web/cgit-taz/thttpd_cgi_idx.patch b/ops/modules/cgit/thttpd_cgi_idx.patch
index 67dbc0c7ab80..67dbc0c7ab80 100644
--- a/web/cgit-taz/thttpd_cgi_idx.patch
+++ b/ops/modules/cgit/thttpd_cgi_idx.patch
diff --git a/ops/modules/git-serving.nix b/ops/modules/git-serving.nix
index 49af01a0fd3e..57f08cbc5f45 100644
--- a/ops/modules/git-serving.nix
+++ b/ops/modules/git-serving.nix
@@ -1,13 +1,4 @@
-# Configures public git-serving infrastructure for TVL, this involves:
-#
-# 1. cgit (running at code.tvl.fyi) for web views of the repository
-# 2. josh (for cloning the repository and its distinct subtrees)
-#
-# We also run Sourcegraph for browsing the repository, but this is
-# currently configured in a separate module
-# (//ops/modules/sourcegraph.nix)
-#
-# TODO(tazjin): Move //web/cgit-taz configuration in here instead.
+# Configures the public josh instance for serving the depot.
 { config, depot, lib, pkgs, ... }:
 
 let
@@ -25,18 +16,6 @@ in
   };
 
   config = lib.mkIf cfg.enable {
-    # Run cgit for the depot. The onion here is nginx(thttpd(cgit)).
-    systemd.services.cgit = {
-      wantedBy = [ "multi-user.target" ];
-      script = "${depot.web.cgit-taz}/bin/cgit-launch";
-
-      serviceConfig = {
-        Restart = "on-failure";
-        User = "git";
-        Group = "git";
-      };
-    };
-
     # Run josh for the depot.
     systemd.services.josh = {
       description = "josh - partial cloning of monorepos";