A fork of attic a self-hostable Nix Binary Cache server
1# Generates a script to bootstrap the Attic client with a substituter for
2# CI usage. Will be simplier when Attic is in cache.nixos.org.
3
4{ self
5, writeText
6, writeScript
7
8, substituter ? "https://staging.attic.rs/attic-ci"
9, trustedPublicKey ? "attic-ci:U5Sey4mUxwBXM3iFapmP0/ogODXywKLRNgRPQpEXxbo="
10}:
11
12let
13 cacheNixosOrg = "https://cache.nixos.org";
14 cacheNixosOrgKey = "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=";
15
16 bootstrapHeader = ''
17 let
18 maybeStorePath = if builtins ? langVersion && builtins.lessThan 1 builtins.langVersion
19 then builtins.storePath
20 else x: x;
21 mkFakeDerivation = attrs: outputs:
22 let
23 outputNames = builtins.attrNames outputs;
24 common = attrs // outputsSet //
25 { type = "derivation";
26 outputs = outputNames;
27 all = outputsList;
28 };
29 outputToAttrListElement = outputName:
30 { name = outputName;
31 value = common // {
32 inherit outputName;
33 outPath = maybeStorePath (builtins.getAttr outputName outputs);
34 };
35 };
36 outputsList = map outputToAttrListElement outputNames;
37 outputsSet = builtins.listToAttrs outputsList;
38 in outputsSet;
39 in
40 '';
41
42 makeBootstrap = system: let
43 package =
44 if system == "x86_64-linux" then self.packages.${system}.attic-client-static
45 else self.packages.${system}.attic-client;
46 in ''
47 "${system}" = (mkFakeDerivation {
48 name = "${package.name}";
49 system = "${system}";
50 } {
51 out = "${package.out}";
52 }).out;
53 '';
54
55 bootstrapExpr = ''
56 { system ? builtins.currentSystem }:
57 ${bootstrapHeader}
58 {
59 ${makeBootstrap "x86_64-linux"}
60 ${makeBootstrap "aarch64-linux"}
61 ${makeBootstrap "x86_64-darwin"}
62 ${makeBootstrap "aarch64-darwin"}
63 }.''${system}
64 '';
65
66 bootstrapScript = writeScript "install-attic-ci.sh" ''
67 #!/usr/bin/env bash
68 set -euo pipefail
69 expr=$(mktemp)
70
71 cleanup() {
72 rm -f "$expr"
73 }
74
75 cat >"$expr" <<'EOF'
76 ${bootstrapExpr}
77 EOF
78
79 nix-env --substituters "${substituter} ${cacheNixosOrg}" --trusted-public-keys "${trustedPublicKey} ${cacheNixosOrgKey}" -if "$expr"
80 '';
81in bootstrapScript