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