diff --git a/ct/actualbudget.sh b/ct/actualbudget.sh index 910c2ce5a..b16816f75 100644 --- a/ct/actualbudget.sh +++ b/ct/actualbudget.sh @@ -26,9 +26,88 @@ function update_script() { if [[ ! -d /opt/actualbudget ]]; then msg_error "No ${APP} Installation Found!" - exit 1 + exit + fi + + RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [[ ! -f /opt/actualbudget_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/actualbudget_version.txt)" ]]; then + msg_info "Stopping ${APP}" + systemctl stop actualbudget + msg_ok "${APP} Stopped" + + msg_info "Updating ${APP} to ${RELEASE}" + cd /tmp + wget -q https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz + + mv /opt/actualbudget /opt/actualbudget_bak + tar -xzf "v${RELEASE}.tar.gz" + mv actual-${RELEASE} /opt/actualbudget + + mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config} + for dir in server-files .migrate user-files migrations; do + if [[ -d /opt/actualbudget_bak/$dir ]]; then + mv /opt/actualbudget_bak/$dir/* /opt/actualbudget-data/$dir/ || true + fi + done + if [[ -f /opt/actualbudget-data/migrate/.migrations ]]; then + sed -i 's/null/1732656575219/g' /opt/actualbudget-data/migrate/.migrations + sed -i 's/null/1732656575220/g' /opt/actualbudget-data/migrate/.migrations + fi + if [[ -f /opt/actualbudget/server-files/account.sqlite ]] && [[ ! -f /opt/actualbudget-data/server-files/account.sqlite ]]; then + mv /opt/actualbudget/server-files/account.sqlite /opt/actualbudget-data/server-files/account.sqlite + fi + + if [[ -f /opt/actualbudget_bak/.env ]]; then + mv /opt/actualbudget_bak/.env /opt/actualbudget-data/.env + else + cat </opt/actualbudget-data/.env +ACTUAL_UPLOAD_DIR=/opt/actualbudget-data/upload +ACTUAL_DATA_DIR=/opt/actualbudget-data +ACTUAL_SERVER_FILES_DIR=/opt/actualbudget-data/server-files +ACTUAL_USER_FILES=/opt/actualbudget-data/user-files +PORT=5006 +ACTUAL_TRUSTED_PROXIES="10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,127.0.0.1/32,::1/128,fc00::/7" +ACTUAL_HTTPS_KEY=/opt/actualbudget/selfhost.key +ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt +EOF + fi + cd /opt/actualbudget + $STD yarn workspaces focus @actual-app/sync-server --production + echo "${RELEASE}" >/opt/actualbudget_version.txt + msg_ok "Updated ${APP}" + + msg_info "Starting ${APP}" + cat </etc/systemd/system/actualbudget.service +[Unit] +Description=Actual Budget Service +After=network.target + +[Service] +Type=simple +User=root +Group=root +WorkingDirectory=/opt/actualbudget +EnvironmentFile=/opt/actualbudget-data/.env +ExecStart=/usr/bin/yarn start:server +Restart=always +RestartSec=10 + +[Install] +WantedBy=multi-user.target +EOF + + systemctl daemon-reload + systemctl start actualbudget + msg_ok "Started ${APP}" + + msg_info "Cleaning Up" + rm -rf /opt/actualbudget_bak + rm -rf "/tmp/v${RELEASE}.tar.gz" + msg_ok "Cleaned" + msg_ok "Updated Successfully" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" fi - msg_error "Due to major changes in the Actual Budget repository, we are currently unable to provide updates. Please check back later." exit }