nixos/git-daemon: only create git user if it will be used

tilpner 6df119a6 bee470ef

Changed files
+67 -2
nixos
modules
services
networking
tests
+2 -2
nixos/modules/services/networking/git-daemon.nix
···
config = mkIf cfg.enable {
-
users.users = optionalAttrs (cfg.user != "git") {
+
users.users = optionalAttrs (cfg.user == "git") {
git = {
uid = config.ids.uids.git;
description = "Git daemon user";
};
};
-
users.groups = optionalAttrs (cfg.group != "git") {
+
users.groups = optionalAttrs (cfg.group == "git") {
git.gid = config.ids.gids.git;
};
+1
nixos/tests/all-tests.nix
···
fsck = handleTest ./fsck.nix {};
gotify-server = handleTest ./gotify-server.nix {};
grocy = handleTest ./grocy.nix {};
+
gitdaemon = handleTest ./gitdaemon.nix {};
gitea = handleTest ./gitea.nix {};
gitlab = handleTest ./gitlab.nix {};
gitolite = handleTest ./gitolite.nix {};
+64
nixos/tests/gitdaemon.nix
···
+
import ./make-test-python.nix ({ pkgs, ... }:
+
+
let
+
hashes = pkgs.writeText "hashes" ''
+
b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c /project/bar
+
'';
+
in {
+
name = "gitdaemon";
+
+
meta = with pkgs.stdenv.lib.maintainers; {
+
maintainers = [ tilpner ];
+
};
+
+
nodes = {
+
server =
+
{ config, ... }: {
+
networking.firewall.allowedTCPPorts = [ config.services.gitDaemon.port ];
+
+
environment.systemPackages = [ pkgs.git ];
+
+
services.gitDaemon = {
+
enable = true;
+
basePath = "/git";
+
};
+
};
+
+
client =
+
{ pkgs, ... }: {
+
environment.systemPackages = [ pkgs.git ];
+
};
+
};
+
+
testScript = ''
+
start_all()
+
+
with subtest("create project.git"):
+
server.succeed(
+
"mkdir /git",
+
"git init --bare /git/project.git",
+
"touch /git/project.git/git-daemon-export-ok",
+
)
+
+
with subtest("add file to project.git"):
+
server.succeed(
+
"git clone /git/project.git /project",
+
"echo foo > /project/bar",
+
"git config --global user.email 'you@example.com'",
+
"git config --global user.name 'Your Name'",
+
"git -C /project add bar",
+
"git -C /project commit -m 'quux'",
+
"git -C /project push",
+
"rm -r /project",
+
)
+
+
with subtest("git daemon starts"):
+
server.wait_for_unit("git-daemon.service")
+
+
with subtest("client can clone project.git"):
+
client.succeed(
+
"git clone git://server/project.git /project",
+
"sha256sum -c ${hashes}",
+
)
+
'';
+
})