Skip to content

ci: add RustCFML as experimental non-blocking CI target#2757

Open
bpamiri wants to merge 7 commits into
developfrom
claude/evaluate-rustcfml-feasibility-40oUw
Open

ci: add RustCFML as experimental non-blocking CI target#2757
bpamiri wants to merge 7 commits into
developfrom
claude/evaluate-rustcfml-feasibility-40oUw

Conversation

@bpamiri
Copy link
Copy Markdown
Collaborator

@bpamiri bpamiri commented May 18, 2026

Summary

  • Add RustCFML (v0.9.1) to the compat matrix as a non-blocking, experimental engine
  • Create standalone test-rustcfml.yml workflow for iterative testing on dev branches
  • Include feasibility assessment documenting compatibility analysis

RustCFML is a CFML interpreter written in Rust — a potential lightweight runtime (8 MB / instant startup vs 350 MB / 15s for Lucee). Three of four previously identified blockers (onMissingMethod, cflock, getMetadata) are now implemented. This PR adds visibility into how Wheels behaves on it without affecting CI status.

What's added

Main matrix (tests.yml)

  • rustcfml added via include with experimental: truecontinue-on-error: true
  • Tests SQLite only (RustCFML uses native Rust DB drivers, not JDBC)
  • Docker layer caching allowed for the Rust source build
  • Added to the matrix summary grid

Standalone workflow (test-rustcfml.yml)

  • Triggers on claude/** branches and workflow_dispatch
  • Staged: build → health check → smoke test → full suite
  • Generates compatibility report committed back to branch
  • Every step is continue-on-error: true

Docker infrastructure (tools/docker/rustcfml/)

  • Multi-stage Dockerfile: Rust builder → Debian slim runtime
  • Custom settings.cfm and app.cfm for SQLite datasource config
  • Compose service on port 60100

Feasibility assessment (docs/plans/rustcfml-feasibility-assessment.md)

  • Updated evaluation covering v0.4.0 → v0.9.1 progress
  • Compatibility analysis against Wheels core features
  • Remaining blockers and recommended next steps

Design decisions

  • SQLite only: RustCFML uses native Rust database drivers (rusqlite, not JDBC), so CFConfig datasource definitions don't apply. Starting with SQLite minimizes config complexity.
  • Separate workflow: The Rust source build takes 15+ minutes. A standalone workflow avoids slowing the main matrix while still providing data on dev branches.
  • No --no-cache: Other engines rebuild without cache each run; RustCFML skips this since recompiling Rust from scratch every time is prohibitively slow.
  • this.datasources in app.cfm: RustCFML doesn't use CFConfig.json. Datasources are defined via Application.cfc scope using standard CFML this.datasources syntax.

Expected behavior

The RustCFML job will likely fail initially — probably at Application.cfc initialization due to createObject("java", ...) calls or datasource format mismatches. That's the point: each failure maps the compatibility boundary. The experimental: true flag ensures this never blocks PRs or releases.

Test plan

  • Verify existing 8 engine matrix jobs are unaffected (no new experimental flag, same continue-on-error: false)
  • Verify rustcfml job appears in matrix with continue-on-error: true
  • Verify rustcfml failure does not block the overall workflow
  • Verify test-rustcfml.yml triggers on claude/** branch push
  • Review compatibility report output after first run

https://claude.ai/code/session_01FSAD6qjDXUNiNsBWJncK1N

claude and others added 7 commits March 15, 2026 18:14
Evaluates pixl8/RustCFML v0.4.0 as a potential alternative CFML runtime
for Wheels. Key finding: not feasible today due to missing dynamic method
dispatch (onMissingMethod), Java interop, and metadata introspection that
Wheels' ActiveRecord ORM requires. Worth monitoring for future potential
given its 3x throughput and 44x lower memory footprint vs Lucee.

https://claude.ai/code/session_01FSAD6qjDXUNiNsBWJncK1N
csrfGenerateToken/csrfVerifyToken confirmed as implemented in RustCFML,
though behavioral compatibility with Lucee still needs verification.

https://claude.ai/code/session_01FSAD6qjDXUNiNsBWJncK1N
Re-evaluated pixl8/RustCFML after two months of rapid development.
Three of four critical blockers now resolved:
- onMissingMethod: implemented (enables dynamic finders)
- cflock: implemented with RwLock-based concurrency
- getMetadata: implemented (enables model config/test discovery)

Only Java interop remains, affecting 2-3 call sites with easy fixes.
Project grew 3→20 stars, 39→108 commits, 14 releases in 2 months.
Recommendation upgraded from "watch and wait" to "proof-of-concept."

https://claude.ai/code/session_01FSAD6qjDXUNiNsBWJncK1N
Add RustCFML (pixl8/RustCFML) to the test matrix as an experimental,
non-blocking engine. This gives visibility into how Wheels behaves on a
non-JVM CFML runtime without affecting CI pass/fail status.

Changes:
- Add rustcfml to matrix with experimental: true (continue-on-error)
- Create tools/docker/rustcfml/ with Dockerfile, settings, datasource config
- Add rustcfml service to compose.yml on port 60100
- Add standalone test-rustcfml.yml workflow for claude/* branches
- Test against SQLite only (RustCFML uses native Rust DB drivers, not JDBC)
- Allow Docker layer caching for Rust source builds
- Add rustcfml row to test matrix summary grid
- Update feasibility assessment with latest v0.9.1 findings

Expected: many test failures initially. The goal is to measure the
compatibility gap and track progress over time.

https://claude.ai/code/session_01FSAD6qjDXUNiNsBWJncK1N
@github-actions github-actions Bot added the docs label May 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants