From 2f21e0c8c0b47dcf1b29c38a32838f48bd873c0b Mon Sep 17 00:00:00 2001 From: Profpatsch Date: Sun, 28 Jun 2020 04:52:08 +0200 Subject: refactor(nix): use our own writeScript(Bin) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: BuildkiteCI --- nix/binify/default.nix | 2 +- nix/getBins/default.nix | 2 +- nix/runExecline/default.nix | 2 +- nix/runExecline/tests.nix | 19 +------------------ nix/writeExecline/default.nix | 3 +-- nix/writeScript/default.nix | 29 +++++++++++++++++++++++++++++ nix/writeScriptBin/default.nix | 12 ++++++++++++ third_party/default.nix | 2 -- 8 files changed, 46 insertions(+), 25 deletions(-) create mode 100644 nix/writeScript/default.nix create mode 100644 nix/writeScriptBin/default.nix diff --git a/nix/binify/default.nix b/nix/binify/default.nix index 17fd980ad9..d40930fd33 100644 --- a/nix/binify/default.nix +++ b/nix/binify/default.nix @@ -10,7 +10,7 @@ # with `binify { exe = …; name = "hello" }`. { exe, name }: -pkgs.runCommandLocal "binify-${name}" {} '' +pkgs.runCommandLocal "${name}-bin" {} '' mkdir -p $out/bin ln -sT ${lib.escapeShellArg exe} $out/bin/${lib.escapeShellArg name} '' diff --git a/nix/getBins/default.nix b/nix/getBins/default.nix index b0c1135fc8..5ba7584ed8 100644 --- a/nix/getBins/default.nix +++ b/nix/getBins/default.nix @@ -38,7 +38,7 @@ let tests = import ./tests.nix { inherit getBins; - inherit (pkgs) writeScriptBin; + inherit (depot.nix) writeScriptBin; inherit (depot.nix.runTestsuite) assertEq it runTestsuite; }; diff --git a/nix/runExecline/default.nix b/nix/runExecline/default.nix index 0b87b1366d..22d968a1c6 100644 --- a/nix/runExecline/default.nix +++ b/nix/runExecline/default.nix @@ -8,7 +8,7 @@ let tests = import ./tests.nix { inherit runExecline; - inherit (depot.nix) getBins; + inherit (depot.nix) getBins writeScript; inherit (pkgs) stdenv coreutils; inherit pkgs; }; diff --git a/nix/runExecline/tests.nix b/nix/runExecline/tests.nix index cd7f4220b0..a8f91f3cf3 100644 --- a/nix/runExecline/tests.nix +++ b/nix/runExecline/tests.nix @@ -1,4 +1,4 @@ -{ stdenv, pkgs, runExecline, getBins +{ stdenv, pkgs, runExecline, getBins, writeScript # https://www.mail-archive.com/skaware@list.skarnet.org/msg01256.html , coreutils }: @@ -19,23 +19,6 @@ let "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 block = args: builtins.map (arg: " ${arg}") args ++ [ "" ]; diff --git a/nix/writeExecline/default.nix b/nix/writeExecline/default.nix index 49bc416094..8626aa4608 100644 --- a/nix/writeExecline/default.nix +++ b/nix/writeExecline/default.nix @@ -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".''; in - # TODO(Profpatsch): rewrite `writeScript` with `runExecline` - pkgs.writeScript name '' + depot.nix.writeScript name '' #!${pkgs.execline}/bin/execlineb -W${env} ${depot.nix.escapeExecline argList} '' diff --git a/nix/writeScript/default.nix b/nix/writeScript/default.nix new file mode 100644 index 0000000000..e8e6e0fa10 --- /dev/null +++ b/nix/writeScript/default.nix @@ -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" +] diff --git a/nix/writeScriptBin/default.nix b/nix/writeScriptBin/default.nix new file mode 100644 index 0000000000..ed26cf197e --- /dev/null +++ b/nix/writeScriptBin/default.nix @@ -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; +} diff --git a/third_party/default.nix b/third_party/default.nix index 8f6bdc907b..042b5d5832 100644 --- a/third_party/default.nix +++ b/third_party/default.nix @@ -132,8 +132,6 @@ let thttpd tree which - writeScript - writeScriptBin writeShellScript writeShellScriptBin writeText -- cgit 1.4.1