Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .ci/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ ifneq ($(PHP_VERSION), 7.2)
SEL_DISTRO := bullseye
endif

ifeq ($(PHP_VERSION), 8.5)
SEL_DISTRO := bookworm
endif


CONAN_USER_HOME:=/tmp/conan_user_home
MAP_CONAN_HOME_TO_DOCKER_HOST_CMD_LINE_ARG:=
Expand Down
3 changes: 2 additions & 1 deletion .ci/packer_cache.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ php:8.1-fpm
php:8.2-fpm
php:8.3-fpm
php:8.4-fpm
php:8.5-fpm
ruby:2.7.1-alpine3.12
ubuntu:20.04
"
Expand All @@ -27,7 +28,7 @@ if [ -x "$(command -v docker)" ]; then

# Make sure list of PHP versions supported by the Elastic APM PHP Agent is in sync.
# See the comment in .ci/shared.sh
for version in 7.2 7.3 7.4 8.0 8.1 8.2 8.3 8.4
for version in 7.2 7.3 7.4 8.0 8.1 8.2 8.3 8.4 8.5
do
PHP_VERSION=${version} make -f .ci/Makefile prepare || true
DOCKERFILE=Dockerfile.alpine PHP_VERSION=${version} make -f .ci/Makefile prepare || true
Expand Down
2 changes: 1 addition & 1 deletion .ci/shared.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ set -e
# *) docker-compose.yml in packaging/test

#
export ELASTIC_APM_PHP_TESTS_SUPPORTED_PHP_VERSIONS=(7.2 7.3 7.4 8.0 8.1 8.2 8.3 8.4)
export ELASTIC_APM_PHP_TESTS_SUPPORTED_PHP_VERSIONS=(7.2 7.3 7.4 8.0 8.1 8.2 8.3 8.4 8.5)

