1{ pkgs, ... }:
2{
3 name = "renovate";
4 meta.maintainers = with pkgs.lib.maintainers; [
5 marie
6 natsukium
7 ];
8
9 nodes.machine =
10 { config, ... }:
11 {
12 services.renovate = {
13 enable = true;
14 settings = {
15 platform = "forgejo";
16 endpoint = "http://localhost:3000";
17 autodiscover = true;
18 gitAuthor = "Renovate <renovate@example.com>";
19 };
20 credentials = {
21 RENOVATE_TOKEN = "/etc/renovate-token";
22 };
23 };
24 environment.systemPackages = [
25 config.services.forgejo.package
26 pkgs.tea
27 pkgs.git
28 ];
29 services.forgejo = {
30 enable = true;
31 settings.server.HTTP_PORT = 3000;
32 };
33 systemd.enableStrictShellChecks = true;
34 };
35
36 testScript = ''
37 def forgejo(command):
38 return machine.succeed(f"cd /var/lib/forgejo && sudo --user=forgejo FORGEJO_WORK_DIR=/var/lib/forgejo FORGEJO_CUSTOM=/var/lib/forgejo/custom forgejo {command}")
39
40 machine.wait_for_unit("forgejo.service")
41 machine.wait_for_open_port(3000)
42
43 machine.systemctl("stop forgejo.service")
44
45 forgejo("admin user create --username meow --email meow@example.com --password meow")
46
47 machine.systemctl("start forgejo.service")
48 machine.wait_for_unit("forgejo.service")
49 machine.wait_for_open_port(3000)
50
51 accessToken = forgejo("admin user generate-access-token --raw --username meow --scopes all | tr -d '\n'")
52
53 machine.succeed(f"tea login add --name default --user meow --token '{accessToken}' --password meow --url http://localhost:3000")
54 machine.succeed("tea repo create --login default --name kitty --init")
55 machine.succeed("git config --global user.name Meow")
56 machine.succeed("git config --global user.email meow@example.com")
57 machine.succeed(f"git clone http://meow:{accessToken}@localhost:3000/meow/kitty.git /tmp/kitty")
58 machine.succeed("echo '{ \"name\": \"meow\", \"version\": \"0.1.0\" }' > /tmp/kitty/package.json")
59 machine.succeed("git -C /tmp/kitty add /tmp/kitty/package.json")
60 machine.succeed("git -C /tmp/kitty commit -m 'add package.json'")
61 machine.succeed("git -C /tmp/kitty push origin")
62
63 machine.succeed(f"echo '{accessToken}' > /etc/renovate-token")
64 machine.systemctl("start --wait renovate.service")
65
66 machine.succeed("tea pulls list --login default --repo meow/kitty | grep 'Configure Renovate'")
67 machine.succeed("tea pulls merge --login default --repo meow/kitty 1")
68
69 machine.systemctl("start --wait renovate.service")
70 '';
71}