PHPC-2721: Test PECL package installation on Alpine Linux (#2024) #2678
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "Tests" | |
| on: | |
| pull_request: | |
| branches: | |
| - "v*.*" | |
| - "feature/*" | |
| push: | |
| branches: | |
| - "v*.*" | |
| - "feature/*" | |
| jobs: | |
| linux-test: | |
| name: "Linux Tests" | |
| runs-on: "${{ matrix.os }}" | |
| continue-on-error: ${{ matrix.allow_failures || false }} | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| os: | |
| - "ubuntu-22.04" | |
| php-version: | |
| - "8.1" | |
| - "8.2" | |
| - "8.3" | |
| - "8.4" | |
| - "8.5" | |
| mongodb-version: | |
| - "6.0" | |
| topology: | |
| - "server" | |
| include: | |
| - os: "ubuntu-24.04" | |
| php-version: "8.1" | |
| mongodb-version: "8.0" | |
| topology: "replica_set" | |
| - os: "ubuntu-24.04" | |
| php-version: "8.1" | |
| mongodb-version: "8.0" | |
| topology: "sharded_cluster" | |
| - os: "ubuntu-22.04" | |
| php-version: "8.1" | |
| mongodb-version: "6.0" | |
| topology: "replica_set" | |
| - os: "ubuntu-22.04" | |
| php-version: "8.1" | |
| mongodb-version: "6.0" | |
| topology: "sharded_cluster" | |
| - os: "ubuntu-24.04" | |
| php-version: "8.6" | |
| mongodb-version: "8.0" | |
| topology: "replica_set" | |
| allow_failures: true | |
| steps: | |
| - name: "Checkout" | |
| uses: "actions/checkout@v6" | |
| with: | |
| submodules: true | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.13' | |
| - name: Setup MongoDB | |
| id: setup-mongodb | |
| uses: ./tests/drivers-evergreen-tools | |
| with: | |
| version: ${{ matrix.mongodb-version }} | |
| topology: ${{ matrix.topology }} | |
| - name: "Build Driver" | |
| id: build-driver | |
| uses: ./.github/actions/linux/build | |
| with: | |
| version: ${{ matrix.php-version }} | |
| - name: "Run Tests" | |
| run: make test | |
| env: | |
| TEST_PHP_ARGS: "-q -x --show-diff -g FAIL,XFAIL,BORK,WARN,LEAK,SKIP" | |
| TEST_PHP_JUNIT: "test-results.xml" | |
| MONGODB_URI: ${{ steps.setup-mongodb.outputs.cluster-uri }} | |
| - name: Upload test results to Codecov | |
| uses: codecov/test-results-action@v1 | |
| with: | |
| disable_search: true | |
| files: test-results.xml | |
| flags: "${{ matrix.mongodb-version }}-${{ matrix.topology }}" | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| pecl-test: | |
| name: "Test PECL package" | |
| runs-on: "ubuntu-latest" | |
| env: | |
| PHP_VERSION: "8.3" | |
| steps: | |
| - name: "Checkout" | |
| uses: "actions/checkout@v6" | |
| with: | |
| submodules: true | |
| - name: "Build Driver" | |
| id: build-driver | |
| uses: ./.github/actions/linux/build | |
| with: | |
| version: ${{ env.PHP_VERSION }} | |
| - name: "Write changelog file for packaging" | |
| run: echo "Testing" > changelog | |
| - name: "Build package.xml" | |
| run: "make package.xml RELEASE_NOTES_FILE=$(pwd)/changelog" | |
| - name: "Build PECL package" | |
| run: "make package" | |
| # PECL always uses the version for the package name. | |
| # Read it from the version file and store in env to use when uploading artifacts | |
| - name: "Read current package version" | |
| run: | | |
| PACKAGE_VERSION=$(./bin/update-release-version.php get-version) | |
| echo "PACKAGE_VERSION=${PACKAGE_VERSION}" >> "$GITHUB_ENV" | |
| echo "PACKAGE_FILE=mongodb-${PACKAGE_VERSION}.tgz" >> "$GITHUB_ENV" | |
| - name: "Install release archive to verify correctness" | |
| run: sudo pecl install ${{ env.PACKAGE_FILE }} | |
| - name: "Install on Alpine Linux" | |
| run: | | |
| cp "${{ env.PACKAGE_FILE }}" .github/docker/ | |
| docker build .github/docker/ -f .github/docker/Dockerfile.pecl-alpine | |
| windows-test: | |
| name: "Windows Tests" | |
| runs-on: "${{ matrix.os }}" | |
| defaults: | |
| run: | |
| shell: cmd | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ "windows-2022" ] | |
| # Note: keep this in sync with the Windows matrix in build-windows-package.yml | |
| php-version: | |
| - "8.1" | |
| - "8.2" | |
| - "8.3" | |
| - "8.4" | |
| - "8.5" | |
| ts: [ ts, nts ] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - id: setup-mongodb | |
| uses: mongodb-labs/drivers-evergreen-tools@master | |
| with: | |
| version: "7.0" | |
| topology: "server" | |
| - name: "Build and Test" | |
| id: build-driver | |
| uses: ./.github/actions/windows/build | |
| with: | |
| php-version: ${{ matrix.php-version }} | |
| ts: ${{ matrix.ts }} | |
| run-tests: true | |
| env: | |
| NO_INTERACTION: 1 | |
| REPORT_EXIT_STATUS: 1 | |
| MONGODB_URI: ${{ steps.setup-mongodb.outputs.cluster-uri }} | |
| CRYPT_SHARED_LIB_PATH: ${{ steps.setup-mongodb.outputs.crypt-shared-lib-path }} | |
| test-system-libs: | |
| name: "System Library Tests" | |
| runs-on: "ubuntu-latest" | |
| env: | |
| PHP_VERSION: "8.3" | |
| LIBMONGOCRYPT_VERSION: "1.18" | |
| # Note: include the patch version when referring to a libmongoc release tarball | |
| LIBMONGOC_VERSION: "2.3.0" | |
| SERVER_VERSION: "8.0" | |
| steps: | |
| - name: "Checkout" | |
| uses: "actions/checkout@v6" | |
| with: | |
| submodules: true | |
| - name: "Install libmongocrypt" | |
| uses: ./.github/actions/linux/build-libmongocrypt | |
| with: | |
| version: ${{ env.LIBMONGOCRYPT_VERSION }} | |
| - name: "Build libmongoc" | |
| uses: ./.github/actions/linux/build-libmongoc | |
| with: | |
| version: ${{ env.LIBMONGOC_VERSION }} | |
| - name: "Build Driver" | |
| uses: ./.github/actions/linux/build | |
| with: | |
| version: ${{ env.PHP_VERSION }} | |
| configureOpts: "--with-mongodb-system-libs=yes" | |
| - name: "Check driver version" | |
| shell: bash | |
| run: make show-config | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.13" | |
| - name: Setup MongoDB | |
| id: setup-mongodb | |
| uses: ./tests/drivers-evergreen-tools | |
| with: | |
| version: ${{ env.SERVER_VERSION }} | |
| topology: "server" | |
| - name: "Run Tests" | |
| run: make test | |
| env: | |
| TEST_PHP_ARGS: "-q -x --show-diff -g FAIL,XFAIL,BORK,WARN,LEAK,SKIP" | |
| TEST_PHP_JUNIT: "test-results.xml" | |
| MONGODB_URI: ${{ steps.setup-mongodb.outputs.cluster-uri }} | |
| - name: Upload test results to Codecov | |
| uses: codecov/test-results-action@v1 | |
| with: | |
| disable_search: true | |
| files: test-results.xml | |
| flags: "${{ env.SERVER_VERSION }}-server" | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| # Verifies that the extension can be compiled statically into PHP (i.e. with | |
| # --enable-mongodb instead of --enable-mongodb=shared), as done by projects | |
| # like StaticPHP. This exercises the PHP in-tree build path where configure | |
| # is invoked from the PHP source root rather than the extension directory. | |
| # Two modes are tested: | |
| # in-source — configure and build run from the PHP source directory | |
| # (PHP source dir = PHP build dir, layout 3) | |
| # out-of-source — configure and build run from a separate build directory | |
| # (PHP source dir ≠ PHP build dir, layout 4) | |
| test-in-tree-build: | |
| name: "Static PHP Build (${{ matrix.mode }})" | |
| runs-on: "ubuntu-latest" | |
| env: | |
| PHP_VERSION: "8.5.5" | |
| strategy: | |
| matrix: | |
| mode: ['in-source', 'out-of-source'] | |
| steps: | |
| - name: "Checkout" | |
| uses: "actions/checkout@v6" | |
| with: | |
| submodules: true | |
| path: "mongo-php-driver" | |
| - name: "Install build dependencies" | |
| run: | | |
| sudo apt-get update -q | |
| sudo apt-get install -y \ | |
| autoconf \ | |
| bison \ | |
| libsqlite3-dev \ | |
| libssl-dev \ | |
| libxml2-dev \ | |
| pkg-config \ | |
| re2c | |
| - name: "Download PHP ${{ env.PHP_VERSION }} source" | |
| run: | | |
| curl -fsSL "https://www.php.net/distributions/php-${{ env.PHP_VERSION }}.tar.gz" | tar -xz | |
| mv "php-${{ env.PHP_VERSION }}" php-src | |
| - name: "Link extension into PHP source tree" | |
| run: ln -s "$GITHUB_WORKSPACE/mongo-php-driver" "$GITHUB_WORKSPACE/php-src/ext/mongodb" | |
| - name: "Generate PHP build scripts" | |
| run: cd "$GITHUB_WORKSPACE/php-src" && ./buildconf --force | |
| - name: "Set build directory" | |
| run: | | |
| if [ "${{ matrix.mode }}" = "out-of-source" ]; then | |
| mkdir -p /tmp/php-build | |
| echo "PHP_BUILD_DIR=/tmp/php-build" >> "$GITHUB_ENV" | |
| elif [ "${{ matrix.mode }}" = "in-source" ]; then | |
| echo "PHP_BUILD_DIR=$GITHUB_WORKSPACE/php-src" >> "$GITHUB_ENV" | |
| else | |
| echo "Invalid mode" | |
| exit 1 | |
| fi | |
| # Note: --with-openssl is needed for the bundled libmongoc's TLS support. | |
| - name: "Configure PHP with MongoDB extension (static)" | |
| run: | | |
| [ -n "$PHP_BUILD_DIR" ] || { echo "PHP_BUILD_DIR is not set"; exit 1; } | |
| "$GITHUB_WORKSPACE/php-src/configure" \ | |
| --enable-debug \ | |
| --enable-cli \ | |
| --enable-mongodb \ | |
| --enable-mongodb-developer-flags \ | |
| --with-openssl | |
| working-directory: ${{ env.PHP_BUILD_DIR }} | |
| - name: "Build PHP" | |
| run: make -j$(nproc) | |
| working-directory: ${{ env.PHP_BUILD_DIR }} | |
| - name: "Verify MongoDB extension is compiled in" | |
| run: | | |
| "$PHP_BUILD_DIR/sapi/cli/php" -m | grep -ix mongodb | |
| "$PHP_BUILD_DIR/sapi/cli/php" --ri mongodb | |
| test-out-of-source-build: | |
| name: "Out-of-source Build" | |
| runs-on: "ubuntu-latest" | |
| env: | |
| PHP_VERSION: "8.5" | |
| steps: | |
| - name: "Checkout" | |
| uses: "actions/checkout@v6" | |
| with: | |
| submodules: true | |
| - name: "Install PHP" | |
| uses: "shivammathur/setup-php@v2" | |
| with: | |
| php-version: "${{ env.PHP_VERSION }}" | |
| extensions: "none,date,json,spl,standard,xml" | |
| env: | |
| debug: true | |
| - name: "phpize" | |
| run: phpize | |
| - name: "Build driver (out-of-source)" | |
| run: | | |
| mkdir -p /tmp/mongodb-build | |
| cd /tmp/mongodb-build | |
| ${GITHUB_WORKSPACE}/configure --enable-mongodb-developer-flags | |
| make all |