nixpkgs/nixos/tests/all-tests.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

841 lines
40 KiB
Nix
Raw Normal View History

{ system,
pkgs,
# Projects the test configuration into a the desired value; usually
# the test runner: `config: config.test`.
callTest,
}:
# The return value of this function will be an attrset with arbitrary depth and
# the `anything` returned by callTest at its test leafs.
# The tests not supported by `system` will be replaced with `{}`, so that
# `passthru.tests` can contain links to those without breaking on architectures
# where said tests are unsupported.
# Example callTest that just extracts the derivation from the test:
# callTest = t: t.test;
with pkgs.lib;
let
discoverTests = val:
if isAttrs val
then
if hasAttr "test" val then callTest val
else mapAttrs (n: s: discoverTests s) val
else if isFunction val
then
# Tests based on make-test-python.nix will return the second lambda
# in that file, which are then forwarded to the test definition
# following the `import make-test-python.nix` expression
# (if it is a function).
discoverTests (val { inherit system pkgs; })
else val;
handleTest = path: args:
discoverTests (import path ({ inherit system pkgs; } // args));
handleTestOn = systems: path: args:
if elem system systems then handleTest path args
else {};
nixosLib = import ../lib {
# Experimental features need testing too, but there's no point in warning
# about it, so we enable the feature flag.
featureFlags.minimalModules = {};
};
evalMinimalConfig = module: nixosLib.evalModules { modules = [ module ]; };
inherit
(rec {
doRunTest = arg: ((import ../lib/testing-python.nix { inherit system pkgs; }).evalTest {
imports = [ arg readOnlyPkgs ];
}).config.result;
findTests = tree:
if tree?recurseForDerivations && tree.recurseForDerivations
then
mapAttrs
(k: findTests)
(builtins.removeAttrs tree ["recurseForDerivations"])
else callTest tree;
runTest = arg: let r = doRunTest arg; in findTests r;
runTestOn = systems: arg:
if elem system systems then runTest arg
else {};
})
runTest
runTestOn
;
# Using a single instance of nixpkgs makes test evaluation faster.
# To make sure we don't accidentally depend on a modified pkgs, we make the
# related options read-only. We need to test the right configuration.
#
# If your service depends on a nixpkgs setting, first try to avoid that, but
# otherwise, you can remove the readOnlyPkgs import and test your service as
# usual.
readOnlyPkgs =
# TODO: We currently accept this for nixosTests, so that the `pkgs` argument
# is consistent with `pkgs` in `pkgs.nixosTests`. Can we reinitialize
# it with `allowAliases = false`?
# warnIf pkgs.config.allowAliases "nixosTests: pkgs includes aliases."
{
_class = "nixosTest";
node.pkgs = pkgs;
};
in {
# Testing the test driver
nixos-test-driver = {
extra-python-packages = handleTest ./nixos-test-driver/extra-python-packages.nix {};
node-name = runTest ./nixos-test-driver/node-name.nix;
};
# NixOS vm tests and non-vm unit tests
_3proxy = runTest ./3proxy.nix;
aaaaxy = runTest ./aaaaxy.nix;
acme = runTest ./acme.nix;
adguardhome = runTest ./adguardhome.nix;
aesmd = runTestOn ["x86_64-linux"] ./aesmd.nix;
agate = runTest ./web-servers/agate.nix;
2020-04-19 20:01:37 +02:00
agda = handleTest ./agda.nix {};
2021-05-03 17:38:02 +02:00
airsonic = handleTest ./airsonic.nix {};
akkoma = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./akkoma.nix {};
akkoma-confined = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./akkoma.nix { confined = true; };
2023-04-11 17:55:16 +02:00
alice-lg = handleTest ./alice-lg.nix {};
allTerminfo = handleTest ./all-terminfo.nix {};
alps = handleTest ./alps.nix {};
amazon-init-shell = handleTest ./amazon-init-shell.nix {};
apcupsd = handleTest ./apcupsd.nix {};
apfs = handleTest ./apfs.nix {};
apparmor = handleTest ./apparmor.nix {};
atd = handleTest ./atd.nix {};
atop = handleTest ./atop.nix {};
2022-12-16 04:07:15 +01:00
atuin = handleTest ./atuin.nix {};
2022-07-31 23:40:48 +02:00
auth-mysql = handleTest ./auth-mysql.nix {};
2023-03-02 22:18:50 +01:00
authelia = handleTest ./authelia.nix {};
avahi = handleTest ./avahi.nix {};
avahi-with-resolved = handleTest ./avahi.nix { networkd = true; };
2019-10-12 01:30:55 +02:00
babeld = handleTest ./babeld.nix {};
2020-05-10 12:54:09 +02:00
bazarr = handleTest ./bazarr.nix {};
bcachefs = handleTestOn ["x86_64-linux" "aarch64-linux"] ./bcachefs.nix {};
beanstalkd = handleTest ./beanstalkd.nix {};
2019-11-24 01:10:17 +01:00
bees = handleTest ./bees.nix {};
2022-10-04 06:06:28 +02:00
binary-cache = handleTest ./binary-cache.nix {};
bind = handleTest ./bind.nix {};
2022-01-25 15:15:52 +01:00
bird = handleTest ./bird.nix {};
2023-04-12 09:20:16 +02:00
birdwatcher = handleTest ./birdwatcher.nix {};
2020-07-21 13:43:32 +02:00
bitcoind = handleTest ./bitcoind.nix {};
bittorrent = handleTest ./bittorrent.nix {};
2020-06-23 13:09:03 +02:00
blockbook-frontend = handleTest ./blockbook-frontend.nix {};
2022-02-10 23:44:18 +01:00
blocky = handleTest ./blocky.nix {};
2021-05-25 20:13:29 +02:00
boot = handleTestOn ["x86_64-linux" "aarch64-linux"] ./boot.nix {};
bootspec = handleTestOn ["x86_64-linux"] ./bootspec.nix {};
boot-stage1 = handleTest ./boot-stage1.nix {};
borgbackup = handleTest ./borgbackup.nix {};
2021-05-04 14:30:25 +02:00
botamusique = handleTest ./botamusique.nix {};
bpf = handleTestOn ["x86_64-linux" "aarch64-linux"] ./bpf.nix {};
2022-01-26 14:03:05 +01:00
breitbandmessung = handleTest ./breitbandmessung.nix {};
brscan5 = handleTest ./brscan5.nix {};
2021-05-30 14:00:00 +02:00
btrbk = handleTest ./btrbk.nix {};
2022-10-02 12:42:57 +02:00
btrbk-doas = handleTest ./btrbk-doas.nix {};
btrbk-no-timer = handleTest ./btrbk-no-timer.nix {};
btrbk-section-order = handleTest ./btrbk-section-order.nix {};
budgie = handleTest ./budgie.nix {};
buildbot = handleTest ./buildbot.nix {};
2020-11-30 00:00:38 +01:00
buildkite-agents = handleTest ./buildkite-agents.nix {};
2019-10-09 13:32:03 +02:00
caddy = handleTest ./caddy.nix {};
cadvisor = handleTestOn ["x86_64-linux"] ./cadvisor.nix {};
cage = handleTest ./cage.nix {};
cagebreak = handleTest ./cagebreak.nix {};
2021-02-23 12:23:20 +01:00
calibre-web = handleTest ./calibre-web.nix {};
2020-12-09 13:01:56 +01:00
cassandra_3_0 = handleTest ./cassandra.nix { testPackage = pkgs.cassandra_3_0; };
cassandra_3_11 = handleTest ./cassandra.nix { testPackage = pkgs.cassandra_3_11; };
2022-04-06 13:03:07 +02:00
cassandra_4 = handleTest ./cassandra.nix { testPackage = pkgs.cassandra_4; };
ceph-multi-node = handleTestOn [ "aarch64-linux" "x86_64-linux" ] ./ceph-multi-node.nix {};
ceph-single-node = handleTestOn [ "aarch64-linux" "x86_64-linux" ] ./ceph-single-node.nix {};
ceph-single-node-bluestore = handleTestOn [ "aarch64-linux" "x86_64-linux" ] ./ceph-single-node-bluestore.nix {};
certmgr = handleTest ./certmgr.nix {};
cfssl = handleTestOn ["aarch64-linux" "x86_64-linux"] ./cfssl.nix {};
2022-04-05 02:02:11 +02:00
cgit = handleTest ./cgit.nix {};
charliecloud = handleTest ./charliecloud.nix {};
chromium = (handleTestOn ["aarch64-linux" "x86_64-linux"] ./chromium.nix {}).stable or {};
2023-01-15 14:06:58 +01:00
chrony-ptp = handleTestOn ["aarch64-linux" "x86_64-linux"] ./chrony-ptp.nix {};
2022-09-05 09:40:17 +02:00
cinnamon = handleTest ./cinnamon.nix {};
cjdns = handleTest ./cjdns.nix {};
clickhouse = handleTest ./clickhouse.nix {};
cloud-init = handleTest ./cloud-init.nix {};
cloud-init-hostname = handleTest ./cloud-init-hostname.nix {};
2023-01-02 00:19:37 +01:00
cloudlog = handleTest ./cloudlog.nix {};
cntr = handleTestOn ["aarch64-linux" "x86_64-linux"] ./cntr.nix {};
cockpit = handleTest ./cockpit.nix {};
2020-11-30 00:00:38 +01:00
cockroachdb = handleTestOn ["x86_64-linux"] ./cockroachdb.nix {};
2022-10-24 22:08:00 +02:00
coder = handleTest ./coder.nix {};
2021-12-22 13:00:00 +01:00
collectd = handleTest ./collectd.nix {};
2023-01-26 00:22:21 +01:00
connman = handleTest ./connman.nix {};
2019-11-24 15:08:53 +01:00
consul = handleTest ./consul.nix {};
2023-04-25 16:54:08 +02:00
consul-template = handleTest ./consul-template.nix {};
containers-bridge = handleTest ./containers-bridge.nix {};
containers-custom-pkgs.nix = handleTest ./containers-custom-pkgs.nix {};
containers-ephemeral = handleTest ./containers-ephemeral.nix {};
containers-extra_veth = handleTest ./containers-extra_veth.nix {};
containers-hosts = handleTest ./containers-hosts.nix {};
containers-imperative = handleTest ./containers-imperative.nix {};
containers-ip = handleTest ./containers-ip.nix {};
containers-macvlans = handleTest ./containers-macvlans.nix {};
containers-names = handleTest ./containers-names.nix {};
2021-02-24 14:02:57 +01:00
containers-nested = handleTest ./containers-nested.nix {};
containers-physical_interfaces = handleTest ./containers-physical_interfaces.nix {};
containers-portforward = handleTest ./containers-portforward.nix {};
containers-reloadable = handleTest ./containers-reloadable.nix {};
containers-restart_networking = handleTest ./containers-restart_networking.nix {};
containers-tmpfs = handleTest ./containers-tmpfs.nix {};
containers-unified-hierarchy = handleTest ./containers-unified-hierarchy.nix {};
2020-06-05 14:54:29 +02:00
convos = handleTest ./convos.nix {};
2020-01-07 17:52:32 +01:00
corerad = handleTest ./corerad.nix {};
coturn = handleTest ./coturn.nix {};
couchdb = handleTest ./couchdb.nix {};
cri-o = handleTestOn ["aarch64-linux" "x86_64-linux"] ./cri-o.nix {};
2022-07-20 20:14:06 +02:00
cups-pdf = handleTest ./cups-pdf.nix {};
custom-ca = handleTest ./custom-ca.nix {};
2020-07-22 10:34:57 +02:00
croc = handleTest ./croc.nix {};
2023-05-02 01:39:19 +02:00
darling = handleTest ./darling.nix {};
2023-04-25 05:34:09 +02:00
deepin = handleTest ./deepin.nix {};
deluge = handleTest ./deluge.nix {};
dendrite = handleTest ./matrix/dendrite.nix {};
2021-09-20 01:43:54 +02:00
dex-oidc = handleTest ./dex-oidc.nix {};
dhparams = handleTest ./dhparams.nix {};
disable-installer-tools = handleTest ./disable-installer-tools.nix {};
2021-03-14 15:44:34 +01:00
discourse = handleTest ./discourse.nix {};
dnscrypt-proxy2 = handleTestOn ["x86_64-linux"] ./dnscrypt-proxy2.nix {};
2020-04-24 01:33:33 +02:00
dnscrypt-wrapper = handleTestOn ["x86_64-linux"] ./dnscrypt-wrapper {};
2022-01-18 08:59:57 +01:00
dnsdist = handleTest ./dnsdist.nix {};
doas = handleTest ./doas.nix {};
docker = handleTestOn ["aarch64-linux" "x86_64-linux"] ./docker.nix {};
docker-rootless = handleTestOn ["aarch64-linux" "x86_64-linux"] ./docker-rootless.nix {};
docker-registry = handleTest ./docker-registry.nix {};
docker-tools = handleTestOn ["x86_64-linux"] ./docker-tools.nix {};
docker-tools-cross = handleTestOn ["x86_64-linux" "aarch64-linux"] ./docker-tools-cross.nix {};
docker-tools-overlay = handleTestOn ["x86_64-linux"] ./docker-tools-overlay.nix {};
documize = handleTest ./documize.nix {};
2022-07-14 11:57:37 +02:00
documentation = pkgs.callPackage ../modules/misc/documentation/test.nix { inherit nixosLib; };
doh-proxy-rust = handleTest ./doh-proxy-rust.nix {};
dokuwiki = handleTest ./dokuwiki.nix {};
2022-11-01 14:02:39 +01:00
dolibarr = handleTest ./dolibarr.nix {};
2021-11-13 23:00:20 +01:00
domination = handleTest ./domination.nix {};
dovecot = handleTest ./dovecot.nix {};
2021-11-30 21:42:29 +01:00
drbd = handleTest ./drbd.nix {};
earlyoom = handleTestOn ["x86_64-linux"] ./earlyoom.nix {};
2023-04-25 13:07:08 +02:00
early-mount-options = handleTest ./early-mount-options.nix {};
ec2-config = (handleTestOn ["x86_64-linux"] ./ec2.nix {}).boot-ec2-config or {};
ec2-nixops = (handleTestOn ["x86_64-linux"] ./ec2.nix {}).boot-ec2-nixops or {};
ecryptfs = handleTest ./ecryptfs.nix {};
fscrypt = handleTest ./fscrypt.nix {};
ejabberd = handleTest ./xmpp/ejabberd.nix {};
elk = handleTestOn ["x86_64-linux"] ./elk.nix {};
emacs-daemon = handleTest ./emacs-daemon.nix {};
2022-10-22 14:53:35 +02:00
endlessh = handleTest ./endlessh.nix {};
2022-09-23 22:39:38 +02:00
endlessh-go = handleTest ./endlessh-go.nix {};
2020-05-24 14:20:58 +02:00
engelsystem = handleTest ./engelsystem.nix {};
enlightenment = handleTest ./enlightenment.nix {};
env = handleTest ./env.nix {};
2022-12-28 15:09:54 +01:00
envfs = handleTest ./envfs.nix {};
2021-08-28 04:28:27 +02:00
envoy = handleTest ./envoy.nix {};
2020-05-24 20:39:23 +02:00
ergo = handleTest ./ergo.nix {};
2022-01-12 21:47:27 +01:00
ergochat = handleTest ./ergochat.nix {};
2023-03-22 22:48:59 +01:00
esphome = handleTest ./esphome.nix {};
etc = pkgs.callPackage ../modules/system/etc/test.nix { inherit evalMinimalConfig; };
activation = pkgs.callPackage ../modules/system/activation/test.nix { };
etcd = handleTestOn ["x86_64-linux"] ./etcd.nix {};
etcd-cluster = handleTestOn ["x86_64-linux"] ./etcd-cluster.nix {};
2021-03-28 23:49:45 +02:00
etebase-server = handleTest ./etebase-server.nix {};
2020-11-30 22:10:07 +01:00
etesync-dav = handleTest ./etesync-dav.nix {};
2021-07-27 15:14:24 +02:00
evcc = handleTest ./evcc.nix {};
fancontrol = handleTest ./fancontrol.nix {};
2023-03-12 07:19:03 +01:00
fcitx5 = handleTest ./fcitx5 {};
fenics = handleTest ./fenics.nix {};
ferm = handleTest ./ferm.nix {};
2021-08-09 11:57:57 +02:00
firefox = handleTest ./firefox.nix { firefoxPackage = pkgs.firefox; };
firefox-beta = handleTest ./firefox.nix { firefoxPackage = pkgs.firefox-beta; };
firefox-devedition = handleTest ./firefox.nix { firefoxPackage = pkgs.firefox-devedition; };
firefox-esr = handleTest ./firefox.nix { firefoxPackage = pkgs.firefox-esr; }; # used in `tested` job
firefox-esr-102 = handleTest ./firefox.nix { firefoxPackage = pkgs.firefox-esr-102; };
2020-08-07 18:45:20 +02:00
firejail = handleTest ./firejail.nix {};
firewall = handleTest ./firewall.nix { nftables = false; };
firewall-nftables = handleTest ./firewall.nix { nftables = true; };
fish = handleTest ./fish.nix {};
flannel = handleTestOn ["x86_64-linux"] ./flannel.nix {};
2019-07-29 17:35:27 +02:00
fluentd = handleTest ./fluentd.nix {};
fluidd = handleTest ./fluidd.nix {};
fontconfig-default-fonts = handleTest ./fontconfig-default-fonts.nix {};
forgejo = handleTest ./gitea.nix { giteaPackage = pkgs.forgejo; };
2022-11-29 18:30:00 +01:00
freenet = handleTest ./freenet.nix {};
2020-01-07 15:53:34 +01:00
freeswitch = handleTest ./freeswitch.nix {};
freshrss-sqlite = handleTest ./freshrss-sqlite.nix {};
freshrss-pgsql = handleTest ./freshrss-pgsql.nix {};
frr = handleTest ./frr.nix {};
fsck = handleTest ./fsck.nix {};
2022-12-21 05:05:02 +01:00
fsck-systemd-stage-1 = handleTest ./fsck.nix { systemdStage1 = true; };
2020-07-29 19:40:38 +02:00
ft2-clone = handleTest ./ft2-clone.nix {};
2022-06-07 12:53:15 +02:00
mimir = handleTest ./mimir.nix {};
garage = handleTest ./garage {};
2022-08-11 12:10:58 +02:00
gemstash = handleTest ./gemstash.nix {};
gerrit = handleTest ./gerrit.nix {};
geth = handleTest ./geth.nix {};
2021-05-20 01:15:28 +02:00
ghostunnel = handleTest ./ghostunnel.nix {};
gitdaemon = handleTest ./gitdaemon.nix {};
gitea = handleTest ./gitea.nix { giteaPackage = pkgs.gitea; };
2023-02-26 13:50:49 +01:00
github-runner = handleTest ./github-runner.nix {};
gitlab = runTest ./gitlab.nix;
gitolite = handleTest ./gitolite.nix {};
gitolite-fcgiwrap = handleTest ./gitolite-fcgiwrap.nix {};
2019-08-17 01:28:43 +02:00
glusterfs = handleTest ./glusterfs.nix {};
gnome = handleTest ./gnome.nix {};
2022-12-28 22:45:22 +01:00
gnome-flashback = handleTest ./gnome-flashback.nix {};
gnome-xorg = handleTest ./gnome-xorg.nix {};
2023-02-02 18:17:40 +01:00
gnupg = handleTest ./gnupg.nix {};
2020-11-30 00:00:38 +01:00
go-neb = handleTest ./go-neb.nix {};
2021-04-09 16:57:33 +02:00
gobgpd = handleTest ./gobgpd.nix {};
gocd-agent = handleTest ./gocd-agent.nix {};
gocd-server = handleTest ./gocd-server.nix {};
2022-09-10 18:01:37 +02:00
gollum = handleTest ./gollum.nix {};
2022-12-21 01:08:48 +01:00
gonic = handleTest ./gonic.nix {};
2019-05-17 03:29:17 +02:00
google-oslogin = handleTest ./google-oslogin {};
2020-11-30 00:00:38 +01:00
gotify-server = handleTest ./gotify-server.nix {};
grafana = handleTest ./grafana {};
grafana-agent = handleTest ./grafana-agent.nix {};
graphite = handleTest ./graphite.nix {};
graylog = handleTest ./graylog.nix {};
2020-11-30 00:00:38 +01:00
grocy = handleTest ./grocy.nix {};
grub = handleTest ./grub.nix {};
gvisor = handleTest ./gvisor.nix {};
2022-01-08 14:08:34 +01:00
hadoop = import ./hadoop { inherit handleTestOn; package=pkgs.hadoop; };
hadoop_3_2 = import ./hadoop { inherit handleTestOn; package=pkgs.hadoop_3_2; };
hadoop2 = import ./hadoop { inherit handleTestOn; package=pkgs.hadoop2; };
haka = handleTest ./haka.nix {};
2022-03-02 18:00:16 +01:00
haste-server = handleTest ./haste-server.nix {};
haproxy = handleTest ./haproxy.nix {};
hardened = handleTest ./hardened.nix {};
harmonia = runTest ./harmonia.nix;
headscale = handleTest ./headscale.nix {};
2022-06-10 14:31:00 +02:00
healthchecks = handleTest ./web-apps/healthchecks.nix {};
2022-03-28 22:19:17 +02:00
hbase2 = handleTest ./hbase.nix { package=pkgs.hbase2; };
hbase_2_4 = handleTest ./hbase.nix { package=pkgs.hbase_2_4; };
2022-03-28 22:19:17 +02:00
hbase3 = handleTest ./hbase.nix { package=pkgs.hbase3; };
hedgedoc = handleTest ./hedgedoc.nix {};
2020-11-27 20:20:36 +01:00
herbstluftwm = handleTest ./herbstluftwm.nix {};
2020-11-30 00:00:38 +01:00
installed-tests = pkgs.recurseIntoAttrs (handleTest ./installed-tests {});
2021-09-07 19:44:12 +02:00
invidious = handleTest ./invidious.nix {};
oci-containers = handleTestOn ["aarch64-linux" "x86_64-linux"] ./oci-containers.nix {};
2021-11-02 01:48:47 +01:00
odoo = handleTest ./odoo.nix {};
# 9pnet_virtio used to mount /nix partition doesn't support
# hibernation. This test happens to work on x86_64-linux but
# not on other platforms.
hibernate = handleTestOn ["x86_64-linux"] ./hibernate.nix {};
hibernate-systemd-stage-1 = handleTestOn ["x86_64-linux"] ./hibernate.nix { systemdStage1 = true; };
hitch = handleTest ./hitch {};
hledger-web = handleTest ./hledger-web.nix {};
hocker-fetchdocker = handleTest ./hocker-fetchdocker {};
2021-07-18 09:51:49 +02:00
hockeypuck = handleTest ./hockeypuck.nix { };
home-assistant = handleTest ./home-assistant.nix {};
hostname = handleTest ./hostname.nix {};
hound = handleTest ./hound.nix {};
2020-12-29 17:13:26 +01:00
hub = handleTest ./git/hub.nix {};
hydra = handleTest ./hydra {};
i3wm = handleTest ./i3wm.nix {};
icingaweb2 = handleTest ./icingaweb2.nix {};
iftop = handleTest ./iftop.nix {};
incron = handleTest ./incron.nix {};
influxdb = handleTest ./influxdb.nix {};
initrd-network-openvpn = handleTest ./initrd-network-openvpn {};
2020-11-30 00:00:38 +01:00
initrd-network-ssh = handleTest ./initrd-network-ssh {};
initrd-luks-empty-passphrase = handleTest ./initrd-luks-empty-passphrase.nix {};
initrdNetwork = handleTest ./initrd-network.nix {};
initrd-secrets = handleTest ./initrd-secrets.nix {};
nixos/grub: Name initrd-secrets by system, not by initrd Previously, secrets were named according to the initrd they were associated with. This created a problem: If secrets were changed whilst the initrd remained the same, there were two versions of the secrets with one initrd. The result was that only one version of the secrets would by recorded into the /boot partition and get used. AFAICT this would only be the oldest version of the secrets for the given initrd version. This manifests as #114594, which I found frustrating while trying to use initrd secrets for the first time. While developing the secrets I found I could not get new versions of the secrets to take effect. Additionally, it's a nasty issue to run into if you had cause to change the initrd secrets for credential rotation, etc, if you change them and discover you cannot, or alternatively that you can't roll back as you would expect. Additional changes in this patch. * Add a regression test that switching to another grub configuration with the alternate secrets works. This test relies on the fact that it is not changing the initrd. I have checked that the test fails if I undo my change. * Persist the useBootLoader disk state, similarly to other boot state. * I had to do this, otherwise I could not find a route to testing the alternate boot configuration. I did attempt a few different ways of testing this, including directly running install-grub.pl, but what I've settled on is most like what a user would do and avoids depending on lots of internal details. * Making tests that test the boot are a bit tricky (see hibernate.nix and installer.nix for inspiration), I found that in addition to having to copy quite a bit of code I still couldn't get things to work as desired since the bootloader state was being clobbered. My change to persist the useBootLoader state could break things, conceptually. I need some help here discovering if that is the case, possibly by letting this run through a staging CI if there is one. Fix #114594. cc potential reviewers: @lopsided98 (original implementer) @joachifm (original reviewer), @wkennington (numerous fixes to grub-install.pl), @lheckemann (wrote original secrets test).
2023-01-05 13:28:32 +01:00
initrd-secrets-changing = handleTest ./initrd-secrets-changing.nix {};
input-remapper = handleTest ./input-remapper.nix {};
inspircd = handleTest ./inspircd.nix {};
installer = handleTest ./installer.nix {};
installer-systemd-stage-1 = handleTest ./installer-systemd-stage-1.nix {};
invoiceplane = handleTest ./invoiceplane.nix {};
2020-02-02 13:00:00 +01:00
iodine = handleTest ./iodine.nix {};
ipv6 = handleTest ./ipv6.nix {};
iscsi-multipath-root = handleTest ./iscsi-multipath-root.nix {};
iscsi-root = handleTest ./iscsi-root.nix {};
isso = handleTest ./isso.nix {};
jackett = handleTest ./jackett.nix {};
jellyfin = handleTest ./jellyfin.nix {};
jenkins = handleTest ./jenkins.nix {};
jenkins-cli = handleTest ./jenkins-cli.nix {};
2021-10-15 20:00:24 +02:00
jibri = handleTest ./jibri.nix {};
jirafeau = handleTest ./jirafeau.nix {};
2020-03-18 04:23:15 +01:00
jitsi-meet = handleTest ./jitsi-meet.nix {};
k3s = handleTest ./k3s {};
kafka = handleTest ./kafka.nix {};
kanidm = handleTest ./kanidm.nix {};
2022-10-10 07:16:25 +02:00
karma = handleTest ./karma.nix {};
2023-04-30 05:27:25 +02:00
kavita = handleTest ./kavita.nix {};
kbd-setfont-decompress = handleTest ./kbd-setfont-decompress.nix {};
kbd-update-search-paths-patch = handleTest ./kbd-update-search-paths-patch.nix {};
kea = handleTest ./kea.nix {};
2019-12-22 08:45:31 +01:00
keepalived = handleTest ./keepalived.nix {};
keepassxc = handleTest ./keepassxc.nix {};
2019-01-11 05:36:51 +01:00
kerberos = handleTest ./kerberos/default.nix {};
2021-04-07 17:57:58 +02:00
kernel-generic = handleTest ./kernel-generic.nix {};
kernel-latest-ath-user-regd = handleTest ./kernel-latest-ath-user-regd.nix {};
nixos/keter: init Enable keter module Keter is an apploader which: 1. has the old app running on a port. 2. loads a new one, and wait for that to complete 3. switches the old with the new one once the new one finished loading. It supports more functionality but this use case is the primary one being used by supercede. Adds keter as a module to nixos. Currently keter is unusable with nix, because it relies on bundeling of a tar and uploading that to a specific folder. These expressions automate these devops tasks, with especially nixops in mind. This will work with versions above 1.8 The test seems to work. This uses a new version of keter which has good support for status code on error pages. We're using this config at production at supercede so it should be fine. Squash log: ========== mention keter in changelog Update generated release notes Always restart keter on failure This is a little bit of extra stability in case keter crashes. Which can happen under extreme conditions (DoS attacks). Update nixos/doc/manual/release-notes/rl-2205.section.md Co-authored-by: ckie <25263210+ckiee@users.noreply.github.com> Update nixos/modules/module-list.nix Co-authored-by: ckie <25263210+ckiee@users.noreply.github.com> Remove sanitization don't put domain in as a string Update nixos/tests/keter.nix Co-authored-by: ckie <25263210+ckiee@users.noreply.github.com> add jappie as module maintainer Use type path instead of two seperate options Fix generated docs added test machinery to figure out why it's failing Fix the test, use console output run nixpkgs-fmt on all modules Inline config file. This get's rid of a lot of inderection as well. Run nix format remove comment simplify executable for test delete config file add config for keter root Remove after redis clause set keter root by default to /var/lib/keter Update nixos/modules/services/web-servers/keter/default.nix Co-authored-by: ckie <25263210+ckiee@users.noreply.github.com> Update nixos/modules/services/web-servers/keter/default.nix Co-authored-by: ckie <25263210+ckiee@users.noreply.github.com> Update nixos/modules/services/web-servers/keter/default.nix Co-authored-by: ckie <25263210+ckiee@users.noreply.github.com> fix nit add newlines add default text and move description in a long description Delete rather obvious comment fix release db thing remove longDescription and put it in a comment instead change description of mkEnalbeOption explain what keter does by using the hackage synopsis set domain to keterDomain and same for executable move comment to where it's happening fix type error add formatting better comment try add seperate user for keter Revert "try add seperate user for keter" This reverts commit d3522d36c96117335bfa072e6f453406c244e940. Doing this breaks the setup set default to avoid needing cap_net_bind_service remove weird comment use example fields eleborated on process leakage Update nixos/modules/services/web-servers/keter/default.nix Co-authored-by: ckie <25263210+ckiee@users.noreply.github.com> run nixpkgs-fmt update docs Fix formatting, set keter package by default format our little nixexpr replace '' -> " where possible drop indent for multiline string make description much shorter regen docs database
2022-05-18 15:41:54 +02:00
keter = handleTest ./keter.nix {};
2021-10-25 00:20:46 +02:00
kexec = handleTest ./kexec.nix {};
keycloak = discoverTests (import ./keycloak.nix);
keyd = handleTest ./keyd.nix {};
keymap = handleTest ./keymap.nix {};
2019-03-13 01:12:56 +01:00
knot = handleTest ./knot.nix {};
2022-08-12 23:52:52 +02:00
komga = handleTest ./komga.nix {};
2020-02-14 09:56:43 +01:00
krb5 = discoverTests (import ./krb5 {});
2021-02-26 13:06:18 +01:00
ksm = handleTest ./ksm.nix {};
2022-09-25 20:46:03 +02:00
kthxbye = handleTest ./kthxbye.nix {};
kubernetes = handleTestOn ["x86_64-linux"] ./kubernetes {};
kubo = runTest ./kubo.nix;
2022-08-16 15:03:37 +02:00
ladybird = handleTest ./ladybird.nix {};
2022-08-16 20:33:08 +02:00
languagetool = handleTest ./languagetool.nix {};
latestKernel.login = handleTest ./login.nix { latestKernel = true; };
leaps = handleTest ./leaps.nix {};
lemmy = handleTest ./lemmy.nix {};
2021-11-15 12:46:20 +01:00
libinput = handleTest ./libinput.nix {};
2021-04-19 01:05:25 +02:00
libreddit = handleTest ./libreddit.nix {};
2021-11-18 19:10:48 +01:00
libresprite = handleTest ./libresprite.nix {};
2021-05-15 23:22:03 +02:00
libreswan = handleTest ./libreswan.nix {};
librewolf = handleTest ./firefox.nix { firefoxPackage = pkgs.librewolf; };
2022-07-15 22:00:28 +02:00
libuiohook = handleTest ./libuiohook.nix {};
2022-08-22 05:17:06 +02:00
libvirtd = handleTest ./libvirtd.nix {};
2021-11-15 12:46:20 +01:00
lidarr = handleTest ./lidarr.nix {};
lightdm = handleTest ./lightdm.nix {};
2022-07-24 17:04:12 +02:00
lighttpd = handleTest ./lighttpd.nix {};
2019-03-16 13:24:23 +01:00
limesurvey = handleTest ./limesurvey.nix {};
2022-08-30 13:15:41 +02:00
listmonk = handleTest ./listmonk.nix {};
2021-07-30 17:41:54 +02:00
litestream = handleTest ./litestream.nix {};
2023-04-27 15:26:57 +02:00
lldap = handleTest ./lldap.nix {};
2020-11-24 02:53:21 +01:00
locate = handleTest ./locate.nix {};
login = handleTest ./login.nix {};
logrotate = handleTest ./logrotate.nix {};
2019-06-27 18:11:09 +02:00
loki = handleTest ./loki.nix {};
luks = handleTest ./luks.nix {};
2022-02-01 18:21:11 +01:00
lvm2 = handleTest ./lvm2 {};
2020-06-08 21:33:21 +02:00
lxd = handleTest ./lxd.nix {};
lxd-nftables = handleTest ./lxd-nftables.nix {};
2021-10-20 23:39:53 +02:00
lxd-image-server = handleTest ./lxd-image-server.nix {};
#logstash = handleTest ./logstash.nix {};
lorri = handleTest ./lorri/default.nix {};
2023-04-21 08:59:13 +02:00
maddy = discoverTests (import ./maddy { inherit handleTest; });
2022-04-01 04:41:31 +02:00
maestral = handleTest ./maestral.nix {};
magic-wormhole-mailbox-server = handleTest ./magic-wormhole-mailbox-server.nix {};
2020-11-30 00:00:38 +01:00
magnetico = handleTest ./magnetico.nix {};
2019-03-27 12:35:24 +01:00
mailcatcher = handleTest ./mailcatcher.nix {};
2020-12-17 16:58:57 +01:00
mailhog = handleTest ./mailhog.nix {};
2023-02-09 18:56:56 +01:00
mailman = handleTest ./mailman.nix {};
man = handleTest ./man.nix {};
mariadb-galera = handleTest ./mysql/mariadb-galera.nix {};
mastodon = discoverTests (import ./web-apps/mastodon { inherit handleTestOn; });
2023-03-25 17:02:52 +01:00
pixelfed = discoverTests (import ./web-apps/pixelfed { inherit handleTestOn; });
2023-01-08 16:44:00 +01:00
mate = handleTest ./mate.nix {};
2019-10-04 22:38:58 +02:00
matomo = handleTest ./matomo.nix {};
matrix-appservice-irc = handleTest ./matrix/appservice-irc.nix {};
matrix-conduit = handleTest ./matrix/conduit.nix {};
matrix-synapse = handleTest ./matrix/synapse.nix {};
mattermost = handleTest ./mattermost.nix {};
mediatomb = handleTest ./mediatomb.nix {};
mediawiki = handleTest ./mediawiki.nix {};
meilisearch = handleTest ./meilisearch.nix {};
memcached = handleTest ./memcached.nix {};
2022-10-19 10:49:57 +02:00
merecat = handleTest ./merecat.nix {};
2019-08-18 09:28:16 +02:00
metabase = handleTest ./metabase.nix {};
2023-01-15 00:28:32 +01:00
mindustry = handleTest ./mindustry.nix {};
2020-11-28 18:42:10 +01:00
minecraft = handleTest ./minecraft.nix {};
2020-11-28 18:42:46 +01:00
minecraft-server = handleTest ./minecraft-server.nix {};
2020-11-30 00:00:38 +01:00
minidlna = handleTest ./minidlna.nix {};
2018-12-21 19:36:58 +01:00
miniflux = handleTest ./miniflux.nix {};
minio = handleTest ./minio.nix {};
2023-02-04 02:23:14 +01:00
miriway = handleTest ./miriway.nix {};
misc = handleTest ./misc.nix {};
2021-05-30 17:33:09 +02:00
mjolnir = handleTest ./matrix/mjolnir.nix {};
2021-08-13 20:55:15 +02:00
mod_perl = handleTest ./mod_perl.nix {};
molly-brown = handleTest ./molly-brown.nix {};
2023-04-16 11:21:57 +02:00
monica = handleTest ./web-apps/monica.nix {};
mongodb = handleTest ./mongodb.nix {};
2019-06-21 16:09:15 +02:00
moodle = handleTest ./moodle.nix {};
2022-03-22 23:35:39 +01:00
moonraker = handleTest ./moonraker.nix {};
morty = handleTest ./morty.nix {};
2019-04-24 10:23:13 +02:00
mosquitto = handleTest ./mosquitto.nix {};
2021-10-06 21:51:07 +02:00
moosefs = handleTest ./moosefs.nix {};
mpd = handleTest ./mpd.nix {};
mpv = handleTest ./mpv.nix {};
mtp = handleTest ./mtp.nix {};
2023-02-03 10:28:48 +01:00
multipass = handleTest ./multipass.nix {};
mumble = handleTest ./mumble.nix {};
# Fails on aarch64-linux at the PDF creation step - need to debug this on an
# aarch64 machine..
musescore = handleTestOn ["x86_64-linux"] ./musescore.nix {};
munin = handleTest ./munin.nix {};
mutableUsers = handleTest ./mutable-users.nix {};
2019-05-18 22:18:01 +02:00
mxisd = handleTest ./mxisd.nix {};
mysql = handleTest ./mysql/mysql.nix {};
mysql-autobackup = handleTest ./mysql/mysql-autobackup.nix {};
mysql-backup = handleTest ./mysql/mysql-backup.nix {};
mysql-replication = handleTest ./mysql/mysql-replication.nix {};
2020-11-28 18:00:25 +01:00
n8n = handleTest ./n8n.nix {};
2019-12-30 13:00:00 +01:00
nagios = handleTest ./nagios.nix {};
nar-serve = handleTest ./nar-serve.nix {};
nat.firewall = handleTest ./nat.nix { withFirewall = true; };
nat.standalone = handleTest ./nat.nix { withFirewall = false; };
nat.nftables.firewall = handleTest ./nat.nix { withFirewall = true; nftables = true; };
nat.nftables.standalone = handleTest ./nat.nix { withFirewall = false; nftables = true; };
2021-06-26 13:58:40 +02:00
nats = handleTest ./nats.nix {};
navidrome = handleTest ./navidrome.nix {};
nbd = handleTest ./nbd.nix {};
2020-06-07 23:59:12 +02:00
ncdns = handleTest ./ncdns.nix {};
2019-02-03 16:47:01 +01:00
ndppd = handleTest ./ndppd.nix {};
nebula = handleTest ./nebula.nix {};
2022-08-14 18:59:15 +02:00
netbird = handleTest ./netbird.nix {};
2019-02-01 14:29:54 +01:00
neo4j = handleTest ./neo4j.nix {};
netdata = handleTest ./netdata.nix {};
networking.networkd = handleTest ./networking.nix { networkd = true; };
networking.scripted = handleTest ./networking.nix { networkd = false; };
netbox = handleTest ./web-apps/netbox.nix { inherit (pkgs) netbox; };
netbox_3_3 = handleTest ./web-apps/netbox.nix { netbox = pkgs.netbox_3_3; };
# TODO: put in networking.nix after the test becomes more complete
networkingProxy = handleTest ./networking-proxy.nix {};
nextcloud = handleTest ./nextcloud {};
nexus = handleTest ./nexus.nix {};
# TODO: Test nfsv3 + Kerberos
nfs3 = handleTest ./nfs { version = 3; };
nfs4 = handleTest ./nfs { version = 4; };
nghttpx = handleTest ./nghttpx.nix {};
nginx = handleTest ./nginx.nix {};
2020-10-20 18:05:41 +02:00
nginx-auth = handleTest ./nginx-auth.nix {};
nginx: Clear Last-Modified if ETag is from store This is what I've suspected a while ago[1]: > Heads-up everyone: After testing this in a few production instances, > it seems that some browsers still get cache hits for new store paths > (and changed contents) for some reason. I highly suspect that it might > be due to the last-modified header (as mentioned in [2]). > > Going to test this with last-modified disabled for a little while and > if this is the case I think we should improve that patch by disabling > last-modified if serving from a store path. Much earlier[2] when I reviewed the patch, I wrote this: > Other than that, it looks good to me. > > However, I'm not sure what we should do with Last-Modified header. > From RFC 2616, section 13.3.4: > > - If both an entity tag and a Last-Modified value have been > provided by the origin server, SHOULD use both validators in > cache-conditional requests. This allows both HTTP/1.0 and > HTTP/1.1 caches to respond appropriately. > > I'm a bit nervous about the SHOULD here, as user agents in the wild > could possibly just use Last-Modified and use the cached content > instead. Unfortunately, I didn't pursue this any further back then because @pbogdan noted[3] the following: > Hmm, could they (assuming they are conforming): > > * If an entity tag has been provided by the origin server, MUST > use that entity tag in any cache-conditional request (using If- > Match or If-None-Match). Since running with this patch in some deployments, I found that both Firefox and Chrome/Chromium do NOT re-validate against the ETag if the Last-Modified header is still the same. So I wrote a small NixOS VM test with Geckodriver to have a test case which is closer to the real world and I indeed was able to reproduce this. Whether this is actually a bug in Chrome or Firefox is an entirely different issue and even IF it is the fault of the browsers and it is fixed at some point, we'd still need to handle this for older browser versions. Apart from clearing the header, I also recreated the patch by using a plain "git diff" with a small description on top. This should make it easier for future authors to work on that patch. [1]: https://github.com/NixOS/nixpkgs/pull/48337#issuecomment-495072764 [2]: https://github.com/NixOS/nixpkgs/pull/48337#issuecomment-451644084 [3]: https://github.com/NixOS/nixpkgs/pull/48337#issuecomment-451646135 Signed-off-by: aszlig <aszlig@nix.build>
2019-12-30 14:06:00 +01:00
nginx-etag = handleTest ./nginx-etag.nix {};
nginx-globalredirect = handleTest ./nginx-globalredirect.nix {};
2022-04-18 12:22:39 +02:00
nginx-http3 = handleTest ./nginx-http3.nix {};
2022-02-15 00:10:37 +01:00
nginx-modsecurity = handleTest ./nginx-modsecurity.nix {};
2022-09-18 14:54:04 +02:00
nginx-njs = handleTest ./nginx-njs.nix {};
nginx: Fix ETag patch to ignore realpath(3) error While our ETag patch works pretty fine if it comes to serving data off store paths, it unfortunately broke something that might be a bit more common, namely when using regexes to extract path components of location directives for example. Recently, @devhell has reported a bug with a nginx location directive like this: location ~^/\~([a-z0-9_]+)(/.*)?$" { alias /home/$1/public_html$2; } While this might look harmless at first glance, it does however cause issues with our ETag patch. The alias directive gets broken up by nginx like this: *2 http script copy: "/home/" *2 http script capture: "foo" *2 http script copy: "/public_html/" *2 http script capture: "bar.txt" In our patch however, we use realpath(3) to get the canonicalised path from ngx_http_core_loc_conf_s.root, which returns the *configured* value from the root or alias directive. So in the example above, realpath(3) boils down to the following syscalls: lstat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/home/$1", 0x7ffd08da6f60) = -1 ENOENT (No such file or directory) During my review[1] of the initial patch, I didn't actually notice that what we're doing here is returning NGX_ERROR if the realpath(3) call fails, which in turn causes an HTTP 500 error. Since our patch actually made the canonicalisation (and thus additional syscalls) necessary, we really shouldn't introduce an additional error so let's - at least for now - silently skip return value if realpath(3) has failed. However since we're using the unaltered root from the config we have another issue, consider this root: /nix/store/...-abcde/$1 Calling realpath(3) on this path will fail (except if there's a file called "$1" of course), so even this fix is not enough because it results in the ETag not being set to the store path hash. While this is very ugly and we should fix this very soon, it's not as serious as getting HTTP 500 errors for serving static files. I added a small NixOS VM test, which uses the example above as a regression test. It seems that my memory is failing these days, since apparently I *knew* about this issue since digging for existing issues in nixpkgs, I found this similar pull request which I even reviewed: https://github.com/NixOS/nixpkgs/pull/66532 However, since the comments weren't addressed and the author hasn't responded to the pull request, I decided to keep this very commit and do a follow-up pull request. [1]: https://github.com/NixOS/nixpkgs/pull/48337 Signed-off-by: aszlig <aszlig@nix.build> Reported-by: @devhell Acked-by: @7c6f434c Acked-by: @yorickvP Merges: https://github.com/NixOS/nixpkgs/pull/80671 Fixes: https://github.com/NixOS/nixpkgs/pull/66532
2020-02-20 20:43:42 +01:00
nginx-pubhtml = handleTest ./nginx-pubhtml.nix {};
2020-04-23 21:00:27 +02:00
nginx-sandbox = handleTestOn ["x86_64-linux"] ./nginx-sandbox.nix {};
nginx-sso = handleTest ./nginx-sso.nix {};
nginx-variants = handleTest ./nginx-variants.nix {};
2022-04-10 19:41:30 +02:00
nifi = handleTestOn ["x86_64-linux"] ./web-apps/nifi.nix {};
2021-07-26 12:00:05 +02:00
nitter = handleTest ./nitter.nix {};
2022-04-11 20:51:29 +02:00
nix-ld = handleTest ./nix-ld.nix {};
nix-serve = handleTest ./nix-serve.nix {};
nix-serve-ssh = handleTest ./nix-serve-ssh.nix {};
2021-10-18 00:38:58 +02:00
nixops = handleTest ./nixops/default.nix {};
nixos-generate-config = handleTest ./nixos-generate-config.nix {};
nixos-rebuild-specialisations = handleTest ./nixos-rebuild-specialisations.nix {};
nixpkgs = pkgs.callPackage ../modules/misc/nixpkgs/test.nix { inherit evalMinimalConfig; };
2021-07-28 12:42:26 +02:00
node-red = handleTest ./node-red.nix {};
nomad = handleTest ./nomad.nix {};
non-default-filesystems = handleTest ./non-default-filesystems.nix {};
2022-01-22 03:06:13 +01:00
noto-fonts = handleTest ./noto-fonts.nix {};
noto-fonts-cjk-qt-default-weight = handleTest ./noto-fonts-cjk-qt-default-weight.nix {};
novacomd = handleTestOn ["x86_64-linux"] ./novacomd.nix {};
nscd = handleTest ./nscd.nix {};
nsd = handleTest ./nsd.nix {};
2022-09-01 14:36:19 +02:00
ntfy-sh = handleTest ./ntfy-sh.nix {};
nzbget = handleTest ./nzbget.nix {};
2020-10-04 16:06:53 +02:00
nzbhydra2 = handleTest ./nzbhydra2.nix {};
2020-11-05 02:37:50 +01:00
oh-my-zsh = handleTest ./oh-my-zsh.nix {};
ombi = handleTest ./ombi.nix {};
2019-10-22 16:20:56 +02:00
openarena = handleTest ./openarena.nix {};
openldap = handleTest ./openldap.nix {};
opensearch = discoverTests (import ./opensearch.nix);
openresty-lua = handleTest ./openresty-lua.nix {};
opensmtpd = handleTest ./opensmtpd.nix {};
opensmtpd-rspamd = handleTest ./opensmtpd-rspamd.nix {};
openssh = handleTest ./openssh.nix {};
octoprint = handleTest ./octoprint.nix {};
openstack-image-metadata = (handleTestOn ["x86_64-linux"] ./openstack-image.nix {}).metadata or {};
2020-11-30 00:00:38 +01:00
openstack-image-userdata = (handleTestOn ["x86_64-linux"] ./openstack-image.nix {}).userdata or {};
2021-01-08 17:48:00 +01:00
opentabletdriver = handleTest ./opentabletdriver.nix {};
2021-09-23 10:48:29 +02:00
owncast = handleTest ./owncast.nix {};
2020-12-20 21:18:54 +01:00
image-contents = handleTest ./image-contents.nix {};
2023-05-15 15:33:37 +02:00
openvscode-server = handleTest ./openvscode-server.nix {};
2019-08-21 00:27:14 +02:00
orangefs = handleTest ./orangefs.nix {};
os-prober = handleTestOn ["x86_64-linux"] ./os-prober.nix {};
2019-01-05 13:13:10 +01:00
osrm-backend = handleTest ./osrm-backend.nix {};
2019-01-23 10:19:23 +01:00
overlayfs = handleTest ./overlayfs.nix {};
2022-03-08 02:46:26 +01:00
pacemaker = handleTest ./pacemaker.nix {};
2019-04-24 10:45:29 +02:00
packagekit = handleTest ./packagekit.nix {};
pam-file-contents = handleTest ./pam/pam-file-contents.nix {};
pam-oath-login = handleTest ./pam/pam-oath-login.nix {};
pam-u2f = handleTest ./pam/pam-u2f.nix {};
pam-ussh = handleTest ./pam/pam-ussh.nix {};
pam-zfs-key = handleTest ./pam/zfs-key.nix {};
pass-secret-service = handleTest ./pass-secret-service.nix {};
patroni = handleTestOn ["x86_64-linux"] ./patroni.nix {};
pantalaimon = handleTest ./matrix/pantalaimon.nix {};
pantheon = handleTest ./pantheon.nix {};
paperless = handleTest ./paperless.nix {};
2021-06-02 18:19:37 +02:00
parsedmarc = handleTest ./parsedmarc {};
2020-11-30 00:00:38 +01:00
pdns-recursor = handleTest ./pdns-recursor.nix {};
peerflix = handleTest ./peerflix.nix {};
2022-12-01 17:32:15 +01:00
peering-manager = handleTest ./web-apps/peering-manager.nix {};
2021-05-31 13:23:06 +02:00
peertube = handleTestOn ["x86_64-linux"] ./web-apps/peertube.nix {};
peroxide = handleTest ./peroxide.nix {};
pgadmin4 = handleTest ./pgadmin4.nix {};
pgjwt = handleTest ./pgjwt.nix {};
pgmanage = handleTest ./pgmanage.nix {};
2022-08-02 21:34:37 +02:00
phosh = handleTest ./phosh.nix {};
2023-01-15 00:16:35 +01:00
photoprism = handleTest ./photoprism.nix {};
php = handleTest ./php {};
php80 = handleTest ./php { php = pkgs.php80; };
2021-11-25 21:38:19 +01:00
php81 = handleTest ./php { php = pkgs.php81; };
2022-11-13 21:14:38 +01:00
php82 = handleTest ./php { php = pkgs.php82; };
2022-06-28 21:17:38 +02:00
phylactery = handleTest ./web-apps/phylactery.nix {};
pict-rs = handleTest ./pict-rs.nix {};
2020-06-03 23:12:06 +02:00
pinnwand = handleTest ./pinnwand.nix {};
plasma-bigscreen = handleTest ./plasma-bigscreen.nix {};
plasma5 = handleTest ./plasma5.nix {};
2021-10-31 21:34:10 +01:00
plasma5-systemd-start = handleTest ./plasma5-systemd-start.nix {};
2021-05-21 23:15:23 +02:00
plausible = handleTest ./plausible.nix {};
please = handleTest ./please.nix {};
2020-11-08 15:10:14 +01:00
pleroma = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./pleroma.nix {};
2020-11-13 15:00:34 +01:00
plikd = handleTest ./plikd.nix {};
plotinus = handleTest ./plotinus.nix {};
2021-04-14 19:15:41 +02:00
podgrab = handleTest ./podgrab.nix {};
podman = handleTestOn ["aarch64-linux" "x86_64-linux"] ./podman/default.nix {};
podman-tls-ghostunnel = handleTestOn ["aarch64-linux" "x86_64-linux"] ./podman/tls-ghostunnel.nix {};
2022-06-17 20:04:54 +02:00
polaris = handleTest ./polaris.nix {};
2021-01-08 04:03:00 +01:00
pomerium = handleTestOn ["x86_64-linux"] ./pomerium.nix {};
postfix = handleTest ./postfix.nix {};
postfix-raise-smtpd-tls-security-level = handleTest ./postfix-raise-smtpd-tls-security-level.nix {};
2021-05-19 06:34:03 +02:00
postfixadmin = handleTest ./postfixadmin.nix {};
postgis = handleTest ./postgis.nix {};
postgresql = handleTest ./postgresql.nix {};
postgresql: implement opt-in JIT support Closes #150801 Note: I decided against resuming directly on #150801 because the conflict was too big (and resolving it seemed too error-prone to me). Also the `this`-refactoring could be done in an easier manner, i.e. by exposing JIT attributes with the correct configuration. More on that below. This patch creates variants of the `postgresql*`-packages with JIT[1] support. Please note that a lot of the work was derived from previous patches filed by other contributors, namely dasJ, andir and abbradar, hence the co-authored-by tags below. Effectively, the following things have changed: * For JIT variants an LLVM-backed stdenv with clang is now used as suggested by dasJ[2]. We need LLVM and CLang[3] anyways to build the JIT-part, so no need to mix this up with GCC's stdenv. Also, using the `dev`-output of LLVM and clang's stdenv for building (and adding llvm libs as build-inputs) seems more cross friendly to me (which will become useful when cross-building for JIT-variants will actually be supported). * Plugins inherit the build flags from the Makefiles in `$out/lib/pgxs/src` (e.g. `-Werror=unguarded-availability-new`). Since some of the flags are clang-specific (and stem from the use of the CLang stdenv) and don't work on gcc, the stdenv of `pkgs.postgresql` is passed to the plugins. I.e., plugins for non-JIT variants are built with a gcc stdenv on Linux and plugins for JIT variants with a clang stdenv. Since `plv8` hard-codes `gcc` as `$CC` in its Makefile[4], I marked it as broken for JIT-variants of postgresql only. * Added a test-matrix to confirm that JIT works fine on each `pkgs.postgresql_*_jit` (thanks Andi for the original test in #124804!). * For each postgresql version, a new attribute `postgresql_<version>_jit` (and a corresponding `postgresqlPackages<version>JitPackages`) are now exposed for better discoverability and prebuilt artifacts in the binary cache. * In #150801 the `this`-argument was replaced by an internal recursion. I decided against this approach because it'd blow up the diff even more which makes the readability way harder and also harder to revert this if necessary. Instead, it is made sure that `this` always points to the correct variant of `postgresql` and re-using that in an additional `.override {}`-expression is trivial because the JIT-variant is exposed in `all-packages.nix`. * I think the changes are sufficiently big to actually add myself as maintainer here. * Added `libxcrypt` to `buildInputs` for versions <v13. While building things with an LLVM stdenv, these versions complained that the extern `crypt()` symbol can't be found. Not sure what this is exactly about, but since we want to switch to libxcrypt for `crypt()` usage anyways[5] I decided to add it. For >=13 it's not relevant anymore anyways[6]. * JIT support doesn't work with cross-compilation. It is attempted to build LLVM-bytecode (`%.bc` is the corresponding `make(1)`-rule) for each sub-directory in `backend/` for the JIT apparently, but with a $(CLANG) that can produce binaries for the build, not the host-platform. I managed to get a cross-build with JIT support working with `depsBuildBuild = [ llvmPackages.clang ] ++ buildInputs`, but considering that the resulting LLVM IR isn't platform-independent this doesn't give you much. In fact, I tried to test the result in a VM-test, but as soon as JIT was used to optimize a query, postgres would coredump with `Illegal instruction`. A common concern of the original approach - with llvm as build input - was the massive increase of closure size. With the new approach of using the LLVM stdenv directly and patching out references to the clang drv in `$out` the effective closure size changes are: $ nix path-info -Sh $(nix-build -A postgresql_14) /nix/store/kssxxqycwa3c7kmwmykwxqvspxxa6r1w-postgresql-14.7 306.4M $ nix path-info -Sh $(nix-build -A postgresql_14_jit) /nix/store/xc7qmgqrn4h5yr4vmdwy56gs4bmja9ym-postgresql-14.7 689.2M Most of the increase in closure-size stems from the `lib`-output of LLVM $ nix path-info -Sh /nix/store/5r97sbs5j6mw7qnbg8nhnq1gad9973ap-llvm-11.1.0-lib /nix/store/5r97sbs5j6mw7qnbg8nhnq1gad9973ap-llvm-11.1.0-lib 349.8M which is why this shouldn't be enabled by default. While this is quite much because of LLVM, it's still a massive improvement over the simple approach of adding llvm/clang as build-inputs and building with `--with-llvm`: $ nix path-info -Sh $(nix-build -E ' with import ./. {}; postgresql.overrideAttrs ({ configureFlags ? [], buildInputs ? [], ... }: { configureFlags = configureFlags ++ [ "--with-llvm" ]; buildInputs = buildInputs ++ [ llvm clang ]; })' -j0) /nix/store/i3bd2r21c6c3428xb4gavjnplfqxn27p-postgresql-14.7 1.6G Co-authored-by: Andreas Rammhold <andreas@rammhold.de> Co-authored-by: Janne Heß <janne@hess.ooo> Co-authored-by: Nikolay Amiantov <ab@fmap.me> [1] https://www.postgresql.org/docs/current/jit-reason.html [2] https://github.com/NixOS/nixpkgs/pull/124804#issuecomment-864616931 & https://github.com/NixOS/nixpkgs/pull/150801#issuecomment-1467868321 [3] This fails with the following error otherwise: ``` configure: error: clang not found, but required when compiling --with-llvm, specify with CLANG= ``` [4] https://github.com/plv8/plv8/blob/v3.1.5/Makefile#L14 [5] https://github.com/NixOS/nixpkgs/pull/181764 [6] https://github.com/postgres/postgres/commit/c45643d618e35ec2fe91438df15abd4f3c0d85ca
2023-03-18 09:54:54 +01:00
postgresql-jit = handleTest ./postgresql-jit.nix {};
postgresql-wal-receiver = handleTest ./postgresql-wal-receiver.nix {};
powerdns = handleTest ./powerdns.nix {};
powerdns-admin = handleTest ./powerdns-admin.nix {};
power-profiles-daemon = handleTest ./power-profiles-daemon.nix {};
pppd = handleTest ./pppd.nix {};
predictable-interface-names = handleTest ./predictable-interface-names.nix {};
printing-socket = handleTest ./printing.nix { socket = true; };
printing-service = handleTest ./printing.nix { socket = false; };
2020-04-21 13:37:00 +02:00
privacyidea = handleTest ./privacyidea.nix {};
2021-03-03 17:18:09 +01:00
privoxy = handleTest ./privoxy.nix {};
prometheus = handleTest ./prometheus.nix {};
prometheus-exporters = handleTest ./prometheus-exporters.nix {};
prosody = handleTest ./xmpp/prosody.nix {};
prosody-mysql = handleTest ./xmpp/prosody-mysql.nix {};
proxy = handleTest ./proxy.nix {};
2021-10-10 17:54:22 +02:00
prowlarr = handleTest ./prowlarr.nix {};
2020-07-29 19:00:33 +02:00
pt2-clone = handleTest ./pt2-clone.nix {};
pykms = handleTest ./pykms.nix {};
2021-12-01 11:06:18 +01:00
public-inbox = handleTest ./public-inbox.nix {};
2023-04-07 08:34:25 +02:00
pufferpanel = handleTest ./pufferpanel.nix {};
2021-11-30 14:51:06 +01:00
pulseaudio = discoverTests (import ./pulseaudio.nix);
qboot = handleTestOn ["x86_64-linux" "i686-linux"] ./qboot.nix {};
qemu-vm-restrictnetwork = handleTest ./qemu-vm-restrictnetwork.nix {};
2020-03-22 17:26:55 +01:00
quorum = handleTest ./quorum.nix {};
2022-09-21 22:26:03 +02:00
quake3 = handleTest ./quake3.nix {};
rabbitmq = handleTest ./rabbitmq.nix {};
radarr = handleTest ./radarr.nix {};
radicale = handleTest ./radicale.nix {};
rasdaemon = handleTest ./rasdaemon.nix {};
2023-03-12 20:54:23 +01:00
readarr = handleTest ./readarr.nix {};
2019-08-31 20:17:33 +02:00
redis = handleTest ./redis.nix {};
redmine = handleTest ./redmine.nix {};
restartByActivationScript = handleTest ./restart-by-activation-script.nix {};
2020-01-30 22:31:52 +01:00
restic = handleTest ./restic.nix {};
retroarch = handleTest ./retroarch.nix {};
2020-08-30 18:31:54 +02:00
robustirc-bridge = handleTest ./robustirc-bridge.nix {};
roundcube = handleTest ./roundcube.nix {};
2023-05-15 14:09:28 +02:00
rshim = handleTest ./rshim.nix {};
rspamd = handleTest ./rspamd.nix {};
rss2email = handleTest ./rss2email.nix {};
rstudio-server = handleTest ./rstudio-server.nix {};
rsyncd = handleTest ./rsyncd.nix {};
rsyslogd = handleTest ./rsyslogd.nix {};
rxe = handleTest ./rxe.nix {};
2021-09-21 13:38:22 +02:00
sabnzbd = handleTest ./sabnzbd.nix {};
samba = handleTest ./samba.nix {};
samba-wsdd = handleTest ./samba-wsdd.nix {};
sanoid = handleTest ./sanoid.nix {};
schleuder = handleTest ./schleuder.nix {};
sddm = handleTest ./sddm.nix {};
seafile = handleTest ./seafile.nix {};
2020-11-02 01:34:53 +01:00
searx = handleTest ./searx.nix {};
service-runner = handleTest ./service-runner.nix {};
2022-03-20 22:39:04 +01:00
sfxr-qt = handleTest ./sfxr-qt.nix {};
2022-11-26 08:59:13 +01:00
sgtpuzzles = handleTest ./sgtpuzzles.nix {};
2020-12-23 19:28:30 +01:00
shadow = handleTest ./shadow.nix {};
shadowsocks = handleTest ./shadowsocks {};
shattered-pixel-dungeon = handleTest ./shattered-pixel-dungeon.nix {};
shiori = handleTest ./shiori.nix {};
2019-05-23 00:50:51 +02:00
signal-desktop = handleTest ./signal-desktop.nix {};
simple = handleTest ./simple.nix {};
slurm = handleTest ./slurm.nix {};
smokeping = handleTest ./smokeping.nix {};
snapcast = handleTest ./snapcast.nix {};
snapper = handleTest ./snapper.nix {};
2023-04-26 17:46:15 +02:00
snipe-it = runTest ./web-apps/snipe-it.nix;
soapui = handleTest ./soapui.nix {};
2020-05-12 18:32:39 +02:00
sogo = handleTest ./sogo.nix {};
2021-05-20 22:03:39 +02:00
solanum = handleTest ./solanum.nix {};
2020-11-30 00:00:38 +01:00
sonarr = handleTest ./sonarr.nix {};
2021-08-28 19:46:05 +02:00
sourcehut = handleTest ./sourcehut.nix {};
spacecookie = handleTest ./spacecookie.nix {};
spark = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./spark {};
sqlite3-to-mysql = handleTest ./sqlite3-to-mysql.nix {};
2020-01-18 13:00:00 +01:00
sslh = handleTest ./sslh.nix {};
sssd = handleTestOn ["x86_64-linux"] ./sssd.nix {};
2020-09-01 07:03:20 +02:00
sssd-ldap = handleTestOn ["x86_64-linux"] ./sssd-ldap.nix {};
2023-04-17 01:24:06 +02:00
stargazer = runTest ./web-servers/stargazer.nix;
2021-12-24 12:24:29 +01:00
starship = handleTest ./starship.nix {};
2021-11-12 21:37:11 +01:00
step-ca = handleTestOn ["x86_64-linux"] ./step-ca.nix {};
stratis = handleTest ./stratis {};
strongswan-swanctl = handleTest ./strongswan-swanctl.nix {};
2022-02-22 23:08:43 +01:00
stunnel = handleTest ./stunnel.nix {};
sudo = handleTest ./sudo.nix {};
2022-10-04 05:08:46 +02:00
swap-file-btrfs = handleTest ./swap-file-btrfs.nix {};
2022-06-22 04:11:23 +02:00
swap-partition = handleTest ./swap-partition.nix {};
swap-random-encryption = handleTest ./swap-random-encryption.nix {};
sway = handleTest ./sway.nix {};
switchTest = handleTest ./switch-test.nix {};
2019-07-06 20:56:30 +02:00
sympa = handleTest ./sympa.nix {};
2020-07-23 09:13:26 +02:00
syncthing = handleTest ./syncthing.nix {};
syncthing-init = handleTest ./syncthing-init.nix {};
2018-11-17 15:02:00 +01:00
syncthing-relay = handleTest ./syncthing-relay.nix {};
systemd = handleTest ./systemd.nix {};
2019-11-25 00:03:55 +01:00
systemd-analyze = handleTest ./systemd-analyze.nix {};
systemd-binfmt = handleTestOn ["x86_64-linux"] ./systemd-binfmt.nix {};
systemd-boot = handleTest ./systemd-boot.nix {};
systemd-bpf = handleTest ./systemd-bpf.nix {};
systemd-confinement = handleTest ./systemd-confinement.nix {};
systemd-coredump = handleTest ./systemd-coredump.nix {};
systemd-cryptenroll = handleTest ./systemd-cryptenroll.nix {};
systemd-credentials-tpm2 = handleTest ./systemd-credentials-tpm2.nix {};
systemd-escaping = handleTest ./systemd-escaping.nix {};
systemd-initrd-btrfs-raid = handleTest ./systemd-initrd-btrfs-raid.nix {};
systemd-initrd-luks-fido2 = handleTest ./systemd-initrd-luks-fido2.nix {};
systemd-initrd-luks-keyfile = handleTest ./systemd-initrd-luks-keyfile.nix {};
systemd-initrd-luks-empty-passphrase = handleTest ./initrd-luks-empty-passphrase.nix { systemdStage1 = true; };
systemd-initrd-luks-password = handleTest ./systemd-initrd-luks-password.nix {};
systemd-initrd-luks-tpm2 = handleTest ./systemd-initrd-luks-tpm2.nix {};
systemd-initrd-modprobe = handleTest ./systemd-initrd-modprobe.nix {};
systemd-initrd-shutdown = handleTest ./systemd-shutdown.nix { systemdStage1 = true; };
2022-03-20 21:11:32 +01:00
systemd-initrd-simple = handleTest ./systemd-initrd-simple.nix {};
systemd-initrd-swraid = handleTest ./systemd-initrd-swraid.nix {};
systemd-initrd-vconsole = handleTest ./systemd-initrd-vconsole.nix {};
2022-06-29 07:01:59 +02:00
systemd-initrd-networkd = handleTest ./systemd-initrd-networkd.nix {};
2022-08-03 12:36:11 +02:00
systemd-initrd-networkd-ssh = handleTest ./systemd-initrd-networkd-ssh.nix {};
2023-02-17 13:47:40 +01:00
systemd-initrd-networkd-openvpn = handleTest ./initrd-network-openvpn { systemdStage1 = true; };
systemd-journal = handleTest ./systemd-journal.nix {};
systemd-machinectl = handleTest ./systemd-machinectl.nix {};
systemd-networkd = handleTest ./systemd-networkd.nix {};
2019-11-16 12:13:51 +01:00
systemd-networkd-dhcpserver = handleTest ./systemd-networkd-dhcpserver.nix {};
systemd-networkd-dhcpserver-static-leases = handleTest ./systemd-networkd-dhcpserver-static-leases.nix {};
systemd-networkd-ipv6-prefix-delegation = handleTest ./systemd-networkd-ipv6-prefix-delegation.nix {};
2020-11-30 00:00:38 +01:00
systemd-networkd-vrf = handleTest ./systemd-networkd-vrf.nix {};
systemd-no-tainted = handleTest ./systemd-no-tainted.nix {};
systemd-nspawn = handleTest ./systemd-nspawn.nix {};
systemd-oomd = handleTest ./systemd-oomd.nix {};
systemd-portabled = handleTest ./systemd-portabled.nix {};
2023-01-19 20:04:29 +01:00
systemd-repart = handleTest ./systemd-repart.nix {};
systemd-shutdown = handleTest ./systemd-shutdown.nix {};
2020-11-30 00:00:38 +01:00
systemd-timesyncd = handleTest ./systemd-timesyncd.nix {};
systemd-user-tmpfiles-rules = handleTest ./systemd-user-tmpfiles-rules.nix {};
systemd-misc = handleTest ./systemd-misc.nix {};
systemd-userdbd = handleTest ./systemd-userdbd.nix {};
systemd-homed = handleTest ./systemd-homed.nix {};
2022-09-17 16:36:39 +02:00
tandoor-recipes = handleTest ./tandoor-recipes.nix {};
taskserver = handleTest ./taskserver.nix {};
2022-10-12 21:16:02 +02:00
tayga = handleTest ./tayga.nix {};
teeworlds = handleTest ./teeworlds.nix {};
2019-01-21 12:30:11 +01:00
telegraf = handleTest ./telegraf.nix {};
2022-01-10 13:46:47 +01:00
teleport = handleTest ./teleport.nix {};
2022-01-11 03:29:04 +01:00
thelounge = handleTest ./thelounge.nix {};
terminal-emulators = handleTest ./terminal-emulators.nix {};
tiddlywiki = handleTest ./tiddlywiki.nix {};
tigervnc = handleTest ./tigervnc.nix {};
timescaledb = handleTest ./timescaledb.nix {};
promscale = handleTest ./promscale.nix {};
2019-12-02 23:28:53 +01:00
timezone = handleTest ./timezone.nix {};
tinc = handleTest ./tinc {};
2019-05-16 23:42:02 +02:00
tinydns = handleTest ./tinydns.nix {};
tinywl = handleTest ./tinywl.nix {};
tmate-ssh-server = handleTest ./tmate-ssh-server.nix { };
tomcat = handleTest ./tomcat.nix {};
tor = handleTest ./tor.nix {};
traefik = handleTestOn ["aarch64-linux" "x86_64-linux"] ./traefik.nix {};
2021-04-09 18:48:51 +02:00
trafficserver = handleTest ./trafficserver.nix {};
transmission = handleTest ./transmission.nix {};
# tracee requires bpf
tracee = handleTestOn ["x86_64-linux"] ./tracee.nix {};
2019-08-16 17:00:07 +02:00
trezord = handleTest ./trezord.nix {};
2019-11-01 11:03:23 +01:00
trickster = handleTest ./trickster.nix {};
2020-11-30 00:00:38 +01:00
trilium-server = handleTestOn ["x86_64-linux"] ./trilium-server.nix {};
tsm-client-gui = handleTest ./tsm-client-gui.nix {};
txredisapi = handleTest ./txredisapi.nix {};
2020-03-24 23:45:49 +01:00
tuptime = handleTest ./tuptime.nix {};
turbovnc-headless-server = handleTest ./turbovnc-headless-server.nix {};
tuxguitar = handleTest ./tuxguitar.nix {};
2021-06-13 22:00:25 +02:00
ucarp = handleTest ./ucarp.nix {};
udisks2 = handleTest ./udisks2.nix {};
ulogd = handleTest ./ulogd.nix {};
2020-11-30 00:00:38 +01:00
unbound = handleTest ./unbound.nix {};
2021-12-18 00:55:13 +01:00
unifi = handleTest ./unifi.nix {};
2020-04-16 22:08:00 +02:00
unit-php = handleTest ./web-servers/unit-php.nix {};
upnp = handleTest ./upnp.nix {};
2022-03-17 17:57:23 +01:00
uptermd = handleTest ./uptermd.nix {};
2022-09-23 07:04:23 +02:00
uptime-kuma = handleTest ./uptime-kuma.nix {};
2021-01-16 23:15:52 +01:00
usbguard = handleTest ./usbguard.nix {};
2021-02-15 23:40:54 +01:00
user-activation-scripts = handleTest ./user-activation-scripts.nix {};
user-home-mode = handleTest ./user-home-mode.nix {};
2019-05-27 23:03:22 +02:00
uwsgi = handleTest ./uwsgi.nix {};
2020-06-12 10:12:51 +02:00
v2ray = handleTest ./v2ray.nix {};
2022-09-27 21:22:21 +02:00
varnish60 = handleTest ./varnish.nix { package = pkgs.varnish60; };
varnish72 = handleTest ./varnish.nix { package = pkgs.varnish72; };
vault = handleTest ./vault.nix {};
2023-04-25 15:58:30 +02:00
vault-agent = handleTest ./vault-agent.nix {};
vault-dev = handleTest ./vault-dev.nix {};
2021-01-04 17:54:03 +01:00
vault-postgresql = handleTest ./vault-postgresql.nix {};
vaultwarden = handleTest ./vaultwarden.nix {};
2020-11-30 08:22:08 +01:00
vector = handleTest ./vector.nix {};
2021-11-21 18:09:17 +01:00
vengi-tools = handleTest ./vengi-tools.nix {};
2020-01-19 18:55:56 +01:00
victoriametrics = handleTest ./victoriametrics.nix {};
2021-06-26 14:26:17 +02:00
vikunja = handleTest ./vikunja.nix {};
virtualbox = handleTestOn ["x86_64-linux"] ./virtualbox.nix {};
vscodium = discoverTests (import ./vscodium.nix);
vsftpd = handleTest ./vsftpd.nix {};
2022-11-24 20:46:05 +01:00
warzone2100 = handleTest ./warzone2100.nix {};
2020-06-18 14:19:13 +02:00
wasabibackend = handleTest ./wasabibackend.nix {};
2020-03-22 12:49:51 +01:00
webhook = runTest ./webhook.nix;
2021-03-18 12:33:40 +01:00
wiki-js = handleTest ./wiki-js.nix {};
wine = handleTest ./wine.nix {};
wireguard = handleTest ./wireguard {};
without-nix = handleTest ./without-nix.nix {};
2021-01-27 15:44:27 +01:00
wmderland = handleTest ./wmderland.nix {};
2021-09-24 13:25:16 +02:00
wpa_supplicant = handleTest ./wpa_supplicant.nix {};
wordpress = handleTest ./wordpress.nix {};
wrappers = handleTest ./wrappers.nix {};
2022-06-26 07:08:43 +02:00
writefreely = handleTest ./web-apps/writefreely.nix {};
2019-12-14 01:17:49 +01:00
xandikos = handleTest ./xandikos.nix {};
xautolock = handleTest ./xautolock.nix {};
xfce = handleTest ./xfce.nix {};
xmonad = handleTest ./xmonad.nix {};
xmonad-xdg-autostart = handleTest ./xmonad-xdg-autostart.nix {};
2022-09-21 01:39:13 +02:00
xpadneo = handleTest ./xpadneo.nix {};
xrdp = handleTest ./xrdp.nix {};
xss-lock = handleTest ./xss-lock.nix {};
2020-11-17 04:13:13 +01:00
xterm = handleTest ./xterm.nix {};
2022-01-01 22:16:13 +01:00
xxh = handleTest ./xxh.nix {};
yabar = handleTest ./yabar.nix {};
2019-06-27 17:56:10 +02:00
yggdrasil = handleTest ./yggdrasil.nix {};
2022-02-16 06:49:51 +01:00
zammad = handleTest ./zammad.nix {};
2022-06-10 14:54:16 +02:00
zeronet-conservancy = handleTest ./zeronet-conservancy.nix {};
2020-02-03 18:33:26 +01:00
zfs = handleTest ./zfs.nix {};
zigbee2mqtt = handleTest ./zigbee2mqtt.nix {};
2020-04-11 19:28:52 +02:00
zoneminder = handleTest ./zoneminder.nix {};
zookeeper = handleTest ./zookeeper.nix {};
2023-01-18 15:40:42 +01:00
zram-generator = handleTest ./zram-generator.nix {};
zrepl = handleTest ./zrepl.nix {};
2020-04-11 19:28:52 +02:00
zsh-history = handleTest ./zsh-history.nix {};
}