next.js/.github/actions/sccache/start.sh
start.sh70 lines2.4 KB
#!/usr/bin/env bash
set -euo pipefail

# Normalize TURBO_API and TURBO_TOKEN: prefer environment values and
# fall back to Vercel's public API and the secret passed as an action input.
if [ -z "${TURBO_API:-}" ]; then
  export TURBO_API="https://api.vercel.com"
  echo "TURBO_API=${TURBO_API}" >> "$GITHUB_ENV"
fi

if [ -z "${TURBO_TOKEN:-}" ]; then
  if [ -n "${INPUT_TURBO_TOKEN:-}" ]; then
    export TURBO_TOKEN="${INPUT_TURBO_TOKEN}"
    echo "TURBO_TOKEN=${TURBO_TOKEN}" >> "$GITHUB_ENV"
  else
    echo "WARNING: no TURBO_TOKEN available"
  fi
fi

if [ -z "${TURBO_TEAM:-}" ]; then
  export TURBO_TEAM="vtest314-next-adapter-e2e-tests"
  echo "TURBO_TEAM=${TURBO_TEAM}" >> "$GITHUB_ENV"
fi

echo "::add-mask::${TURBO_TOKEN:-}"
echo "Cache endpoint: ${TURBO_API:0:9}..."
echo "TURBO_TOKEN: ${TURBO_TOKEN:0:3}..."
echo "TURBO_TEAM: ${TURBO_TEAM}"

# Kill stale processes from cancelled builds on self-hosted runners.
sccache --stop-server 2>/dev/null || true
pkill -9 -x cargo 2>/dev/null || true
pkill -9 -x rustc 2>/dev/null || true

# Install vercel/sccache fork via cargo-binstall.
# cargo-binstall is installed by .github/actions/setup-rust.
cargo binstall --no-confirm --git https://github.com/vercel/sccache sccache
sccache --version

# Set env vars for the sccache server (export) and subsequent steps (GITHUB_ENV).
set_env() {
  export "$1=$2"
  echo "$1=$2" >> "$GITHUB_ENV"
}

# Temporary disable while we work out binstall issue
#set_env RUSTC_WRAPPER sccache
set_env SCCACHE_BASEDIRS "${INPUT_BASE_DIR:-${GITHUB_WORKSPACE}}"
set_env CARGO_INCREMENTAL 0
set_env SCCACHE_IDLE_TIMEOUT 0
set_env SCCACHE_DIR "${HOME}/.sccache"
set_env SCCACHE_RUST_CRATE_TYPE_ALLOW_HASH v1
set_env SCCACHE_ERROR_LOG "${RUNNER_TEMP:-/tmp}/sccache-error.log"

# Gracefully fall back to local compilation if the remote cache is unreachable.
set_env SCCACHE_IGNORE_SERVER_IO_ERROR 1

# Configure remote cache if token is available, otherwise disk-only.
if [ -n "${TURBO_TOKEN:-}" ]; then
  set_env SCCACHE_MULTILEVEL_CHAIN "disk,vercel_artifacts"
  set_env SCCACHE_VERCEL_ARTIFACTS_ENDPOINT "${TURBO_API}"
  set_env SCCACHE_VERCEL_ARTIFACTS_TOKEN "${TURBO_TOKEN}"
  set_env SCCACHE_VERCEL_ARTIFACTS_TEAM_SLUG "${TURBO_TEAM}"
fi

# Start the sccache daemon.
echo "SCCACHE_BASEDIRS=${SCCACHE_BASEDIRS}"
sccache --start-server 2>&1 || echo "WARNING: sccache failed to start"
sccache --show-stats 2>&1 | grep -E "Cache location|Base directories" || true
Quest for Codev2.0.0
/
SIGN IN