-
-
Notifications
You must be signed in to change notification settings - Fork 88
/
justfile
164 lines (127 loc) · 5.06 KB
/
justfile
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
targets := "arm-unknown-linux-gnueabi armv7-unknown-linux-gnueabihf x86_64-unknown-linux-gnu x86_64-unknown-linux-musl thumbv6m-none-eabi thumbv7em-none-eabi thumbv7em-none-eabihf thumbv7m-none-eabi"
all_features := "nalgebra fixed defmt"
target_dir := "target"
doc_dir := "doc"
doc_assets_dir := doc_dir + "/assets"
#----------
# Building
#----------
build: check-formatting check-drawing-examples build-without-fmt-check
build-without-fmt-check: test check-readmes check-links build-benches
# Build the benches
build-benches:
cargo bench --workspace --no-run
# Run the benches
bench *args:
cargo bench --workspace {{args}}
# Run cargo test
test:
cargo test --workspace
# Run cargo test with all features enabled
test-all:
cargo test --workspace --all-features
# Run cargo test with all features except defmt enabled
test-all-except-defmt:
cargo test --workspace --features "{{all_features}}"
# Check the formatting
check-formatting:
cargo fmt --all -- --check
# Cross compiles embedded-graphics for a target
build-target target *args:
cargo build --workspace --target {{target}} {{args}}
cargo build --workspace --target {{target}} --features "{{all_features}}" {{args}}
# Cross compiles embedded-graphics for all targets
build-targets *args:
#!/usr/bin/env bash
set -e
for target in {{targets}}; do just build-target $target {{args}}; done
# Install all targets used in the `build-targets` command
install-targets:
#!/usr/bin/env bash
set -e
sysroot=$(rustc --print sysroot)
for target in {{targets}}; do
if [[ ! "$sysroot" =~ "$target" ]]; then
rustup target add $target
else
echo "Target $target is already installed"
fi
done
#------
# Docs
#------
# Generates the docs
generate-docs:
cargo clean --doc
cargo doc --workspace --all-features --no-deps
# Checks for broken links in cargo docs and readmes
check-links: generate-docs generate-readmes
cargo deadlinks --ignore-fragments --dir target/doc/embedded_graphics
cargo deadlinks --ignore-fragments --dir target/doc/embedded_graphics_core
cd tools/check-md-refs && cargo run -- '../../core/README.md'
cd tools/check-md-refs && cargo run -- '../../README.md'
lychee --exclude=circleci.com --verbose --exclude='LICENSE*' -- './**/README.md'
# Generate drawing examples in the doc directory
generate-drawing-examples:
cd tools/generate-drawing-examples && cargo run
rustfmt src/examples.rs
# Checks if drawing examples are up to date
check-drawing-examples: generate-drawing-examples
git diff --quiet doc/ || ( \
echo "src/examples.rs is not up to date" \
echo "Try running 'just generate-drawing-examples'." \
echo "If any images have changed, run 'just generate-drawing-examples-montage' to update the collage image too" \
)
# Generate a collage of all drawing example screenshots
generate-drawing-examples-montage:
# `imagemagick` must be installed for this to work.
montage \
{{doc_assets_dir}}/draw*.png \
-tile 6x2 -background none -geometry 128x128+4+4 miff:- | \
convert - -trim {{doc_assets_dir}}/all_drawing_ops.png
#----------------------
# README.md generation
#----------------------
# Generate README.md for a single crate
generate-readme crate: (_build-readme crate)
#!/usr/bin/env bash
set -euo pipefail
CRATE_DIR=$(dirname $(find . -name Cargo.toml -exec grep -l 'name = "{{crate}}"' {} \;))
cp "{{target_dir}}/README-{{crate}}.md" "$CRATE_DIR/README.md"
# Check README.md for a single crate
@check-readme crate: (_build-readme crate)
#!/usr/bin/env bash
set -euo pipefail
CRATE_DIR=$(dirname $(find . -name Cargo.toml -exec grep -l 'name = "{{crate}}"' {} \;))
diff -q "{{target_dir}}/README-{{crate}}.md" "$CRATE_DIR/README.md" || ( \
echo -e "\033[1;31mError:\033[0m README.md for {{crate}} needs to be regenerated."; \
echo -e " Run 'just generate-readmes' to regenerate.\n"; \
exit 1 \
)
# Generate README.md for all crates
generate-readmes: (generate-readme "embedded-graphics") (generate-readme "embedded-graphics-core")
# Checks README.md for all crates
check-readmes: (check-readme "embedded-graphics") (check-readme "embedded-graphics-core")
# Builds README.md for a single crate
_build-readme crate:
#!/usr/bin/env bash
set -e -o pipefail
mkdir -p {{target_dir}}
echo "Building README.md for {{crate}}"
CRATE_DIR=$(dirname $(find . -name Cargo.toml -exec grep -l 'name = "{{crate}}"' {} \;))
cargo readme -r "$CRATE_DIR" | sed -E -f "filter-readme.sed" > "{{target_dir}}/README-{{crate}}.md"
#----------------
# Font conversion
#----------------
convert-fonts:
cd tools/convert-fonts && cargo run --release
find src/mono_font/ -name generated.rs -exec rustfmt {} \;
#--------
# Release
#--------
# Release embedded-graphics-core
release-core +args:
cargo release --workspace --exclude embedded-graphics --dependent-version fix {{args}}
# Release embedded-graphics
release-e-g +args:
cargo release --package embedded-graphics --dependent-version fix {{args}}