From 1094306aa95476a16f28083d4e903bb3e5c2b3dc Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Wed, 22 Jun 2022 19:24:35 +0300 Subject: refactor(web/cgit-tvl): Move cgit config back out of module It occured to me yesterday that with the config inside of the module it is kind of difficult to test cgit locally. This moves it back to a separate location (//web/cgit-tvl) and makes the most important things configurable via overrides. Change-Id: I9b0f4c60b75c31441e1718e63b5b55aba3100aae Reviewed-on: https://cl.tvl.fyi/c/depot/+/5893 Tested-by: BuildkiteCI Reviewed-by: sterni --- ops/modules/cgit.nix | 39 +++++++++++++++ ops/modules/cgit/default.nix | 92 ----------------------------------- ops/modules/cgit/thttpd_cgi_idx.patch | 13 ----- 3 files changed, 39 insertions(+), 105 deletions(-) create mode 100644 ops/modules/cgit.nix delete mode 100644 ops/modules/cgit/default.nix delete mode 100644 ops/modules/cgit/thttpd_cgi_idx.patch (limited to 'ops/modules') diff --git a/ops/modules/cgit.nix b/ops/modules/cgit.nix new file mode 100644 index 000000000000..25318d1d723e --- /dev/null +++ b/ops/modules/cgit.nix @@ -0,0 +1,39 @@ +# Configuration for running the TVL cgit instance using thttpd. +{ config, depot, lib, pkgs, ... }: + +let + cfg = config.services.depot.cgit; +in +{ + 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; + }; + + repo = mkOption { + description = "Path to depot's .git folder on the machine"; + type = types.str; + default = "/var/lib/gerrit/git/depot.git/"; + }; + }; + + config = lib.mkIf cfg.enable { + systemd.services.cgit = { + wantedBy = [ "multi-user.target" ]; + + serviceConfig = { + Restart = "on-failure"; + User = "git"; + Group = "git"; + + ExecStart = depot.web.cgit-tvl.override { + inherit (cfg) port repo; + }; + }; + }; + }; +} diff --git a/ops/modules/cgit/default.nix b/ops/modules/cgit/default.nix deleted file mode 100644 index 580b8384bd90..000000000000 --- a/ops/modules/cgit/default.nix +++ /dev/null @@ -1,92 +0,0 @@ -# Configuration for running the TVL cgit instance using thttpd. -{ config, depot, lib, pkgs, ... }: - -let - inherit (pkgs) writeText; - - cfg = config.services.depot.cgit; - - cgitConfig = writeText "cgitrc" '' - # Global configuration - virtual-root=/ - enable-http-clone=0 - readme=:README.md - about-filter=${depot.tools.cheddar.about-filter}/bin/cheddar-about - source-filter=${depot.tools.cheddar}/bin/cheddar - enable-log-filecount=1 - enable-log-linecount=1 - enable-follow-links=1 - enable-blame=1 - mimetype-file=${pkgs.mime-types}/etc/mime.types - logo=https://static.tvl.fyi/${depot.web.static.drvHash}/logo-animated.svg - - # Repository configuration - repo.url=depot - repo.path=/var/lib/gerrit/git/depot.git/ - repo.desc=monorepo for the virus lounge - repo.owner=The Virus Lounge - repo.clone-url=https://code.tvl.fyi/depot.git - ''; - - thttpdConfig = writeText "thttpd.conf" '' - port=${toString cfg.port} - dir=${depot.third_party.cgit}/cgit - nochroot - novhost - cgipat=**.cgi - ''; - - # Patched version of thttpd that serves cgit.cgi as the index and - # sets the environment variable for pointing cgit at the correct - # configuration. - # - # Things are done this way because recompilation of thttpd is much - # faster than cgit. - thttpdConfigPatch = writeText "thttpd_cgit_conf.patch" '' - diff --git a/libhttpd.c b/libhttpd.c - index c6b1622..eef4b73 100644 - --- a/libhttpd.c - +++ b/libhttpd.c - @@ -3055,4 +3055,6 @@ make_envp( httpd_conn* hc ) - - envn = 0; - + // force cgit to load the correct configuration - + envp[envn++] = "CGIT_CONFIG=${cgitConfig}"; - envp[envn++] = build_env( "PATH=%s", CGI_PATH ); - #ifdef CGI_LD_LIBRARY_PATH - ''; - - thttpdCgit = pkgs.thttpd.overrideAttrs (old: { - patches = [ - ./thttpd_cgi_idx.patch - thttpdConfigPatch - ]; - }); -in -{ - 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/ops/modules/cgit/thttpd_cgi_idx.patch b/ops/modules/cgit/thttpd_cgi_idx.patch deleted file mode 100644 index 67dbc0c7ab80..000000000000 --- a/ops/modules/cgit/thttpd_cgi_idx.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/config.h b/config.h -index 65ab1e3..cde470f 100644 ---- a/config.h -+++ b/config.h -@@ -327,7 +327,7 @@ - /* CONFIGURE: A list of index filenames to check. The files are searched - ** for in this order. - */ --#define INDEX_NAMES "index.html", "index.htm", "index.xhtml", "index.xht", "Default.htm", "index.cgi" -+#define INDEX_NAMES "cgit.cgi" - - /* CONFIGURE: If this is defined then thttpd will automatically generate - ** index pages for directories that don't have an explicit index file. -- cgit 1.4.1