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