A better Rust ATProto crate
1default:
2 @just --list
3
4# Run pre-commit hooks on all files, including autoformatting
5pre-commit-all:
6 pre-commit run --all-files
7
8# Run tests with default features
9test *ARGS:
10 cargo nextest run {{ ARGS }}
11
12publish:
13 @echo "Running tests..."
14 test-all
15 check-wasm
16 @echo "Publishing..."
17 cargo publish -p jacquard-common
18 cargo publish -p jacquard-lexicon
19 cargo publish -p jacquard-derive
20 cargo publish -p jacquard-identity
21 cargo publish -p jacquard-lexgen
22 cargo publish -p jacquard-api
23 cargo publish -p jacquard-repo
24 cargo publish -p jacquard-oauth
25 cargo publish -p jacquard
26 cargo publish -p jacquard-axum
27
28# Run tests across the full feature matrix
29test-all:
30 @echo "── default ──"
31 cargo nextest run
32 @echo ""
33 @echo "── scope-check ──"
34 cargo nextest run --features scope-check
35 @echo ""
36 @echo "── streaming ──"
37 cargo nextest run --features streaming
38 @echo ""
39 @echo "── websocket ──"
40 cargo nextest run --features websocket
41
42# Run tests with a specific feature set
43test-feature FEATURE *ARGS:
44 cargo nextest run --features {{ FEATURE }} {{ ARGS }}
45
46# Check that jacquard-common compiles for wasm32
47check-wasm:
48 cargo build --target wasm32-unknown-unknown -p jacquard-common --features websocket,reqwest-client
49 cargo build --target wasm32-unknown-unknown -p jacquard --no-default-features --features api_bluesky,streaming
50
51# Run 'cargo run' on the project
52run *ARGS:
53 cargo run {{ ARGS }}
54
55# Run 'bacon' to run the project (auto-recompiles)
56watch *ARGS:
57 bacon --job run -- -- {{ ARGS }}
58
59update-api:
60 cargo run -p jacquard-lexgen --bin lex-fetch -- -v
61
62generate-api:
63 cargo run -p jacquard-lexgen --bin jacquard-codegen -- -i crates/jacquard-api/lexicons -o crates/jacquard-api/src
64
65lex-gen *ARGS:
66 cargo run -p jacquard-lexgen --bin lex-fetch -- {{ ARGS }}
67
68lex-fetch *ARGS:
69 cargo run -p jacquard-lexgen --bin lex-fetch -- --no-codegen {{ ARGS }}
70
71codegen *ARGS:
72 cargo run -p jacquard-lexgen --bin jacquard-codegen -- {{ ARGS }}
73
74# Package binaries for distribution (creates tar.xz archives)
75package-binaries:
76 ./scripts/package-binaries.sh
77
78# List all available examples
79examples:
80 #!/usr/bin/env bash
81 echo "jacquard examples:"
82 for file in "examples"/*.rs; do
83 name=$(basename "$file" .rs)
84 echo " - $name"
85 done
86 echo ""
87 echo "jacquard-axum examples:"
88 cargo metadata --format-version=1 --no-deps | \
89 jq -r '.packages[] | select(.name == "jacquard-axum") | .targets[] | select(.kind[] == "example") | .name' | \
90 sed 's/^/ - /'
91 echo ""
92 echo "Usage: just example <name> [ARGS...]"
93
94# Run an example by name (auto-detects package)
95example NAME *ARGS:
96 #!/usr/bin/env bash
97 if [ -f "examples/{{ NAME }}.rs" ]; then
98 cargo run -p jacquard --features=api_bluesky,streaming --example {{ NAME }} -- {{ ARGS }}
99 elif cargo metadata --format-version=1 --no-deps | \
100 jq -e '.packages[] | select(.name == "jacquard-axum") | .targets[] | select(.kind[] == "example" and .name == "{{ NAME }}")' > /dev/null; then
101 cargo run -p jacquard-axum --example {{ NAME }} -- {{ ARGS }}
102 else
103 echo "Example '{{ NAME }}' not found."
104 echo ""
105 echo "jacquard examples:"
106 for file in "examples"/*.rs; do
107 name=$(basename "$file" .rs)
108 echo " - $name"
109 done
110 echo ""
111 echo "jacquard-axum examples:"
112 cargo metadata --format-version=1 --no-deps | \
113 jq -r '.packages[] | select(.name == "jacquard-axum") | .targets[] | select(.kind[] == "example") | .name' | \
114 sed 's/^/ - /'
115 exit 1
116 fi