diff options
| author | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-04 20:47:05 +0300 |
|---|---|---|
| committer | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-04 20:47:05 +0300 |
| commit | 17962fd076e857921c374b4d705a54d5e1055178 (patch) | |
| tree | 6195e9cfdc913cd95b8f577eca3f39d41b089008 /ofborg/service.nix | |
| parent | 7c7f28532f1898a81b0250f875614ad3aa494a1c (diff) | |
| download | Project-Tick-17962fd076e857921c374b4d705a54d5e1055178.tar.gz Project-Tick-17962fd076e857921c374b4d705a54d5e1055178.zip | |
NOISSUE welcome to ofborg! (tickborg)
Signed-off-by: Mehmet Samet Duman <yongdohyun@projecttick.org>
Diffstat (limited to 'ofborg/service.nix')
| -rw-r--r-- | ofborg/service.nix | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/ofborg/service.nix b/ofborg/service.nix new file mode 100644 index 0000000000..8290925006 --- /dev/null +++ b/ofborg/service.nix @@ -0,0 +1,197 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.services.tickborg; + tickborg = (import ./flake.nix).packages.${pkgs.system}.tickborg; + + # Her servis icin ortak systemd ayarlari + commonServiceConfig = { + User = "tickborg"; + Group = "tickborg"; + PrivateTmp = true; + ProtectSystem = "strict"; + ProtectHome = true; + NoNewPrivileges = true; + ReadWritePaths = [ + "/var/lib/tickborg" + "/var/log/tickborg" + ]; + WorkingDirectory = "/var/lib/tickborg"; + Restart = "always"; + RestartSec = 10; + Environment = [ + "RUST_LOG=tickborg=info" + "RUST_BACKTRACE=1" + ]; + }; + + # Her servis icin ortak birim ozellikleri + mkTickborgService = name: extraConfig: { + enable = cfg.enable; + after = [ "network-online.target" "rabbitmq.service" ]; + wants = [ "network-online.target" ]; + wantedBy = [ "multi-user.target" ]; + description = "Tickborg ${name}"; + + path = with pkgs; [ + git + bash + cmake + gnumake + gcc + pkg-config + # Meson icin + meson + ninja + # Autotools icin + autoconf + automake + libtool + # Java/Gradle icin + jdk17 + # Cargo icin + rustc + cargo + ]; + + serviceConfig = commonServiceConfig // (extraConfig.serviceConfig or {}); + + script = '' + export HOME=/var/lib/tickborg + git config --global user.email "tickborg@project-tick.dev" + git config --global user.name "TickBorg" + exec ${tickborg}/bin/${extraConfig.binary} ${cfg.configFile} + ''; + }; + +in { + options.services.tickborg = { + enable = lib.mkEnableOption "Tickborg CI bot servisleri"; + + configFile = lib.mkOption { + type = lib.types.path; + default = "/etc/tickborg/config.json"; + description = "Tickborg yapilandirma dosyasi yolu"; + }; + + enableBuilder = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Builder servisini etkinlestir"; + }; + + enableWebhook = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Webhook receiver servisini etkinlestir"; + }; + + enableEvaluationFilter = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Evaluation filter servisini etkinlestir"; + }; + + enableCommentFilter = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Comment filter servisini etkinlestir"; + }; + + enableCommentPoster = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Comment poster servisini etkinlestir"; + }; + + enableMassRebuilder = lib.mkOption { + type = lib.types.bool; + default = false; + description = "Mass rebuilder servisini etkinlestir"; + }; + + enableLogCollector = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Log collector servisini etkinlestir"; + }; + + enableStats = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Stats (Prometheus metrics) servisini etkinlestir"; + }; + }; + + config = lib.mkIf cfg.enable { + users.users.tickborg = { + description = "Tickborg CI Bot"; + home = "/var/lib/tickborg"; + createHome = true; + group = "tickborg"; + isSystemUser = true; + }; + users.groups.tickborg = {}; + + systemd.tmpfiles.rules = [ + "d /var/lib/tickborg 0750 tickborg tickborg -" + "d /var/lib/tickborg/checkout 0750 tickborg tickborg -" + "d /var/log/tickborg 0750 tickborg tickborg -" + ]; + + systemd.services = lib.mkMerge [ + (lib.mkIf cfg.enableWebhook { + "tickborg-webhook-receiver" = mkTickborgService "Webhook Receiver" { + binary = "github_webhook_receiver"; + }; + }) + + (lib.mkIf cfg.enableEvaluationFilter { + "tickborg-evaluation-filter" = mkTickborgService "Evaluation Filter" { + binary = "evaluation_filter"; + }; + }) + + (lib.mkIf cfg.enableCommentFilter { + "tickborg-comment-filter" = mkTickborgService "Comment Filter" { + binary = "github_comment_filter"; + }; + }) + + (lib.mkIf cfg.enableCommentPoster { + "tickborg-comment-poster" = mkTickborgService "Comment Poster" { + binary = "github_comment_poster"; + }; + }) + + (lib.mkIf cfg.enableBuilder { + "tickborg-builder" = mkTickborgService "Builder" { + binary = "builder"; + serviceConfig = { + # Builder daha fazla kaynak kullanabilir + MemoryMax = "8G"; + CPUQuota = "400%"; + }; + }; + }) + + (lib.mkIf cfg.enableMassRebuilder { + "tickborg-mass-rebuilder" = mkTickborgService "Mass Rebuilder" { + binary = "mass_rebuilder"; + }; + }) + + (lib.mkIf cfg.enableLogCollector { + "tickborg-log-collector" = mkTickborgService "Log Collector" { + binary = "log_message_collector"; + }; + }) + + (lib.mkIf cfg.enableStats { + "tickborg-stats" = mkTickborgService "Stats" { + binary = "stats"; + }; + }) + ]; + }; +} |
