-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest.sh
More file actions
executable file
·175 lines (156 loc) · 5.83 KB
/
test.sh
File metadata and controls
executable file
·175 lines (156 loc) · 5.83 KB
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#!/bin/bash
# test.sh - Validation script for rolling 6-month multi-version image
#
# Validates that all expected Rust versions are installed, all tools are
# available, and each pinned tool binary matches its expected version.
set -e
echo "========= Rolling Image Validation ========="
echo ""
# Load rolling versions from file or environment
if [[ -f /etc/rolling-rust-versions ]]; then
ROLLING_RUST_VERSIONS=$(cat /etc/rolling-rust-versions)
export ROLLING_RUST_VERSIONS
elif [[ -z "$ROLLING_RUST_VERSIONS" ]]; then
echo "WARNING: No rolling versions configured" >&2
ROLLING_RUST_VERSIONS=""
fi
echo "---------rust versions-------------------"
echo "Checking standard toolchains..."
rustup show | grep stable || { echo "ERROR: stable toolchain not found" >&2; exit 1; }
rustup show | grep beta || { echo "ERROR: beta toolchain not found" >&2; exit 1; }
rustup show | grep nightly || { echo "ERROR: nightly toolchain not found" >&2; exit 1; }
echo ""
echo "Checking rolling versions..."
if [[ -n "$ROLLING_RUST_VERSIONS" ]]; then
echo "Expected versions: $ROLLING_RUST_VERSIONS"
# shellcheck disable=SC2086
for version in $ROLLING_RUST_VERSIONS; do
if rustup toolchain list | grep -q "^${version}"; then
echo " [OK] Rust ${version} installed"
else
echo " [FAIL] Rust ${version} NOT installed" >&2
exit 1
fi
done
else
echo "WARNING: ROLLING_RUST_VERSIONS not set, skipping version check" >&2
fi
echo ""
echo "---------list all installed toolchains---"
rustup toolchain list
echo ""
echo "---------miri check----------------------"
# Verify miri is available on nightly
if cargo +nightly miri --version 2>/dev/null; then
echo " [OK] miri available on nightly"
else
echo " [WARN] miri not available on nightly"
fi
echo ""
echo "---------WASI targets--------------------"
echo "Checking WASI targets for each toolchain..."
for version in stable beta nightly; do
if rustup target list --toolchain "$version" 2>/dev/null | grep -q "wasm32-wasi"; then
echo " [OK] $version has WASI target"
else
echo " [WARN] $version may not have WASI target"
fi
done
if [[ -n "$ROLLING_RUST_VERSIONS" ]]; then
# shellcheck disable=SC2086
for version in $ROLLING_RUST_VERSIONS; do
if rustup target list --toolchain "$version" 2>/dev/null | grep -q "wasm32-wasi"; then
echo " [OK] $version has WASI target"
else
echo " [WARN] $version may not have WASI target" >&2
fi
done
fi
echo ""
echo "---------version fallback test-----------"
echo "Testing version switching..."
# shellcheck disable=SC2086
for version in stable $ROLLING_RUST_VERSIONS; do
if cargo "+${version}" --version >/dev/null 2>&1; then
echo " [OK] cargo +${version} works"
else
echo " [FAIL] cargo +${version} failed" >&2
exit 1
fi
done
echo ""
echo "---------oldest version detection--------"
OLDEST_VERSION=$(rustup toolchain list | grep -E '^[0-9]+\.[0-9]+' | sort -V | head -1 | sed 's/-.*//')
echo "Oldest available version: $OLDEST_VERSION"
echo ""
echo "=== Binary version validation ==="
FAILED=0
check_version() {
local bin="$1"
local expected="$2"
local flag="${3:---version}"
if ! command -v "$bin" > /dev/null 2>&1; then
echo "FAIL $bin: not found in PATH"
FAILED=1
return
fi
# $flag may be multi-word (e.g. "llvm-cov --version") — word splitting is intentional
# shellcheck disable=SC2086
actual=$("$bin" $flag 2>&1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
if [[ "$actual" = "$expected" ]]; then
echo "OK $bin ${actual}"
else
echo "FAIL $bin: expected ${expected}, got '${actual}'"
FAILED=1
fi
}
check_version cargo-audit "${CARGO_AUDIT_VERSION}"
check_version cargo-expand "${CARGO_EXPAND_VERSION}"
check_version cargo-fuzz "${CARGO_FUZZ_VERSION}"
# cargo-llvm-cov and cargo-release are cargo plugins; invoke via the subcommand name
check_version cargo-llvm-cov "${CARGO_LLVM_COV_VERSION}" "llvm-cov --version"
check_version cargo-nextest "${CARGO_NEXTEST_VERSION}"
check_version cargo-release "${CARGO_RELEASE_VERSION}" "release --version"
# circleci-junit-fix has no --version flag (reads stdin); check presence only
if command -v circleci-junit-fix > /dev/null 2>&1; then
echo "OK circleci-junit-fix (pinned: ${CIRCLECI_JUNIT_FIX_VERSION})"
else
echo "FAIL circleci-junit-fix: not found in PATH"
FAILED=1
fi
check_version cull-gmail "${CULL_GMAIL_VERSION}"
check_version gen-changelog "${GEN_CHANGELOG_VERSION}"
check_version gen-orb-mcp "${GEN_ORB_MCP_VERSION}"
check_version kdeets "${KDEETS_VERSION}"
check_version nextsv "${NEXTSV_VERSION}"
check_version pcu "${PCU_VERSION}"
check_version rsign "${RSIGN2_VERSION}"
check_version wasm-pack "${WASMPACK_VERSION}"
check_version wasmtime "${WASMTIME_VERSION}"
if [[ "${CI_RUST_IMAGE_VERSION:-dev}" = "dev" ]]; then
echo "INFO CI_RUST_IMAGE_VERSION not set (test/local build)"
else
echo "OK CI_RUST_IMAGE_VERSION=${CI_RUST_IMAGE_VERSION}"
fi
[[ "$FAILED" = "0" ]] || { echo ""; echo "FAILED: binary version validation"; exit 1; }
echo "=== All binary versions validated ==="
echo ""
echo "---------binaries------------------------"
ls -l /usr/local/cargo/bin/*
echo ""
echo "---------project directory---------------"
pwd
ls -l
ls -l /home/circleci/
ls -l /home/circleci/project
echo ""
echo "========= All Checks Passed ========="
echo ""
VERSION_COUNT=$(echo "$ROLLING_RUST_VERSIONS" | wc -w)
echo "Rolling image contains ${VERSION_COUNT} version(s):"
echo " $ROLLING_RUST_VERSIONS"
echo " + stable, beta, nightly"
echo ""
echo "Oldest version (for MSRV fallback): $OLDEST_VERSION"
echo ""
echo "---------end-----------------------------"