From 18e661edaff3105ecffe092b7f98930c0cc10209 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Minh=20=C4=90=E1=BA=A1t?= Date: Mon, 30 Mar 2026 19:43:38 +0700 Subject: [PATCH] Add datadog --- Makefile | 63 +++++++++++------------- extensions/datadog/8.0/Dockerfile.alpine | 22 +++++++++ extensions/datadog/8.1/Dockerfile.alpine | 23 +++++++++ extensions/datadog/8.2/Dockerfile.alpine | 23 +++++++++ extensions/datadog/8.3/Dockerfile.alpine | 23 +++++++++ extensions/datadog/8.4/Dockerfile.alpine | 23 +++++++++ extensions/datadog/8.5/Dockerfile.alpine | 23 +++++++++ 7 files changed, 167 insertions(+), 33 deletions(-) create mode 100644 extensions/datadog/8.0/Dockerfile.alpine create mode 100644 extensions/datadog/8.1/Dockerfile.alpine create mode 100644 extensions/datadog/8.2/Dockerfile.alpine create mode 100644 extensions/datadog/8.3/Dockerfile.alpine create mode 100644 extensions/datadog/8.4/Dockerfile.alpine create mode 100644 extensions/datadog/8.5/Dockerfile.alpine diff --git a/Makefile b/Makefile index 1af4e07..7cda881 100644 --- a/Makefile +++ b/Makefile @@ -7,49 +7,46 @@ .PHONY: build build: - @if [ -z "$(extension)" ]; then echo "Error: extension is not set. Use: make build extension= version="; exit 1; fi - @if [ -z "$(php_version)" ]; then echo "Error: version is not set. Use: make build extension= version="; exit 1; fi + @if [ -z "$(extension)" ]; then echo "Error: extension is not set. Use: make build extension= php_version="; exit 1; fi + @if [ -z "$(php_version)" ]; then echo "Error: php_version is not set. Use: make build extension= php_version="; exit 1; fi @if [ ! -f extensions/$(extension)/$(php_version)/Dockerfile.alpine ]; then echo "Error: Dockerfile extensions/$(extension)/$(php_version)/Dockerfile.alpine not found."; exit 1; fi + @BUILDER_IMAGE=dockerphpext-local/builder-$(extension)-$(php_version); \ + TEST_IMAGE=test-dockerphpext-local/$(extension)-$(php_version); \ + FINAL_IMAGE=dockerphpext-local/$(extension)-$(php_version); \ docker build \ - -t dockerphpext/$(extension)-$(php_version) \ + -t $$BUILDER_IMAGE \ -f extensions/$(extension)/$(php_version)/Dockerfile.alpine \ + . && \ + docker build \ + -t $$TEST_IMAGE \ + --target test \ + --build-arg PHP_VERSION=$(php_version) \ + --build-arg DISTRO=alpine \ + --build-arg BUILDER_IMAGE=$$BUILDER_IMAGE \ + -f extensions/Dockerfile \ + . && \ + docker build \ + -t $$FINAL_IMAGE \ + --build-arg PHP_VERSION=$(php_version) \ + --build-arg DISTRO=alpine \ + --build-arg BUILDER_IMAGE=$$BUILDER_IMAGE \ + -f extensions/Dockerfile \ . - @EXT_VERSION=$$(docker run --rm dockerphpext/$(extension)-$(php_version) php --ri $(extension) | grep '$(extension) version =>' | awk '{print $$NF}'); \ - if [ -n "$$EXT_VERSION" ]; then \ - echo "Detected $(extension) version: $$EXT_VERSION"; \ - docker tag dockerphpext/$(extension)-$(php_version) dockerphpext/$(extension):$$EXT_VERSION-php$(php_version)-alpine; \ - echo "Tagged: dockerphpext/$(extension):php$(php_version)-alpine-$$EXT_VERSION"; \ - fi -act-build: - act -P ubuntu-latest=catthehacker/ubuntu:act-22.04 --workflows .github/workflows/build.yml --container-daemon-socket /var/run/docker.sock --matrix version:$(version) --matrix extension:$(extension); \ - -run-single-test: - set -e; \ - echo "PHP_VERSION=$$php_version"; \ - echo "###############################################"; \ +run-single-test: build + @set -e; \ + TEST_IMAGE=test-dockerphpext-local/$(extension)-$(php_version); \ echo "###############################################"; \ - echo "### Testing $(extension) PHP $$php_version"; \ + echo "### Testing $(extension) PHP $(php_version)"; \ echo "###"; \ docker run --rm \ - -v $$(pwd)/test.php /opt/php/tests/test.php \ - test-$(extension)-$$php_version \ + -v $$(pwd)/tests/test.php:/opt/php/tests/test.php \ + $$TEST_IMAGE \ php /opt/php/tests/test.php $(extension); \ - if docker run --rm test-$(extension)-$$php_version php -v 2>&1 | grep -Eqi 'Unable|Warning'; then \ + if docker run --rm $$TEST_IMAGE php -m 2>&1 | grep -Eqi 'Unable|Warning'; then \ echo "❌ PHP extension load failed"; \ exit 1; \ fi; \ echo ""; \ - echo "✅ Test passed"; \ - echo ""; \ - -run-test: - @if [ "$(extension)" != "*" ]; then \ - [ -d "extensions/$(extension)" ] || { echo "Extension not found"; exit 1; }; \ - fi; \ - set -euo pipefail; \ - for path in extensions/$(extension)/*/; do \ - [ -d "$$path" ] || continue; \ - php_version=$$(basename "$$path"); \ - $(MAKE) run-single-test extension=$(extension) php_version=$$php_version; \ - done + echo "✅ Test passed for $(extension) PHP $(php_version)"; \ + echo "" diff --git a/extensions/datadog/8.0/Dockerfile.alpine b/extensions/datadog/8.0/Dockerfile.alpine new file mode 100644 index 0000000..dffe4d1 --- /dev/null +++ b/extensions/datadog/8.0/Dockerfile.alpine @@ -0,0 +1,22 @@ +FROM php:8.0-alpine + +RUN apk add --no-cache $PHPIZE_DEPS patchelf + +COPY scripts/docker-php-ext-active /usr/local/bin/docker-php-ext-active +RUN chmod +x /usr/local/bin/docker-php-ext-active + +ENV DDTRACE_VERSION=1.16.0 +ENV DDTRACE_BUILD_DIR=/opt/ddtrace + +RUN set -xe \ + && mkdir -p ${DDTRACE_BUILD_DIR} \ + && curl -Ls -o ${DDTRACE_BUILD_DIR}/datadog-setup.php \ + https://github.com/DataDog/dd-trace-php/releases/download/${DDTRACE_VERSION}/datadog-setup.php \ + && php ${DDTRACE_BUILD_DIR}/datadog-setup.php --php-bin=all --enable-profiling \ + && docker-php-ext-active ddtrace \ + && docker-php-ext-active datadog-profiling \ + && docker-php-ext-active ddappsec \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/ddtrace.so \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/datadog-profiling.so \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/ddappsec.so \ + && rm -rf ${DDTRACE_BUILD_DIR} diff --git a/extensions/datadog/8.1/Dockerfile.alpine b/extensions/datadog/8.1/Dockerfile.alpine new file mode 100644 index 0000000..2f30fd8 --- /dev/null +++ b/extensions/datadog/8.1/Dockerfile.alpine @@ -0,0 +1,23 @@ +FROM php:8.1-alpine + +RUN apk add $PHPIZE_DEPS patchelf +COPY scripts/docker-php-ext-active /usr/local/bin/docker-php-ext-active +RUN chmod +x /usr/local/bin/docker-php-ext-active + +ENV DDTRACE_BUILD_DIR=/opt/ddtrace + +RUN set -xe; \ + mkdir -p ${DDTRACE_BUILD_DIR}; \ + curl -Ls -o ${DDTRACE_BUILD_DIR}/datadog-setup.php \ + https://github.com/DataDog/dd-trace-php/releases/download/1.16.0/datadog-setup.php + +WORKDIR ${DDTRACE_BUILD_DIR} + +RUN php datadog-setup.php --php-bin=all --enable-profiling + +RUN docker-php-ext-active ddtrace \ + && docker-php-ext-active datadog-profiling \ + && docker-php-ext-active ddappsec \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/ddtrace.so \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/datadog-profiling.so \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/ddappsec.so diff --git a/extensions/datadog/8.2/Dockerfile.alpine b/extensions/datadog/8.2/Dockerfile.alpine new file mode 100644 index 0000000..da050a3 --- /dev/null +++ b/extensions/datadog/8.2/Dockerfile.alpine @@ -0,0 +1,23 @@ +FROM php:8.2-alpine + +RUN apk add $PHPIZE_DEPS patchelf +COPY scripts/docker-php-ext-active /usr/local/bin/docker-php-ext-active +RUN chmod +x /usr/local/bin/docker-php-ext-active + +ENV DDTRACE_BUILD_DIR=/opt/ddtrace + +RUN set -xe; \ + mkdir -p ${DDTRACE_BUILD_DIR}; \ + curl -Ls -o ${DDTRACE_BUILD_DIR}/datadog-setup.php \ + https://github.com/DataDog/dd-trace-php/releases/download/1.16.0/datadog-setup.php + +WORKDIR ${DDTRACE_BUILD_DIR} + +RUN php datadog-setup.php --php-bin=all --enable-profiling + +RUN docker-php-ext-active ddtrace \ + && docker-php-ext-active datadog-profiling \ + && docker-php-ext-active ddappsec \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/ddtrace.so \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/datadog-profiling.so \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/ddappsec.so diff --git a/extensions/datadog/8.3/Dockerfile.alpine b/extensions/datadog/8.3/Dockerfile.alpine new file mode 100644 index 0000000..a76082f --- /dev/null +++ b/extensions/datadog/8.3/Dockerfile.alpine @@ -0,0 +1,23 @@ +FROM php:8.3-alpine + +RUN apk add $PHPIZE_DEPS patchelf +COPY scripts/docker-php-ext-active /usr/local/bin/docker-php-ext-active +RUN chmod +x /usr/local/bin/docker-php-ext-active + +ENV DDTRACE_BUILD_DIR=/opt/ddtrace + +RUN set -xe; \ + mkdir -p ${DDTRACE_BUILD_DIR}; \ + curl -Ls -o ${DDTRACE_BUILD_DIR}/datadog-setup.php \ + https://github.com/DataDog/dd-trace-php/releases/download/1.16.0/datadog-setup.php + +WORKDIR ${DDTRACE_BUILD_DIR} + +RUN php datadog-setup.php --php-bin=all --enable-profiling + +RUN docker-php-ext-active ddtrace \ + && docker-php-ext-active datadog-profiling \ + && docker-php-ext-active ddappsec \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/ddtrace.so \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/datadog-profiling.so \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/ddappsec.so diff --git a/extensions/datadog/8.4/Dockerfile.alpine b/extensions/datadog/8.4/Dockerfile.alpine new file mode 100644 index 0000000..bfb16e3 --- /dev/null +++ b/extensions/datadog/8.4/Dockerfile.alpine @@ -0,0 +1,23 @@ +FROM php:8.4-alpine + +RUN apk add $PHPIZE_DEPS patchelf +COPY scripts/docker-php-ext-active /usr/local/bin/docker-php-ext-active +RUN chmod +x /usr/local/bin/docker-php-ext-active + +ENV DDTRACE_BUILD_DIR=/opt/ddtrace + +RUN set -xe; \ + mkdir -p ${DDTRACE_BUILD_DIR}; \ + curl -Ls -o ${DDTRACE_BUILD_DIR}/datadog-setup.php \ + https://github.com/DataDog/dd-trace-php/releases/download/1.16.0/datadog-setup.php + +WORKDIR ${DDTRACE_BUILD_DIR} + +RUN php datadog-setup.php --php-bin=all --enable-profiling + +RUN docker-php-ext-active ddtrace \ + && docker-php-ext-active datadog-profiling \ + && docker-php-ext-active ddappsec \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/ddtrace.so \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/datadog-profiling.so \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/ddappsec.so diff --git a/extensions/datadog/8.5/Dockerfile.alpine b/extensions/datadog/8.5/Dockerfile.alpine new file mode 100644 index 0000000..1ef9e3a --- /dev/null +++ b/extensions/datadog/8.5/Dockerfile.alpine @@ -0,0 +1,23 @@ +FROM php:8.5-alpine + +RUN apk add $PHPIZE_DEPS patchelf +COPY scripts/docker-php-ext-active /usr/local/bin/docker-php-ext-active +RUN chmod +x /usr/local/bin/docker-php-ext-active + +ENV DDTRACE_BUILD_DIR=/opt/ddtrace + +RUN set -xe; \ + mkdir -p ${DDTRACE_BUILD_DIR}; \ + curl -Ls -o ${DDTRACE_BUILD_DIR}/datadog-setup.php \ + https://github.com/DataDog/dd-trace-php/releases/download/1.16.0/datadog-setup.php + +WORKDIR ${DDTRACE_BUILD_DIR} + +RUN php datadog-setup.php --php-bin=all --enable-profiling + +RUN docker-php-ext-active ddtrace \ + && docker-php-ext-active datadog-profiling \ + && docker-php-ext-active ddappsec \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/ddtrace.so \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/datadog-profiling.so \ + && patchelf --set-rpath '/opt/php/lib' /opt/php/extensions/ddappsec.so