Unverified Commit 8ecf5abf authored by Pol Dellaiera's avatar Pol Dellaiera Committed by GitHub
Browse files

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

build-support/php: make validation check a non blocking process 
parents d5a1b992 46a7c4ca
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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";
+1 −0
Original line number Diff line number Diff line
@@ -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";

+36 −15
Original line number Diff line number Diff line
@@ -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 <path>"
        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 <path>\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
@@ -105,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"
}
+30 −8
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ declare version
declare composerNoDev
declare composerNoPlugins
declare composerNoScripts
declare composerStrictValidation

preConfigureHooks+=(composerRepositoryConfigureHook)
preBuildHooks+=(composerRepositoryBuildHook)
@@ -31,14 +32,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 <path>"
        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 <path>\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
@@ -63,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"
}