Skip to content

Commit 7ea8bf0

Browse files
committed
docs(engines),ci(rustcfml): document RustCFML support, de-experimentalize the lane, and bump the pin to v0.637.0
- cfml-engines.mdx: add RustCFML as the fourth supported engine with a dedicated section (launcher usage, PR CI + release matrix gating, the no-JVM java.* caveat) and a 'Pick an engine' entry. - compat-matrix.yml: rename 'rustcfml (experimental)' to 'rustcfml', drop continue-on-error, and refresh the stale informational-lane comment to reference the required PR check. - run-suite.sh: update the header comment and preserve the baseline's _notes on --write-baseline regenerations. - baseline.json: add _notes linking the tracked failure to upstream RustCFML issues #376-#381. - Bump ENGINE_VERSION to v0.637.0. Signed-off-by: Peter Amiri <peter@alurium.com>
1 parent 0800b23 commit 7ea8bf0

5 files changed

Lines changed: 47 additions & 17 deletions

File tree

.github/workflows/compat-matrix.yml

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -589,20 +589,21 @@ jobs:
589589
path: /tmp/junit-results/
590590

591591
#############################################
592-
# RustCFML (experimental, JVM-free engine)
592+
# RustCFML (JVM-free engine)
593593
#############################################
594-
# Informational lane, never a merge gate. The engine is pinned in
594+
# Supported engine leg: the release-matrix counterpart of the required
595+
# PR check in .github/workflows/rustcfml-ci.yml (which runs the same
596+
# suite on every pull request to develop). The engine is pinned in
595597
# tools/rustcfml/ENGINE_VERSION (upstream ships multiple releases/day, so
596598
# tracking latest would make this lane flake on engine churn). Pass criteria
597599
# is "no NEW failures vs tools/rustcfml/baseline.json" — known residual
598-
# errors (no-JVM limitations, open upstream issues) live in the baseline.
599-
# To bump the pin: update ENGINE_VERSION, run
600+
# errors (open upstream issues, listed in the baseline notes) live in the
601+
# baseline. To bump the pin: update ENGINE_VERSION, run
600602
# bash tools/rustcfml/run-suite.sh --write-baseline
601-
# locally, and commit both files together.
603+
# on Linux, and commit both files together.
602604
rustcfml:
603-
name: "rustcfml (experimental)"
605+
name: "rustcfml"
604606
runs-on: ubuntu-latest
605-
continue-on-error: true
606607
steps:
607608
- name: Checkout Repository
608609
uses: actions/checkout@v5

tools/rustcfml/ENGINE_VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v0.635.2
1+
v0.637.0

tools/rustcfml/baseline.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"engineVersion": "v0.635.2",
2+
"engineVersion": "v0.637.0",
33
"totals": {
44
"totalSpecs": 5375,
55
"totalPass": 5350,
@@ -9,5 +9,10 @@
99
},
1010
"failing": [
1111
"wheels.tests.specs.migrator.migrationSpec :: Tests addIndex :: creates an index on multiple columns"
12+
],
13+
"_notes": [
14+
"Known residual failures are upstream RustCFML engine bugs; each entry above maps to an open issue on https://github.com/RustCFML/RustCFML:",
15+
"migrationSpec 'creates an index on multiple columns' -> https://github.com/RustCFML/RustCFML/issues/377 (query-of-query recordCount corruption after repeated QoQs).",
16+
"Earlier tracked bugs now fixed framework-side or upstream were: #376 Hash(binary), #378 java.io.File two-arg constructor, #379 void-assignment key deletion, #380 GetTempDirectory separator, #381 new-operator name lowercasing."
1217
]
1318
}

tools/rustcfml/run-suite.sh

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
# Run the Wheels core suite on the pinned RustCFML engine build and compare the
33
# outcome against the checked-in known-failure baseline (tools/rustcfml/baseline.json).
44
#
5-
# RustCFML is a JVM-free CFML engine under active development. This lane is
6-
# informational: it is never a merge gate. Pass criteria is "no NEW failures
7-
# versus the baseline", not zero failures — a set of known residual errors
8-
# (no-JVM limitations and open upstream engine issues) is expected and tracked
9-
# in the baseline file.
5+
# RustCFML is a supported JVM-free CFML engine. This script backs both the
6+
# required PR check (.github/workflows/rustcfml-ci.yml) and the release-matrix
7+
# leg (compat-matrix.yml). Pass criteria is "no NEW failures versus the
8+
# baseline", not zero failures — residual engine bugs are tracked in
9+
# tools/rustcfml/baseline.json with upstream issue links in the "_notes" key.
1010
#
1111
# Usage:
1212
# bash tools/rustcfml/run-suite.sh # compare against baseline
@@ -138,6 +138,14 @@ if mode == "write":
138138
"totals": totals,
139139
"failing": sorted(failing.keys()),
140140
}
141+
# Preserve the human-maintained "_notes" (upstream issue links) across
142+
# regenerations.
143+
try:
144+
existing = json.load(open(baseline_path))
145+
if isinstance(existing.get("_notes"), list):
146+
payload["_notes"] = existing["_notes"]
147+
except Exception:
148+
pass
141149
with open(baseline_path, "w") as fh:
142150
json.dump(payload, fh, indent=2)
143151
fh.write("\n")

