nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1import ../make-test-python.nix (
2 { pkgs, lib, ... }:
3 let
4 domain = "sourcehut.localdomain";
5 in
6 {
7 name = "sourcehut";
8
9 meta.maintainers = with pkgs.lib.maintainers; [
10 tomberek
11 nessdoor
12 ];
13
14 nodes.machine =
15 {
16 config,
17 pkgs,
18 nodes,
19 ...
20 }:
21 {
22 imports = [
23 ./nodes/common.nix
24 ];
25
26 networking.domain = domain;
27 networking.extraHosts = ''
28 ${config.networking.primaryIPAddress} git.${domain}
29 ${config.networking.primaryIPAddress} meta.${domain}
30 '';
31
32 services.sourcehut = {
33 git.enable = true;
34 settings."git.sr.ht" = {
35 oauth-client-secret = pkgs.writeText "gitsrht-oauth-client-secret" "3597288dc2c716e567db5384f493b09d";
36 oauth-client-id = "d07cb713d920702e";
37 };
38 };
39
40 environment.systemPackages = with pkgs; [
41 git
42 ];
43 };
44
45 testScript =
46 let
47 userName = "nixos-test";
48 userPass = "AutoNixosTestPwd";
49 hutConfig = pkgs.writeText "hut-config" ''
50 instance "${domain}" {
51 # Will be replaced at runtime with the generated token
52 access-token "OAUTH-TOKEN"
53 }
54 '';
55 sshConfig = pkgs.writeText "ssh-config" ''
56 Host git.${domain}
57 IdentityFile = ~/.ssh/id_rsa
58 '';
59 in
60 ''
61 start_all()
62 machine.wait_for_unit("multi-user.target")
63 machine.wait_for_unit("sshd.service")
64
65 with subtest("Check whether meta comes up"):
66 machine.wait_for_unit("meta.sr.ht-api.service")
67 machine.wait_for_unit("meta.sr.ht.service")
68 machine.wait_for_unit("meta.sr.ht-webhooks.service")
69 machine.wait_for_open_port(5000)
70 machine.succeed("curl -sL http://localhost:5000 | grep meta.${domain}")
71 machine.succeed("curl -sL http://meta.${domain} | grep meta.${domain}")
72
73 with subtest("Create a new user account and OAuth access key"):
74 machine.succeed("echo ${userPass} | meta.sr.ht-manageuser -ps -e ${userName}@${domain}\
75 -t USER ${userName}");
76 cmd = "srht-gen-oauth-tok -i ${domain} -q ${userName} ${userPass}"
77 (_, token) = machine.execute("srht-gen-oauth-tok -i ${domain} -q ${userName} ${userPass}")
78 token = token.strip().replace("/", r"\\/") # Escape slashes in token before passing it to sed
79 machine.execute("mkdir -p ~/.config/hut/")
80 machine.execute("sed s/OAUTH-TOKEN/" + token + "/ ${hutConfig} > ~/.config/hut/config")
81
82 with subtest("Check whether git comes up"):
83 machine.wait_for_unit("git.sr.ht-api.service")
84 machine.wait_for_unit("git.sr.ht.service")
85 machine.wait_for_unit("git.sr.ht-webhooks.service")
86 machine.succeed("curl -sL http://git.${domain} | grep git.${domain}")
87
88 with subtest("Add an SSH key for Git access"):
89 machine.execute("ssh-keygen -q -N \"\" -t rsa -f ~/.ssh/id_rsa")
90 machine.execute("cat ${sshConfig} > ~/.ssh/config")
91 machine.succeed("hut meta ssh-key create ~/.ssh/id_rsa.pub")
92
93 with subtest("Create a new repo and push contents to it"):
94 machine.execute("git init test")
95 machine.execute("echo \"Hello world!\" > test/hello.txt")
96 machine.execute("cd test && git add .")
97 machine.execute("cd test && git commit -m \"Initial commit\"")
98 machine.execute("cd test && git tag v0.1")
99 machine.succeed("cd test && git remote add origin git.sr.ht@git.${domain}:~${userName}/test")
100 machine.execute("( echo -n 'git.${domain} '; cat /etc/ssh/ssh_host_ed25519_key.pub ) > ~/.ssh/known_hosts")
101 machine.succeed("hut git create test")
102 machine.succeed("cd test && git push --tags --set-upstream origin master")
103
104 with subtest("Verify that the repo is downloadable and its contents match the original"):
105 machine.succeed("curl https://git.${domain}/~${userName}/test/archive/v0.1.tar.gz | tar -xz")
106 machine.succeed("diff test-v0.1/hello.txt test/hello.txt")
107 '';
108 }
109)