Skip to content

CI: smoke test every image before the push - #19

Merged
f3l1x merged 7 commits into
masterfrom
claude/ci-smoke-tests
Oct 1, 2026
Merged

f3l1x merged 7 commits into
masterfrom
claude/ci-smoke-tests

Conversation

@f3l1x

@f3l1x f3l1x commented Sep 29, 2026 •

Copy link
Copy Markdown
Member

Summary

Before this PR, CI ran only a version check on 3 of the 33 images (php84, node24, ansitest). The other 30 images were built but never started.

This PR adds .scripts/test.sh <item> [image], a smoke test for one image. The Test job is now a matrix over every image. Each item builds the image for linux/amd64, loads it and runs the script. The Build job (the shared dockette/.github workflow at @master) builds and pushes only after all tests pass.

Image Checks
phpXX PHP major.minor = XX, PHP starts with no extension warnings, main extensions (ctype, curl, gd, iconv, intl, openssl, pdo_mysql, pdo_pgsql, pdo_sqlite, zip), phpxd loads Xdebug, composer
nodeXX Node major = XX, npm, pnpm (node18+)
ansitest ansible, ansible-lint, yamllint, molecule, docker, community.docker collection
All bash, git, curl, make

make test uses the same script for local runs.

Defects found and fixed

I ran the script against the published dockette/ci images. All PHP images pass. These images fail:

  • node8 has Node 9.11.1 and no npm. Fix: use nodejs-npm@main from Alpine 3.8 (Node 8.14), the same method as node6.
  • node12 has Node 14.5.0. On Alpine 3.12, nodejs-current is Node 14. Fix: use nodejs (Node 12).
  • node18 to node21: pnpm crashes (ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING). Corepack installs pnpm@latest, which is pnpm 11, and pnpm 11 does not run on these Node versions. Fix: pin pnpm 8.15.9 on node18 (Node 18.9.1 is too old for pnpm 9 and 10), and pin pnpm 10.34.6 on node19 to node21. The README table is updated.

An earlier CI run on this PR showed the fixed versions: node8 = v8.14.0 with npm 6.4.1, node12 = v12.22.12, node21 = pnpm 10.34.6.

Checks

  • actionlint passes.
  • bash -n passes. shellcheck shows only 2 style notes (SC2001).

🤖 Generated with Claude Code

https://claude.ai/code/session_01VSKw7jY45nUJWQxWpvjm82

f3l1x and others added 4 commits September 27, 2026 16:23
PHP 8.5 leaves Alpine edge for the stable 3.24 branch.
Node 24 uses the LTS nodejs package from Alpine 3.24 main.
Node 26 is new and uses nodejs-current from Alpine 3.24.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VSKw7jY45nUJWQxWpvjm82
Debian 11 bullseye is EOL. Its security packages are gone from
deb.debian.org, so apt install fails with 404.
Bookworm still ships vagrant. Docker repo uses a signed-by keyring,
Ansible comes from Debian instead of the old trusty PPA, and pip3
uses --break-system-packages (PEP 668).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VSKw7jY45nUJWQxWpvjm82
On Alpine 3.24 php85 is the default PHP and ships /usr/bin/php, so
"ln -s" fails in php85. php83 had no symlink and composer failed with
"php: not found". Use "ln -sf" in php83, php84 and php85.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VSKw7jY45nUJWQxWpvjm82
.scripts/test.sh checks one image:
- PHP: version, clean startup (no extension warnings), main extensions,
  phpxd with Xdebug, composer.
- Node.js: major version, npm, pnpm (node18+).
- ansitest: ansible, ansible-lint, yamllint, molecule, docker and the
  community.docker collection.
- All: bash, git, curl, make.

The build matrix runs the script through the new "test" input of the
shared Docker workflow, so every image and not only three is tested.
The Makefile "test" target uses the same script.

The tests found defects in the published images, fixed here:
- node8 had Node 9 and no npm. Use nodejs-npm (Node 8) from Alpine 3.8.
- node12 had Node 14. On Alpine 3.12 "nodejs" is Node 12.
- node18 to node21: "pnpm@latest" (pnpm 11) crashes on these Node
  versions. Pin pnpm 8.15.9 for node18 (Node 18.9) and pnpm 10.34.6
  for node19 to node21.

The shared workflow ref points to the dockette/.github branch with the
"test" input. Change it back to @master when that PR is merged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VSKw7jY45nUJWQxWpvjm82
Base automatically changed from claude/exciting-feynman-p0jaf4 to master September 30, 2026 20:04
f3l1x and others added 2 commits September 30, 2026 20:05
The "test" input of the shared dockette/.github workflow is not
planned (dockette/.github#5 is closed). Run the tests in this repo:
the Test job builds each image for linux/amd64, loads it and runs
.scripts/test.sh. The Build job uses the shared workflow from @master
again and pushes only after all tests pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VSKw7jY45nUJWQxWpvjm82
Comment thread AGENTS.md Outdated
Comment thread AGENTS.md Outdated
@f3l1x
f3l1x merged commit 9f176f0 into master Oct 1, 2026
66 checks passed
@f3l1x
f3l1x deleted the claude/ci-smoke-tests branch October 1, 2026 17:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant