Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 10s
Build & Deploy / 🧪 QA (push) Successful in 2m20s
Build & Deploy / 🏗️ Build (push) Successful in 3m56s
Build & Deploy / 🚀 Deploy (push) Successful in 22s
Build & Deploy / 🧪 Post-Deploy Verification (push) Failing after 4m30s
Build & Deploy / 🔔 Notify (push) Successful in 2s
102 lines
4.5 KiB
Bash
Executable File
102 lines
4.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ────────────────────────────────────────────────────────────────────────────
|
|
# Asset Sync Tool
|
|
# Syncs media files between environments without touching the database.
|
|
# ────────────────────────────────────────────────────────────────────────────
|
|
set -euo pipefail
|
|
|
|
# Load environment variables
|
|
if [ -f .env ]; then
|
|
set -a; source .env; set +a
|
|
fi
|
|
|
|
# ── Configuration ──────────────────────────────────────────────────────────
|
|
SOURCE_ENV="${1:-}" # local | testing | staging | prod
|
|
TARGET_ENV="${2:-}" # testing | staging | prod
|
|
SSH_HOST="root@alpha.mintel.me"
|
|
LOCAL_MEDIA_DIR="./public/media"
|
|
LOCAL_DATASHEETS_DIR="./public/datasheets"
|
|
|
|
DRY_RUN=""
|
|
CHECKSUM=""
|
|
if [[ "$*" == *"--dry-run"* ]]; then
|
|
DRY_RUN="--dry-run"
|
|
echo "🏃 DRY RUN MODE ENABLED"
|
|
fi
|
|
if [[ "$*" == *"--checksum"* ]]; then
|
|
CHECKSUM="-c"
|
|
echo "🔍 CHECKSUM MODE ENABLED (Slower but more reliable)"
|
|
fi
|
|
|
|
# ── Resolve Paths ──────────────────────────────────────────────────────────
|
|
get_media_path() {
|
|
case "$1" in
|
|
local) echo "$LOCAL_MEDIA_DIR" ;;
|
|
testing) echo "/var/lib/docker/volumes/klz-testing_klz_media_data/_data" ;;
|
|
staging) echo "/var/lib/docker/volumes/klz-staging_klz_media_data/_data" ;;
|
|
prod|production) echo "/var/lib/docker/volumes/klz-cablescom_klz_media_data/_data" ;;
|
|
*) echo "❌ Unknown environment: $1"; exit 1 ;;
|
|
esac
|
|
}
|
|
|
|
get_datasheets_path() {
|
|
case "$1" in
|
|
local) echo "$LOCAL_DATASHEETS_DIR" ;;
|
|
testing) echo "/home/deploy/sites/testing.klz-cables.com/public/datasheets" ;;
|
|
staging) echo "/home/deploy/sites/staging.klz-cables.com/public/datasheets" ;;
|
|
prod|production) echo "/home/deploy/sites/klz-cables.com/public/datasheets" ;;
|
|
*) echo "❌ Unknown environment: $1"; exit 1 ;;
|
|
esac
|
|
}
|
|
|
|
get_app_container() {
|
|
case "$1" in
|
|
testing) echo "klz-testing-klz-app-1" ;;
|
|
staging) echo "klz-staging-klz-app-1" ;;
|
|
prod|production) echo "klz-cablescom-klz-app-1" ;;
|
|
*) echo "" ;;
|
|
esac
|
|
}
|
|
|
|
SRC_PATH=$(get_media_path "$SOURCE_ENV")
|
|
TGT_PATH=$(get_media_path "$TARGET_ENV")
|
|
TGT_CONTAINER=$(get_app_container "$TARGET_ENV")
|
|
|
|
echo "🚀 Syncing assets: $SOURCE_ENV → $TARGET_ENV"
|
|
|
|
# ── Media Sync ─────────────────────────────────────────────────────────────
|
|
echo "🖼️ Syncing Media..."
|
|
if [[ "$SOURCE_ENV" == "local" ]]; then
|
|
rsync -avzi $CHECKSUM --delete --progress $DRY_RUN "$SRC_PATH/" "$SSH_HOST:$TGT_PATH/"
|
|
elif [[ "$TARGET_ENV" == "local" ]]; then
|
|
mkdir -p "$LOCAL_MEDIA_DIR"
|
|
rsync -avzi $CHECKSUM --delete --progress $DRY_RUN "$SSH_HOST:$SRC_PATH/" "$TGT_PATH/"
|
|
else
|
|
ssh "$SSH_HOST" "rsync -avzi $CHECKSUM --delete --progress $DRY_RUN $SRC_PATH/ $TGT_PATH/"
|
|
fi
|
|
|
|
# ── Datasheets Sync ────────────────────────────────────────────────────────
|
|
echo "📄 Syncing Datasheets..."
|
|
SRC_DS_PATH=$(get_datasheets_path "$SOURCE_ENV")
|
|
TGT_DS_PATH=$(get_datasheets_path "$TARGET_ENV")
|
|
|
|
if [[ "$SOURCE_ENV" == "local" ]]; then
|
|
ssh "$SSH_HOST" "mkdir -p $TGT_DS_PATH"
|
|
rsync -avzi $CHECKSUM --delete --progress $DRY_RUN "$SRC_DS_PATH/" "$SSH_HOST:$TGT_DS_PATH/"
|
|
elif [[ "$TARGET_ENV" == "local" ]]; then
|
|
mkdir -p "$LOCAL_DATASHEETS_DIR"
|
|
rsync -avzi $CHECKSUM --delete --progress $DRY_RUN "$SSH_HOST:$SRC_DS_PATH/" "$TGT_DS_PATH/"
|
|
else
|
|
ssh "$SSH_HOST" "mkdir -p $TGT_DS_PATH && rsync -avzi $CHECKSUM --delete --progress $DRY_RUN $SRC_DS_PATH/ $TGT_DS_PATH/"
|
|
fi
|
|
|
|
# Fix ownership on remote target if it's not local
|
|
if [[ "$TARGET_ENV" != "local" && -z "$DRY_RUN" ]]; then
|
|
echo "🔑 Fixing media file permissions on $TARGET_ENV..."
|
|
ssh "$SSH_HOST" "docker exec -u 0 $TGT_CONTAINER chown -R 1001:65533 /app/public/media/ 2>/dev/null || true"
|
|
echo "🔑 Fixing datasheet permissions..."
|
|
ssh "$SSH_HOST" "chown -R 1001:1001 $TGT_DS_PATH 2>/dev/null || true"
|
|
fi
|
|
|
|
echo "✅ Asset sync complete!"
|