chore: release v1.7.61-alpha
This commit is contained in:
parent
4d6b4f76af
commit
a992abcd06
@ -1,5 +1,12 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v1.7.61-alpha (2026-05-18)
|
||||||
|
|
||||||
|
- Multi-container stack installs now keep their app card in the `Installing` state for up to 20 minutes while dependency containers are being pulled and prepared.
|
||||||
|
- BTCPay Server installs no longer appear to vanish or fail after two minutes while Postgres and NBXplorer are still being created before the primary `btcpay-server` container exists.
|
||||||
|
- The stale-transition escape hatch remains short for start, stop, restart, update, and removal operations, so genuinely wedged lifecycle actions still recover quickly.
|
||||||
|
- Live validation on `100.70.96.88` confirmed BTCPay Server completed installation and responds on port `23000` with the expected HTTP redirect.
|
||||||
|
|
||||||
## v1.7.60-alpha (2026-05-18)
|
## v1.7.60-alpha (2026-05-18)
|
||||||
|
|
||||||
- Meshtastic serial detection now rejects malformed or incomplete handshakes instead of accepting unrelated serial devices as a fallback Meshtastic radio.
|
- Meshtastic serial detection now rejects malformed or incomplete handshakes instead of accepting unrelated serial devices as a fallback Meshtastic radio.
|
||||||
|
|||||||
2
core/Cargo.lock
generated
2
core/Cargo.lock
generated
@ -80,7 +80,7 @@ checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "archipelago"
|
name = "archipelago"
|
||||||
version = "1.7.60-alpha"
|
version = "1.7.61-alpha"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"archipelago-container",
|
"archipelago-container",
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "archipelago"
|
name = "archipelago"
|
||||||
version = "1.7.60-alpha"
|
version = "1.7.61-alpha"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "Archipelago Bitcoin Node OS - Native backend"
|
description = "Archipelago Bitcoin Node OS - Native backend"
|
||||||
authors = ["Archipelago Team"]
|
authors = ["Archipelago Team"]
|
||||||
|
|||||||
@ -840,6 +840,20 @@ const CONTAINER_ABSENCE_THRESHOLD: u32 = 3;
|
|||||||
/// scanner's authoritative view. Applies to all transitional variants.
|
/// scanner's authoritative view. Applies to all transitional variants.
|
||||||
const TRANSITIONAL_STUCK_TIMEOUT: Duration = Duration::from_secs(120);
|
const TRANSITIONAL_STUCK_TIMEOUT: Duration = Duration::from_secs(120);
|
||||||
|
|
||||||
|
/// Multi-container installs can legitimately spend several minutes before the
|
||||||
|
/// primary user-facing container exists. BTCPay, for example, pulls/starts
|
||||||
|
/// Postgres and NBXplorer before `btcpay-server`; do not erase its installing
|
||||||
|
/// card just because the primary container is absent during that setup window.
|
||||||
|
const INSTALLING_STUCK_TIMEOUT: Duration = Duration::from_secs(20 * 60);
|
||||||
|
|
||||||
|
fn transitional_stuck_timeout(state: &crate::data_model::PackageState) -> Duration {
|
||||||
|
if *state == crate::data_model::PackageState::Installing {
|
||||||
|
INSTALLING_STUCK_TIMEOUT
|
||||||
|
} else {
|
||||||
|
TRANSITIONAL_STUCK_TIMEOUT
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns true if `state` is one of the transitional variants that a
|
/// Returns true if `state` is one of the transitional variants that a
|
||||||
/// `spawn_transitional`-style background task owns. While such a state is
|
/// `spawn_transitional`-style background task owns. While such a state is
|
||||||
/// set, the package scanner must not overwrite it with whatever podman
|
/// set, the package scanner must not overwrite it with whatever podman
|
||||||
@ -961,13 +975,14 @@ async fn scan_and_update_packages(
|
|||||||
let overwrite = match existing {
|
let overwrite = match existing {
|
||||||
Some(existing_entry) if is_transitional(&existing_entry.state) => {
|
Some(existing_entry) if is_transitional(&existing_entry.state) => {
|
||||||
let entered = *transitional_since.entry(id.clone()).or_insert(now);
|
let entered = *transitional_since.entry(id.clone()).or_insert(now);
|
||||||
let stuck = now.duration_since(entered) > TRANSITIONAL_STUCK_TIMEOUT;
|
let timeout = transitional_stuck_timeout(&existing_entry.state);
|
||||||
|
let stuck = now.duration_since(entered) > timeout;
|
||||||
if stuck {
|
if stuck {
|
||||||
warn!(
|
warn!(
|
||||||
"Container {} stuck in {:?} for >{}s; overriding with scan state {:?}",
|
"Container {} stuck in {:?} for >{}s; overriding with scan state {:?}",
|
||||||
id,
|
id,
|
||||||
existing_entry.state,
|
existing_entry.state,
|
||||||
TRANSITIONAL_STUCK_TIMEOUT.as_secs(),
|
timeout.as_secs(),
|
||||||
pkg.state
|
pkg.state
|
||||||
);
|
);
|
||||||
transitional_since.remove(id);
|
transitional_since.remove(id);
|
||||||
@ -1015,12 +1030,13 @@ async fn scan_and_update_packages(
|
|||||||
if let Some(entry) = merged.get(&id) {
|
if let Some(entry) = merged.get(&id) {
|
||||||
if is_transitional(&entry.state) {
|
if is_transitional(&entry.state) {
|
||||||
let entered = *transitional_since.entry(id.clone()).or_insert(now);
|
let entered = *transitional_since.entry(id.clone()).or_insert(now);
|
||||||
if now.duration_since(entered) > TRANSITIONAL_STUCK_TIMEOUT {
|
let timeout = transitional_stuck_timeout(&entry.state);
|
||||||
|
if now.duration_since(entered) > timeout {
|
||||||
warn!(
|
warn!(
|
||||||
"Container {} stuck in {:?} and absent for >{}s; removing stale transitional state",
|
"Container {} stuck in {:?} and absent for >{}s; removing stale transitional state",
|
||||||
id,
|
id,
|
||||||
entry.state,
|
entry.state,
|
||||||
TRANSITIONAL_STUCK_TIMEOUT.as_secs()
|
timeout.as_secs()
|
||||||
);
|
);
|
||||||
merged.remove(&id);
|
merged.remove(&id);
|
||||||
transitional_since.remove(&id);
|
transitional_since.remove(&id);
|
||||||
@ -1247,4 +1263,13 @@ mod merge_tests {
|
|||||||
assert!(!is_transitional(&s), "{:?} should NOT be transitional", s);
|
assert!(!is_transitional(&s), "{:?} should NOT be transitional", s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn installing_uses_longer_stale_timeout_than_other_transitions() {
|
||||||
|
assert!(transitional_stuck_timeout(&PackageState::Installing) > TRANSITIONAL_STUCK_TIMEOUT);
|
||||||
|
assert_eq!(
|
||||||
|
transitional_stuck_timeout(&PackageState::Stopping),
|
||||||
|
TRANSITIONAL_STUCK_TIMEOUT
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
4
neode-ui/package-lock.json
generated
4
neode-ui/package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "neode-ui",
|
"name": "neode-ui",
|
||||||
"version": "1.7.60-alpha",
|
"version": "1.7.61-alpha",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "neode-ui",
|
"name": "neode-ui",
|
||||||
"version": "1.7.60-alpha",
|
"version": "1.7.61-alpha",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/dompurify": "^3.0.5",
|
"@types/dompurify": "^3.0.5",
|
||||||
"@vue-leaflet/vue-leaflet": "^0.10.1",
|
"@vue-leaflet/vue-leaflet": "^0.10.1",
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "neode-ui",
|
"name": "neode-ui",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.7.60-alpha",
|
"version": "1.7.61-alpha",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "./start-dev.sh",
|
"start": "./start-dev.sh",
|
||||||
|
|||||||
@ -1,29 +1,28 @@
|
|||||||
{
|
{
|
||||||
"version": "1.7.60-alpha",
|
"version": "1.7.61-alpha",
|
||||||
"release_date": "2026-05-18",
|
"release_date": "2026-05-18",
|
||||||
"changelog": [
|
"changelog": [
|
||||||
"Meshtastic serial detection now rejects malformed or incomplete handshakes instead of accepting unrelated serial devices as a fallback Meshtastic radio.",
|
"Multi-container stack installs now keep their app card in the `Installing` state for up to 20 minutes while dependency containers are being pulled and prepared.",
|
||||||
"Mesh radio auto-detection now skips known non-mesh serial devices such as Sierra Wireless LTE modems and Zooz/Z-Wave sticks, avoiding interference with production peripherals.",
|
"BTCPay Server installs no longer appear to vanish or fail after two minutes while Postgres and NBXplorer are still being created before the primary `btcpay-server` container exists.",
|
||||||
"Meshtastic config sync now sends `want_config_id` with the correct protobuf wire type, fixing radio-side `ignore malformed toradio` errors and allowing node-info/contact ingestion.",
|
"The stale-transition escape hatch remains short for start, stop, restart, update, and removal operations, so genuinely wedged lifecycle actions still recover quickly.",
|
||||||
"The stable `/dev/mesh-radio` udev rule no longer claims every `ttyACM*` device; it only matches known mesh USB serial adapters and known USB CDC ACM radio vendors.",
|
"Live validation on `100.70.96.88` confirmed BTCPay Server completed installation and responds on port `23000` with the expected HTTP redirect."
|
||||||
"Live validation on `100.70.96.88` confirmed Archipelago selects `/dev/ttyUSB0`, identifies the Meshtastic node, and refreshes 103 mesh contacts."
|
|
||||||
],
|
],
|
||||||
"components": [
|
"components": [
|
||||||
{
|
{
|
||||||
"name": "archipelago",
|
"name": "archipelago",
|
||||||
"current_version": "1.7.60-alpha",
|
"current_version": "1.7.61-alpha",
|
||||||
"new_version": "1.7.60-alpha",
|
"new_version": "1.7.61-alpha",
|
||||||
"download_url": "http://146.59.87.168:3000/lfg2025/archy/releases/download/v1.7.60-alpha/archipelago",
|
"download_url": "http://146.59.87.168:3000/lfg2025/archy/releases/download/v1.7.61-alpha/archipelago",
|
||||||
"sha256": "ef67a16686e1a5f05385455589c56b22243b690b79a914b8b341b3ff4f063be9",
|
"sha256": "5b08f66aa9a685475b86cdcbabe96c3132f3cc0e72d8daaeb0ddd52a01ca87b6",
|
||||||
"size_bytes": 42737160
|
"size_bytes": 42738544
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "archipelago-frontend-1.7.60-alpha.tar.gz",
|
"name": "archipelago-frontend-1.7.61-alpha.tar.gz",
|
||||||
"current_version": "1.7.60-alpha",
|
"current_version": "1.7.61-alpha",
|
||||||
"new_version": "1.7.60-alpha",
|
"new_version": "1.7.61-alpha",
|
||||||
"download_url": "http://146.59.87.168:3000/lfg2025/archy/releases/download/v1.7.60-alpha/archipelago-frontend-1.7.60-alpha.tar.gz",
|
"download_url": "http://146.59.87.168:3000/lfg2025/archy/releases/download/v1.7.61-alpha/archipelago-frontend-1.7.61-alpha.tar.gz",
|
||||||
"sha256": "f781295c9dbd6a18098e63a73e0783dec403ca9598ab4b60defcb717bf1ef5f2",
|
"sha256": "80c5bef31460ece8c1416a8f4e5e88626d1ef4103d40fec0e4872aafb3332dcc",
|
||||||
"size_bytes": 166468694
|
"size_bytes": 166470847
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,29 +1,28 @@
|
|||||||
{
|
{
|
||||||
"version": "1.7.60-alpha",
|
"version": "1.7.61-alpha",
|
||||||
"release_date": "2026-05-18",
|
"release_date": "2026-05-18",
|
||||||
"changelog": [
|
"changelog": [
|
||||||
"Meshtastic serial detection now rejects malformed or incomplete handshakes instead of accepting unrelated serial devices as a fallback Meshtastic radio.",
|
"Multi-container stack installs now keep their app card in the `Installing` state for up to 20 minutes while dependency containers are being pulled and prepared.",
|
||||||
"Mesh radio auto-detection now skips known non-mesh serial devices such as Sierra Wireless LTE modems and Zooz/Z-Wave sticks, avoiding interference with production peripherals.",
|
"BTCPay Server installs no longer appear to vanish or fail after two minutes while Postgres and NBXplorer are still being created before the primary `btcpay-server` container exists.",
|
||||||
"Meshtastic config sync now sends `want_config_id` with the correct protobuf wire type, fixing radio-side `ignore malformed toradio` errors and allowing node-info/contact ingestion.",
|
"The stale-transition escape hatch remains short for start, stop, restart, update, and removal operations, so genuinely wedged lifecycle actions still recover quickly.",
|
||||||
"The stable `/dev/mesh-radio` udev rule no longer claims every `ttyACM*` device; it only matches known mesh USB serial adapters and known USB CDC ACM radio vendors.",
|
"Live validation on `100.70.96.88` confirmed BTCPay Server completed installation and responds on port `23000` with the expected HTTP redirect."
|
||||||
"Live validation on `100.70.96.88` confirmed Archipelago selects `/dev/ttyUSB0`, identifies the Meshtastic node, and refreshes 103 mesh contacts."
|
|
||||||
],
|
],
|
||||||
"components": [
|
"components": [
|
||||||
{
|
{
|
||||||
"name": "archipelago",
|
"name": "archipelago",
|
||||||
"current_version": "1.7.60-alpha",
|
"current_version": "1.7.61-alpha",
|
||||||
"new_version": "1.7.60-alpha",
|
"new_version": "1.7.61-alpha",
|
||||||
"download_url": "http://146.59.87.168:3000/lfg2025/archy/releases/download/v1.7.60-alpha/archipelago",
|
"download_url": "http://146.59.87.168:3000/lfg2025/archy/releases/download/v1.7.61-alpha/archipelago",
|
||||||
"sha256": "ef67a16686e1a5f05385455589c56b22243b690b79a914b8b341b3ff4f063be9",
|
"sha256": "5b08f66aa9a685475b86cdcbabe96c3132f3cc0e72d8daaeb0ddd52a01ca87b6",
|
||||||
"size_bytes": 42737160
|
"size_bytes": 42738544
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "archipelago-frontend-1.7.60-alpha.tar.gz",
|
"name": "archipelago-frontend-1.7.61-alpha.tar.gz",
|
||||||
"current_version": "1.7.60-alpha",
|
"current_version": "1.7.61-alpha",
|
||||||
"new_version": "1.7.60-alpha",
|
"new_version": "1.7.61-alpha",
|
||||||
"download_url": "http://146.59.87.168:3000/lfg2025/archy/releases/download/v1.7.60-alpha/archipelago-frontend-1.7.60-alpha.tar.gz",
|
"download_url": "http://146.59.87.168:3000/lfg2025/archy/releases/download/v1.7.61-alpha/archipelago-frontend-1.7.61-alpha.tar.gz",
|
||||||
"sha256": "f781295c9dbd6a18098e63a73e0783dec403ca9598ab4b60defcb717bf1ef5f2",
|
"sha256": "80c5bef31460ece8c1416a8f4e5e88626d1ef4103d40fec0e4872aafb3332dcc",
|
||||||
"size_bytes": 166468694
|
"size_bytes": 166470847
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user