refactor(nix): use our own writeScript(Bin)
We have this nice `runExecline` now, so we don’t need to use `runCommand` (which spawns bash) just to write a simple script. Change-Id: I2941ed8c1448fa1d7cc02dc18b24a8a945b2c38b Reviewed-on: https://cl.tvl.fyi/c/depot/+/704 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in> Reviewed-by: BuildkiteCI
This commit is contained in:
parent
4402c363b6
commit
2f21e0c8c0
8 changed files with 46 additions and 25 deletions
|
@ -10,7 +10,7 @@
|
||||||
# with `binify { exe = …; name = "hello" }`.
|
# with `binify { exe = …; name = "hello" }`.
|
||||||
{ exe, name }:
|
{ exe, name }:
|
||||||
|
|
||||||
pkgs.runCommandLocal "binify-${name}" {} ''
|
pkgs.runCommandLocal "${name}-bin" {} ''
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
ln -sT ${lib.escapeShellArg exe} $out/bin/${lib.escapeShellArg name}
|
ln -sT ${lib.escapeShellArg exe} $out/bin/${lib.escapeShellArg name}
|
||||||
''
|
''
|
||||||
|
|
|
@ -38,7 +38,7 @@ let
|
||||||
|
|
||||||
tests = import ./tests.nix {
|
tests = import ./tests.nix {
|
||||||
inherit getBins;
|
inherit getBins;
|
||||||
inherit (pkgs) writeScriptBin;
|
inherit (depot.nix) writeScriptBin;
|
||||||
inherit (depot.nix.runTestsuite) assertEq it runTestsuite;
|
inherit (depot.nix.runTestsuite) assertEq it runTestsuite;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ let
|
||||||
|
|
||||||
tests = import ./tests.nix {
|
tests = import ./tests.nix {
|
||||||
inherit runExecline;
|
inherit runExecline;
|
||||||
inherit (depot.nix) getBins;
|
inherit (depot.nix) getBins writeScript;
|
||||||
inherit (pkgs) stdenv coreutils;
|
inherit (pkgs) stdenv coreutils;
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ stdenv, pkgs, runExecline, getBins
|
{ stdenv, pkgs, runExecline, getBins, writeScript
|
||||||
# https://www.mail-archive.com/skaware@list.skarnet.org/msg01256.html
|
# https://www.mail-archive.com/skaware@list.skarnet.org/msg01256.html
|
||||||
, coreutils }:
|
, coreutils }:
|
||||||
|
|
||||||
|
@ -19,23 +19,6 @@ let
|
||||||
"s6-test"
|
"s6-test"
|
||||||
];
|
];
|
||||||
|
|
||||||
# lol
|
|
||||||
writeScript = name: script: runExecline name {
|
|
||||||
derivationArgs = {
|
|
||||||
inherit script;
|
|
||||||
passAsFile = [ "script" ];
|
|
||||||
preferLocalBuild = true;
|
|
||||||
allowSubstitutes = false;
|
|
||||||
};
|
|
||||||
} [
|
|
||||||
"importas" "-ui" "s" "scriptPath"
|
|
||||||
"importas" "-ui" "out" "out"
|
|
||||||
"foreground" [
|
|
||||||
bins.mv "$s" "$out"
|
|
||||||
]
|
|
||||||
bins.s6-chmod "0755" "$out"
|
|
||||||
];
|
|
||||||
|
|
||||||
# execline block of depth 1
|
# execline block of depth 1
|
||||||
block = args: builtins.map (arg: " ${arg}") args ++ [ "" ];
|
block = args: builtins.map (arg: " ${arg}") args ++ [ "" ];
|
||||||
|
|
||||||
|
|
|
@ -32,8 +32,7 @@ let
|
||||||
else abort ''"${toString argMode}" is not a valid argMode, use one of "var", "var-full", "env", "none", "env-no-push".'';
|
else abort ''"${toString argMode}" is not a valid argMode, use one of "var", "var-full", "env", "none", "env-no-push".'';
|
||||||
|
|
||||||
in
|
in
|
||||||
# TODO(Profpatsch): rewrite `writeScript` with `runExecline`
|
depot.nix.writeScript name ''
|
||||||
pkgs.writeScript name ''
|
|
||||||
#!${pkgs.execline}/bin/execlineb -W${env}
|
#!${pkgs.execline}/bin/execlineb -W${env}
|
||||||
${depot.nix.escapeExecline argList}
|
${depot.nix.escapeExecline argList}
|
||||||
''
|
''
|
||||||
|
|
29
nix/writeScript/default.nix
Normal file
29
nix/writeScript/default.nix
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{ pkgs, depot, ... }:
|
||||||
|
|
||||||
|
# Write the given string to $out
|
||||||
|
# and make it executable.
|
||||||
|
|
||||||
|
let
|
||||||
|
bins = depot.nix.getBins pkgs.s6-portable-utils [
|
||||||
|
"s6-cat"
|
||||||
|
"s6-chmod"
|
||||||
|
];
|
||||||
|
|
||||||
|
in
|
||||||
|
name:
|
||||||
|
# string of the executable script that is put in $out
|
||||||
|
script:
|
||||||
|
|
||||||
|
depot.nix.runExecline name {
|
||||||
|
stdin = script;
|
||||||
|
derivationArgs = {
|
||||||
|
preferLocalBuild = true;
|
||||||
|
allowSubstitutes = false;
|
||||||
|
};
|
||||||
|
} [
|
||||||
|
"importas" "out" "out"
|
||||||
|
# this pipes stdout of s6-cat to $out
|
||||||
|
# and s6-cat redirects from stdin to stdout
|
||||||
|
"if" [ "redirfd" "-w" "1" "$out" bins.s6-cat ]
|
||||||
|
bins.s6-chmod "0755" "$out"
|
||||||
|
]
|
12
nix/writeScriptBin/default.nix
Normal file
12
nix/writeScriptBin/default.nix
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{ depot, ... }:
|
||||||
|
|
||||||
|
# Like writeScript,
|
||||||
|
# but put the script into `$out/bin/${name}`.
|
||||||
|
|
||||||
|
name:
|
||||||
|
script:
|
||||||
|
|
||||||
|
depot.nix.binify {
|
||||||
|
exe = (depot.nix.writeScript name script);
|
||||||
|
inherit name;
|
||||||
|
}
|
2
third_party/default.nix
vendored
2
third_party/default.nix
vendored
|
@ -132,8 +132,6 @@ let
|
||||||
thttpd
|
thttpd
|
||||||
tree
|
tree
|
||||||
which
|
which
|
||||||
writeScript
|
|
||||||
writeScriptBin
|
|
||||||
writeShellScript
|
writeShellScript
|
||||||
writeShellScriptBin
|
writeShellScriptBin
|
||||||
writeText
|
writeText
|
||||||
|
|
Loading…
Reference in a new issue