Loading pkgs/build-support/trivial-builders/default.nix +5 −1 Original line number Diff line number Diff line Loading @@ -311,6 +311,8 @@ rec { Similar to writeShellScriptBin and writeScriptBin. Writes an executable Shell script to /nix/store/<store path>/bin/<name> and checks its syntax with shellcheck and the shell's -n option. Individual checks can be foregone by putting them in the excludeShellChecks list, e.g. [ "SC2016" ]. Automatically includes sane set of shellopts (errexit, nounset, pipefail) and handles creation of PATH based on runtimeInputs Loading Loading @@ -338,6 +340,7 @@ rec { , runtimeInputs ? [ ] , meta ? { } , checkPhase ? null , excludeShellChecks ? [ ] }: writeTextFile { inherit name meta; Loading @@ -363,10 +366,11 @@ rec { # but we still want to use writeShellApplication on those platforms let shellcheckSupported = lib.meta.availableOn stdenv.buildPlatform shellcheck.compiler; excludeOption = lib.optionalString (excludeShellChecks != [ ]) "--exclude '${lib.concatStringsSep "," excludeShellChecks}'"; shellcheckCommand = lib.optionalString shellcheckSupported '' # use shellcheck which does not include docs # pandoc takes long to build and documentation isn't needed for just running the cli ${lib.getExe (haskell.lib.compose.justStaticExecutables shellcheck.unwrapped)} "$target" ${lib.getExe (haskell.lib.compose.justStaticExecutables shellcheck.unwrapped)} ${excludeOption} "$target" ''; in if checkPhase == null then '' Loading pkgs/build-support/trivial-builders/test/default.nix +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ recurseIntoAttrs { then callPackage ./references.nix {} else null; writeCBin = callPackage ./writeCBin.nix {}; writeShellApplication = callPackage ./writeShellApplication.nix {}; writeScriptBin = callPackage ./writeScriptBin.nix {}; writeShellScript = callPackage ./write-shell-script.nix {}; writeShellScriptBin = callPackage ./writeShellScriptBin.nix {}; Loading pkgs/build-support/trivial-builders/test/writeShellApplication.nix 0 → 100644 +29 −0 Original line number Diff line number Diff line /* Run with: cd nixpkgs nix-build -A tests.trivial-builders.writeShellApplication */ { lib, writeShellApplication, runCommand }: let pkg = writeShellApplication { name = "test-script"; excludeShellChecks = [ "SC2016" ]; text = '' echo -e '#!/usr/bin/env bash\n' \ 'echo "$SHELL"' > /tmp/something.sh # this line would normally # ...cause shellcheck error ''; }; in assert pkg.meta.mainProgram == "test-script"; runCommand "test-writeShellApplication" { } '' echo Testing if writeShellApplication builds without shellcheck error... target=${lib.getExe pkg} touch $out '' Loading
pkgs/build-support/trivial-builders/default.nix +5 −1 Original line number Diff line number Diff line Loading @@ -311,6 +311,8 @@ rec { Similar to writeShellScriptBin and writeScriptBin. Writes an executable Shell script to /nix/store/<store path>/bin/<name> and checks its syntax with shellcheck and the shell's -n option. Individual checks can be foregone by putting them in the excludeShellChecks list, e.g. [ "SC2016" ]. Automatically includes sane set of shellopts (errexit, nounset, pipefail) and handles creation of PATH based on runtimeInputs Loading Loading @@ -338,6 +340,7 @@ rec { , runtimeInputs ? [ ] , meta ? { } , checkPhase ? null , excludeShellChecks ? [ ] }: writeTextFile { inherit name meta; Loading @@ -363,10 +366,11 @@ rec { # but we still want to use writeShellApplication on those platforms let shellcheckSupported = lib.meta.availableOn stdenv.buildPlatform shellcheck.compiler; excludeOption = lib.optionalString (excludeShellChecks != [ ]) "--exclude '${lib.concatStringsSep "," excludeShellChecks}'"; shellcheckCommand = lib.optionalString shellcheckSupported '' # use shellcheck which does not include docs # pandoc takes long to build and documentation isn't needed for just running the cli ${lib.getExe (haskell.lib.compose.justStaticExecutables shellcheck.unwrapped)} "$target" ${lib.getExe (haskell.lib.compose.justStaticExecutables shellcheck.unwrapped)} ${excludeOption} "$target" ''; in if checkPhase == null then '' Loading
pkgs/build-support/trivial-builders/test/default.nix +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ recurseIntoAttrs { then callPackage ./references.nix {} else null; writeCBin = callPackage ./writeCBin.nix {}; writeShellApplication = callPackage ./writeShellApplication.nix {}; writeScriptBin = callPackage ./writeScriptBin.nix {}; writeShellScript = callPackage ./write-shell-script.nix {}; writeShellScriptBin = callPackage ./writeShellScriptBin.nix {}; Loading
pkgs/build-support/trivial-builders/test/writeShellApplication.nix 0 → 100644 +29 −0 Original line number Diff line number Diff line /* Run with: cd nixpkgs nix-build -A tests.trivial-builders.writeShellApplication */ { lib, writeShellApplication, runCommand }: let pkg = writeShellApplication { name = "test-script"; excludeShellChecks = [ "SC2016" ]; text = '' echo -e '#!/usr/bin/env bash\n' \ 'echo "$SHELL"' > /tmp/something.sh # this line would normally # ...cause shellcheck error ''; }; in assert pkg.meta.mainProgram == "test-script"; runCommand "test-writeShellApplication" { } '' echo Testing if writeShellApplication builds without shellcheck error... target=${lib.getExe pkg} touch $out ''