Enable web updater and automate Hub updates

Co-Authored-By: Oz <oz-agent@warp.dev>
This commit is contained in:
Raghav
2026-04-17 10:33:46 +05:30
parent 69b7f7a849
commit bb2136aad5
6 changed files with 163 additions and 29 deletions

View File

@ -9,6 +9,17 @@ REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
COMPOSE_FILE="${REPO_DIR}/docker-compose.yml"
APP_CONTAINER="${NEXTCLOUD_APP_CONTAINER:-nextcloud-app}"
RUN_APP_UPDATES="${RUN_APP_UPDATES:-1}"
STRICT_TLS="${STRICT_TLS:-0}"
ENABLE_WEB_UPDATER="${ENABLE_WEB_UPDATER:-1}"
UPDATER_RELEASE_CHANNEL="${UPDATER_RELEASE_CHANNEL:-stable}"
HUB_ENV_FILE="${HUB_ENV_FILE:-${REPO_DIR}/.hub-update.env}"
if [ -f "${HUB_ENV_FILE}" ]; then
# shellcheck disable=SC1090
set -a
source "${HUB_ENV_FILE}"
set +a
fi
compose() {
if docker compose version >/dev/null 2>&1; then
@ -26,12 +37,16 @@ require_command() {
fi
}
occ_cmd() {
docker exec --user www-data "${APP_CONTAINER}" php occ "$@"
}
wait_for_occ() {
local max_attempts=45
local attempt=1
while [ "${attempt}" -le "${max_attempts}" ]; do
if docker exec --user www-data "${APP_CONTAINER}" php occ status >/dev/null 2>&1; then
if occ_cmd status >/dev/null 2>&1; then
return 0
fi
@ -43,6 +58,20 @@ wait_for_occ() {
return 1
}
enable_web_updater() {
echo "==> Enabling Nextcloud web updater"
docker exec "${APP_CONTAINER}" sh -lc "cat > /var/www/html/config/upgrade-disable-web.config.php <<'PHP'
<?php
\$CONFIG = array (
'upgrade.disable-web' => false,
);
PHP
chown www-data:www-data /var/www/html/config/upgrade-disable-web.config.php
chmod 640 /var/www/html/config/upgrade-disable-web.config.php"
occ_cmd config:system:set updater.release.channel --value="${UPDATER_RELEASE_CHANNEL}"
}
require_command docker
require_command curl
@ -67,47 +96,40 @@ if ! wait_for_occ; then
exit 1
fi
maintenance_enabled=0
cleanup() {
if [ "${maintenance_enabled}" -eq 1 ]; then
docker exec --user www-data "${APP_CONTAINER}" php occ maintenance:mode --off >/dev/null 2>&1 || true
fi
}
trap cleanup EXIT
if [ "${ENABLE_WEB_UPDATER}" = "1" ]; then
enable_web_updater
else
echo "==> Skipping web-updater enablement (ENABLE_WEB_UPDATER=${ENABLE_WEB_UPDATER})"
fi
echo "==> Enabling maintenance mode"
docker exec --user www-data "${APP_CONTAINER}" php occ maintenance:mode --on
maintenance_enabled=1
echo "==> Ensuring maintenance mode is off before upgrade"
occ_cmd maintenance:mode --off >/dev/null 2>&1 || true
echo "==> Running Nextcloud upgrade"
docker exec --user www-data "${APP_CONTAINER}" php occ upgrade
occ_cmd upgrade
if [ "${RUN_APP_UPDATES}" = "1" ]; then
echo "==> Updating installed apps"
docker exec --user www-data "${APP_CONTAINER}" php occ app:update --all
occ_cmd app:update --all
else
echo "==> Skipping app:update --all (RUN_APP_UPDATES=${RUN_APP_UPDATES})"
fi
echo "==> Running database/schema remediation commands"
docker exec --user www-data "${APP_CONTAINER}" php occ db:add-missing-columns || true
docker exec --user www-data "${APP_CONTAINER}" php occ db:add-missing-indices || true
docker exec --user www-data "${APP_CONTAINER}" php occ db:add-missing-primary-keys || true
occ_cmd db:add-missing-columns || true
occ_cmd db:add-missing-indices || true
occ_cmd db:add-missing-primary-keys || true
echo "==> Running maintenance repair"
docker exec --user www-data "${APP_CONTAINER}" php occ maintenance:repair
echo "==> Disabling maintenance mode"
docker exec --user www-data "${APP_CONTAINER}" php occ maintenance:mode --off
maintenance_enabled=0
occ_cmd maintenance:repair
echo "==> Running post-update checks"
docker exec --user www-data "${APP_CONTAINER}" php occ status
docker exec --user www-data "${APP_CONTAINER}" php occ setupchecks || true
occ_cmd status
occ_cmd setupchecks || true
if [ -x "${REPO_DIR}/scripts/test.sh" ]; then
echo "==> Running endpoint smoke tests"
STRICT_TLS="${STRICT_TLS:-0}" "${REPO_DIR}/scripts/test.sh"
STRICT_TLS="${STRICT_TLS}" "${REPO_DIR}/scripts/test.sh"
else
echo "WARN: scripts/test.sh is not executable; skipping smoke tests."
fi