feat(ops/modules): initialise module for running livegrep

Change-Id: Ic22118def24089cda25ccc74c9da670d41c6b323
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10936
Tested-by: BuildkiteCI
Reviewed-by: flokli <flokli@flokli.de>
This commit is contained in:
Vincent Ambo 2024-02-17 12:48:12 +07:00 committed by tazjin
parent d4d46b9d8a
commit a9f5bb859f
3 changed files with 94 additions and 4 deletions

View file

@ -17,6 +17,7 @@ in
(mod "josh.nix")
(mod "journaldriver.nix")
(mod "known-hosts.nix")
(mod "livegrep.nix")
(mod "monorepo-gerrit.nix")
(mod "owothia.nix")
(mod "panettone.nix")
@ -370,6 +371,9 @@ in
# Run a SourceGraph code search instance
sourcegraph.enable = true;
# Run a livegrep code search instance
livegrep.enable = true;
# Run the Panettone issue tracker
panettone = {
enable = true;

89
ops/modules/livegrep.nix Normal file
View file

@ -0,0 +1,89 @@
# Configures a code search instance using Livegrep.
#
# We do not currently build Livegrep in Nix, because it's a complex,
# multi-language Bazel build and doesn't play nicely with Nix.
{ config, lib, pkgs, ... }:
let
cfg = config.services.depot.livegrep;
livegrepConfig = {
name = "livegrep";
fs_paths = [{
name = "depot";
path = "/depot";
metadata.url_pattern = "https://code.tvl.fyi/tree/{path}?id={version}#n{lno}";
}];
repositories = [{
name = "depot";
path = "/depot";
revisions = [ "HEAD" ];
metadata = {
url_pattern = "https://code.tvl.fyi/tree/{path}?id={version}#n{lno}";
remote = "https://cl.tvl.fyi/depot.git";
};
}];
};
configFile = pkgs.writeText "livegrep-config.json" (builtins.toJSON livegrepConfig);
# latest as of 2024-02-17
image = "ghcr.io/livegrep/livegrep/base:033fa0e93c";
in
{
options.services.depot.livegrep = with lib; {
enable = mkEnableOption "Run livegrep code search for depot";
port = mkOption {
description = "Port on which livegrep web UI should listen";
type = types.int;
default = 5477; # lgrp
};
};
config = lib.mkIf cfg.enable {
virtualisation.oci-containers.containers.livegrep-codesearch = {
inherit image;
extraOptions = [ "--net=host" ];
volumes = [
"${configFile}:/etc/livegrep-config.json:ro"
"/var/lib/gerrit/git/depot.git:/depot:ro"
];
entrypoint = "/livegrep/bin/codesearch";
cmd = [
"-grpc"
"0.0.0.0:5427" # lgcs
"-reload_rpc"
"-revparse"
"/etc/livegrep-config.json"
];
};
virtualisation.oci-containers.containers.livegrep-frontend = {
inherit image;
dependsOn = [ "livegrep-codesearch" ];
extraOptions = [ "--net=host" ];
entrypoint = "/livegrep/bin/livegrep";
cmd = [
"-listen"
"0.0.0.0:${toString cfg.port}"
"-reload"
"-connect"
"localhost:5427"
"-docroot"
"/livegrep/web"
# TODO(tazjin): docroot with styles etc.
];
};
};
}
# sudo docker exec -ti livegrep /livegrep/bin/codesearch -reload_rpc -revparse /var/lib/livegrep/config.jsno
# sudo docker run -d --ip 172.17.0.3 --name livegrep -v /var/lib/livegrep:/varlib/livegrep -v /var/lib/gerrit/git/depot.git:/depot:ro -v /home/tazjin/livegrep-web:/livegrep/web:ro ghcr.io/livegrep/livegrep/base /livegrep/bin/livegrep -listen 0.0.0.0:8910 -reload -docroot /livegrep/webbsudo docker run -d --ip 172.17.0.3 --name livegrep -v /var/lib/livegrep:/varlib/livegrep -v /var/lib/gerrit/git/depot.git:/depot:ro -v /home/tazjin/livegrep-web:/livegrep/web:ro ghcr.io/livegrep/livegrep/base /livegrep/bin/livegrep -listen 0.0.0.0:8910 -reload -docroot /livegrep/webb

View file

@ -7,15 +7,12 @@
];
config = {
# Short link support (i.e. plain http://at) for users with a
# configured tvl.fyi/tvl.su search domain.
services.nginx.virtualHosts."grep.tvl.fyi" = {
enableACME = true;
forceSSL = true;
locations."/" = {
# experimental: manually run Docker container
proxyPass = "http://172.17.0.3:8910";
proxyPass = "http://127.0.0.1:${toString config.services.depot.livegrep.port}";
};
};
};