Optimize CI: engine-grouped testing (42 jobs to 8)#1939
Open
Optimize CI: engine-grouped testing (42 jobs to 8)#1939
Conversation
Plan to restructure the GitHub Actions test matrix from 42 independent jobs (cfengine x dbengine) to 8 engine-grouped jobs. Each CF engine starts once and runs all database test suites sequentially, reducing total CI compute by ~75%. Key changes planned: - Engine-only matrix (8 jobs vs 42) - CFPM install once per Adobe engine instead of 6x - Oracle sleep 120 replaced with sqlplus health check - SQL Server memory 4GB->2GB, Oracle 2GB->1.5GB - JUnit XML reporting via JSON-to-XML conversion - Engine x database summary grid on workflow runs - BoxLang volume mounts re-enabled for local dev parity Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The test dataset is tiny (5 users, 8 authors, 40 photos). 4GB was excessive and prevents running all databases simultaneously on a 7GB GitHub runner. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Allows running all databases simultaneously within 7GB GitHub runner budget. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Volumes were commented out in 9790880 when Dockerfile was changed to COPY all code at build time. This broke local dev (code changes required rebuild). Re-enabling volumes restores live-reload behavior matching other CF engines. Docker gives volumes precedence over COPY, so CI still works correctly. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replaces cfengine x dbengine matrix (42 jobs) with cfengine-only matrix (8 jobs). Each job starts one CF engine + all databases, runs test suites sequentially. Key changes: - CF engine starts once per job instead of 6x (saves 5 startups per engine) - CFPM install runs once per Adobe engine instead of 6x (saves ~50 min compute) - Oracle sleep 120 replaced with sqlplus health check loop - All databases start in parallel during engine warmup - Tests continue after individual database failures (all DBs always run) - JUnit XML output uploaded for each engine-database pair - Summary jobs render engine x database grid on workflow run page - PR annotations via EnricoMi/publish-unit-test-result-action Total compute reduction: ~75% (from ~840 min to ~200 min) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Required by EnricoMi/publish-unit-test-result-action to post test result annotations and PR comments. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…rect Wheels returns HTTP 302 after reload=true completes. The test curl was capturing this 302 as a failure instead of following the redirect. Fix: issue the reload as a separate curl with -L (follow redirects), then run the actual test request without reload. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The previous fix split reload and test into two requests. But the reload request without format=json would run the full test suite in HTML format, then the second request would run it again — doubling execution time. Better approach: include reload=true AND format=json in one curl with -L. Wheels' redirectAfterReload strips reload/password but preserves db= and format=, so the redirect lands on ?db=X&format=json — exactly what we need. Single request, single test execution. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The ?db= parameter switches application.wheels.dataSourceName directly (runner.cfm:70-80). No reload needed because: - $_setTestboxEnv() handles datasource switching per HTTP request - populate.cfm creates identical table schemas across all databases - The old 42-job workflow never used reload=true either reload=true was breaking Adobe CF engines because $handleRestartAppRequest passes "application" as a component reference to cfinvoke, which Adobe CF can't resolve. Removing it fixes all Adobe engines and simplifies the curl. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v5 uses Node.js 20 which is deprecated and will be forced to Node.js 24 on June 2, 2026. v6 natively supports Node.js 24. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Action version bumps (Node.js 24 support): - actions/checkout v4 → v5 - actions/upload-artifact v4 → v5 - actions/download-artifact v4 → v5 Restart CF engine container between database runs to prevent cross-DB contamination. Without restart, cached model metadata and association methods from one database's test run leak into subsequent runs: - BoxLang: shallow copy in runner.cfm causes datasource name to not actually switch (duplicate key errors on 2nd+ database) - Adobe CF: stale association methods cause "method not found" errors on later databases (e.g. hasAuthor missing on 4th DB) Container restart takes ~10-15s — much cheaper than a full rebuild, and guarantees clean application state per database. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fixes remaining Node.js 20 deprecation warnings in CI. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Cast count attributes to int() in JUnit XML generation (CFML returns floats for numeric values, causing ValueError in publish action) - Set FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 on publish-results and test-matrix-summary jobs (download-artifact@v6 still ships Node 20) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Contributor
Wheels Test Results 42 files 3 696 suites 22m 11s ⏱️ Results for commit 1aa54ec. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Restructures the GitHub Actions test matrix from 42 independent jobs (cfengine × dbengine) to 8 engine-grouped jobs that start each CF engine once and run all database test suites sequentially.
sleep 120replaced withsqlplushealth check loop (saves ~90s per occurrence)EnricoMi/publish-unit-test-result-action$GITHUB_STEP_SUMMARYHow it works
Each engine job:
?db=mysql&reload=true&format=json→?db=postgres&reload=true&format=json→ ...Summary jobs download all artifacts and render a matrix grid + PR annotations.
Database exclusions (preserved)
Test plan
reload=trueclears model cache between DB switchespublish-resultsjob creates PR annotationstest-matrix-summaryrenders the grid🤖 Generated with Claude Code