From 2944deb2f86e0ec3362fb29857be426b7a0e6494 Mon Sep 17 00:00:00 2001 From: "tien.xuan.vo" Date: Tue, 14 May 2024 09:34:47 +0700 Subject: [PATCH] feat: Support Alpine --- .github/workflows/build.yml | 25 +++++++++++++++++++ Dockerfile | 7 ++++++ README.md | 2 ++ composer.json | 5 ++-- .../provider/composer.json | 7 +++--- 5 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 Dockerfile diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 14fffeaa..5dcc7f56 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -173,3 +173,28 @@ jobs: uses: coverallsapp/github-action@v2 with: parallel-finished: true + + test-alpine: + runs-on: ubuntu-latest + needs: + - php-cs + strategy: + fail-fast: false + matrix: + arch: [ amd64, arm64 ] + + steps: + - uses: actions/checkout@v4 + name: Checkout repository + - name: Set up QEMU + if: matrix.arch == 'arm64' + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + if: matrix.arch == 'arm64' + uses: docker/setup-buildx-action@v3 + - name: run musl # If shared-mime-info not installed - Expected binary contents to have content type 'image/jpeg' but detected contents was 'application/octet-stream' + if: matrix.arch == 'amd64' + run: docker run --platform=linux/${{ matrix.arch }} --rm -v $PWD:/home you54f/pact-php:alpine-base-${{ matrix.arch }} /bin/sh -c 'apk add --no-cache shared-mime-info && cd /home && composer install && composer gen-lib && composer test' + - name: run musl # If shared-mime-info installed - Expected binary contents to have content type 'image/jpeg' but detected contents was 'application/octet-stream' + if: matrix.arch == 'arm64' + run: docker run --platform=linux/${{ matrix.arch }} --rm -v $PWD:/home you54f/pact-php:alpine-base-${{ matrix.arch }} /bin/sh -c 'cd /home && composer install && composer gen-lib && composer test' diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..a2a2071a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +FROM php:8.3-alpine +RUN apk add --no-cache linux-headers libffi-dev protoc protobuf-dev musl-dev autoconf gcc g++ make +COPY --from=composer/composer:2-bin /composer /usr/local/bin/composer +RUN docker-php-ext-install sockets +RUN docker-php-ext-install ffi +RUN pecl install grpc +RUN echo 'extension=grpc.so' >> /usr/local/etc/php/conf.d/grpc.ini diff --git a/README.md b/README.md index 163e1386..0de11ae7 100644 --- a/README.md +++ b/README.md @@ -270,6 +270,8 @@ _\*_ v3 support is limited to the subset of functionality required to enable lan | Linux | arm64 | ✅ | 9.x + | | Windows | x86_64 | ✅ | All | | Windows | x86 | ✅ | 9.x - | +| Alpine | x86_64 | ✅ | 10.x + | +| Alpine | arm64 | ✅ | 10.x + | diff --git a/composer.json b/composer.json index 7d055ff4..03869910 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ "composer/semver": "^1.4.0|^3.2.0", "symfony/process": "^5.4|^6.0|^7.0", "guzzlehttp/psr7": "^2.4.5", - "pact-foundation/composer-downloads-plugin": "^2.0" + "pact-foundation/composer-downloads-plugin": "^2.1" }, "require-dev": { "ext-sockets": "*", @@ -123,9 +123,10 @@ "{$prefix}": "PHP_OS_FAMILY === 'Windows' ? 'pact_ffi' : 'libpact_ffi'", "{$os}": "PHP_OS === 'Darwin' ? 'osx' : strtolower(PHP_OS_FAMILY)", "{$architecture}": "in_array(php_uname('m'), ['arm64', 'aarch64']) ? (PHP_OS === 'Darwin' ? 'aarch64-apple-darwin' : 'aarch64') : 'x86_64'", + "{$musl}": "PHP_OS === 'Linux' && musl() === true ? '-musl' : ''", "{$extension}": "PHP_OS_FAMILY === 'Windows' ? 'dll' : (PHP_OS === 'Darwin' ? 'dylib' : 'so')" }, - "url": "https://github.com/pact-foundation/pact-reference/releases/download/libpact_ffi-v{$version}/{$prefix}-{$os}-{$architecture}.{$extension}.gz", + "url": "https://github.com/pact-foundation/pact-reference/releases/download/libpact_ffi-v{$version}/{$prefix}-{$os}-{$architecture}{$musl}.{$extension}.gz", "path": "bin/pact-ffi-lib/pact.{$extension}" }, "pact-stub-server": { diff --git a/example/protobuf-sync-message/provider/composer.json b/example/protobuf-sync-message/provider/composer.json index b89a2c57..49faed38 100644 --- a/example/protobuf-sync-message/provider/composer.json +++ b/example/protobuf-sync-message/provider/composer.json @@ -3,7 +3,7 @@ "require": { "grpc/grpc": "^1.57", "spiral/roadrunner-grpc": "^3.2", - "pact-foundation/composer-downloads-plugin": "^2.0" + "pact-foundation/composer-downloads-plugin": "^2.1" }, "require-dev": { "ext-grpc": "*" @@ -16,11 +16,12 @@ "rr": { "version": "2023.3.10", "variables": { - "{$os}": "strtolower(PHP_OS_FAMILY)", + "{$os}": "PHP_OS === 'Linux' && musl() === true ? 'unknown' : strtolower(PHP_OS_FAMILY)", + "{$musl}": "PHP_OS === 'Linux' && musl() === true ? '-musl' : ''", "{$architecture}": "in_array(php_uname('m'), ['x86_64', 'AMD64']) ? 'amd64' : 'arm64'", "{$extension}": "(PHP_OS_FAMILY === 'Windows' || (PHP_OS_FAMILY === 'Darwin' && php_uname('m') === 'x86_64')) ? 'zip' : 'tar.gz'" }, - "url": "https://github.com/roadrunner-server/roadrunner/releases/download/v{$version}/roadrunner-{$version}-{$os}-{$architecture}.{$extension}", + "url": "https://github.com/roadrunner-server/roadrunner/releases/download/v{$version}/roadrunner-{$version}-{$os}{$musl}-{$architecture}.{$extension}", "path": "bin/roadrunner" } }