Unverified Commit a00733f5 authored by Thiago Kenji Okada's avatar Thiago Kenji Okada Committed by GitHub
Browse files

Merge pull request #261115 from con-f-use/master

writeShellApplication: exclude shell checks
parents 24a1589e 0f3fa9e6
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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

@@ -338,6 +340,7 @@ rec {
    , runtimeInputs ? [ ]
    , meta ? { }
    , checkPhase ? null
    , excludeShellChecks ? [  ]
    }:
    writeTextFile {
      inherit name meta;
@@ -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 ''
+1 −0
Original line number Diff line number Diff line
@@ -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 {};
+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
  ''