From 921e3c16cc3bf5d67dcd47a6615b322c98123f33 Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Fri, 20 Oct 2023 23:37:28 +0200 Subject: [PATCH 1/2] build-support/php: add colors in case of errors --- .../php/hooks/composer-install-hook.sh | 30 ++++++++++--------- .../php/hooks/composer-repository-hook.sh | 16 +++++----- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/pkgs/build-support/php/hooks/composer-install-hook.sh b/pkgs/build-support/php/hooks/composer-install-hook.sh index ab7756aef4f1..3326f99b6dd4 100644 --- a/pkgs/build-support/php/hooks/composer-install-hook.sh +++ b/pkgs/build-support/php/hooks/composer-install-hook.sh @@ -35,14 +35,16 @@ composerInstallConfigureHook() { cp composer.lock $out/ echo - echo 'No composer.lock file found, consider adding one to your repository to ensure reproducible builds.' - echo "In the meantime, a composer.lock file has been generated for you in $out/composer.lock" + echo -e "\e[31mERROR: No composer.lock found\e[0m" echo - echo 'To fix the issue:' - echo "1. Copy the composer.lock file from $out/composer.lock to the project's source:" - echo " cp $out/composer.lock " - echo '2. Add the composerLock attribute, pointing to the copied composer.lock file:' - echo ' composerLock = ./composer.lock;' + echo -e '\e[31mNo composer.lock file found, consider adding one to your repository to ensure reproducible builds.\e[0m' + echo -e "\e[31mIn the meantime, a composer.lock file has been generated for you in $out/composer.lock\e[0m" + echo + echo -e '\e[31mTo fix the issue:\e[0m' + echo -e "\e[31m1. Copy the composer.lock file from $out/composer.lock to the project's source:\e[0m" + echo -e "\e[31m cp $out/composer.lock \e[0m" + echo -e '\e[31m2. Add the composerLock attribute, pointing to the copied composer.lock file:\e[0m' + echo -e '\e[31m composerLock = ./composer.lock;\e[0m' echo exit 1 @@ -51,15 +53,15 @@ composerInstallConfigureHook() { echo "Validating consistency between composer.lock and ${composerRepository}/composer.lock" if ! @cmp@ -s "composer.lock" "${composerRepository}/composer.lock"; then echo - echo "ERROR: vendorHash is out of date" + echo -e "\e[31mERROR: vendorHash is out of date\e[0m" echo - echo "composer.lock is not the same in $composerRepository" + echo -e "\e[31mcomposer.lock is not the same in $composerRepository\e[0m" echo - echo "To fix the issue:" - echo '1. Set vendorHash to an empty string: `vendorHash = "";`' - echo '2. Build the derivation and wait for it to fail with a hash mismatch' - echo '3. Copy the "got: sha256-..." value back into the vendorHash field' - echo ' You should have: vendorHash = "sha256-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=";' + echo -e "\e[31mTo fix the issue:\e[0m" + echo -e '\e[31m1. Set vendorHash to an empty string: `vendorHash = "";`\e[0m' + echo -e '\e[31m2. Build the derivation and wait for it to fail with a hash mismatch\e[0m' + echo -e '\e[31m3. Copy the "got: sha256-..." value back into the vendorHash field\e[0m' + echo -e '\e[31m You should have: vendorHash = "sha256-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=";\e[0m' echo exit 1 diff --git a/pkgs/build-support/php/hooks/composer-repository-hook.sh b/pkgs/build-support/php/hooks/composer-repository-hook.sh index 2c35b11b73b4..d8f204e5df2f 100644 --- a/pkgs/build-support/php/hooks/composer-repository-hook.sh +++ b/pkgs/build-support/php/hooks/composer-repository-hook.sh @@ -31,14 +31,16 @@ composerRepositoryConfigureHook() { cp composer.lock $out/ echo - echo 'No composer.lock file found, consider adding one to your repository to ensure reproducible builds.' - echo "In the meantime, a composer.lock file has been generated for you in $out/composer.lock" + echo -e "\e[31mERROR: No composer.lock found\e[0m" echo - echo 'To fix the issue:' - echo "1. Copy the composer.lock file from $out/composer.lock to the project's source:" - echo " cp $out/composer.lock " - echo '2. Add the composerLock attribute, pointing to the copied composer.lock file:' - echo ' composerLock = ./composer.lock;' + echo -e '\e[31mNo composer.lock file found, consider adding one to your repository to ensure reproducible builds.\e[0m' + echo -e "\e[31mIn the meantime, a composer.lock file has been generated for you in $out/composer.lock\e[0m" + echo + echo -e '\e[31mTo fix the issue:\e[0m' + echo -e "\e[31m1. Copy the composer.lock file from $out/composer.lock to the project's source:\e[0m" + echo -e "\e[31m cp $out/composer.lock \e[0m" + echo -e '\e[31m2. Add the composerLock attribute, pointing to the copied composer.lock file:\e[0m' + echo -e '\e[31m composerLock = ./composer.lock;\e[0m' echo exit 1 From 46a7c4cade9d3ac19650341a5b9de31fd6bd83d8 Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Fri, 20 Oct 2023 23:36:26 +0200 Subject: [PATCH 2/2] build-support/php: add `composerStrictValidation` attribute Set to `true` by default --- .../php/build-composer-project.nix | 2 ++ .../php/build-composer-repository.nix | 1 + .../php/hooks/composer-install-hook.sh | 21 +++++++++++++++++- .../php/hooks/composer-repository-hook.sh | 22 ++++++++++++++++++- 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/pkgs/build-support/php/build-composer-project.nix b/pkgs/build-support/php/build-composer-project.nix index d614ca01eb71..778aa35fa6a5 100644 --- a/pkgs/build-support/php/build-composer-project.nix +++ b/pkgs/build-support/php/build-composer-project.nix @@ -13,6 +13,7 @@ let composerNoDev = previousAttrs.composerNoDev or true; composerNoPlugins = previousAttrs.composerNoPlugins or true; composerNoScripts = previousAttrs.composerNoScripts or true; + composerStrictValidation = previousAttrs.composerStrictValidation or true; nativeBuildInputs = (previousAttrs.nativeBuildInputs or [ ]) ++ [ composer @@ -69,6 +70,7 @@ let composerNoDev = previousAttrs.composerNoDev or true; composerNoPlugins = previousAttrs.composerNoPlugins or true; composerNoScripts = previousAttrs.composerNoScripts or true; + composerStrictValidation = previousAttrs.composerStrictValidation or true; }; COMPOSER_CACHE_DIR="/dev/null"; diff --git a/pkgs/build-support/php/build-composer-repository.nix b/pkgs/build-support/php/build-composer-repository.nix index 9487b61e16cb..5b31f86e61cf 100644 --- a/pkgs/build-support/php/build-composer-repository.nix +++ b/pkgs/build-support/php/build-composer-repository.nix @@ -32,6 +32,7 @@ let composerNoDev = previousAttrs.composerNoDev or true; composerNoPlugins = previousAttrs.composerNoPlugins or true; composerNoScripts = previousAttrs.composerNoScripts or true; + composerStrictValidation = previousAttrs.composerStrictValidation or true; name = "${previousAttrs.pname}-${previousAttrs.version}-composer-repository"; diff --git a/pkgs/build-support/php/hooks/composer-install-hook.sh b/pkgs/build-support/php/hooks/composer-install-hook.sh index 3326f99b6dd4..6fe1c4e5f7dd 100644 --- a/pkgs/build-support/php/hooks/composer-install-hook.sh +++ b/pkgs/build-support/php/hooks/composer-install-hook.sh @@ -107,7 +107,26 @@ composerInstallBuildHook() { composerInstallCheckHook() { echo "Executing composerInstallCheckHook" - composer validate --no-ansi --no-interaction + if ! composer validate --strict --no-ansi --no-interaction --quiet; then + if [ ! -z "${composerStrictValidation-}" ]; then + echo + echo -e "\e[31mERROR: composer files validation failed\e[0m" + echo + echo -e '\e[31mThe validation of the composer.json and composer.lock failed.\e[0m' + echo -e '\e[31mMake sure that the file composer.lock is consistent with composer.json.\e[0m' + echo + exit 1 + else + echo + echo -e "\e[33mWARNING: composer files validation failed\e[0m" + echo + echo -e '\e[33mThe validation of the composer.json and composer.lock failed.\e[0m' + echo -e '\e[33mMake sure that the file composer.lock is consistent with composer.json.\e[0m' + echo + echo -e '\e[33mThis check is not blocking, but it is recommended to fix the issue.\e[0m' + echo + fi + fi echo "Finished composerInstallCheckHook" } diff --git a/pkgs/build-support/php/hooks/composer-repository-hook.sh b/pkgs/build-support/php/hooks/composer-repository-hook.sh index d8f204e5df2f..03783d9d639c 100644 --- a/pkgs/build-support/php/hooks/composer-repository-hook.sh +++ b/pkgs/build-support/php/hooks/composer-repository-hook.sh @@ -3,6 +3,7 @@ declare version declare composerNoDev declare composerNoPlugins declare composerNoScripts +declare composerStrictValidation preConfigureHooks+=(composerRepositoryConfigureHook) preBuildHooks+=(composerRepositoryBuildHook) @@ -65,7 +66,26 @@ composerRepositoryBuildHook() { composerRepositoryCheckHook() { echo "Executing composerRepositoryCheckHook" - composer validate --no-ansi --no-interaction + if ! composer validate --strict --no-ansi --no-interaction --quiet; then + if [ ! -z "${composerStrictValidation-}" ]; then + echo + echo -e "\e[31mERROR: composer files validation failed\e[0m" + echo + echo -e '\e[31mThe validation of the composer.json and composer.lock failed.\e[0m' + echo -e '\e[31mMake sure that the file composer.lock is consistent with composer.json.\e[0m' + echo + exit 1 + else + echo + echo -e "\e[33mWARNING: composer files validation failed\e[0m" + echo + echo -e '\e[33mThe validation of the composer.json and composer.lock failed.\e[0m' + echo -e '\e[33mMake sure that the file composer.lock is consistent with composer.json.\e[0m' + echo + echo -e '\e[33mThis check is not blocking, but it is recommended to fix the issue.\e[0m' + echo + fi + fi echo "Finished composerRepositoryCheckHook" }