about summary refs log tree commit diff
diff options
context:
space:
mode:
authorsterni <sternenseemann@systemli.org>2022-09-13T20·18+0200
committersterni <sternenseemann@systemli.org>2022-09-15T11·27+0000
commit16da548f93c9e8e9d4771240bb4a1bf14b9665aa (patch)
tree61a7a2e4f558a4923636960b4cb6462d49764e65
parentee1f62f5e5e91ff990277ce6b58cb53d74f9b3cf (diff)
feat(.envrc): gcroot third_party.sources r/4856
This is a bit slower than I'd like, but acceptable.

Change-Id: I419b3c49201540de9d0ade1c6c2ac97758d8a811
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6576
Reviewed-by: grfn <grfn@gws.fyi>
Tested-by: BuildkiteCI
Reviewed-by: tazjin <tazjin@tvl.su>
-rw-r--r--.envrc15
-rw-r--r--.gcroots/.skip-subtree1
-rw-r--r--.gitignore3
3 files changed, 17 insertions, 2 deletions
diff --git a/.envrc b/.envrc
index 71a05d58b7..1f15539fb2 100644
--- a/.envrc
+++ b/.envrc
@@ -1,7 +1,18 @@
+# Create a gcroot that keeps all third_party.sources alive
+nix-build --out-link .gcroots/sources -E '
+with import ./. {};
+third_party.nixpkgs.writeText "depot-3p-sources.txt" (
+  toString (
+    builtins.map (s: s.outPath or null) (
+      builtins.attrValues third_party.sources
+    )
+  )
+)'
+
 # Configure the local PATH to contain tools which are fetched ad-hoc
 # from Nix.
-
-out=$(nix-build -A tools.depot-deps --no-out-link)
+out=$(nix-build -A tools.depot-deps --out-link .gcroots/depot-deps)
 PATH_add "$out/bin"
 
 watch_file tools/depot-deps.nix
+watch_file third_party/sources/sources.json
diff --git a/.gcroots/.skip-subtree b/.gcroots/.skip-subtree
new file mode 100644
index 0000000000..8c3e8d06db
--- /dev/null
+++ b/.gcroots/.skip-subtree
@@ -0,0 +1 @@
+these are just symlinks to prevent Nix from gc-ing paths we'd like to keep
diff --git a/.gitignore b/.gitignore
index 0b135e7034..9066757e58 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,9 @@
 # trash locally that might be valuable in the future.
 garbage/
 
+# Nix gcroot symlinks created by .envrc
+/.gcroots/*
+
 # Ignore Nix result symlinks
 result
 result-*