diff options
author | Vincent Ambo <mail@tazj.in> | 2020-08-17T21·03+0100 |
---|---|---|
committer | tazjin <mail@tazj.in> | 2020-08-17T21·50+0000 |
commit | a7868e4e17a6257b8b82b1714d1493e14e4c5e3f (patch) | |
tree | 29b684ba566ba093f2e26ac88cf74d5a57e94768 | |
parent | 1da8ace6a20c48dcf2f33405d2fecd71ea3229ab (diff) |
feat(nixos/clbot): Add ability to post in multiple channels r/1667
Adds the ability to post to multiple channels by simply running multiple instances of clbot. We should probably implement support for this in clbot itself, but right now I can't be bothered to write Go. Change-Id: I5cffd0dc10a7f6cc19c37c5834c5610166b4ae23 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1771 Tested-by: BuildkiteCI Reviewed-by: kanepyork <rikingcoding@gmail.com> Reviewed-by: lukegb <lukegb@tvl.fyi>
-rw-r--r-- | ops/nixos/clbot.nix | 49 | ||||
-rw-r--r-- | ops/nixos/whitby/default.nix | 5 |
2 files changed, 41 insertions, 13 deletions
diff --git a/ops/nixos/clbot.nix b/ops/nixos/clbot.nix index adcbebd57fd0..0c45badd2b3e 100644 --- a/ops/nixos/clbot.nix +++ b/ops/nixos/clbot.nix @@ -2,26 +2,59 @@ { config, lib, pkgs, ... }: let - inherit (builtins) concatStringsSep attrValues mapAttrs; + inherit (builtins) attrValues concatStringsSep mapAttrs readFile; + inherit (pkgs) runCommandNoCC; + inherit (lib) + listToAttrs mkEnableOption mkIf mkOption + removeSuffix types; - description = "CLBot forwards Gerrit notifications to IRC"; + description = "Bot to forward CL notifications"; cfg = config.services.depot.clbot; mkFlags = flags: concatStringsSep " " (attrValues (mapAttrs (key: value: "-${key} \"${toString value}\"") flags)); + + # Escapes a unit name for use in systemd + systemdEscape = name: removeSuffix "\n" (readFile (runCommandNoCC "unit-name" {} '' + ${pkgs.systemd}/bin/systemd-escape '${name}' >> $out + '')); + + mkUnit = flags: channel: { + name = "clbot-${systemdEscape channel}"; + value = { + description = "${description} to ${channel}"; + wantedBy = [ "multi-user.target" ]; + + script = "${config.depot.fun.clbot}/bin/clbot ${mkFlags (cfg.flags // { + irc_channel = channel; + })} -alsologtostderr"; + + serviceConfig = { + User = "clbot"; + EnvironmentFile = "/etc/secrets/clbot"; + Restart = "always"; + }; + }; + }; in { options.services.depot.clbot = { enable = mkEnableOption description; + flags = mkOption { type = types.attrsOf types.str; description = "Key value pairs for command line flags"; }; + + channels = mkOption { + type = with types; listOf str; + description = "Channels in which to post (generates one unit per channel)"; + }; }; config = mkIf cfg.enable { @@ -37,16 +70,6 @@ in { }; }; - systemd.services.clbot = { - inherit description; - script = "${config.depot.fun.clbot}/bin/clbot ${mkFlags cfg.flags} -alsologtostderr"; - wantedBy = [ "multi-user.target" ]; - - serviceConfig = { - User = "clbot"; - EnvironmentFile = "/etc/secrets/clbot"; - Restart = "always"; - }; - }; + systemd.services = listToAttrs (map (mkUnit cfg.flags) cfg.channels); }; } diff --git a/ops/nixos/whitby/default.nix b/ops/nixos/whitby/default.nix index 456dac8a46d4..c05cb324f5ec 100644 --- a/ops/nixos/whitby/default.nix +++ b/ops/nixos/whitby/default.nix @@ -218,6 +218,11 @@ in lib.fix(self: { # populated from /etc/secrets/clbot irc_pass = "$CLBOT_PASS"; }; + + channels = [ + "##tvl" + "##tvl-dev" + ]; }; services.depot = { |