2.5 KiB
name, description
| name | description |
|---|---|
| ci-check | Run the local mirror of OwnCord's CI gates before pushing. Use when finishing a change, before a commit or push, or when asked to verify work — CI takes ~15 min and catches things a plain build/test does not. |
ci-check
.github/workflows/ci.yml is the source of truth. This mirrors it locally.
Run only the sections your change touches. Server and client are independent.
Server (from Server/)
All four build-tag variants must compile — the tags gate whole files, so a default-build pass proves nothing about the others:
go build ./... && go build -tags otel ./... && go build -tags wazero ./... && go build -tags otel,wazero ./...
go vet ./...
go test -race ./...
go test -tags deadlock -count=1 ./ws/ # deadlock detector; ws is where lock order actually varies
golangci-lint run # CI pins v2.11.3
make sqlc-verify protocol-verify # generated output must not be stale
Add -tags wazero to go vet/go test when you touched plugin/.
A windows-latest -race failure inside ws that matches runtime.scanstack
or runtime.(*unwinder).next is a Go 1.26.5 runtime GC fault, not your change.
The Go 1.26.6 toolchain shows a variant signature: unexpected fault address 0xffffffffffffffff / fatal error: fault (signal 0xc0000005) inside ordinary
stdlib frames such as log/slog.(*Logger).Enabled — same spurious runtime
fault, same verdict, especially when the diff touches no Go code. Rerun the
job (gh run rerun --job <id>); a job cannot be rerun while its parent run is
still in progress.
Client (from Client/)
NODE_OPTIONS=--no-experimental-webstorage npm test
npm run typecheck
npm run lint
npm run format:check
The NODE_OPTIONS flag is mandatory on Node 22+ — see the client CLAUDE.md.
npm audit --audit-level=high and knip also run in CI but are advisory.
Rust (from Client/src-tauri/)
cargo test
cargo clippy --all-targets -- -D warnings
fallback_crypto is cfg(not(windows)), so its tests compile to nothing on a
Windows box and only run on the Linux/macOS runners.
Do not attempt npm run tauri build locally — the full desktop build runs in
CI on PRs to main and pulls heavy system dependencies.
Hooks
npm run hooks:install (once per clone) points core.hooksPath at
.githooks/: pre-commit runs fast staged-file checks, pre-push runs the
server build variants plus tsc and eslint. OWNCORD_PREPUSH_TESTS=1 adds
server tests. Bypass with --no-verify or OWNCORD_SKIP_HOOKS=1 — CI still
enforces everything.