about summary refs log tree commit diff
path: root/web/panettone/test/inline-markdown_test.lisp (unfollow)
AgeCommit message (Collapse)AuthorFilesLines
4 hours r/8431 fix(tvix/nar-bridge): filter src in utils.nixIlan Joselevich1-0/+4
Change-Id: I3c8956a50ecdcc53f882fb46ffdc221dd1515b1a Reviewed-on: https://cl.tvl.fyi/c/depot/+/12066 Autosubmit: Ilan Joselevich <personal@ilanjoselevich.com> Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
4 hours r/8430 docs(tvix/boot): update README moreFlorian Klink1-11/+28
The environment variables caused both nar-bridge and tvix-store daemon to try to connect to the same store, which fails due to locking issues. Pass the config to `tvix-store daemon` directly. Also, add the `--otlp=false` to the instructions to remove spam, most users don't have a OTLP collector running. Explain when to use gRPC in `tvix-store virtiofs` and when not. Also, point out to be able to boot a NixOS closure, it needs to be copied into the store first. Change-Id: If4eda07bba28ad0bbe70e468cb727441a21b0588 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12067 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: Ilan Joselevich <personal@ilanjoselevich.com>
5 hours r/8429 docs(tvix/boot): Update README exampleIlan Joselevich1-3/+3
It was previously pointing to a sled implementation which no longer exists. It was also using nar-bridge-go instead of the new nar-bridge (rust). Closes: https://b.tvl.fyi/issues/413 Change-Id: Id0df61d4728198c3ae95a8e27ba7303434892966 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12063 Reviewed-by: aspen <root@gws.fyi> Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Autosubmit: Ilan Joselevich <personal@ilanjoselevich.com>
6 hours r/8428 fix(users/Profpatsch/whatcd-resolver): make getTorrent no jsProfpatsch1-5/+32
Start of an effort to make the app work without javascript enabled (graceful degradation yay). We use a trick where buttons are nested into a form element, passing their value as input; this should be better than depending on `hx-vals`. If htmx is disabled, just redirect and reload the full page instead of sending back the snippet. Probably depends on the use-case of each snippet though. Change-Id: I6c73e624c4bd29b1cbd5492b2f84f48102edc68b Reviewed-on: https://cl.tvl.fyi/c/depot/+/12056 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
6 hours r/8427 feat(users/Profpatsch/whatcd-resolver): read redacted key from envProfpatsch3-17/+44
Change-Id: I5667710423aeeacfbb8dddf5b0b8750dc8f878aa Reviewed-on: https://cl.tvl.fyi/c/depot/+/12055 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
6 hours r/8426 fix(users/Profpatsch/whatcd-resolver): better show ApplicationErrorProfpatsch1-2/+4
Change-Id: I7a1087afc4000299529a7518f273bfee8d651c72 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12054 Reviewed-by: Profpatsch <mail@profpatsch.de> Tested-by: BuildkiteCI
10 hours r/8425 test(tvix/glue): Add a benchmark for firefox outPathAspen Smith1-0/+6
This is nice to test too - it's similar to hello, but runs for a lot longer (like 7.5 seconds on my laptop) which means we get even better stats for stuff. Change-Id: I7935818f10a6d846d446e685b9263a72d7e2aabd Reviewed-on: https://cl.tvl.fyi/c/depot/+/12061 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de> Autosubmit: aspen <root@gws.fyi>
26 hours r/8424 fix(tvix/store): Immediately return an error when using sled on /Ilan Joselevich1-0/+6
We already do this for redb and for sled in SledDirectoryService. Change-Id: I34c7178257a6a04e9f12ed4037a4ef585d7b0d54 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12060 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de> Autosubmit: Ilan Joselevich <personal@ilanjoselevich.com>
27 hours r/8423 docs(tvix/docs): Remove redb path info service from TODOIlan Joselevich1-1/+0
It is now implemented and tested since https://cl.tvl.fyi/c/depot/+/11995 Change-Id: Ie08f511edf10bba4f46efc2c13f8db17eb7182a9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12059 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
27 hours r/8422 fix(tvix/store) RedbPathInfoService: improve logs and errorsIlan Joselevich1-6/+10
Add more logging and remove context from errors because that's already provided by the logs (Errors also need to be refactored anyway, there's also confusion about StorageError vs InvalidRequest, there's no consistency) Change-Id: Ia43c0d237d9075152490c635b05fb3fb343abcc8 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12058 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
46 hours r/8421 fix(tvix/nix-compat): Fix panic in nixbase32 decodingBrian Olsen1-0/+15
The decode function didn't check that the input had a valid length and so would panic when given input with invalid length. Change-Id: Ie27d006b8fe20f005b4a47a1763821a61e9a95c7 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12051 Reviewed-by: aspen <root@gws.fyi> Tested-by: BuildkiteCI Autosubmit: Brian Olsen <me@griff.name>
2 days r/8420 fix(tvix/store): adjust from_addr redb test to do what it saysIlan Joselevich1-2/+2
Change-Id: If15f161d5c7aba05ac1d8e2a4f6fac5a7053943a Reviewed-on: https://cl.tvl.fyi/c/depot/+/12040 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
2 days r/8419 docs(tvix/store): Document redb in from_addrIlan Joselevich1-0/+5
Change-Id: Id2ef4ee1b22c20e5b79156f40821578979105ddc Reviewed-on: https://cl.tvl.fyi/c/depot/+/12039 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
3 days r/8418 feat(tvix/eval): ConstantIdx expansion for more opsMatthew Tromp1-7/+19
Previously, OpConstant would display some detail about its ConstantIdx: whether it's a thunk or closure, and what its address is. This has been expanded to also show when the ConstantIdx is a blueprint, along with the blueprint's address, and to the other opcodes that use a ConstantIdx. Currently, it seems like blueprint addresses don't correspond to the address of the thunk listed in the bytecode output, but it's still useful to see that the constant being grabbed is a blueprint, and maybe this pointer can be made to make more sense in the future. Change-Id: Ia212b0d52b004c87051542c093274e7106ee08e4 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12044 Tested-by: BuildkiteCI Reviewed-by: aspen <root@gws.fyi> Autosubmit: chickadee <matthewktromp@gmail.com>
3 days r/8417 feat(tvix/tools/narinfo2parquet): preserve the deriveredef1-1/+20
Change-Id: Idbada585b87eef81cad5d40cb7592a7890704695 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12037 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
3 days r/8416 fix(tvix/eval): don't bubble up io errors from path_existsMatthew Tromp3-1/+4
path_exists was returning an error when certain common IO errors were encountered. e.g. in the path "/dev/null/.", path_exists would throw an error because the underlying call to Path::try_exists threw an error because null isn't a directory. But if null isn't a directory, then the path is invalid, so this should really be returning false. That's what nix's behavior is and that's what makes sense. The trait function isn't being changed because some other implementers (e.g. tvix_store_io) have actual errors they can throw. Fixes: b/411 Change-Id: I9e810e7a198bffe61365697c6d3d7e71f264c20b Reviewed-on: https://cl.tvl.fyi/c/depot/+/12042 Tested-by: BuildkiteCI Autosubmit: chickadee <matthewktromp@gmail.com> Reviewed-by: aspen <root@gws.fyi>
3 days r/8415 fix(tvix/cli): Make :q actually quitAspen Smith1-1/+1
whoops Change-Id: I5f24163c276992c7858b038ae2bb636da75f3f91 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12043 Autosubmit: aspen <root@gws.fyi> Tested-by: BuildkiteCI Reviewed-by: lukegb <lukegb@tvl.fyi>
3 days r/8414 refactor(tvix/nix-compat): introduce CaHash::algo_strFlorian Klink2-28/+27
This is the `{fixed,fixed:r,text}:{sha*,md5}` prefix used in various string representations. Factor that code out, and use it in the two places it can be used in. Change-Id: Ic9555fa9e1884198d435e55c7f630b8d3ba2a032 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12041 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: Brian Olsen <me@griff.name>
5 days r/8413 test(tvix/castore/dirsvc): check for a pitfall with deduplicated dirsYureka2-5/+49
Change-Id: I3cff2c2e8b2c8a2fd8d8074647d0d99a1db8e693 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12034 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
5 days r/8412 fix(tvix/castore/GRPCDirectorySvc): fix a bug in the get_recursive fnYureka1-3/+9
When retrieving a closure with get_recursive, the following could happen in the GRPC client: - The first reference to the deduplicated directory is added to expected_directory_digests - The deduplicated directory is obtained removed from expected_directory_digests - The second reference to the deduplicated directory is added to expected_directory_digests - The deduplicated directory has already been sent, but is still in the expected_directory_digests. It looks to the GRPC client like the closure is incomplete and the stream ended prematurely. Change-Id: Ic62bca12e7f8fb85af5fa4dacd199f0f3b8eea8c Reviewed-on: https://cl.tvl.fyi/c/depot/+/12033 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
7 days r/8411 refactor(directoryservice): get rid of NaiveSeeker helperYureka3-319/+10
Use the ChunkedReader in CombinedBlobService instead which also supports seeking. Change-Id: I681331a80763172c27e55362b7044fe81aaa323b Reviewed-on: https://cl.tvl.fyi/c/depot/+/12031 Autosubmit: yuka <yuka@yuka.dev> Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
7 days r/8410 fix(tvix/boot/tests): check nar-bridge being fully upFlorian Klink1-2/+2
Ensure nar-bridge is healthy before connecting to it, don't just check for the unix socket to be present. We don't have a proper /health endpoint yet, but nix-cache-info works fine for now. Change-Id: I22df2c3b7bffcf52dbd3d00f3ba5382dc06ab03d Reviewed-on: https://cl.tvl.fyi/c/depot/+/12030 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: yuka <yuka@yuka.dev> Tested-by: BuildkiteCI
7 days r/8409 fix(tvix/boot/tests): use grpc health checkFlorian Klink1-2/+2
Ensure the service is healthy before connecting to it, don't just check for the unix socket to be present. Change-Id: If6501828677c247910d91f35b860960802084691 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12029 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: raitobezarius <tvl@lahfa.xyz> Tested-by: BuildkiteCI
7 days r/8408 feat(3p/overlays/tvl): init grpc-health-checkFlorian Klink1-0/+19
Change-Id: Icc2429070b0daea9fd230f1f4bb97b9c2eaf24d2 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12027 Tested-by: BuildkiteCI Reviewed-by: Ilan Joselevich <personal@ilanjoselevich.com> Autosubmit: flokli <flokli@flokli.de>
7 days r/8407 fix(tvix/directoryservice): clarify get_recursive not foundYureka4-13/+41
Change-Id: I47f21b4b7db9304eadb04094d41bf04d443fcc3b Reviewed-on: https://cl.tvl.fyi/c/depot/+/12025 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de> Autosubmit: yuka <yuka@yuka.dev>
7 days r/8406 docs(tvix/docs): add TODO for protobufFlorian Klink1-0/+14
Change-Id: Iacf4ef517885bdd6d6366446124863d9a138b12b Reviewed-on: https://cl.tvl.fyi/c/depot/+/12024 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
8 days r/8405 feat(tvix/store): add redb PathInfoServiceIlan Joselevich10-0/+318
This provides a PathInfoService implementation using redb (https://github.com/cberner/redb) as the underlying storage engine. Both an in-memory variant, as well as a filesystem one is provided, similar how it's done with the sled implementation. Supersedes: https://cl.tvl.fyi/c/depot/+/11692 Change-Id: I744619c51bf2efd0fb63659b12a27cbe0b2fd6fc Signed-off-by: Ilan Joselevich <personal@ilanjoselevich.com> Reviewed-on: https://cl.tvl.fyi/c/depot/+/11995 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
8 days r/8404 test(tvix/store): add xp-store-composition to feature powersetYureka1-1/+1
Change-Id: Ibbd9a7585ec2f70c8f0f4d25ad858aa5ebc031dd Reviewed-on: https://cl.tvl.fyi/c/depot/+/12023 Reviewed-by: Ilan Joselevich <personal@ilanjoselevich.com> Autosubmit: yuka <yuka@yuka.dev> Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
8 days r/8403 feat(tvix/store): add grpc healthcheck service to daemonYureka4-0/+71
Change-Id: Ib95fc9352a45d54f9a16c8841c7e8f7cbeeaee8c Reviewed-on: https://cl.tvl.fyi/c/depot/+/12019 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de> Autosubmit: yuka <yuka@yuka.dev>
8 days r/8402 fix(store): add toml dependency for feature xp-store-compositionYureka2-1/+2
Fixes 'use of undeclared crate or module ' with --features xp-store-composition Change-Id: I44dce86e656094d180b91a00f385f685d21f3fbd Reviewed-on: https://cl.tvl.fyi/c/depot/+/12021 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de> Autosubmit: yuka <yuka@yuka.dev>
8 days r/8401 fix(tazjin/emacs): fix Go indentation offset in tree-sitter modeVincent Ambo1-6/+3
Change-Id: Id72ddc6345ee3eb70b7a1d594fe6bcd60d8d0868 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12020 Reviewed-by: tazjin <tazjin@tvl.su> Autosubmit: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
8 days r/8400 feat(tvix): add experimental-store-composition optionYureka5-52/+230
Change-Id: I61661fbb0e77ce3c00c2a467dfabdf3fc77d8575 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12011 Autosubmit: yuka <yuka@yuka.dev> Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
8 days r/8399 refactor(tvix): move service addrs into shared clap structYureka12-149/+132
Change-Id: I7cab29ecfa1823c2103b4c47b7d784bc31459d55 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12008 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de> Autosubmit: yuka <yuka@yuka.dev>
8 days r/8398 chore(tvix/tracing): switch tracing-opentelemetry from git to releaseYureka5-10/+4
Change-Id: Ib830c8b642496a6cdf3d4b9093f0343f5fb80622 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12018 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
8 days r/8397 feat(tvix/composition): improve error message for unknown tagYureka1-2/+2
Change-Id: I61a31488de17725ae4311f5f5bf8e02edb752cf9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12017 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
9 days r/8396 fix(tvix/store): Fix narinfo compression selectionsinavir1-2/+2
Parsing of the narinfo file sets the compression field to None instead of Some("none"). The mapping selecting the decompression reader expected the former in //tvix/store/src/pathinfoservice/nix_http.rs. Change-Id: I254a825b88a4016aab087446bdc0c7b6286de40c Reviewed-on: https://cl.tvl.fyi/c/depot/+/12007 Reviewed-by: raitobezarius <tvl@lahfa.xyz> Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
9 days r/8395 feat(tvix/nix-compat): add SigningKey, NARInfo::add_signatureFlorian Klink2-0/+185
This adds a generic `SigningKey` struct that can be used to sign NARInfos with signers. It also includes tooling to parse keypairs from bytes generated by Nix, returning a specialized ed25519_dalek variant. Change-Id: Ic9780c370939af54e7177c93cde3321adf189fc3 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12014 Reviewed-by: raitobezarius <tvl@lahfa.xyz> Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
9 days r/8394 refactor(tvix/nix-compat): rename PubKey to VerifyingKeyFlorian Klink4-25/+25
Align these with the way it's called in the ed25519 crates. Change-Id: Ia52d3bb9bf831dc6b5f7d5356f5ac62135672883 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12013 Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz> Autosubmit: flokli <flokli@flokli.de>
9 days r/8393 docs(tvix): document the builder APIFlorian Klink2-0/+62
This documents some thoughts and goals of the Tvix Build protocol, and how it is possible to express Nix builds with it. Additionally, it explains a proposed design for reference scanning. Change-Id: I4b1f3feb2278e3c7ce06de831eb8eb1715cba1c9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12012 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: yuka <yuka@yuka.dev> Tested-by: BuildkiteCI
9 days r/8392 test(tvix/composition): add recursion and concurrent testsYureka1-0/+63
Change-Id: Ic10773b08d940b45c3067bd514c3080cadac9606 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12003 Autosubmit: yuka <yuka@yuka.dev> Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
9 days r/8391 docs(tvix/composition): add comment about stackYureka1-0/+3
Change-Id: I3888b5034c53728e2f9cfe24213f8854eb38bfe1 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12005 Autosubmit: yuka <yuka@yuka.dev> Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
9 days r/8390 feat(tvix/composition): downcast boxed error if possibleYureka1-4/+7
We still have the unique store name to identify which instantiation caused the error. For recursion errors, the full chain is still retained inside the CompositionError. Change-Id: Iaddcece445a5df331e578d7c69d710db3d5f8dcd Reviewed-on: https://cl.tvl.fyi/c/depot/+/12002 Tested-by: BuildkiteCI Autosubmit: yuka <yuka@yuka.dev> Reviewed-by: flokli <flokli@flokli.de>
9 days r/8389 feat(ops/users): add sinavir to userssinavir1-0/+5
Change-Id: I54c47f8119d38f7403e27cbc23efd919dcf8e8d5 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12006 Reviewed-by: yuka <yuka@yuka.dev> Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
9 days r/8388 fix(tvix/composition): include typeid in recursion checkYureka1-5/+13
Change-Id: Icc279d41a4980d4b57acbb4243bbd509039b753f Reviewed-on: https://cl.tvl.fyi/c/depot/+/12000 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
9 days r/8387 fix(tvix/nar-bridge): remove leftover debug statementFlorian Klink1-3/+1
Change-Id: Ie6fb822e1a4b76f2f6aef15bbe846e0a89c644fb Reviewed-on: https://cl.tvl.fyi/c/depot/+/11999 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: yuka <yuka@yuka.dev>
9 days r/8386 feat(tvix/nar-bridge): change default portFlorian Klink1-1/+1
Having `tvix-store daemon` and `nar-bridge` listen on the same port by default is silly. Use the same port that nar-bridge-go was using previously. Change-Id: Id374a12e52ba9dac4318e43d0ca0853866eadabc Reviewed-on: https://cl.tvl.fyi/c/depot/+/11998 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: yuka <yuka@yuka.dev> Reviewed-by: Ilan Joselevich <personal@ilanjoselevich.com>
9 days r/8385 chore(tvix): upgrade to tonic 0.12 / hyper 1.0Yureka15-739/+1828
Change-Id: Idd8ce48869ddd869d51a10959b920f1290a8a9b3 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11991 Autosubmit: yuka <yuka@yuka.dev> Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
10 days r/8384 feat(tvix/tracing): http propagation for axumSimon Hauser8-11/+207
It introduces a new accept_trace function for axum0.7 which can be used to accept a header trace from a received request. This function can be used for tonic 0.12 once that version is released, and the specific `accept_trace` function within `tvix_tracing::propagate::tonic` can then be removed. This also integrates http propagation into the nar_bridge crate. Change-Id: I46dcc797d494bb3977c2633753e7060d88d29129 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11925 Reviewed-by: Brian Olsen <me@griff.name> Tested-by: BuildkiteCI Reviewed-by: Simon Hauser <simon.hauser@helsinki-systems.de> Reviewed-by: flokli <flokli@flokli.de>
10 days r/8383 refactor(tvix/boot/tests): use nar-bridge-rsFlorian Klink1-4/+3
This switches the boot tests from the golang implementation to the rust one. Change-Id: Ide2a47aebe40c172077147c05bb6dacd74ba6b1e Reviewed-on: https://cl.tvl.fyi/c/depot/+/11997 Tested-by: BuildkiteCI Reviewed-by: Brian Olsen <me@griff.name>
10 days r/8382 fix(tvix/nar-bridge): fix root node decoding and validationFlorian Klink1-2/+7
This got broken while moving things around. We need to parse the b64-decoded bytes. Since we're now validating the root node, we also need to rename the root node to get past the node name validation. There probably should be some tests for this. Co-Authored-By: sinavir@sinavir.fr Change-Id: I8f24a4a0ac107b1ea5b94c0e0ed872a34eb7b587 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11996 Reviewed-by: Brian Olsen <me@griff.name> Tested-by: BuildkiteCI