From c5d9986f5ab97b6fde6d722f39fc7003f4bafbea Mon Sep 17 00:00:00 2001 From: Alexandre Quercia Date: Tue, 29 Nov 2022 15:38:49 +0100 Subject: [PATCH] Fix docker images build to handle old linux distributions --- .docker/php53/Dockerfile | 58 ++++++- .docker/php54/Dockerfile | 62 ++++++- .docker/php55_71/Dockerfile | 62 ++++++- .docker/php72_73/Dockerfile | 42 ++++- .docker/php74_82/Dockerfile | 46 ++++- .editorconfig | 6 +- .env | 7 + .env.dist | 11 -- .gitignore | 2 + README.md | 13 +- docker-compose.yml | 19 +-- test/bin/test | 326 +++++++++++++++++++++++++++++++----- 12 files changed, 555 insertions(+), 99 deletions(-) create mode 100644 .env delete mode 100644 .env.dist diff --git a/.docker/php53/Dockerfile b/.docker/php53/Dockerfile index 99ca06bf0..38bf19a67 100644 --- a/.docker/php53/Dockerfile +++ b/.docker/php53/Dockerfile @@ -1,12 +1,20 @@ -FROM buildpack-deps:jessie +FROM buildpack-deps:jessie as php53 ENV PHP_VERSION 5.3.29 +RUN set -eux; \ + codename='jessie'; \ + { \ + echo "deb http://archive.debian.org/debian ${codename} main"; \ + echo "deb http://archive.debian.org/debian ${codename}-backports main"; \ + echo "deb http://archive.debian.org/debian-security ${codename}/updates main"; \ + } > /etc/apt/sources.list; + # php 5.3 needs older autoconf RUN set -eux; \ \ apt-get update; \ - apt-get install -y \ + apt-get install -y --force-yes --no-upgrade --no-install-recommends \ curl \ autoconf2.13 \ ; \ @@ -18,7 +26,7 @@ RUN set -eux; \ dpkg -i bison_2.7.1.dfsg-1_amd64.deb; \ rm *.deb; \ \ - curl -sSLf "https://php.net/get/php-$PHP_VERSION.tar.bz2/from/this/mirror" -o php.tar.bz2; \ + curl --insecure -sSLf "https://php.net/get/php-$PHP_VERSION.tar.bz2/from/this/mirror" -o php.tar.bz2; \ echo 'c4e1cf6972b2a9c7f2777a18497d83bf713cdbecabb65d3ff62ba441aebb0091 php.tar.bz2' | sha256sum -cw --status; \ \ mkdir -p /usr/src/php; \ @@ -32,6 +40,8 @@ RUN set -eux; \ --with-pdo-mysql \ --with-zlib \ --enable-mbstring \ + --with-openssl=/usr \ + --with-libdir=lib/x86_64-linux-gnu \ ; \ make -j"$(nproc)"; \ make install; \ @@ -40,11 +50,15 @@ RUN set -eux; \ bison \ libbison-dev \ ; \ - apt-get purge -y --auto-remove \ + apt-get purge -y --force-yes --auto-remove \ autoconf2.13 \ ; \ rm -r /usr/src/php +CMD ["php", "-a"] + +FROM php53 + # Install APC PHP extension # RUN set -eux; \ @@ -54,4 +68,38 @@ RUN set -eux; \ \ rm -r /tmp/pear; -CMD ["php", "-a"] +# Install composer +# +RUN set -eux; \ + composerVersion='1.10.27'; \ + installerUrl='https://github.com/raw/composer/getcomposer.org/a19025d6c0a1ff9fc1fac341128b2823193be462/web/installer'; \ + \ + curl --insecure -sSLf "${installerUrl}" -o /usr/local/bin/composer-installer.php; \ + echo '203196aedb1a3b0f563363796bbf6f647a4f8c2419bc1dfc5aa45adc1725025d /usr/local/bin/composer-installer.php' \ + | sha256sum -cw --status; \ + \ + { \ + echo '#! /usr/bin/env php'; \ + cat /usr/local/bin/composer-installer.php; \ + } > /usr/local/bin/composer-installer; \ + rm /usr/local/bin/composer-installer.php; \ + chmod +x /usr/local/bin/composer-installer; \ + \ + composer-installer \ + --disable-tls \ + --version="${composerVersion}" \ + --filename=composer \ + --install-dir=/usr/local/bin \ + ; \ + \ + echo '230d28fb29f3c6c07ab2382390bef313e36de17868b2bd23b2e070554cae23d2 /usr/local/bin/composer' \ + | sha256sum -cw --status; \ + \ + composer --version; \ + \ + apt-get update; \ + apt-get install -y --force-yes --no-upgrade --no-install-recommends \ + git \ + ; \ + rm -r /var/lib/apt/lists/*; \ + :; diff --git a/.docker/php54/Dockerfile b/.docker/php54/Dockerfile index ef5acfd0e..b330bcdb0 100644 --- a/.docker/php54/Dockerfile +++ b/.docker/php54/Dockerfile @@ -1,5 +1,23 @@ FROM php:5.4-cli +RUN set -eux; \ + codename='jessie'; \ + { \ + echo "deb http://archive.debian.org/debian ${codename} main"; \ + echo "deb http://archive.debian.org/debian ${codename}-backports main"; \ + echo "deb http://archive.debian.org/debian-security ${codename}/updates main"; \ + } > /etc/apt/sources.list; + +RUN set -eux; \ + apt-get update; \ + apt-get install -y --force-yes --no-upgrade --no-install-recommends \ + ca-certificates \ + ; \ + \ + apt-get clean; \ + rm -rf /var/lib/apt/lists/*; \ + :; + RUN docker-php-ext-install pdo RUN docker-php-ext-install pdo_mysql RUN docker-php-ext-install mbstring @@ -19,16 +37,56 @@ RUN set -eux; \ libzip-dev \ '; \ apt-get update; \ - apt-get install -y --no-upgrade --no-install-recommends \ + apt-get install -y --force-yes --no-upgrade --no-install-recommends \ $buildDeps \ ; \ \ pecl install memcache-${MEMCACHE_VERSION}; \ docker-php-ext-enable memcache; \ \ - apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=true \ + apt-get purge -y --force-yes --auto-remove -o APT::AutoRemove::RecommendsImportant=true \ $buildDeps \ ; \ apt-get clean; \ rm -rf /var/lib/apt/lists/*; \ rm -r /tmp/pear + +# Install composer +# +RUN set -eux; \ + composerVersion='1.10.27'; \ + installerUrl='https://github.com/raw/composer/getcomposer.org/a19025d6c0a1ff9fc1fac341128b2823193be462/web/installer'; \ + \ + curl --insecure -sSLf "${installerUrl}" -o /usr/local/bin/composer-installer.php; \ + echo '203196aedb1a3b0f563363796bbf6f647a4f8c2419bc1dfc5aa45adc1725025d /usr/local/bin/composer-installer.php' \ + | sha256sum -cw --status; \ + \ + { \ + echo '#! /usr/bin/env php'; \ + cat /usr/local/bin/composer-installer.php; \ + } > /usr/local/bin/composer-installer; \ + rm /usr/local/bin/composer-installer.php; \ + chmod +x /usr/local/bin/composer-installer; \ + \ + composer-installer \ + --disable-tls \ + --version="${composerVersion}" \ + --filename=composer \ + --install-dir=/usr/local/bin \ + ; \ + \ + echo '230d28fb29f3c6c07ab2382390bef313e36de17868b2bd23b2e070554cae23d2 /usr/local/bin/composer' \ + | sha256sum -cw --status; \ + \ + composer --version; \ + \ + apt-get update; \ + apt-get install -y --force-yes --no-upgrade --no-install-recommends \ + git \ + libzip-dev \ + unzip \ + ; \ + rm -r /var/lib/apt/lists/*; \ + \ + docker-php-ext-install zip; \ + :; diff --git a/.docker/php55_71/Dockerfile b/.docker/php55_71/Dockerfile index 1aa2171a3..9438ad49f 100644 --- a/.docker/php55_71/Dockerfile +++ b/.docker/php55_71/Dockerfile @@ -1,6 +1,24 @@ ARG PHP_TAG FROM php:${PHP_TAG} +RUN set -eux; \ + codename='jessie'; \ + { \ + echo "deb http://archive.debian.org/debian ${codename} main"; \ + echo "deb http://archive.debian.org/debian ${codename}-backports main"; \ + echo "deb http://archive.debian.org/debian-security ${codename}/updates main"; \ + } > /etc/apt/sources.list; + +RUN set -eux; \ + apt-get update; \ + apt-get install -y --force-yes --no-upgrade --no-install-recommends \ + ca-certificates \ + ; \ + \ + apt-get clean; \ + rm -rf /var/lib/apt/lists/*; \ + :; + RUN docker-php-ext-install pdo RUN docker-php-ext-install pdo_mysql RUN docker-php-ext-install mbstring @@ -25,16 +43,56 @@ RUN set -eux; \ libzip-dev \ '; \ apt-get update; \ - apt-get install -y --no-upgrade --no-install-recommends \ + apt-get install -y --force-yes --no-upgrade --no-install-recommends \ $buildDeps \ ; \ \ pecl install memcache-${MEMCACHE_VERSION}; \ docker-php-ext-enable memcache; \ \ - apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=true \ + apt-get purge -y --force-yes --auto-remove -o APT::AutoRemove::RecommendsImportant=true \ $buildDeps \ ; \ apt-get clean; \ rm -rf /var/lib/apt/lists/*; \ rm -r /tmp/pear + +# Install composer +# +RUN set -eux; \ + composerVersion='1.10.27'; \ + installerUrl='https://github.com/raw/composer/getcomposer.org/a19025d6c0a1ff9fc1fac341128b2823193be462/web/installer'; \ + \ + curl --insecure -sSLf "${installerUrl}" -o /usr/local/bin/composer-installer.php; \ + echo '203196aedb1a3b0f563363796bbf6f647a4f8c2419bc1dfc5aa45adc1725025d /usr/local/bin/composer-installer.php' \ + | sha256sum -cw --status; \ + \ + { \ + echo '#! /usr/bin/env php'; \ + cat /usr/local/bin/composer-installer.php; \ + } > /usr/local/bin/composer-installer; \ + rm /usr/local/bin/composer-installer.php; \ + chmod +x /usr/local/bin/composer-installer; \ + \ + composer-installer \ + --disable-tls \ + --version="${composerVersion}" \ + --filename=composer \ + --install-dir=/usr/local/bin \ + ; \ + \ + echo '230d28fb29f3c6c07ab2382390bef313e36de17868b2bd23b2e070554cae23d2 /usr/local/bin/composer' \ + | sha256sum -cw --status; \ + \ + composer --version; \ + \ + apt-get update; \ + apt-get install -y --force-yes --no-upgrade --no-install-recommends \ + git \ + libzip-dev \ + unzip \ + ; \ + rm -r /var/lib/apt/lists/*; \ + \ + docker-php-ext-install zip; \ + :; diff --git a/.docker/php72_73/Dockerfile b/.docker/php72_73/Dockerfile index 69353468b..8e8864668 100644 --- a/.docker/php72_73/Dockerfile +++ b/.docker/php72_73/Dockerfile @@ -25,7 +25,7 @@ RUN set -eux; \ libzip-dev \ '; \ apt-get update; \ - apt-get install -y --no-upgrade --no-install-recommends \ + apt-get install -y --force-yes --no-upgrade --no-install-recommends \ $buildDeps \ ; \ \ @@ -54,3 +54,43 @@ RUN set -eux; \ \ file /bin/ls --mime | grep application/x-executable; \ :; + +# Install composer +# +RUN set -eux; \ + composerVersion='1.10.27'; \ + installerUrl='https://github.com/raw/composer/getcomposer.org/a19025d6c0a1ff9fc1fac341128b2823193be462/web/installer'; \ + \ + curl --insecure -sSLf "${installerUrl}" -o /usr/local/bin/composer-installer.php; \ + echo '203196aedb1a3b0f563363796bbf6f647a4f8c2419bc1dfc5aa45adc1725025d /usr/local/bin/composer-installer.php' \ + | sha256sum -cw --status; \ + \ + { \ + echo '#! /usr/bin/env php'; \ + cat /usr/local/bin/composer-installer.php; \ + } > /usr/local/bin/composer-installer; \ + rm /usr/local/bin/composer-installer.php; \ + chmod +x /usr/local/bin/composer-installer; \ + \ + composer-installer \ + --disable-tls \ + --version="${composerVersion}" \ + --filename=composer \ + --install-dir=/usr/local/bin \ + ; \ + \ + echo '230d28fb29f3c6c07ab2382390bef313e36de17868b2bd23b2e070554cae23d2 /usr/local/bin/composer' \ + | sha256sum -cw --status; \ + \ + composer --version; \ + \ + apt-get update; \ + apt-get install -y --force-yes --no-upgrade --no-install-recommends \ + git \ + libzip-dev \ + unzip \ + ; \ + rm -r /var/lib/apt/lists/*; \ + \ + docker-php-ext-install zip; \ + :; diff --git a/.docker/php74_82/Dockerfile b/.docker/php74_82/Dockerfile index a9d410dbf..8e134233d 100644 --- a/.docker/php74_82/Dockerfile +++ b/.docker/php74_82/Dockerfile @@ -8,7 +8,7 @@ RUN docker-php-ext-install pdo_mysql # RUN set -eux; \ apt-get update; \ - apt-get install -y --no-upgrade --no-install-recommends \ + apt-get install -y --force-yes --no-upgrade --no-install-recommends \ libonig-dev \ ; \ \ @@ -37,14 +37,14 @@ RUN set -eux; \ libzip-dev \ '; \ apt-get update; \ - apt-get install -y --no-upgrade --no-install-recommends \ + apt-get install -y --force-yes --no-upgrade --no-install-recommends \ $buildDeps \ ; \ \ pecl install memcache-${MEMCACHE_VERSION}; \ docker-php-ext-enable memcache; \ \ - apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=true \ + apt-get purge -y --force-yes --auto-remove -o APT::AutoRemove::RecommendsImportant=true \ $buildDeps \ ; \ apt-get clean; \ @@ -66,3 +66,43 @@ RUN set -eux; \ \ file /bin/ls --mime | grep application/x-executable; \ :; + +# Install composer +# +RUN set -eux; \ + composerVersion='1.10.27'; \ + installerUrl='https://github.com/raw/composer/getcomposer.org/a19025d6c0a1ff9fc1fac341128b2823193be462/web/installer'; \ + \ + curl --insecure -sSLf "${installerUrl}" -o /usr/local/bin/composer-installer.php; \ + echo '203196aedb1a3b0f563363796bbf6f647a4f8c2419bc1dfc5aa45adc1725025d /usr/local/bin/composer-installer.php' \ + | sha256sum -cw --status; \ + \ + { \ + echo '#! /usr/bin/env php'; \ + cat /usr/local/bin/composer-installer.php; \ + } > /usr/local/bin/composer-installer; \ + rm /usr/local/bin/composer-installer.php; \ + chmod +x /usr/local/bin/composer-installer; \ + \ + composer-installer \ + --disable-tls \ + --version="${composerVersion}" \ + --filename=composer \ + --install-dir=/usr/local/bin \ + ; \ + \ + echo '230d28fb29f3c6c07ab2382390bef313e36de17868b2bd23b2e070554cae23d2 /usr/local/bin/composer' \ + | sha256sum -cw --status; \ + \ + composer --version; \ + \ + apt-get update; \ + apt-get install -y --force-yes --no-upgrade --no-install-recommends \ + git \ + libzip-dev \ + unzip \ + ; \ + rm -r /var/lib/apt/lists/*; \ + \ + docker-php-ext-install zip; \ + :; diff --git a/.editorconfig b/.editorconfig index 92af3f94c..078a93c60 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,6 +11,8 @@ insert_final_newline = true [*.md] trim_trailing_whitespace = false -[.github/**.yml] +[*.yml] +indent_size = 2 + +[Dockerfile] indent_size = 2 -indent_style = space diff --git a/.env b/.env new file mode 100644 index 000000000..5cecc99c3 --- /dev/null +++ b/.env @@ -0,0 +1,7 @@ +# +# Environment variables used by for running tests. +# +# Copy to `.env.local` in order to customize it. +# +DOCKER_COMPOSE='docker-compose' +APC_ENABLE_CLI=off diff --git a/.env.dist b/.env.dist deleted file mode 100644 index 14b756ef5..000000000 --- a/.env.dist +++ /dev/null @@ -1,11 +0,0 @@ -# -# Environment variables used by docker-compose for test. -# -# Copy to `.env` in order to use it. -# - -# APC test are disabled. -# -# To enable them in order to provide a fix, set to "on". -# -APC_ENABLE_CLI=off diff --git a/.gitignore b/.gitignore index 3c17d4767..ebacf43f2 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ lib/plugins/sfDoctrinePlugin/test/functional/fixtures/log/ /vendor /composer.lock .php-cs-fixer.cache +/var/ +/.env.* diff --git a/README.md b/README.md index 4b285a0b0..f70ec181a 100644 --- a/README.md +++ b/README.md @@ -67,18 +67,9 @@ Tests test/bin/test -### For PHP 7.3 and for lowest dependencies versions? - - test/bin/test php73 lowest - -### For PHP 7.3 and for highest dependencies versions? - - test/bin/test php73 highest - -### For executing a dedicated test file? - - test/bin/test php73 highest test/unit/cache/sfAPCCacheTest.php +### Want to do specific test ? Ask help with the option. + test/bin/test --help ### When you finish your work day, do not forget to clean up your desk diff --git a/docker-compose.yml b/docker-compose.yml index 373560b09..242b0f725 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,23 +4,14 @@ volumes: db_socket: services: - composer: - image: composer - working_dir: /app - volumes: - - .:/app - entrypoint: - - sh - - -c - - | - exec tail -f /dev/null - php53: build: .docker/php53 working_dir: /app volumes: - .:/app - db_socket:/var/run/mysqld + environment: + COMPOSER_HOME: /app/var/cache/composer entrypoint: - sh - -c @@ -46,6 +37,7 @@ services: MEMCACHE_VERSION: '3.0.8' environment: MEMCACHED_HOST: memcached + COMPOSER_HOME: /app/var/cache/composer working_dir: /app volumes: - .:/app @@ -105,7 +97,6 @@ services: MEMCACHE_VERSION: '4.0.5.2' APCU_VERSION: '' - php72: <<: *services_php54 build: @@ -115,7 +106,6 @@ services: MEMCACHE_VERSION: '4.0.5.2' APCU_VERSION: '' - php73: <<: *services_php54 build: @@ -125,7 +115,6 @@ services: MEMCACHE_VERSION: '4.0.5.2' APCU_VERSION: '' - php74: <<: *services_php54 build: @@ -135,7 +124,6 @@ services: MEMCACHE_VERSION: '4.0.5.2' APCU_VERSION: '' - php80: <<: *services_php54 build: @@ -145,7 +133,6 @@ services: MEMCACHE_VERSION: '8.0' APCU_VERSION: '' - php81: <<: *services_php54 build: diff --git a/test/bin/test b/test/bin/test index 5305c0541..a861eabbe 100755 --- a/test/bin/test +++ b/test/bin/test @@ -9,81 +9,315 @@ # Example: "lowest highest" # -# Configuration -# -dependencyPreferences='highest' -skipPHPVersions='php8' +__DIR__=`dirname "$0"` +ROOT_DIR="${__DIR__}/../.." -# Commands -# -dcexec="docker-compose exec -u `id -u`:`id -g`" -installSubmodule='git submodule update --checkout --recursive --force' -composerUpdate='composer update --prefer-dist --no-suggest --optimize-autoloader' -symfonyTestSuite='data/bin/symfony symfony:test --trace' +main () +{ + importEnvironmentVariablesFromDirectory "${ROOT_DIR}" -# Parse arguments -# -phpVersions="${1-}" -dependencyPreferences="${2-${dependencyPreferences}}" -phpTestRuntime="${3-${symfonyTestSuite}}" + configureWithArguments ${1+"$@"} + + startDockerComposeServices + + populatePHPVersions + + tearDownRegisterFunction reset_submodules + + runTests +} + +printHelp () +{ + cat <...] + [--dependency-preference ...] + [--php-test-runtime ] + +Options: + --help Show this screen. + --php-versions Select specific php versions. [default: ${PHP_VERSIONS}] + Examples: + php53 + 'php53 php54' + --dependency-preference Select spectific dependency preference. [default: ${DEPENDENCY_PREFERENCES}] + Allows values: + - highest + - lowest + --php-test-runtime The endpoint command to run test. [default: ${PHP_TEST_RUNTIME}] + +Files: + There are a few configuration files to control certain aspects of operation. + + /.env + This is the default configuration file read on startup. + + /.env.local + This is the custom configuration file read on startup. + To be used to extends /.env with custom configuration. + +Examples: + + * How to execute all tests on all supported PHP versions and dependencies? + + $ test/bin/test + + * How to execute all tests on specific PHP version ? + + $ test/bin/test --php-versions 'php56 php74 php82' + + * How to execute all tests on lowest and highest dependency preference ? + + $ test/bin/test --dependency-preferences 'lowest highest' + + * How to customize the PHP test runtime ? + + $ test/bin/test --php-test-runtime test/unit/config/sfConfigTest.php + + * When you finish your work day, do not forget to clean up your desk + + $ docker-compose down +EOF +} + +importEnvironmentVariablesFromDirectory () +{ + a_directory=${1} + + . "${a_directory}"/.env + + if test -r "${a_directory}"/.env.local; then + . "${a_directory}"/.env.local + else :; fi +} + +startDockerComposeServices () +{ + echo "+ ${DOCKER_COMPOSE} build" + ${DOCKER_COMPOSE} up -d --build --remove-orphans > /dev/null +} + +configureWithArguments () +{ + # Commands + # + DOCKER_COMPOSE_EXEC="${DOCKER_COMPOSE} exec -u `id -u`:`id -g`" + INSTALL_GIT_SUB_MODULE='git submodule update --checkout --recursive --force' + COMPOSER_UPDATE='composer update --prefer-dist --no-suggest --optimize-autoloader' + + # Default Options + # + DEPENDENCY_PREFERENCES='highest' + PHP_VERSIONS='all' + PHP_TEST_RUNTIME='data/bin/symfony symfony:test --trace' + hasHelpOption=false + + parseOperands ${1+"$@"} + + if ${hasHelpOption}; then + printHelp + + exit 0 + else :; fi +} -script () +populatePHPVersions () { - echo - echo - echo $0 ${1} ${2} - echo - ${dcexec} ${1} php data/bin/check_configuration.php - ${dcexec} ${1} php ${phpTestRuntime} + if test x'all' = x"${PHP_VERSIONS}"; then + PHP_VERSIONS=`fetchAllPHPVersions` + else :; fi } -scriptAll () +fetchAllPHPVersions () { - for dependencyPreference in ${dependencyPreferences} - do - install_${dependencyPreference} + ${DOCKER_COMPOSE} 2>/dev/null ps --services --filter status=running \ + | grep php \ + | sort +} - for phpVersion in ${phpVersions} +runTests () +{ + for dependencyPreference in ${DEPENDENCY_PREFERENCES} do - script ${phpVersion} ${dependencyPreference} + for phpVersion in ${PHP_VERSIONS} + do + runTestsForOnePhpVersionAndOneDependencyPreference ${phpVersion} ${dependencyPreference} + done done - done } -fetchAllPHPVersions () +runTestsForOnePhpVersionAndOneDependencyPreference () { - docker-compose 2>/dev/null ps --services --filter status=running \ - | grep php \ - | sort \ - | grep -v ${skipPHPVersions} + a_phpVersion=${1} + a_dependencyPreference=${2} + + echo + echo + echo $0 ${a_phpVersion} ${a_dependencyPreference} + echo + + install_${a_dependencyPreference} ${a_phpVersion} + + ${DOCKER_COMPOSE_EXEC} ${a_phpVersion} php data/bin/check_configuration.php + ${DOCKER_COMPOSE_EXEC} ${a_phpVersion} php ${PHP_TEST_RUNTIME} } install_highest () { - ${installSubmodule} --remote - ${dcexec} composer ${composerUpdate} + b_service=${1} + + ${INSTALL_GIT_SUB_MODULE} --remote + + ${DOCKER_COMPOSE_EXEC} ${b_service} ${COMPOSER_UPDATE} } install_lowest () { - reset_submodules + c_service=${1} + + reset_submodules + ${INSTALL_GIT_SUB_MODULE} - ${installSubmodule} - ${dcexec} composer ${composerUpdate} --prefer-lowest + ${DOCKER_COMPOSE_EXEC} ${c_service} ${COMPOSER_UPDATE} --prefer-lowest } reset_submodules () { - git submodule deinit --force --quiet -- . + git submodule deinit --force --quiet -- . + + git submodule init +} + +parseOperands () +{ + parseOperands_init + + for parseOperands_currentOperand + do + if parseOperands_previousOptionNeedsValue; then + parseOperands_assignValueToVariableToSet + + continue + else :; fi + + parseOperands_extractValueFromCurrentOperand + + case ${parseOperands_endOfOptions}${parseOperands_currentOperand} in #( + --) + parseOperands_endOfOptions='yes' + ;; #( + --help) + hasHelpOption=${optionValue} + ;; #( + --php-versions) + variableToSet=PHP_VERSIONS + ;; #( + --php-versions=*) + PHP_VERSIONS=${optionValue} + ;; #( + --dependency-preferences) + variableToSet=DEPENDENCY_PREFERENCES + ;; #( + --dependency-preferences=*) + DEPENDENCY_PREFERENCES=${optionValue} + ;; #( + --php-test-runtime) + variableToSet=PHP_TEST_RUNTIME + ;; #( + --php-test-runtime=*) + PHP_TEST_RUNTIME=${optionValue} + ;; #( + # --flag-option) + # hasFlagOption=${optionValue} + # ;; #( + # --value-option) + # variableToSet=valueOption + # ;; #( + # --value-option=*) + # valueOption=${optionValue} + # ;; #( + -*) + : + ;; #( + *) + parseOperands_argumentPosition=`expr 1 \+ ${parseOperands_argumentPosition}` + + case ${parseOperands_argumentPosition} in #( + # 1) + # firstArgument=${parseOperands_currentOperand} + # ;; #( + *) + : + ;; + esac + ;; + esac + done +} + +parseOperands_init () +{ + variableToSet= + optionValue= - git submodule init + parseOperands_endOfOptions= + parseOperands_argumentPosition=0 + parseOperands_operandEnabledValue=':' } -echo '+ docker-compose build' -docker-compose up -d --build --remove-orphans > /dev/null +parseOperands_assignValueToVariableToSet () +{ + eval ${variableToSet}=\"${parseOperands_currentOperand}\" -test x"" != x"${phpVersions}" || { - phpVersions=`fetchAllPHPVersions` + variableToSet= +} + +parseOperands_previousOptionNeedsValue () +{ + test x != x"${variableToSet}" +} + +parseOperands_extractValueFromCurrentOperand () +{ + case ${parseOperands_currentOperand} in #( + ?*=?*) + optionValue=`expr X"${parseOperands_currentOperand}" : X'[^=]*=\(.*\)'` + ;; #( + ?*=) + optionValue= + ;; #( + *) + optionValue=${parseOperands_operandEnabledValue} + ;; + esac +} + +tearDownRegisterFunction() +{ + test x"" != x"${tearDown_functions-}" || { + trap 'tearDown' 2 # CTRL-C + trap 'tearDown' QUIT TERM EXIT INT KILL SEGV + } + + case ${tearDown_functions-} in #( + ?*) tearDown_functions="${tearDown_functions} $1" ;; #( + *) tearDown_functions=$1 ;; + esac +} + +tearDown() +{ + test x"" != x"${tearDown_functions-}" || { + return 0 + } + + for tearDown_function in ${tearDown_functions} + do + ${tearDown_function} + done } -scriptAll +main ${1+"$@"}