[CI][Rust Frontend] Pin cargo tool versions (#48222)
Signed-off-by: Bugen Zhao <i@bugenzhao.com>
Bugen Zhao committed
Jul 12, 2026 at 23:34 UTC
27c3e579f0e5f345a86e512e26e1231d3689931f
1 file changed
+35
-46
.buildkite/scripts/run-rust-frontend-cargo-ci.sh
+35
-46
@@ -21,16 +21,20 @@ export CARGO_HOME="${CARGO_HOME:-$HOME/.cargo}"
21
export RUSTUP_HOME="${RUSTUP_HOME:-$HOME/.rustup}"
22
export PATH="$CARGO_HOME/bin:$PATH"
23
24
+PROTOC_VERSION="${PROTOC_VERSION:-31.1}"
25
+CARGO_BINSTALL_VERSION="${CARGO_BINSTALL_VERSION:-1.20.1}"
26
+UV_VERSION="${UV_VERSION:-0.11.28}"
27
+PYO3_PYTHON_VERSION="${PYO3_PYTHON_VERSION:-3.12}"
28
+
29
+CARGO_SORT_VERSION_REQ="${CARGO_SORT_VERSION_REQ:-2}"
30
+CARGO_DENY_VERSION_REQ="${CARGO_DENY_VERSION_REQ:-0.20}"
31
+CARGO_NEXTEST_VERSION_REQ="${CARGO_NEXTEST_VERSION_REQ:-0.9}"
32
+
33
log_section() {
34
echo "--- $*"
35
}
36
37
install_protoc() {
29
- if command -v protoc >/dev/null 2>&1; then
30
- return
31
- fi
32
-
33
- local version="${PROTOC_VERSION:-31.1}"
38
local arch
39
case "$(uname -m)" in
40
x86_64)
@@ -45,16 +49,17 @@ install_protoc() {
49
;;
50
esac
51
48
- local url="https://github.com/protocolbuffers/protobuf/releases/download/v${version}/protoc-${version}-linux-${arch}.zip"
52
+ local url="https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-${arch}.zip"
53
local tmp_dir
54
tmp_dir="$(mktemp -d)"
55
52
- log_section "Installing protoc ${version}"
56
+ log_section "Installing protoc ${PROTOC_VERSION}"
57
curl -L --proto '=https' --tlsv1.2 -sSf "$url" -o "$tmp_dir/protoc.zip"
58
mkdir -p "$CARGO_HOME/bin"
59
unzip -q "$tmp_dir/protoc.zip" bin/protoc 'include/*' -d "$CARGO_HOME"
60
chmod +x "$CARGO_HOME/bin/protoc"
61
rm -rf "$tmp_dir"
62
+ protoc --version
63
}
64
65
rust_toolchain() {
@@ -75,66 +80,48 @@ install_rust_toolchain() {
80
}
81
82
install_cargo_binstall() {
78
- if command -v cargo-binstall >/dev/null 2>&1; then
79
- return
80
- fi
81
-
82
- log_section "Installing cargo-binstall"
83
+ log_section "Installing cargo-binstall ${CARGO_BINSTALL_VERSION}"
84
curl -L --proto '=https' --tlsv1.2 -sSf \
84
- https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh \
85
- | bash
85
+ "https://raw.githubusercontent.com/cargo-bins/cargo-binstall/v${CARGO_BINSTALL_VERSION}/install-from-binstall-release.sh" \
86
+ | env BINSTALL_VERSION="$CARGO_BINSTALL_VERSION" bash
87
+ cargo-binstall -V
88
}
89
90
install_cargo_sort() {
89
- if command -v cargo-sort >/dev/null 2>&1; then
90
- return
91
- fi
92
-
93
- log_section "Installing cargo-sort"
94
- install_cargo_binstall
95
- cargo binstall --no-confirm cargo-sort
91
+ log_section "Installing cargo-sort ${CARGO_SORT_VERSION_REQ}"
92
+ cargo binstall --no-confirm --force "cargo-sort@${CARGO_SORT_VERSION_REQ}"
93
}
94
95
install_cargo_deny() {
99
- if command -v cargo-deny >/dev/null 2>&1; then
100
- return
101
- fi
102
-
103
- log_section "Installing cargo-deny"
104
- install_cargo_binstall
105
- cargo binstall --no-confirm cargo-deny
96
+ log_section "Installing cargo-deny ${CARGO_DENY_VERSION_REQ}"
97
+ cargo binstall --no-confirm --force "cargo-deny@${CARGO_DENY_VERSION_REQ}"
98
}
99
100
install_cargo_nextest() {
109
- if command -v cargo-nextest >/dev/null 2>&1; then
110
- return
111
- fi
112
-
113
- log_section "Installing cargo-nextest"
114
- install_cargo_binstall
115
- cargo binstall --no-confirm --secure cargo-nextest
101
+ log_section "Installing cargo-nextest ${CARGO_NEXTEST_VERSION_REQ}"
102
+ cargo binstall \
103
+ --no-confirm \
104
+ --force \
105
+ --secure \
106
+ "cargo-nextest@${CARGO_NEXTEST_VERSION_REQ}"
107
}
108
109
install_uv() {
119
- if command -v uv >/dev/null 2>&1; then
120
- return
121
- fi
122
-
123
- log_section "Installing uv"
124
- curl -LsSf --proto '=https' --tlsv1.2 https://astral.sh/uv/install.sh \
110
+ log_section "Installing uv ${UV_VERSION}"
111
+ curl -L --proto '=https' --tlsv1.2 -sSf \
112
+ "https://github.com/astral-sh/uv/releases/download/${UV_VERSION}/uv-installer.sh" \
113
| env UV_INSTALL_DIR="$CARGO_HOME/bin" sh
114
+ uv --version
115
}
116
117
setup_pyo3_python() {
129
- local python_version="${PYO3_PYTHON_VERSION:-3.12}"
130
-
131
- log_section "Installing Python ${python_version} for PyO3 tests"
132
- uv python install "$python_version"
118
+ log_section "Installing Python ${PYO3_PYTHON_VERSION} for PyO3 tests"
119
+ uv python install "$PYO3_PYTHON_VERSION"
120
PYO3_PYTHON="$(uv python find \
121
--managed-python \
122
--no-project \
123
--resolve-links \
137
- "$python_version")"
124
+ "$PYO3_PYTHON_VERSION")"
125
export PYO3_PYTHON
126
127
local python_libdir
@@ -156,6 +143,7 @@ PY
143
}
144
145
run_style_clippy() {
146
+ install_cargo_binstall
147
install_cargo_sort
148
install_cargo_deny
149
@@ -186,6 +174,7 @@ run_style_clippy() {
174
run_tests() {
175
install_uv
176
setup_pyo3_python
177
+ install_cargo_binstall
178
install_cargo_nextest
179
180
log_section "Running cargo nextest"