From ab729870ff8ce21297d4e027d0464f9395e702a7 Mon Sep 17 00:00:00 2001 From: Liam McDermott Date: Mon, 29 Dec 2025 15:28:08 -0500 Subject: [PATCH 1/2] build-support/php: fix composer hook defaults and lockfile handling --- .../builders/v2/build-composer-project.nix | 19 ++++++---- .../php/builders/v2/build-composer-vendor.nix | 16 ++++---- .../v2/hooks/composer-install-hook.sh | 38 ++++++++++++++----- .../builders/v2/hooks/composer-vendor-hook.sh | 7 ++-- 4 files changed, 51 insertions(+), 29 deletions(-) diff --git a/pkgs/build-support/php/builders/v2/build-composer-project.nix b/pkgs/build-support/php/builders/v2/build-composer-project.nix index 4eae35d8081f..b22750a75eac 100644 --- a/pkgs/build-support/php/builders/v2/build-composer-project.nix +++ b/pkgs/build-support/php/builders/v2/build-composer-project.nix @@ -9,14 +9,14 @@ let buildComposerProjectOverride = finalAttrs: { - php ? finalAttrs.php or toplevel.php, - composer ? finalAttrs.php.packages.composer or toplevel.php.packages.composer, - composerLock ? finalAttrs.composerLock or null, - vendorHash ? finalAttrs.vendorHash or "", - composerNoDev ? finalAttrs.composerNoDev or true, - composerNoPlugins ? finalAttrs.composerNoPlugins or true, - composerNoScripts ? finalAttrs.composerNoScripts or true, - composerStrictValidation ? finalAttrs.composerStrictValidation or true, + php ? toplevel.php, + composer ? php.packages.composer, + composerLock ? null, + vendorHash ? "", + composerNoDev ? true, + composerNoPlugins ? true, + composerNoScripts ? true, + composerStrictValidation ? true, buildInputs ? [ ], nativeBuildInputs ? [ ], strictDeps ? true, @@ -35,6 +35,9 @@ let doCheck doInstallCheck dontCheckForBrokenSymlinks + composerNoDev + composerNoPlugins + composerNoScripts ; nativeBuildInputs = nativeBuildInputs ++ [ diff --git a/pkgs/build-support/php/builders/v2/build-composer-vendor.nix b/pkgs/build-support/php/builders/v2/build-composer-vendor.nix index 6aac194e23b0..58d147b2738d 100644 --- a/pkgs/build-support/php/builders/v2/build-composer-vendor.nix +++ b/pkgs/build-support/php/builders/v2/build-composer-vendor.nix @@ -8,14 +8,14 @@ let mkComposerVendorOverride = finalAttrs: { - php ? finalAttrs.php or toplevel.php, - composer ? finalAttrs.php.packages.composer or toplevel.php.packages.composer, - composerLock ? finalAttrs.composerLock or null, - vendorHash ? finalAttrs.vendorHash or "", - composerNoDev ? finalAttrs.composerNoDev or true, - composerNoPlugins ? finalAttrs.composerNoPlugins or true, - composerNoScripts ? finalAttrs.composerNoScripts or true, - composerStrictValidation ? finalAttrs.composerStrictValidation or true, + php ? toplevel.php, + composer ? php.packages.composer, + composerLock ? null, + vendorHash ? "", + composerNoDev ? true, + composerNoPlugins ? true, + composerNoScripts ? true, + composerStrictValidation ? true, buildInputs ? [ ], nativeBuildInputs ? [ ], dontPatchShebangs ? true, diff --git a/pkgs/build-support/php/builders/v2/hooks/composer-install-hook.sh b/pkgs/build-support/php/builders/v2/hooks/composer-install-hook.sh index 19783d08fb1c..1a4f32f63cc8 100644 --- a/pkgs/build-support/php/builders/v2/hooks/composer-install-hook.sh +++ b/pkgs/build-support/php/builders/v2/hooks/composer-install-hook.sh @@ -11,9 +11,9 @@ declare -g composerNoScripts declare -ga composerFlags=() -[[ 1 == "${composerNoDev:-1}" ]] && composerFlags+=(--no-dev) -[[ 1 == "${composerNoPlugins:-1}" ]] && composerFlags+=(--no-plugins) -[[ 1 == "${composerNoScripts:-1}" ]] && composerFlags+=(--no-scripts) +[[ -n "${composerNoDev-1}" ]] && composerFlags+=(--no-dev) +[[ -n "${composerNoPlugins-1}" ]] && composerFlags+=(--no-plugins) +[[ -n "${composerNoScripts-1}" ]] && composerFlags+=(--no-scripts) preConfigureHooks+=(composerInstallConfigureHook) preBuildHooks+=(composerInstallBuildHook) @@ -57,13 +57,31 @@ composerInstallBuildHook() { cp -r "${composerVendor}/${COMPOSER_VENDOR_DIR}" . chmod -R +w "${COMPOSER_VENDOR_DIR}" - echo -e "\e[32mGenerating optimized autoloader and restoring 'bin' directory...\e[0m" - COMPOSER_DISABLE_NETWORK=1 composer \ - "${composerFlags[@]}" \ - --no-interaction \ - --no-progress \ - --optimize-autoloader \ - install + mapfile -t installer_paths < <(jq -r -c 'try((.extra."installer-paths") | keys[])' composer.json) + for installer_path in "${installer_paths[@]}"; do + # Remove everything after {$name} placeholder + installer_path="${installer_path/\{\$name\}*/}" + if [[ -e "${composerVendor}/${installer_path}" ]]; then + echo -e "\e[32mRestoring custom installer path: ${installer_path}\e[0m" + mkdir -p "$(dirname "${installer_path}")" + cp -ar "${composerVendor}/${installer_path}" "${installer_path}" + # Strip out the git repositories + find "${installer_path}" -name .git -type d -prune -print -exec rm -rf {} ";" || true + chmod -R +w "${installer_path}" + fi + done + + # Run this only if composer.lock is available. + # e.g., php-codesniffer doesn't need a composer.lock file. + if [[ -f "composer.lock" ]]; then + echo -e "\e[32mEnsuring Composer dependencies are locked to 'composer.lock'...\e[0m" + composer \ + --no-cache \ + --no-interaction \ + --no-progress \ + "${composerFlags[@]}" \ + install + fi echo "Finished phase: composerInstallBuildHook" } diff --git a/pkgs/build-support/php/builders/v2/hooks/composer-vendor-hook.sh b/pkgs/build-support/php/builders/v2/hooks/composer-vendor-hook.sh index f14a53778a90..6916ff51075f 100644 --- a/pkgs/build-support/php/builders/v2/hooks/composer-vendor-hook.sh +++ b/pkgs/build-support/php/builders/v2/hooks/composer-vendor-hook.sh @@ -10,9 +10,10 @@ declare -g composerNoPlugins declare -g composerNoScripts declare -ga composerFlags=() -[[ 1 == "${composerNoDev:-1}" ]] && composerFlags+=(--no-dev) -[[ 1 == "${composerNoPlugins:-1}" ]] && composerFlags+=(--no-plugins) -[[ 1 == "${composerNoScripts:-1}" ]] && composerFlags+=(--no-scripts) + +[[ -n "${composerNoDev-1}" ]] && composerFlags+=(--no-dev) +[[ -n "${composerNoPlugins-1}" ]] && composerFlags+=(--no-plugins) +[[ -n "${composerNoScripts-1}" ]] && composerFlags+=(--no-scripts) preConfigureHooks+=(composerVendorConfigureHook) preBuildHooks+=(composerVendorBuildHook) From 61235fc36a4f8c73b02293f6b29c882cf7c376b0 Mon Sep 17 00:00:00 2001 From: Liam McDermott Date: Fri, 2 Jan 2026 19:03:38 -0500 Subject: [PATCH 2/2] drupal: update composer fod hash --- pkgs/by-name/dr/drupal/package.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/by-name/dr/drupal/package.nix b/pkgs/by-name/dr/drupal/package.nix index 77ec96ab2fdd..4eefb854808a 100644 --- a/pkgs/by-name/dr/drupal/package.nix +++ b/pkgs/by-name/dr/drupal/package.nix @@ -19,7 +19,7 @@ php.buildComposerProject2 (finalAttrs: { }; composerNoPlugins = false; - vendorHash = "sha256-CAntERLTmR9Gf/e+qBLJqqebdXZ0E9k8ifDh75ASoRo="; + vendorHash = "sha256-7FwwkPTKc/miStdHv1wfLoZhV4Gku1KwNgSlWdpPG8g="; passthru = { tests = {