#!/usr/bin/env bash set -euo pipefail root_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" timestamp="$(date -u +%Y%m%dT%H%M%SZ)" destination="${1:-${root_dir}/backups/${timestamp}}" project_name="${COMPOSE_PROJECT_NAME:-}" if [[ -z "${project_name}" && -f "${root_dir}/.env" ]]; then project_name="$(sed -n 's/^COMPOSE_PROJECT_NAME=//p' "${root_dir}/.env" | sed -n '1p')" fi project_name="${project_name:-$(basename "${root_dir}")}" compose=(docker compose --env-file "${root_dir}/.env" -p "${project_name}" -f "${root_dir}/docker-compose.yml") mkdir -p "${destination}" destination="$(cd "${destination}" && pwd)" "${compose[@]}" exec -T platform-db \ pg_dump -U platform -d platform --format=custom > "${destination}/platform.dump" docker run --rm \ -v "${project_name}_private-assets:/source:ro" \ -v "${destination}:/backup" \ alpine:3.20 tar -czf /backup/private-assets.tar.gz -C /source . cp "${root_dir}/.env.example" "${destination}/environment.template" printf 'Backup created at %s\n' "${destination}"