Files
dashback/docs/update.sh
2026-10-30 12:00:06 +00:00

75 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "=== 1. Pulling latest changes in all repositories ==="
for dir in "$ROOT_DIR"/*/; do
if [ -d "${dir}.git" ]; then
repo_name="$(basename "$dir")"
echo "-> git pull in ${repo_name}"
git -C "$dir" pull
fi
done
echo "=== 2. Running npm ci in dashfront, dashdbschema, and dashback ==="
for pkg in dashfront dashdbschema dashback; do
echo "-> npm ci in ${pkg}"
npm --prefix "${ROOT_DIR}/${pkg}" ci
done
echo "=== 3. Building dashfront ==="
npm --prefix "${ROOT_DIR}/dashfront" run build
echo "=== 4. Building SEA in dashback ==="
npm --prefix "${ROOT_DIR}/dashback" run sea
DOCKER_DIST_DIR="/home/ubuntu/src/docker/dashback/dist"
mkdir -p "$DOCKER_DIST_DIR"
TIMESTAMP="$(date +%Y%m%d%H%M%S)"
NEW_SEA="${DOCKER_DIST_DIR}/dashback_${TIMESTAMP}"
CURRENT_SEA="${DOCKER_DIST_DIR}/dashback_current"
PREV_SEA="$(readlink -f "$CURRENT_SEA" 2>/dev/null || true)"
echo "-> Copying SEA to ${NEW_SEA} and linking ${CURRENT_SEA}..."
touch "${DOCKER_DIST_DIR}/dashback"
cp "${ROOT_DIR}/dashback/dist/dashback" "$NEW_SEA"
chmod +x "$NEW_SEA"
ln -sfn "$NEW_SEA" "$CURRENT_SEA"
echo "=== 5. Running self-test on dashback_current in test container ==="
exec 3>&1
set +e
SELFTEST_OUTPUT=$(docker run --rm \
--read-only \
--tmpfs /tmp:rw,noexec,nosuid,size=512m \
--tmpfs /run:rw,noexec,nosuid,size=16m \
--tmpfs /app/data:rw,noexec,nosuid,size=64m \
-u "$(id -u):$(id -g)" \
-v "${DOCKER_DIST_DIR}:/app/dist:ro" \
-v "${CURRENT_SEA}:/app/dist/dashback:ro" \
dashback:latest \
./dist/dashback --selftest 2>&1 | tee /dev/fd/3; exit "${PIPESTATUS[0]}")
SELFTEST_EXIT=$?
set -e
exec 3>&-
if [ "$SELFTEST_EXIT" -ne 0 ] || ! grep -q "Self-test PASSED" <<< "$SELFTEST_OUTPUT"; then
echo "ERROR: Self-test did not confirm 'Self-test PASSED'. Aborting container restart." >&2
if [ -n "$PREV_SEA" ] && [ -f "$PREV_SEA" ]; then
echo "-> Restoring ${CURRENT_SEA} to ${PREV_SEA}..." >&2
ln -sfn "$PREV_SEA" "$CURRENT_SEA"
fi
exit 1
fi
echo "=== 6. Restarting dashback containers ==="
CONTAINERS=$(docker ps -q --filter "ancestor=dashback:latest")
if [ -n "$CONTAINERS" ]; then
echo "-> Restarting dashback containers ($(docker ps --filter "ancestor=dashback:latest" --format '{{.Names}}' | paste -sd ', ' -))..."
docker restart $CONTAINERS
fi
echo "=== Update complete! ==="