Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
272473e
chore(maestro): carry 0.10.1–0.12 harness state onto main; add .docke…
Industrial Oct 21, 2026
0a0c0f6
chore(maestro): 0.13.0 release spec, leaf specs, F63 follow-up
Industrial Oct 21, 2026
ea3fe1d
chore(maestro): release 0.13 mission, 39 leaf tasks, execution overla…
Industrial Oct 21, 2026
49c577d
docs(adr): ADR 0015 breadth batteries, Pipeline definition and 0.13 r…
Industrial Oct 21, 2026
d8f3efb
build(deps): one rcgen 0.14 across platform, node, axum, sql, tool an…
Industrial Oct 21, 2026
ee08152
feat(core): Effect::any_env and LocalEffect::any_env (r13-f-any-env)
Industrial Oct 21, 2026
d58df3c
chore(release): ADR 0010 Amendment 9, ai move, admin/i18n/pipeline sk…
Industrial Oct 21, 2026
9cc0072
chore(maestro): record follow-ups F64, F65 from #113 for 0.13
Industrial Oct 21, 2026
26959ab
feat(tool): rpc check --allow-retired Service:N (r13-f-rpc-retire)
Industrial Oct 21, 2026
4f3abaf
feat(i18n): Fluent catalogs, CLDR plurals and the CurrentLocale capab…
Industrial Oct 21, 2026
f20d90f
fix(stream): live unfold_effect streams deliver partial chunks instea…
Industrial Oct 21, 2026
4830ee2
feat(rpc): generated clients batch same-tick calls; HttpTransport hea…
Industrial Oct 21, 2026
a476168
feat(events): EventLog::head and EventSubscription::from_now (r13-f-e…
Industrial Oct 21, 2026
c728225
feat(ai): promote id_effect_ai to integration: provider-neutral chat,…
Industrial Oct 21, 2026
afb382b
feat(platform,axum): real 0-RTT per route and an HTTP/3 congestion sw…
Industrial Oct 21, 2026
41f7fcb
feat(sql): relations, eager loading and entity field metadata (r13-e3…
Industrial Oct 21, 2026
6eefaa1
feat(axum): server-rendered UI — maud views, components, layouts, htm…
Industrial Oct 21, 2026
6827692
docs(axum): ui doctests compile; templates depend on maud directly (r…
Industrial Oct 21, 2026
726c66a
refactor(axum): WebTransport wiring of h3 connections behind the feat…
Industrial Oct 21, 2026
6545d7b
test(events): SqlEventJournal append retry, conflict and failure path…
Industrial Oct 21, 2026
86b432b
test(stream): pull-path edge cases; flat_map state without an unreach…
Industrial Oct 21, 2026
3100872
feat(i18n): Accept-Language negotiation, axum locale layer, maud mess…
Industrial Oct 21, 2026
757c43e
feat(sql): keyset pagination with opaque, bounded page cursors (r13-e…
Industrial Oct 21, 2026
4b1da7d
feat(ai): embeddings across OpenAI and Ollama, bounded batches, typed…
Industrial Oct 21, 2026
6295a1e
feat(authz,sql): tenant resolution and one database per tenant (r13-e…
Industrial Oct 21, 2026
70d3da6
feat(sql): entity lifecycle hooks inside the write's transaction, out…
Industrial Oct 21, 2026
f38f266
feat(ai): typed tools, structured output and a bounded agent loop (r1…
Industrial Oct 21, 2026
e740ccf
docs(ai): structured-output doctest provides the layer with Structure…
Industrial Oct 21, 2026
12ba05d
feat(admin): AdminSite registration, guarded list and detail pages, p…
Industrial Oct 21, 2026
0802677
test(bench): eager-loading, i18n and UI render benches and gates (r13…
Industrial Oct 22, 2026
2d38dc3
test(bench): eager-loading, i18n and UI render benches and gates (r13…
Industrial Oct 22, 2026
ea13e54
feat(recipes): Leptos SSR + hydration on the id_effect host, data thr…
Industrial Oct 22, 2026
b9342d0
fix(bench): drop the CHANGELOG block and Cargo.lock lines a360dc80 du…
Industrial Oct 22, 2026
45f4a54
feat(node,rpc): node session pump with verified ingress; mesh RPC tra…
Industrial Oct 22, 2026
73a0b82
test(bench): D15 budgets as enforced delta gates in gates.toml (r13-e…
Industrial Oct 22, 2026
5b363f7
feat(axum,rpc): control frames leave the WebSocket message rate and g…
Industrial Oct 22, 2026
229b943
feat(rpc): WsClient dials wss:// with the platform verifier and speak…
Industrial Oct 22, 2026
8ebbbc9
test(node): session and session-pump unit tests cover the wire, trans…
Industrial Oct 22, 2026
f1bfb82
feat(admin): create/edit/delete forms, relation pickers, bulk actions…
Industrial Oct 22, 2026
70d68b8
feat(ai): MCP server and client pinned to 2026-07-28, stdio and guard…
Industrial Oct 22, 2026
f38e9b8
build(ai): mcp-http enables authz route guards and the axum Origin al…
Industrial Oct 22, 2026
0d4aec2
docs(migration): WsConfig control-frame cap behaviour change (r13-f-w…
Industrial Oct 24, 2026
b004872
test(rpc): mesh client errors, endpoint-less stream calls and in-memo…
Industrial Oct 24, 2026
e9a4f21
fix(admin): audit Change fields allowed dead without feature audit (r…
Industrial Oct 24, 2026
6676366
docs(bench): eager pair re-measured at 0.334 and bench-side knobs rul…
Industrial Oct 24, 2026
0a04d94
fix(platform,axum): early-data routes read the connection's own hands…
Industrial Oct 24, 2026
35bbfd6
test(axum): ws unit tests cover origins, channel sockets and the clos…
Industrial Oct 24, 2026
43c6435
docs(bench): leaf gate run end to end, eager pair 0.416 awaits the ow…
Industrial Oct 24, 2026
2d3c007
docs(bench): quietest gate run stored, eager pair 0.348 and three own…
Industrial Oct 24, 2026
dd65fd4
feat(tool): id-effect generate admin writes a guarded, deny-by-defaul…
Industrial Oct 24, 2026
ac8d219
feat(axum,tool): WebTransport in the host entry points and a Deno tes…
Industrial Oct 24, 2026
f2dbfc6
test(security): breadth fuzz targets, compile-fail cases and surface_…
Industrial Oct 24, 2026
18dc3ac
feat(axum,rpc): WebSockets over TLS HTTP/2 with RFC 8441 extended CON…
Industrial Oct 24, 2026
7f4da50
feat(kit,tool): breadth kit features, tenancy bridge, posture probes …
Industrial Oct 24, 2026
927a13d
feat(pipeline): multi-tenant intake core with AI stages, outbox hook,…
Industrial Oct 24, 2026
9b4f516
feat(relay): HTTP/3 and WebTransport from the host, the mesh on its o…
Industrial Oct 24, 2026
c6b74a9
feat(pipeline): back office with generated admin, htmx review queue, …
Industrial Oct 24, 2026
6808454
fix(pipeline): enforce the prod posture when the service starts (r13-…
Industrial Oct 24, 2026
c202ea6
docs(security,bench): 0.13 security and DX KPIs, unary RPC and local …
Industrial Oct 24, 2026
6f47a6d
docs(changelog): 0.13 security and DX KPIs (r13-w8-kpis)
Industrial Oct 24, 2026
5a471d0
chore(maestro): 0.13 task state and contracts
Industrial Oct 24, 2026
1af2c2e
Merge origin/main (0.12.0 release fixes #114-#120) into release/0.13.0
Industrial Oct 24, 2026
2cf4564
fix(axum): the WebTransport host registers its h3 route at bind, as H…
Industrial Oct 24, 2026
577bc93
feat(security): security_releases KPI checks SECURITY.md against publ…
Industrial Oct 24, 2026
1e24f85
docs(bench): eager pair limit 0.45 by owner decision, SQLite per-row …
Industrial Oct 24, 2026
7919eaa
docs(migration): MIGRATION-0.13 bodies for every break and CHANGELOG …
Industrial Oct 24, 2026
6935d83
build(deps): ctutils 0.4.4 (RUSTSEC-2026-0385); ignore RUSTSEC-2026-0…
Industrial Oct 24, 2026
00e4edc
fix(compute): take the first sysinfo sample off the calling thread (F64)
Industrial Oct 24, 2026
0b6d41c
fix(sql): close a dropped MySQL stream's connection instead of draini…
Industrial Oct 24, 2026
e82b0fb
docs: rustdoc -D warnings clean (redundant link targets, private self…
Industrial Oct 24, 2026
4e5a190
style: treefmt CI formatting (id_effect_ai module order, v0.13.json)
Industrial Oct 24, 2026
ee0e24d
chore(maestro): mark 0.12 follow-ups F63, F64, F65 fixed in the 0.13 …
Industrial Oct 24, 2026
f050a68
docs(migration): semver-checks auto-trait breaks of WsConfig and WsCl…
Industrial Oct 24, 2026
7dcbed4
fix: box the primed sysinfo state (clippy large_enum_variant); test m…
Industrial Oct 24, 2026
0bb2f42
docs(security): 0.13 security KPIs rerun with security_releases (r13-…
Industrial Oct 24, 2026
850f0b0
docs(migration): map every cargo semver-checks finding vs v0.12.0 to …
Industrial Oct 24, 2026
4a7b8f9
docs(security): record the registry-token release flow as an owner de…
Industrial Oct 24, 2026
2f9d60c
feat(security): registry_token honours an accepted S3; record the #11…
Industrial Oct 24, 2026
e9032b4
fix(rpc): refuse serde_json's raw-value key in decoded JSON payloads …
Industrial Oct 25, 2026
182d65a
test(security): list the 0.13 early-data opt-out in the security surf…
Industrial Oct 25, 2026
82407fc
docs(scorecard): 0.13.0 blind re-score, E 86.8 (#1), RT 88.7, red 3; …
Industrial Oct 25, 2026
d5eec34
test(sql): entity derive UI snapshot names the 0.13 relation attributes
Industrial Oct 25, 2026
ee32538
chore(release): 0.13.0
Industrial Oct 25, 2026
a2cc60f
docs(security): S3 and S6 accepted by the #118 release-flow owner dec…
Industrial Oct 25, 2026
4de8d5a
docs(release): 0.13.0 CHANGELOG, owner decisions D16, F66 and #118, s…
Industrial Oct 25, 2026
a344eba
test(proc_macro): cover Entity relations and field metadata; events: …
Industrial Oct 25, 2026
7c32547
docs(contributing): release tags are annotated, signing optional (#118)
Industrial Oct 25, 2026
014bcab
test(rpc): same-tick batching asserted on a single-thread runtime, wh…
Industrial Oct 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 4 additions & 1 deletion .cargo/audit.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
#
# RUSTSEC-2026-0381: webpki-roots 0.26.11 (via sqlx-core 0.8.6) is the semver-trick shim that
# re-exports webpki-roots 1, resolved to the fixed 1.0.10; its roots are the patched ones.
# RUSTSEC-2026-0387: crypto-bigint 0.5.5 arrives only via openidconnect 4.0.1 -> p256/p384 0.13;
# no workspace code does an elliptic-curve private-key operation through it (ID tokens are
# verified by jsonwebtoken on aws-lc-rs). Remove when openidconnect moves to elliptic-curve 0.14.
# Keep in sync with deny.toml.
[advisories]
ignore = ["RUSTSEC-2023-0071", "RUSTSEC-2026-0381"]
ignore = ["RUSTSEC-2023-0071", "RUSTSEC-2026-0381", "RUSTSEC-2026-0387"]
11 changes: 11 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
.git
.devenv
.direnv
target
target-ci-stable
.cargo-ci-stable
state
tmp
lcov.info
.roam
.serena
7 changes: 4 additions & 3 deletions .github/workflows/cflite_batch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ permissions:
jobs:
BatchFuzzing:
runs-on: ubuntu-latest
timeout-minutes: 240
# fuzz-seconds (230 minutes), the 10-minute prune and the build.
timeout-minutes: 300
permissions:
contents: read
# Find the corpus artifacts of the previous run.
Expand All @@ -33,9 +34,9 @@ jobs:
uses: google/clusterfuzzlite/actions/run_fuzzers@884713a6c30a92e5e8544c39945cd7cb630abcd1 # v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
# Split evenly across the targets: 10 minutes each for the 17 in fuzz/. Add 600 per
# Split evenly across the targets: 10 minutes each for the 23 in fuzz/. Add 600 per
# target added to fuzz/Cargo.toml (and raise timeout-minutes with it).
fuzz-seconds: 10200
fuzz-seconds: 13800
mode: batch
sanitizer: ${{ matrix.sanitizer }}
- name: Prune the corpus
Expand Down
10 changes: 6 additions & 4 deletions .github/workflows/cflite_pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ permissions:
jobs:
PR:
runs-on: ubuntu-latest
timeout-minutes: 120
# fuzz-seconds (115 minutes) plus the build.
timeout-minutes: 150
permissions:
contents: read
# Download the corpus the batch job stored as workflow artifacts.
Expand All @@ -41,8 +42,9 @@ jobs:
uses: google/clusterfuzzlite/actions/run_fuzzers@884713a6c30a92e5e8544c39945cd7cb630abcd1 # v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
# Split evenly across the targets: 5 minutes each for the 17 in fuzz/ (D20; 0.12 added the
# six rpc and SSE decoders). Add 300 per target added to fuzz/Cargo.toml.
fuzz-seconds: 5100
# Split evenly across the targets: 5 minutes each for the 23 in fuzz/ (D20; 0.12 added the
# six rpc and SSE decoders, 0.13 the six breadth decoders). Add 300 per target added to
# fuzz/Cargo.toml (and raise timeout-minutes with it).
fuzz-seconds: 6900
mode: code-change
sanitizer: ${{ matrix.sanitizer }}
160 changes: 151 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,14 +55,15 @@ jobs:
run: |
set -euo pipefail
bash scripts/scorecard.sh --validate --self-test
for v in 0.6.0 0.7.0 0.8.0 0.9.0 0.10.0 0.11.0 0.12.0; do
for v in 0.6.0 0.7.0 0.8.0 0.9.0 0.10.0 0.11.0 0.12.0 0.13.0; do
bash scripts/scorecard.sh --json "$v" | diff - "docs/scorecard/results/v$v.json"
done
bash scripts/scorecard.sh --diff 0.9.0 0.10.0 --compare-targets 0.10.0
bash scripts/scorecard.sh --diff 0.10.0 0.11.0 --compare-targets 0.11.0
bash scripts/scorecard.sh --diff 0.11.0 0.12.0 --compare-targets 0.12.0
bash scripts/scorecard.sh --diff 0.12.0 0.13.0 --compare-targets 0.13.0
bash scripts/scorecard.sh --method 1 --version 0.7.0
# No --report 0.11.0 / 0.12.0: those reports end with hand-written release exit notes the
# No --report 0.11.0 / 0.12.0 / 0.13.0: those reports end with hand-written release exit notes the
# generator cannot produce, so regenerating them would always differ.
bash scripts/scorecard.sh --report 0.7.0 --report 0.8.0 --report 0.9.0 --report 0.10.0 --html --method-compare
git diff --exit-code docs/scorecard/REPORT-0.7.0.md docs/scorecard/REPORT-0.8.0.md docs/scorecard/REPORT-0.9.0.md docs/scorecard/REPORT-0.10.0.md docs/scorecard/index.html docs/scorecard/REPORT-method-v2.md
Expand Down Expand Up @@ -467,13 +468,46 @@ jobs:
cargo nextest run --locked -p id_effect_rpc -p id_effect_rpc_macros -p relay --all-features
cargo test --locked -p id_effect_rpc -p id_effect_rpc_macros --doc --all-features
# ──────────────────────────────────────────────────────────────────────────
# Breadth (0.13, ADR 0010 Amendment 9): id_effect_ai (moved out of labs), id_effect_admin,
# id_effect_i18n and the Pipeline reference app, all features. They are not moon projects yet,
# so this job is what runs their clippy and tests on every PR (the workspace jobs build them
# too). No AI vendor is called: wiremock fixtures and scripted models only (0.13 D8).
# ──────────────────────────────────────────────────────────────────────────
breadth:
name: Breadth crates (ai, admin, i18n, Pipeline)
runs-on: ubuntu-latest
needs: [moon-ci]
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Install Rust (pinned, rust-toolchain.toml)
uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # master
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
components: clippy
- name: Cache
uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
with:
key: breadth
- name: Install cargo-nextest
uses: taiki-e/install-action@ab6895351a88b908e96a4697860d4ffea5e57dbe # v2.87.27
with:
tool: cargo-nextest
- name: Clippy
run: cargo clippy --locked -p id_effect_ai -p id_effect_admin -p id_effect_i18n -p pipeline --all-targets --all-features -- -D warnings
- name: Tests
run: |
cargo nextest run --locked -p id_effect_ai -p id_effect_admin -p id_effect_i18n -p pipeline --all-features
cargo test --locked -p id_effect_ai -p id_effect_admin -p id_effect_i18n -p pipeline --doc --all-features
# ──────────────────────────────────────────────────────────────────────────
# Relay reference app (0.12 §6 KPI, never cut): three nodes on real QUIC and TLS on
# loopback, the mesh (mutual TLS, `idm/1`) on the endpoint that serves HTTP/3 and
# WebTransport (ADR 0014 D7), PostgreSQL in the tests' own container; the Rust client over
# HTTP/1.1-2, HTTP/3 and WebSocket, the generated TypeScript client under Deno, Chromium over
# CDP (WebTransport, then WebSocket); the prod posture with zero accepted risks; `id-effect rpc
# check` against the last release tag; then once more with UDP dropped by iptables, to prove
# the TCP fallback.
# loopback, HTTP/3 and WebTransport served by the host entry point (0.13 F59: no endpoint of
# the Relay's own), the mesh (mutual TLS, `idm/1`) on its own endpoint with every session on
# a node session pump, PostgreSQL in the tests' own container; the Rust client over
# HTTP/1.1-2 and HTTP/3 (`HttpTransport::with_bearer`) and its own `wss://` WebSocket, the
# generated TypeScript client under Deno, Chromium over CDP (WebTransport, then WebSocket);
# the prod posture with zero accepted risks; the manifest on the kit only (cargo metadata);
# `id-effect rpc check` against the last release tag; then once more with UDP dropped by
# iptables, to prove the TCP fallback.
# ──────────────────────────────────────────────────────────────────────────
reference-relay:
name: Reference app (Relay)
Expand Down Expand Up @@ -517,7 +551,7 @@ jobs:
run: |
cargo fmt -p relay --check
cargo clippy -p relay --all-targets --locked -- -D warnings
- name: Relay KPI (3 nodes over HTTP/3 and WebSocket, presence, resume, membership, browser, TypeScript, prod posture, contract)
- name: Relay KPI (3 nodes over HTTP/3 and WebSocket, host WebTransport, kit-only manifest, presence, resume, membership, browser, TypeScript, prod posture, contract)
run: cargo nextest run --locked -p relay
- name: id-effect rpc check against the last release tag
run: |
Expand All @@ -541,9 +575,115 @@ jobs:
RELAY_UDP_BLOCKED_PORT="${RELAY_BLOCKED_PORT}" \
cargo nextest run --locked -p relay -E 'test(=relay_udp_blocked_falls_back_to_tcp)'
# ──────────────────────────────────────────────────────────────────────────
# Pipeline reference app (0.13 §6 KPI, never cut; r13-w6-pipeline): the multi-tenant
# document-intake pipeline on PostgreSQL in the tests' own container, two databases per test
# (`acme` on the main one with the job queue, `globex` on its own through the TenantRouter);
# ingest by RPC and upload, the extract / classify / embed jobs, the status subscription,
# publication through the outbox hook, the MCP server (guarded, Origin-checked) and client.
# Deterministic AI only (D8): ScriptedModel and the recorded OpenAI / Anthropic fixtures under
# wiremock; no key, no vendor call. The back office (r13-w7-pipeline-backoffice): the admin
# generated with `id-effect generate admin`, the htmx + maud review queue in English and German,
# CSRF on every post, and the prod posture with zero accepted risks (id_effect_admin on
# platform, check P).
# ──────────────────────────────────────────────────────────────────────────
reference-pipeline:
name: Reference app (Pipeline)
runs-on: ubuntu-latest
needs: [moon-ci]
env:
ID_EFFECT_REQUIRE_PG: '1'
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Install Rust (pinned, rust-toolchain.toml)
uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # master
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
components: rustfmt, clippy
- name: Cache
uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
with:
key: reference-pipeline
- name: Install cargo-nextest
uses: taiki-e/install-action@ab6895351a88b908e96a4697860d4ffea5e57dbe # v2.87.27
with:
tool: cargo-nextest
# The tests start PostgreSQL with id_effect_test (postgres:17-alpine): pull it up front so
# no test times out on a cold pull.
- name: Pull PostgreSQL
run: docker pull -q postgres:17-alpine
- name: Format and lints
run: |
cargo fmt -p pipeline --check
cargo clippy -p pipeline --all-targets --locked -- -D warnings
- name: Pipeline KPI (two tenants, two databases, AI stages, outbox hook, RPC, MCP, back office, prod posture)
run: cargo nextest run --locked -p pipeline
# The README's commands still generate the admin: regenerate it into a scratch copy
# without `src/admin` and show what was edited after generation (README "Back office").
- name: Back office admin from `id-effect generate admin`
run: |
scratch="$(mktemp -d)"
cp -r examples/reference/pipeline "$scratch/pipeline"
rm -r "$scratch/pipeline/src/admin"
sed -i '/^pub mod admin;$/d' "$scratch/pipeline/src/lib.rs"
for entity in Source Document Label; do
cargo run --locked -q -p id_effect_tool --bin id-effect -- \
generate admin "$entity" --path "$scratch/pipeline"
done
diff -ru "$scratch/pipeline/src/admin" examples/reference/pipeline/src/admin || true
- name: Tier conformance (id_effect_ai, id_effect_i18n and id_effect_admin on platform, check P)
run: |
command -v rg >/dev/null || sudo apt-get install -y -qq ripgrep
bash scripts/tier-conformance.sh
# ──────────────────────────────────────────────────────────────────────────
# Leptos recipe (0.13 D4, r13-e9-5-leptos): examples/recipes/leptos-ssr, outside the workspace
# with its own Cargo.lock. Leptos SSR + hydration on the id_effect axum host, the page's data
# from an id_effect RPC service through its generated client. No npm: the wasm32-unknown-unknown
# target and wasm-bindgen-cli at the recipe's wasm-bindgen pin (scripts/build-site.sh checks
# it against Cargo.lock). Headless Chrome (the runner's) checks hydration under the real CSP.
# Not in ci-pass until it has been green twice.
# ──────────────────────────────────────────────────────────────────────────
recipe-leptos:
name: Recipe (Leptos SSR + hydration)
runs-on: ubuntu-latest
needs: [moon-ci]
env:
LEPTOS_SSR_REQUIRE_SITE: '1'
ID_EFFECT_REQUIRE_BROWSER: '1'
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Install Rust (pinned, rust-toolchain.toml) with the wasm target
uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # master
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
targets: wasm32-unknown-unknown
components: rustfmt, clippy
- name: Cache
uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
with:
workspaces: examples/recipes/leptos-ssr
key: recipe-leptos
# wasm-bindgen = the recipe's `wasm-bindgen` pin (Cargo.toml `=0.2.129`).
- name: Install cargo-nextest and wasm-bindgen-cli
uses: taiki-e/install-action@ab6895351a88b908e96a4697860d4ffea5e57dbe # v2.87.27
with:
tool: cargo-nextest,wasm-bindgen@0.2.129
- name: Format and lints (server and browser builds)
working-directory: examples/recipes/leptos-ssr
run: |
google-chrome --version
cargo fmt --check
cargo clippy --locked --all-targets -- -D warnings
cargo clippy --locked --lib --target wasm32-unknown-unknown --no-default-features \
--features hydrate -- -D warnings
- name: Build the browser bundle (wasm32-unknown-unknown + wasm-bindgen, no npm)
run: examples/recipes/leptos-ssr/scripts/build-site.sh
- name: Recipe tests (SSR, RPC, bundle, hydration in Chrome)
run: cargo nextest run --locked --manifest-path examples/recipes/leptos-ssr/Cargo.toml
# ──────────────────────────────────────────────────────────────────────────
# Labs: unpublished crates in the separate labs/ workspace (ADR 0010 Amendment 1).
# No API guarantees, but they must keep building and passing against core.
# id_effect_rpc left labs in 0.12 (ADR 0010 Amendment 8); the `rpc` job above tests it.
# id_effect_ai left labs in 0.13 (ADR 0010 Amendment 9); the `breadth` job above tests it.
# No system packages: since 0.11 (bundled SQLite and duroxide left with the workflow crate) no
# labs crate links OpenSSL, and aws-lc-sys (rustls via reqwest) builds without the cmake
# binary on Linux, as in the main-workspace jobs.
Expand Down Expand Up @@ -828,7 +968,9 @@ jobs:
- containers-integration
- reference-ledger
- reference-relay
- reference-pipeline
- rpc
- breadth
- labs
- minimal-versions
- validate-packaging
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: Publish to crates.io
# Trigger: push a semver tag, e.g. git tag v0.12.0 && git push origin v0.12.0
# Trigger: push a semver tag, e.g. git tag -a v0.13.0 -m v0.13.0 && git push origin v0.13.0
# The tag must match the version in every publishable Cargo.toml. docs/RELEASING.md has the flow.
#
# verify-versions versions match the tag
Expand Down
Loading
Loading