export ELASTIC_APM_PHP_TESTS_SUPPORTED_LINUX_NATIVE_PACKAGE_TYPES=(apk deb rpm)
export ELASTIC_APM_PHP_TESTS_SUPPORTED_LINUX_PACKAGE_TYPES=("${ELASTIC_APM_PHP_TESTS_SUPPORTED_LINUX_NATIVE_PACKAGE_TYPES[@]}" tar)
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/loop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ jobs:
- "8.2"
- "8.3"
- "8.4"
- "8.5"
dockerfile:
- "Dockerfile"
- "Dockerfile.alpine"
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/phpt.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ jobs:
- "8.2"
- "8.3"
- "8.4"
- "8.5"
steps:
# - uses: actions/checkout@v6
# - name: Fetch and extract latest release of apm-agent-php
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ jobs:
- "8.2"
- "8.3"
- "8.4"
- "8.5"
data: ${{ fromJson(needs.setup-build-matrix.outputs.matrix-combinations).include }}
env:
PHP_VERSION: ${{ matrix.php-version }}
Expand Down Expand Up @@ -92,6 +93,7 @@ jobs:
- "8.2"
- "8.3"
- "8.4"
- "8.5"
dockerfile:
- "Dockerfile"
- "Dockerfile.alpine"
Expand Down
11 changes: 6 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,12 @@ RUN apt-get -qq update \
wget \
&& rm -rf /var/lib/apt/lists/*

RUN docker-php-ext-install \
mysqli \
pcntl \
pdo_mysql \
opcache
RUN MODULES="mysqli pcntl pdo_mysql"; \
case "${PHP_VERSION}" in \
8.5*) ;; \
*) MODULES="$MODULES opcache" ;; \
esac; \
docker-php-ext-install $MODULES

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

Expand Down
11 changes: 6 additions & 5 deletions Dockerfile.alpine
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ RUN apk update \
git \
unzip

RUN docker-php-ext-install \
mysqli \
pcntl \
pdo_mysql \
opcache
RUN MODULES="mysqli pcntl pdo_mysql"; \
case "${PHP_VERSION}" in \
8.5*) ;; \
*) MODULES="$MODULES opcache" ;; \
esac; \
docker-php-ext-install $MODULES

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

Expand Down
3 changes: 2 additions & 1 deletion agent/native/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ include(elastic_conan_debugsymbols)

# Install project dependencies

set(_supported_php_versions 72 73 74 80 81 82 83 84)
set(_supported_php_versions 72 73 74 80 81 82 83 84 85)

function(get_php_api_from_release php_version ret_val)
block(SCOPE_FOR VARIABLES)
Expand All @@ -55,6 +55,7 @@ function(get_php_api_from_release php_version ret_val)
set(_php_release_82 20220829)
set(_php_release_83 20230831)
set(_php_release_84 20240924)
set(_php_release_85 20250925)

set(${ret_val} ${_php_release_${php_version}})
return(PROPAGATE ${ret_val})
Expand Down
41 changes: 41 additions & 0 deletions agent/native/building/dependencies/php85/conandata.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: "php-headers-85"
version: "1.0"
php_source_version: 8.5.0

sources:
7.2.34:
linux:
- url: "https://www.php.net/distributions/php-7.2.34.tar.gz"
contentsRoot: "php-7.2.34"
7.3.33:
linux:
- url: "https://www.php.net/distributions/php-7.3.33.tar.gz"
contentsRoot: "php-7.3.33"
7.4.33:
linux:
- url: "https://www.php.net/distributions/php-7.4.33.tar.gz"
contentsRoot: "php-7.4.33"
8.0.28:
linux:
- url: "https://www.php.net/distributions/php-8.0.28.tar.gz"
contentsRoot: "php-8.0.28"
8.1.18:
linux:
- url: "https://www.php.net/distributions/php-8.1.18.tar.gz"
contentsRoot: "php-8.1.18"
8.2.5:
linux:
- url: "https://www.php.net/distributions/php-8.2.5.tar.gz"
contentsRoot: "php-8.2.5"
8.3.2:
linux:
- url: "https://www.php.net/distributions/php-8.3.2.tar.gz"
contentsRoot: "php-8.3.2"
8.4.1:
linux:
- url: "https://www.php.net/distributions/php-8.4.1.tar.gz"
contentsRoot: "php-8.4.1"
8.5.0:
linux:
- url: "https://www.php.net/distributions/php-8.5.0.tar.gz"
contentsRoot: "php-8.5.0"
56 changes: 56 additions & 0 deletions agent/native/building/dependencies/php85/conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import os
import shutil

from conans import tools, ConanFile, AutoToolsBuildEnvironment

class PhpHeadersForPHP81Conan(ConanFile):
description = "PHP headers package required to build Elastic APM agent without additional PHP dependencies"
license = "The PHP License, version 3.01"
homepage = "https://php.net/"
url = "https://php.net/"
author = "[email protected]"

settings = "os", "compiler", "build_type", "arch"
platform = "linux"

def init(self):
self.name = self.conan_data["name"]
self.version = self.conan_data["version"] # version of the package
self.php_version = self.conan_data["php_source_version"] # version of the PHP to build
self.source_temp_dir = "php-src"

def requirements(self):
self.requires("libxml2/2.9.9")
self.requires("sqlite3/3.29.0")

def source(self):
for source in self.conan_data["sources"][self.php_version][self.platform]:

if "contentsRoot" in source:
# small hack - it can't contain custom fields, so we're removing it from source (got an unexpected keyword argument)
contentRoot = source["contentsRoot"]
del source["contentsRoot"]
tools.get(**source)
os.rename(contentRoot, self.source_temp_dir)
else:
self.output.error("Could not find 'contentsRoot' in conandata.yml")
raise Exception("Could not find 'contentsRoot' in conandata.yml")

def build(self):
with tools.chdir(os.path.join(self.source_folder, self.source_temp_dir)):
buildEnv = AutoToolsBuildEnvironment(self)
envVariables = buildEnv.vars
envVariables['ac_cv_php_xml2_config_path'] = os.path.join(self.deps_cpp_info["libxml2"].rootpath, "bin/xml2-config")
envVariables['LIBXML_LIBS'] = os.path.join(self.deps_cpp_info["libxml2"].rootpath, self.deps_cpp_info["libxml2"].libdirs[0])
envVariables['LIBXML_CFLAGS'] = "-I{}".format(os.path.join(self.deps_cpp_info["libxml2"].rootpath, self.deps_cpp_info["libxml2"].includedirs[0]))
envVariables['SQLITE_LIBS'] = os.path.join(self.deps_cpp_info["sqlite3"].rootpath, self.deps_cpp_info["sqlite3"].libdirs[0])
envVariables['SQLITE_CFLAGS'] = "-I{}".format(os.path.join(self.deps_cpp_info["sqlite3"].rootpath, self.deps_cpp_info["sqlite3"].includedirs[0]))
self.run("./buildconf --force")
buildEnv.configure(args=[""], vars=envVariables, build=False, host=False)

def package(self):
source = os.path.join(self.source_folder, self.source_temp_dir)
self.copy("*.h", src=source, dst='include', keep_path=True)

def package_id(self):
del self.info.settings.compiler.version
6 changes: 5 additions & 1 deletion agent/native/ext/AST_debug.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ String zendAstKindToString( zend_ast_kind kind )
return (#enumMember) \
/**/

