diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2e09eca..3627c80 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,12 +12,11 @@ on: jobs: build: - name: Build and deploy ${{ matrix.stack.name }} extensions with PHP ${{ matrix.series.php }} on ${{ matrix.stack.os }} + name: Build PHP ${{ matrix.series.php }} (${{ matrix.stack.name }}, ${{ matrix.stack.arch }}) runs-on: ${{ matrix.stack.os }} timeout-minutes: 20 env: S3_BUCKET: ${{ secrets.S3_BUCKET || 'heroku-php-extensions' }} - S3_REGION: ${{ secrets.S3_REGION || '' }} S3_PREFIX: ${{ inputs.S3_PREFIX || matrix.stack.prefix }} BUILDPACK: ./vendor/heroku/heroku-buildpack-php AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} @@ -28,20 +27,26 @@ jobs: matrix: stack: - name: "heroku-22" + arch: "amd64" prefix: "dist-heroku-22-develop/" + upstream: "dist-heroku-22-stable/" os: "ubuntu-latest" - name: "heroku-24" + arch: "amd64" prefix: "dist-heroku-24-amd64-develop/" + upstream: "dist-heroku-24-amd64-stable/" os: "ubuntu-latest" - name: "heroku-24" + arch: "arm64" prefix: "dist-heroku-24-arm64-develop/" + upstream: "dist-heroku-24-arm64-stable/" os: "ubuntu-24.04-arm" series: - - {version: 20210902, php: "8.1", liblzf: "3.6", lz4: "1.9.3", zstd: "1.4.9", igbinary: "3.2.15", msgpack: "2.2.0", redis: ["5.3.7", "6.3.0"], relay: ["0.6.8"], swoole: ["4.8.13", "5.1.8", "6.1.7"], openswoole: ["4.12.1", "22.1.2"]} - - {version: 20220829, php: "8.2", liblzf: "3.6", lz4: "1.9.3", zstd: "1.4.9", igbinary: "3.2.15", msgpack: "2.2.0", redis: ["5.3.7", "6.3.0"], relay: ["0.6.8"], swoole: ["4.8.13", "5.1.8", "6.1.7"], openswoole: ["22.1.2", "25.2.0", "26.2.0"]} - - {version: 20230831, php: "8.3", liblzf: "3.6", lz4: "1.9.3", zstd: "1.4.9", igbinary: "3.2.15", msgpack: "2.2.0", redis: ["5.3.7", "6.3.0"], relay: ["0.6.8", "0.20.0"], swoole: ["5.1.8", "6.1.7"], openswoole: ["22.1.2", "25.2.0", "26.2.0"]} - - {version: 20240924, php: "8.4", liblzf: "3.6", lz4: "1.9.3", zstd: "1.4.9", igbinary: "3.2.15", msgpack: "2.2.0", redis: ["6.3.0"], relay: ["0.20.0"], swoole: ["6.1.7"], openswoole: ["25.2.0", "26.2.0"]} - - {version: 20250925, php: "8.5", liblzf: "3.6", lz4: "1.10.0", zstd: "1.5.7", igbinary: "3.2.17RC1", msgpack: "2.2.0", redis: ["6.3.0"], relay: ["0.20.0"], swoole: ["6.2.0RC1"], openswoole: ["26.2.0"]} + - { version: 20210902, php: "8.1", liblzf: "3.6", lz4: "1.9.3", zstd: "1.4.9", igbinary: "3.2.15", msgpack: "2.2.0", redis: ["5.3.7", "6.3.0"], relay: ["0.6.8"], swoole: ["4.8.13", "5.1.8", "6.1.7"], openswoole: ["4.12.1", "22.1.2"] } + - { version: 20220829, php: "8.2", liblzf: "3.6", lz4: "1.9.3", zstd: "1.4.9", igbinary: "3.2.15", msgpack: "2.2.0", redis: ["5.3.7", "6.3.0"], relay: ["0.6.8"], swoole: ["4.8.13", "5.1.8", "6.1.7"], openswoole: ["22.1.2", "25.2.0", "26.2.0"] } + - { version: 20230831, php: "8.3", liblzf: "3.6", lz4: "1.9.3", zstd: "1.4.9", igbinary: "3.2.15", msgpack: "2.2.0", redis: ["5.3.7", "6.3.0"], relay: ["0.6.8", "0.20.0"], swoole: ["5.1.8", "6.1.7"], openswoole: ["22.1.2", "25.2.0", "26.2.0"] } + - { version: 20240924, php: "8.4", liblzf: "3.6", lz4: "1.9.3", zstd: "1.4.9", igbinary: "3.2.15", msgpack: "2.2.0", redis: ["6.3.0"], relay: ["0.20.0"], swoole: ["6.1.7"], openswoole: ["25.2.0", "26.2.0"] } + - { version: 20250925, php: "8.5", liblzf: "3.6", lz4: "1.10.0", zstd: "1.5.7", igbinary: "3.2.17RC1", msgpack: "2.2.0", redis: ["6.3.0"], relay: ["0.20.0"], swoole: ["6.2.0RC1"], openswoole: ["26.2.0"] } exclude: # heroku-24 no longer supports php-8.1 - stack: @@ -52,7 +57,9 @@ jobs: # heroku-24 cannot compile openswoole 4.12.1 anymore, include for heroku-22 only - stack: name: "heroku-22" + arch: "amd64" prefix: "dist-heroku-22-develop/" + upstream: "dist-heroku-22-stable/" os: "ubuntu-latest" series: version: 20220829 @@ -86,35 +93,35 @@ jobs: run: ./scripts/build-lib.sh ${{ matrix.stack.name }} zstd "${{ matrix.series.zstd }}" true - name: Build igbinary extension - run: ./scripts/build-extension.sh ${{ matrix.stack.name }} ${{ matrix.series.php }} ${{ matrix.series.version }} igbinary "${{ matrix.series.igbinary }}" "php-${{ matrix.series.php }}.*" ${{ matrix.stack.prefix }} true + run: ./scripts/build-extension.sh ${{ matrix.stack.name }} ${{ matrix.series.php }} ${{ matrix.series.version }} igbinary "${{ matrix.series.igbinary }}" "php-${{ matrix.series.php }}.*" ${{ matrix.stack.upstream }} true - name: Build msgpack extension - run: ./scripts/build-extension.sh ${{ matrix.stack.name }} ${{ matrix.series.php }} ${{ matrix.series.version }} msgpack "${{ matrix.series.msgpack }}" "php-${{ matrix.series.php }}.*" ${{ matrix.stack.prefix }} true + run: ./scripts/build-extension.sh ${{ matrix.stack.name }} ${{ matrix.series.php }} ${{ matrix.series.version }} msgpack "${{ matrix.series.msgpack }}" "php-${{ matrix.series.php }}.*" ${{ matrix.stack.upstream }} true - name: Build redis extensions run: | set -e for VERSION in ${{ join(matrix.series.redis, ' ') }}; do - ./scripts/build-extension.sh ${{ matrix.stack.name }} ${{ matrix.series.php }} ${{ matrix.series.version }} redis "$VERSION" "php-${{ matrix.series.php }}.*,libraries/liblzf-*,libraries/lz4-*,libraries/zstd-*,extensions/no-debug-non-zts-${{ matrix.series.version }}/igbinary-*,extensions/no-debug-non-zts-${{ matrix.series.version }}/msgpack-*" ${{ matrix.stack.prefix }} true + ./scripts/build-extension.sh ${{ matrix.stack.name }} ${{ matrix.series.php }} ${{ matrix.series.version }} redis "$VERSION" "php-${{ matrix.series.php }}.*,libraries/liblzf-*,libraries/lz4-*,libraries/zstd-*,extensions/no-debug-non-zts-${{ matrix.series.version }}/igbinary-*,extensions/no-debug-non-zts-${{ matrix.series.version }}/msgpack-*" ${{ matrix.stack.upstream }} true done - name: Build relay extension run: | set -e for VERSION in ${{ join(matrix.series.relay, ' ') }}; do - ./scripts/build-extension.sh ${{ matrix.stack.name }} ${{ matrix.series.php }} ${{ matrix.series.version }} relay "$VERSION" "php-${{ matrix.series.php }}.*,libraries/liblzf-*,libraries/lz4-*,libraries/zstd-*,extensions/no-debug-non-zts-${{ matrix.series.version }}/igbinary-*,extensions/no-debug-non-zts-${{ matrix.series.version }}/msgpack-*" ${{ matrix.stack.prefix }} true + ./scripts/build-extension.sh ${{ matrix.stack.name }} ${{ matrix.series.php }} ${{ matrix.series.version }} relay "$VERSION" "php-${{ matrix.series.php }}.*,libraries/liblzf-*,libraries/lz4-*,libraries/zstd-*,extensions/no-debug-non-zts-${{ matrix.series.version }}/igbinary-*,extensions/no-debug-non-zts-${{ matrix.series.version }}/msgpack-*" ${{ matrix.stack.upstream }} true done - name: Build swoole extension run: | set -e for VERSION in ${{ join(matrix.series.swoole, ' ') }}; do - ./scripts/build-extension.sh ${{ matrix.stack.name }} ${{ matrix.series.php }} ${{ matrix.series.version }} swoole "$VERSION" "php-${{ matrix.series.php }}.*" ${{ matrix.stack.prefix }} true + ./scripts/build-extension.sh ${{ matrix.stack.name }} ${{ matrix.series.php }} ${{ matrix.series.version }} swoole "$VERSION" "php-${{ matrix.series.php }}.*" ${{ matrix.stack.upstream }} true done - name: Build openswoole extension run: | set -e for VERSION in ${{ join(matrix.series.openswoole, ' ') }}; do - ./scripts/build-extension.sh ${{ matrix.stack.name }} ${{ matrix.series.php }} ${{ matrix.series.version }} openswoole "$VERSION" "php-${{ matrix.series.php }}.*" ${{ matrix.stack.prefix }} true - done \ No newline at end of file + ./scripts/build-extension.sh ${{ matrix.stack.name }} ${{ matrix.series.php }} ${{ matrix.series.version }} openswoole "$VERSION" "php-${{ matrix.series.php }}.*" ${{ matrix.stack.upstream }} true + done diff --git a/.github/workflows/mkrepo.yml b/.github/workflows/mkrepo.yml index fb5c69f..c5287df 100644 --- a/.github/workflows/mkrepo.yml +++ b/.github/workflows/mkrepo.yml @@ -18,11 +18,11 @@ on: jobs: mkrepo: - name: Make repository + name: Make repository (${{ matrix.stack.name }}, ${{ inputs.S3_PREFIX || matrix.stack.develop }}) runs-on: ubuntu-latest timeout-minutes: 20 - if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }} + if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }} strategy: matrix: @@ -42,7 +42,6 @@ jobs: env: S3_BUCKET: ${{ secrets.S3_BUCKET || 'heroku-php-extensions' }} - S3_REGION: ${{ secrets.S3_REGION || '' }} S3_PREFIX: ${{ inputs.S3_PREFIX || matrix.stack.develop }} BUILDPACK: ./vendor/heroku/heroku-buildpack-php @@ -58,7 +57,7 @@ jobs: - name: Build Dockerfile run: ./scripts/create-dockerfile.sh ${{ matrix.stack.name }} - + - name: Docker build run: ./scripts/build-dockerfile.sh ${{ matrix.stack.name }} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 656c8db..be752fc 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -9,9 +9,12 @@ jobs: uses: ./.github/workflows/build.yml with: S3_PREFIX: pull-requests/${{ github.event.number }}/ + secrets: inherit call-mkrepo: name: Make repositories + needs: call-build uses: ./.github/workflows/mkrepo.yml with: S3_PREFIX: pull-requests/${{ github.event.number }}/ + secrets: inherit diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index df75b2b..1bae98b 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -31,7 +31,6 @@ jobs: env: S3_BUCKET: ${{ secrets.S3_BUCKET || 'heroku-php-extensions' }} - S3_REGION: ${{ secrets.S3_REGION || '' }} BUILDPACK: ./vendor/heroku/heroku-buildpack-php steps: @@ -46,7 +45,7 @@ jobs: - name: Build Dockerfile run: ./scripts/create-dockerfile.sh ${{ matrix.stack.name }} - + - name: Docker build run: ./scripts/build-dockerfile.sh ${{ matrix.stack.name }} diff --git a/scripts/build-dockerfile.sh b/scripts/build-dockerfile.sh index 093adb8..ad403ed 100755 --- a/scripts/build-dockerfile.sh +++ b/scripts/build-dockerfile.sh @@ -4,4 +4,4 @@ SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd) HEROKUSTACK="$1" # e.g. "heroku-24" -docker build --pull --tag "$HEROKUSTACK" --file "docker/build/${HEROKUSTACK}.Dockerfile" ${SCRIPT_DIR}/.. \ No newline at end of file +docker build --pull --tag "$HEROKUSTACK" --file "docker/build/${HEROKUSTACK}.Dockerfile" ${SCRIPT_DIR}/.. diff --git a/scripts/build-extension.sh b/scripts/build-extension.sh index eb5205f..860ac86 100755 --- a/scripts/build-extension.sh +++ b/scripts/build-extension.sh @@ -1,5 +1,7 @@ #!/bin/bash +set -euo pipefail + SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd) HEROKUSTACK="$1" # e.g. "heroku-22" @@ -8,7 +10,7 @@ PHP_APIVERSION="$3" # e.g. "20240924" EXTENSION_NAME="$4" # e.g. "igbinary" EXTENSION_VERSION="$5" # e.g. "3.2.15" EXTENSION_DEPS="$6" # e.g. "php-$PHP_VERSION.*" -UPSTREAM_S3_PREFIX="$7" # e.g. "dist-heroku-24-amd64-stable/" +UPSTREAM_S3_PREFIX="$7" # upstream (lang-php) S3 prefix, e.g. "dist-heroku-24-amd64-stable/" WITH_DEPLOY=${8:-"false"} # e.g. "true" or "false" if [ "$EXTENSION_VERSION" == "" ]; then @@ -50,4 +52,4 @@ docker run --rm \ ${HEROKUSTACK} ${COMMAND} \ ${OVERWRITE_FLAG} extensions/no-debug-non-zts-${PHP_APIVERSION}/${EXTENSION_NAME}-${EXTENSION_VERSION} -set +x \ No newline at end of file +set +x diff --git a/scripts/build-lib.sh b/scripts/build-lib.sh index 6c3d4b4..5189efb 100755 --- a/scripts/build-lib.sh +++ b/scripts/build-lib.sh @@ -1,5 +1,7 @@ #!/bin/bash +set -euo pipefail + SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd) HEROKUSTACK=$1 # e.g. "heroku-24" @@ -40,4 +42,4 @@ docker run --rm \ $HEROKUSTACK \ ${COMMAND} ${OVERWRITE_FLAG} libraries/${LIBNAME}-${LIBVERSION} -set +x \ No newline at end of file +set +x diff --git a/scripts/create-dockerfile.sh b/scripts/create-dockerfile.sh index c4c521d..c311805 100755 --- a/scripts/create-dockerfile.sh +++ b/scripts/create-dockerfile.sh @@ -9,4 +9,4 @@ cat ${SCRIPT_DIR}/../vendor/heroku/heroku-buildpack-php/support/build/_docker/${ cat <> "${SCRIPT_DIR}/../docker/build/${HEROKUSTACK}.Dockerfile" ENV WORKSPACE_DIR=/workspace ENV PATH=/app/vendor/heroku/heroku-buildpack-php/support/build/_util:\$PATH -EOF \ No newline at end of file +EOF diff --git a/scripts/setup-local.sh b/scripts/setup-local.sh index 6d25306..e961419 100755 --- a/scripts/setup-local.sh +++ b/scripts/setup-local.sh @@ -9,4 +9,4 @@ composer install --working-dir=${SCRIPT_DIR}/.. --prefer-dist --no-progress --no cp ${SCRIPT_DIR}/../vendor/heroku/heroku-buildpack-php/requirements.txt . # Create environment file -cp ${SCRIPT_DIR}/../.env.example ${SCRIPT_DIR}/../.env \ No newline at end of file +cp ${SCRIPT_DIR}/../.env.example ${SCRIPT_DIR}/../.env