mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 02:57:57 +00:00
e69c3649b5
* sort crates before splitting them into groups this is useful so that crates always get routed to a specific group for a given version of the source code, which means that jobs for each batch can be reliably retried individually * more verbose output * misc improvements * put uniq after sort uniq filters by adjacent lines * shellcheck * rm useless backlashes * handle edge case of no crates detected
55 lines
2.0 KiB
Bash
Executable File
55 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
## A script that checks each workspace crate individually.
|
|
## It's relevant to check workspace crates individually because otherwise their compilation problems
|
|
## due to feature misconfigurations won't be caught, as exemplified by
|
|
## https://github.com/paritytech/substrate/issues/12705
|
|
|
|
set -Eeu -o pipefail
|
|
shopt -s inherit_errexit
|
|
|
|
set -vx
|
|
|
|
target_group="$1"
|
|
groups_total="$2"
|
|
|
|
readarray -t workspace_crates < <(\
|
|
cargo tree --workspace --depth 0 --prefix none |
|
|
awk '{ if (length($1) == 0 || substr($1, 1, 1) == "[") { skip } else { print $1 } }' |
|
|
sort |
|
|
uniq
|
|
)
|
|
|
|
crates_total=${#workspace_crates[*]}
|
|
if [ "$crates_total" -lt 1 ]; then
|
|
>&2 echo "No crates detected for $PWD"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$crates_total" -lt "$groups_total" ]; then
|
|
# `crates_total / groups_total` would result in 0, so round it up to 1
|
|
crates_per_group=1
|
|
else
|
|
# We add `crates_total % groups_total > 0` (which evaluates to 1 in case there's a remainder for
|
|
# `crates_total % groups_total`) to round UP `crates_total / groups_total` 's
|
|
# potentially-fractional result to the nearest integer. Doing that ensures that we'll not miss any
|
|
# crate in case `crates_total / groups_total` would normally result in a fractional number, since
|
|
# in those cases Bash would round DOWN the result to the nearest integer. For example, if
|
|
# `crates_total = 5` and `groups_total = 2`, then `crates_total / groups_total` would round down
|
|
# to 2; since the loop below would then step by 2, we'd miss the 5th crate.
|
|
crates_per_group=$(( (crates_total / groups_total) + (crates_total % groups_total > 0) ))
|
|
fi
|
|
|
|
group=1
|
|
for ((i=0; i < crates_total; i += crates_per_group)); do
|
|
if [ $group -eq "$target_group" ]; then
|
|
crates_in_group=("${workspace_crates[@]:$i:$crates_per_group}")
|
|
echo "crates in the group: ${crates_in_group[*]}" >/dev/null # >/dev/null due to "set -x"
|
|
for crate in "${crates_in_group[@]}"; do
|
|
cargo check --locked --release -p "$crate"
|
|
done
|
|
break
|
|
fi
|
|
group=$(( group + 1 ))
|
|
done
|