feat(tools/tvlc): pass list of derivations to depot-scanner

You can now provide a list of Nix derivations to tvlc to get a git worktree + sparse-checkout containing only the paths needed to build the specified derivations.

Known bugs: even though //third_party is only passed to readdir(), git doesn't know this and includes all of //third_party/*.

Change-Id: I9dccebd3fbff4bb04ebd568175cf0a7e37d71ab3
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1826
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
This commit is contained in:
Kane York 2020-08-20 18:15:33 -07:00 committed by kanepyork
parent e539242032
commit a9650041bb
4 changed files with 36 additions and 7 deletions

View file

@ -1,17 +1,31 @@
{ pkgs, depot, ... }:
let
commonsh = ./common.sh;
# TODO(riking): path deduction
#tvix-instantiate="${third_party.nix}/bin/nix-instantiate"
pathScripts = pkgs.writeShellScript "imports" ''
export tvix_instantiate="${depot.third_party.nix}/bin/nix-instantiate"
export depot_scanner="${depot.tools.depot-scanner}/bin/depot-scanner"
'';
# setup: git rev-parse --show-toplevel > $tvlc_root/depot_root
# setup: mkdir $tvlc_root/clients
# setup: echo 1 > $tvlc_root/next_clientid
commonsh = pkgs.stdenv.mkDerivation {
name = "common.sh";
src = ./common.sh;
doCheck = true;
unpackPhase = "true";
buildPhase = ''
substitute ${./common.sh} $out --replace path-scripts ${pathScripts}
'';
checkPhase = ''
${pkgs.shellcheck}/bin/shellcheck $out ${pathScripts} && echo "SHELLCHECK OK"
'';
installPhase = ''
chmod +x $out
'';
};
tvlcNew = pkgs.stdenv.mkDerivation {
name = "tvlc-new";
src = ./tvlc-new;
@ -22,7 +36,7 @@ let
substitute ${./tvlc-new} $out --replace common.sh ${commonsh}
'';
checkPhase = ''
${pkgs.shellcheck}/bin/shellcheck $out ${commonsh} && echo "SHELLCHECK OK"
${pkgs.shellcheck}/bin/shellcheck $out ${commonsh} ${pathScripts} && echo "SHELLCHECK OK"
'';
installPhase = ''
chmod +x $out
@ -30,6 +44,7 @@ let
};
in pkgs.stdenv.mkDerivation rec {
inherit pathScripts;
inherit commonsh;
inherit tvlcNew;
}