[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"