From 69b43c44bcfb0280c24025e6c7fb8a26d8919059 Mon Sep 17 00:00:00 2001 From: Saipriya-1144 <87598867+Saipriya-1144@users.noreply.github.com> Date: Thu, 16 Jan 2025 17:49:27 +0530 Subject: [PATCH] User/vchintalapat/stack updates dec (#2553) * stack updates for php and python * added tests for python 3.13 and php 8.4 * modified dockerfile names and bullseye.dockerfile * updated php 8.4 dockerfiles * removed php 8.4 dockerfiles * added php 8.4 dockerfiles * updated php 8.4 tests * updated php 8.4 gpg keys * fixed syntax error in php 8.4 dockerfile * added print statements for debugging * installed imap from pecl * removed imap installation * updated php 8.4 bullseye and bookworm dockerfiles * added new tests for python and php * updated php 8.4 bullseye and bookworm dockerfiles * updated php test * updated php 8.4 dockerfiles * updated php 8.4 dockerfiles * removing imagick as it's failing to install * added php 8.4 to list of available runtime versions * removed lxml for php 8.4 * updated php versions * updated node versions * updated python versions * updated debian flavors for python * updated debian flavors for python * updated python tests * reverted DotNetConstants * updated npm version and added python tests * removed tests for php-composer 2.8.x and 2.7.x * reverted DotNetConstants.cs * building php composer 2.7.x and 2.8.x versions * building php composer * updated php version for building php composer * Added new php-composer version * updated php dockerfiles * updated php dockerfile * updated npm version * added versions to build files * added versions to build files for php-composer * cleanedup dockerfiles * reverted DotNetConstants.cs * updated dotnet 8,9 * updated php version to build php-composer * Installed libsodium-dev to php sdk * Reverted DotNetConstants.cs --- images/constants.yml | 60 +-- images/runtime/build_runtime_images.sh | 25 +- images/runtime/node/20/bullseye.Dockerfile | 2 +- images/runtime/node/installDependencies.sh | 27 +- images/runtime/php-fpm/8.1/tag.txt | 1 - images/runtime/php-fpm/8.2/tag.txt | 1 - images/runtime/php-fpm/8.3/tag.txt | 1 - .../runtime/php-fpm/8.4/bookworm.Dockerfile | 405 +++++++++++++++++ .../runtime/php-fpm/8.4/bullseye.Dockerfile | 409 ++++++++++++++++++ .../runtime/php-fpm/8.4/docker-php-entrypoint | 9 + .../php-fpm/8.4/docker-php-ext-configure | 69 +++ .../runtime/php-fpm/8.4/docker-php-ext-enable | 114 +++++ .../php-fpm/8.4/docker-php-ext-install | 122 ++++++ images/runtime/php-fpm/8.4/docker-php-source | 34 ++ .../versions/bookworm/versionsToBuild.txt | 4 +- .../versions/bullseye/versionsToBuild.txt | 4 +- .../versions/bookworm/versionsToBuild.txt | 2 + .../versions/bullseye/versionsToBuild.txt | 3 + platforms/php/Dockerfile | 27 +- platforms/php/buildPhp.sh | 40 +- platforms/php/composer/Dockerfile | 25 +- .../versions/bookworm/versionsToBuild.txt | 5 +- .../versions/bullseye/versionsToBuild.txt | 5 +- platforms/php/prereqs/build.sh | 2 +- .../php/versions/bookworm/versionsToBuild.txt | 4 + .../php/versions/bullseye/versionsToBuild.txt | 4 + .../versions/bookworm/versionsToBuild.txt | 3 + .../versions/bullseye/versionsToBuild.txt | 5 + .../versions/buster/versionsToBuild.txt | 1 + .../DotNetCore/DotNetCoreRunTimeVersions.cs | 16 +- .../DotNetCore/DotNetCoreSdkVersions.cs | 4 +- src/BuildScriptGenerator/Node/NodeVersions.cs | 8 +- src/BuildScriptGenerator/PhpVersions.cs | 19 +- src/BuildScriptGenerator/PythonVersions.cs | 12 +- .../Php/PhpDynamicInstallationTest.cs | 37 +- .../Python/PythonDynamicInstallationTest.cs | 12 +- .../Php/PhpDynamicInstallationTest.cs | 15 + .../Python/PythonDynamicInstallationTest.cs | 34 +- .../Python/PythonEndToEndTests.cs | 142 ++++-- ...odeRuntimeImageContainsRequiredPrograms.cs | 18 +- .../Php-fpm/PhpFpmImageTest.cs | 12 + .../Python/PythonImagesTests.cs | 9 +- tests/Oryx.Tests.Common/TestValueGenerator.cs | 25 +- .../django-regex-example-app/requirements.txt | 2 +- 44 files changed, 1511 insertions(+), 267 deletions(-) delete mode 100755 images/runtime/php-fpm/8.1/tag.txt delete mode 100644 images/runtime/php-fpm/8.2/tag.txt delete mode 100644 images/runtime/php-fpm/8.3/tag.txt create mode 100644 images/runtime/php-fpm/8.4/bookworm.Dockerfile create mode 100644 images/runtime/php-fpm/8.4/bullseye.Dockerfile create mode 100644 images/runtime/php-fpm/8.4/docker-php-entrypoint create mode 100644 images/runtime/php-fpm/8.4/docker-php-ext-configure create mode 100644 images/runtime/php-fpm/8.4/docker-php-ext-enable create mode 100644 images/runtime/php-fpm/8.4/docker-php-ext-install create mode 100644 images/runtime/php-fpm/8.4/docker-php-source diff --git a/images/constants.yml b/images/constants.yml index d67c887ec4..4eb9e96512 100644 --- a/images/constants.yml +++ b/images/constants.yml @@ -1,6 +1,6 @@ variables: NODE_APP_INSIGHTS_SDK_VERSION: 1.8.7 - NPM_VERSION: 10.7.0 + NPM_VERSION: 10.8.2 PM2_VERSION: 5.3.1 YARN_MAJOR_VERSION: "1" YARN_MINOR_VERSION: "1.22" @@ -13,16 +13,17 @@ variables: node22DebianFlavors: bullseye,bookworm python38DebianFlavors: bullseye,buster python39DebianFlavors: bullseye,buster - python310DebianFlavors: bullseye,buster + python310DebianFlavors: bullseye python311DebianFlavors: bullseye,bookworm python312DebianFlavors: bullseye,bookworm - python313DebianFlavors: bookworm + python313DebianFlavors: bullseye,bookworm dotnet60DebianFlavors: bullseye dotnet80DebianFlavors: bullseye,bookworm dotnet90DebianFlavors: bookworm php81DebianFlavors: bullseye php82DebianFlavors: bullseye php83DebianFlavors: bullseye,bookworm + php84DebianFlavors: bullseye,bookworm debianFlavors: buster,bullseye,bookworm dotnetDebianFlavors: bookworm,bullseye nodejsDebianFlavors: bookworm,bullseye @@ -36,9 +37,10 @@ variables: GitHubActions_BaseImage_Buster: mcr.microsoft.com/mirror/docker/library/buildpack-deps@sha256:be7137ba47bdf421d3950abe1200322631e8db11b468cd6f0ebf3d687e556c90 GitHubActions_BaseImage_Bullseye: mcr.microsoft.com/mirror/docker/library/buildpack-deps@sha256:25c86292946cce832340fe808ac47e5a845b68c488f177a47ff44fd59040397d GitHubActions_BaseImage_Bookworm: mcr.microsoft.com/mirror/docker/library/buildpack-deps@sha256:ff838f535d6e3bace9ab7eefa360d648ba529f9aa57fdd709335f8ef0516cdde - php81_GPG_keys: 528995BFEDFBA7191D46839EF9BA0ADA31CBD89E 39B641343D8C104B2B146DC3F9C39DC0B9698544 - php82_GPG_keys: 1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544 - php83_GPG_keys: 1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA + php81_GPG_keys: "528995BFEDFBA7191D46839EF9BA0ADA31CBD89E 39B641343D8C104B2B146DC3F9C39DC0B9698544" + php82_GPG_keys: "1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544" + php83_GPG_keys: "1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA" + php84_GPG_keys: "AFD8691FDAEDF03BDF6E460563F15A9B715376CA 9D7F99A0CB8F05C8A6958D6256A97AF7600A39A6" python310_GPG_keys: A035C8C19219BA821ECEA86B64E628F8D684696D python311_GPG_keys: A035C8C19219BA821ECEA86B64E628F8D684696D python312_GPG_keys: 7169605F62C751356D054A26A821E680E5FA6305 @@ -47,28 +49,30 @@ variables: python39_GPG_keys: E3FF2839C048B25C084DEBE9B26995E310250568 ASPNET_CORE_APP_60: 6.0.35 ASPNET_CORE_APP_60_SHA: d86da938338a6d97250436d49340e8f114c05b46512ca562aadca6f3e77403d36468d3f34ed5f2d935c070f9e14aedf7299f5a03d2964dbd6576b9a2d3e776e8 - ASPNET_CORE_APP_80: 8.0.10 - ASPNET_CORE_APP_80_SHA: 33221f19964ccb06cba74420dacbfe5bfd036f7847387093119f8f391d5716e1c5a8e05721f2335984409b43423d79b51ec571e51f0cdfae6d9d2a2b2d98505a - ASPNET_CORE_APP_90: 9.0.0 - ASPNET_CORE_APP_90_SHA: 1a81023f119dd5e5b0f9d87b0e3c42df89824b9fcb73192a4670cc2c67358cd018a7c9c965245c7883de468bda88c81d64a21c60f9bc68a6559d76f32d34ce96 + ASPNET_CORE_APP_80: 8.0.12 + ASPNET_CORE_APP_80_SHA: 03a7fd37dce46c31d7e74da7cd4d9aabd82d5e087859d0065f470ebf7d0b62ad1feb59fc3f74690337a928f5751e04bcb7838896e64b3f8d25ae035c5b7f5c83 + ASPNET_CORE_APP_90: 9.0.1 + ASPNET_CORE_APP_90_SHA: e5fc3093aed5756deae3e61f98b9f4bb0c847319db30cbd1668c2511e06529c2f6a5e1917ec776fe2b36a1f7bb7e009fc925fee57f87696a8d502a6c8f5dc613 NET_CORE_APP_60: 6.0.35 NET_CORE_APP_60_SHA: d8d10d600fb664336949576f8ec0534dbffd573f754b9e741f20812221fafcac5f509a7e1ab44e9e63fc31a7b5dbcb19e4ec1930ffd29312212dc7454977090e - NET_CORE_APP_80: 8.0.10 - NET_CORE_APP_80_SHA: 7fb813677720d125c2337fedc6131b230daf1c1d79d5912a1ca6b5e08bf7802b412de3248d645b6483ab23f3fae837ed02a0e520e33020cfef2c888c54f474ac - NET_CORE_APP_90: 9.0.0 - NET_CORE_APP_90_SHA: 5176bd68637646cd36fce7a88f83effe1065fb075e6d4a46b8be3c33d5a8394740577f0ed4f8b4fb13fa69fe83b229eb55ab7f45caac90849bf0392a670ed5af - node18Version: 18.20.4 - node20Version: 20.18.0 - node22Version: 22.9.0 - php81Version: 8.1.30 - php81Version_SHA: f24a6007f0b25a53cb7fbaee69c85017e0345b62089c2425a0afb7e177192ed1 - php82Version: 8.2.24 - php82Version_SHA: 80a5225746a9eb484475b312d4c626c63a88a037d8e56d214f30205e1ba1411a - php83Version: 8.3.14 - php83Version_SHA: 58b4cb9019bf70c0cbcdb814c7df79b9065059d14cf7dbf48d971f8e56ae9be7 - python310Version: 3.10.15 - python311Version: 3.11.10 - python312Version: 3.12.6 + NET_CORE_APP_80: 8.0.12 + NET_CORE_APP_80_SHA: e0d216d54e9a21aaefc120a481050f1137cc708cbbd17204f0b1a47dbb6424078e8b44dc842957a6691025cda1490e5061092802484b5fd12c5903f5ba634481 + NET_CORE_APP_90: 9.0.1 + NET_CORE_APP_90_SHA: d4a31944a5ab063037dca5141dbc8466d0c894b8d2560256782bdbe5a8e86585e8c4c789c40fbe51d56b3853e15adba0985bdc6ae91c85a763565316e1c3cfcb + node18Version: 18.20.5 + node20Version: 20.18.1 + node22Version: 22.13.0 + php81Version: 8.1.31 + php81Version_SHA: c4f244d46ba51c72f7d13d4f66ce6a9e9a8d6b669c51be35e01765ba58e7afca + php82Version: 8.2.27 + php82Version_SHA: 3eec91294d8c09b3df80b39ec36d574ed9b05de4c8afcb25fa215d48f9ecbc6b + php83Version: 8.3.15 + php83Version_SHA: 3df5d45637283f759eef8fc3ce03de829ded3e200c3da278936a684955d2f94f + php84Version: 8.4.2 + php84Version_SHA: 92636453210f7f2174d6ee6df17a5811368f556a6c2c2cbcf019321e36456e01 + python310Version: 3.10.16 + python311Version: 3.11.11 + python312Version: 3.12.8 python38Version: 3.8.20 - python313Version: 3.13.0 - python39Version: 3.9.20 + python313Version: 3.13.1 + python39Version: 3.9.21 diff --git a/images/runtime/build_runtime_images.sh b/images/runtime/build_runtime_images.sh index 0bc6354181..90ed82f49a 100644 --- a/images/runtime/build_runtime_images.sh +++ b/images/runtime/build_runtime_images.sh @@ -76,22 +76,11 @@ case $stack_name in docker build -f ./images/runtime/node/20/$debian_flavor.Dockerfile -t node20_$debian_flavor --build-arg NODE20_VERSION=$node20Version --build-arg BASE_IMAGE="docker.io/library/oryx_node_run_base_$debian_flavor" --build-arg NPM_VERSION=$NPM_VERSION --build-arg PM2_VERSION=$PM2_VERSION --build-arg NODE_APP_INSIGHTS_SDK_VERSION=$NODE_APP_INSIGHTS_SDK_VERSION --build-arg USER_DOTNET_AI_VERSION=$USER_DOTNET_AI_VERSION --build-arg AI_CONNECTION_STRING=$AI_CONNECTION_STRING . rm -f ./nodejs-$debian_flavor-$node20Version.tar.gz ;; - esac - ;; - - "php") - docker build -f ./images/runtime/commonbase/phpRuntimeBase.Dockerfile -t oryx_php_run_base_$debian_flavor --build-arg BASE_IMAGE="docker.io/library/oryx_run_base_$debian_flavor" . - case $stack_version in - "8.1") - docker build -f ./images/runtime/php/8.1/$debian_flavor.Dockerfile -t php81_image_$debian_flavor --build-arg BASE_IMAGE="docker.io/library/oryx_php_run_base_$debian_flavor" --build-arg PHP_VERSION=$php81Version --build-arg PHP_SHA256=$php81Version_SHA --build-arg USER_DOTNET_AI_VERSION=$USER_DOTNET_AI_VERSION --build-arg AI_CONNECTION_STRING=$AI_CONNECTION_STRING . - ;; - "8.2") - docker build -f ./images/runtime/php/8.2/$debian_flavor.Dockerfile -t php82_image_$debian_flavor --build-arg BASE_IMAGE="docker.io/library/oryx_php_run_base_$debian_flavor" --build-arg PHP_VERSION=$php82Version --build-arg PHP_SHA256=$php82Version_SHA --build-arg USER_DOTNET_AI_VERSION=$USER_DOTNET_AI_VERSION --build-arg AI_CONNECTION_STRING=$AI_CONNECTION_STRING . - ;; - - "8.3") - docker build -f ./images/runtime/php/8.3/$debian_flavor.Dockerfile -t php83_image_$debian_flavor --build-arg BASE_IMAGE="docker.io/library/oryx_php_run_base_$debian_flavor" --build-arg PHP_VERSION=$php83Version --build-arg PHP_SHA256=$php83Version_SHA --build-arg USER_DOTNET_AI_VERSION=$USER_DOTNET_AI_VERSION --build-arg AI_CONNECTION_STRING=$AI_CONNECTION_STRING . + "22") + curl -SL --output "nodejs-$debian_flavor-$node22Version.tar.gz" "https://oryxsdksdev.blob.core.windows.net/nodejs/nodejs-$debian_flavor-$node22Version.tar.gz" + docker build -f ./images/runtime/node/22/$debian_flavor.Dockerfile -t node22_$debian_flavor --build-arg NODE22_VERSION=$node22Version --build-arg BASE_IMAGE="docker.io/library/oryx_node_run_base_$debian_flavor" --build-arg NPM_VERSION=$NPM_VERSION --build-arg PM2_VERSION=$PM2_VERSION --build-arg NODE_APP_INSIGHTS_SDK_VERSION=$NODE_APP_INSIGHTS_SDK_VERSION --build-arg USER_DOTNET_AI_VERSION=$USER_DOTNET_AI_VERSION --build-arg AI_CONNECTION_STRING=$AI_CONNECTION_STRING . + rm -f ./nodejs-$debian_flavor-$node22Version.tar.gz ;; esac ;; @@ -108,7 +97,11 @@ case $stack_name in ;; "8.3") - docker build -f ./images/runtime/php-fpm/8.3/$debian_flavor.Dockerfile -t phpfpm83_image_$debian_flavor --build-arg PHP_VERSION=$php83Version --build-arg PHP_SHA256=$php81Version_SHA --build-arg BASE_IMAGE="docker.io/library/oryx_php_fpm_run_base_$debian_flavor" --build-arg USER_DOTNET_AI_VERSION=$USER_DOTNET_AI_VERSION --build-arg AI_CONNECTION_STRING=$AI_CONNECTION_STRING . + docker build -f ./images/runtime/php-fpm/8.3/$debian_flavor.Dockerfile -t phpfpm83_image_$debian_flavor --build-arg PHP_VERSION=$php83Version --build-arg PHP_SHA256=$php83Version_SHA --build-arg BASE_IMAGE="docker.io/library/oryx_php_fpm_run_base_$debian_flavor" --build-arg USER_DOTNET_AI_VERSION=$USER_DOTNET_AI_VERSION --build-arg AI_CONNECTION_STRING=$AI_CONNECTION_STRING . + ;; + + "8.4") + docker build -f ./images/runtime/php-fpm/8.4/$debian_flavor.Dockerfile -t phpfpm84_image_$debian_flavor --build-arg PHP_VERSION=$php84Version --build-arg PHP_SHA256=$php84Version_SHA --build-arg BASE_IMAGE="docker.io/library/oryx_php_fpm_run_base_$debian_flavor" --build-arg USER_DOTNET_AI_VERSION=$USER_DOTNET_AI_VERSION --build-arg AI_CONNECTION_STRING=$AI_CONNECTION_STRING . ;; esac ;; diff --git a/images/runtime/node/20/bullseye.Dockerfile b/images/runtime/node/20/bullseye.Dockerfile index d931310f9b..8b286ebccd 100644 --- a/images/runtime/node/20/bullseye.Dockerfile +++ b/images/runtime/node/20/bullseye.Dockerfile @@ -49,7 +49,7 @@ ARG PM2_VERSION ARG NODE_APP_INSIGHTS_SDK_VERSION RUN npm install -g npm@${NPM_VERSION} -RUN PM2_VERSION=${PM2_VERSION} NODE_APP_INSIGHTS_SDK_VERSION=${NODE_APP_INSIGHTS_SDK_VERSION} ${IMAGES_DIR}/runtime/node/installDependencies.sh +RUN NPM_VERSION=${NPM_VERSION} PM2_VERSION=${PM2_VERSION} NODE_APP_INSIGHTS_SDK_VERSION=${NODE_APP_INSIGHTS_SDK_VERSION} ${IMAGES_DIR}/runtime/node/installDependencies.sh RUN rm -rf /tmp/oryx # Bake Application Insights key from pipeline variable into final image diff --git a/images/runtime/node/installDependencies.sh b/images/runtime/node/installDependencies.sh index c56ea40ce7..87b93eea38 100755 --- a/images/runtime/node/installDependencies.sh +++ b/images/runtime/node/installDependencies.sh @@ -31,28 +31,13 @@ currentNpmVersion=$(npm --version) echo "Version of npm: $currentNpmVersion" # Upgrade npm to the latest available version -if [[ $nodeVersionMajor -ge 18 ]]; then - echo "Upgrading npm..." - npm install npm@10.7.0 -g -loglevel silent - echo "Done upgrading npm." - currentNpmVersion=$(npm --version) - echo "Version of npm after upgrade: $currentNpmVersion" -fi +echo "Upgrading npm..." +npm install npm@$NPM_VERSION -g -loglevel silent +echo "Done upgrading npm." +currentNpmVersion=$(npm --version) +echo "Version of npm after upgrade: $currentNpmVersion" -currentNodeVersion=$(node --version) -echo "Current Node version is $currentNodeVersion" -currentNodeVersion=${currentNodeVersion#?} -IFS='.' read -ra SPLIT_VERSION <<< "$currentNodeVersion" -major="${SPLIT_VERSION[0]}" - -if [ "$major" -lt "10" ]; then - echo "Installing PM2..." - # PM2 is supported as an option when running the app, - # so we need to make sure it is available in our images. - npm install -g pm2@3.5.1 -loglevel silent -else - npm install -g pm2@$PM2_VERSION -loglevel silent -fi +npm install -g pm2@$PM2_VERSION -loglevel silent # Application-Insights is supported as an option for telemetry when running the app, # so we need to make sure it is available in our images. diff --git a/images/runtime/php-fpm/8.1/tag.txt b/images/runtime/php-fpm/8.1/tag.txt deleted file mode 100755 index d17cb50c8f..0000000000 --- a/images/runtime/php-fpm/8.1/tag.txt +++ /dev/null @@ -1 +0,0 @@ -php:8.1-fpm \ No newline at end of file diff --git a/images/runtime/php-fpm/8.2/tag.txt b/images/runtime/php-fpm/8.2/tag.txt deleted file mode 100644 index a8f14a6dec..0000000000 --- a/images/runtime/php-fpm/8.2/tag.txt +++ /dev/null @@ -1 +0,0 @@ -php:8.2-fpm \ No newline at end of file diff --git a/images/runtime/php-fpm/8.3/tag.txt b/images/runtime/php-fpm/8.3/tag.txt deleted file mode 100644 index 18d0adf8c9..0000000000 --- a/images/runtime/php-fpm/8.3/tag.txt +++ /dev/null @@ -1 +0,0 @@ -php:8.3-fpm \ No newline at end of file diff --git a/images/runtime/php-fpm/8.4/bookworm.Dockerfile b/images/runtime/php-fpm/8.4/bookworm.Dockerfile new file mode 100644 index 0000000000..5c233e8287 --- /dev/null +++ b/images/runtime/php-fpm/8.4/bookworm.Dockerfile @@ -0,0 +1,405 @@ +ARG BASE_IMAGE +# Startup script generator +FROM mcr.microsoft.com/oss/go/microsoft/golang:1.23.1-bookworm as startupCmdGen + +# GOPATH is set to "/go" in the base image +WORKDIR /go/src +COPY src/startupscriptgenerator/src . +ARG GIT_COMMIT=unspecified +ARG BUILD_NUMBER=unspecified +ARG RELEASE_TAG_NAME=unspecified +ENV RELEASE_TAG_NAME=${RELEASE_TAG_NAME} +ENV GIT_COMMIT=${GIT_COMMIT} +ENV BUILD_NUMBER=${BUILD_NUMBER} +RUN chmod +x build.sh && ./build.sh php /opt/startupcmdgen/startupcmdgen + +# From https://github.com/docker-library/php.git +FROM ${BASE_IMAGE} +ARG IMAGES_DIR=/tmp/oryx/images + +# Install the Microsoft SQL Server PDO driver on supported versions only. +# - https://docs.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac +# - https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server +RUN set -eux \ + && apt-get update \ + && apt-get install -y --no-install-recommends \ + gnupg2 \ + apt-transport-https \ + && curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \ + && curl https://packages.microsoft.com/config/debian/12/prod.list > /etc/apt/sources.list.d/mssql-release.list \ + && curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg \ + && apt-get update \ + && ACCEPT_EULA=Y apt-get install -y msodbcsql17=17.10.6.1-1 msodbcsql18=18.3.3.1-1 odbcinst1debian2=2.3.11-2+deb12u1 odbcinst=2.3.11-2+deb12u1 unixodbc=2.3.11-2+deb12u1 unixodbc-dev=2.3.11-2+deb12u1 + +ENV PHP_INI_DIR /usr/local/etc/php +RUN set -eux; \ + mkdir -p "$PHP_INI_DIR/conf.d"; \ +# allow running as an arbitrary user (https://github.com/docker-library/php/issues/743) + [ ! -d /var/www/html ]; \ + mkdir -p /var/www/html; \ + chown www-data:www-data /var/www/html; \ + chmod 777 /var/www/html + +#### +ENV PHP_EXTRA_CONFIGURE_ARGS --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --disable-cgi ac_cv_func_mmap=no +#### + +# Apply stack smash protection to functions using local buffers and alloca() +# Make PHP's main executable position-independent (improves ASLR security mechanism, and has no performance impact on x86_64) +# Enable optimization (-O2) +# Enable linker optimization (this sorts the hash buckets to improve cache locality, and is non-default) +# Adds GNU HASH segments to generated executables (this is used if present, and is much faster than sysv hash; in this configuration, sysv hash is also generated) +# https://github.com/docker-library/php/issues/272 +# -D_LARGEFILE_SOURCE and -D_FILE_OFFSET_BITS=64 (https://www.php.net/manual/en/intro.filesystem.php) +ENV PHP_CFLAGS="-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" +ENV PHP_CPPFLAGS="$PHP_CFLAGS" +ENV PHP_LDFLAGS="-Wl,-O1 -Wl,--hash-style=both -pie" + +ENV GPG_KEYS AFD8691FDAEDF03BDF6E460563F15A9B715376CA 9D7F99A0CB8F05C8A6958D6256A97AF7600A39A6 0616E93D95AF471243E26761770426E17EBBB3DD + +ARG PHP_VERSION +ARG PHP_SHA256 +ENV PHP_VERSION ${PHP_VERSION} +ENV PHP_URL="https://www.php.net/get/php-${PHP_VERSION}.tar.xz/from/this/mirror" PHP_ASC_URL="https://www.php.net/get/php-${PHP_VERSION}.tar.xz.asc/from/this/mirror" PHP_MD5="" +ENV PHP_SHA256 ${PHP_SHA256} + +RUN set -eux; \ + \ + savedAptMark="$(apt-mark showmanual)"; \ + apt-get update; \ + apt-get install -y --no-install-recommends gnupg dirmngr; \ + rm -rf /var/lib/apt/lists/*; \ + \ + mkdir -p /usr/src; \ + cd /usr/src; \ + \ + curl -fsSL -o php.tar.xz "$PHP_URL"; \ + \ + if [ -n "$PHP_SHA256" ]; then \ + echo "$PHP_SHA256 *php.tar.xz" | sha256sum -c -; \ + fi; \ + if [ -n "$PHP_MD5" ]; then \ + echo "$PHP_MD5 *php.tar.xz" | md5sum -c -; \ + fi; \ + \ + if [ -n "$PHP_ASC_URL" ]; then \ + curl -fsSL -o php.tar.xz.asc "$PHP_ASC_URL"; \ + export GNUPGHOME="$(mktemp -d)"; \ + ${IMAGES_DIR}/receiveGpgKeys.sh $GPG_KEYS; \ + gpg --batch --verify php.tar.xz.asc php.tar.xz; \ + gpgconf --kill all; \ + rm -rf "$GNUPGHOME"; \ + fi; \ + \ + apt-mark auto '.*' > /dev/null; \ + apt-mark manual $savedAptMark > /dev/null; + +COPY images/runtime/php-fpm/8.4/docker-php-source /usr/local/bin/ +RUN chmod +x /usr/local/bin/docker-php-source + +RUN set -eux; \ + \ + + savedAptMark="$(apt-mark showmanual)"; \ + apt-get update; \ + apt-get install -y --no-install-recommends \ + libargon2-dev \ + libcurl4-openssl-dev \ + libedit-dev \ + libonig-dev \ + libsodium-dev \ + libsqlite3-dev \ + libssl-dev \ + libxml2-dev \ + zlib1g-dev \ + ${PHP_EXTRA_BUILD_DEPS:-} \ + ; \ + rm -rf /var/lib/apt/lists/*; \ + \ + export \ + CFLAGS="$PHP_CFLAGS" \ + CPPFLAGS="$PHP_CPPFLAGS" \ + LDFLAGS="$PHP_LDFLAGS" \ + ; \ + #which docker-php-source; \ + awk '{ sub("\r$", ""); print }' /usr/local/bin/docker-php-source > /usr/local/bin/docker-php-source_new; \ + cat /usr/local/bin/docker-php-source_new; \ + chmod +x /usr/local/bin/docker-php-source_new ; \ + docker-php-source_new extract; \ + ls -l /usr/src/; \ + cd /usr/src/php; \ + gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ + debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \ +# https://bugs.php.net/bug.php?id=74125 + if [ ! -d /usr/include/curl ]; then \ + ln -sT "/usr/include/$debMultiarch/curl" /usr/local/include/curl; \ + fi; \ + ./configure \ + --build="$gnuArch" \ + --with-config-file-path="$PHP_INI_DIR" \ + --with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \ + \ +# make sure invalid --configure-flags are fatal errors intead of just warnings + --enable-option-checking=fatal \ + \ +# https://github.com/docker-library/php/issues/439 + --with-mhash \ + \ +# --enable-ftp is included here because ftp_ssl_connect() needs ftp to be compiled statically (see https://github.com/docker-library/php/issues/236) + --enable-ftp \ +# --enable-mbstring is included here because otherwise there's no way to get pecl to use it properly (see https://github.com/docker-library/php/issues/195) + --enable-mbstring \ +# --enable-mysqlnd is included here because it's harder to compile after the fact than extensions are (since it's a plugin for several extensions, not an extension in itself) + --enable-mysqlnd \ +# https://wiki.php.net/rfc/argon2_password_hash (7.2+) + --with-password-argon2 \ +# https://wiki.php.net/rfc/libsodium + --with-sodium=shared \ +# always build against system sqlite3 (https://github.com/php/php-src/commit/6083a387a81dbbd66d6316a3a12a63f06d5f7109) + --with-pdo-sqlite=/usr \ + --with-sqlite3=/usr \ + \ + --with-curl \ + --with-libedit \ + --with-openssl \ + --with-zlib \ + \ +# in PHP 7.4+, the pecl/pear installers are officially deprecated (requiring an explicit "--with-pear") and will be removed in PHP 8+; see also https://github.com/docker-library/php/issues/846#issuecomment-505638494 + --with-pear \ + \ +# bundled pcre does not support JIT on s390x +# https://manpages.debian.org/stretch/libpcre3-dev/pcrejit.3.en.html#AVAILABILITY_OF_JIT_SUPPORT + $(test "$gnuArch" = 's390x-linux-gnu' && echo '--without-pcre-jit') \ + --with-libdir="lib/$debMultiarch" \ + \ + ${PHP_EXTRA_CONFIGURE_ARGS:-} \ + ; \ + make -j "$(nproc)"; \ + find -type f -name '*.a' -delete; \ + make install; \ + find /usr/local/bin /usr/local/sbin -type f -executable -exec strip --strip-all '{}' + || true; \ + make clean; \ + \ +# https://github.com/docker-library/php/issues/692 (copy default example "php.ini" files somewhere easily discoverable) + cp -v php.ini-* "$PHP_INI_DIR/"; \ + \ + cd /; \ + docker-php-source_new delete; \ + \ +# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies + apt-mark auto '.*' > /dev/null; \ + [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \ + find /usr/local -type f -executable -exec ldd '{}' ';' \ + | awk '/=>/ { print $(NF-1) }' \ + | sort -u \ + | xargs -r dpkg-query --search \ + | cut -d: -f1 \ + | sort -u \ + | xargs -r apt-mark manual \ + ; \ +# update pecl channel definitions https://github.com/docker-library/php/issues/443 + pecl update-channels; \ + rm -rf /tmp/pear ~/.pearrc; \ +# smoke test + php --version + +COPY images/runtime/php-fpm/8.4/docker-php-ext-* images/runtime/php-fpm/8.4/docker-php-entrypoint /usr/local/bin/ +RUN chmod +x /usr/local/bin/docker-php-ext-* +RUN chmod +x /usr/local/bin/docker-php-entrypoint + +# sodium was built as a shared module (so that it can be replaced later if so desired), so let's enable it too (https://github.com/docker-library/php/issues/598) +RUN docker-php-ext-enable sodium + +ENTRYPOINT ["docker-php-entrypoint"] +#### +WORKDIR /var/www/html + +RUN set -eux; \ + cd /usr/local/etc; \ + if [ -d php-fpm.d ]; then \ + # for some reason, upstream's php-fpm.conf.default has "include=NONE/etc/php-fpm.d/*.conf" + sed 's!=NONE/!=!g' php-fpm.conf.default | tee php-fpm.conf > /dev/null; \ + cp php-fpm.d/www.conf.default php-fpm.d/www.conf; \ + else \ + # PHP 5.x doesn't use "include=" by default, so we'll create our own simple config that mimics PHP 7+ for consistency + mkdir php-fpm.d; \ + cp php-fpm.conf.default php-fpm.d/www.conf; \ + { \ + echo '[global]'; \ + echo 'include=etc/php-fpm.d/*.conf'; \ + } | tee php-fpm.conf; \ + fi; \ + { \ + echo '[global]'; \ + echo 'error_log = /proc/self/fd/2'; \ + echo; echo '; https://github.com/docker-library/php/pull/725#issuecomment-443540114'; echo 'log_limit = 8192'; \ + echo; \ + echo '[www]'; \ + echo '; if we send this to /proc/self/fd/1, it never appears'; \ + echo 'access.log = /proc/self/fd/2'; \ + echo; \ + echo 'clear_env = no'; \ + echo; \ + echo '; Ensure worker stdout and stderr are sent to the main error log.'; \ + echo 'catch_workers_output = yes'; \ + echo 'decorate_workers_output = no'; \ + } | tee php-fpm.d/docker.conf; \ + { \ + echo '[global]'; \ + echo 'daemonize = no'; \ + echo; \ + echo '[www]'; \ + echo 'listen = 9000'; \ + } | tee php-fpm.d/zz-docker.conf + +RUN rm -rf /var/lib/apt/lists/* + +# Override stop signal to stop process gracefully +# https://github.com/php/php-src/blob/17baa87faddc2550def3ae7314236826bc1b1398/sapi/fpm/php-fpm.8.in#L163 +STOPSIGNAL SIGQUIT + +EXPOSE 9000 +CMD ["php-fpm"] +#### + +## base dockefile +SHELL ["/bin/bash", "-c"] + +# An environment variable for oryx run-script to know the origin of php image so that +# start-up command can be determined while creating run script +ENV PHP_ORIGIN php-fpm +ENV NGINX_RUN_USER www-data +# Edit the default DocumentRoot setting +ENV NGINX_DOCUMENT_ROOT /home/site/wwwroot +# Install NGINX latest stable version using APT Method with Nginx Repository instead of distribution-provided one: +# - https://www.linuxcapable.com/how-to-install-latest-nginx-mainline-or-stable-on-debian-11/ +RUN apt-get update +RUN apt install curl nano -y +RUN curl -sSL https://packages.sury.org/nginx/README.txt | bash -x +RUN apt-get update +RUN yes '' | apt-get install nginx-core nginx-common nginx nginx-full -y +RUN ls -l /etc/nginx +COPY images/runtime/php-fpm/nginx_conf/default.conf /etc/nginx/sites-available/default +COPY images/runtime/php-fpm/nginx_conf/default.conf /etc/nginx/sites-enabled/default +RUN sed -ri -e 's!worker_connections 768!worker_connections 10068!g' /etc/nginx/nginx.conf +RUN sed -ri -e 's!# multi_accept on!multi_accept on!g' /etc/nginx/nginx.conf +RUN ls -l /etc/nginx +RUN nginx -t +# Edit the default port setting +ENV NGINX_PORT 8080 + +# Install common PHP extensions +# TEMPORARY: Holding odbc related packages from upgrading. +RUN apt-mark hold msodbcsql18 odbcinst1debian2 odbcinst unixodbc unixodbc-dev \ + && apt-get update \ + && apt-get upgrade -y \ + && ln -s /usr/lib/x86_64-linux-gnu/libldap.so /usr/lib/libldap.so \ + && ln -s /usr/lib/x86_64-linux-gnu/liblber.so /usr/lib/liblber.so \ + && ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h + +RUN set -eux; \ + apt-get update \ + && apt-get upgrade -y \ + && apt-get install -y --no-install-recommends apache2-dev \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + # From php 8.4 version imap is removed from php core and moved to pecl + # && PHP_OPENSSL=yes \docker-php-ext-configure imap --with-kerberos --with-imap-ssl ; \ + && pecl install imap + +#33 2.797 bcmath bz2 calendar ctype curl dba dl_test dom enchant exif ffi fileinfo filter ftp gd gettext gmp hash iconv intl json ldap mbstring mysqli odbc opcache pcntl pdo pdo_dblib pdo_firebird pdo_mysql pdo_odbc pdo_pgsql pdo_sqlite pgsql phar posix random readline reflection session shmop simplexml snmp soap sockets sodium spl standard sysvmsg sysvsem sysvshm tidy tokenizer xml xmlreader xmlwriter xsl zend_test zip + +RUN docker-php-ext-configure pdo_odbc --with-pdo-odbc=unixODBC,/usr \ + && docker-php-ext-install gd \ + mysqli \ + opcache \ + pdo \ + pdo_mysql \ + pdo_pgsql \ + pgsql \ + ldap \ + intl \ + gmp \ + zip \ + bcmath \ + mbstring \ + pcntl \ + calendar \ + exif \ + gettext \ + tidy \ + shmop \ + soap \ + sockets \ + sysvmsg \ + sysvsem \ + sysvshm \ + pdo_odbc \ +# deprecated from 7.4, so should be avoided in general template for all php versions +# xmlrpc \ + xsl +RUN pecl install redis && docker-php-ext-enable redis + +# https://github.com/Imagick/imagick/issues/331 +# https://github.com/ihneo/php/pull/24/files +# https://github.com/Imagick/imagick/pull/641 -- uncomment this imagick install when the issue with imagick gets fixed +# RUN set -eux; \ +# pecl install imagick && docker-php-ext-enable imagick + +# deprecated from 5.*, so should be avoided +RUN set -eux; \ + pecl install mongodb && docker-php-ext-enable mongodb + +# Latest pecl/sqlsrv, pecl/pdo_sqlsrv requires PHP (version >= 8.1.0) +RUN set -eux; \ + pecl install sqlsrv pdo_sqlsrv \ + && echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/30-pdo_sqlsrv.ini \ + && echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/20-sqlsrv.ini + + +RUN { \ + echo 'opcache.memory_consumption=128'; \ + echo 'opcache.interned_strings_buffer=8'; \ + echo 'opcache.max_accelerated_files=4000'; \ + echo 'opcache.revalidate_freq=60'; \ + echo 'opcache.fast_shutdown=1'; \ + echo 'opcache.enable_cli=1'; \ + } > /usr/local/etc/php/conf.d/opcache-recommended.ini + +# NOTE: zend_extension=opcache is already configured via docker-php-ext-install, above +RUN { \ + echo 'error_log=/var/log/apache2/php-error.log'; \ + echo 'display_errors=Off'; \ + echo 'log_errors=On'; \ + echo 'display_startup_errors=Off'; \ + echo 'date.timezone=UTC'; \ + } > /usr/local/etc/php/conf.d/php.ini + +RUN set -x \ + && docker-php-source extract \ + && cd /usr/src/php/ext/odbc \ + && phpize \ + && sed -ri 's@^ *test +"\$PHP_.*" *= *"no" *&& *PHP_.*=yes *$@#&@g' configure \ + && chmod +x ./configure \ + && ./configure --with-unixODBC=shared,/usr \ + && docker-php-ext-install odbc \ + && rm -rf /var/lib/apt/lists/* + +ENV LANG="C.UTF-8" \ + LANGUAGE="C.UTF-8" \ + LC_ALL="C.UTF-8" + +## dockerfile +# Bake Application Insights key from pipeline variable into final image +ARG AI_CONNECTION_STRING +ENV ORYX_AI_CONNECTION_STRING=${AI_CONNECTION_STRING} + +# Oryx++ Builder variables +ENV CNB_STACK_ID="oryx.stacks.skeleton" +LABEL io.buildpacks.stack.id="oryx.stacks.skeleton" + +COPY --from=startupCmdGen /opt/startupcmdgen/startupcmdgen /opt/startupcmdgen/startupcmdgen +RUN ln -s /opt/startupcmdgen/startupcmdgen /usr/local/bin/oryx + +ENV LANG="C.UTF-8" \ + LANGUAGE="C.UTF-8" \ + LC_ALL="C.UTF-8" \ No newline at end of file diff --git a/images/runtime/php-fpm/8.4/bullseye.Dockerfile b/images/runtime/php-fpm/8.4/bullseye.Dockerfile new file mode 100644 index 0000000000..6ea4379682 --- /dev/null +++ b/images/runtime/php-fpm/8.4/bullseye.Dockerfile @@ -0,0 +1,409 @@ +ARG BASE_IMAGE + +# Startup script generator +FROM mcr.microsoft.com/oss/go/microsoft/golang:1.23.1-bullseye as startupCmdGen + +# GOPATH is set to "/go" in the base image +WORKDIR /go/src +COPY src/startupscriptgenerator/src . +ARG GIT_COMMIT=unspecified +ARG BUILD_NUMBER=unspecified +ARG RELEASE_TAG_NAME=unspecified +ENV RELEASE_TAG_NAME=${RELEASE_TAG_NAME} +ENV GIT_COMMIT=${GIT_COMMIT} +ENV BUILD_NUMBER=${BUILD_NUMBER} +RUN chmod +x build.sh && ./build.sh php /opt/startupcmdgen/startupcmdgen + +# From https://github.com/docker-library/php.git +FROM ${BASE_IMAGE} +ARG IMAGES_DIR=/tmp/oryx/images + +# do NOT merge this content with above line because the +# above line is shared across all php images +# Install the Microsoft SQL Server PDO driver on supported versions only. +# - https://docs.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac +# - https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server +RUN set -eux \ + && apt-get update \ + && apt-get install -y --no-install-recommends \ + gnupg2 \ + apt-transport-https \ + && curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \ + && curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list \ + && apt-get update \ + && ACCEPT_EULA=Y apt-get install -y msodbcsql17 msodbcsql18=18.1.2.1-1 odbcinst1debian2=2.3.7 odbcinst=2.3.7 unixodbc=2.3.7 unixodbc-dev=2.3.7 + +ENV PHP_INI_DIR /usr/local/etc/php +RUN set -eux; \ + mkdir -p "$PHP_INI_DIR/conf.d"; \ +# allow running as an arbitrary user (https://github.com/docker-library/php/issues/743) + [ ! -d /var/www/html ]; \ + mkdir -p /var/www/html; \ + chown www-data:www-data /var/www/html; \ + chmod 777 /var/www/html + +#### +ENV PHP_EXTRA_CONFIGURE_ARGS --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --disable-cgi ac_cv_func_mmap=no +#### + +# Apply stack smash protection to functions using local buffers and alloca() +# Make PHP's main executable position-independent (improves ASLR security mechanism, and has no performance impact on x86_64) +# Enable optimization (-O2) +# Enable linker optimization (this sorts the hash buckets to improve cache locality, and is non-default) +# Adds GNU HASH segments to generated executables (this is used if present, and is much faster than sysv hash; in this configuration, sysv hash is also generated) +# https://github.com/docker-library/php/issues/272 +# -D_LARGEFILE_SOURCE and -D_FILE_OFFSET_BITS=64 (https://www.php.net/manual/en/intro.filesystem.php) +ENV PHP_CFLAGS="-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" +ENV PHP_CPPFLAGS="$PHP_CFLAGS" +ENV PHP_LDFLAGS="-Wl,-O1 -Wl,--hash-style=both -pie" + +ENV GPG_KEYS AFD8691FDAEDF03BDF6E460563F15A9B715376CA 9D7F99A0CB8F05C8A6958D6256A97AF7600A39A6 0616E93D95AF471243E26761770426E17EBBB3DD + +ARG PHP_VERSION +ARG PHP_SHA256 +ENV PHP_VERSION ${PHP_VERSION} +ENV PHP_URL="https://www.php.net/get/php-${PHP_VERSION}.tar.xz/from/this/mirror" PHP_ASC_URL="https://www.php.net/get/php-${PHP_VERSION}.tar.xz.asc/from/this/mirror" PHP_MD5="" +ENV PHP_SHA256 ${PHP_SHA256} + +RUN set -eux; \ + \ + savedAptMark="$(apt-mark showmanual)"; \ + apt-get update; \ + apt-get install -y --no-install-recommends gnupg dirmngr; \ + rm -rf /var/lib/apt/lists/*; \ + \ + mkdir -p /usr/src; \ + cd /usr/src; \ + \ + curl -fsSL -o php.tar.xz "$PHP_URL"; \ + \ + if [ -n "$PHP_SHA256" ]; then \ + echo "$PHP_SHA256 *php.tar.xz" | sha256sum -c -; \ + fi; \ + if [ -n "$PHP_MD5" ]; then \ + echo "$PHP_MD5 *php.tar.xz" | md5sum -c -; \ + fi; \ + \ + if [ -n "$PHP_ASC_URL" ]; then \ + curl -fsSL -o php.tar.xz.asc "$PHP_ASC_URL"; \ + export GNUPGHOME="$(mktemp -d)"; \ + ${IMAGES_DIR}/receiveGpgKeys.sh $GPG_KEYS; \ + gpg --batch --verify php.tar.xz.asc php.tar.xz; \ + gpgconf --kill all; \ + rm -rf "$GNUPGHOME"; \ + fi; \ + \ + apt-mark auto '.*' > /dev/null; \ + apt-mark manual $savedAptMark > /dev/null; \ + apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false + +COPY images/runtime/php-fpm/8.4/docker-php-source /usr/local/bin/ +RUN chmod +x /usr/local/bin/docker-php-source + +RUN set -eux; \ + \ + + savedAptMark="$(apt-mark showmanual)"; \ + apt-get update; \ + apt-get install -y --no-install-recommends \ + libargon2-dev \ + libcurl4-openssl-dev \ + libedit-dev \ + libonig-dev \ + libsodium-dev \ + libsqlite3-dev \ + libssl-dev \ + libxml2-dev \ + zlib1g-dev \ + ${PHP_EXTRA_BUILD_DEPS:-} \ + ; \ + rm -rf /var/lib/apt/lists/*; \ + \ + export \ + CFLAGS="$PHP_CFLAGS" \ + CPPFLAGS="$PHP_CPPFLAGS" \ + LDFLAGS="$PHP_LDFLAGS" \ + ; \ + #which docker-php-source; \ + awk '{ sub("\r$", ""); print }' /usr/local/bin/docker-php-source > /usr/local/bin/docker-php-source_new; \ + cat /usr/local/bin/docker-php-source_new; \ + chmod +x /usr/local/bin/docker-php-source_new ; \ + docker-php-source_new extract; \ + ls -l /usr/src/; \ + cd /usr/src/php; \ + gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ + debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \ +# https://bugs.php.net/bug.php?id=74125 + if [ ! -d /usr/include/curl ]; then \ + ln -sT "/usr/include/$debMultiarch/curl" /usr/local/include/curl; \ + fi; \ + ./configure \ + --build="$gnuArch" \ + --with-config-file-path="$PHP_INI_DIR" \ + --with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \ + \ +# make sure invalid --configure-flags are fatal errors intead of just warnings + --enable-option-checking=fatal \ + \ +# https://github.com/docker-library/php/issues/439 + --with-mhash \ + \ +# --enable-ftp is included here because ftp_ssl_connect() needs ftp to be compiled statically (see https://github.com/docker-library/php/issues/236) + --enable-ftp \ +# --enable-mbstring is included here because otherwise there's no way to get pecl to use it properly (see https://github.com/docker-library/php/issues/195) + --enable-mbstring \ +# --enable-mysqlnd is included here because it's harder to compile after the fact than extensions are (since it's a plugin for several extensions, not an extension in itself) + --enable-mysqlnd \ +# https://wiki.php.net/rfc/argon2_password_hash (7.2+) + --with-password-argon2 \ +# https://wiki.php.net/rfc/libsodium + --with-sodium=shared \ +# always build against system sqlite3 (https://github.com/php/php-src/commit/6083a387a81dbbd66d6316a3a12a63f06d5f7109) + --with-pdo-sqlite=/usr \ + --with-sqlite3=/usr \ + \ + --with-curl \ + --with-libedit \ + --with-openssl \ + --with-zlib \ + \ +# in PHP 7.4+, the pecl/pear installers are officially deprecated (requiring an explicit "--with-pear") and will be removed in PHP 8+; see also https://github.com/docker-library/php/issues/846#issuecomment-505638494 + --with-pear \ + \ +# bundled pcre does not support JIT on s390x +# https://manpages.debian.org/stretch/libpcre3-dev/pcrejit.3.en.html#AVAILABILITY_OF_JIT_SUPPORT + $(test "$gnuArch" = 's390x-linux-gnu' && echo '--without-pcre-jit') \ + --with-libdir="lib/$debMultiarch" \ + \ + ${PHP_EXTRA_CONFIGURE_ARGS:-} \ + ; \ + make -j "$(nproc)"; \ + find -type f -name '*.a' -delete; \ + make install; \ + find /usr/local/bin /usr/local/sbin -type f -executable -exec strip --strip-all '{}' + || true; \ + make clean; \ + \ +# https://github.com/docker-library/php/issues/692 (copy default example "php.ini" files somewhere easily discoverable) + cp -v php.ini-* "$PHP_INI_DIR/"; \ + \ + cd /; \ + docker-php-source_new delete; \ + \ +# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies + apt-mark auto '.*' > /dev/null; \ + [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \ + find /usr/local -type f -executable -exec ldd '{}' ';' \ + | awk '/=>/ { print $(NF-1) }' \ + | sort -u \ + | xargs -r dpkg-query --search \ + | cut -d: -f1 \ + | sort -u \ + | xargs -r apt-mark manual \ + ; \ + apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ + \ +# update pecl channel definitions https://github.com/docker-library/php/issues/443 + pecl update-channels; \ + rm -rf /tmp/pear ~/.pearrc; \ +# smoke test + php --version + +COPY images/runtime/php-fpm/8.4/docker-php-ext-* images/runtime/php-fpm/8.4/docker-php-entrypoint /usr/local/bin/ +RUN chmod +x /usr/local/bin/docker-php-ext-* +RUN chmod +x /usr/local/bin/docker-php-entrypoint + +# sodium was built as a shared module (so that it can be replaced later if so desired), so let's enable it too (https://github.com/docker-library/php/issues/598) +RUN docker-php-ext-enable sodium + +ENTRYPOINT ["docker-php-entrypoint"] +#### +WORKDIR /var/www/html + +RUN set -eux; \ + cd /usr/local/etc; \ + if [ -d php-fpm.d ]; then \ + # for some reason, upstream's php-fpm.conf.default has "include=NONE/etc/php-fpm.d/*.conf" + sed 's!=NONE/!=!g' php-fpm.conf.default | tee php-fpm.conf > /dev/null; \ + cp php-fpm.d/www.conf.default php-fpm.d/www.conf; \ + else \ + # PHP 5.x doesn't use "include=" by default, so we'll create our own simple config that mimics PHP 7+ for consistency + mkdir php-fpm.d; \ + cp php-fpm.conf.default php-fpm.d/www.conf; \ + { \ + echo '[global]'; \ + echo 'include=etc/php-fpm.d/*.conf'; \ + } | tee php-fpm.conf; \ + fi; \ + { \ + echo '[global]'; \ + echo 'error_log = /proc/self/fd/2'; \ + echo; echo '; https://github.com/docker-library/php/pull/725#issuecomment-443540114'; echo 'log_limit = 8192'; \ + echo; \ + echo '[www]'; \ + echo '; if we send this to /proc/self/fd/1, it never appears'; \ + echo 'access.log = /proc/self/fd/2'; \ + echo; \ + echo 'clear_env = no'; \ + echo; \ + echo '; Ensure worker stdout and stderr are sent to the main error log.'; \ + echo 'catch_workers_output = yes'; \ + echo 'decorate_workers_output = no'; \ + } | tee php-fpm.d/docker.conf; \ + { \ + echo '[global]'; \ + echo 'daemonize = no'; \ + echo; \ + echo '[www]'; \ + echo 'listen = 9000'; \ + } | tee php-fpm.d/zz-docker.conf + +RUN rm -rf /var/lib/apt/lists/* + +# Override stop signal to stop process gracefully +# https://github.com/php/php-src/blob/17baa87faddc2550def3ae7314236826bc1b1398/sapi/fpm/php-fpm.8.in#L163 +STOPSIGNAL SIGQUIT + +EXPOSE 9000 +CMD ["php-fpm"] +#### + +## base dockerfile +SHELL ["/bin/bash", "-c"] + +# An environment variable for oryx run-script to know the origin of php image so that +# start-up command can be determined while creating run script +ENV PHP_ORIGIN php-fpm +ENV NGINX_RUN_USER www-data +# Edit the default DocumentRoot setting +ENV NGINX_DOCUMENT_ROOT /home/site/wwwroot +# Install NGINX latest stable version using APT Method with Nginx Repository instead of distribution-provided one: +# - https://www.linuxcapable.com/how-to-install-latest-nginx-mainline-or-stable-on-debian-11/ +RUN apt-get update +RUN apt install curl nano -y +RUN curl -sSL https://packages.sury.org/nginx/README.txt | bash -x +RUN apt-get update +RUN yes '' | apt-get install nginx-core nginx-common nginx nginx-full -y +RUN ls -l /etc/nginx +COPY images/runtime/php-fpm/nginx_conf/default.conf /etc/nginx/sites-available/default +COPY images/runtime/php-fpm/nginx_conf/default.conf /etc/nginx/sites-enabled/default +RUN sed -ri -e 's!worker_connections 768!worker_connections 10068!g' /etc/nginx/nginx.conf +RUN sed -ri -e 's!# multi_accept on!multi_accept on!g' /etc/nginx/nginx.conf +RUN ls -l /etc/nginx +RUN nginx -t +# Edit the default port setting +ENV NGINX_PORT 8080 + +# Install common PHP extensions +# TEMPORARY: Holding odbc related packages from upgrading. +RUN apt-mark hold msodbcsql18 odbcinst1debian2 odbcinst unixodbc unixodbc-dev \ + && apt-get update \ + && apt-get upgrade -y \ + && ln -s /usr/lib/x86_64-linux-gnu/libldap.so /usr/lib/libldap.so \ + && ln -s /usr/lib/x86_64-linux-gnu/liblber.so /usr/lib/liblber.so \ + && ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h + +RUN set -eux; \ + apt-get update \ + && apt-get upgrade -y \ + && apt-get install -y --no-install-recommends apache2-dev \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + # From php 8.4 version imap is removed from php core and moved to pecl + # && PHP_OPENSSL=yes \docker-php-ext-configure imap --with-kerberos --with-imap-ssl ; \ + && pecl install imap + +RUN docker-php-ext-configure pdo_odbc --with-pdo-odbc=unixODBC,/usr \ + && docker-php-ext-install gd \ + mysqli \ + opcache \ + pdo \ + pdo_mysql \ + pdo_pgsql \ + pgsql \ + ldap \ + intl \ + gmp \ + zip \ + bcmath \ + mbstring \ + pcntl \ + calendar \ + exif \ + gettext \ + tidy \ + shmop \ + soap \ + sockets \ + sysvmsg \ + sysvsem \ + sysvshm \ + pdo_odbc \ +# deprecated from 7.4, so should be avoided in general template for all php versions +# xmlrpc \ + xsl +RUN pecl install redis && docker-php-ext-enable redis + +# https://github.com/Imagick/imagick/issues/331 +# https://github.com/ihneo/php/pull/24/files +# https://github.com/Imagick/imagick/pull/641 -- uncomment this imagick install when the issue with imagick gets fixed +# RUN set -eux; \ +# pecl install imagick && docker-php-ext-enable imagick + +# deprecated from 5.*, so should be avoided +RUN set -eux; \ + pecl install mongodb && docker-php-ext-enable mongodb + +# Latest pecl/sqlsrv, pecl/pdo_sqlsrv requires PHP (version >= 8.1.0) +RUN set -eux; \ + pecl install sqlsrv pdo_sqlsrv \ + && echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/30-pdo_sqlsrv.ini \ + && echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/20-sqlsrv.ini + + +RUN { \ + echo 'opcache.memory_consumption=128'; \ + echo 'opcache.interned_strings_buffer=8'; \ + echo 'opcache.max_accelerated_files=4000'; \ + echo 'opcache.revalidate_freq=60'; \ + echo 'opcache.fast_shutdown=1'; \ + echo 'opcache.enable_cli=1'; \ + } > /usr/local/etc/php/conf.d/opcache-recommended.ini + +# NOTE: zend_extension=opcache is already configured via docker-php-ext-install, above +RUN { \ + echo 'error_log=/var/log/apache2/php-error.log'; \ + echo 'display_errors=Off'; \ + echo 'log_errors=On'; \ + echo 'display_startup_errors=Off'; \ + echo 'date.timezone=UTC'; \ + } > /usr/local/etc/php/conf.d/php.ini + +RUN set -x \ + && docker-php-source extract \ + && cd /usr/src/php/ext/odbc \ + && phpize \ + && sed -ri 's@^ *test +"\$PHP_.*" *= *"no" *&& *PHP_.*=yes *$@#&@g' configure \ + && chmod +x ./configure \ + && ./configure --with-unixODBC=shared,/usr \ + && docker-php-ext-install odbc \ + && rm -rf /var/lib/apt/lists/* + +ENV LANG="C.UTF-8" \ + LANGUAGE="C.UTF-8" \ + LC_ALL="C.UTF-8" + +## dockerfile + +# Bake Application Insights key from pipeline variable into final image +ARG AI_CONNECTION_STRING +ENV ORYX_AI_CONNECTION_STRING=${AI_CONNECTION_STRING} + +# Oryx++ Builder variables +ENV CNB_STACK_ID="oryx.stacks.skeleton" +LABEL io.buildpacks.stack.id="oryx.stacks.skeleton" + +COPY --from=startupCmdGen /opt/startupcmdgen/startupcmdgen /opt/startupcmdgen/startupcmdgen +RUN ln -s /opt/startupcmdgen/startupcmdgen /usr/local/bin/oryx + +ENV LANG="C.UTF-8" \ + LANGUAGE="C.UTF-8" \ + LC_ALL="C.UTF-8" \ No newline at end of file diff --git a/images/runtime/php-fpm/8.4/docker-php-entrypoint b/images/runtime/php-fpm/8.4/docker-php-entrypoint new file mode 100644 index 0000000000..86343d8038 --- /dev/null +++ b/images/runtime/php-fpm/8.4/docker-php-entrypoint @@ -0,0 +1,9 @@ +#!/bin/sh +set -e + +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then + set -- php-fpm "$@" +fi + +exec "$@" diff --git a/images/runtime/php-fpm/8.4/docker-php-ext-configure b/images/runtime/php-fpm/8.4/docker-php-ext-configure new file mode 100644 index 0000000000..34fc1337d5 --- /dev/null +++ b/images/runtime/php-fpm/8.4/docker-php-ext-configure @@ -0,0 +1,69 @@ +#!/bin/sh +set -e + +# prefer user supplied CFLAGS, but default to our PHP_CFLAGS +: ${CFLAGS:=$PHP_CFLAGS} +: ${CPPFLAGS:=$PHP_CPPFLAGS} +: ${LDFLAGS:=$PHP_LDFLAGS} +export CFLAGS CPPFLAGS LDFLAGS + +srcExists= +if [ -d /usr/src/php ]; then + srcExists=1 +fi +docker-php-source extract +if [ -z "$srcExists" ]; then + touch /usr/src/php/.docker-delete-me +fi + +cd /usr/src/php/ext + +usage() { + echo "usage: $0 ext-name [configure flags]" + echo " ie: $0 gd --with-jpeg-dir=/usr/local/something" + echo + echo 'Possible values for ext-name:' + find . \ + -mindepth 2 \ + -maxdepth 2 \ + -type f \ + -name 'config.m4' \ + | xargs -n1 dirname \ + | xargs -n1 basename \ + | sort \ + | xargs + echo + echo 'Some of the above modules are already compiled into PHP; please check' + echo 'the output of "php -i" to see which modules are already loaded.' +} + +ext="$1" +if [ -z "$ext" ] || [ ! -d "$ext" ]; then + usage >&2 + exit 1 +fi +shift + +pm='unknown' +if [ -e /lib/apk/db/installed ]; then + pm='apk' +fi + +if [ "$pm" = 'apk' ]; then + if \ + [ -n "$PHPIZE_DEPS" ] \ + && ! apk info --installed .phpize-deps > /dev/null \ + && ! apk info --installed .phpize-deps-configure > /dev/null \ + ; then + apk add --no-cache --virtual .phpize-deps-configure $PHPIZE_DEPS + fi +fi + +if command -v dpkg-architecture > /dev/null; then + gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" + set -- --build="$gnuArch" "$@" +fi + +cd "$ext" +phpize +./configure --enable-option-checking=fatal "$@" diff --git a/images/runtime/php-fpm/8.4/docker-php-ext-enable b/images/runtime/php-fpm/8.4/docker-php-ext-enable new file mode 100644 index 0000000000..3d079d2160 --- /dev/null +++ b/images/runtime/php-fpm/8.4/docker-php-ext-enable @@ -0,0 +1,114 @@ +#!/bin/sh +set -e + +extDir="$(php -d 'display_errors=stderr' -r 'echo ini_get("extension_dir");')" +cd "$extDir" + +usage() { + echo "usage: $0 [options] module-name [module-name ...]" + echo " ie: $0 gd mysqli" + echo " $0 pdo pdo_mysql" + echo " $0 --ini-name 0-apc.ini apcu apc" + echo + echo 'Possible values for module-name:' + find -maxdepth 1 \ + -type f \ + -name '*.so' \ + -exec basename '{}' ';' \ + | sort \ + | xargs + echo + echo 'Some of the above modules are already compiled into PHP; please check' + echo 'the output of "php -i" to see which modules are already loaded.' +} + +opts="$(getopt -o 'h?' --long 'help,ini-name:' -- "$@" || { usage >&2 && false; })" +eval set -- "$opts" + +iniName= +while true; do + flag="$1" + shift + case "$flag" in + --help|-h|'-?') usage && exit 0 ;; + --ini-name) iniName="$1" && shift ;; + --) break ;; + *) + { + echo "error: unknown flag: $flag" + usage + } >&2 + exit 1 + ;; + esac +done + +modules= +for module; do + if [ -z "$module" ]; then + continue + fi + if [ -f "$module.so" ] && ! [ -f "$module" ]; then + # allow ".so" to be optional + module="$module.so" + fi + if ! [ -f "$module" ]; then + echo >&2 "error: '$module' does not exist" + echo >&2 + usage >&2 + exit 1 + fi + modules="$modules $module" +done + +if [ -z "$modules" ]; then + usage >&2 + exit 1 +fi + +pm='unknown' +if [ -e /lib/apk/db/installed ]; then + pm='apk' +fi + +apkDel= +if [ "$pm" = 'apk' ]; then + if \ + [ -n "$PHPIZE_DEPS" ] \ + && ! apk info --installed .phpize-deps > /dev/null \ + && ! apk info --installed .phpize-deps-configure > /dev/null \ + ; then + apk add --no-cache --virtual '.docker-php-ext-enable-deps' binutils + apkDel='.docker-php-ext-enable-deps' + fi +fi + +for module in $modules; do + if readelf --wide --syms "$module" | grep -q ' zend_extension_entry$'; then + # https://wiki.php.net/internals/extensions#loading_zend_extensions + absModule="$(readlink -f "$module")" + line="zend_extension=$absModule" + else + line="extension=$module" + fi + + ext="$(basename "$module")" + ext="${ext%.*}" + if php -d 'display_errors=stderr' -r 'exit(extension_loaded("'"$ext"'") ? 0 : 1);'; then + # this isn't perfect, but it's better than nothing + # (for example, 'opcache.so' presents inside PHP as 'Zend OPcache', not 'opcache') + echo >&2 + echo >&2 "warning: $ext ($module) is already loaded!" + echo >&2 + continue + fi + + ini="$PHP_INI_DIR/conf.d/${iniName:-"docker-php-ext-$ext.ini"}" + if ! grep -q "$line" "$ini" 2>/dev/null; then + echo "$line" >> "$ini" + fi +done + +if [ "$pm" = 'apk' ] && [ -n "$apkDel" ]; then + apk del --no-network $apkDel +fi diff --git a/images/runtime/php-fpm/8.4/docker-php-ext-install b/images/runtime/php-fpm/8.4/docker-php-ext-install new file mode 100644 index 0000000000..1afa66273b --- /dev/null +++ b/images/runtime/php-fpm/8.4/docker-php-ext-install @@ -0,0 +1,122 @@ +#!/bin/sh +set -e + +# prefer user supplied CFLAGS, but default to our PHP_CFLAGS +: ${CFLAGS:=$PHP_CFLAGS} +: ${CPPFLAGS:=$PHP_CPPFLAGS} +: ${LDFLAGS:=$PHP_LDFLAGS} +export CFLAGS CPPFLAGS LDFLAGS + +srcExists= +if [ -d /usr/src/php ]; then + srcExists=1 +fi +docker-php-source extract +if [ -z "$srcExists" ]; then + touch /usr/src/php/.docker-delete-me +fi + +cd /usr/src/php/ext + +usage() { + echo "usage: $0 [-jN] ext-name [ext-name ...]" + echo " ie: $0 gd mysqli" + echo " $0 pdo pdo_mysql" + echo " $0 -j5 gd mbstring mysqli pdo pdo_mysql shmop" + echo + echo 'if custom ./configure arguments are necessary, see docker-php-ext-configure' + echo + echo 'Possible values for ext-name:' + find . \ + -mindepth 2 \ + -maxdepth 2 \ + -type f \ + -name 'config.m4' \ + | xargs -n1 dirname \ + | xargs -n1 basename \ + | sort \ + | xargs + echo + echo 'Some of the above modules are already compiled into PHP; please check' + echo 'the output of "php -i" to see which modules are already loaded.' +} + +opts="$(getopt -o 'h?j:' --long 'help,jobs:' -- "$@" || { usage >&2 && false; })" +eval set -- "$opts" + +j=1 +while true; do + flag="$1" + shift + case "$flag" in + --help|-h|'-?') usage && exit 0 ;; + --jobs|-j) j="$1" && shift ;; + --) break ;; + *) + { + echo "error: unknown flag: $flag" + usage + } >&2 + exit 1 + ;; + esac +done + +exts= +for ext; do + if [ -z "$ext" ]; then + continue + fi + if [ ! -d "$ext" ]; then + echo >&2 "error: $PWD/$ext does not exist" + echo >&2 + usage >&2 + exit 1 + fi + exts="$exts $ext" +done + +if [ -z "$exts" ]; then + usage >&2 + exit 1 +fi + +pm='unknown' +if [ -e /lib/apk/db/installed ]; then + pm='apk' +fi + +apkDel= +if [ "$pm" = 'apk' ]; then + if [ -n "$PHPIZE_DEPS" ]; then + if apk info --installed .phpize-deps-configure > /dev/null; then + apkDel='.phpize-deps-configure' + elif ! apk info --installed .phpize-deps > /dev/null; then + apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS + apkDel='.phpize-deps' + fi + fi +fi + +popDir="$PWD" +for ext in $exts; do + cd "$ext" + [ -e Makefile ] || docker-php-ext-configure "$ext" + make -j"$j" + make -j"$j" install + find modules \ + -maxdepth 1 \ + -name '*.so' \ + -exec basename '{}' ';' \ + | xargs -r docker-php-ext-enable + make -j"$j" clean + cd "$popDir" +done + +if [ "$pm" = 'apk' ] && [ -n "$apkDel" ]; then + apk del --no-network $apkDel +fi + +if [ -e /usr/src/php/.docker-delete-me ]; then + docker-php-source delete +fi diff --git a/images/runtime/php-fpm/8.4/docker-php-source b/images/runtime/php-fpm/8.4/docker-php-source new file mode 100644 index 0000000000..720d4ad153 --- /dev/null +++ b/images/runtime/php-fpm/8.4/docker-php-source @@ -0,0 +1,34 @@ +#!/bin/sh +set -e + +dir=/usr/src/php + +usage() { + echo "usage: $0 COMMAND" + echo + echo "Manage php source tarball lifecycle." + echo + echo "Commands:" + echo " extract extract php source tarball into directory $dir if not already done." + echo " delete delete extracted php source located into $dir if not already done." + echo +} + +case "$1" in + extract) + mkdir -p "$dir" + if [ ! -f "$dir/.docker-extracted" ]; then + tar -Jxf /usr/src/php.tar.xz -C "$dir" --strip-components=1 + touch "$dir/.docker-extracted" + fi + ;; + + delete) + rm -rf "$dir" + ;; + + *) + usage + exit 1 + ;; +esac \ No newline at end of file diff --git a/platforms/dotnet/versions/bookworm/versionsToBuild.txt b/platforms/dotnet/versions/bookworm/versionsToBuild.txt index 68762d8758..ef59c16c95 100644 --- a/platforms/dotnet/versions/bookworm/versionsToBuild.txt +++ b/platforms/dotnet/versions/bookworm/versionsToBuild.txt @@ -27,7 +27,9 @@ 8.0.303, 814ff07ccdfc8160c4a24adfda6c815e7feace88c59722f827a5a27041719067538754911fc15cb46978e16566fe0938695891723d182055190e876131faedda, 8.0.401, 4d2180e82c963318863476cf61c035bd3d82165e7b70751ba231225b5575df24d30c0789d5748c3a379e1e6896b57e59286218cacd440ffb0075c9355094fd8c, 8.0.403, 7aa03678228b174f51c4535f18348cdf7a5d35e243b1f8cb28a4a30e402e47567d06df63c8f6da4bdc3c7e898f54f4acc08d9952bfa49d3f220d0353253ac3e9, +8.0.405, 2499faa1520e8fd9a287a6798755de1a3ffef31c0dc3416213c8a9bec64861419bfc818f1c1c410b86bb72848ce56d4b6c74839afd8175a922345fc649063ec6, 9.0.100-preview.6.24328.19, ff040c456b096aeac707053517d5f9f5f0df92b6754a4af6b6fe635fd8f4a569589b8241cbad0c5db998dc5bc54682b2f1e4dc4f3d88024a3ef56c1ecc9f4c97, 9.0.100-rc.1.24452.12, e8130817b779d0104a6eee33d98d97c3fad1c336013435f47c0e9e22370172b75da37ade76e49dec7cbe696884390d2e6941cc69e2bad5593d6d1c6b41083051, 9.0.100-rc.2.24474.11, 126a92bfa9ef4e70609f8b27cde0fae1b144a91af8a46de949d803d2aa1bad0285b1b9b8fc60d40206d346aac49e48709bec4e76cdf6e549f8905086003e8098, -9.0.100, 7f69bda047de1f952286be330a5e858171ded952d1aa24169e62212f90a27149e63b636c88ad313a6e3ec860da31f8c547ff4ab6808103a070f7fb26ba99c1c7, \ No newline at end of file +9.0.100, 7f69bda047de1f952286be330a5e858171ded952d1aa24169e62212f90a27149e63b636c88ad313a6e3ec860da31f8c547ff4ab6808103a070f7fb26ba99c1c7, +9.0.102, f093507ef635c3f8e572bf7b6ea7e144b85ccf6b7c6f914d3f182f782200a6088728663df5c9abe0638c9bd273fde3769ec824a6516f5fce734c4a4664ce3099, \ No newline at end of file diff --git a/platforms/dotnet/versions/bullseye/versionsToBuild.txt b/platforms/dotnet/versions/bullseye/versionsToBuild.txt index 9fe139cc6f..3d5808d788 100644 --- a/platforms/dotnet/versions/bullseye/versionsToBuild.txt +++ b/platforms/dotnet/versions/bullseye/versionsToBuild.txt @@ -84,6 +84,8 @@ 8.0.303, 814ff07ccdfc8160c4a24adfda6c815e7feace88c59722f827a5a27041719067538754911fc15cb46978e16566fe0938695891723d182055190e876131faedda, 8.0.401, 4d2180e82c963318863476cf61c035bd3d82165e7b70751ba231225b5575df24d30c0789d5748c3a379e1e6896b57e59286218cacd440ffb0075c9355094fd8c, 8.0.403, 7aa03678228b174f51c4535f18348cdf7a5d35e243b1f8cb28a4a30e402e47567d06df63c8f6da4bdc3c7e898f54f4acc08d9952bfa49d3f220d0353253ac3e9, +8.0.405, 2499faa1520e8fd9a287a6798755de1a3ffef31c0dc3416213c8a9bec64861419bfc818f1c1c410b86bb72848ce56d4b6c74839afd8175a922345fc649063ec6, 9.0.100-preview.6.24328.19, ff040c456b096aeac707053517d5f9f5f0df92b6754a4af6b6fe635fd8f4a569589b8241cbad0c5db998dc5bc54682b2f1e4dc4f3d88024a3ef56c1ecc9f4c97, 9.0.100-rc.2.24474.11, 126a92bfa9ef4e70609f8b27cde0fae1b144a91af8a46de949d803d2aa1bad0285b1b9b8fc60d40206d346aac49e48709bec4e76cdf6e549f8905086003e8098, -9.0.100, 7f69bda047de1f952286be330a5e858171ded952d1aa24169e62212f90a27149e63b636c88ad313a6e3ec860da31f8c547ff4ab6808103a070f7fb26ba99c1c7, \ No newline at end of file +9.0.100, 7f69bda047de1f952286be330a5e858171ded952d1aa24169e62212f90a27149e63b636c88ad313a6e3ec860da31f8c547ff4ab6808103a070f7fb26ba99c1c7, +9.0.102, f093507ef635c3f8e572bf7b6ea7e144b85ccf6b7c6f914d3f182f782200a6088728663df5c9abe0638c9bd273fde3769ec824a6516f5fce734c4a4664ce3099, \ No newline at end of file diff --git a/platforms/nodejs/versions/bookworm/versionsToBuild.txt b/platforms/nodejs/versions/bookworm/versionsToBuild.txt index 5046cc21ad..563329bd95 100644 --- a/platforms/nodejs/versions/bookworm/versionsToBuild.txt +++ b/platforms/nodejs/versions/bookworm/versionsToBuild.txt @@ -5,4 +5,6 @@ 20.15.1 20.17.0 20.18.0 +20.18.1 22.9.0 +22.13.0 diff --git a/platforms/nodejs/versions/bullseye/versionsToBuild.txt b/platforms/nodejs/versions/bullseye/versionsToBuild.txt index 91d966e597..c02b65581e 100644 --- a/platforms/nodejs/versions/bullseye/versionsToBuild.txt +++ b/platforms/nodejs/versions/bullseye/versionsToBuild.txt @@ -44,6 +44,7 @@ 18.19.1 18.20.3 18.20.4 +18.20.5 20.9.0 20.11.0 20.11.1 @@ -51,4 +52,6 @@ 20.15.1 20.17.0 20.18.0 +20.18.1 22.9.0 +22.13.0 diff --git a/platforms/php/Dockerfile b/platforms/php/Dockerfile index 788597044b..989bf6a435 100644 --- a/platforms/php/Dockerfile +++ b/platforms/php/Dockerfile @@ -6,39 +6,14 @@ COPY platforms/php/prereqs /php COPY platforms/php/prereqs/build.sh /tmp/ COPY images/receiveGpgKeys.sh /tmp/receiveGpgKeys.sh -ARG PHP81_VERSION='8.1.29' -ARG PHP81_KEYS='528995BFEDFBA7191D46839EF9BA0ADA31CBD89E 39B641343D8C104B2B146DC3F9C39DC0B9698544' -ARG PHP81_TAR_SHA256='288884af60581d4284baba2ace9ca6d646f72facbd3e3c2dd2acc7fe6f903536' - -RUN if [ "${DEBIAN_FLAVOR}" = "stretch" ]; then \ - sed -i 's/^deb http:\/\/deb.debian.org\/debian stretch-updates/# deb http:\/\/deb.debian.org\/debian stretch-updates/g' /etc/apt/sources.list \ - && sed -i 's/^deb http:\/\/security.debian.org\/debian-security stretch/deb http:\/\/archive.debian.org\/debian-security stretch/g' /etc/apt/sources.list \ - && sed -i 's/^deb http:\/\/deb.debian.org\/debian stretch/deb http:\/\/archive.debian.org\/debian stretch/g' /etc/apt/sources.list ; \ - fi - RUN chmod +x /tmp/*.sh && chmod +x /php/*.sh -RUN if [ "${DEBIAN_FLAVOR}" = "buster" ]; then \ - apt-get update \ - && apt-get upgrade -y \ - && apt-get install -y \ - $PHPIZE_DEPS \ - ca-certificates \ - curl \ - xz-utils \ - libsodium-dev \ - libncurses5 \ - --no-install-recommends && rm -r /var/lib/apt/lists/* ; \ - else \ - export DEBIAN_FLAVOR=${DEBIAN_FLAVOR} ; \ - . /php/installPrereqs.sh ; \ - fi COPY platforms /tmp/platforms COPY build /tmp/build RUN chmod +x /tmp/platforms/**/*.sh RUN chmod +x /tmp/build/**/*.sh RUN mkdir /tmp/sdk -RUN PHP81_VERSION=${PHP81_VERSION} PHP81_KEYS=${PHP81_KEYS} PHP81_TAR_SHA256=${PHP81_TAR_SHA256} /tmp/platforms/php/buildPhp.sh ${DEBIAN_FLAVOR} "" "php" +RUN /tmp/platforms/php/buildPhp.sh ${DEBIAN_FLAVOR} "" "php" # ARG PHP_VERSION # ARG GPG_KEYS diff --git a/platforms/php/buildPhp.sh b/platforms/php/buildPhp.sh index dee7020adb..1baf9985de 100755 --- a/platforms/php/buildPhp.sh +++ b/platforms/php/buildPhp.sh @@ -27,20 +27,10 @@ buildPhp() { local sdkVersionMetadataName="" mkdir -p "$targetDir" - - if [ "$debianFlavor" == "stretch" ]; then - # Use default php sdk file name - phpSdkFileName=php-$version.tar.gz - metadataFile="$targetDir/php-$version-metadata.txt" - # Continue adding the version metadata with the name of Version - # which is what our legacy CLI will use - sdkVersionMetadataName="$LEGACY_SDK_VERSION_METADATA_NAME" - cp "$phpPlatformDir/versions/$debianFlavor/defaultVersion.txt" "$targetDir/defaultVersion.txt" - else - phpSdkFileName=php-$debianFlavor-$version.tar.gz - metadataFile="$targetDir/php-$debianFlavor-$version-metadata.txt" - sdkVersionMetadataName="$SDK_VERSION_METADATA_NAME" - fi + + phpSdkFileName=php-$debianFlavor-$version.tar.gz + metadataFile="$targetDir/php-$debianFlavor-$version-metadata.txt" + sdkVersionMetadataName="$SDK_VERSION_METADATA_NAME" cp "$phpPlatformDir/versions/$debianFlavor/defaultVersion.txt" "$targetDir/defaultVersion.$debianFlavor.txt" @@ -78,26 +68,16 @@ buildPhpComposer() { cp "$phpPlatformDir/composer/versions/$debianFlavor/defaultVersion.txt" "$targetDir/defaultVersion.$debianFlavor.txt" - if [ "$debianFlavor" == "stretch" ]; then - # Use default php sdk file name - composerSdkFileName=php-composer-$version.tar.gz - metadataFile="$targetDir/php-composer-$version-metadata.txt" - # Continue adding the version metadata with the name of Version - # which is what our legacy CLI will use - sdkVersionMetadataName="$LEGACY_SDK_VERSION_METADATA_NAME" - cp "$phpPlatformDir/composer/versions/$debianFlavor/defaultVersion.txt" "$targetDir/defaultVersion.txt" - else - composerSdkFileName=php-composer-$debianFlavor-$version.tar.gz - metadataFile="$targetDir/php-composer-$debianFlavor-$version-metadata.txt" - sdkVersionMetadataName="$SDK_VERSION_METADATA_NAME" - fi + composerSdkFileName=php-composer-$debianFlavor-$version.tar.gz + metadataFile="$targetDir/php-composer-$debianFlavor-$version-metadata.txt" + sdkVersionMetadataName="$SDK_VERSION_METADATA_NAME" if shouldBuildSdk php-composer $composerSdkFileName $sdkStorageAccountUrl || shouldOverwriteSdk || shouldOverwritePlatformSdk php-composer; then echo "Php composer version '$version' not present in blob storage. Building it in a docker image..." echo - PHP_VERSION=$PHP81_VERSION GPG_KEYS=$PHP81_KEYS PHP_SHA256=$PHP81_TAR_SHA256 /php/build.sh + PHP_VERSION=$PHP_VERSION GPG_KEYS=$GPG_KEYS PHP_SHA256=$PHP_SHA256 /php/build.sh # Installing PHP composer requires having PHP installed in an first image first, so we try installing # a version here. @@ -122,10 +102,6 @@ buildPhpComposer() { cd "$composerDir" echo 'debian flavor is: $debianFlavor' composerSdkFile="php-composer-$debianFlavor-$version.tar.gz" - if [ "$debianFlavor" = "stretch" ]; then - echo 'somehow debian flavor is: $debianFlavor' - composerSdkFile="php-composer-$version.tar.gz" - fi; tar -zcf "$compressedSdkDir/$composerSdkFile" . rm -r ./* diff --git a/platforms/php/composer/Dockerfile b/platforms/php/composer/Dockerfile index 7d0b89f17a..c95b7b9bf6 100644 --- a/platforms/php/composer/Dockerfile +++ b/platforms/php/composer/Dockerfile @@ -11,35 +11,16 @@ ARG PHP81_VERSION='8.1.29' ARG PHP81_KEYS='528995BFEDFBA7191D46839EF9BA0ADA31CBD89E 39B641343D8C104B2B146DC3F9C39DC0B9698544' ARG PHP81_TAR_SHA256='288884af60581d4284baba2ace9ca6d646f72facbd3e3c2dd2acc7fe6f903536' -RUN if [ "${DEBIAN_FLAVOR}" = "stretch" ]; then \ - sed -i 's/^deb http:\/\/deb.debian.org\/debian stretch-updates/# deb http:\/\/deb.debian.org\/debian stretch-updates/g' /etc/apt/sources.list \ - && sed -i 's/^deb http:\/\/security.debian.org\/debian-security stretch/deb http:\/\/archive.debian.org\/debian-security stretch/g' /etc/apt/sources.list \ - && sed -i 's/^deb http:\/\/deb.debian.org\/debian stretch/deb http:\/\/archive.debian.org\/debian stretch/g' /etc/apt/sources.list ; \ - fi - RUN chmod +x /tmp/*.sh && chmod +x /php/*.sh -RUN if [ "${DEBIAN_FLAVOR}" = "buster" ]; then \ - apt-get update \ - && apt-get upgrade -y \ - && apt-get install -y \ - $PHPIZE_DEPS \ - ca-certificates \ - curl \ - xz-utils \ - libsodium-dev \ - libncurses5 \ - --no-install-recommends && rm -r /var/lib/apt/lists/* ; \ - else \ - export DEBIAN_FLAVOR=${DEBIAN_FLAVOR} ; \ - . /php/installPrereqs.sh ; \ - fi +RUN export DEBIAN_FLAVOR=${DEBIAN_FLAVOR} ; \ + . /php/installPrereqs.sh ; COPY platforms /tmp/platforms COPY build /tmp/build RUN chmod +x /tmp/platforms/**/*.sh RUN chmod +x /tmp/build/**/*.sh RUN mkdir /tmp/sdk -RUN PHP81_VERSION=${PHP81_VERSION} PHP81_KEYS=${PHP81_KEYS} PHP81_TAR_SHA256=${PHP81_TAR_SHA256} /tmp/platforms/php/buildPhp.sh ${DEBIAN_FLAVOR} "" "php-composer" +RUN PHP_VERSION=${PHP81_VERSION} GPG_KEYS=${PHP81_KEYS} PHP_SHA256=${PHP81_TAR_SHA256} /tmp/platforms/php/buildPhp.sh ${DEBIAN_FLAVOR} "" "php-composer" # ARG PHP_VERSION # ARG GPG_KEYS diff --git a/platforms/php/composer/versions/bookworm/versionsToBuild.txt b/platforms/php/composer/versions/bookworm/versionsToBuild.txt index 3b9657e63e..d5fda4b764 100644 --- a/platforms/php/composer/versions/bookworm/versionsToBuild.txt +++ b/platforms/php/composer/versions/bookworm/versionsToBuild.txt @@ -1,2 +1,5 @@ # version -2.6.2 \ No newline at end of file +2.6.2 +2.7.7 +2.8.2 +2.8.4 \ No newline at end of file diff --git a/platforms/php/composer/versions/bullseye/versionsToBuild.txt b/platforms/php/composer/versions/bullseye/versionsToBuild.txt index fdcbb6aac0..6740ff43f0 100644 --- a/platforms/php/composer/versions/bullseye/versionsToBuild.txt +++ b/platforms/php/composer/versions/bullseye/versionsToBuild.txt @@ -35,4 +35,7 @@ 2.3.10 2.4.4 2.5.8 -2.6.2 \ No newline at end of file +2.6.2 +2.7.7 +2.8.2 +2.8.4 \ No newline at end of file diff --git a/platforms/php/prereqs/build.sh b/platforms/php/prereqs/build.sh index 2ca278d1f8..71eb39f6e4 100755 --- a/platforms/php/prereqs/build.sh +++ b/platforms/php/prereqs/build.sh @@ -91,7 +91,7 @@ fi if [ $PHP_MAJOR == '8' ]; then apt-get update - apt-get install -y --no-install-recommends libargon2-dev libonig-dev + apt-get install -y --no-install-recommends libargon2-dev libonig-dev libsodium-dev fi savedAptMark="$(apt-mark showmanual)"; diff --git a/platforms/php/versions/bookworm/versionsToBuild.txt b/platforms/php/versions/bookworm/versionsToBuild.txt index 5df2a38314..7f83125737 100644 --- a/platforms/php/versions/bookworm/versionsToBuild.txt +++ b/platforms/php/versions/bookworm/versionsToBuild.txt @@ -1,12 +1,16 @@ # version, sha, gpg keys, dockerfile 8.1.22, 9ea4f4cfe775cb5866c057323d6b320f3a6e0adb1be41a068ff7bfec6f83e71d, 528995BFEDFBA7191D46839EF9BA0ADA31CBD89E 39B641343D8C104B2B146DC3F9C39DC0B9698544, 8.1.30, f24a6007f0b25a53cb7fbaee69c85017e0345b62089c2425a0afb7e177192ed1, 528995BFEDFBA7191D46839EF9BA0ADA31CBD89E 39B641343D8C104B2B146DC3F9C39DC0B9698544, +8.1.31, c4f244d46ba51c72f7d13d4f66ce6a9e9a8d6b669c51be35e01765ba58e7afca, 528995BFEDFBA7191D46839EF9BA0ADA31CBD89E 39B641343D8C104B2B146DC3F9C39DC0B9698544, 8.2.9, 1e6cb77f997613864ab3127fbfc6a8c7fdaa89a95e8ed6167617b913b4de4765, 1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544, 8.2.16, 28cdc995b7d5421711c7044294885fcde4390c9f67504a994b4cf9bc1b5cc593, 1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544, 8.2.21, 8cc44d51bb2506399ec176f70fe110f0c9e1f7d852a5303a2cd1403402199707, 1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544, 8.2.24, 80a5225746a9eb484475b312d4c626c63a88a037d8e56d214f30205e1ba1411a, 1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544, +8.2.27, 3eec91294d8c09b3df80b39ec36d574ed9b05de4c8afcb25fa215d48f9ecbc6b, 1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544, 8.3.4, 39a337036a546e5c28aea76cf424ac172db5156bd8a8fd85252e389409a5ba63, 1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA, 8.3.8, aea358b56186f943c2bbd350c9005b9359133d47e954cfc561385319ae5bb8d7, 1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA, 8.3.9, bf4d7b8ea60a356064f88485278bd6f941a230ec16f0fc401574ce1445ad6c77, 1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA, 8.3.11, b862b098a08ab9bf4b36ed12c7d0d9f65353656b36fb0e3c5344093aceb35802, 1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA, 8.3.12, f774e28633e26fc8c5197f4dae58ec9e3ff87d1b4311cbc61ab05a7ad24bd131, 1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA, +8.3.15, 3df5d45637283f759eef8fc3ce03de829ded3e200c3da278936a684955d2f94f, 1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA, +8.4.2, 92636453210f7f2174d6ee6df17a5811368f556a6c2c2cbcf019321e36456e01, AFD8691FDAEDF03BDF6E460563F15A9B715376CA 9D7F99A0CB8F05C8A6958D6256A97AF7600A39A6, \ No newline at end of file diff --git a/platforms/php/versions/bullseye/versionsToBuild.txt b/platforms/php/versions/bullseye/versionsToBuild.txt index 2ffe70f9f8..565520c6d8 100644 --- a/platforms/php/versions/bullseye/versionsToBuild.txt +++ b/platforms/php/versions/bullseye/versionsToBuild.txt @@ -31,6 +31,7 @@ 8.1.27, 479e65c3f05714d4aace1370e617d78e49e996ec7a7579a5be47535be61f0658, 528995BFEDFBA7191D46839EF9BA0ADA31CBD89E 39B641343D8C104B2B146DC3F9C39DC0B9698544, 8.1.29, 288884af60581d4284baba2ace9ca6d646f72facbd3e3c2dd2acc7fe6f903536, 528995BFEDFBA7191D46839EF9BA0ADA31CBD89E 39B641343D8C104B2B146DC3F9C39DC0B9698544, 8.1.30, f24a6007f0b25a53cb7fbaee69c85017e0345b62089c2425a0afb7e177192ed1, 528995BFEDFBA7191D46839EF9BA0ADA31CBD89E 39B641343D8C104B2B146DC3F9C39DC0B9698544, +8.1.31, c4f244d46ba51c72f7d13d4f66ce6a9e9a8d6b669c51be35e01765ba58e7afca, 528995BFEDFBA7191D46839EF9BA0ADA31CBD89E 39B641343D8C104B2B146DC3F9C39DC0B9698544, 8.2.0, 6ea4c2dfb532950fd712aa2a08c1412a6a81cd1334dd0b0bf88a8e44c2b3a943, 1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544, 8.2.1, 650d3bd7a056cabf07f6a0f6f1dd8ba45cd369574bbeaa36de7d1ece212c17af, 1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544, 8.2.2, bdc4aa38e652bac86039601840bae01c0c3653972eaa6f9f93d5f71953a7ee33, 1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544, @@ -47,8 +48,11 @@ 8.2.21, 8cc44d51bb2506399ec176f70fe110f0c9e1f7d852a5303a2cd1403402199707, 1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544, 8.2.23, 81c5ae6ba44e262a076349ee54a2e468638a4571085d80bff37f6fd308e1d8d5, 1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544, 8.2.24, 80a5225746a9eb484475b312d4c626c63a88a037d8e56d214f30205e1ba1411a, 1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544, +8.2.27, 3eec91294d8c09b3df80b39ec36d574ed9b05de4c8afcb25fa215d48f9ecbc6b, 1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544, 8.3.4, 39a337036a546e5c28aea76cf424ac172db5156bd8a8fd85252e389409a5ba63, 1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA, 8.3.8, aea358b56186f943c2bbd350c9005b9359133d47e954cfc561385319ae5bb8d7, 1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA, 8.3.9, bf4d7b8ea60a356064f88485278bd6f941a230ec16f0fc401574ce1445ad6c77, 1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA, 8.3.11, b862b098a08ab9bf4b36ed12c7d0d9f65353656b36fb0e3c5344093aceb35802, 1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA, 8.3.12, f774e28633e26fc8c5197f4dae58ec9e3ff87d1b4311cbc61ab05a7ad24bd131, 1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA, +8.3.15, 3df5d45637283f759eef8fc3ce03de829ded3e200c3da278936a684955d2f94f, 1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA, +8.4.2, 92636453210f7f2174d6ee6df17a5811368f556a6c2c2cbcf019321e36456e01, AFD8691FDAEDF03BDF6E460563F15A9B715376CA 9D7F99A0CB8F05C8A6958D6256A97AF7600A39A6, \ No newline at end of file diff --git a/platforms/python/versions/bookworm/versionsToBuild.txt b/platforms/python/versions/bookworm/versionsToBuild.txt index 21515ebfcc..fc0551ef77 100644 --- a/platforms/python/versions/bookworm/versionsToBuild.txt +++ b/platforms/python/versions/bookworm/versionsToBuild.txt @@ -6,6 +6,9 @@ 3.11.7, A035C8C19219BA821ECEA86B64E628F8D684696D, 3.11.8, A035C8C19219BA821ECEA86B64E628F8D684696D, 3.11.10, A035C8C19219BA821ECEA86B64E628F8D684696D, +3.11.11, A035C8C19219BA821ECEA86B64E628F8D684696D, 3.12.1, 7169605F62C751356D054A26A821E680E5FA6305, 3.12.2, 7169605F62C751356D054A26A821E680E5FA6305, 3.12.6, 7169605F62C751356D054A26A821E680E5FA6305, +3.12.8, 7169605F62C751356D054A26A821E680E5FA6305, +3.13.1, 7169605F62C751356D054A26A821E680E5FA6305, diff --git a/platforms/python/versions/bullseye/versionsToBuild.txt b/platforms/python/versions/bullseye/versionsToBuild.txt index d9829416fa..a2420922f0 100644 --- a/platforms/python/versions/bullseye/versionsToBuild.txt +++ b/platforms/python/versions/bullseye/versionsToBuild.txt @@ -17,6 +17,7 @@ 3.9.18, E3FF2839C048B25C084DEBE9B26995E310250568, 3.9.19, E3FF2839C048B25C084DEBE9B26995E310250568, 3.9.20, E3FF2839C048B25C084DEBE9B26995E310250568, +3.9.21, E3FF2839C048B25C084DEBE9B26995E310250568, 3.10.0a2, A035C8C19219BA821ECEA86B64E628F8D684696D, 3.10.0, A035C8C19219BA821ECEA86B64E628F8D684696D, 3.10.4, A035C8C19219BA821ECEA86B64E628F8D684696D, @@ -24,13 +25,17 @@ 3.10.13, A035C8C19219BA821ECEA86B64E628F8D684696D, 3.10.14, A035C8C19219BA821ECEA86B64E628F8D684696D, 3.10.15, A035C8C19219BA821ECEA86B64E628F8D684696D, +3.10.16, A035C8C19219BA821ECEA86B64E628F8D684696D, 3.11.0b1, A035C8C19219BA821ECEA86B64E628F8D684696D, 3.11.0, A035C8C19219BA821ECEA86B64E628F8D684696D, 3.11.6, A035C8C19219BA821ECEA86B64E628F8D684696D, 3.11.7, A035C8C19219BA821ECEA86B64E628F8D684696D, 3.11.8, A035C8C19219BA821ECEA86B64E628F8D684696D, 3.11.10, A035C8C19219BA821ECEA86B64E628F8D684696D, +3.11.11, A035C8C19219BA821ECEA86B64E628F8D684696D, 3.12.0, 7169605F62C751356D054A26A821E680E5FA6305, 3.12.1, 7169605F62C751356D054A26A821E680E5FA6305, 3.12.2, 7169605F62C751356D054A26A821E680E5FA6305, 3.12.6, 7169605F62C751356D054A26A821E680E5FA6305, +3.12.8, 7169605F62C751356D054A26A821E680E5FA6305, +3.13.1, 7169605F62C751356D054A26A821E680E5FA6305, diff --git a/platforms/python/versions/buster/versionsToBuild.txt b/platforms/python/versions/buster/versionsToBuild.txt index 4b677b50a0..4120a7748f 100644 --- a/platforms/python/versions/buster/versionsToBuild.txt +++ b/platforms/python/versions/buster/versionsToBuild.txt @@ -19,6 +19,7 @@ 3.9.18, E3FF2839C048B25C084DEBE9B26995E310250568, 3.9.19, E3FF2839C048B25C084DEBE9B26995E310250568, 3.9.20, E3FF2839C048B25C084DEBE9B26995E310250568, +3.9.21, E3FF2839C048B25C084DEBE9B26995E310250568, 3.10.0a2, A035C8C19219BA821ECEA86B64E628F8D684696D, 3.10.0, A035C8C19219BA821ECEA86B64E628F8D684696D, 3.10.4, A035C8C19219BA821ECEA86B64E628F8D684696D, diff --git a/src/BuildScriptGenerator/DotNetCore/DotNetCoreRunTimeVersions.cs b/src/BuildScriptGenerator/DotNetCore/DotNetCoreRunTimeVersions.cs index 0875c42f78..a2d31a9ceb 100644 --- a/src/BuildScriptGenerator/DotNetCore/DotNetCoreRunTimeVersions.cs +++ b/src/BuildScriptGenerator/DotNetCore/DotNetCoreRunTimeVersions.cs @@ -34,13 +34,13 @@ public static class DotNetCoreRunTimeVersions public const string NetCoreApp70Sha = "87855297338555a7b577d7e314e5dbf2c2350f8c867a489cd1e535634bad5c123a1871464d37fc9421837ff5d426c2eadecbe0f60bbf3fd32bc2461f47790a40"; public const string AspnetCoreApp70 = "7.0.20"; public const string AspnetCoreApp70Sha = "62ed9743972043a72e48d5aa2f7fdf3483cf684a32b051315004d1c778e9712bf66e5e7a97a5a53993fa8e92daf5bacaf2cdb3eae44bb9a9e25532b9a80f4f70"; - public const string NetCoreApp80 = "8.0.10"; - public const string NetCoreApp80Sha = "7fb813677720d125c2337fedc6131b230daf1c1d79d5912a1ca6b5e08bf7802b412de3248d645b6483ab23f3fae837ed02a0e520e33020cfef2c888c54f474ac"; - public const string AspnetCoreApp80 = "8.0.10"; - public const string AspnetCoreApp80Sha = "33221f19964ccb06cba74420dacbfe5bfd036f7847387093119f8f391d5716e1c5a8e05721f2335984409b43423d79b51ec571e51f0cdfae6d9d2a2b2d98505a"; - public const string NetCoreApp90 = "9.0.0"; - public const string NetCoreApp90Sha = "5176bd68637646cd36fce7a88f83effe1065fb075e6d4a46b8be3c33d5a8394740577f0ed4f8b4fb13fa69fe83b229eb55ab7f45caac90849bf0392a670ed5af"; - public const string AspnetCoreApp90 = "9.0.0"; - public const string AspnetCoreApp90Sha = "1a81023f119dd5e5b0f9d87b0e3c42df89824b9fcb73192a4670cc2c67358cd018a7c9c965245c7883de468bda88c81d64a21c60f9bc68a6559d76f32d34ce96"; + public const string NetCoreApp80 = "8.0.12"; + public const string NetCoreApp80Sha = "e0d216d54e9a21aaefc120a481050f1137cc708cbbd17204f0b1a47dbb6424078e8b44dc842957a6691025cda1490e5061092802484b5fd12c5903f5ba634481"; + public const string AspnetCoreApp80 = "8.0.12"; + public const string AspnetCoreApp80Sha = "03a7fd37dce46c31d7e74da7cd4d9aabd82d5e087859d0065f470ebf7d0b62ad1feb59fc3f74690337a928f5751e04bcb7838896e64b3f8d25ae035c5b7f5c83"; + public const string NetCoreApp90 = "9.0.1"; + public const string NetCoreApp90Sha = "d4a31944a5ab063037dca5141dbc8466d0c894b8d2560256782bdbe5a8e86585e8c4c789c40fbe51d56b3853e15adba0985bdc6ae91c85a763565316e1c3cfcb"; + public const string AspnetCoreApp90 = "9.0.1"; + public const string AspnetCoreApp90Sha = "e5fc3093aed5756deae3e61f98b9f4bb0c847319db30cbd1668c2511e06529c2f6a5e1917ec776fe2b36a1f7bb7e009fc925fee57f87696a8d502a6c8f5dc613"; } } \ No newline at end of file diff --git a/src/BuildScriptGenerator/DotNetCore/DotNetCoreSdkVersions.cs b/src/BuildScriptGenerator/DotNetCore/DotNetCoreSdkVersions.cs index d1878fed82..d2082b74fa 100644 --- a/src/BuildScriptGenerator/DotNetCore/DotNetCoreSdkVersions.cs +++ b/src/BuildScriptGenerator/DotNetCore/DotNetCoreSdkVersions.cs @@ -16,8 +16,8 @@ public static class DotNetCoreSdkVersions public const string DotNet60SdkVersion = "6.0.427"; public const string DotNet60RtmSdkVersion = "6-0-100-rtm-21527-11"; public const string DotNet70SdkVersion = "7.0.410"; - public const string DotNet80SdkVersion = "8.0.403"; - public const string DotNet90SdkVersion = "9.0.100"; + public const string DotNet80SdkVersion = "8.0.405"; + public const string DotNet90SdkVersion = "9.0.102"; public static readonly List RuntimeVersions = new List { "3.0-debian-buster", "3.1-debian-bullseye", "3.1-debian-buster", "5.0-debian-buster", "6.0-debian-bullseye", "6.0-debian-buster", "7.0-debian-bullseye", "7.0-debian-buster", "8.0-debian-bullseye", "8.0-debian-bookworm", "9.0-debian-bookworm", "dynamic-debian-buster" }; } } \ No newline at end of file diff --git a/src/BuildScriptGenerator/Node/NodeVersions.cs b/src/BuildScriptGenerator/Node/NodeVersions.cs index ce312e33fc..780d5b14c1 100644 --- a/src/BuildScriptGenerator/Node/NodeVersions.cs +++ b/src/BuildScriptGenerator/Node/NodeVersions.cs @@ -16,12 +16,12 @@ public static class NodeVersions public const string Node12Version = "12.22.12"; public const string Node14Version = "14.21.3"; public const string Node16Version = "16.20.2"; - public const string Node18Version = "18.20.4"; - public const string Node20Version = "20.18.0"; - public const string Node22Version = "22.9.0"; + public const string Node18Version = "18.20.5"; + public const string Node20Version = "20.18.1"; + public const string Node22Version = "22.13.0"; public const string NodeAppInsightsSdkVersion = "1.8.7"; public const string Pm2Version = "5.3.1"; - public const string NpmVersion = "10.7.0"; + public const string NpmVersion = "10.8.2"; public static readonly List RuntimeVersions = new List { "14-debian-bullseye", "14-debian-buster", "16-debian-bullseye", "16-debian-buster", "18-debian-bullseye", "20-debian-bullseye", "20-debian-bookworm", "22-debian-bullseye", "22-debian-bookworm", "dynamic-debian-buster" }; } } \ No newline at end of file diff --git a/src/BuildScriptGenerator/PhpVersions.cs b/src/BuildScriptGenerator/PhpVersions.cs index 882e0f238c..49a5e421c7 100644 --- a/src/BuildScriptGenerator/PhpVersions.cs +++ b/src/BuildScriptGenerator/PhpVersions.cs @@ -18,15 +18,20 @@ public static class PhpVersions public const string Composer24Version = "2.4.4"; public const string Composer25Version = "2.5.8"; public const string Composer26Version = "2.6.2"; - public const string Php83Version = "8.3.14"; + public const string Composer27Version = "2.7.7"; + public const string Composer28Version = "2.8.4"; + public const string Php84Version = "8.4.2"; + public const string Php84Keys = "AFD8691FDAEDF03BDF6E460563F15A9B715376CA 9D7F99A0CB8F05C8A6958D6256A97AF7600A39A6"; + public const string Php84TarSha256 = "92636453210f7f2174d6ee6df17a5811368f556a6c2c2cbcf019321e36456e01"; + public const string Php83Version = "8.3.15"; public const string Php83Keys = "1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA"; - public const string Php83TarSha256 = "58b4cb9019bf70c0cbcdb814c7df79b9065059d14cf7dbf48d971f8e56ae9be7"; - public const string Php82Version = "8.2.24"; + public const string Php83TarSha256 = "3df5d45637283f759eef8fc3ce03de829ded3e200c3da278936a684955d2f94f"; + public const string Php82Version = "8.2.27"; public const string Php82Keys = "1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544"; - public const string Php82TarSha256 = "80a5225746a9eb484475b312d4c626c63a88a037d8e56d214f30205e1ba1411a"; - public const string Php81Version = "8.1.30"; + public const string Php82TarSha256 = "3eec91294d8c09b3df80b39ec36d574ed9b05de4c8afcb25fa215d48f9ecbc6b"; + public const string Php81Version = "8.1.31"; public const string Php81Keys = "528995BFEDFBA7191D46839EF9BA0ADA31CBD89E 39B641343D8C104B2B146DC3F9C39DC0B9698544"; - public const string Php81TarSha256 = "f24a6007f0b25a53cb7fbaee69c85017e0345b62089c2425a0afb7e177192ed1"; + public const string Php81TarSha256 = "c4f244d46ba51c72f7d13d4f66ce6a9e9a8d6b669c51be35e01765ba58e7afca"; public const string Php80Version = "8.0.30"; public const string Php80Keys = "1729F83938DA44E27BA0F4D3DBDB397470D12172 BFDDD28642824F8118EF77909B67A5C12229118F"; public const string Php80TarSha256 = "216ab305737a5d392107112d618a755dc5df42058226f1670e9db90e77d777d9"; @@ -46,6 +51,6 @@ public static class PhpVersions public const string Php56Keys = "0BD78B5F97500D450838F95DFE857D9A90D90EC1 6E4F6AB321FDC07F2C332E3AC2BF0BC433CFC8B3"; public const string Php56TarSha256 = "1369a51eee3995d7fbd1c5342e5cc917760e276d561595b6052b21ace2656d1c"; public static readonly List RuntimeVersions = new List { "7.4-debian-bullseye", "7.4-debian-buster", "8.0-debian-bullseye", "8.0-debian-buster", "8.1-debian-bullseye", "8.1-debian-buster", "8.2-debian-bullseye", "8.2-debian-buster", "8.3-debian-bullseye", "8.3-debian-buster", "8.3-debian-bookworm" }; - public static readonly List FpmRuntimeVersions = new List { "7.4-fpm-debian-bullseye", "8.0-fpm-debian-bullseye", "8.1-fpm-debian-bullseye", "8.2-fpm-debian-bullseye", "8.3-fpm-debian-bullseye", "8.3-fpm-debian-bookworm" }; + public static readonly List FpmRuntimeVersions = new List { "7.4-fpm-debian-bullseye", "8.0-fpm-debian-bullseye", "8.1-fpm-debian-bullseye", "8.2-fpm-debian-bullseye", "8.3-fpm-debian-bullseye", "8.3-fpm-debian-bookworm", "8.4-fpm-debian-bullseye", "8.4-fpm-debian-bookworm" }; } } \ No newline at end of file diff --git a/src/BuildScriptGenerator/PythonVersions.cs b/src/BuildScriptGenerator/PythonVersions.cs index 73ec985337..1cad03176a 100644 --- a/src/BuildScriptGenerator/PythonVersions.cs +++ b/src/BuildScriptGenerator/PythonVersions.cs @@ -12,11 +12,11 @@ public static class PythonVersions public const string Python36Version = "3.6.15"; public const string Python37Version = "3.7.15"; public const string Python38Version = "3.8.20"; - public const string Python39Version = "3.9.20"; - public const string Python310Version = "3.10.15"; - public const string Python311Version = "3.11.10"; - public const string Python312Version = "3.12.6"; - public const string Python313Version = "3.13.0"; - public static readonly List RuntimeVersions = new List { "3.7-debian-bullseye", "3.7-debian-buster", "3.8-debian-bookworm", "3.8-debian-bullseye", "3.8-debian-buster", "3.9-debian-bookworm", "3.9-debian-bullseye", "3.9-debian-buster", "3.10-debian-bookworm", "3.10-debian-bullseye", "3.10-debian-buster", "3.11-debian-bookworm", "3.11-debian-bullseye", "3.12-debian-bookworm", "3.12-debian-bullseye", "3.13-debian-bookworm", "dynamic-debian-buster" }; + public const string Python39Version = "3.9.21"; + public const string Python310Version = "3.10.16"; + public const string Python311Version = "3.11.11"; + public const string Python312Version = "3.12.8"; + public const string Python313Version = "3.13.1"; + public static readonly List RuntimeVersions = new List { "3.7-debian-bullseye", "3.7-debian-buster", "3.8-debian-bookworm", "3.8-debian-bullseye", "3.8-debian-buster", "3.9-debian-bookworm", "3.9-debian-bullseye", "3.9-debian-buster", "3.10-debian-bookworm", "3.10-debian-bullseye", "3.10-debian-buster", "3.11-debian-bookworm", "3.11-debian-bullseye", "3.12-debian-bookworm", "3.12-debian-bullseye", "3.13-debian-bullseye", "3.13-debian-bookworm", "dynamic-debian-buster" }; } } \ No newline at end of file diff --git a/tests/Oryx.BuildImage.Tests/Php/PhpDynamicInstallationTest.cs b/tests/Oryx.BuildImage.Tests/Php/PhpDynamicInstallationTest.cs index 8249f780dd..d3ea0f14d7 100644 --- a/tests/Oryx.BuildImage.Tests/Php/PhpDynamicInstallationTest.cs +++ b/tests/Oryx.BuildImage.Tests/Php/PhpDynamicInstallationTest.cs @@ -38,6 +38,8 @@ public static TheoryData VersionAndImageNameData data.Add(PhpVersions.Php82Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.ComposerDefaultVersion); data.Add(PhpVersions.Php83Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.ComposerDefaultVersion); data.Add(PhpVersions.Php83Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBookworm), PhpVersions.ComposerDefaultVersion); + data.Add(PhpVersions.Php84Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.ComposerDefaultVersion); + data.Add(PhpVersions.Php84Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBookworm), PhpVersions.ComposerDefaultVersion); // // Test PHP composer version 2.2.x data.Add( @@ -50,6 +52,7 @@ public static TheoryData VersionAndImageNameData data.Add(PhpVersions.Php81Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer22Version); data.Add(PhpVersions.Php82Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer22Version); data.Add(PhpVersions.Php83Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer22Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer22Version); // // Test PHP composer version 2.3.x data.Add( @@ -62,6 +65,7 @@ public static TheoryData VersionAndImageNameData data.Add(PhpVersions.Php81Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer23Version); data.Add(PhpVersions.Php82Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer23Version); data.Add(PhpVersions.Php83Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer23Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer23Version); // Test PHP composer version 2.4.x data.Add( @@ -74,6 +78,7 @@ public static TheoryData VersionAndImageNameData data.Add(PhpVersions.Php81Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer24Version); data.Add(PhpVersions.Php82Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer24Version); data.Add(PhpVersions.Php83Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer24Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer24Version); // Test PHP composer version 2.5.x data.Add( @@ -86,6 +91,7 @@ public static TheoryData VersionAndImageNameData data.Add(PhpVersions.Php81Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer25Version); data.Add(PhpVersions.Php82Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer25Version); data.Add(PhpVersions.Php83Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer25Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer25Version); // Test PHP composer version 2.6.x data.Add( @@ -99,6 +105,24 @@ public static TheoryData VersionAndImageNameData data.Add(PhpVersions.Php82Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer26Version); data.Add(PhpVersions.Php83Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer26Version); data.Add(PhpVersions.Php83Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBookworm), PhpVersions.Composer26Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer26Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBookworm), PhpVersions.Composer26Version); + + // Test PHP composer version 2.7.x + data.Add(PhpVersions.Php81Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer27Version); + data.Add(PhpVersions.Php82Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer27Version); + data.Add(PhpVersions.Php83Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer27Version); + data.Add(PhpVersions.Php83Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBookworm), PhpVersions.Composer27Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer27Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBookworm), PhpVersions.Composer27Version); + + // Test PHP composer version 2.8.x + data.Add(PhpVersions.Php81Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer28Version); + data.Add(PhpVersions.Php82Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer28Version); + data.Add(PhpVersions.Php83Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer28Version); + data.Add(PhpVersions.Php83Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBookworm), PhpVersions.Composer28Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PhpVersions.Composer28Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBookworm), PhpVersions.Composer28Version); return data; } @@ -169,6 +193,7 @@ public static TheoryData VersionAndImageNameDataCliBulls data.Add(PhpVersions.Php81Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.ComposerDefaultVersion); data.Add(PhpVersions.Php82Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.ComposerDefaultVersion); data.Add(PhpVersions.Php83Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.ComposerDefaultVersion); + data.Add(PhpVersions.Php84Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.ComposerDefaultVersion); // Test PHP composer version 2.2.x data.Add(PhpVersions.Php74Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer22Version); @@ -176,6 +201,7 @@ public static TheoryData VersionAndImageNameDataCliBulls data.Add(PhpVersions.Php81Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer22Version); data.Add(PhpVersions.Php82Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer22Version); data.Add(PhpVersions.Php83Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer22Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer22Version); // Test PHP composer version 2.3.x data.Add(PhpVersions.Php74Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer23Version); @@ -183,6 +209,7 @@ public static TheoryData VersionAndImageNameDataCliBulls data.Add(PhpVersions.Php81Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer23Version); data.Add(PhpVersions.Php82Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer23Version); data.Add(PhpVersions.Php83Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer23Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer23Version); // Test PHP composer version 2.4.x data.Add(PhpVersions.Php74Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer24Version); @@ -190,6 +217,7 @@ public static TheoryData VersionAndImageNameDataCliBulls data.Add(PhpVersions.Php81Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer24Version); data.Add(PhpVersions.Php82Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer24Version); data.Add(PhpVersions.Php83Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer24Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer24Version); // Test PHP composer version 2.5.x data.Add(PhpVersions.Php74Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer25Version); @@ -197,6 +225,7 @@ public static TheoryData VersionAndImageNameDataCliBulls data.Add(PhpVersions.Php81Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer25Version); data.Add(PhpVersions.Php82Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer25Version); data.Add(PhpVersions.Php83Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer25Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer25Version); // Test PHP composer version 2.6.x data.Add(PhpVersions.Php74Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer26Version); @@ -204,6 +233,7 @@ public static TheoryData VersionAndImageNameDataCliBulls data.Add(PhpVersions.Php81Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer26Version); data.Add(PhpVersions.Php82Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer26Version); data.Add(PhpVersions.Php83Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer26Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetCliImage(ImageTestHelperConstants.CliBullseyeTag), PhpVersions.Composer26Version); return data; } } @@ -221,6 +251,7 @@ public static TheoryData VersionAndImageNameDataCliBuild data.Add(PhpVersions.Php81Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.ComposerDefaultVersion); data.Add(PhpVersions.Php82Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.ComposerDefaultVersion); data.Add(PhpVersions.Php83Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.ComposerDefaultVersion); + data.Add(PhpVersions.Php84Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.ComposerDefaultVersion); // Test PHP composer version 2.2.x data.Add(PhpVersions.Php74Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer22Version); @@ -228,6 +259,7 @@ public static TheoryData VersionAndImageNameDataCliBuild data.Add(PhpVersions.Php81Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer22Version); data.Add(PhpVersions.Php82Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer22Version); data.Add(PhpVersions.Php83Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer22Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer22Version); // Test PHP composer version 2.3.x data.Add(PhpVersions.Php74Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer23Version); @@ -235,6 +267,7 @@ public static TheoryData VersionAndImageNameDataCliBuild data.Add(PhpVersions.Php81Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer23Version); data.Add(PhpVersions.Php82Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer23Version); data.Add(PhpVersions.Php83Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer23Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer23Version); // Test PHP composer version 2.4.x data.Add(PhpVersions.Php74Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer24Version); @@ -242,6 +275,7 @@ public static TheoryData VersionAndImageNameDataCliBuild data.Add(PhpVersions.Php81Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer24Version); data.Add(PhpVersions.Php82Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer24Version); data.Add(PhpVersions.Php83Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer24Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer24Version); // Test PHP composer version 2.5.x data.Add(PhpVersions.Php74Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer25Version); @@ -249,6 +283,7 @@ public static TheoryData VersionAndImageNameDataCliBuild data.Add(PhpVersions.Php81Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer25Version); data.Add(PhpVersions.Php82Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer25Version); data.Add(PhpVersions.Php83Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer25Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer25Version); // Test PHP composer version 2.6.x data.Add(PhpVersions.Php74Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer26Version); @@ -256,11 +291,11 @@ public static TheoryData VersionAndImageNameDataCliBuild data.Add(PhpVersions.Php81Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer26Version); data.Add(PhpVersions.Php82Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer26Version); data.Add(PhpVersions.Php83Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer26Version); + data.Add(PhpVersions.Php84Version, imageHelper.GetCliBuilderImage(ImageTestHelperConstants.CliBuilderBullseyeTag), PhpVersions.Composer26Version); return data; } } - [Theory, Trait("category", "githubactions")] [MemberData(nameof(VersionAndImageNameData))] public void BuildsAppByInstallingSdkDynamicallyGithubActions(string phpVersion, string imageName, string phpComposerVersion) diff --git a/tests/Oryx.BuildImage.Tests/Python/PythonDynamicInstallationTest.cs b/tests/Oryx.BuildImage.Tests/Python/PythonDynamicInstallationTest.cs index 74cdfcf1ac..826b42c296 100644 --- a/tests/Oryx.BuildImage.Tests/Python/PythonDynamicInstallationTest.cs +++ b/tests/Oryx.BuildImage.Tests/Python/PythonDynamicInstallationTest.cs @@ -41,17 +41,22 @@ public void PipelineTestInvocationGithubActions() GeneratesScript_AndBuildsPython_FlaskApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PythonVersions.Python310Version); GeneratesScript_AndBuildsPython_FlaskApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PythonVersions.Python311Version); GeneratesScript_AndBuildsPython_FlaskApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PythonVersions.Python312Version); + GeneratesScript_AndBuildsPython_FlaskApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PythonVersions.Python313Version); + GeneratesScript_AndBuildsPython_FlaskApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBookworm), PythonVersions.Python313Version); GeneratesScript_AndBuildsPython_PyodbcApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PythonVersions.Python37Version); GeneratesScript_AndBuildsPython_PyodbcApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PythonVersions.Python38Version); GeneratesScript_AndBuildsPython_PyodbcApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBuster), PythonVersions.Python39Version); GeneratesScript_AndBuildsPython_PyodbcApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PythonVersions.Python310Version); - //Pyodbc package not yet supported for python 3.11 versions: https://pyreadiness.org/3.11/ - //GeneratesScript_AndBuildsPython_PyodbcApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PythonVersions.Python311Version); + GeneratesScript_AndBuildsPython_PyodbcApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PythonVersions.Python311Version); + GeneratesScript_AndBuildsPython_PyodbcApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PythonVersions.Python312Version); + GeneratesScript_AndBuildsPython_PyodbcApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBookworm), PythonVersions.Python313Version); GeneratesScript_AndBuildsPython_DjangoRegexApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PythonVersions.Python310Version); GeneratesScript_AndBuildsPython_DjangoRegexApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PythonVersions.Python311Version); GeneratesScript_AndBuildsPython_DjangoRegexApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PythonVersions.Python312Version); + GeneratesScript_AndBuildsPython_DjangoRegexApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), PythonVersions.Python313Version); + GeneratesScript_AndBuildsPython_DjangoRegexApp(imageTestHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBookworm), PythonVersions.Python313Version); } [Fact, Trait("category", "cli-stretch")] @@ -216,6 +221,7 @@ private void GeneratesScript_AndBuildsPython_PyodbcApp( [InlineData(PythonVersions.Python310Version)] [InlineData(PythonVersions.Python311Version)] [InlineData(PythonVersions.Python312Version)] + [InlineData(PythonVersions.Python313Version)] public void GeneratesScript_AndBuildsPython_JamstackBuildImage(string version) { // Arrange @@ -477,6 +483,8 @@ public static TheoryData SupportedVersionAndImageNameData data.Add(PythonVersions.Python310Version, imageHelper.GetAzureFunctionsJamStackBuildImage(ImageTestHelperConstants.AzureFunctionsJamStackBullseye)); data.Add(PythonVersions.Python311Version, imageHelper.GetAzureFunctionsJamStackBuildImage(ImageTestHelperConstants.AzureFunctionsJamStackBullseye)); data.Add(PythonVersions.Python312Version, imageHelper.GetAzureFunctionsJamStackBuildImage(ImageTestHelperConstants.AzureFunctionsJamStackBullseye)); + data.Add(PythonVersions.Python313Version, imageHelper.GetAzureFunctionsJamStackBuildImage(ImageTestHelperConstants.AzureFunctionsJamStackBullseye)); + return data; } } diff --git a/tests/Oryx.Integration.Tests/Php/PhpDynamicInstallationTest.cs b/tests/Oryx.Integration.Tests/Php/PhpDynamicInstallationTest.cs index b5732a025e..9a79f451ff 100644 --- a/tests/Oryx.Integration.Tests/Php/PhpDynamicInstallationTest.cs +++ b/tests/Oryx.Integration.Tests/Php/PhpDynamicInstallationTest.cs @@ -23,6 +23,21 @@ public PhpDynamicInstallationTest(ITestOutputHelper output, TestTempDirTestFixtu // Unique category traits are needed to run each // platform-version in it's own pipeline agent. This is // because our agents currently a space limit of 10GB. + + [Fact, Trait("category", "githubactions")] + [Trait("build-image", "github-actions-debian-bullseye")] + public async Task PipelineTestInvocationsPhp84_WithBullseyeEnvironmentAsync() + { + await CanBuildAndRunAppAsync("8.4", ImageTestHelperConstants.OsTypeDebianBullseye, ImageTestHelperConstants.GitHubActionsBullseye); + } + + [Fact, Trait("category", "githubactions")] + [Trait("build-image", "github-actions-debian-bookworm")] + public async Task PipelineTestInvocationsPhp84_WithBookwormEnvironmentAsync() + { + await CanBuildAndRunAppAsync("8.4", ImageTestHelperConstants.OsTypeDebianBookworm, ImageTestHelperConstants.GitHubActionsBookworm); + } + [Fact, Trait("category", "githubactions")] [Trait("build-image", "github-actions-debian-buster")] public async Task PipelineTestInvocationsPhp83_WithBusterEnvironmentAsync() diff --git a/tests/Oryx.Integration.Tests/Python/PythonDynamicInstallationTest.cs b/tests/Oryx.Integration.Tests/Python/PythonDynamicInstallationTest.cs index 1f52f5f6a5..8c3f05db1c 100644 --- a/tests/Oryx.Integration.Tests/Python/PythonDynamicInstallationTest.cs +++ b/tests/Oryx.Integration.Tests/Python/PythonDynamicInstallationTest.cs @@ -153,18 +153,30 @@ await CanBuildAndRunPythonApp_UsingGitHubActionsBuildImage_AndDynamicRuntimeInst ImageTestHelperConstants.GitHubActionsBookworm); } - // [Fact] - // [Trait("category", "githubactions")] - // [Trait("build-image", "github-actions-debian-bookworm")] - // public async Task CanBuildAndRunPython313App_UsingGitHubActionsBookwormBuildImage_AndDynamicRuntimeInstallationAsync() - // { - // await CanBuildAndRunPythonApp_UsingGitHubActionsBuildImage_AndDynamicRuntimeInstallationAsync( - // "3.13", - // "django-app", - // ImageTestHelperConstants.OsTypeDebianBookworm, - // ImageTestHelperConstants.GitHubActionsBookworm); - // } + [Fact] + [Trait("category", "githubactions")] + [Trait("build-image", "github-actions-debian-bullseye")] + public async Task CanBuildAndRunPython313App_UsingGitHubActionsBullseyeBuildImage_AndDynamicRuntimeInstallationAsync() + { + await CanBuildAndRunPythonApp_UsingGitHubActionsBuildImage_AndDynamicRuntimeInstallationAsync( + "3.13", + "django42-app", + ImageTestHelperConstants.OsTypeDebianBullseye, + ImageTestHelperConstants.GitHubActionsBullseye); + } + [Fact] + [Trait("category", "githubactions")] + [Trait("build-image", "github-actions-debian-bookworm")] + public async Task CanBuildAndRunPython313App_UsingGitHubActionsBookwormBuildImage_AndDynamicRuntimeInstallationAsync() + { + await CanBuildAndRunPythonApp_UsingGitHubActionsBuildImage_AndDynamicRuntimeInstallationAsync( + "3.13", + "django42-app", + ImageTestHelperConstants.OsTypeDebianBookworm, + ImageTestHelperConstants.GitHubActionsBookworm); + } + [Fact] [Trait("category", "githubactions")] [Trait("build-image", "github-actions-debian-bullseye")] diff --git a/tests/Oryx.Integration.Tests/Python/PythonEndToEndTests.cs b/tests/Oryx.Integration.Tests/Python/PythonEndToEndTests.cs index 3d82d37fb0..90182c753a 100644 --- a/tests/Oryx.Integration.Tests/Python/PythonEndToEndTests.cs +++ b/tests/Oryx.Integration.Tests/Python/PythonEndToEndTests.cs @@ -260,53 +260,101 @@ await EndToEndTestHelper.BuildRunAndAssertAppAsync( }); } - // [Fact] - // [Trait("category", "githubactions")] - // [Trait("build-image", "github-actions-debian-bookworm")] - // public async Task CanBuildAndRun_DjangoRegex_Python13_OnBookwormBuildImage() - // { - // // Arrange - // var version = "3.13"; - // var osType = ImageTestHelperConstants.OsTypeDebianBookworm; - // var appName = "django-regex-example-app"; - // var volume = CreateAppVolume(appName); - // var appDir = volume.ContainerDir; - // var appOutputDirVolume = CreateAppOutputDirVolume(); - // var appOutputDir = appOutputDirVolume.ContainerDir; - // var buildScript = new ShellScriptBuilder() - // .AddCommand($"oryx build {appDir} -i /tmp/int -o {appOutputDir} " + - // $"--platform {PythonConstants.PlatformName} --platform-version {PythonVersions.Python313Version}") - // .ToString(); - // var runScript = new ShellScriptBuilder() - // .AddCommand($"oryx create-script -appPath {appOutputDir} -bindPort {ContainerPort}") - // .AddCommand(DefaultStartupFilePath) - // .ToString(); - - // await EndToEndTestHelper.BuildRunAndAssertAppAsync( - // appName, - // _output, - // new[] { volume, appOutputDirVolume }, - // _imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBookworm), - // "/bin/bash", - // new[] - // { - // "-c", - // buildScript - // }, - // _imageHelper.GetRuntimeImage("python", version, osType), - // ContainerPort, - // "/bin/bash", - // new[] - // { - // "-c", - // runScript - // }, - // async (hostPort) => - // { - // var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/"); - // Assert.Contains("Hello world from Django!", data); - // }); - // } + [Fact] + [Trait("category", "githubactions")] + [Trait("build-image", "github-actions-debian-bullseye")] + public async Task CanBuildAndRun_DjangoRegex_Python13_OnBullseyeBuildImage() + { + // Arrange + var version = "3.13"; + var osType = ImageTestHelperConstants.OsTypeDebianBullseye; + var appName = "django-regex-example-app"; + var volume = CreateAppVolume(appName); + var appDir = volume.ContainerDir; + var appOutputDirVolume = CreateAppOutputDirVolume(); + var appOutputDir = appOutputDirVolume.ContainerDir; + var buildScript = new ShellScriptBuilder() + .AddCommand($"oryx build {appDir} -i /tmp/int -o {appOutputDir} " + + $"--platform {PythonConstants.PlatformName} --platform-version {PythonVersions.Python313Version}") + .ToString(); + var runScript = new ShellScriptBuilder() + .AddCommand($"oryx create-script -appPath {appOutputDir} -bindPort {ContainerPort}") + .AddCommand(DefaultStartupFilePath) + .ToString(); + + await EndToEndTestHelper.BuildRunAndAssertAppAsync( + appName, + _output, + new[] { volume, appOutputDirVolume }, + _imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBullseye), + "/bin/bash", + new[] + { + "-c", + buildScript + }, + _imageHelper.GetRuntimeImage("python", version, osType), + ContainerPort, + "/bin/bash", + new[] + { + "-c", + runScript + }, + async (hostPort) => + { + var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/"); + Assert.Contains("Hello world from Django!", data); + }); + } + + [Fact] + [Trait("category", "githubactions")] + [Trait("build-image", "github-actions-debian-bookworm")] + public async Task CanBuildAndRun_DjangoRegex_Python13_OnBookwormBuildImage() + { + // Arrange + var version = "3.13"; + var osType = ImageTestHelperConstants.OsTypeDebianBookworm; + var appName = "django-regex-example-app"; + var volume = CreateAppVolume(appName); + var appDir = volume.ContainerDir; + var appOutputDirVolume = CreateAppOutputDirVolume(); + var appOutputDir = appOutputDirVolume.ContainerDir; + var buildScript = new ShellScriptBuilder() + .AddCommand($"oryx build {appDir} -i /tmp/int -o {appOutputDir} " + + $"--platform {PythonConstants.PlatformName} --platform-version {PythonVersions.Python313Version}") + .ToString(); + var runScript = new ShellScriptBuilder() + .AddCommand($"oryx create-script -appPath {appOutputDir} -bindPort {ContainerPort}") + .AddCommand(DefaultStartupFilePath) + .ToString(); + + await EndToEndTestHelper.BuildRunAndAssertAppAsync( + appName, + _output, + new[] { volume, appOutputDirVolume }, + _imageHelper.GetGitHubActionsBuildImage(ImageTestHelperConstants.GitHubActionsBookworm), + "/bin/bash", + new[] + { + "-c", + buildScript + }, + _imageHelper.GetRuntimeImage("python", version, osType), + ContainerPort, + "/bin/bash", + new[] + { + "-c", + runScript + }, + async (hostPort) => + { + var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/"); + Assert.Contains("Hello world from Django!", data); + }); + } [Theory] [Trait("category", "python-3.7")] diff --git a/tests/Oryx.RuntimeImage.Tests/Node/NodeRuntimeImageContainsRequiredPrograms.cs b/tests/Oryx.RuntimeImage.Tests/Node/NodeRuntimeImageContainsRequiredPrograms.cs index 4dec3065be..a2ceb672ca 100644 --- a/tests/Oryx.RuntimeImage.Tests/Node/NodeRuntimeImageContainsRequiredPrograms.cs +++ b/tests/Oryx.RuntimeImage.Tests/Node/NodeRuntimeImageContainsRequiredPrograms.cs @@ -265,14 +265,7 @@ public void NodeBullseyeImages_Contains_Correct_NPM_Version(string version, stri () => { Assert.True(result.IsSuccess); - if (version == "18" || version == "20" || version == "22") - { - Assert.Contains("10.7.0", result.StdOut.ReplaceNewLine()); - } - else - { - Assert.Contains(NodeVersions.NpmVersion, result.StdOut.ReplaceNewLine()); - } + Assert.Contains(NodeVersions.NpmVersion, result.StdOut.ReplaceNewLine()); }, result.GetDebugInfo()); } @@ -299,14 +292,7 @@ public void NodeBookwormImages_Contains_Correct_NPM_Version(string version, stri () => { Assert.True(result.IsSuccess); - if (version == "18" || version == "20" || version == "22") - { - Assert.Contains("10.7.0", result.StdOut.ReplaceNewLine()); - } - else - { - Assert.Contains(NodeVersions.NpmVersion, result.StdOut.ReplaceNewLine()); - } + Assert.Contains(NodeVersions.NpmVersion, result.StdOut.ReplaceNewLine()); }, result.GetDebugInfo()); } diff --git a/tests/Oryx.RuntimeImage.Tests/Php-fpm/PhpFpmImageTest.cs b/tests/Oryx.RuntimeImage.Tests/Php-fpm/PhpFpmImageTest.cs index 1b23c8ced1..887875c991 100644 --- a/tests/Oryx.RuntimeImage.Tests/Php-fpm/PhpFpmImageTest.cs +++ b/tests/Oryx.RuntimeImage.Tests/Php-fpm/PhpFpmImageTest.cs @@ -59,6 +59,7 @@ public PhpFpmImageTest(ITestOutputHelper output, TestTempDirTestFixture testTemp [InlineData("8.1-fpm", PhpVersions.Php81Version)] [InlineData("8.2-fpm", PhpVersions.Php82Version)] [InlineData("8.3-fpm", PhpVersions.Php83Version)] + [InlineData("8.4-fpm", PhpVersions.Php84Version)] [Trait(TestConstants.Category, TestConstants.Release)] public void VersionMatchesBullseyeImageName(string version, string expectedPhpVersion) { @@ -81,6 +82,7 @@ public void VersionMatchesBullseyeImageName(string version, string expectedPhpVe [Theory] [Trait("category", "runtime-bookworm")] [InlineData("8.3-fpm", PhpVersions.Php83Version)] + [InlineData("8.4-fpm", PhpVersions.Php84Version)] [Trait(TestConstants.Category, TestConstants.Release)] public void VersionMatchesBookwormImageName(string version, string expectedPhpVersion) { @@ -107,6 +109,7 @@ public void VersionMatchesBookwormImageName(string version, string expectedPhpVe [InlineData("8.1-fpm")] [InlineData("8.2-fpm")] [InlineData("8.3-fpm")] + [InlineData("8.4-fpm")] public void GraphicsExtension_Gd_IsInstalled_For_Bullseye(string version) { // Arrange & Act @@ -128,6 +131,7 @@ public void GraphicsExtension_Gd_IsInstalled_For_Bullseye(string version) [Theory] [Trait("category", "runtime-bookworm")] [InlineData("8.3-fpm")] + [InlineData("8.4-fpm")] public void GraphicsExtension_Gd_IsInstalled_For_Bookworm(string version) { // Arrange & Act @@ -201,6 +205,7 @@ public void GraphicsExtension_Gd_IsInstalled_For_Bookworm(string version) [InlineData("8.1-fpm")] [InlineData("8.2-fpm")] [InlineData("8.3-fpm")] + [InlineData("8.4-fpm")] public void PhpFpmBullseyeRuntimeImage_Contains_VersionAndCommit_Information(string version) { // we cant always rely on gitcommitid as env variable in case build context is not correctly passed @@ -238,6 +243,7 @@ public void PhpFpmBullseyeRuntimeImage_Contains_VersionAndCommit_Information(str [SkippableTheory] [Trait("category", "runtime-bookworm")] [InlineData("8.3-fpm")] + [InlineData("8.4-fpm")] public void PhpFpmBookwormRuntimeImage_Contains_VersionAndCommit_Information(string version) { // we cant always rely on gitcommitid as env variable in case build context is not correctly passed @@ -279,6 +285,7 @@ public void PhpFpmBookwormRuntimeImage_Contains_VersionAndCommit_Information(str [InlineData("8.1-fpm")] [InlineData("8.2-fpm")] [InlineData("8.3-fpm")] + [InlineData("8.4-fpm")] public void Redis_IsInstalled_For_Bullseye(string version) { // Arrange & Act @@ -303,6 +310,7 @@ public void Redis_IsInstalled_For_Bullseye(string version) [Theory] [Trait("category", "runtime-bookworm")] [InlineData("8.3-fpm")] + [InlineData("8.4-fpm")] public void Redis_IsInstalled_For_Bookworm(string version) { // Arrange & Act @@ -330,6 +338,7 @@ public void Redis_IsInstalled_For_Bookworm(string version) [InlineData("8.1-fpm")] [InlineData("8.2-fpm")] [InlineData("8.3-fpm")] + [InlineData("8.4-fpm")] public void SqlSrv_IsInstalled_For_Bullseye(string version) { // Arrange & Act @@ -353,6 +362,7 @@ public void SqlSrv_IsInstalled_For_Bullseye(string version) [Theory] [Trait("category", "runtime-bookworm")] [InlineData("8.3-fpm")] + [InlineData("8.4-fpm")] public void SqlSrv_IsInstalled_For_Bookworm(string version) { // Arrange & Act @@ -378,6 +388,7 @@ public void SqlSrv_IsInstalled_For_Bookworm(string version) [InlineData("8.1-fpm")] [InlineData("8.2-fpm")] [InlineData("8.3-fpm")] + [InlineData("8.4-fpm")] public void Mongodb_IsInstalled_For_Bullseye(string version) { // Arrange & Act @@ -401,6 +412,7 @@ public void Mongodb_IsInstalled_For_Bullseye(string version) [Theory] [Trait("category", "runtime-bookworm")] [InlineData("8.3-fpm")] + [InlineData("8.4-fpm")] public void Mongodb_IsInstalled_For_Bookworm(string version) { // Arrange & Act diff --git a/tests/Oryx.RuntimeImage.Tests/Python/PythonImagesTests.cs b/tests/Oryx.RuntimeImage.Tests/Python/PythonImagesTests.cs index 7fae9fc27d..50fdd215b5 100644 --- a/tests/Oryx.RuntimeImage.Tests/Python/PythonImagesTests.cs +++ b/tests/Oryx.RuntimeImage.Tests/Python/PythonImagesTests.cs @@ -22,7 +22,6 @@ public PythonImagesTest(ITestOutputHelper output) : base(output) [Trait("category", "runtime-buster")] [InlineData("3.8")] [InlineData("3.9")] - [InlineData("3.10")] public void PythonBusterRuntimeImage_Contains_VersionAndCommit_Information(string version) { // we cant always rely on gitcommitid as env variable in case build context is not correctly passed @@ -64,6 +63,7 @@ public void PythonBusterRuntimeImage_Contains_VersionAndCommit_Information(strin [InlineData("3.10")] [InlineData("3.11")] [InlineData("3.12")] + [InlineData("3.13")] public void PythonBullseyeRuntimeImage_Contains_VersionAndCommit_Information(string version) { // we cant always rely on gitcommitid as env variable in case build context is not correctly passed @@ -102,6 +102,7 @@ public void PythonBullseyeRuntimeImage_Contains_VersionAndCommit_Information(str [Trait("category", "runtime-bookworm")] [InlineData("3.11")] [InlineData("3.12")] + [InlineData("3.13")] public void PythonBookwormRuntimeImage_Contains_VersionAndCommit_Information(string version) { // we cant always rely on gitcommitid as env variable in case build context is not correctly passed @@ -140,7 +141,6 @@ public void PythonBookwormRuntimeImage_Contains_VersionAndCommit_Information(str [Trait("category", "runtime-buster")] [InlineData("3.8")] [InlineData("3.9")] - [InlineData("3.10")] public void JamSpell_CanBe_InstalledInBusterRunTimeImage(string version) { // Arrange @@ -171,6 +171,7 @@ public void JamSpell_CanBe_InstalledInBusterRunTimeImage(string version) [InlineData("3.10")] [InlineData("3.11")] [InlineData("3.12")] + [InlineData("3.13")] public void JamSpell_CanBe_InstalledInBullseyeRunTimeImage(string version) { // Arrange @@ -198,6 +199,7 @@ public void JamSpell_CanBe_InstalledInBullseyeRunTimeImage(string version) [Trait("category", "runtime-bookworm")] [InlineData("3.11")] [InlineData("3.12")] + [InlineData("3.13")] public void JamSpell_CanBe_InstalledInBookwormRunTimeImage(string version) { // Arrange @@ -225,6 +227,7 @@ public void JamSpell_CanBe_InstalledInBookwormRunTimeImage(string version) [Trait("category", "runtime-bookworm")] [InlineData("3.11", "Python " + PythonVersions.Python311Version)] [InlineData("3.12", "Python " + PythonVersions.Python312Version)] + [InlineData("3.13", "Python " + PythonVersions.Python313Version)] [Trait(TestConstants.Category, TestConstants.Release)] public void PythonVersionMatchesBookwormImageName(string pythonVersion, string expectedOutput) { @@ -254,6 +257,7 @@ public void PythonVersionMatchesBookwormImageName(string pythonVersion, string e [InlineData("3.10", "Python " + PythonVersions.Python310Version)] [InlineData("3.11", "Python " + PythonVersions.Python311Version)] [InlineData("3.12", "Python " + PythonVersions.Python312Version)] + [InlineData("3.13", "Python " + PythonVersions.Python313Version)] [Trait(TestConstants.Category, TestConstants.Release)] public void PythonVersionMatchesBullseyeImageName(string pythonVersion, string expectedOutput) { @@ -280,7 +284,6 @@ public void PythonVersionMatchesBullseyeImageName(string pythonVersion, string e [Trait("category", "runtime-buster")] [InlineData("3.8", "Python " + PythonVersions.Python38Version)] [InlineData("3.9", "Python " + PythonVersions.Python39Version)] - [InlineData("3.10", "Python " + PythonVersions.Python310Version)] [Trait(TestConstants.Category, TestConstants.Release)] public void PythonVersionMatchesBusterImageName(string pythonVersion, string expectedOutput) { diff --git a/tests/Oryx.Tests.Common/TestValueGenerator.cs b/tests/Oryx.Tests.Common/TestValueGenerator.cs index 28bcc267d0..aff46200a8 100644 --- a/tests/Oryx.Tests.Common/TestValueGenerator.cs +++ b/tests/Oryx.Tests.Common/TestValueGenerator.cs @@ -14,7 +14,8 @@ public static class TestValueGenerator { ("18", ImageTestHelperConstants.OsTypeDebianBullseye), ("20", ImageTestHelperConstants.OsTypeDebianBullseye), - ("20", ImageTestHelperConstants.OsTypeDebianBookworm) + ("20", ImageTestHelperConstants.OsTypeDebianBookworm), + ("22", ImageTestHelperConstants.OsTypeDebianBookworm), }; private readonly static List<(string Version, string OsType)> NodeBusterVersions = new List<(string, string)> @@ -26,12 +27,14 @@ public static class TestValueGenerator private readonly static List<(string Version, string OsType)> NodeBullseyeVersions = new List<(string, string)> { ("18", ImageTestHelperConstants.OsTypeDebianBullseye), - ("20", ImageTestHelperConstants.OsTypeDebianBullseye) + ("20", ImageTestHelperConstants.OsTypeDebianBullseye), + ("22", ImageTestHelperConstants.OsTypeDebianBullseye), }; private readonly static List<(string Version, string OsType)> NodeBookwormVersions = new List<(string, string)> { - ("20", ImageTestHelperConstants.OsTypeDebianBookworm) + ("20", ImageTestHelperConstants.OsTypeDebianBookworm), + ("22", ImageTestHelperConstants.OsTypeDebianBookworm), }; private readonly static List<(string Version, string OsType)> PythonVersions = new List<(string, string)> @@ -41,7 +44,15 @@ public static class TestValueGenerator ("3.8", ImageTestHelperConstants.OsTypeDebianBuster), ("3.8", ImageTestHelperConstants.OsTypeDebianBullseye), ("3.9", ImageTestHelperConstants.OsTypeDebianBuster), - ("3.9", ImageTestHelperConstants.OsTypeDebianBullseye) + ("3.9", ImageTestHelperConstants.OsTypeDebianBullseye), + ("3.10", ImageTestHelperConstants.OsTypeDebianBuster), + ("3.10", ImageTestHelperConstants.OsTypeDebianBullseye), + ("3.11", ImageTestHelperConstants.OsTypeDebianBullseye), + ("3.11", ImageTestHelperConstants.OsTypeDebianBookworm), + ("3.12", ImageTestHelperConstants.OsTypeDebianBullseye), + ("3.12", ImageTestHelperConstants.OsTypeDebianBookworm), + ("3.13", ImageTestHelperConstants.OsTypeDebianBullseye), + ("3.13", ImageTestHelperConstants.OsTypeDebianBookworm), }; private readonly static List<(string Version, string OsType)> PythonBusterVersions = new List<(string, string)> @@ -55,7 +66,11 @@ public static class TestValueGenerator { ("3.7", ImageTestHelperConstants.OsTypeDebianBullseye), ("3.8", ImageTestHelperConstants.OsTypeDebianBullseye), - ("3.9", ImageTestHelperConstants.OsTypeDebianBullseye) + ("3.9", ImageTestHelperConstants.OsTypeDebianBullseye), + ("3.10", ImageTestHelperConstants.OsTypeDebianBullseye), + ("3.11", ImageTestHelperConstants.OsTypeDebianBullseye), + ("3.12", ImageTestHelperConstants.OsTypeDebianBullseye), + ("3.13", ImageTestHelperConstants.OsTypeDebianBullseye), }; public static IEnumerable GetNodeVersions_SupportDebugging() diff --git a/tests/SampleApps/python/django-regex-example-app/requirements.txt b/tests/SampleApps/python/django-regex-example-app/requirements.txt index fe3801e92a..43390c7331 100644 --- a/tests/SampleApps/python/django-regex-example-app/requirements.txt +++ b/tests/SampleApps/python/django-regex-example-app/requirements.txt @@ -59,7 +59,7 @@ isodate==0.6.0 itertable==2.0.0 kombu==5.2.4 libsass==0.21.0 -lxml==4.9.3 +lxml==4.9.3; python_version < '3.13' # TODO: Enable for Python 3.13 when lxml supports 3.13 MarkupPy==1.14 msal==1.21.0 msal-extensions==0.3.0