Files
wallet/.gitea/workflows/ci.yaml
rob thijssen 44d32b4432
Some checks failed
ci / gate (push) Has been cancelled
ci: the dependency policy in the gate, and a daily advisory check
The rust gate builds and tests with --locked, so a change that would
move Cargo.lock fails instead of resolving something new. A dependency
policy step runs cargo deny check (licenses, advisories, bans, sources
from deny.toml) and cargo machete, both now in the runner image
(gongfoo bd936d3, images run 284). deps.yaml runs the advisory check
daily on the rust runner, so an advisory published against a
dependency the lockfile already pins turns red within a day whether or
not anyone pushes.

Closes #49

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014ftBXYuba8ARhQeF74oUgW
2026-09-16 14:24:03 +03:00

98 lines
3.5 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
# --locked: a build that would change Cargo.lock fails rather than
# quietly resolving something new (#49).
run: |
set -euo pipefail
cargo fmt --check --all
cargo clippy --locked --workspace --all-targets -- -D warnings
cargo test --locked --workspace
- name: dependency policy
# deny.toml: licenses, advisories, bans and sources; machete: crates
# declared and never used. Both ship in the runner image (gongfoo
# runner-rust). The daily run in deps.yaml catches an advisory
# published against an unchanged lockfile (#49).
run: |
set -euo pipefail
cargo deny --version
cargo deny check
cargo machete
- 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