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
|
{
self,
system,
pkgs,
...
}:
let
releng = ./..;
this-garage = pkgs.garage_2;
garage-ephemeral-key = pkgs.callPackage ../garage-ephemeral-key {
inherit (pkgs.writers) writePython3Bin;
};
build = self.release-jobs.all.build.${system}.doc;
pythonPackages = (
p: [
p.yapf
p.requests
p.xdg-base-dirs
p.packaging
p.xonsh
]
);
pythonEnv = pkgs.python3.pythonOnBuildForHost.withPackages pythonPackages;
in
{
name = "local-releng-manual-upload";
nodes = {
machine =
{ config, pkgs, ... }:
{
services.garage.enable = true;
services.garage.package = this-garage;
services.garage.settings = {
replication_factor = 1;
rpc_bind_addr = "[::]:3901";
rpc_secret = "4425f5c26c5e11581d3223904324dcb5b5d5dfb14e5e7f35e38c595424f5f1e6";
s3_api.api_bind_addr = "[::]:3900";
s3_api.s3_region = "garage";
s3_api.root_domain = ".localhost";
admin = {
api_bind_addr = "[::]:3903";
admin_token = "UkLeGWEvHnXBqnueR3ISEMWpOnm40jH2tM2HnnL/0F4=";
};
};
environment.systemPackages = [
this-garage
pkgs.git
pkgs.build-release-notes
pkgs.jq
pkgs.nix-eval-jobs
pkgs.awscli2
pythonEnv
garage-ephemeral-key
];
environment.sessionVariables = {
GARAGE_ADMIN_TOKEN = "UkLeGWEvHnXBqnueR3ISEMWpOnm40jH2tM2HnnL/0F4=";
};
# ≥ v6.12 kernel has a system wide corruption related to 9p. wait until
# https://lore.kernel.org/all/w5ap2zcsatkx4dmakrkjmaexwh3mnmgc5vhavb2miaj6grrzat@7kzr5vlsrmh5/
# resolves. once this is resolved and the fix lands in a stable kernel
# in nixpkgs, this pin can be removed.
boot.kernelPackages = pkgs.linuxPackages_6_6;
};
};
testScript = ''
machine.wait_for_unit("garage")
machine.wait_for_open_port(3900)
nodeId = machine.succeed("garage node id")
machine.succeed(f"garage layout assign -z dc1 -c 10G {nodeId}")
machine.succeed("garage layout apply --version 1")
machine.succeed("garage bucket create local-docs")
machine.succeed("garage bucket create local-cache")
machine.succeed("garage bucket create local-releases")
machine.succeed("git init --bare releng-target")
machine.succeed("mkdir repo")
machine.succeed("cd repo; git init --initial-branch release-2.92 .")
machine.succeed("cd repo; git config user.email 'local@test.com'")
machine.succeed("cd repo; git config user.name 'Test Releng'")
machine.copy_from_host("${../../version.json}", "repo/version.json")
machine.copy_from_host("${releng}", "repo/releng")
machine.copy_from_host("${../../doc}", "repo/doc")
machine.succeed("cd repo; git add .")
machine.succeed("cd repo; git commit -m 'initial commit'")
machine.succeed("cd repo; git switch -c releng/2.92.4")
machine.succeed("cd repo; python3 -m releng prepare")
machine.succeed("cd repo; python3 -m releng tag")
machine.succeed("cd repo; mkdir -p release/manual")
machine.succeed("cd repo; cp --no-preserve=mode -T -vr ${build}/share/doc/nix/manual ./release/manual")
machine.succeed("cd repo; python3 -m releng upload --noconfirm --environment local --target manual")
'';
}
|