mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-04-13 07:27:27 +00:00
Merge pull request #314244 from onny/stalwart-cleanup
stalwart-mail_0_6: drop
This commit is contained in:
commit
1777f06494
@ -16,6 +16,11 @@
|
||||
nvimpager settings: user commands in `-c` and `--cmd` now override the
|
||||
respective default settings because they are executed later.
|
||||
|
||||
- Legacy package `stalwart-mail_0_6` was dropped, please note the
|
||||
[manual upgrade process](https://github.com/stalwartlabs/mail-server/blob/main/UPGRADING.md)
|
||||
before changing the package to `pkgs.stalwart-mail` in
|
||||
[`services.stalwart-mail.package`](#opt-services.stalwart-mail.package).
|
||||
|
||||
## Other Notable Changes {#sec-release-24.11-notable-changes}
|
||||
|
||||
- Create the first release note entry in this section!
|
||||
|
@ -7,28 +7,12 @@ let
|
||||
configFormat = pkgs.formats.toml { };
|
||||
configFile = configFormat.generate "stalwart-mail.toml" cfg.settings;
|
||||
dataDir = "/var/lib/stalwart-mail";
|
||||
stalwartAtLeast = versionAtLeast cfg.package.version;
|
||||
|
||||
in {
|
||||
options.services.stalwart-mail = {
|
||||
enable = mkEnableOption "the Stalwart all-in-one email server";
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
description = ''
|
||||
Which package to use for the Stalwart mail server.
|
||||
|
||||
::: {.note}
|
||||
Upgrading from version 0.6.0 to version 0.7.0 or higher requires manual
|
||||
intervention. See <https://github.com/stalwartlabs/mail-server/blob/main/UPGRADING.md>
|
||||
for upgrade instructions.
|
||||
:::
|
||||
'';
|
||||
default = pkgs.stalwart-mail_0_6;
|
||||
defaultText = lib.literalExpression "pkgs.stalwart-mail_0_6";
|
||||
example = lib.literalExpression "pkgs.stalwart-mail";
|
||||
relatedPackages = [ "stalwart-mail_0_6" "stalwart-mail" ];
|
||||
};
|
||||
package = mkPackageOption pkgs "stalwart-mail" { };
|
||||
|
||||
settings = mkOption {
|
||||
inherit (configFormat) type;
|
||||
@ -44,17 +28,6 @@ in {
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
warnings = lib.optionals (!stalwartAtLeast "0.7.0") [
|
||||
''
|
||||
Versions of stalwart-mail < 0.7.0 will get deprecated in NixOS 24.11.
|
||||
Please set services.stalwart-mail.package to pkgs.stalwart-mail to
|
||||
upgrade to the latest version.
|
||||
Please note that upgrading to version >= 0.7 requires manual
|
||||
intervention, see <https://github.com/stalwartlabs/mail-server/blob/main/UPGRADING.md>
|
||||
for upgrade instructions.
|
||||
''
|
||||
];
|
||||
|
||||
# Default config: all local
|
||||
services.stalwart-mail.settings = {
|
||||
global.tracing.method = mkDefault "stdout";
|
||||
@ -138,6 +111,6 @@ in {
|
||||
};
|
||||
|
||||
meta = {
|
||||
maintainers = with maintainers; [ happysalada pacien ];
|
||||
maintainers = with maintainers; [ happysalada pacien onny ];
|
||||
};
|
||||
}
|
||||
|
@ -1,147 +1,120 @@
|
||||
# Rudimentary test checking that the Stalwart email server can:
|
||||
# - receive some message through SMTP submission, then
|
||||
# - serve this message through IMAP.
|
||||
{
|
||||
system ? builtins.currentSystem,
|
||||
config ? { },
|
||||
pkgs ? import ../../.. { inherit system config; },
|
||||
|
||||
lib ? pkgs.lib,
|
||||
}:
|
||||
let
|
||||
certs = import ./common/acme/server/snakeoil-certs.nix;
|
||||
domain = certs.domain;
|
||||
makeTest = import ./make-test-python.nix;
|
||||
mkTestName =
|
||||
pkg: "${pkg.pname}_${pkg.version}";
|
||||
stalwartPackages = {
|
||||
inherit (pkgs) stalwart-mail_0_6 stalwart-mail;
|
||||
};
|
||||
stalwartAtLeast = lib.versionAtLeast;
|
||||
makeStalwartTest =
|
||||
{
|
||||
package,
|
||||
name ? mkTestName package,
|
||||
}:
|
||||
makeTest {
|
||||
inherit name;
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
happysalada pacien onny
|
||||
];
|
||||
|
||||
nodes.machine = { lib, ... }: {
|
||||
in import ./make-test-python.nix ({ lib, ... }: {
|
||||
name = "stalwart-mail";
|
||||
|
||||
security.pki.certificateFiles = [ certs.ca.cert ];
|
||||
nodes.main = { pkgs, ... }: {
|
||||
security.pki.certificateFiles = [ certs.ca.cert ];
|
||||
|
||||
services.stalwart-mail = {
|
||||
services.stalwart-mail = {
|
||||
enable = true;
|
||||
settings = {
|
||||
server.hostname = domain;
|
||||
|
||||
certificate."snakeoil" = {
|
||||
cert = "%{file:${certs.${domain}.cert}}%";
|
||||
private-key = "%{file:${certs.${domain}.key}}%";
|
||||
};
|
||||
|
||||
server.tls = {
|
||||
certificate = "snakeoil";
|
||||
enable = true;
|
||||
inherit package;
|
||||
settings = {
|
||||
server.hostname = domain;
|
||||
implicit = false;
|
||||
};
|
||||
|
||||
# TODO: Remove backwards compatibility as soon as we drop legacy version 0.6.0
|
||||
certificate."snakeoil" = let
|
||||
certPath = if stalwartAtLeast package.version "0.7.0" then "%{file://${certs.${domain}.cert}}%" else "file://${certs.${domain}.cert}";
|
||||
keyPath = if stalwartAtLeast package.version "0.7.0" then "%{file:${certs.${domain}.key}}%" else "file://${certs.${domain}.key}";
|
||||
in {
|
||||
cert = certPath;
|
||||
private-key = keyPath;
|
||||
};
|
||||
server.listener = {
|
||||
"smtp-submission" = {
|
||||
bind = [ "[::]:587" ];
|
||||
protocol = "smtp";
|
||||
};
|
||||
|
||||
server.tls = {
|
||||
certificate = "snakeoil";
|
||||
enable = true;
|
||||
implicit = false;
|
||||
};
|
||||
|
||||
server.listener = {
|
||||
"smtp-submission" = {
|
||||
bind = [ "[::]:587" ];
|
||||
protocol = "smtp";
|
||||
};
|
||||
|
||||
"imap" = {
|
||||
bind = [ "[::]:143" ];
|
||||
protocol = "imap";
|
||||
};
|
||||
};
|
||||
|
||||
session.auth.mechanisms = "[plain]";
|
||||
session.auth.directory = "'in-memory'";
|
||||
storage.directory = "in-memory";
|
||||
|
||||
session.rcpt.directory = "'in-memory'";
|
||||
queue.outbound.next-hop = "'local'";
|
||||
|
||||
directory."in-memory" = {
|
||||
type = "memory";
|
||||
# TODO: Remove backwards compatibility as soon as we drop legacy version 0.6.0
|
||||
principals = let
|
||||
condition = if stalwartAtLeast package.version "0.7.0" then "class" else "type";
|
||||
in builtins.map (p: p // { ${condition} = "individual"; }) [
|
||||
{
|
||||
name = "alice";
|
||||
secret = "foobar";
|
||||
email = [ "alice@${domain}" ];
|
||||
}
|
||||
{
|
||||
name = "bob";
|
||||
secret = "foobar";
|
||||
email = [ "bob@${domain}" ];
|
||||
}
|
||||
];
|
||||
};
|
||||
"imap" = {
|
||||
bind = [ "[::]:143" ];
|
||||
protocol = "imap";
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = [
|
||||
(pkgs.writers.writePython3Bin "test-smtp-submission" { } ''
|
||||
from smtplib import SMTP
|
||||
session.auth.mechanisms = "[plain]";
|
||||
session.auth.directory = "'in-memory'";
|
||||
storage.directory = "in-memory";
|
||||
|
||||
with SMTP('localhost', 587) as smtp:
|
||||
smtp.starttls()
|
||||
smtp.login('alice', 'foobar')
|
||||
smtp.sendmail(
|
||||
'alice@${domain}',
|
||||
'bob@${domain}',
|
||||
"""
|
||||
From: alice@${domain}
|
||||
To: bob@${domain}
|
||||
Subject: Some test message
|
||||
|
||||
This is a test message.
|
||||
""".strip()
|
||||
)
|
||||
'')
|
||||
|
||||
(pkgs.writers.writePython3Bin "test-imap-read" { } ''
|
||||
from imaplib import IMAP4
|
||||
|
||||
with IMAP4('localhost') as imap:
|
||||
imap.starttls()
|
||||
status, [caps] = imap.login('bob', 'foobar')
|
||||
assert status == 'OK'
|
||||
imap.select()
|
||||
status, [ref] = imap.search(None, 'ALL')
|
||||
assert status == 'OK'
|
||||
[msgId] = ref.split()
|
||||
status, msg = imap.fetch(msgId, 'BODY[TEXT]')
|
||||
assert status == 'OK'
|
||||
assert msg[0][1].strip() == b'This is a test message.'
|
||||
'')
|
||||
];
|
||||
session.rcpt.directory = "'in-memory'";
|
||||
queue.outbound.next-hop = "'local'";
|
||||
|
||||
directory."in-memory" = {
|
||||
type = "memory";
|
||||
principals = [
|
||||
{
|
||||
class = "individual";
|
||||
name = "alice";
|
||||
secret = "foobar";
|
||||
email = [ "alice@${domain}" ];
|
||||
}
|
||||
{
|
||||
class = "individual";
|
||||
name = "bob";
|
||||
secret = "foobar";
|
||||
email = [ "bob@${domain}" ];
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
machine.wait_for_unit("stalwart-mail.service")
|
||||
machine.wait_for_open_port(587)
|
||||
machine.wait_for_open_port(143)
|
||||
|
||||
machine.succeed("test-smtp-submission")
|
||||
machine.succeed("test-imap-read")
|
||||
'';
|
||||
};
|
||||
in
|
||||
lib.mapAttrs (_: package: makeStalwartTest { inherit package; }) stalwartPackages
|
||||
|
||||
environment.systemPackages = [
|
||||
(pkgs.writers.writePython3Bin "test-smtp-submission" { } ''
|
||||
from smtplib import SMTP
|
||||
|
||||
with SMTP('localhost', 587) as smtp:
|
||||
smtp.starttls()
|
||||
smtp.login('alice', 'foobar')
|
||||
smtp.sendmail(
|
||||
'alice@${domain}',
|
||||
'bob@${domain}',
|
||||
"""
|
||||
From: alice@${domain}
|
||||
To: bob@${domain}
|
||||
Subject: Some test message
|
||||
|
||||
This is a test message.
|
||||
""".strip()
|
||||
)
|
||||
'')
|
||||
|
||||
(pkgs.writers.writePython3Bin "test-imap-read" { } ''
|
||||
from imaplib import IMAP4
|
||||
|
||||
with IMAP4('localhost') as imap:
|
||||
imap.starttls()
|
||||
status, [caps] = imap.login('bob', 'foobar')
|
||||
assert status == 'OK'
|
||||
imap.select()
|
||||
status, [ref] = imap.search(None, 'ALL')
|
||||
assert status == 'OK'
|
||||
[msgId] = ref.split()
|
||||
status, msg = imap.fetch(msgId, 'BODY[TEXT]')
|
||||
assert status == 'OK'
|
||||
assert msg[0][1].strip() == b'This is a test message.'
|
||||
'')
|
||||
];
|
||||
};
|
||||
|
||||
testScript = /* python */ ''
|
||||
main.wait_for_unit("stalwart-mail.service")
|
||||
main.wait_for_open_port(587)
|
||||
main.wait_for_open_port(143)
|
||||
|
||||
main.succeed("test-smtp-submission")
|
||||
main.succeed("test-imap-read")
|
||||
'';
|
||||
|
||||
meta = {
|
||||
maintainers = with lib.maintainers; [ happysalada pacien onny ];
|
||||
};
|
||||
})
|
||||
|
@ -75,6 +75,6 @@ rustPlatform.buildRustPackage {
|
||||
homepage = "https://github.com/stalwartlabs/mail-server";
|
||||
changelog = "https://github.com/stalwartlabs/mail-server/blob/${version}/CHANGELOG";
|
||||
license = licenses.agpl3Only;
|
||||
maintainers = with maintainers; [ happysalada ];
|
||||
maintainers = with maintainers; [ happysalada onny ];
|
||||
};
|
||||
}
|
||||
|
@ -26586,23 +26586,6 @@ with pkgs;
|
||||
|
||||
thttpd = callPackage ../servers/http/thttpd { };
|
||||
|
||||
stalwart-mail_0_6 = (stalwart-mail.override { rocksdb_8_11 = rocksdb_8_3; }).overrideAttrs (old: rec {
|
||||
pname = "stalwart-mail_0_6";
|
||||
version = "0.6.0";
|
||||
src = fetchFromGitHub {
|
||||
owner = "stalwartlabs";
|
||||
repo = "mail-server";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-OHwUWSUW6ovLQTxnuUrolQGhxbhp4YqKSH+ZTpe2WXc=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
cargoDeps = old.cargoDeps.overrideAttrs (_: {
|
||||
inherit src;
|
||||
name = "${pname}-${version}-vendor.tar.gz";
|
||||
outputHash = "sha256-mW3OXQj6DcIMO1YlTG3G+a1ORRcuvp5/h7BU+b4QbnE=";
|
||||
});
|
||||
});
|
||||
|
||||
static-web-server = callPackage ../servers/static-web-server { };
|
||||
|
||||
stone = callPackage ../servers/stone { };
|
||||
|
Loading…
Reference in New Issue
Block a user