128 lines · 4.4 KB · Text
RawDownload
#!/usr/bin/env bash set -euo pipefail SCCACHE_VERSION="v0.10.0"# Use absolute path to avoid issues with working directory changes between stepsSCCACHE_DIR="$(pwd)/target/sccache" install_sccache() {    mkdir -p "$SCCACHE_DIR"     if [[ -x "${SCCACHE_DIR}/sccache" ]] && "${SCCACHE_DIR}/sccache" --version &>/dev/null; then        echo "sccache already cached: $("${SCCACHE_DIR}/sccache" --version)"    else        echo "Installing sccache ${SCCACHE_VERSION} from GitHub releases..."         local os arch archive basename        os="$(uname -s)"        arch="$(uname -m)"         case "${os}-${arch}" in            Darwin-arm64)                archive="sccache-${SCCACHE_VERSION}-aarch64-apple-darwin.tar.gz"                ;;            Darwin-x86_64)                archive="sccache-${SCCACHE_VERSION}-x86_64-apple-darwin.tar.gz"                ;;            Linux-x86_64)                archive="sccache-${SCCACHE_VERSION}-x86_64-unknown-linux-musl.tar.gz"                ;;            Linux-aarch64)                archive="sccache-${SCCACHE_VERSION}-aarch64-unknown-linux-musl.tar.gz"                ;;            *)                echo "Unsupported platform: ${os}-${arch}"                exit 1                ;;        esac         basename="${archive%.tar.gz}"        curl -fsSL "https://github.com/mozilla/sccache/releases/download/${SCCACHE_VERSION}/${archive}" | tar xz        mv "${basename}/sccache" "${SCCACHE_DIR}/"        rm -rf "${basename}"        echo "Installed sccache: $("${SCCACHE_DIR}/sccache" --version)"    fi     # Verify the binary works before adding to path    if ! "${SCCACHE_DIR}/sccache" --version &>/dev/null; then        echo "ERROR: sccache binary at ${SCCACHE_DIR}/sccache is not executable or corrupted"        rm -f "${SCCACHE_DIR}/sccache"        exit 1    fi     if [[ -n "${GITHUB_PATH:-}" ]]; then        echo "${SCCACHE_DIR}" >> "$GITHUB_PATH"    fi    export PATH="${SCCACHE_DIR}:${PATH}"} configure_sccache() {    if [[ -z "${R2_ACCOUNT_ID:-}" ]]; then        echo "R2_ACCOUNT_ID not set, skipping sccache configuration"        return    fi     echo "Configuring sccache with Cloudflare R2..."     local bucket="${SCCACHE_BUCKET:-sccache-zed}"    local key_prefix="${SCCACHE_KEY_PREFIX:-sccache/}"    local base_dir="${GITHUB_WORKSPACE:-$(pwd)}"     # Use the absolute path to sccache binary for RUSTC_WRAPPER to avoid    # any PATH race conditions between GITHUB_PATH and GITHUB_ENV    local sccache_bin="${SCCACHE_DIR}/sccache"     # Set in current process    export SCCACHE_ENDPOINT="https://${R2_ACCOUNT_ID}.r2.cloudflarestorage.com"    export SCCACHE_BUCKET="${bucket}"    export SCCACHE_REGION="auto"    export SCCACHE_S3_KEY_PREFIX="${key_prefix}"    export SCCACHE_BASEDIR="${base_dir}"    export AWS_ACCESS_KEY_ID="${R2_ACCESS_KEY_ID}"    export AWS_SECRET_ACCESS_KEY="${R2_SECRET_ACCESS_KEY}"    export RUSTC_WRAPPER="${sccache_bin}"     # Also write to GITHUB_ENV for subsequent steps    if [[ -n "${GITHUB_ENV:-}" ]]; then        {            echo "SCCACHE_ENDPOINT=${SCCACHE_ENDPOINT}"            echo "SCCACHE_BUCKET=${SCCACHE_BUCKET}"            echo "SCCACHE_REGION=${SCCACHE_REGION}"            echo "SCCACHE_S3_KEY_PREFIX=${SCCACHE_S3_KEY_PREFIX}"            echo "SCCACHE_BASEDIR=${SCCACHE_BASEDIR}"            echo "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}"            echo "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}"            echo "RUSTC_WRAPPER=${RUSTC_WRAPPER}"        } >> "$GITHUB_ENV"    fi     echo "✓ sccache configured with Cloudflare R2 (bucket: ${bucket})"} show_config() {    echo "=== sccache configuration ==="    echo "sccache version: $(sccache --version)"    echo "RUSTC_WRAPPER: ${RUSTC_WRAPPER:-<not set>}"    echo "SCCACHE_BUCKET: ${SCCACHE_BUCKET:-<not set>}"    echo "SCCACHE_ENDPOINT: ${SCCACHE_ENDPOINT:-<not set>}"    echo "SCCACHE_REGION: ${SCCACHE_REGION:-<not set>}"    echo "SCCACHE_S3_KEY_PREFIX: ${SCCACHE_S3_KEY_PREFIX:-<not set>}"    echo "SCCACHE_BASEDIR: ${SCCACHE_BASEDIR:-<not set>}"    if [[ -n "${AWS_ACCESS_KEY_ID:-}" ]]; then        echo "AWS_ACCESS_KEY_ID: <set, length=${#AWS_ACCESS_KEY_ID}>"    else        echo "AWS_ACCESS_KEY_ID: <not set>"    fi    if [[ -n "${AWS_SECRET_ACCESS_KEY:-}" ]]; then        echo "AWS_SECRET_ACCESS_KEY: <set>"    else        echo "AWS_SECRET_ACCESS_KEY: <not set>"    fi    echo "=== sccache stats ==="    sccache --show-stats || true} install_sccacheconfigure_sccacheshow_config