Unverified Commit 1777f064 authored by Yt's avatar Yt Committed by GitHub
Browse files

Merge pull request #314244 from onny/stalwart-cleanup

stalwart-mail_0_6: drop
parents 197981d9 50388b71
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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!
+2 −29
Original line number Diff line number Diff line
@@ -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 ];
  };
}
+106 −133
Original line number Diff line number Diff line
# 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";

  nodes.main = { pkgs, ... }: {
    security.pki.certificateFiles = [ certs.ca.cert ];

    services.stalwart-mail = {
      enable = true;
          inherit package;
      settings = {
        server.hostname = domain;

            # 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;
        certificate."snakeoil" = {
          cert = "%{file:${certs.${domain}.cert}}%";
          private-key = "%{file:${certs.${domain}.key}}%";
        };

        server.tls = {
@@ -75,16 +49,15 @@ let

        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"; }) [
          principals = [
            {
              class = "individual";
              name = "alice";
              secret = "foobar";
              email = [ "alice@${domain}" ];
            }
            {
              class = "individual";
              name = "bob";
              secret = "foobar";
              email = [ "bob@${domain}" ];
@@ -130,18 +103,18 @@ let
            assert msg[0][1].strip() == b'This is a test message.'
      '')
    ];

  };

      testScript = ''
        start_all()
        machine.wait_for_unit("stalwart-mail.service")
        machine.wait_for_open_port(587)
        machine.wait_for_open_port(143)
  testScript = /* python */ ''
    main.wait_for_unit("stalwart-mail.service")
    main.wait_for_open_port(587)
    main.wait_for_open_port(143)

        machine.succeed("test-smtp-submission")
        machine.succeed("test-imap-read")
    main.succeed("test-smtp-submission")
    main.succeed("test-imap-read")
  '';

  meta = {
    maintainers = with lib.maintainers; [ happysalada pacien onny ];
  };
in
lib.mapAttrs (_: package: makeStalwartTest { inherit package; }) stalwartPackages
})
+1 −1
Original line number Diff line number Diff line
@@ -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 ];
  };
}
+0 −17
Original line number Diff line number Diff line
@@ -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 { };