Files
wallet/.gitea/workflows/ci.yaml
rob thijssen be2644f31b
Some checks are pending
ci / gate (push) Waiting to run
ci: a pinned quantus-node dev chain in the gate, and a script to run one locally
`script/dev-node.sh` fetches the v1.0.1 release binary once into `.cache/`,
checks it against the sha256 the release publishes, and runs
`quantus-node --dev` on a throwaway base path. The workflow starts it in
the background, waits for `system_chain` to answer `Quantus DevNet`, and
runs every ignored test whose name says `dev_node`: the send, reverse,
cancel and named-failure path, and the scheme-by-era probe that found the
mortality bug. Public-node tests stay ignored in CI.

Rehearsed locally on a second node on port 9955: both tests pass in 15 s.

Closes #24

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014ftBXYuba8ARhQeF74oUgW
2026-09-15 23:00:42 +03:00

85 lines
3.0 KiB
YAML

name: ci
# The quality gate (architecture/generic.md §12): format, lint as error, tests,
# and a frontend that typechecks and builds. Packaging and release live in
# their own workflow once the packaging epic lands.
on:
push:
branches: [main]
pull_request:
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
gate:
# `rust-gtk3`, not `rust`: tauri-build links against GTK and WebKitGTK dev
# libraries, which only that image carries (gitea-runners.md §3).
runs-on: rust-gtk3
steps:
- uses: actions/checkout@v4
- name: webview dependencies
working-directory: ui
run: pnpm install --frozen-lockfile
- name: webview gate
working-directory: ui
run: |
set -euo pipefail
pnpm typecheck
pnpm lint
pnpm format:check
pnpm build
- name: rust gate
run: |
set -euo pipefail
cargo fmt --check --all
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
- name: rust talks to the webview through one file
# `ui/src/api/wallet.ts` is the only module allowed to import Tauri's
# IPC. A screen that reaches for `invoke` itself bypasses the typed
# client and its error mapping, and this is where that is caught.
run: |
set -euo pipefail
hits=$(grep -rl "@tauri-apps/api/core" ui/src || true)
if [ "$hits" != "ui/src/api/wallet.ts" ]; then
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.
run: git diff --exit-code -- ui/src/api/generated