1-
21name : Build extensions
32
43on :
54 push :
6- branches :
7- - main
5+ branches : [main]
6+ workflow_dispatch :
7+ workflow_call :
8+ inputs :
9+ S3_PREFIX :
10+ type : string
11+ default : " "
812
913jobs :
10-
1114 build :
12- name : Build and deploy
13- runs-on : ubuntu-latest
15+ name : Build and deploy ${{ matrix.stack.name }} extensions with PHP ${{ matrix.series.php }} on ${{ matrix.stack.os }}
16+ runs-on : ${{ matrix.stack.os }}
1417 timeout-minutes : 20
15-
1618 env :
17- S3_BUCKET : heroku-php-extensions
19+ S3_BUCKET : ${{ secrets.S3_BUCKET || 'heroku-php-extensions' }}
20+ S3_REGION : ${{ secrets.S3_REGION || '' }}
21+ S3_PREFIX : ${{ inputs.S3_PREFIX || matrix.stack.prefix }}
1822 BUILDPACK : ./vendor/heroku/heroku-buildpack-php
1923 AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
2024 AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
2125
2226 strategy :
27+ fail-fast : true
2328 matrix :
2429 stack :
25- - heroku-20
26- - heroku-22
30+ - name : " heroku-22"
31+ prefix : " dist-heroku-22-develop/"
32+ os : " ubuntu-latest"
33+ - name : " heroku-24"
34+ prefix : " dist-heroku-24-amd64-develop/"
35+ os : " ubuntu-latest"
36+ - name : " heroku-24"
37+ prefix : " dist-heroku-24-arm64-develop/"
38+ os : " ubuntu-24.04-arm"
2739 series :
28- - 20210902 # PHP 8.1
29- - 20220829 # PHP 8.2
30- - 20230831 # PHP 8.3
40+ - {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"]}
41+ - {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"]}
42+ - {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"]}
43+ - {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"]}
44+ - {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"]}
45+ exclude :
46+ # heroku-24 no longer supports php-8.1
47+ - stack :
48+ name : " heroku-24"
49+ series :
50+ version : 20210902
51+ include :
52+ # heroku-24 cannot compile openswoole 4.12.1 anymore, include for heroku-22 only
53+ - stack :
54+ name : " heroku-22"
55+ prefix : " dist-heroku-22-develop/"
56+ os : " ubuntu-latest"
57+ series :
58+ version : 20220829
59+ php : " 8.2"
60+ openswoole :
61+ - " 4.12.1"
3162
3263 steps :
3364 - name : Checkout
34- uses : actions/checkout@v3
65+ uses : actions/checkout@v4
3566
3667 - name : Composer Install
3768 run : composer install --prefer-dist --no-progress --no-suggest --ignore-platform-reqs
@@ -40,114 +71,50 @@ jobs:
4071 run : cp ${BUILDPACK}/requirements.txt .
4172
4273 - name : Build Dockerfile
43- run : |
44- cat ${BUILDPACK}/support/build/_docker/${{ matrix.stack }}.Dockerfile > docker/build/${{ matrix.stack }}.Dockerfile
45- cat docker/${{ matrix.stack }}.Dockerfile >> docker/build/${{ matrix.stack }}.Dockerfile
74+ run : ./scripts/create-dockerfile.sh ${{ matrix.stack.name }}
4675
4776 - name : Docker build
48- run : docker build --pull --tag ${{ matrix.stack }} --file docker/build/ ${{ matrix.stack }}.Dockerfile .
77+ run : ./scripts/ build-dockerfile.sh ${{ matrix.stack.name }}
4978
5079 - name : Build liblzf library
51- shell : ' script -q -e -c "bash {0}"'
52- run : |
53- docker run --rm -ti \
54- --env-file=${BUILDPACK}/support/build/_docker/env.default \
55- ${{ matrix.stack }} deploy.sh --overwrite libraries/liblzf-3.6
80+ run : ./scripts/build-lib.sh ${{ matrix.stack.name }} liblzf "${{ matrix.series.liblzf }}" true
5681
5782 - name : Build lz4 library
58- shell : ' script -q -e -c "bash {0}"'
59- run : |
60- docker run --rm -ti \
61- --env-file=${BUILDPACK}/support/build/_docker/env.default \
62- ${{ matrix.stack }} deploy.sh --overwrite libraries/lz4-1.9.3
83+ run : ./scripts/build-lib.sh ${{ matrix.stack.name }} lz4 "${{ matrix.series.lz4 }}" true
6384
6485 - name : Build zstd library
65- shell : ' script -q -e -c "bash {0}"'
66- run : |
67- docker run --rm -ti \
68- --env-file=${BUILDPACK}/support/build/_docker/env.default \
69- ${{ matrix.stack }} deploy.sh --overwrite libraries/zstd-1.4.9
86+ run : ./scripts/build-lib.sh ${{ matrix.stack.name }} zstd "${{ matrix.series.zstd }}" true
7087
7188 - name : Build igbinary extension
72- shell : ' script -q -e -c "bash {0}"'
73- run : |
74- docker run --rm -ti \
75- --env UPSTREAM_S3_BUCKET=lang-php \
76- --env UPSTREAM_S3_PREFIX=dist-${{ matrix.stack }}-stable/ \
77- --env-file=${BUILDPACK}/support/build/_docker/env.default \
78- ${{ matrix.stack }} deploy.sh --overwrite \
79- extensions/no-debug-non-zts-${{ matrix.series }}/igbinary-3.2.15
89+ 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
8090
8191 - name : Build msgpack extension
82- shell : ' script -q -e -c "bash {0}"'
83- run : |
84- docker run --rm -ti \
85- --env UPSTREAM_S3_BUCKET=lang-php \
86- --env UPSTREAM_S3_PREFIX=dist-${{ matrix.stack }}-stable/ \
87- --env-file=${BUILDPACK}/support/build/_docker/env.default \
88- ${{ matrix.stack }} deploy.sh --overwrite \
89- extensions/no-debug-non-zts-${{ matrix.series }}/msgpack-2.2.0
90-
91- - name : Build redis extension
92- shell : ' script -q -e -c "bash {0}"'
92+ 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
93+
94+ - name : Build redis extensions
9395 run : |
94- docker run --rm -ti \
95- --env UPSTREAM_S3_BUCKET=lang-php \
96- --env UPSTREAM_S3_PREFIX=dist-${{ matrix.stack }}-stable/ \
97- --env-file=${BUILDPACK}/support/build/_docker/env.default \
98- ${{ matrix.stack }} deploy.sh --overwrite \
99- extensions/no-debug-non-zts-${{ matrix.series }}/redis-6.0.2
96+ set -e
97+ for VERSION in ${{ join(matrix.series.redis, ' ') }}; do
98+ ./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
99+ done
100100
101101 - name : Build relay extension
102- shell : ' script -q -e -c "bash {0}"'
103- run : |
104- docker run --rm -ti \
105- --env UPSTREAM_S3_BUCKET=lang-php \
106- --env UPSTREAM_S3_PREFIX=dist-${{ matrix.stack }}-stable/ \
107- --env-file=${BUILDPACK}/support/build/_docker/env.default \
108- ${{ matrix.stack }} deploy.sh --overwrite \
109- extensions/no-debug-non-zts-${{ matrix.series }}/relay-0.6.8
110-
111- - name : Build swoole 4.x extension
112- if : matrix.series <= 20220829
113- shell : ' script -q -e -c "bash {0}"'
114102 run : |
115- docker run --rm -ti \
116- --env UPSTREAM_S3_BUCKET=lang-php \
117- --env UPSTREAM_S3_PREFIX=dist-${{ matrix.stack }}-stable/ \
118- --env-file=${BUILDPACK}/support/build/_docker/env.default \
119- ${{ matrix.stack }} deploy.sh --overwrite \
120- extensions/no-debug-non-zts-${{ matrix.series }}/swoole-4.8.13
121-
122- - name : Build swoole 5.x extension
123- if : matrix.series >= 20230831
124- shell : ' script -q -e -c "bash {0}"'
125- run : |
126- docker run --rm -ti \
127- --env UPSTREAM_S3_BUCKET=lang-php \
128- --env UPSTREAM_S3_PREFIX=dist-${{ matrix.stack }}-stable/ \
129- --env-file=${BUILDPACK}/support/build/_docker/env.default \
130- ${{ matrix.stack }} deploy.sh --overwrite \
131- extensions/no-debug-non-zts-${{ matrix.series }}/swoole-5.1.1
132-
133- - name : Build openswoole 4.x extension
134- if : matrix.series <= 20220829
135- shell : ' script -q -e -c "bash {0}"'
103+ set -e
104+ for VERSION in ${{ join(matrix.series.relay, ' ') }}; do
105+ ./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
106+ done
107+
108+ - name : Build swoole extension
136109 run : |
137- docker run --rm -ti \
138- --env UPSTREAM_S3_BUCKET=lang-php \
139- --env UPSTREAM_S3_PREFIX=dist-${{ matrix.stack }}-stable/ \
140- --env-file=${BUILDPACK}/support/build/_docker/env.default \
141- ${{ matrix.stack }} deploy.sh --overwrite \
142- extensions/no-debug-non-zts-${{ matrix.series }}/openswoole-4.12.1
143-
144- - name : Build openswoole 22.x extension
145- if : matrix.series >= 20230831
146- shell : ' script -q -e -c "bash {0}"'
110+ set -e
111+ for VERSION in ${{ join(matrix.series.swoole, ' ') }}; do
112+ ./scripts/build-extension.sh ${{ matrix.stack.name }} ${{ matrix.series.php }} ${{ matrix.series.version }} swoole "$VERSION" "php-${{ matrix.series.php }}.*" ${{ matrix.stack.prefix }} true
113+ done
114+
115+ - name : Build openswoole extension
147116 run : |
148- docker run --rm -ti \
149- --env UPSTREAM_S3_BUCKET=lang-php \
150- --env UPSTREAM_S3_PREFIX=dist-${{ matrix.stack }}-stable/ \
151- --env-file=${BUILDPACK}/support/build/_docker/env.default \
152- ${{ matrix.stack }} deploy.sh --overwrite \
153- extensions/no-debug-non-zts-${{ matrix.series }}/openswoole-22.1.0
117+ set -e
118+ for VERSION in ${{ join(matrix.series.openswoole, ' ') }}; do
119+ ./scripts/build-extension.sh ${{ matrix.stack.name }} ${{ matrix.series.php }} ${{ matrix.series.version }} openswoole "$VERSION" "php-${{ matrix.series.php }}.*" ${{ matrix.stack.prefix }} true
120+ done
0 commit comments