diff --git a/pkgs/by-name/pn/pnpmBuildHook/package.nix b/pkgs/by-name/pn/pnpmBuildHook/package.nix new file mode 100644 index 000000000000..361c15a16b99 --- /dev/null +++ b/pkgs/by-name/pn/pnpmBuildHook/package.nix @@ -0,0 +1,10 @@ +{ + makeSetupHook, +}: +makeSetupHook { + # Shouldn't need to propagate anything because for this to do anything useful, + # the config hook must also be used. + name = "pnpm-build-hook"; + + __structuredAttrs = true; +} ./pnpm-build-hook.sh diff --git a/pkgs/by-name/pn/pnpmBuildHook/pnpm-build-hook.sh b/pkgs/by-name/pn/pnpmBuildHook/pnpm-build-hook.sh new file mode 100644 index 000000000000..69f5fa4ed2ef --- /dev/null +++ b/pkgs/by-name/pn/pnpmBuildHook/pnpm-build-hook.sh @@ -0,0 +1,52 @@ +# shellcheck shell=bash + +pnpmBuildHook() { + echo "Executing pnpmBuildHook" + + if [[ $pnpmRoot ]]; then + pushd "$pnpmRoot" + fi + + # Add workspace flags before the other flags + local -a pnpmWorkspacesArray + concatTo pnpmWorkspacesArray pnpmWorkspaces + + local -a pnpmBuildFlagsArray + concatTo pnpmBuildFlagsArray pnpmFlags pnpmBuildFlags + + + echo + echo "Running" + echo "pnpm run ${pnpmWorkspacesArray[*]/#/--filter=} ${pnpmBuildScript:-build} ${pnpmBuildFlagsArray[*]}" + echo + + if ! pnpm run "${pnpmWorkspacesArray[@]/#/--filter=}" "${pnpmBuildScript:-build}" "${pnpmBuildFlagsArray[@]}"; then + echo + echo "ERROR: 'pnpm run ${pnpmBuildScript:-build}' failed" + echo + echo "Here are a few things you can try, depending on the error:" + echo "1. Make sure your build script (${pnpmBuildScript:-build}) exists" + echo ' If there isnt one, set `dontPnpmBuild = true`.' + echo + + exit 1 + fi + + if [[ $pnpmRoot ]]; then + popd + fi + + echo "Finished pnpmBuildHook" +} + +pnpmBuildPhase() { + runHook preBuild + + pnpmBuildHook + + runHook postBuild +} + +if [ -z "${dontPnpmBuild-}" ] && [ -z "${buildPhase-}" ]; then + buildPhase=pnpmBuildPhase +fi