ci: add RustCFML as experimental non-blocking CI target#2757
Open
bpamiri wants to merge 7 commits into
Open
Conversation
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
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
test-rustcfml.ymlworkflow for iterative testing on dev branchesRustCFML 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)rustcfmladded viaincludewithexperimental: true→continue-on-error: trueStandalone workflow (
test-rustcfml.yml)claude/**branches andworkflow_dispatchcontinue-on-error: trueDocker infrastructure (
tools/docker/rustcfml/)settings.cfmandapp.cfmfor SQLite datasource configFeasibility assessment (
docs/plans/rustcfml-feasibility-assessment.md)Design decisions
--no-cache: Other engines rebuild without cache each run; RustCFML skips this since recompiling Rust from scratch every time is prohibitively slow.this.datasourcesinapp.cfm: RustCFML doesn't use CFConfig.json. Datasources are defined via Application.cfc scope using standard CFMLthis.datasourcessyntax.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. Theexperimental: trueflag ensures this never blocks PRs or releases.Test plan
experimentalflag, samecontinue-on-error: false)rustcfmljob appears in matrix withcontinue-on-error: truerustcfmlfailure does not block the overall workflowtest-rustcfml.ymltriggers onclaude/**branch pushhttps://claude.ai/code/session_01FSAD6qjDXUNiNsBWJncK1N