1717 schedule :
1818 - cron : 0 0 * * 5
1919
20+ env :
21+ # Common dependencies for all builds
22+ UBUNTU_DEPS : " autoconf bison build-essential curl gettext git libgd-dev libcurl4-openssl-dev libedit-dev libicu-dev libjpeg-dev libmysqlclient-dev libonig-dev libpng-dev libpq-dev libreadline-dev libsqlite3-dev libssl-dev libxml2-dev libzip-dev libtidy-dev openssl pkg-config re2c zlib1g-dev ca-certificates wget libtool automake gcc-9 g++-9 libxslt1.1 libxslt1-dev autotools-dev m4 libtool-bin"
23+ MACOS_DEPS : " autoconf automake bison freetype gd gettext icu4c krb5 libedit libiconv libjpeg libpng libxml2 libzip openssl@1.1 openssl@3 pkg-config re2c zlib"
24+
2025jobs :
2126 plugin_test :
2227 strategy :
2328 fail-fast : false
2429 matrix :
25- os :
30+ include :
2631 - os : ubuntu-latest
2732 version : 8.0.0
33+ is_legacy : true
2834 # will uncomment later; currently focus on php 8.0.0
2935 # - os: ubuntu-latest
3036 # version: 7.4.14
37+ # is_legacy: true
3138 # - os: ubuntu-latest
3239 # version: latest
33- # will uncomment later; currently focus on linux
40+ # is_legacy: false
3441 # - os: macos-latest
3542 # version: 8.0.0
36- # - os: macos-latest
37- # version: 7.4.14
38- # - os: macos-latest
39- # version: latest
43+ # is_legacy: true
4044
41- runs-on : ${{ matrix.os.os }}
45+ runs-on : ${{ matrix.os }}
46+ timeout-minutes : 45
4247
4348 steps :
4449 - name : Checkout code
@@ -49,69 +54,32 @@ jobs:
4954 git submodule update --init --recursive
5055 chmod +x bin/* lib/*
5156
52- - name : Install system packages on Ubuntu
53- if : ${{ runner.os == 'Linux' }}
57+ - name : Install system packages
5458 run : |
55- if command -v sudo >/dev/null 2>&1; then
59+ set -e
60+ if [ "${{ runner.os }}" = "Linux" ]; then
5661 sudo apt-get update
57- sudo apt-get install -y autoconf bison build-essential curl gettext git libgd-dev libcurl4-openssl-dev libedit-dev libicu-dev libjpeg-dev libmysqlclient-dev libonig-dev libpng-dev libpq-dev libreadline-dev libsqlite3-dev libssl-dev libxml2-dev libzip-dev libtidy-dev openssl pkg-config re2c zlib1g-dev ca-certificates wget libtool automake gcc-9 g++-9 libxslt1.1 libxslt1-dev
58- else
59- apt-get update
60- apt-get install -y autoconf bison build-essential curl gettext git libgd-dev libcurl4-openssl-dev libedit-dev libicu-dev libjpeg-dev libmysqlclient-dev libonig-dev libpng-dev libpq-dev libreadline-dev libsqlite3-dev libssl-dev libxml2-dev libzip-dev libtidy-dev openssl pkg-config re2c zlib1g-dev ca-certificates wget libtool automake gcc-9 g++-9 libxslt1.1 libxslt1-dev
62+ sudo apt-get install -y ${{ env.UBUNTU_DEPS }}
63+ elif [ "${{ runner.os }}" = "macOS" ]; then
64+ brew install ${{ env.MACOS_DEPS }}
6165 fi
6266
63- - name : Install system packages on macOS
64- if : ${{ runner.os == 'macOS' }}
65- run : brew install autoconf automake bison freetype gd gettext icu4c krb5 libedit libiconv libjpeg libpng libxml2 libzip openssl@1.1 openssl@3 pkg-config re2c zlib
66-
6767 - name : Setup asdf
6868 uses : asdf-vm/actions/setup@v4
6969
70- - name : Fix autotools for PHP 8.0.0
71- if : ${{ matrix.os.version == '8.0.0' || matrix.os.version == '7.4.14' }}
72- run : |
73- # Install compatible autotools for old PHP versions
74- if command -v sudo >/dev/null 2>&1; then
75- sudo apt-get install -y autotools-dev m4 libtool-bin
76- else
77- apt-get install -y autotools-dev m4 libtool-bin
78- fi
79- echo "Autotools installed for PHP ${{ matrix.os.version }}"
80-
81- - name : Test plugin
82- timeout-minutes : 45
70+ - name : Configure environment for PHP ${{ matrix.version }}
8371 run : |
8472 # Add plugin from current checkout
8573 asdf plugin add php $GITHUB_WORKSPACE
8674
87- # Set version-specific configuration
88- if [ "${{ matrix.os.version }}" = "8.0.0" ]; then
89- echo "=== Configuring for PHP 8.0.0 ==="
90- # Verify gcc-9 is available, fallback to gcc if not
91- if command -v gcc-9 >/dev/null 2>&1; then
92- COMPILER="gcc-9"
93- CXXCOMPILER="g++-9"
94- else
95- COMPILER="gcc"
96- CXXCOMPILER="g++"
97- fi
98-
99- # Export all variables for php-build
100- export ASDF_PHP_OPENSSL_AUTO=yes
101- export PHP_BUILD_XDEBUG_ENABLE=off
102- export CC="$COMPILER"
103- export CXX="$CXXCOMPILER"
104-
105- # Set for autoconf/configure scripts
106- export ac_cv_prog_CC="$COMPILER"
107- export ac_cv_prog_CXX="$CXXCOMPILER"
75+ # Set common environment
76+ export PHP_BUILD_XDEBUG_ENABLE=off
77+ echo "PHP_BUILD_XDEBUG_ENABLE=off" >> $GITHUB_ENV
10878
109- # Set CONFIG_SHELL for consistent shell behavior
110- export CONFIG_SHELL="/bin/bash "
79+ if [ "${{ matrix.is_legacy }}" = "true" ]; then
80+ echo "=== Configuring for legacy PHP ${{ matrix.version }} === "
11181
112- elif [ "${{ matrix.os.version }}" = "7.4.14" ]; then
113- echo "=== Configuring for PHP 7.4.14 ==="
114- # Verify gcc-9 is available, fallback to gcc if not
82+ # Use gcc-9 for legacy versions, fallback to gcc
11583 if command -v gcc-9 >/dev/null 2>&1; then
11684 COMPILER="gcc-9"
11785 CXXCOMPILER="g++-9"
@@ -120,114 +88,74 @@ jobs:
12088 CXXCOMPILER="g++"
12189 fi
12290
123- export ASDF_PHP_OPENSSL_AUTO=yes
124- export PHP_BUILD_XDEBUG_ENABLE=off
125- export CC="$COMPILER"
126- export CXX="$CXXCOMPILER"
127-
128- # Set for autoconf/configure scripts
129- export ac_cv_prog_CC="$COMPILER"
130- export ac_cv_prog_CXX="$CXXCOMPILER"
131-
132- # Set CONFIG_SHELL for consistent shell behavior
133- export CONFIG_SHELL="/bin/bash"
134-
135- else
136- echo "=== Configuring for PHP latest ==="
137- export ASDF_PHP_OPENSSL_AUTO=no
138- export PHP_BUILD_XDEBUG_ENABLE=off
139- export CC="gcc"
140- export CXX="g++"
141- fi
142-
143- # Debug compiler setup for problematic versions
144- if [ "${{ matrix.os.version }}" = "8.0.0" ] || [ "${{ matrix.os.version }}" = "7.4.14" ]; then
145- echo "=== Compiler Debug Info ==="
146- echo "CC=$CC"
147- echo "CXX=$CXX"
148- echo "ac_cv_prog_CC=$ac_cv_prog_CC"
149- echo "CFLAGS=$CFLAGS"
91+ # Set legacy-specific environment
92+ echo "ASDF_PHP_OPENSSL_AUTO=yes" >> $GITHUB_ENV
93+ echo "CC=$COMPILER" >> $GITHUB_ENV
94+ echo "CXX=$CXXCOMPILER" >> $GITHUB_ENV
95+ echo "ac_cv_prog_CC=$COMPILER" >> $GITHUB_ENV
96+ echo "ac_cv_prog_CXX=$CXXCOMPILER" >> $GITHUB_ENV
97+ echo "CONFIG_SHELL=/bin/bash" >> $GITHUB_ENV
15098
151- echo "Compiler version:"
152- $CC --version || echo "Compiler not found"
153-
154- echo "Testing basic compilation:"
99+ # Debug output
100+ echo "Compiler: $COMPILER ($($COMPILER --version | head -1))"
155101 echo 'int main() { return 0; }' > /tmp/test.c
156- $CC $CFLAGS -o /tmp/test /tmp/test.c && echo "✓ Basic compilation works" || echo "✗ Basic compilation FAILED "
102+ $COMPILER -o /tmp/test /tmp/test.c && echo "✓ Compiler works" || echo "✗ Compiler failed "
157103 rm -f /tmp/test /tmp/test.c
158-
159- echo "Environment variables that will be passed to php-build:"
160- env | grep -E "^(CC|CXX|CFLAGS|CXXFLAGS|LDFLAGS|ac_cv_)" | sort
104+ else
105+ echo "=== Configuring for modern PHP ${{ matrix.version }} ==="
106+ echo "ASDF_PHP_OPENSSL_AUTO=no" >> $GITHUB_ENV
107+ echo "CC=gcc" >> $GITHUB_ENV
108+ echo "CXX=g++" >> $GITHUB_ENV
161109 fi
162110
163- # Install PHP version with enhanced error handling for old versions
164- echo "Installing PHP ${{ matrix.os.version }}..."
165-
166- if [ "${{ matrix.os.version }}" = "8.0.0" ] || [ "${{ matrix.os.version }}" = "7.4.14" ]; then
167- asdf install php ${{ matrix.os.version }} || {
168- echo "Build failed, examining config.log and environment..."
169- echo "=== Final Environment Check ==="
170- echo "CC: $CC ($(which $CC 2>/dev/null || echo 'NOT FOUND'))"
171- echo "ac_cv_prog_CC: $ac_cv_prog_CC"
172- echo "CONFIG_SHELL: $CONFIG_SHELL"
173-
174- echo "=== Config Log ==="
175- find /tmp -name "config.log" -path "*/php-build/source/${{ matrix.os.version }}/*" -exec tail -100 {} \;
176-
177- echo "=== Configure Script Status ==="
178- find /tmp -path "*/php-build/source/${{ matrix.os.version }}/configure" -ls
179-
180- echo "=== Full PHP build log ==="
181- find /tmp -name "php-build.${{ matrix.os.version }}.*.log" -exec tail -200 {} \;
182- exit 1
183- }
184- else
185- asdf install php ${{ matrix.os.version }}
111+ - name : Install PHP ${{ matrix.version }}
112+ run : |
113+ echo "Installing PHP ${{ matrix.version }}..."
114+
115+ if ! asdf install php ${{ matrix.version }}; then
116+ if [ "${{ matrix.is_legacy }}" = "true" ]; then
117+ echo "=== Build failed - gathering diagnostics ==="
118+ echo "Environment: CC=$CC, ac_cv_prog_CC=$ac_cv_prog_CC"
119+ find /tmp -name "config.log" -path "*/php-build/source/${{ matrix.version }}/*" -exec tail -50 {} \;
120+ find /tmp -name "php-build.${{ matrix.version }}.*.log" -exec tail -100 {} \;
121+ fi
122+ exit 1
186123 fi
187124
188- # Set global and test
189- asdf set php ${{ matrix.os.version }}
190- echo "Testing PHP installation..."
125+ - name : Test PHP installation
126+ run : |
127+ asdf set php ${{ matrix.version }}
191128 php --version
129+ echo "Installation path: $(asdf where php)"
192130
193- echo "PHP installation path:"
194- asdf where php
195-
196- - name : Test Composer (if available)
197- if : success()
198- run : |
199- composer --version || echo "Composer not available"
200- continue-on-error : true
131+ # Test Composer if available
132+ if command -v composer >/dev/null 2>&1; then
133+ echo "Composer: $(composer --version)"
134+ else
135+ echo "Composer not available"
136+ fi
201137
202138 lint :
203139 runs-on : ubuntu-latest
204-
205140 steps :
206- - name : Checkout code
207- uses : actions/checkout@v4
208-
209- - name : Install ShellCheck and make
141+ - uses : actions/checkout@v4
142+ - name : Install dependencies
210143 run : |
211144 sudo apt-get update
212145 sudo apt-get install -y shellcheck make
213-
214- - name : Run ShellCheck
146+ - name : Run lint
215147 run : make lint
216148
217149 format :
218150 runs-on : ubuntu-latest
219-
220151 steps :
221- - name : Checkout code
222- uses : actions/checkout@v4
223-
224- - name : Install shfmt and make
152+ - uses : actions/checkout@v4
153+ - name : Install dependencies
225154 run : |
226155 sudo apt-get update
227156 sudo apt-get install -y make
228- curl -L "https://github.com/mvdan/sh/releases/download/v3.8.0/shfmt_v3.8.0_linux_amd64" -o shfmt
157+ curl -sL "https://github.com/mvdan/sh/releases/download/v3.8.0/shfmt_v3.8.0_linux_amd64" -o shfmt
229158 chmod +x shfmt
230159 sudo mv shfmt /usr/local/bin/
231-
232- - name : Run shfmt
160+ - name : Check format
233161 run : make fmt-check
0 commit comments