Skip to content

Commit 50c043d

Browse files
committed
flake: add mono-node and multi-node tests
1 parent e897f35 commit 50c043d

File tree

5 files changed

+574
-10
lines changed

5 files changed

+574
-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: 59 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,67 @@
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 =
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+
buildSable = features: craneLib.buildPackage {
59+
src = ./.;
60+
cargoExtraArgs = "--features \"${lib.concatStringsSep " " features}\"";
61+
};
62+
in
63+
{
64+
sable = buildSable [ ];
65+
sable-dev = buildSable [ "sable_ircd/debug" "sable_network/debug" ];
66+
};
67+
68+
overlayAttrs = {
69+
inherit (config.packages) sable sable-dev;
70+
};
71+
72+
checks = (import ./nix/tests/sable.nix {
73+
inherit pkgs;
74+
sableModule = self.nixosModules.sable;
75+
});
2776
};
28-
});
77+
});
2978
}

nix/modules/sable.nix

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

0 commit comments

Comments
 (0)