docker-compose.yml (postgres 16 + odoo:19.0), odoo.conf, env template, and setup/backup/update/demo-data scripts. update.sh always backs up and records the previous image before upgrading modules, per the lesson paid for on the Frappe track. .gitattributes pins LF on shell scripts so they don't break under the container's bash on checkout from Windows. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
50 lines
1.7 KiB
Bash
50 lines
1.7 KiB
Bash
#!/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."
|