-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjustfile
122 lines (91 loc) · 2.79 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
##
# Development Recipes
#
# This justfile is intended to be run from inside a Docker sandbox:
# https://github.com/Blobfolio/righteous-sandbox
#
# docker run \
# --rm \
# -v "{{ invocation_directory() }}":/share \
# -it \
# --name "righteous_sandbox" \
# "righteous/sandbox:debian"
#
# Alternatively, you can just run cargo commands the usual way and ignore these
# recipes.
##
pkg_id := "write_atomic"
pkg_name := "Write Atomic"
cargo_dir := "/tmp/" + pkg_id + "-cargo"
doc_dir := justfile_directory() + "/doc"
# Clean Cargo crap.
@clean:
# Most things go here.
[ ! -d "{{ cargo_dir }}" ] || rm -rf "{{ cargo_dir }}"
# But some Cargo apps place shit in subdirectories even if
# they place *other* shit in the designated target dir. Haha.
[ ! -d "{{ justfile_directory() }}/target" ] || rm -rf "{{ justfile_directory() }}/target"
cargo update -w
# Clippy.
@clippy:
clear
cargo clippy \
--release \
--all-features \
--target-dir "{{ cargo_dir }}"
# Generate CREDITS.
@credits:
cargo bashman --no-bash --no-man
just _fix-chown "{{ justfile_directory() }}/CREDITS.md"
# Build Docs.
@doc:
# Make sure nightly is installed; this version generates better docs.
# env RUSTUP_PERMIT_COPY_RENAME=true rustup install nightly
# Make the docs.
cargo rustdoc \
--release \
--target-dir "{{ cargo_dir }}"
# Move the docs and clean up ownership.
[ ! -d "{{ doc_dir }}" ] || rm -rf "{{ doc_dir }}"
mv "{{ cargo_dir }}/doc" "{{ justfile_directory() }}"
just _fix-chown "{{ doc_dir }}"
# Unit tests!
@test:
clear
cargo test \
--all-features \
--target-dir "{{ cargo_dir }}"
cargo test \
--release \
--all-features \
--target-dir "{{ cargo_dir }}"
# Get/Set version.
version:
#!/usr/bin/env bash
# Current version.
_ver1="$( toml get "{{ justfile_directory() }}/Cargo.toml" package.version | \
sed 's/"//g' )"
# Find out if we want to bump it.
_ver2="$( whiptail --inputbox "Set {{ pkg_name }} version:" --title "Release Version" 0 0 "$_ver1" 3>&1 1>&2 2>&3 )"
exitstatus=$?
if [ $exitstatus != 0 ] || [ "$_ver1" = "$_ver2" ]; then
exit 0
fi
fyi success "Setting version to $_ver2."
# Set the release version!
just _version "{{ justfile_directory() }}" "$_ver2"
just credits
# Set version for real.
@_version DIR VER:
[ -f "{{ DIR }}/Cargo.toml" ] || exit 1
# Set the release version!
toml set "{{ DIR }}/Cargo.toml" package.version "{{ VER }}" > /tmp/Cargo.toml
just _fix-chown "/tmp/Cargo.toml"
mv "/tmp/Cargo.toml" "{{ DIR }}/Cargo.toml"
# Fix file/directory permissions.
@_fix-chmod PATH:
[ ! -e "{{ PATH }}" ] || find "{{ PATH }}" -type f -exec chmod 0644 {} +
[ ! -e "{{ PATH }}" ] || find "{{ PATH }}" -type d -exec chmod 0755 {} +
# Fix file/directory ownership.
@_fix-chown PATH:
[ ! -e "{{ PATH }}" ] || chown -R --reference="{{ justfile() }}" "{{ PATH }}"