97 lines
2.7 KiB
Bash
97 lines
2.7 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
set -eEuo pipefail
|
||
|
|
||
|
if [ -n "${DEBUG:-}" ]; then
|
||
|
set -x
|
||
|
fi
|
||
|
|
||
|
function confirm() {
|
||
|
read -p "$1 [y/n] " confirmation
|
||
|
if [ "$confirmation" != "y" ]; then
|
||
|
echo "Canceled. 😅"
|
||
|
exit
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# The purpose of this script is to make it easy to reset a local self-hosted
|
||
|
# install to a clean state, optionally targeting a particular version.
|
||
|
|
||
|
function reset() {
|
||
|
# If we have a version given, validate it.
|
||
|
# ----------------------------------------
|
||
|
# Note that arbitrary git refs won't work, because the *_IMAGE variables in
|
||
|
# .env will almost certainly point to :latest. Tagged releases are generally
|
||
|
# the only refs where these component versions are pinned, so enforce that
|
||
|
# we're targeting a valid tag here. Do this early in order to fail fast.
|
||
|
if [ -n "$version" ]; then
|
||
|
set +e
|
||
|
git rev-parse --verify --quiet "refs/tags/$version" >/dev/null
|
||
|
if [ $? -gt 0 ]; then
|
||
|
echo "Bad version: $version"
|
||
|
exit
|
||
|
fi
|
||
|
set -e
|
||
|
fi
|
||
|
|
||
|
# Make sure they mean it.
|
||
|
if [ "${FORCE_CLEAN:-}" == "1" ]; then
|
||
|
echo "☠️ Seeing FORCE=1, forcing cleanup."
|
||
|
echo
|
||
|
else
|
||
|
confirm "☠️ Warning! 😳 This is highly destructive! 😱 Are you sure you wish to proceed?"
|
||
|
echo "Okay ... good luck! 😰"
|
||
|
fi
|
||
|
|
||
|
# Hit the reset button.
|
||
|
$dc down --volumes --remove-orphans --rmi local
|
||
|
|
||
|
# Remove any remaining (likely external) volumes with name matching 'sentry-.*'.
|
||
|
for volume in $(docker volume list --format '{{ .Name }}' | grep '^sentry-'); do
|
||
|
docker volume remove $volume >/dev/null &&
|
||
|
echo "Removed volume: $volume" ||
|
||
|
echo "Skipped volume: $volume"
|
||
|
done
|
||
|
|
||
|
# If we have a version given, switch to it.
|
||
|
if [ -n "$version" ]; then
|
||
|
git checkout "$version"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function backup() {
|
||
|
type=${1:-"global"}
|
||
|
touch $(pwd)/sentry/backup.json
|
||
|
chmod 666 $(pwd)/sentry/backup.json
|
||
|
$dc run -v $(pwd)/sentry:/sentry-data/backup --rm -T -e SENTRY_LOG_LEVEL=CRITICAL web export $type /sentry-data/backup/backup.json
|
||
|
}
|
||
|
|
||
|
function restore() {
|
||
|
type=${1:-"global"}
|
||
|
$dc run --rm -T web import $type /etc/sentry/backup.json
|
||
|
}
|
||
|
|
||
|
# Needed variables to source error-handling script
|
||
|
MINIMIZE_DOWNTIME="${MINIMIZE_DOWNTIME:-}"
|
||
|
STOP_TIMEOUT=60
|
||
|
|
||
|
# Save logs in order to send envelope to Sentry
|
||
|
log_file=sentry_"$cmd"_log-$(date +'%Y-%m-%d_%H-%M-%S').txt
|
||
|
exec &> >(tee -a "$log_file")
|
||
|
version=""
|
||
|
|
||
|
while (($#)); do
|
||
|
case "$1" in
|
||
|
--report-self-hosted-issues) REPORT_SELF_HOSTED_ISSUES=1 ;;
|
||
|
--no-report-self-hosted-issues) REPORT_SELF_HOSTED_ISSUES=0 ;;
|
||
|
*) version=$1 ;;
|
||
|
esac
|
||
|
shift
|
||
|
done
|
||
|
|
||
|
# Source files needed to set up error-handling
|
||
|
source install/dc-detect-version.sh
|
||
|
source install/detect-platform.sh
|
||
|
source install/error-handling.sh
|
||
|
trap_with_arg cleanup ERR INT TERM EXIT
|