From 1c8a499ae5501299c5d877130d3f523b184cade7 Mon Sep 17 00:00:00 2001 From: Davide Grilli Date: Tue, 9 Dec 2025 09:08:57 +0100 Subject: [PATCH] Release v0.9.1: Linux build fixes and branding update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Bump version to 0.9.1 in all files - Add detailed CHANGELOG for v0.9.1 with Linux AppImage build fixes - Fix desktop notification: "Electrum" → "Pallectrum" Fixes reproducible builds with ELECBUILD_COMMIT and improves AppImage filename determinism. --- CHANGELOG.md | 80 +++++++++++++++++++ README.md | 2 +- electrum/gui/qt/main_window.py | 2 +- .../plugins/timelock_recovery/manifest.json | 2 +- electrum/version.py | 2 +- 5 files changed, 84 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf514093b..fabd29280 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,86 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --- +## [0.9.1] - 2025-12-09 + +### Overview +This release fixes critical build system issues for Linux AppImage reproducibility. Linux builds are new to Pallectrum and were not available in previous versions. + +### Fixed + +#### 1. Fix: Type2-runtime path resolution for reproducible AppImage builds + +**Issue resolved**: Building with `ELECBUILD_COMMIT` failed with "Unable to load provided runtime file" errors. + +**Root Cause**: +- Reproducible builds create a fresh git clone for deterministic output +- Type2-runtime binary built in original project directory was inaccessible to fresh clone +- Runtime cache location changed between contexts + +**Implemented changes**: + +a) **Runtime cache persistence** (`contrib/build-linux/appimage/make_type2_runtime.sh`) + - Changed cache to fixed `$PROJECT_ROOT` location (persists across fresh clones) + - Added validation: file exists AND non-zero size + - Automatic cleanup and rebuild if runtime is corrupted + +b) **Runtime transfer for fresh clones** (`contrib/build-linux/appimage/build.sh`) + - Copies pre-built runtime from original project to fresh clone when `ELECBUILD_COMMIT` is set + - Creates directory structure and includes error handling + +**Modified files**: +- `contrib/build-linux/appimage/build.sh` (+9 lines) +- `contrib/build-linux/appimage/make_type2_runtime.sh` (+35, -5 lines) + +**Impact**: +- Reproducible builds now work without runtime errors +- Better resilience to cache corruption +- Faster builds through runtime reuse (~5-10 minutes saved) + +#### 2. Fix: AppImage filename version handling for deterministic builds + +**Issue resolved**: Filenames were non-deterministic, making it difficult to distinguish official releases from development builds. + +**Root Cause**: +- Version determined too early (before Python installation) +- Used `git describe` which varies by repository state + +**Implemented changes** (`contrib/build-linux/appimage/make_appimage.sh`): +- Moved version detection to after environment setup +- Changed from `git describe` to `print_electrum_version.py` (reads `electrum/version.py`) +- Conditional filename generation: + - **Reproducible/clean**: `pallectrum-v0.9.1-x86_64.AppImage` + - **Development**: `pallectrum-v0.9.1--g-dirty-x86_64.AppImage` + +**Modified files**: +- `contrib/build-linux/appimage/make_appimage.sh` (+16, -3 lines) + +**Impact**: +- Deterministic filenames for reproducible builds +- Development builds clearly marked as non-official +- Better traceability for debugging + +### Technical Details + +- Docker-based reproducible builds with fresh clone isolation +- Runtime cached after first build (saves 5-10 minutes on subsequent builds) +- Total changes: 3 files, 63 insertions, 8 deletions + +### Testing + +- Reproducible build with `ELECBUILD_COMMIT=HEAD` works without errors +- Development builds produce `-dirty` filename +- Runtime caching works across multiple builds +- AppImage executes correctly on Ubuntu 20.04+ + +### Upgrade Notes + +**For end users**: No action required. This is a build system fix only. + +**For maintainers**: Reproducible builds with `ELECBUILD_COMMIT` now work reliably. + +--- + ## [0.9.0] - 2025-12-07 ### Overview diff --git a/README.md b/README.md index d67ed6528..3657bde0f 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ``` Licence: MIT Licence -Version: 0.9.0 +Version: 0.9.1 Maintainer: Davide Grilli Language: Python (>= 3.10) Homepage: https://github.com/palladium-coin/pallectrum diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py index 7bec1c727..326348508 100644 --- a/electrum/gui/qt/main_window.py +++ b/electrum/gui/qt/main_window.py @@ -938,7 +938,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener): def notify(self, message): if self.tray: - self.tray.showMessage("Electrum", message, read_QIcon("electrum_dark_icon"), 20000) + self.tray.showMessage("Pallectrum", message, read_QIcon("electrum_dark_icon"), 20000) def timer_actions(self): # refresh invoices and requests because they show ETA diff --git a/electrum/plugins/timelock_recovery/manifest.json b/electrum/plugins/timelock_recovery/manifest.json index 36fc0abb5..453c9eff1 100644 --- a/electrum/plugins/timelock_recovery/manifest.json +++ b/electrum/plugins/timelock_recovery/manifest.json @@ -4,5 +4,5 @@ "author": "orenz0@protonmail.com", "available_for": ["qt"], "icon":"timelock_recovery_60.png", - "version": "0.9.0" + "version": "0.9.1" } diff --git a/electrum/version.py b/electrum/version.py index c4199581f..3453bf1b9 100644 --- a/electrum/version.py +++ b/electrum/version.py @@ -1,4 +1,4 @@ -ELECTRUM_VERSION = '0.9.0' # version of the client package (Pallectrum) +ELECTRUM_VERSION = '0.9.1' # version of the client package (Pallectrum) PROTOCOL_VERSION_MIN = '1.4' # electrum protocol PROTOCOL_VERSION_MAX = '1.6'