diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 30eeafa..bb2a270 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -52,6 +52,32 @@ jobs: echo "Tauri IPC imported outside ui/src/api/wallet.ts:"; echo "$hits"; exit 1 fi + - name: dev node + # The chain adapter's integration tests run against a real + # `quantus-node --dev` from the pinned release (script/dev-node.sh). + # Started here, in the background, so the next step can use it; the + # runner is ephemeral, so nothing is cleaned up. + run: | + set -euo pipefail + script/dev-node.sh > dev-node.log 2>&1 & + for _ in $(seq 1 60); do + if curl -s -m 2 -H 'content-type: application/json' \ + -d '{"jsonrpc":"2.0","id":1,"method":"system_chain","params":[]}' \ + http://127.0.0.1:9944 | grep -q DevNet; then + echo "dev node up"; exit 0 + fi + sleep 2 + done + echo "dev node did not come up"; tail -50 dev-node.log; exit 1 + + - name: chain adapter against the dev node + env: + WALLET_DEV_NODE: ws://127.0.0.1:9944 + # Only the tests that need a node; their names all end in + # `on_a_dev_node` or `on_dev_node`. Network tests against public + # nodes stay ignored here. + run: cargo test -p wallet-data -- --ignored dev_node + - name: generated types are current # `cargo test` regenerates ui/src/api/generated via ts-rs. A diff here # means an entities change was committed without its TypeScript. diff --git a/.gitignore b/.gitignore index d8257ba..7c7f02a 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ dist # A local config for `cargo run`, anchored so `.cargo/config.toml` stays tracked. /config.toml /dev-config.toml +/.cache diff --git a/script/dev-node.sh b/script/dev-node.sh new file mode 100755 index 0000000..35137a7 --- /dev/null +++ b/script/dev-node.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +# Run a Quantus dev node from the pinned release binary: the same chain the +# integration tests and CI use. Downloads once into .cache/, verifies the +# checksum, and runs `quantus-node --dev` in the foreground with a throwaway +# base path. Ctrl-C stops it and the chain is gone. +# +# script/dev-node.sh # start on ws://127.0.0.1:9944 +# script/dev-node.sh --rpc-port 9955 +# +# Bump VERSION and SHA256 together; the sha256sums file is in the release. +set -euo pipefail + +VERSION="v1.0.1" +SHA256="5880937c2a933b97d9916c5c9e78425d9918c6d7b68abe69de43680f62c13c93" +ARCH="x86_64-unknown-linux-gnu" +URL="https://github.com/Quantus-Network/chain/releases/download/${VERSION}/quantus-node-${VERSION}-${ARCH}.tar.gz" + +here="$(cd "$(dirname "$0")/.." && pwd)" +cache="${here}/.cache/quantus-node/${VERSION}" +bin="${cache}/quantus-node" + +if [ ! -x "${bin}" ]; then + mkdir -p "${cache}" + echo "fetching quantus-node ${VERSION}" >&2 + curl -sSL --fail -o "${cache}/node.tgz" "${URL}" + echo "${SHA256} ${cache}/node.tgz" | sha256sum -c - >&2 + tar -xzf "${cache}/node.tgz" -C "${cache}" + rm -f "${cache}/node.tgz" + chmod +x "${bin}" +fi + +base="$(mktemp -d -t quantus-dev-XXXXXX)" +trap 'rm -rf "${base}"' EXIT +exec "${bin}" --dev --base-path "${base}" --rpc-methods unsafe "$@"