Skip to content

Commit 2d9a9f7

Browse files
KingPinKingPin
authored andcommitted
feat: enhance smoke tests with comprehensive checks and error handling
- Add basic PHP CLI execution test (SAPI check) - Add entrypoint/init quick-run test - Add directory permissions check (/tmp, /var/www) - Improve error messages with container logs on failure - Add exit code validation for all tests - Enhance v2 s6-overlay checks (services directory validation) - Add proper error handling and detailed failure reporting - Use conditional checks for variant-specific tests - Add timeouts and buffer for CI runner variations
1 parent 53600f7 commit 2d9a9f7

1 file changed

Lines changed: 107 additions & 10 deletions

File tree

.github/workflows/docker-ci.yml

Lines changed: 107 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -78,38 +78,135 @@ jobs:
7878
- name: Smoke tests - PHP version
7979
run: |
8080
echo "::group::Testing PHP version"
81-
docker run --rm test-${{ steps.vars.outputs.TAG }} php -v | tee php-version.txt
82-
grep -q "${{ matrix.php-version }}" php-version.txt || { echo "::error::PHP version mismatch"; exit 1; }
81+
if ! docker run --rm test-${{ steps.vars.outputs.TAG }} php -v | tee php-version.txt; then
82+
echo "::error::Failed to run php -v"
83+
docker logs test-${{ steps.vars.outputs.TAG }} 2>&1 || true
84+
exit 1
85+
fi
86+
87+
if ! grep -q "${{ matrix.php-version }}" php-version.txt; then
88+
echo "::error::PHP version mismatch - expected ${{ matrix.php-version }}"
89+
cat php-version.txt
90+
exit 1
91+
fi
8392
echo "✅ PHP version correct"
8493
echo "::endgroup::"
8594
95+
- name: Smoke tests - Basic PHP CLI run
96+
run: |
97+
echo "::group::Testing basic PHP CLI execution"
98+
SAPI=$(docker run --rm test-${{ steps.vars.outputs.TAG }} php -r "echo PHP_SAPI;" 2>&1)
99+
if [ $? -ne 0 ]; then
100+
echo "::error::Failed to execute PHP CLI test"
101+
echo "$SAPI"
102+
exit 1
103+
fi
104+
echo "✅ PHP CLI runs successfully (SAPI: $SAPI)"
105+
echo "::endgroup::"
106+
86107
- name: Smoke tests - Extensions
87108
run: |
88109
echo "::group::Testing PHP extensions"
89-
docker run --rm test-${{ steps.vars.outputs.TAG }} php -m | tee extensions.txt
110+
if ! docker run --rm test-${{ steps.vars.outputs.TAG }} php -m | tee extensions.txt; then
111+
echo "::error::Failed to list PHP extensions"
112+
docker logs test-${{ steps.vars.outputs.TAG }} 2>&1 || true
113+
exit 1
114+
fi
90115
91-
for ext in gd json mysqli zip; do
92-
grep -qi "$ext" extensions.txt || { echo "::error::Missing extension: $ext"; exit 1; }
93-
echo "✅ Extension $ext found"
116+
# Core extensions that should be present
117+
REQUIRED_EXTS="gd json mysqli zip"
118+
MISSING_EXTS=""
119+
120+
for ext in $REQUIRED_EXTS; do
121+
if ! grep -qi "$ext" extensions.txt; then
122+
MISSING_EXTS="$MISSING_EXTS $ext"
123+
echo "::error::Missing extension: $ext"
124+
else
125+
echo "✅ Extension $ext found"
126+
fi
127+
done
128+
129+
if [ -n "$MISSING_EXTS" ]; then
130+
echo "::error::Missing required extensions:$MISSING_EXTS"
131+
echo "Available extensions:"
132+
cat extensions.txt
133+
exit 1
134+
fi
135+
echo "::endgroup::"
136+
137+
- name: Smoke tests - Entrypoint quick-run
138+
run: |
139+
echo "::group::Testing entrypoint/init quick-run"
140+
OUTPUT=$(docker run --rm test-${{ steps.vars.outputs.TAG }} php -r "echo 'entrypoint-ok';" 2>&1)
141+
EXIT_CODE=$?
142+
143+
if [ $EXIT_CODE -ne 0 ]; then
144+
echo "::error::Entrypoint test failed with exit code $EXIT_CODE"
145+
echo "$OUTPUT"
146+
exit 1
147+
fi
148+
149+
if ! echo "$OUTPUT" | grep -q "entrypoint-ok"; then
150+
echo "::error::Entrypoint did not produce expected output"
151+
echo "Output: $OUTPUT"
152+
exit 1
153+
fi
154+
echo "✅ Entrypoint executes successfully"
155+
echo "::endgroup::"
156+
157+
- name: Smoke tests - Directory permissions
158+
run: |
159+
echo "::group::Testing directory permissions"
160+
DIRS_TO_CHECK="/tmp /var/www"
161+
162+
for dir in $DIRS_TO_CHECK; do
163+
if ! docker run --rm test-${{ steps.vars.outputs.TAG }} sh -c "test -d $dir && [ -w $dir ]" 2>&1; then
164+
echo "::warning::Directory $dir either doesn't exist or is not writable"
165+
else
166+
echo "✅ Directory $dir exists and is writable"
167+
fi
94168
done
95169
echo "::endgroup::"
96170
97171
- name: Smoke tests - v2 specific (s6-overlay)
98172
if: matrix.variant == 'v2'
99173
run: |
100-
echo "::group::Testing s6-overlay presence"
101-
docker run --rm test-${{ steps.vars.outputs.TAG }} sh -c "test -d /etc/s6-overlay || exit 1"
174+
echo "::group::Testing s6-overlay presence and PID1 behavior"
175+
176+
# Check s6-overlay directory
177+
if ! docker run --rm test-${{ steps.vars.outputs.TAG }} sh -c "test -d /etc/s6-overlay" 2>&1; then
178+
echo "::error::s6-overlay directory not found at /etc/s6-overlay"
179+
docker run --rm test-${{ steps.vars.outputs.TAG }} ls -la /etc/ 2>&1 || true
180+
exit 1
181+
fi
102182
echo "✅ s6-overlay directory exists"
103183
104-
docker run --rm test-${{ steps.vars.outputs.TAG }} sh -c "test -f /init || exit 1"
184+
# Check init binary
185+
if ! docker run --rm test-${{ steps.vars.outputs.TAG }} sh -c "test -f /init" 2>&1; then
186+
echo "::error::s6 init binary not found at /init"
187+
docker run --rm test-${{ steps.vars.outputs.TAG }} ls -la / 2>&1 || true
188+
exit 1
189+
fi
105190
echo "✅ s6 init binary exists"
191+
192+
# Check for s6-overlay services directory
193+
if ! docker run --rm test-${{ steps.vars.outputs.TAG }} sh -c "test -d /etc/s6-overlay/s6-rc.d || test -d /etc/services.d" 2>&1; then
194+
echo "::warning::s6 services directory not found (expected /etc/s6-overlay/s6-rc.d or /etc/services.d)"
195+
else
196+
echo "✅ s6 services directory found"
197+
fi
198+
106199
echo "::endgroup::"
107200
108201
- name: Smoke tests - FPM specific
109202
if: matrix.php-type == 'fpm'
110203
run: |
111204
echo "::group::Testing PHP-FPM"
112-
docker run --rm test-${{ steps.vars.outputs.TAG }} php-fpm --version
205+
if ! docker run --rm test-${{ steps.vars.outputs.TAG }} php-fpm --version 2>&1 | tee fpm-version.txt; then
206+
echo "::error::Failed to run php-fpm --version"
207+
cat fpm-version.txt || true
208+
exit 1
209+
fi
113210
echo "✅ PHP-FPM version check passed"
114211
echo "::endgroup::"
115212

0 commit comments

Comments
 (0)