smoke-yano-x-release
Smoke-test a built Yano X JVM release ZIP on the local machine before tagging a pre-release — archive layout, tool launchers, the packaged multi-node acceptance gates (two-node generated project, thre
SKILL.md.agents/skills/smoke-yano-x-release/SKILL.md
GitHubSmoke-Test a Yano X Release ZIP
Prepare
Read
AGENTS.mdanddocs/BUILD_DISTRIBUTIONS.md. Never commit automatically.Confirm Java 25,
curl,jq,python3,unzip, andlsof.Build the archive (see
$build-yano-x), then copy it somewhere stable so a later Gradle run cannot rewrite it mid-test:./gradlew :distribution:jvm:yanoXJvmDistZip \ :distribution:jvm:verifyYanoXJvmDistribution \ :examples:showcase:showcaseScriptContract \ :examples:showcase:showcaseDistributionContract -PskipSigning=true cp distribution/jvm/build/distributions/yano-x-jvm-<version>.zip <scratch>/Never reuse ports or data of a retained deployment such as
devnet-cluster-xon HTTP 7170-7172. Port 7070 is often taken by another local Java process; the script defaults avoid it.
Run
From the repository root:
.agents/skills/smoke-yano-x-release/scripts/smoke_release_zip.sh \
<scratch>/yano-x-jvm-<version>.zip [--http-base 29770 --server-base 29370] [--keep]
The script takes about 10-15 minutes. It extracts into a new working directory, checks ports first, and prints one PASS/FAIL line per step:
| Step | Covers |
|---|---|
archive, layout |
ZIP integrity, host jar, plugins, devnet overlay, every tools/*/bin launcher on shared tools/lib |
runtime-acceptance |
Two-node generated project: identity, drift, finality, message/state proof, evidence, follower restart parity, no secrets in logs |
stock-outcomes |
Three-node yano.sh appchain cluster with the repository stock config: audit proof, registry value proof, approval and effect demo |
showcase-quickstart |
13-chain light showcase on three nodes with the workflow-chain L1 anchor |
showcase-projection-off |
Every node started with the devnet history projection disabled |
showcase-run-all, showcase-verify |
All scenarios, then cross-node tip/root agreement and finality certificates |
showcase-restart, showcase-persisted-tips |
Graceful full restart; tips never regress and roots at recorded heights are unchanged |
distribution-config-unchanged |
The showcase never edits the distribution's config/ |
It stops the showcase on exit. It deletes the working directory only after a
full pass without --keep; on failure the directory, step logs, and node logs
under showcase-data/smoke/cluster/node*/node.log stay for diagnosis. Use
--skip-showcase for the gates only, --skip-run-all for a faster showcase.
Known platform facts
- Yano's JVM ZIP bundles DuckDB extensions for
linux_amd64only, and the Yano%devnetprofile enables the DuckLake history projection (bloxbean/yano#137). Yano X shipsconfig/application-devnet.ymlandexamples/showcase/yano/config/application-devnet.ymlturning it off. If a node fails withfailed to initialise the DuckLake projection schema, that overlay is missing or overridden. Do not paper over it with_DEVNET_YANO_HISTORY_PROJECTION_ENABLED=false; the script unsets it. - The node rejects a symlinked plugins directory.
showcase.shexportsYANO_PLUGINS_DIRECTORYwith the real path. cardano-history-chainrecords nothing until the L1 epoch-stability depth passes (devnet epoch 2, about three minutes after genesis). Its plugin route returns 404 until then;run cardano-historywaits up to 300 s for it.finalDistributionRuntimeAcceptanceandfinalDistributionStockOutcomeAcceptanceare not part ofbuildor CI; this skill is where they run.- Not covered: the Docker
evidenceprofile, theeutxoprofile, preprod, and a remoteyano-x-deploy apply.
Report
List every step with PASS/FAIL and duration, the ZIP name and size, the Yano
version from yano-x-distribution-v1.json, the OS/architecture, and anything
skipped. For a failure, quote the first relevant ERROR from the step log or
node log rather than rerunning until it passes.