burrow/Scripts/ci/backup-garage-to-gcs.sh
Conrad Kramer 002bd382e9
Some checks failed
Cache: Publish Nix / Publish Nix Cache (push) Waiting to run
Build Rust / Cargo Test (push) Successful in 4m14s
Build Site / Next.js Build (push) Failing after 6s
Infra: OpenTofu / OpenTofu (grafana) (push) Successful in 5s
Lint Governance / BEP Metadata (push) Successful in 0s
Build: Android / Android Rust Core Stub (push) Failing after 23s
Wire Forge-native release infrastructure
2026-06-07 05:51:12 -07:00

102 lines
2.7 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
: "${BURROW_GARAGE_ENDPOINT:?BURROW_GARAGE_ENDPOINT is required}"
: "${AWS_ACCESS_KEY_ID:?AWS_ACCESS_KEY_ID is required for Garage backup}"
: "${AWS_SECRET_ACCESS_KEY:?AWS_SECRET_ACCESS_KEY is required for Garage backup}"
repo_root="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." && pwd)"
cd "${repo_root}"
if ! command -v aws >/dev/null 2>&1; then
echo "aws CLI is required for Garage backup" >&2
exit 127
fi
if ! command -v gcloud >/dev/null 2>&1; then
echo "gcloud is required for GCS backup" >&2
exit 127
fi
if ! gcloud auth list --filter=status:ACTIVE --format='value(account)' | grep -q .; then
Scripts/ci/google-wif-auth.sh
fi
export AWS_DEFAULT_REGION="${BURROW_GARAGE_REGION:-garage}"
export AWS_EC2_METADATA_DISABLED=true
requested_releases=0
requested_packages=0
requested_nix_cache=0
IFS=',' read -r -a requested_items <<< "${BURROW_GARAGE_BACKUP_SET:-all}"
for raw_item in "${requested_items[@]}"; do
item="${raw_item//[[:space:]]/}"
case "$item" in
"" )
;;
all )
requested_releases=1
requested_packages=1
requested_nix_cache=1
;;
release|releases )
requested_releases=1
;;
package|packages )
requested_packages=1
;;
attic|nix|nix-cache|nix_cache )
requested_nix_cache=1
;;
* )
echo "unknown Garage backup set item: $item" >&2
exit 64
;;
esac
done
if [[ "$requested_releases" == "0" && "$requested_packages" == "0" && "$requested_nix_cache" == "0" ]]; then
echo "no Garage backup buckets selected" >&2
exit 1
fi
work_root="${RUNNER_TEMP:-${TMPDIR:-/tmp}}/burrow-garage-backup"
rsync_flags=(--recursive)
if [[ "${BURROW_GARAGE_BACKUP_DELETE:-false}" == "true" ]]; then
rsync_flags+=(--delete-unmatched-destination-objects)
fi
sync_bucket() {
local name="$1"
local garage_bucket="$2"
local gcs_bucket="$3"
local source_dir="${work_root}/${name}"
rm -rf "$source_dir"
mkdir -p "$source_dir"
aws --endpoint-url "$BURROW_GARAGE_ENDPOINT" s3 sync "s3://${garage_bucket}" "$source_dir" --no-progress
gcloud storage rsync "${rsync_flags[@]}" "$source_dir" "gs://${gcs_bucket}"
}
if [[ "$requested_releases" == "1" ]]; then
sync_bucket \
releases \
"${BURROW_RELEASE_GARAGE_BUCKET:-burrow-releases}" \
"${BURROW_RELEASE_GCS_BUCKET:-burrow-net-releases}"
fi
if [[ "$requested_packages" == "1" ]]; then
sync_bucket \
packages \
"${BURROW_PACKAGE_GARAGE_BUCKET:-burrow-packages}" \
"${BURROW_PACKAGE_GCS_BUCKET:-burrow-net-packages}"
fi
if [[ "$requested_nix_cache" == "1" ]]; then
sync_bucket \
nix-cache \
"${BURROW_NIX_CACHE_GARAGE_BUCKET:-attic}" \
"${BURROW_NIX_CACHE_GCS_BUCKET:-burrow-net-nix-cache}"
fi