45 lines
1.6 KiB
Bash
45 lines
1.6 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
: "${CARGO_HOME:?需要设置 CARGO_HOME}"
|
|
: "${CARGO_TARGET_DIR:?需要设置 CARGO_TARGET_DIR}"
|
|
: "${SCCACHE_DIR:?需要设置 SCCACHE_DIR}"
|
|
|
|
ORIGINAL_HOME="${HOME:-}"
|
|
CARGO_BUILD_HOME="${CARGO_BUILD_HOME:-$(dirname "${CARGO_HOME}")/home}"
|
|
|
|
mkdir -p "${CARGO_HOME}" "${CARGO_TARGET_DIR}" "${SCCACHE_DIR}" "${CARGO_BUILD_HOME}"
|
|
|
|
# Jenkins agent 当前以 root 运行时,/root/.cargo/config 可能带有失效镜像配置。
|
|
# 生产构建使用组件级 HOME 与 CARGO_HOME,避免被全局 Cargo 配置污染。
|
|
if [[ -z "${RUSTUP_HOME:-}" && -n "${ORIGINAL_HOME}" && -d "${ORIGINAL_HOME}/.rustup" ]]; then
|
|
export RUSTUP_HOME="${ORIGINAL_HOME}/.rustup"
|
|
fi
|
|
|
|
# HOME 会在下面切到组件级缓存目录,因此这里先把真实用户的 Rust 工具链目录补进 PATH。
|
|
# Server-Provision 通过 cargo install 安装的 sccache 通常会落在 /root/.cargo/bin。
|
|
for tool_dir in "${ORIGINAL_HOME}/.cargo/bin" /root/.cargo/bin /usr/local/cargo/bin; do
|
|
if [[ -d "${tool_dir}" && ":${PATH}:" != *":${tool_dir}:"* ]]; then
|
|
export PATH="${tool_dir}:${PATH}"
|
|
fi
|
|
done
|
|
|
|
export HOME="${CARGO_BUILD_HOME}"
|
|
export CARGO_HOME
|
|
export CARGO_TARGET_DIR
|
|
export SCCACHE_DIR
|
|
|
|
cat >"${CARGO_HOME}/config.toml" <<'CARGO_CONFIG'
|
|
[registries.crates-io]
|
|
protocol = "sparse"
|
|
CARGO_CONFIG
|
|
|
|
echo "[cargo-env] HOME=${HOME}"
|
|
echo "[cargo-env] CARGO_HOME=${CARGO_HOME}"
|
|
echo "[cargo-env] CARGO_TARGET_DIR=${CARGO_TARGET_DIR}"
|
|
echo "[cargo-env] SCCACHE_DIR=${SCCACHE_DIR}"
|
|
if [[ -n "${RUSTUP_HOME:-}" ]]; then
|
|
echo "[cargo-env] RUSTUP_HOME=${RUSTUP_HOME}"
|
|
fi
|