nixos/radicale: use radicale3

This commit is contained in:
Robert Schütz 2020-06-20 14:30:33 +02:00
parent 45bf7757c0
commit d77fb3729d
3 changed files with 40 additions and 9 deletions

View file

@ -495,6 +495,16 @@ systemd.services.nginx.serviceConfig.ReadWritePaths = [ "/var/www" ];
In the <literal>resilio</literal> module, <xref linkend="opt-services.resilio.httpListenAddr"/> has been changed to listen to <literal>[::1]</literal> instead of <literal>0.0.0.0</literal>. In the <literal>resilio</literal> module, <xref linkend="opt-services.resilio.httpListenAddr"/> has been changed to listen to <literal>[::1]</literal> instead of <literal>0.0.0.0</literal>.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Radicale's default package has changed from 2.x to 3.x. An upgrade
checklist can be found
<link xlink:href="https://github.com/Kozea/Radicale/blob/3.0.x/NEWS.md#upgrade-checklist">here</link>.
You can use the newer version in the NixOS service by setting the
<literal>package</literal> to <literal>radicale3</literal>, which is done
automatically if <literal>stateVersion</literal> is 20.09 or higher.
</para>
</listitem>
</itemizedlist> </itemizedlist>
</section> </section>

View file

@ -8,8 +8,10 @@ let
confFile = pkgs.writeText "radicale.conf" cfg.config; confFile = pkgs.writeText "radicale.conf" cfg.config;
# This enables us to default to version 2 while still not breaking configurations of people with version 1 defaultPackage = if versionAtLeast config.system.stateVersion "20.09" then {
defaultPackage = if versionAtLeast config.system.stateVersion "17.09" then { pkg = pkgs.radicale3;
text = "pkgs.radicale3";
} else if versionAtLeast config.system.stateVersion "17.09" then {
pkg = pkgs.radicale2; pkg = pkgs.radicale2;
text = "pkgs.radicale2"; text = "pkgs.radicale2";
} else { } else {
@ -35,8 +37,9 @@ in
defaultText = defaultPackage.text; defaultText = defaultPackage.text;
description = '' description = ''
Radicale package to use. This defaults to version 1.x if Radicale package to use. This defaults to version 1.x if
<literal>system.stateVersion &lt; 17.09</literal> and version 2.x <literal>system.stateVersion &lt; 17.09</literal>, version 2.x if
otherwise. <literal>17.09 system.stateVersion &lt; 20.09</literal>, and
version 3.x otherwise.
''; '';
}; };

View file

@ -14,9 +14,6 @@ let
[storage] [storage]
filesystem_folder = /tmp/collections filesystem_folder = /tmp/collections
[logging]
debug = True
''; '';
}; };
# WARNING: DON'T DO THIS IN PRODUCTION! # WARNING: DON'T DO THIS IN PRODUCTION!
@ -49,13 +46,18 @@ in
services.radicale.extraArgs = [ services.radicale.extraArgs = [
"--export-storage" "/tmp/collections-new" "--export-storage" "/tmp/collections-new"
]; ];
system.stateVersion = "17.03";
}; };
radicale2_verify = lib.recursiveUpdate radicale2 { radicale2_verify = lib.recursiveUpdate radicale2 {
services.radicale.extraArgs = [ "--verify-storage" ]; services.radicale.extraArgs = [ "--debug" "--verify-storage" ];
system.stateVersion = "17.09";
}; };
radicale2 = lib.recursiveUpdate (common args) { radicale2 = lib.recursiveUpdate (common args) {
system.stateVersion = "17.09"; system.stateVersion = "17.09";
}; };
radicale3 = lib.recursiveUpdate (common args) {
system.stateVersion = "20.09";
};
}; };
# This tests whether the web interface is accessible to an authenticated user # This tests whether the web interface is accessible to an authenticated user
@ -117,6 +119,22 @@ in
retcode == 0 and "VCALENDAR" in output retcode == 0 and "VCALENDAR" in output
), "Could not read calendar from Radicale 2" ), "Could not read calendar from Radicale 2"
radicale.succeed("curl --fail http://${user}:${password}@localhost:${port}/.web/") radicale.succeed("curl --fail http://${user}:${password}@localhost:${port}/.web/")
with subtest("Check Radicale 3 functionality"):
radicale.succeed(
"${switchToConfig "radicale3"} >&2"
)
radicale.wait_for_unit("radicale.service")
radicale.wait_for_open_port(${port})
(retcode, output) = radicale.execute(
"curl --fail http://${user}:${password}@localhost:${port}/someuser/calendar.ics/"
)
assert (
retcode == 0 and "VCALENDAR" in output
), "Could not read calendar from Radicale 3"
radicale.succeed("curl --fail http://${user}:${password}@localhost:${port}/.web/")
''; '';
}) })