#!/bin/bash set -euo pipefail dumpfile="dump.sql.custom" tmpdir="$(mktemp -d -p "${PWD}")" function check_for_hash() { local ret=0 echo "Checking if hash ${1} is present" aws s3 ls "s3://${S3_BUCKET}/sums/${1}" || ret=$? echo "Returned: ${ret}" return $ret } function create_and_upload() { local sum=$1 local backup_file backup_file="$(date +%Y/%m/backup-%d-%H-%M-%S.tar.gz)" tar -zc . | aws s3 cp - "s3://${S3_BUCKET}/${backup_file}" aws s3api put-object --bucket "${S3_BUCKET}" --key "sums/${sum}" } chmod ugo+wX "${tmpdir}" pushd "${tmpdir}" rm -rf "${dumpfile}" touch "${dumpfile}" chmod ugo+w "${dumpfile}" sudo -u postgres -- pg_dump --no-owner --no-privileges --clean --if-exists --quote-all-identifiers "${DATABASE_URL}" -F plain -f "${dumpfile}" cp -r "${ROOT_DIR}/data" "./data" cp "${ROOT_DIR}/.env" "./.env" cp "${ROOT_DIR}/bitwarden.exceede.com.conf" "./bitwarden.exceede.com.conf" # remove icon_cache rm -rf ./data/icon_cache sum=$(find . -type f -exec md5sum {} + | LC_ALL=C sort | md5sum | cut -d ' ' -f 1) check_for_hash "$sum" || create_and_upload "${sum}" popd rm -rf "${tmpdir}"