From e3b39d19156d8e7d4252486f3e91e14b8f2d5112 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 | 34 ++++++++++++++++++++++++++++++++++ Dockerfile | 7 +++++++ README.md | 2 ++ composer.json | 5 +++-- 4 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 Dockerfile diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 14fffeaa..7c0f656f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -173,3 +173,37 @@ 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: Build and cache + # uses: docker/build-push-action@v5 + # with: + # context: . + # push: false + # tags: "alpine-base:${{ matrix.arch }}" + # cache-from: type=gha + # cache-to: type=gha,mode=max + # platforms: linux/${{ matrix.arch }} + - 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 'apk add --no-cache shared-mime-info && 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 118e7071..2dd75817 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 6eaf3eea..3a3e67dd 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": {