From 657657c864c185d6ec737901078b1c0cb3daa85f Mon Sep 17 00:00:00 2001 From: Michele Locati Date: Tue, 3 Mar 2020 12:07:51 +0100 Subject: [PATCH] Allow specifying extensions not supported in certain distros --- README.md | 3 ++- scripts/ci-test-extensions | 29 +++++++++++++++++++++-- scripts/update-readme | 48 ++++++++++++++++++++++++++------------ 3 files changed, 62 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index f3b0389..a04019f 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,8 @@ This repository contains a script that can be used to easily install a PHP exten The script will install all the required APT/APK packages; at the end of the script execution, the no-more needed packages will be removed so that the image will be much smaller. -Supported docker images are all the Alpine/Debian versions, except for PHP 5.5 where we only support Debian 8 (jessie) (that is, `php:5.5`, `php:5.5-apache`, `php:5.5-cli`, `php:5.5-fpm`, `php:5.5-zts`) +Supported docker images are all the Alpine/Debian versions, except for PHP 5.5 where we only support Debian 8 (jessie) (that is, `php:5.5`, `php:5.5-apache`, `php:5.5-cli`, `php:5.5-fpm`, `php:5.5-zts`). +See also the notes in the [Special requirements](#special-requirements) section. ## Usage diff --git a/scripts/ci-test-extensions b/scripts/ci-test-extensions index 43a8c38..47ba0e6 100755 --- a/scripts/ci-test-extensions +++ b/scripts/ci-test-extensions @@ -76,6 +76,29 @@ extractExtensionsFromData() { EXTENSIONS_TO_BE_TESTED="${EXTENSIONS_TO_BE_TESTED# }" } +# Remove from the EXTENSIONS_TO_BE_TESTED variable the extensions that are +# not supported in the distro specified in the data/special-requirements file + +# Update: EXTENSIONS_TO_BE_TESTED +filterUnsupportedExensionsForDistro() { + if test -z "$EXTENSIONS_TO_BE_TESTED"; then + return + fi + filterUnsupportedExensionsForDistro_reqs="$CI_BUILD_DIR/data/special-requirements" + if ! test -f "$filterUnsupportedExensionsForDistro_reqs"; then + return + fi + filterUnsupportedExensionsForDistro_filtered='' + for filterUnsupportedExensionsForDistro_extension in "$EXTENSIONS_TO_BE_TESTED"; do + if stringInList "!$DOCKER_DISTRO" "$(cat "$filterUnsupportedExensionsForDistro_reqs" | grep -E "^$filterUnsupportedExensionsForDistro_extension[ \t]")"; then + printf 'Note: extension "%s" is not supported for distro "%s"\n' "$filterUnsupportedExensionsForDistro_extension" "$DOCKER_DISTRO" + else + filterUnsupportedExensionsForDistro_filtered="$filterUnsupportedExensionsForDistro_filtered $filterUnsupportedExensionsForDistro_extension" + fi + done + EXTENSIONS_TO_BE_TESTED="${filterUnsupportedExensionsForDistro_filtered# }" +} + # Get the docker image ID for a PHP extension and a PHP version # # Arguments: @@ -262,6 +285,8 @@ if test -z "${DOCKER_DISTRO:-}"; then exit 1 fi +. "$CI_BUILD_DIR/scripts/common" + case "${1:-}" in from-commits) if test -z "${2:-}"; then @@ -289,13 +314,13 @@ case "${1:-}" in ;; esac +filterUnsupportedExensionsForDistro + if test -z "$EXTENSIONS_TO_BE_TESTED"; then echo 'No extensions to be tested.' exit 0 fi -. "$CI_BUILD_DIR/scripts/common" - printf '### EXTENSIONS TO BE TESTED: %s\n' "$EXTENSIONS_TO_BE_TESTED" SOME_TEST_FAILED=0 IFS=' diff --git a/scripts/update-readme b/scripts/update-readme index 6618fea..bf65489 100755 --- a/scripts/update-readme +++ b/scripts/update-readme @@ -143,25 +143,43 @@ generateExtensionsTable() { # Output: # the markdown table generateSpecialRequirementsTable() { - generateSpecialRequirementsTable_started='' + generateSpecialRequirementsTable_started=0 IFS=' ' for generateSpecialRequirementsTable_line in $(cat -- "$1" | sort); do - if test -z "$generateSpecialRequirementsTable_started"; then - printf '| Extension | Requirements |\n' - printf '|:---:|:---:|\n' - generateSpecialRequirementsTable_started='y' - fi resetIFS - generateSpecialRequirementsTable_requirement="$(echo "$generateSpecialRequirementsTable_line" | sed -E 's/^\s*\w+\s+//')" - case "$generateSpecialRequirementsTable_requirement" in - zts) - generateSpecialRequirementsTable_requirement='Requires images with PHP compiled with thread-safety enabled (`zts`).' - ;; - esac - printf '| %s | %s |\n' \ - "$(echo "$generateSpecialRequirementsTable_line" | awk '{print $1;}')" \ - "$generateSpecialRequirementsTable_requirement" + generateSpecialRequirementsTable_index=0 + for generateSpecialRequirementsTable_chunk in $generateSpecialRequirementsTable_line; do + if test $generateSpecialRequirementsTable_index -eq 0; then + generateSpecialRequirementsTable_extension="$generateSpecialRequirementsTable_chunk" + else + if test $generateSpecialRequirementsTable_index -eq 1; then + generateSpecialRequirementsTable_requirements='' + elif test $generateSpecialRequirementsTable_index -eq 2; then + generateSpecialRequirementsTable_requirements="$(printf -- '• %s
• ' "$generateSpecialRequirementsTable_requirements")" + else + generateSpecialRequirementsTable_requirements="$(printf '%s
• ' "$generateSpecialRequirementsTable_requirements")" + fi + case "$generateSpecialRequirementsTable_chunk" in + zts) + generateSpecialRequirementsTable_chunk='Requires images with PHP compiled with thread-safety enabled (`zts`).' + ;; + !*) + generateSpecialRequirementsTable_chunk="$(printf 'Not available in `%s` docker images' "${generateSpecialRequirementsTable_chunk#!}")" + ;; + esac + generateSpecialRequirementsTable_requirements="$(printf '%s%s' "$generateSpecialRequirementsTable_requirements" "$generateSpecialRequirementsTable_chunk")" + fi + generateSpecialRequirementsTable_index=$((generateSpecialRequirementsTable_index + 1)) + done + if test $generateSpecialRequirementsTable_index -gt 1; then + if test $generateSpecialRequirementsTable_started -eq 0; then + printf '| Extension | Requirements |\n' + printf '|---|---|\n' + generateSpecialRequirementsTable_started=1 + fi + printf '| %s | %s |\n' "$generateSpecialRequirementsTable_extension" "$generateSpecialRequirementsTable_requirements" + fi done }