Skip to content

Commit 286b3d0

Browse files
committed
Refactor CI workflow and unify setup
Add shared env lists for Ubuntu and macOS packages, switch the matrix to include entries with an is_legacy flag, and unify system package installation into a single step. Consolidate PHP configuration and installation (exporting vars to GITHUB_ENV, legacy compiler handling and diagnostics), add job timeout, and simplify lint/format steps with minor improvements (curl -sL).
1 parent 7c4e668 commit 286b3d0

1 file changed

Lines changed: 69 additions & 141 deletions

File tree

.github/workflows/workflow.yml

Lines changed: 69 additions & 141 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,33 @@ on:
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+
2025
jobs:
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

Comments
 (0)