Compare commits

..

4 Commits

Author SHA1 Message Date
MickLesk b3fb089b97 Remove explanatory comment 2026-07-21 23:08:21 +02:00
MickLesk 7959a46269 Back up snappdf's Chromium download to avoid re-fetching on every update
vendor/bin/snappdf download is idempotent: it exits immediately without
downloading if versions/revision.txt already exists, and PDF generation
doesn't check that version against the installed snappdf package - it
just uses whatever's in versions/. So the cached Chromium build survives
just fine across an update via the existing backup/restore mechanism.
Add vendor/beganovich/snappdf/versions to create_backup/restore_backup;
keep the snappdf download call only as a safety net for when the backup
doesn't have it yet (e.g. the first update after this fix ships).
2026-07-21 23:03:53 +02:00
MickLesk 745bc62978 Re-download snappdf Chromium after Invoice Ninja updates
update_script() redeploys /opt/invoiceninja via CLEAN_INSTALL, which
wipes vendor/beganovich/snappdf/versions. That path isn't covered by
create_backup/restore_backup, so the Chromium binary snappdf needs for
PDF generation was missing after every update, breaking PDFs (#15942).
Re-run the same "vendor/bin/snappdf download" step the install script
already does, right after the backup is restored.
2026-07-21 22:58:31 +02:00
MickLesk 3f7283ab66 Clear RETURN traps after temp cleanup
Updates temp-file and temp-dir cleanup traps in `misc/tools.func` to unset the `RETURN` trap after running cleanup. This prevents stale RETURN traps from leaking into later function returns and avoids repeated or unintended cleanup behavior in nested helper flows.
2026-07-21 22:49:58 +02:00
2 changed files with 16 additions and 10 deletions
+7 -1
View File
@@ -35,12 +35,18 @@ function update_script() {
systemctl stop supervisor nginx php8.4-fpm
msg_ok "Stopped Services"
create_backup /opt/invoiceninja/.env /opt/invoiceninja/storage /opt/invoiceninja/public/storage
create_backup /opt/invoiceninja/.env /opt/invoiceninja/storage /opt/invoiceninja/public/storage /opt/invoiceninja/vendor/beganovich/snappdf/versions
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "invoiceninja" "invoiceninja/invoiceninja" "prebuild" "latest" "/opt/invoiceninja" "invoiceninja.tar.gz"
restore_backup
msg_info "Verifying Chromium for PDF Generation"
cd /opt/invoiceninja
$STD ./vendor/bin/snappdf download
chown -R www-data:www-data /opt/invoiceninja/vendor/beganovich/snappdf/versions
msg_ok "Verified Chromium for PDF Generation"
msg_info "Running Migrations"
cd /opt/invoiceninja
$STD php artisan migrate --force
+9 -9
View File
@@ -2689,7 +2689,7 @@ fetch_and_deploy_gh_tag() {
local tmpdir
tmpdir=$(mktemp -d) || return 1
trap 'rm -rf "$tmpdir"' RETURN
trap 'rm -rf "$tmpdir"; trap - RETURN' RETURN
local tarball_url="https://github.com/${repo}/archive/refs/tags/${version}.tar.gz"
local filename="${app_lc}-${version}.tar.gz"
@@ -2866,7 +2866,7 @@ fetch_and_deploy_gl_tag() {
local tmpdir
tmpdir=$(mktemp -d) || return 1
trap 'rm -rf "$tmpdir"' RETURN
trap 'rm -rf "$tmpdir"; trap - RETURN' RETURN
local filename="${app_lc}-${version_safe}.tar.gz"
msg_info "Fetching GitLab tag: ${app} (${resolved_tag})"
@@ -2974,7 +2974,7 @@ check_for_gh_release() {
local gh_check_json=""
gh_check_json=$(mktemp /tmp/tools-gh-check-XXXXXX) || return 73
trap 'rm -f "${gh_check_json:-}"' RETURN
trap 'rm -f "${gh_check_json:-}"; trap - RETURN' RETURN
# Build auth header if token is available
local header_args=()
@@ -3574,7 +3574,7 @@ fetch_and_deploy_codeberg_release() {
local tmpdir
tmpdir=$(mktemp -d) || return 252
trap 'rm -rf "$tmpdir"' RETURN
trap 'rm -rf "$tmpdir"; trap - RETURN' RETURN
msg_info "Fetching Codeberg tag: $app ($tag_name)"
@@ -3616,7 +3616,7 @@ fetch_and_deploy_codeberg_release() {
local codeberg_rel_json
codeberg_rel_json=$(mktemp /tmp/tools-codeberg-rel-XXXXXX) || return 73
trap 'rm -f "$codeberg_rel_json"; rm -rf "${tmpdir:-}" "${unpack_tmp:-}"' RETURN
trap 'rm -f "$codeberg_rel_json"; rm -rf "${tmpdir:-}" "${unpack_tmp:-}"; trap - RETURN' RETURN
local attempt=0 success=false resp http_code
@@ -4113,7 +4113,7 @@ fetch_and_deploy_gh_release() {
local tmpdir
tmpdir=$(mktemp -d) || return 1
trap 'rm -rf "$tmpdir" "${unpack_tmp:-}"' RETURN
trap 'rm -rf "$tmpdir" "${unpack_tmp:-}"; trap - RETURN' RETURN
local filename="" url=""
msg_info "Fetching GitHub release: $app ($version)"
@@ -9218,7 +9218,7 @@ fetch_and_deploy_from_url() {
msg_error "Failed to create temporary directory"
return 252
}
trap 'rm -rf "$tmpdir" "${unpack_tmp:-}"' RETURN
trap 'rm -rf "$tmpdir" "${unpack_tmp:-}"; trap - RETURN' RETURN
curl -fsSL -o "$tmpdir/$filename" "$url" || {
msg_error "Download failed: $url"
@@ -9434,7 +9434,7 @@ check_for_gl_release() {
local gl_check_json
gl_check_json=$(mktemp /tmp/tools-gl-check-XXXXXX) || return 73
trap 'rm -f "$gl_check_json"' RETURN
trap 'rm -f "$gl_check_json"; trap - RETURN' RETURN
local repo_encoded
repo_encoded=$(printf '%s' "$source" | sed 's|/|%2F|g')
@@ -9724,7 +9724,7 @@ fetch_and_deploy_gl_release() {
local gl_rel_json
gl_rel_json=$(mktemp /tmp/tools-gl-rel-XXXXXX) || return 73
trap 'rm -f "$gl_rel_json"; rm -rf "${tmpdir:-}" "${unpack_tmp:-}"' RETURN
trap 'rm -f "$gl_rel_json"; rm -rf "${tmpdir:-}" "${unpack_tmp:-}"; trap - RETURN' RETURN
local repo_encoded
repo_encoded=$(printf '%s' "$repo" | sed 's|/|%2F|g')