From 1ec71dcdd105a80d32efd71c30e10f671b59ad74 Mon Sep 17 00:00:00 2001 From: pinpox Date: Wed, 4 Jun 2025 02:17:18 +0200 Subject: [PATCH] Migrate heisenbridge from clanModule to clanService --- checks/flake-module.nix | 3 + checks/heisenbridge/default.nix | 65 +++++++++++++++++++ checks/heisenbridge/sops/users/admin/key.json | 4 ++ clanModules/heisenbridge/README.md | 3 +- .../heisenbridge/{ => roles}/default.nix | 1 - clanServices/flake-module.nix | 1 + clanServices/heisenbridge/default.nix | 35 ++++++++++ clanServices/heisenbridge/flake-module.nix | 6 ++ docs/mkdocs.yml | 1 + 9 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 checks/heisenbridge/default.nix create mode 100644 checks/heisenbridge/sops/users/admin/key.json rename clanModules/heisenbridge/{ => roles}/default.nix (97%) create mode 100644 clanServices/heisenbridge/default.nix create mode 100644 clanServices/heisenbridge/flake-module.nix diff --git a/checks/flake-module.nix b/checks/flake-module.nix index 89f62b82d..d38d972d2 100644 --- a/checks/flake-module.nix +++ b/checks/flake-module.nix @@ -47,6 +47,9 @@ in # Garage test garage = import ./garage nixosTestArgs; + # Heisenbridge test + heisenbridge = import ./heisenbridge nixosTestArgs; + # Base Tests secrets = self.clanLib.test.baseTest ./secrets nixosTestArgs; borgbackup-legacy = self.clanLib.test.baseTest ./borgbackup-legacy nixosTestArgs; diff --git a/checks/heisenbridge/default.nix b/checks/heisenbridge/default.nix new file mode 100644 index 000000000..5e55452b5 --- /dev/null +++ b/checks/heisenbridge/default.nix @@ -0,0 +1,65 @@ +{ + pkgs, + nixosLib, + clan-core, + ... +}: + +nixosLib.runTest ( + { ... }: + { + imports = [ + clan-core.modules.nixosVmTest.clanTest + ]; + + hostPkgs = pkgs; + + name = "heisenbridge"; + + clan = { + directory = ./.; + modules."@clan/heisenbridge" = ../../clanServices/heisenbridge/default.nix; + inventory = { + machines.server = { }; + + instances = { + heisenbridge-test = { + module.name = "@clan/heisenbridge"; + roles.default.machines."server".settings = { + homeserver = "http://127.0.0.1:8008"; + }; + }; + }; + }; + }; + + nodes = { + server = { + # Setup a minimal matrix-synapse to test with + services.matrix-synapse = { + enable = true; + settings.server_name = "example.com"; + settings.database = { + name = "sqlite3"; + }; + }; + }; + }; + + testScript = '' + start_all() + + server.wait_for_unit("matrix-synapse") + server.wait_for_unit("heisenbridge") + + # Check that heisenbridge is running + server.succeed("systemctl status heisenbridge") + + # Wait for the bridge to initialize + server.wait_until_succeeds("journalctl -u heisenbridge | grep -q 'bridge is now running'") + + # Check that heisenbridge is listening on the default port + server.succeed("${pkgs.netcat}/bin/nc -z -v 127.0.0.1 9898") + ''; + } +) diff --git a/checks/heisenbridge/sops/users/admin/key.json b/checks/heisenbridge/sops/users/admin/key.json new file mode 100644 index 000000000..e408aa96b --- /dev/null +++ b/checks/heisenbridge/sops/users/admin/key.json @@ -0,0 +1,4 @@ +{ + "publickey": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg", + "type": "age" +} diff --git a/clanModules/heisenbridge/README.md b/clanModules/heisenbridge/README.md index c364b3c11..ffdfa6ca9 100644 --- a/clanModules/heisenbridge/README.md +++ b/clanModules/heisenbridge/README.md @@ -1,4 +1,5 @@ --- description = "A matrix bridge to communicate with IRC" +categories = ["Social"] +features = [ "inventory", "deprecated" ] --- - diff --git a/clanModules/heisenbridge/default.nix b/clanModules/heisenbridge/roles/default.nix similarity index 97% rename from clanModules/heisenbridge/default.nix rename to clanModules/heisenbridge/roles/default.nix index 9da13b5b5..37365ae52 100644 --- a/clanModules/heisenbridge/default.nix +++ b/clanModules/heisenbridge/roles/default.nix @@ -1,5 +1,4 @@ { - config, lib, ... }: diff --git a/clanServices/flake-module.nix b/clanServices/flake-module.nix index 9fc2cef8c..13609c3f3 100644 --- a/clanServices/flake-module.nix +++ b/clanServices/flake-module.nix @@ -5,6 +5,7 @@ ./deltachat/flake-module.nix ./ergochat/flake-module.nix ./garage/flake-module.nix + ./heisenbridge/flake-module.nix ./auto-upgrade/flake-module.nix ./hello-world/flake-module.nix ./wifi/flake-module.nix diff --git a/clanServices/heisenbridge/default.nix b/clanServices/heisenbridge/default.nix new file mode 100644 index 000000000..78a7913f1 --- /dev/null +++ b/clanServices/heisenbridge/default.nix @@ -0,0 +1,35 @@ +{ ... }: +{ + _class = "clan.service"; + manifest.name = "clan-core/heisenbridge"; + manifest.description = "A matrix bridge to communicate with IRC"; + manifest.categories = [ "Social" ]; + + roles.default = { + interface = + { lib, ... }: + { + options.homeserver = lib.mkOption { + type = lib.types.str; + default = "http://localhost:8008"; + description = "URL of the Matrix homeserver"; + }; + }; + + perInstance = + { settings, ... }: + { + nixosModule = { + + services.heisenbridge = { + enable = true; + homeserver = settings.homeserver; + }; + + services.matrix-synapse.settings.app_service_config_files = [ + "/var/lib/heisenbridge/registration.yml" + ]; + }; + }; + }; +} diff --git a/clanServices/heisenbridge/flake-module.nix b/clanServices/heisenbridge/flake-module.nix new file mode 100644 index 000000000..b8ea77018 --- /dev/null +++ b/clanServices/heisenbridge/flake-module.nix @@ -0,0 +1,6 @@ +{ lib, ... }: +{ + clan.modules = { + heisenbridge = lib.modules.importApply ./default.nix { }; + }; +} diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 35dce7283..3cd7be57a 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -88,6 +88,7 @@ nav: - reference/clanServices/deltachat.md - reference/clanServices/ergochat.md - reference/clanServices/garage.md + - reference/clanServices/heisenbridge.md - reference/clanServices/hello-world.md - reference/clanServices/wifi.md - Clan Modules: