Skip to content

Commit ac229a0

Browse files
committed
flake: add mono-node and multi-node tests
1 parent 0c2cfb0 commit ac229a0

File tree

5 files changed

+538
-10
lines changed

5 files changed

+538
-10
lines changed

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
[workspace]
2+
package.name = "sable"
3+
package.version = "0.0.1"
24
members = [
35
"sable_macros",
46
"sable_network",

flake.lock

Lines changed: 187 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

Lines changed: 54 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,62 @@
1212
inputs.nixpkgs.follows = "nixpkgs";
1313
};
1414
flake-utils.url = "github:numtide/flake-utils";
15+
flake-parts.url = "github:hercules-ci/flake-parts";
16+
flake-parts.inputs.nixpkgs-lib.follows = "nixpkgs";
1517
nixpkgs.url = "nixpkgs/nixos-unstable";
1618
};
1719

18-
outputs = { self, crane, fenix, flake-utils, nixpkgs }:
19-
flake-utils.lib.eachDefaultSystem (system: {
20-
packages.default =
21-
let
22-
craneLib = crane.lib.${system}.overrideToolchain
23-
fenix.packages.${system}.minimal.toolchain;
24-
in
25-
craneLib.buildPackage {
26-
src = ./sable_ircd;
20+
outputs = { self, crane, fenix, flake-utils, flake-parts, nixpkgs }@inputs: flake-parts.lib.mkFlake { inherit inputs; } ({ moduleWithSystem, ... }: {
21+
imports = [
22+
inputs.flake-parts.flakeModules.easyOverlay
23+
];
24+
25+
flake.nixosModules.sable = moduleWithSystem (
26+
{ config }:
27+
{ ... }: {
28+
imports = [
29+
./nix/modules/sable.nix
30+
];
31+
}
32+
);
33+
34+
systems = [
35+
"x86_64-linux"
36+
37+
# Not actively tested, but may work:
38+
# "aarch64-linux"
39+
];
40+
41+
perSystem = { config, system, pkgs, ... }:
42+
let
43+
pkgs = import nixpkgs {
44+
system = system;
45+
overlays = [
46+
self.overlays.default
47+
];
48+
};
49+
inherit (pkgs) lib;
50+
in {
51+
packages.sable =
52+
let
53+
craneLib = crane.lib.${system}.overrideToolchain
54+
(fenix.packages.${system}.fromToolchainFile {
55+
file = ./rust-toolchain.toml;
56+
sha256 = "sha256-kadEI6Hg6v+Xw68334b8XpfNah1pZAJZQ+i6ViN+QyQ=";
57+
});
58+
in
59+
craneLib.buildPackage {
60+
src = ./.;
61+
};
62+
63+
overlayAttrs = {
64+
inherit (config.packages) sable;
65+
};
66+
67+
checks = (import ./nix/tests/sable.nix {
68+
inherit pkgs;
69+
sableModule = self.nixosModules.sable;
70+
});
2771
};
28-
});
72+
});
2973
}

nix/modules/sable.nix

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
{ lib, config, pkgs, ... }:
2+
with lib;
3+
let
4+
cfg = config.services.sable;
5+
6+
settingsFormat = pkgs.formats.json { };
7+
serverConfigFile = settingsFormat.generate "server.json" cfg.server.settings;
8+
networkConfigFile =
9+
settingsFormat.generate "network.json" cfg.network.settings;
10+
bootstrapFile =
11+
settingsFormat.generate "bootstrap.json" cfg.network.bootstrap;
12+
in {
13+
options.services.sable = {
14+
enable = mkEnableOption "the Libera Chat's Sable IRCd";
15+
16+
network = {
17+
configFile = mkOption {
18+
type = types.path;
19+
default = networkConfigFile;
20+
};
21+
22+
settings = mkOption rec {
23+
type = types.submodule { freeformType = settingsFormat.type; };
24+
25+
default = { };
26+
};
27+
28+
bootstrap = mkOption {
29+
type = types.nullOr (types.submodule { freeformType = settingsFormat.type; });
30+
default = null;
31+
};
32+
};
33+
34+
server.configFile = mkOption {
35+
type = types.path;
36+
default = serverConfigFile;
37+
};
38+
39+
server.settings = mkOption {
40+
type = types.submodule { freeformType = settingsFormat.type; };
41+
42+
default = { };
43+
44+
description = ''
45+
Server configuration of the IRCd.
46+
'';
47+
};
48+
};
49+
50+
config = mkIf cfg.enable {
51+
services.sable.server.settings.log = lib.mapAttrs (n: lib.mkDefault) {
52+
dir = "/var/log/sable/";
53+
# stdout = "stdout.log";
54+
# stderr = "stderr.log";
55+
pidfile = "/run/sable/sable.pid";
56+
module-levels = {
57+
tokio = "trace";
58+
runtime = "trace";
59+
rustls = "error";
60+
tracing = "warn";
61+
sable = "trace";
62+
"" = "debug";
63+
};
64+
65+
targets = [
66+
{
67+
target = "stdout";
68+
level = "trace";
69+
modules = [ "sable"];
70+
}
71+
{
72+
target = { filename = "sable.log"; level = "info"; };
73+
level = "info";
74+
}
75+
{
76+
target = { filename = "trace.log"; level = "trace"; };
77+
level = "trace";
78+
}
79+
];
80+
81+
console-address = "127.0.0.1:9999";
82+
};
83+
systemd.services.sable-ircd = {
84+
description = "Sable IRC daemon";
85+
wantedBy = [ "multi-user.target" ];
86+
restartTriggers = [ cfg.network.configFile cfg.server.configFile ];
87+
serviceConfig = {
88+
LogsDirectory = "sable";
89+
PIDFile = "sable.pid";
90+
ExecStart = "${pkgs.sable}/bin/sable_ircd --foreground ${optionalString (cfg.network.bootstrap != null) "--bootstrap-network ${bootstrapFile}"} --network-conf ${cfg.network.configFile} --server-conf ${cfg.server.configFile}";
91+
};
92+
};
93+
};
94+
}

0 commit comments

Comments
 (0)