// Up to date with PHP v8.3.2
// Up to date with PHP v8.5.0
switch ( kind )
{
/**
Expand All @@ -97,7 +97,9 @@ String zendAstKindToString( zend_ast_kind kind )
ELASTIC_APM_GEN_ENUM_TO_STRING_SWITCH_CASE( ZEND_AST_CLASS );
ELASTIC_APM_GEN_ENUM_TO_STRING_SWITCH_CASE( ZEND_AST_CLASS_CONST );
ELASTIC_APM_GEN_ENUM_TO_STRING_SWITCH_CASE( ZEND_AST_CLASS_CONST_DECL );
#if PHP_VERSION_ID < ELASTIC_APM_BUILD_PHP_VERSION_ID( 8, 5, 0 ) /* removed in PHP 8.5 */
ELASTIC_APM_GEN_ENUM_TO_STRING_SWITCH_CASE( ZEND_AST_CLONE );
#endif
ELASTIC_APM_GEN_ENUM_TO_STRING_SWITCH_CASE( ZEND_AST_CLOSURE );
ELASTIC_APM_GEN_ENUM_TO_STRING_SWITCH_CASE( ZEND_AST_CLOSURE_USES );
ELASTIC_APM_GEN_ENUM_TO_STRING_SWITCH_CASE( ZEND_AST_COALESCE );
Expand All @@ -112,7 +114,9 @@ String zendAstKindToString( zend_ast_kind kind )
ELASTIC_APM_GEN_ENUM_TO_STRING_SWITCH_CASE( ZEND_AST_ECHO );
ELASTIC_APM_GEN_ENUM_TO_STRING_SWITCH_CASE( ZEND_AST_EMPTY );
ELASTIC_APM_GEN_ENUM_TO_STRING_SWITCH_CASE( ZEND_AST_ENCAPS_LIST );
#if PHP_VERSION_ID < ELASTIC_APM_BUILD_PHP_VERSION_ID( 8, 5, 0 ) /* removed in PHP 8.5 */
ELASTIC_APM_GEN_ENUM_TO_STRING_SWITCH_CASE( ZEND_AST_EXIT );
#endif
ELASTIC_APM_GEN_ENUM_TO_STRING_SWITCH_CASE( ZEND_AST_EXPR_LIST );
ELASTIC_APM_GEN_ENUM_TO_STRING_SWITCH_CASE( ZEND_AST_FOR );
ELASTIC_APM_GEN_ENUM_TO_STRING_SWITCH_CASE( ZEND_AST_FOREACH );
Expand Down
2 changes: 1 addition & 1 deletion agent/native/ext/AST_instrumentation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ bool isZendAstListKind( zend_ast_kind kind )
* - Increment minor part of PHP version in static_assert below
*/
static_assert(
PHP_VERSION_ID < ELASTIC_APM_BUILD_PHP_VERSION_ID( 8, 5, 0 ),
PHP_VERSION_ID < ELASTIC_APM_BUILD_PHP_VERSION_ID( 8, 6, 0 ),
"Make sure g_astNodeMaxChildCount is correct. See max number of children in enum _zend_ast_kind in <php-src>/Zend/zend_ast.h"
);
static constexpr size_t g_astNodeMaxChildCount =
Expand Down
3 changes: 2 additions & 1 deletion agent/native/loader/code/phpdetection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,10 @@ bool isThreadSafe() {

std::tuple<std::string_view, int, bool> getZendModuleApiVersion(std::string_view zendVersion) {
using namespace std::string_view_literals;
constexpr size_t knownVersionsCount = 17;
constexpr size_t knownVersionsCount = 18;

constexpr std::array<std::tuple<std::string_view, int, bool>, knownVersionsCount> knownPhpVersions {{
{"4.5"sv, 20250925, true}, // PHP 8.5
{"4.4"sv, 20240924, true}, // PHP 8.4
{"4.3"sv, 20230831, true}, // PHP 8.3
{"4.2"sv, 20220829, true}, // PHP 8.2
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
{ "name": "Sergey Kleyman" }
],
"require": {
"php": "^7.2||8.0.*||8.1.*||8.2.*||8.3.*||8.4.*",
"php": "^7.2||8.0.*||8.1.*||8.2.*||8.3.*||8.4.*||8.5.*",
"ext-json": "*",
"ext-pcntl": "*",
"psr/log": "^1.0"
Expand Down
5 changes: 3 additions & 2 deletions packaging/post-install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -206,11 +206,12 @@ function is_php_supported() {
[ "${PHP_MAJOR_MINOR}" == "8.1" ] || \
[ "${PHP_MAJOR_MINOR}" == "8.2" ] || \
[ "${PHP_MAJOR_MINOR}" == "8.3" ] || \
[ "${PHP_MAJOR_MINOR}" == "8.4" ]
[ "${PHP_MAJOR_MINOR}" == "8.4" ] || \
[ "${PHP_MAJOR_MINOR}" == "8.5" ]
then
return 0
else
echo 'Failed. The supported PHP versions are 7.2-8.4.'
echo 'Failed. The supported PHP versions are 7.2-8.5.'
return 1
fi
}
Expand Down
38 changes: 38 additions & 0 deletions packaging/test/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
version: "3"
services:
deb-fpm-php85:
image: elasticobservability/apm-agent-php-dev:packages-test-deb-fpm-php-8.5-0.0.1
build:
context: ubuntu
dockerfile: fpm/Dockerfile
args:
- PHP_VERSION=8.5
- SEL_DISTRO=bookworm
deb-fpm-php84:
image: elasticobservability/apm-agent-php-dev:packages-test-deb-fpm-php-8.4-0.0.1
build:
Expand Down Expand Up @@ -62,6 +70,14 @@ services:



deb-apache-php85:
image: elasticobservability/apm-agent-php-dev:packages-test-deb-apache-php-8.5-0.0.1
build:
context: ubuntu
dockerfile: apache/Dockerfile
args:
- PHP_VERSION=8.5
- SEL_DISTRO=bookworm
deb-apache-php84:
image: elasticobservability/apm-agent-php-dev:packages-test-deb-apache-php-8.4-0.0.1
build:
Expand Down Expand Up @@ -122,6 +138,14 @@ services:
- PHP_VERSION=7.2


deb-php85:
image: elasticobservability/apm-agent-php-dev:packages-test-deb-php-8.5-0.0.1
build:
context: ubuntu
dockerfile: Dockerfile
args:
- PHP_VERSION=8.5
- SEL_DISTRO=bookworm
deb-php84:
image: elasticobservability/apm-agent-php-dev:packages-test-deb-php-8.4-0.0.1
build:
Expand Down Expand Up @@ -181,6 +205,13 @@ services:
args:
- PHP_VERSION=7.2

rpm-php85:
image: elasticobservability/apm-agent-php-dev:packages-test-rpm-php-8.5-0.1.1
build:
context: fedora
dockerfile: Dockerfile
args:
- PHP_VERSION=8.5
rpm-php84:
image: elasticobservability/apm-agent-php-dev:packages-test-rpm-php-8.4-0.1.1
build:
Expand Down Expand Up @@ -238,6 +269,13 @@ services:
args:
- PHP_VERSION=7.2

apk-php85:
image: elasticobservability/apm-agent-php-dev:packages-test-apk-php-8.5-0.0.1
build:
context: alpine
dockerfile: Dockerfile
args:
- PHP_VERSION=8.5
apk-php84:
image: elasticobservability/apm-agent-php-dev:packages-test-apk-php-8.4-0.0.1
build:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ final class GenerateUnpackScriptsTest extends ComponentTestCaseBase implements L
private const PHP_VERSION_7_4 = '7.4';
// Make sure list of PHP versions supported by the Elastic APM PHP Agent is in sync.
// See the comment in .ci/shared.sh
private const SUPPORTED_PHP_VERSIONS = ['7.2', '7.3', self::PHP_VERSION_7_4, '8.0', '8.1', '8.2', '8.3', '8.4'];
private const SUPPORTED_PHP_VERSIONS = ['7.2', '7.3', self::PHP_VERSION_7_4, '8.0', '8.1', '8.2', '8.3', '8.4', '8.5'];

private const LINUX_PACKAGE_TYPE_DEB = 'deb';
private const LINUX_PACKAGE_TYPE_RPM = 'rpm';
Expand Down
Loading