#!/bin/bash # Rebuilds/pulls the Odoo image and upgrades modules. # ALWAYS backs up first and records the previous image tag for rollback — # this is a lesson already paid for on the Frappe track. Do not skip it. # # Usage: ./scripts/update.sh [module1,module2,...] # With no argument, upgrades every mc_education_* module found in ./addons. set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$SCRIPT_DIR" set -a; [ -f .env ] && source .env; set +a DB_NAME="${ODOO_DB_NAME:-school}" ODOO_VERSION="${ODOO_VERSION:-19.0}" echo "[->] Backing up before update (required — do not skip)..." ./scripts/backup.sh echo "[->] Recording current image digest for rollback..." mkdir -p .rollback PREV_DIGEST=$(docker compose images odoo --format json 2>/dev/null | grep -o '"Repository":"[^"]*","Tag":"[^"]*"' || true) { echo "timestamp=$(date +%Y%m%d-%H%M%S)" echo "previous_image=odoo:${ODOO_VERSION}" docker inspect --format='previous_image_id={{.Id}}' "$(docker compose images -q odoo 2>/dev/null)" 2>/dev/null || true } > .rollback/last-update.env echo "[OK] Rollback record written to .rollback/last-update.env" echo "[->] Pulling latest odoo:${ODOO_VERSION} image..." docker compose pull odoo echo "[->] Restarting Odoo on the new image..." docker compose up -d odoo MODULES="${1:-}" if [ -z "$MODULES" ]; then MODULES=$(ls addons | grep '^mc_education_' | paste -sd, -) fi if [ -z "$MODULES" ]; then echo "[!] No mc_education_* modules found under ./addons — nothing to upgrade." exit 0 fi echo "[->] Upgrading modules: ${MODULES}" docker compose exec odoo odoo -c /etc/odoo/odoo.conf -d "$DB_NAME" -u "$MODULES" --stop-after-init echo "[OK] Update complete. Previous image recorded in .rollback/last-update.env for manual rollback."