-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJustfile
More file actions
206 lines (170 loc) · 6.22 KB
/
Justfile
File metadata and controls
206 lines (170 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
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# Justfile for UbiCity v0.3
# Modern build orchestration for Deno + ReScript + WASM
# Default recipe
import? "contractile.just"
default:
@just --list
# Run the Idris2 test suite (estate port 6/11; partial — core.test.ts only).
# Requires idris2 0.8.0+ on PATH.
test-core:
@export IDRIS2_PREFIX="$(dirname "$(dirname "$(command -v idris2)")")" && \
idris2 --build ubicity-tests.ipkg && \
./build/exec/ubicity-tests
# Setup development environment
setup:
@echo "🔧 Setting up UbiCity development environment..."
@echo "Installing Deno (if not installed)..."
@command -v deno || curl -fsSL https://deno.land/install.sh | sh
@echo "Checking for Rust..."
@command -v cargo || (echo "Please install Rust: https://rustup.rs" && exit 1)
@echo "Checking for ReScript..."
@command -v rescript || npm install -g rescript
@echo "Installing wasm-pack..."
@command -v wasm-pack || cargo install wasm-pack
@echo "✅ Setup complete!"
# Build all components
build: build-rescript build-wasm
@echo "✅ Build complete!"
# Build ReScript to JavaScript
build-rescript:
@echo "🔨 Building ReScript..."
rescript build
# Build WASM from Rust
build-wasm:
@echo "🦀 Building WASM..."
cd wasm && cargo build --release --target wasm32-unknown-unknown
@echo "🎯 Optimizing WASM..."
wasm-opt -Oz -o wasm/pkg/ubicity_bg.wasm wasm/target/wasm32-unknown-unknown/release/ubicity_wasm.wasm || echo "wasm-opt not found, skipping optimization"
# Watch ReScript for changes
watch-rescript:
rescript build -w
# Run all tests
test:
deno test --allow-read --allow-write tests/
# Run tests in watch mode
test-watch:
deno test --watch --allow-read --allow-write tests/
# Run benchmarks
bench:
deno bench --allow-read --allow-write benchmarks/
# Format code
fmt:
deno fmt
rescript format -all
# Lint code
lint:
deno lint
# Type check
check:
deno check src/**/*.ts
# Clean build artifacts
clean:
@echo "🧹 Cleaning build artifacts..."
rescript clean
rm -rf wasm/target
rm -rf lib
rm -rf coverage
@echo "✅ Clean complete!"
# Compile to standalone executables
compile: build
@echo "📦 Compiling standalone executables..."
deno compile --allow-read --allow-write --output ./bin/ubicity src/cli.ts
deno compile --allow-read --allow-write --output ./bin/ubicity-capture src/capture.ts
@echo "✅ Executables created in ./bin/"
# Run the CLI
cli *ARGS:
deno run --allow-read --allow-write src/cli.ts {{ARGS}}
# Capture an experience
capture MODE="quick":
deno run --allow-read --allow-write src/capture.ts {{MODE}}
# Generate visualization
viz:
deno run --allow-read --allow-write src/visualize.ts
# Generate report
report:
deno run --allow-read --allow-write src/cli.ts report
# Show stats
stats:
deno run --allow-read --allow-write src/cli.ts stats
# Development server with watch
dev:
deno run --watch --allow-read --allow-write src/cli.ts
# Cache all dependencies
cache:
deno cache --reload src/index.ts
# Show dependency tree
deps:
deno info src/index.ts
# Update Deno dependencies
update:
deno cache --reload src/index.ts
# Run all quality checks
qa: fmt lint check test
@echo "✅ All quality checks passed!"
# CI/CD pipeline
ci: build qa compile
@echo "✅ CI pipeline complete!"
# Create release build
release: clean build compile
@echo "🎉 Release build complete!"
@echo "Executables in ./bin/"
@ls -lh ./bin/
# 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 ubicity..."
@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 ubicity..."
@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 "=== ubicity 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 "=== ubicity Help ==="
@echo "Platform: $(uname -s) $(uname -m)"
@echo "Shell: $SHELL"
@echo ""
@echo "To report an issue:"
@echo " https://github.com/hyperpolymath/ubicity/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)"