75 lines
2.4 KiB
Bash
Executable File
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! ==="
|
|
|