diff --git a/core/archipelago/src/update.rs b/core/archipelago/src/update.rs index ce9e2021..84768da8 100644 --- a/core/archipelago/src/update.rs +++ b/core/archipelago/src/update.rs @@ -157,7 +157,8 @@ pub async fn download_update(data_dir: &Path) -> Result { .context("Failed to create staging dir")?; let client = reqwest::Client::builder() - .timeout(std::time::Duration::from_secs(300)) + .timeout(std::time::Duration::from_secs(1800)) + .connect_timeout(std::time::Duration::from_secs(30)) .build() .context("Failed to create HTTP client")?; diff --git a/neode-ui/src/views/SystemUpdate.vue b/neode-ui/src/views/SystemUpdate.vue index f7adf433..e15ce108 100644 --- a/neode-ui/src/views/SystemUpdate.vue +++ b/neode-ui/src/views/SystemUpdate.vue @@ -110,10 +110,10 @@
-

{{ t('systemUpdate.percentComplete', { percent: downloadPercent }) }}

+

{{ t('systemUpdate.percentComplete', { percent: downloadPercentFormatted }) }}

@@ -254,6 +254,7 @@ const updateInProgress = ref(false) const statusMessage = ref('') const statusIsError = ref(false) const downloadPercent = ref(0) +const downloadPercentFormatted = computed(() => downloadPercent.value.toFixed(2)) const lastCheckDisplay = computed(() => { if (!lastCheck.value) return t('common.never') diff --git a/releases/manifest.json b/releases/manifest.json index 58d905a9..64e3d3cf 100644 --- a/releases/manifest.json +++ b/releases/manifest.json @@ -2,12 +2,12 @@ "version": "1.7.0-alpha", "release_date": "2026-04-20", "changelog": [ - "Fixes update.download hard-fail on nodes that have ~/archy checked out (the git-path fleet class: .228, .116). Root cause: handle_update_check's git path returned update_available=true + update_method=\"git\" but never populated state.available_update, so update.download / update.apply RPC calls errored with 'No update available to download' even though the UI advertised one.", - "Frontend: SystemUpdate.vue now branches on update_method. When method==\"git\", renders a single 'Pull & Rebuild' action that calls update.git-apply (which runs ~/archy/scripts/self-update.sh: git pull → cargo build --release → frontend rebuild → systemctl restart archipelago). Manifest-path nodes continue to use the existing Download → Apply pipeline. Confirm modal and i18n strings (en + es) added for the git path.", - "Forces OTA trigger for nodes already on 1.6.0-alpha (.198, .253) that otherwise saw 'I'm at manifest.version, nothing to do' and skipped the refreshed 1.6 artifacts.", - "Container reconciler: scripts/reconcile-containers.sh no longer creates missing containers from the canonical tier spec. SPEC_OPTIONAL now defaults to true in container-specs.sh, so reconcile is strictly a REPAIR tool (fix ownership, restart crashed, recreate on drift). Containers come from exactly two sources: first-boot-containers.sh (baseline filebrowser on unbundled installs) and the package install RPC (every other app). Fixes the bug where fresh unbundled installs woke up 10 minutes after first boot with archy-mempool-db and archy-btcpay-db silently created by the reconcile timer.", - "filebrowser spec: now declares SPEC_NETWORK=archy-net (matching what first-boot-containers.sh creates) and the filebrowser-data volume. Without this the reconciler would see network drift (bridge≠archy-net) and churn the container on every cycle, dropping the archy-net DNS registration the backend uses to reach it.", - "VPN: added vpn::restore_wg_peers() that reads data_dir/nostr-vpn/peers/*.json on startup and re-pushes each peer into the wg0 kernel state via `archipelago-wg add-peer`. Fixes the silent-drop-on-reboot bug: kernel peer state is ephemeral, the add-peer RPC only persisted to JSON, and nothing replayed them at boot. Nodes like .198 came back up after reboot with wg0 listening but zero peers." + "Your VPN peers now come back automatically after a reboot. No more rescanning QR codes on your phone or laptop.", + "Fresh installs stay lean — only File Browser is included out of the box. Other apps wait in the Marketplace until you pick them.", + "Update downloads no longer give up early on slow connections. Big components now get the time they need to finish.", + "The download progress number is now clean (like 45.23%) instead of 45.270894%.", + "One-click 'Pull & Rebuild' button works for nodes that update from source (the development path), not just the standard download path.", + "File Browser stops rebooting itself every few hours — it's now set up so the update checker leaves it alone once it's healthy." ], "components": [ { @@ -15,16 +15,16 @@ "current_version": "1.6.0-alpha", "new_version": "1.7.0-alpha", "download_url": "https://git.tx1138.com/lfg2025/archy/raw/branch/main/releases/v1.7.0-alpha/archipelago", - "sha256": "6c178a76bf69853b00250f89e9f0c4974f0ecad9d3c10f328cb9661f5f3582cc", - "size_bytes": 40361912 + "sha256": "d85a71c57b737a51d0f80c63da0da0f3472b03cb5cbbecae7808aaaaa17982f4", + "size_bytes": 40360936 }, { "name": "archipelago-frontend-1.7.0-alpha.tar.gz", "current_version": "1.6.0-alpha", "new_version": "1.7.0-alpha", "download_url": "https://git.tx1138.com/lfg2025/archy/raw/branch/main/releases/v1.7.0-alpha/archipelago-frontend-1.7.0-alpha.tar.gz", - "sha256": "cbadd0510362fc9afdc747cba9c70f76315516c2f0f4536044d718aaddcc46fd", - "size_bytes": 76982017 + "sha256": "8adcdacf4190ae52dd9ed4f447aed1d4c332f1c86c4f5b8919e1a83a02e687f6", + "size_bytes": 76986852 } ] } diff --git a/releases/v1.7.0-alpha/archipelago b/releases/v1.7.0-alpha/archipelago index 0133c408..2d1a480d 100755 Binary files a/releases/v1.7.0-alpha/archipelago and b/releases/v1.7.0-alpha/archipelago differ diff --git a/releases/v1.7.0-alpha/archipelago-frontend-1.7.0-alpha.tar.gz b/releases/v1.7.0-alpha/archipelago-frontend-1.7.0-alpha.tar.gz index 51616851..70ccde16 100644 Binary files a/releases/v1.7.0-alpha/archipelago-frontend-1.7.0-alpha.tar.gz and b/releases/v1.7.0-alpha/archipelago-frontend-1.7.0-alpha.tar.gz differ