-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJustfile
More file actions
172 lines (133 loc) · 6.22 KB
/
Justfile
File metadata and controls
172 lines (133 loc) · 6.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# SPDX-License-Identifier: PMPL-1.0-or-later
# justfile — Build recipes for Robodog ECM
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
# Default recipe — list all available commands.
import? "contractile.just"
default:
@just --list
# ── Build ────────────────────────────────────────────────────────────────
# Build the Rust core library.
build-rust:
cd src/rust && cargo build --release
# Build the Zig FFI shared library.
build-zig:
cd ffi/zig && zig build
# Build all components.
build: build-rust build-zig
# ── Test ─────────────────────────────────────────────────────────────────
# Run Rust tests.
test-rust:
cd src/rust && cargo test
# Run Zig FFI tests.
test-zig:
cd ffi/zig && zig build test
# Run Trustfile operational checks.
test-trust:
bash contractiles/trust/run-checks.sh
# Run all tests.
test: test-rust test-zig test-trust
# ── Lint / Format ────────────────────────────────────────────────────────
# Lint Rust with Clippy.
lint-rust:
cd src/rust && cargo clippy -- -D warnings
# Format Rust source.
fmt-rust:
cd src/rust && cargo fmt
# Format Zig source.
fmt-zig:
cd ffi/zig && zig fmt src/ test/
# Lint all.
lint: lint-rust
# Format all.
fmt: fmt-rust fmt-zig
# ── Formal Verification ─────────────────────────────────────────────────
# Typecheck Idris2 ABI definitions.
check-abi:
cd src/abi && idris2 --check Types.idr
# Run SPARK proofs.
prove-spark:
cd src/spark && gnatprove -P robodog_ecm.gpr --level=2
# Run all formal verification.
verify: check-abi prove-spark
# ── Clean ────────────────────────────────────────────────────────────────
# Clean Rust build artifacts.
clean-rust:
cd src/rust && cargo clean
# Clean Zig build artifacts.
clean-zig:
cd ffi/zig && rm -rf .zig-cache zig-out
# Clean SPARK proof artifacts.
clean-spark:
cd src/spark && rm -rf obj proof
# Clean all build artifacts.
clean: clean-rust clean-zig clean-spark
# ── Multi-arch ───────────────────────────────────────────────────────────
# Build for RISC-V target.
# ── Audit ────────────────────────────────────────────────────────────────
# Run cargo-audit for dependency vulnerabilities.
audit:
cd src/rust && cargo audit
# ── Generated Files ──────────────────────────────────────────────────────
# Regenerate C header from Zig FFI exports.
gen-headers:
@echo "C header is at generated/abi/robodog_ffi.h"
@echo "Manual generation — update generated/abi/robodog_ffi.h when FFI changes."
# Run panic-attacker pre-commit scan
assail:
@command -v panic-attack >/dev/null 2>&1 && panic-attack assail . || echo "panic-attack not found — install from https://github.com/hyperpolymath/panic-attacker"
# Self-diagnostic — checks dependencies, permissions, paths
doctor:
@echo "Running diagnostics for robodog-ecm..."
@echo "Checking required tools..."
@command -v just >/dev/null 2>&1 && echo " [OK] just" || echo " [FAIL] just not found"
@command -v git >/dev/null 2>&1 && echo " [OK] git" || echo " [FAIL] git not found"
@echo "Checking for hardcoded paths..."
@grep -rn '$HOME\|$ECLIPSE_DIR' --include='*.rs' --include='*.ex' --include='*.res' --include='*.gleam' --include='*.sh' . 2>/dev/null | head -5 || echo " [OK] No hardcoded paths"
@echo "Diagnostics complete."
# Auto-repair common issues
heal:
@echo "Attempting auto-repair for robodog-ecm..."
@echo "Fixing permissions..."
@find . -name "*.sh" -exec chmod +x {} \; 2>/dev/null || true
@echo "Cleaning stale caches..."
@rm -rf .cache/stale 2>/dev/null || true
@echo "Repair complete."
# Guided tour of key features
tour:
@echo "=== robodog-ecm Tour ==="
@echo ""
@echo "1. Project structure:"
@ls -la
@echo ""
@echo "2. Available commands: just --list"
@echo ""
@echo "3. Read README.adoc for full overview"
@echo "4. Read EXPLAINME.adoc for architecture decisions"
@echo "5. Run 'just doctor' to check your setup"
@echo ""
@echo "Tour complete! Try 'just --list' to see all available commands."
# Open feedback channel with diagnostic context
help-me:
@echo "=== robodog-ecm Help ==="
@echo "Platform: $(uname -s) $(uname -m)"
@echo "Shell: $SHELL"
@echo ""
@echo "To report an issue:"
@echo " https://github.com/hyperpolymath/robodog-ecm/issues/new"
@echo ""
@echo "Include the output of 'just doctor' in your report."
# Print the current CRG grade (reads from READINESS.md '**Current Grade:** X' line)
crg-grade:
@grade=$$(grep -oP '(?<=\*\*Current Grade:\*\* )[A-FX]' READINESS.md 2>/dev/null | head -1); \
[ -z "$$grade" ] && grade="X"; \
echo "$$grade"
# Generate a shields.io badge markdown for the current CRG grade
# Looks for '**Current Grade:** X' in READINESS.md; falls back to X
crg-badge:
@grade=$$(grep -oP '(?<=\*\*Current Grade:\*\* )[A-FX]' READINESS.md 2>/dev/null | head -1); \
[ -z "$$grade" ] && grade="X"; \
case "$$grade" in \
A) color="brightgreen" ;; B) color="green" ;; C) color="yellow" ;; \
D) color="orange" ;; E) color="red" ;; F) color="critical" ;; \
*) color="lightgrey" ;; esac; \
echo "[](https://github.com/hyperpolymath/standards/tree/main/component-readiness-grades)"