lol

Merge pull request #262388 from drupol/php/build-support/make-validation-non-blocking

build-support/php: make validation check a non blocking process

authored by

Pol Dellaiera and committed by
GitHub
8ecf5abf d5a1b992

+69 -23
+2
pkgs/build-support/php/build-composer-project.nix
··· 13 13 composerNoDev = previousAttrs.composerNoDev or true; 14 14 composerNoPlugins = previousAttrs.composerNoPlugins or true; 15 15 composerNoScripts = previousAttrs.composerNoScripts or true; 16 + composerStrictValidation = previousAttrs.composerStrictValidation or true; 16 17 17 18 nativeBuildInputs = (previousAttrs.nativeBuildInputs or [ ]) ++ [ 18 19 composer ··· 69 70 composerNoDev = previousAttrs.composerNoDev or true; 70 71 composerNoPlugins = previousAttrs.composerNoPlugins or true; 71 72 composerNoScripts = previousAttrs.composerNoScripts or true; 73 + composerStrictValidation = previousAttrs.composerStrictValidation or true; 72 74 }; 73 75 74 76 COMPOSER_CACHE_DIR="/dev/null";
+1
pkgs/build-support/php/build-composer-repository.nix
··· 32 32 composerNoDev = previousAttrs.composerNoDev or true; 33 33 composerNoPlugins = previousAttrs.composerNoPlugins or true; 34 34 composerNoScripts = previousAttrs.composerNoScripts or true; 35 + composerStrictValidation = previousAttrs.composerStrictValidation or true; 35 36 36 37 name = "${previousAttrs.pname}-${previousAttrs.version}-composer-repository"; 37 38
+36 -15
pkgs/build-support/php/hooks/composer-install-hook.sh
··· 35 35 cp composer.lock $out/ 36 36 37 37 echo 38 - echo 'No composer.lock file found, consider adding one to your repository to ensure reproducible builds.' 39 - echo "In the meantime, a composer.lock file has been generated for you in $out/composer.lock" 38 + echo -e "\e[31mERROR: No composer.lock found\e[0m" 40 39 echo 41 - echo 'To fix the issue:' 42 - echo "1. Copy the composer.lock file from $out/composer.lock to the project's source:" 43 - echo " cp $out/composer.lock <path>" 44 - echo '2. Add the composerLock attribute, pointing to the copied composer.lock file:' 45 - echo ' composerLock = ./composer.lock;' 40 + echo -e '\e[31mNo composer.lock file found, consider adding one to your repository to ensure reproducible builds.\e[0m' 41 + echo -e "\e[31mIn the meantime, a composer.lock file has been generated for you in $out/composer.lock\e[0m" 42 + echo 43 + echo -e '\e[31mTo fix the issue:\e[0m' 44 + echo -e "\e[31m1. Copy the composer.lock file from $out/composer.lock to the project's source:\e[0m" 45 + echo -e "\e[31m cp $out/composer.lock <path>\e[0m" 46 + echo -e '\e[31m2. Add the composerLock attribute, pointing to the copied composer.lock file:\e[0m' 47 + echo -e '\e[31m composerLock = ./composer.lock;\e[0m' 46 48 echo 47 49 48 50 exit 1 ··· 51 53 echo "Validating consistency between composer.lock and ${composerRepository}/composer.lock" 52 54 if ! @cmp@ -s "composer.lock" "${composerRepository}/composer.lock"; then 53 55 echo 54 - echo "ERROR: vendorHash is out of date" 56 + echo -e "\e[31mERROR: vendorHash is out of date\e[0m" 55 57 echo 56 - echo "composer.lock is not the same in $composerRepository" 58 + echo -e "\e[31mcomposer.lock is not the same in $composerRepository\e[0m" 57 59 echo 58 - echo "To fix the issue:" 59 - echo '1. Set vendorHash to an empty string: `vendorHash = "";`' 60 - echo '2. Build the derivation and wait for it to fail with a hash mismatch' 61 - echo '3. Copy the "got: sha256-..." value back into the vendorHash field' 62 - echo ' You should have: vendorHash = "sha256-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=";' 60 + echo -e "\e[31mTo fix the issue:\e[0m" 61 + echo -e '\e[31m1. Set vendorHash to an empty string: `vendorHash = "";`\e[0m' 62 + echo -e '\e[31m2. Build the derivation and wait for it to fail with a hash mismatch\e[0m' 63 + echo -e '\e[31m3. Copy the "got: sha256-..." value back into the vendorHash field\e[0m' 64 + echo -e '\e[31m You should have: vendorHash = "sha256-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=";\e[0m' 63 65 echo 64 66 65 67 exit 1 ··· 105 107 composerInstallCheckHook() { 106 108 echo "Executing composerInstallCheckHook" 107 109 108 - composer validate --no-ansi --no-interaction 110 + if ! composer validate --strict --no-ansi --no-interaction --quiet; then 111 + if [ ! -z "${composerStrictValidation-}" ]; then 112 + echo 113 + echo -e "\e[31mERROR: composer files validation failed\e[0m" 114 + echo 115 + echo -e '\e[31mThe validation of the composer.json and composer.lock failed.\e[0m' 116 + echo -e '\e[31mMake sure that the file composer.lock is consistent with composer.json.\e[0m' 117 + echo 118 + exit 1 119 + else 120 + echo 121 + echo -e "\e[33mWARNING: composer files validation failed\e[0m" 122 + echo 123 + echo -e '\e[33mThe validation of the composer.json and composer.lock failed.\e[0m' 124 + echo -e '\e[33mMake sure that the file composer.lock is consistent with composer.json.\e[0m' 125 + echo 126 + echo -e '\e[33mThis check is not blocking, but it is recommended to fix the issue.\e[0m' 127 + echo 128 + fi 129 + fi 109 130 110 131 echo "Finished composerInstallCheckHook" 111 132 }
+30 -8
pkgs/build-support/php/hooks/composer-repository-hook.sh
··· 3 3 declare composerNoDev 4 4 declare composerNoPlugins 5 5 declare composerNoScripts 6 + declare composerStrictValidation 6 7 7 8 preConfigureHooks+=(composerRepositoryConfigureHook) 8 9 preBuildHooks+=(composerRepositoryBuildHook) ··· 31 32 cp composer.lock $out/ 32 33 33 34 echo 34 - echo 'No composer.lock file found, consider adding one to your repository to ensure reproducible builds.' 35 - echo "In the meantime, a composer.lock file has been generated for you in $out/composer.lock" 35 + echo -e "\e[31mERROR: No composer.lock found\e[0m" 36 + echo 37 + echo -e '\e[31mNo composer.lock file found, consider adding one to your repository to ensure reproducible builds.\e[0m' 38 + echo -e "\e[31mIn the meantime, a composer.lock file has been generated for you in $out/composer.lock\e[0m" 36 39 echo 37 - echo 'To fix the issue:' 38 - echo "1. Copy the composer.lock file from $out/composer.lock to the project's source:" 39 - echo " cp $out/composer.lock <path>" 40 - echo '2. Add the composerLock attribute, pointing to the copied composer.lock file:' 41 - echo ' composerLock = ./composer.lock;' 40 + echo -e '\e[31mTo fix the issue:\e[0m' 41 + echo -e "\e[31m1. Copy the composer.lock file from $out/composer.lock to the project's source:\e[0m" 42 + echo -e "\e[31m cp $out/composer.lock <path>\e[0m" 43 + echo -e '\e[31m2. Add the composerLock attribute, pointing to the copied composer.lock file:\e[0m' 44 + echo -e '\e[31m composerLock = ./composer.lock;\e[0m' 42 45 echo 43 46 44 47 exit 1 ··· 63 66 composerRepositoryCheckHook() { 64 67 echo "Executing composerRepositoryCheckHook" 65 68 66 - composer validate --no-ansi --no-interaction 69 + if ! composer validate --strict --no-ansi --no-interaction --quiet; then 70 + if [ ! -z "${composerStrictValidation-}" ]; then 71 + echo 72 + echo -e "\e[31mERROR: composer files validation failed\e[0m" 73 + echo 74 + echo -e '\e[31mThe validation of the composer.json and composer.lock failed.\e[0m' 75 + echo -e '\e[31mMake sure that the file composer.lock is consistent with composer.json.\e[0m' 76 + echo 77 + exit 1 78 + else 79 + echo 80 + echo -e "\e[33mWARNING: composer files validation failed\e[0m" 81 + echo 82 + echo -e '\e[33mThe validation of the composer.json and composer.lock failed.\e[0m' 83 + echo -e '\e[33mMake sure that the file composer.lock is consistent with composer.json.\e[0m' 84 + echo 85 + echo -e '\e[33mThis check is not blocking, but it is recommended to fix the issue.\e[0m' 86 + echo 87 + fi 88 + fi 67 89 68 90 echo "Finished composerRepositoryCheckHook" 69 91 }