web/sites/guides/src/content/docs/v4-0-0/start-here/cfml-engines.mdx

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
---
22
title: CFML Engines
3-
description: Run Wheels on Lucee, Adobe ColdFusion, or BoxLang. The wheels CLI ships with Lucee; the framework runs on all three.
3+
description: Run Wheels on Lucee, Adobe ColdFusion, BoxLang, or the JVM-free RustCFML interpreter. The wheels CLI ships with Lucee; the framework runs on all four.
44
type: explanation
55
sidebar:
66
order: 6
77
---
88

99
import { Aside, Tabs, TabItem, Steps, CardGrid, LinkCard } from '@astrojs/starlight/components';
1010

11-
Wheels is the framework. **The framework runs on three CFML engines:** Lucee, Adobe ColdFusion, and BoxLang. The `wheels` CLI is a separate thing — it's a developer convenience that bundles a Lucee runtime so newcomers can `brew install wheels` and have a working dev server in one step. If you need Adobe CF or BoxLang for development or production, you don't use the `wheels` CLI's bundled runtime; you use a CommandBox-managed server (or a manual install) and the framework handles the rest.
11+
Wheels is the framework. **The framework runs on four CFML engines:** Lucee, Adobe ColdFusion, BoxLang, and RustCFML. The `wheels` CLI is a separate thing — it's a developer convenience that bundles a Lucee runtime so newcomers can `brew install wheels` and have a working dev server in one step. If you need Adobe CF, BoxLang, or RustCFML for development or production, you don't use the `wheels` CLI's bundled runtime; you use a CommandBox-managed server (or a manual install) and the framework handles the rest.
1212

1313
## TL;DR
1414

@@ -17,8 +17,11 @@ Wheels is the framework. **The framework runs on three CFML engines:** Lucee, Ad
1717
| Lucee 6 / 7 | Yes — bundled, recommended | Yes | Yes |
1818
| Adobe ColdFusion 2023 / 2025 | No — install manually | Yes — recommended | Yes |
1919
| BoxLang | No | Yes | Yes |
20+
| RustCFML | No | No — ships its own launcher | Yes¹ |
2021

21-
The framework's CI matrix (`.github/workflows/compat-matrix.yml`) runs every release against Lucee 6, Lucee 7, Adobe CF 2023, Adobe CF 2025, and BoxLang on each release. Engine support is hard-gated.
22+
¹ RustCFML is a JVM-free interpreter, so app code that calls `java.*` classes through `CreateObject("java")` does not work on it. The core suite runs green against a pinned RustCFML build with one tracked upstream bug (a query-of-query `recordCount` issue) — see [Running Wheels on RustCFML](#running-wheels-on-rustcfml).
23+
24+
The framework's CI matrix (`.github/workflows/compat-matrix.yml`) runs every release against Lucee 6, Lucee 7, Adobe CF 2023, Adobe CF 2025, BoxLang, and RustCFML, and a dedicated RustCFML leg (`.github/workflows/rustcfml-ci.yml`) runs on every pull request to `develop`. Engine support is hard-gated.
2225

2326
## Why the `wheels` CLI is Lucee-only
2427

@@ -87,11 +90,24 @@ The `wheels start`, `wheels stop`, `wheels reload`, and `wheels test` commands a
8790

8891
Wheels' BoxLang compatibility is verified per release in the same CI matrix as Lucee and Adobe CF. Cross-engine gotchas worth knowing about live in [`.ai/wheels/cross-engine-compatibility.md`](https://github.com/wheels-dev/wheels/blob/develop/.ai/wheels/cross-engine-compatibility.md) — most are about minor differences in struct/array semantics under closures.
8992

93+
## Running Wheels on RustCFML
94+
95+
[RustCFML](https://github.com/RustCFML/RustCFML) is a JVM-free CFML interpreter written in Rust. It ships its own launcher instead of a CommandBox module: download the binary for your platform from the [releases](https://github.com/RustCFML/RustCFML/releases) page and point it at your Wheels app's `public/` directory:
96+
97+
```bash
98+
rustcfml --serve public --port 8080
99+
```
100+
101+
Wheels treats RustCFML as a first-class engine. The framework's core test suite (all 5,300+ specs) runs against a pinned RustCFML build on every pull request to `develop` via `.github/workflows/rustcfml-ci.yml` and on every release in the compatibility matrix. The suite is green except for one tracked upstream engine bug — a query-of-query `recordCount` edge case ([RustCFML/RustCFML#377](https://github.com/RustCFML/RustCFML/issues/377)) recorded in `tools/rustcfml/baseline.json`, which the CI leg compares against so *new* failures block a merge while the known one does not.
102+
103+
Because there is no JVM, RustCFML cannot run `CreateObject("java", …)` — any app code (or third-party package) that reaches into `java.*` classes will not work on it. The Wheels framework core has been made engine-agnostic, so framework features (routing, ORM, migrations, storage signing, channels, auth hashing) run without the JVM.
104+
90105
## Pick an engine
91106

92107
- **You're new to Wheels and want the easiest path:** Lucee, with the bundled `wheels` CLI. Skip the rest of this page.
93108
- **Your team standardised on Adobe CF:** CommandBox + Adobe CF. Skip the bundled CLI's `start`/`stop` commands; use `box server` instead.
94109
- **You want a modern, performant CFML runtime and don't have legacy Adobe scripts to support:** BoxLang via CommandBox.
110+
- **You want a small, JVM-free runtime (edge/serverless, WASM-targetable) and no app code needs `java.*`:** RustCFML, serving `public/` directly.
95111
- **You're shipping to a production server you don't control:** the framework runs on whatever engine that server uses; the `wheels` CLI doesn't ship to production.
96112

97113
## Related

0 commit comments

Comments
 (0)