blob: 31cf118959daa62b07681c068e5f133dd46410b0 (
plain)
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
|
#!/usr/bin/env bash
#
# Run "cargo sort" to check that the Cargo.tomls are sorted
set -euo pipefail
# We want to exclude the toplevel Cargo.toml, because that needs to be in
# topological order. But cargo sort doesn't support that.
# https://github.com/DevinR528/cargo-sort/issues/38
# for Arti we have 2 Cargo.toml files that should not follow lexical ordering and need topological ordering
# ../Cargo.toml - toplevel topological sort improves compilation times
# ../crates/arti/Cargo.toml - the main project crate, also needs topological sort
# this means this script will encounter errors twice
# toplevel - will return error about unsorted dependencies in cwd (hence cwd() trickery because forks and branches will have non-arti names in CI)
# the arti crate - this will result the unsorted deps in arti errors
# those two errors are counted towards omission in this script
# So instead, we sed its output. Urgh.
(TERM=dumb cargo sort --check --workspace || test $? = 1) 2>&1 | perl -ne '
use Cwd; # Load the Cwd module to get the current working directory
use File::Basename; # Load the File::Basename module to extract the top folder name
# Get the current working directory
my $current_dir = cwd();
# Extract the top folder name from the full path
my $cargo_sort_root = basename($current_dir);
next if m{^\Qerror: Dependencies for $cargo_sort_root are not sorted\E$};
next if m{^\Qerror: Dependencies for arti are not sorted\E$};
$n_allowed += !!m{^\QChecking arti...} || !!m{^\QChecking $cargo_sort_root...}; # for arti crate or toplevel dir
next if m{^Checking \S+\Q...\E$};
$n_bad++;
print STDERR;
END {
flush STDOUT;
eval {
die "expected 2 unordered crates, got $n_allowed instead \n" unless $n_allowed==2;
die "unexpected output ($n_bad line(s)) from cargo-sort\n" if $n_bad;
};
if ($@) {
print STDERR $@;
exit 12;
}
}
'
|