diff --git a/.github/workflows/build-v84.yml b/.github/workflows/build-v84.yml new file mode 100644 index 0000000..9a825f7 --- /dev/null +++ b/.github/workflows/build-v84.yml @@ -0,0 +1,52 @@ +name: Build PHP 8.4 + +on: + push: + paths: + - 'libs/amazon-linux-2023-v84/**' + - '.github/workflows/build-v84.yml' + pull_request: + paths: + - 'libs/amazon-linux-2023-v84/**' + - '.github/workflows/build-v84.yml' + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build Docker image + working-directory: libs/amazon-linux-2023-v84 + run: make build + + - name: Start container + run: | + docker run -d --name php84-test libphp/amazon-linux-2023-v84 sleep 300 + + - name: Validate PHP version + run: | + docker exec php84-test /usr/bin/php -v + + - name: Validate MongoDB extension is loaded + run: | + docker exec php84-test /usr/bin/php -m | grep -q mongodb + echo "MongoDB extension is available" + + - name: Validate MongoDB extension details + run: | + docker exec php84-test /usr/bin/php -i | grep -A5 "mongodb" + + - name: Test MongoDB extension functionality + run: | + docker exec php84-test /usr/bin/php -r "echo 'MongoDB version: ' . phpversion('mongodb') . PHP_EOL;" + + - name: Cleanup + if: always() + run: | + docker rm -f php84-test || true diff --git a/libs/almalinux-9-v85/Makefile b/libs/almalinux-9-v85/Makefile index 7e48a6a..47a0fe1 100644 --- a/libs/almalinux-9-v85/Makefile +++ b/libs/almalinux-9-v85/Makefile @@ -82,6 +82,7 @@ dist: build docker exec ${DOCKER_CONTAINER} /bin/cat /opt/remi/php${DIST_PHP}/root/usr/lib64/php/modules/phar.so > ${DIST_PHP_MODULES_PATH}/phar.so docker exec ${DOCKER_CONTAINER} /bin/cat /opt/remi/php${DIST_PHP}/root/usr/lib64/php/modules/posix.so > ${DIST_PHP_MODULES_PATH}/posix.so || true docker exec ${DOCKER_CONTAINER} /bin/cat /opt/remi/php${DIST_PHP}/root/usr/lib64/php/modules/redis.so > ${DIST_PHP_MODULES_PATH}/redis.so || true + docker exec ${DOCKER_CONTAINER} /bin/cat /opt/remi/php${DIST_PHP}/root/usr/lib64/php/modules/mongodb.so > ${DIST_PHP_MODULES_PATH}/mongodb.so || true docker exec ${DOCKER_CONTAINER} /bin/cat /opt/remi/php${DIST_PHP}/root/usr/lib64/php/modules/shmop.so > ${DIST_PHP_MODULES_PATH}/shmop.so || true docker exec ${DOCKER_CONTAINER} /bin/cat /opt/remi/php${DIST_PHP}/root/usr/lib64/php/modules/simplexml.so > ${DIST_PHP_MODULES_PATH}/simplexml.so docker exec ${DOCKER_CONTAINER} /bin/cat /opt/remi/php${DIST_PHP}/root/usr/lib64/php/modules/soap.so > ${DIST_PHP_MODULES_PATH}/soap.so diff --git a/libs/almalinux-9-v85/build/Dockerfile b/libs/almalinux-9-v85/build/Dockerfile index 5bd2918..a364ebc 100644 --- a/libs/almalinux-9-v85/build/Dockerfile +++ b/libs/almalinux-9-v85/build/Dockerfile @@ -49,6 +49,11 @@ RUN dnf install -y \ ${PHP}-php-pecl-redis6 \ || true +# Install MongoDB extension from PECL (may not be available as Remi package for PHP 8.5 yet) +RUN dnf install -y ${PHP}-php-devel ${PHP}-php-pear openssl-devel +RUN source /opt/remi/${PHP}/enable && pecl install mongodb +RUN echo "extension=mongodb.so" > /etc/opt/remi/${PHP}/php.d/50-mongodb.ini + # Install PostgreSQL client library RUN dnf install -y postgresql @@ -64,7 +69,7 @@ RUN patchelf --set-rpath '$ORIGIN' /opt/remi/${PHP}/root/usr/bin/php || true RUN patchelf --set-rpath '$ORIGIN' /opt/remi/${PHP}/root/usr/bin/php-cgi || true RUN patchelf --set-rpath '$ORIGIN' /opt/remi/${PHP}/root/usr/sbin/php-fpm || true -# Patch extension modules +# Patch extension modules (includes PECL-compiled mongodb) RUN for so in /opt/remi/${PHP}/root/usr/lib64/php/modules/*.so; do \ patchelf --set-rpath '$ORIGIN' "$so" || true; \ done diff --git a/libs/almalinux-9-v85/build/conf/php.ini b/libs/almalinux-9-v85/build/conf/php.ini index 9c39753..124cf90 100644 --- a/libs/almalinux-9-v85/build/conf/php.ini +++ b/libs/almalinux-9-v85/build/conf/php.ini @@ -55,6 +55,7 @@ extension=shmop extension=sysvmsg extension=sysvsem extension=sysvshm +extension=mongodb ; Priority 40 extension=apcu diff --git a/libs/amazon-linux-2023-v84/Makefile b/libs/amazon-linux-2023-v84/Makefile index df9d616..f5c322c 100644 --- a/libs/amazon-linux-2023-v84/Makefile +++ b/libs/amazon-linux-2023-v84/Makefile @@ -15,7 +15,7 @@ DOCKER_PLATFORM=linux/amd64 # ###################### build: - docker buildx build --platform ${DOCKER_PLATFORM} -t ${DOCKER_IMAGE} -f ./build/Dockerfile ./build + docker buildx build --load --platform ${DOCKER_PLATFORM} -t ${DOCKER_IMAGE} -f ./build/Dockerfile ./build # ################################################# # Separate PHP bins + shared libs from Docker image @@ -83,6 +83,7 @@ dist: build docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/phar.so > ${DIST_PHP_MODULES_PATH}/phar.so docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/posix.so > ${DIST_PHP_MODULES_PATH}/posix.so docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/redis.so > ${DIST_PHP_MODULES_PATH}/redis.so + docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/mongodb.so > ${DIST_PHP_MODULES_PATH}/mongodb.so docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/shmop.so > ${DIST_PHP_MODULES_PATH}/shmop.so docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/simplexml.so > ${DIST_PHP_MODULES_PATH}/simplexml.so docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/soap.so > ${DIST_PHP_MODULES_PATH}/soap.so diff --git a/libs/amazon-linux-2023-v84/build/Dockerfile b/libs/amazon-linux-2023-v84/build/Dockerfile index ac6affa..dd09dab 100644 --- a/libs/amazon-linux-2023-v84/build/Dockerfile +++ b/libs/amazon-linux-2023-v84/build/Dockerfile @@ -46,6 +46,19 @@ RUN dnf install -y \ ${PHP}-pecl-msgpack \ ${PHP}-pecl-redis6 +# Install MongoDB extension - compile from source (PEAR not available in AL2023) +RUN dnf install -y ${PHP}-devel openssl-devel cyrus-sasl-devel +RUN curl -sL https://pecl.php.net/get/mongodb -o /tmp/mongodb.tgz && \ + mkdir -p /tmp/mongodb && \ + tar -xzf /tmp/mongodb.tgz -C /tmp/mongodb --strip-components=1 && \ + cd /tmp/mongodb && \ + phpize && \ + ./configure --with-php-config=/usr/bin/php-config && \ + make -j$(nproc) && \ + make install && \ + echo "extension=mongodb.so" > /etc/php.d/50-mongodb.ini && \ + rm -rf /tmp/mongodb /tmp/mongodb.tgz + # Install PostgreSQL client library RUN dnf install -y postgresql15 @@ -58,7 +71,7 @@ RUN patchelf --set-rpath '$ORIGIN' /usr/bin/php || true RUN patchelf --set-rpath '$ORIGIN' /usr/bin/php-cgi || true RUN patchelf --set-rpath '$ORIGIN' /usr/sbin/php-fpm || true -# Patch extension modules +# Patch extension modules (native packages + compiled mongodb) RUN for so in /usr/lib64/php8.4/modules/*.so; do \ patchelf --set-rpath '$ORIGIN' "$so" || true; \ done diff --git a/libs/amazon-linux-2023-v84/build/conf/php.ini b/libs/amazon-linux-2023-v84/build/conf/php.ini index 8241626..99aea87 100644 --- a/libs/amazon-linux-2023-v84/build/conf/php.ini +++ b/libs/amazon-linux-2023-v84/build/conf/php.ini @@ -55,6 +55,7 @@ extension=shmop extension=sysvmsg extension=sysvsem extension=sysvshm +extension=mongodb ; Priority 40 extension=apcu