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
|
{ lib
, stdenv
, rustPlatform
, fetchFromGitea
, openssl
, pkg-config
, protobuf
, cacert
, Security
, garage
, nixosTests
}:
let
generic = { version, hash, cargoHash, cargoPatches ? [], eol ? false, broken ? false }: rustPlatform.buildRustPackage {
pname = "garage";
inherit version;
src = fetchFromGitea {
domain = "git.deuxfleurs.fr";
owner = "Deuxfleurs";
repo = "garage";
rev = "v${version}";
inherit hash;
};
postPatch = ''
# Starting in 0.9.x series, Garage is using mold in local development
# and this leaks in this packaging, we remove it to use the default linker.
rm .cargo/config.toml || true
'';
inherit cargoHash cargoPatches;
nativeBuildInputs = [ protobuf pkg-config ];
buildInputs = [
openssl
] ++ lib.optional stdenv.isDarwin Security;
checkInputs = [
cacert
];
OPENSSL_NO_VENDOR = true;
# See https://git.deuxfleurs.fr/Deuxfleurs/garage/src/tag/v0.8.2/nix/compile.nix#L192-L198
# on version changes for checking if changes are required here
buildFeatures = [
"kubernetes-discovery"
"bundled-libs"
] ++ lib.optional (lib.versionOlder version "1.0") "sled" ++ [
"metrics"
"k2v"
"telemetry-otlp"
"lmdb"
"sqlite"
"consul-discovery"
];
# To make integration tests pass, we include the optional k2v feature here,
# but in buildFeatures only for version 0.8+, where it's enabled by default.
# See: https://garagehq.deuxfleurs.fr/documentation/reference-manual/k2v/
checkFeatures = [
"k2v"
"kubernetes-discovery"
"bundled-libs"
] ++ lib.optional (lib.versionOlder version "1.0") "sled" ++ [
"lmdb"
"sqlite"
];
disabledTests = [
# Upstream told us this test is flakey.
"k2v::poll::test_poll_item"
];
passthru.tests = nixosTests.garage;
meta = {
description = "S3-compatible object store for small self-hosted geo-distributed deployments";
changelog = "https://git.deuxfleurs.fr/Deuxfleurs/garage/releases/tag/v${version}";
homepage = "https://garagehq.deuxfleurs.fr";
license = lib.licenses.agpl3Only;
maintainers = with lib.maintainers; [ nickcao _0x4A6F teutat3s ];
knownVulnerabilities = (lib.optional eol "Garage version ${version} is EOL");
inherit broken;
mainProgram = "garage";
};
};
in
rec {
# Until Garage hits 1.0, 0.7.3 is equivalent to 7.3.0 for now, therefore
# we have to keep all the numbers in the version to handle major/minor/patch level.
# for <1.0.
# Please add new versions to nixos/tests/garage/default.nix as well.
garage_0_8_7 = generic {
version = "0.8.7";
hash = "sha256-2QGbR6YvMQeMxN3n1MMJ5qfBcEJ5hjXARUOfEn+m4Jc=";
cargoHash = "sha256-1cGlJP/RRgxt3GGMN1c+7Y5lLHJyvHEnpLsR35R5FfI=";
cargoPatches = [ ./update-time-0.8.patch ];
broken = stdenv.isDarwin;
};
garage_0_9_4 = generic {
version = "0.9.4";
hash = "sha256-2ZaxenwaVGYYUjUJaGgnGpZNQprQV9+Jns2sXM6cowk=";
cargoHash = "sha256-1Hrip4R5dr31czOcFMGW4ZvVfVwvdd7LkwukwNpS3o4=";
cargoPatches = [ ./update-time.patch ];
broken = stdenv.isDarwin;
};
garage_1_0_1 = generic {
version = "1.0.1";
hash = "sha256-f6N2asycN04I6U5XQ5LEAqYu/v5jYZiFCxZ8YQ32XyM=";
cargoHash = "sha256-jpc/vaygC5WNSkVA3P01mCRk9Nx/CUumE893tHWoe34=";
broken = stdenv.isDarwin;
};
garage_0_8 = garage_0_8_7;
garage_0_9 = garage_0_9_4;
garage_1_x = garage_1_0_1;
garage = garage_1_x;
}
|