forked from google/zerocopy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cargo.sh
executable file
·86 lines (78 loc) · 2.47 KB
/
cargo.sh
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
#!/bin/bash
#
# Copyright 2023 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# This script is a thin wrapper around Cargo that provides human-friendly
# toolchain names which are automatically translated to the toolchain versions
# we have pinned in CI.
#
# cargo.sh --version <toolchain-name> # looks up the version for the named toolchain
# cargo.sh +<toolchain-name> [...] # runs cargo commands with the named toolchain
# cargo.sh +all [...] # runs cargo commands with each toolchain
#
# The meta-toolchain "all" instructs this script to run the provided command
# once for each toolchain (msrv, stable, nightly).
#
# A common task that is especially annoying to perform by hand is to update
# trybuild's stderr files. Using this script:
#
# TRYBUILD=overwrite ./cargo.sh +all test --workspace
set -eo pipefail
function print-usage-and-exit {
echo "Usage:" >&2
echo " $0 --version <toolchain-name>" >&2
echo " $0 +<toolchain-name> [...]" >&2
echo " $0 +all [...]" >&2
exit 1
}
[[ $# -gt 0 ]] || print-usage-and-exit
function pkg-meta {
cargo metadata --format-version 1 | jq -r ".packages[] | select(.name == \"zerocopy\").$1"
}
function lookup-version {
VERSION="$1"
case "$VERSION" in
msrv)
pkg-meta rust_version
;;
stable)
pkg-meta 'metadata.ci."pinned-stable"'
;;
nightly)
pkg-meta 'metadata.ci."pinned-nightly"'
;;
*)
echo "Unrecognized toolchain name: '$VERSION' (options are 'msrv', 'stable', 'nightly')" >&2
return 1
;;
esac
}
function get-rustflags {
[ "$1" == nightly ] && echo "--cfg __INTERNAL_USE_ONLY_NIGHLTY_FEATURES_IN_TESTS"
}
case "$1" in
# cargo.sh --version <toolchain-name>
--version)
[[ $# -eq 2 ]] || print-usage-and-exit
lookup-version "$2"
;;
# cargo.sh +all [...]
+all)
echo "[cargo.sh] warning: running the same command for each toolchain (msrv, stable, nightly)" >&2
for toolchain in msrv stable nightly; do
echo "[cargo.sh] running with toolchain: $toolchain" >&2
TOOLCHAIN="$(lookup-version $toolchain)"
RUSTFLAGS="$(get-rustflags $toolchain)" cargo "+$TOOLCHAIN" ${@:2}
done
exit 0
;;
# cargo.sh +<toolchain-name> [...]
+*)
TOOLCHAIN="$(lookup-version ${1:1})"
RUSTFLAGS="$(get-rustflags ${1:1})" cargo "+$TOOLCHAIN" ${@:2}
;;
*)
print-usage-and-exit
;;
esac