1{ pkgs, ... }:
2let
3 robotsTxt = pkgs.writeText "cgit-robots.txt" ''
4 User-agent: *
5 Disallow: /
6 '';
7in
8{
9 name = "cgit";
10 meta = with pkgs.lib.maintainers; {
11 maintainers = [ schnusch ];
12 };
13
14 nodes = {
15 server =
16 { ... }:
17 {
18 services.cgit."localhost" = {
19 enable = true;
20 package = pkgs.cgit.overrideAttrs (
21 { postInstall, ... }:
22 {
23 postInstall = ''
24 ${postInstall}
25 cp ${robotsTxt} "$out/cgit/robots.txt"
26 '';
27 }
28 );
29 nginx.location = "/(c)git/";
30 repos = {
31 some-repo = {
32 path = "/tmp/git/some-repo";
33 desc = "some-repo description";
34 };
35 };
36 settings = {
37 readme = [
38 ":README.md"
39 ":date.txt"
40 ];
41 };
42 };
43
44 environment.systemPackages = [ pkgs.git ];
45 };
46 };
47
48 testScript =
49 { nodes, ... }:
50 ''
51 start_all()
52
53 server.wait_for_unit("nginx.service")
54 server.wait_for_unit("network.target")
55 server.wait_for_open_port(80)
56
57 server.succeed("curl -fsS http://localhost/%28c%29git/cgit.css")
58
59 server.succeed("curl -fsS http://localhost/%28c%29git/robots.txt | diff -u - ${robotsTxt}")
60
61 server.succeed(
62 "curl -fsS http://localhost/%28c%29git/ | grep -F 'some-repo description'"
63 )
64
65 server.fail("curl -fsS http://localhost/robots.txt")
66
67 server.succeed("sudo -u cgit ${pkgs.writeShellScript "setup-cgit-test-repo" ''
68 set -e
69 git init --bare -b master /tmp/git/some-repo
70 git init -b master reference
71 cd reference
72 git remote add origin /tmp/git/some-repo
73 { echo -n "cgit NixOS Test at "; date; } > date.txt
74 git add date.txt
75 git -c user.name=test -c user.email=test@localhost commit -m 'add date'
76 git push -u origin master
77 ''}")
78
79 # test web download
80 server.succeed(
81 "curl -fsS 'http://localhost/%28c%29git/some-repo/plain/date.txt?id=master' | diff -u reference/date.txt -"
82 )
83
84 # test http clone
85 server.succeed(
86 "git clone http://localhost/%28c%29git/some-repo && diff -u reference/date.txt some-repo/date.txt"
87 )
88
89 # test list settings by greping for the fallback readme
90 server.succeed(
91 "curl -fsS 'http://localhost/%28c%29git/some-repo/about/' | grep -F 'cgit NixOS Test at'"
92 )
93
94 # add real readme
95 server.succeed("sudo -u cgit ${pkgs.writeShellScript "cgit-commit-readme" ''
96 set -e
97 echo '# cgit NixOS test README' > reference/README.md
98 git -C reference add README.md
99 git -C reference -c user.name=test -c user.email=test@localhost commit -m 'add readme'
100 git -C reference push
101 ''}")
102
103 # test list settings by greping for the real readme
104 server.succeed(
105 "curl -fsS 'http://localhost/%28c%29git/some-repo/about/' | grep -F '# cgit NixOS test README'"
106 )
107 server.fail(
108 "curl -fsS 'http://localhost/%28c%29git/some-repo/about/' | grep -F 'cgit NixOS Test at'"
109 )
110 '';
111}