#!/usr/bin/env bash set -euo pipefail : "${RUNNER_S3_BUCKET:=las-github-runner-dal}" : "${RUNNER_S3_ENDPOINT:=s3.us-north-1.qiniucs.com}" : "${RUNNER_S3_REGION:=us-north-1}" : "${RUNNER_S3_PREFIX:=ci-cache/${GITHUB_REPOSITORY:?GITHUB_REPOSITORY is required}}" raw_job_name="${GITHUB_JOB:-unknown-job}" RUNNER_S3_JOB_SCOPE="$(printf '%s' "${raw_job_name}" | sed 's/[^[:alnum:]._-]/-/g')" export RUNNER_S3_JOB_SCOPE RUNNER_S3_RCLONE_CONFIG="" s3_cache_enabled() { [[ -n "${RUNNER_S3_AK:-}" && -n "${RUNNER_S3_SK:-}" ]] && command -v rclone >/dev/null 2>&1 } s3_cache_configure_rclone() { if [[ -n "${RUNNER_S3_RCLONE_CONFIG}" ]]; then return 0 fi local endpoint="${RUNNER_S3_ENDPOINT}" if [[ ! "${endpoint}" =~ ^https?:// ]]; then endpoint="https://${endpoint}" fi RUNNER_S3_RCLONE_CONFIG="$(mktemp)" chmod 600 "${RUNNER_S3_RCLONE_CONFIG}" cat > "${RUNNER_S3_RCLONE_CONFIG}" < "${hash_path}" if s3_cache_get "${object_key}.sha256" "${remote_hash_path}"; then remote_hash="$(tr -d '[:space:]' < "${remote_hash_path}")" if [[ "${remote_hash}" == "${local_hash}" ]]; then echo "S3 cache unchanged: ${object_key}" rm -rf "${tmp_dir}" return 0 fi echo "S3 cache changed: ${object_key} remote_sha256=${remote_hash} local_sha256=${local_hash}" else echo "No existing S3 cache hash for ${object_key}; uploading" fi s3_cache_put "${object_key}" "${archive_path}" s3_cache_put "${object_key}.sha256" "${hash_path}" echo "Uploaded S3 cache: ${object_key} sha256=${local_hash}" rm -rf "${tmp_dir}" } s3_cache_upload_if_missing() { local object_key="$1" local archive_path="$2" echo "Uploading S3 cache if missing: ${object_key}" s3_cache_rclone copyto --ignore-existing "${archive_path}" "$(s3_cache_remote_path "${object_key}")" }