All checks were successful
ci/woodpecker/push/debug Pipeline was successful
ci/woodpecker/pr/debug Pipeline was successful
ci/woodpecker/deployment/debug Pipeline was successful
ci/woodpecker/deployment/release/2 Pipeline was successful
ci/woodpecker/deployment/release/1 Pipeline was successful
ci/woodpecker/deployment/release/3 Pipeline was successful
ci/woodpecker/deployment/release/4 Pipeline was successful
ci/woodpecker/deployment/publish Pipeline was successful
117 lines
3.6 KiB
Bash
Executable file
117 lines
3.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
set -ex
|
|
|
|
export LC_ALL=C.UTF-8
|
|
export LANG=C.UTF-8
|
|
SCRIPT_FOLDER="`dirname \"$0\"`"
|
|
REPO_FOLDER="${SCRIPT_FOLDER}/../"
|
|
GARAGE_DEBUG="${REPO_FOLDER}/target/debug/"
|
|
GARAGE_RELEASE="${REPO_FOLDER}/target/release/"
|
|
NIX_RELEASE="${REPO_FOLDER}/result/bin/:${REPO_FOLDER}/result-bin/bin/"
|
|
PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH"
|
|
|
|
OLD_VERSION="$1"
|
|
ARCH="$2"
|
|
|
|
|
|
echo "Downloading old garage binary..."
|
|
curl https://garagehq.deuxfleurs.fr/_releases/$OLD_VERSION/$ARCH/garage > /tmp/old_garage
|
|
chmod +x /tmp/old_garage
|
|
|
|
echo "============= insert data into old version cluster ================="
|
|
|
|
export GARAGE_BIN=/tmp/old_garage
|
|
if echo $OLD_VERSION | grep 'v0\.8\.'; then
|
|
echo "Detected Garage v0.8.x"
|
|
export GARAGE_OLDVER=v08
|
|
elif (echo $OLD_VERSION | grep 'v0\.9\.') || (echo $OLD_VERSION | grep 'v1\.'); then
|
|
echo "Detected Garage v0.9.x / v1.x"
|
|
export GARAGE_OLDVER=v1
|
|
fi
|
|
|
|
if echo $OLD_VERSION | grep 'v1\.'; then
|
|
DO_SSEC_TEST=1
|
|
fi
|
|
SSEC_KEY="u8zCfnEyt5Imo/krN+sxA1DQXxLWtPJavU6T6gOVj1Y="
|
|
|
|
echo "⏳ Setup cluster using old version"
|
|
$GARAGE_BIN --version
|
|
${SCRIPT_FOLDER}/dev-clean.sh
|
|
${SCRIPT_FOLDER}/dev-cluster.sh > /tmp/garage.log 2>&1 &
|
|
sleep 6
|
|
${SCRIPT_FOLDER}/dev-configure.sh
|
|
${SCRIPT_FOLDER}/dev-bucket.sh
|
|
|
|
echo "🛠️ Inserting data in old cluster"
|
|
source ${SCRIPT_FOLDER}/dev-env-rclone.sh
|
|
rclone copy "${SCRIPT_FOLDER}/../.git/" garage:eprouvette/test_dotgit \
|
|
--stats=1s --stats-log-level=NOTICE --stats-one-line
|
|
|
|
if [ "$DO_SSEC_TEST" = "1" ]; then
|
|
# upload small file (should be single part)
|
|
rclone copy "${SCRIPT_FOLDER}/test-upgrade.sh" garage:eprouvette/test-ssec \
|
|
--s3-sse-customer-algorithm AES256 \
|
|
--s3-sse-customer-key-base64 "$SSEC_KEY" \
|
|
--stats=1s --stats-log-level=NOTICE --stats-one-line
|
|
# do a multipart upload
|
|
dd if=/dev/urandom of=/tmp/randfile-for-upgrade bs=5M count=5
|
|
rclone copy "/tmp/randfile-for-upgrade" garage:eprouvette/test-ssec \
|
|
--s3-chunk-size 5M \
|
|
--s3-sse-customer-algorithm AES256 \
|
|
--s3-sse-customer-key-base64 "$SSEC_KEY" \
|
|
--stats=1s --stats-log-level=NOTICE --stats-one-line
|
|
fi
|
|
|
|
echo "🏁 Stopping old cluster"
|
|
killall -INT old_garage
|
|
sleep 2
|
|
killall -9 old_garage || true
|
|
|
|
echo "🏁 Removing old garage version"
|
|
rm -rv $GARAGE_BIN
|
|
export -n GARAGE_BIN
|
|
export -n GARAGE_OLDVER
|
|
|
|
echo "================ read data from new cluster ==================="
|
|
|
|
echo "⏳ Setup cluster using new version"
|
|
pwd
|
|
ls
|
|
export GARAGE_BIN=$(which garage)
|
|
$GARAGE_BIN --version
|
|
${SCRIPT_FOLDER}/dev-cluster.sh >> /tmp/garage.log 2>&1 &
|
|
sleep 3
|
|
|
|
echo "🛠️ Retrieving data from old cluster"
|
|
rclone copy garage:eprouvette/test_dotgit /tmp/test_dotgit \
|
|
--stats=1s --stats-log-level=NOTICE --stats-one-line --fast-list
|
|
|
|
if ! diff <(find "${SCRIPT_FOLDER}/../.git" -type f | xargs md5sum | cut -d ' ' -f 1 | sort) <(find /tmp/test_dotgit -type f | xargs md5sum | cut -d ' ' -f 1 | sort); then
|
|
echo "TEST FAILURE: directories are different"
|
|
exit 1
|
|
fi
|
|
rm -r /tmp/test_dotgit
|
|
|
|
if [ "$DO_SSEC_TEST" = "1" ]; then
|
|
rclone copy garage:eprouvette/test-ssec /tmp/test_ssec_out \
|
|
--s3-sse-customer-algorithm AES256 \
|
|
--s3-sse-customer-key-base64 "$SSEC_KEY" \
|
|
--stats=1s --stats-log-level=NOTICE --stats-one-line
|
|
if ! diff "/tmp/test_ssec_out/test-upgrade.sh" "${SCRIPT_FOLDER}/test-upgrade.sh"; then
|
|
echo "SSEC-FAILURE (small file)"
|
|
exit 1
|
|
fi
|
|
if ! diff "/tmp/test_ssec_out/randfile-for-upgrade" "/tmp/randfile-for-upgrade"; then
|
|
echo "SSEC-FAILURE (big file)"
|
|
exit 1
|
|
fi
|
|
rm -r /tmp/test_ssec_out
|
|
rm /tmp/randfile-for-upgrade
|
|
fi
|
|
|
|
echo "🏁 Teardown"
|
|
rm -rf /tmp/garage-{data,meta}-*
|
|
rm -rf /tmp/config.*.toml
|
|
|
|
echo "✅ Success"
|