Files
amethyst/docs/plans/2026-04-27-fix-deb-libicu-dependency-plan.md
T
nrobi144 250bb5a1ad feat(multi-account): display names, middle-truncated npub, npub-only account fix
Account switcher dropdown improvements:
- Two-row display: Display Name on top, npub (middle-truncated) below
  e.g. 'Alice' / 'npub1abc...wxyz · Bunker'
- Middle-truncation for npub: shows first 10 + last 6 chars
- Resolves display names from DesktopLocalCache user metadata
- Confirmation dialog also shows display name
- npub-only (view-only) accounts now persist to encrypted storage
  (ensureCurrentAccountInStorage called in onLoginSuccess)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-29 09:35:33 +03:00

2.6 KiB
Raw Blame History

Fix: Relax libicu dependency in .deb packages

Date: 2026-04-27 Issue: #2579 Branch: fix/deb-libicu-dependency Reference: upstream branch fix-libicu74-dependency

Problem

jpackage runs dpkg-shlibdeps against the bundled JDK's native libs (libfontmanager.so links libicu), pinning Depends: to the build host's libicu version (libicu74 on ubuntu-24.04). Users on Debian 12 (libicu72), Debian 13 (libicu76), Ubuntu 22.04 (libicu70) etc. cannot install.

Neither jpackage nor Compose Desktop DSL expose a way to override auto-generated Depends.

Solution

Post-process the .deb after jpackage: extract, rewrite the libicu dependency to accept any version from libicu66libicu77, repack.

Changes

1. Add scripts/relax-deb-libicu.sh

Shell script that:

  • Takes one or more .deb paths as arguments
  • Extracts with dpkg-deb -R
  • Uses sed to replace libicuNN (or alternation) with libicu66 | libicu67 | libicu70 | libicu72 | libicu74 | libicu76 | libicu77
  • Repacks with dpkg-deb -b
  • Idempotent — no-op when no libicu dep present

2. Update .github/workflows/build.yml

Add step after "Build Desktop Distribution" for the packageDeb matrix leg:

- name: Relax libicu dependency in .deb
  if: matrix.task == 'packageDeb'
  run: |
    set -euo pipefail
    chmod +x scripts/relax-deb-libicu.sh
    scripts/relax-deb-libicu.sh desktopApp/build/compose/binaries/main/deb/*.deb

Insert between "Build Desktop Distribution" (line 160) and "Stop Gradle Daemon" (line 162).

3. Update .github/workflows/create-release.yml

Add step after "Build desktop artifacts" for the linux family leg:

- name: Relax libicu dependency in .deb
  if: matrix.family == 'linux'
  run: |
    set -euo pipefail
    chmod +x scripts/relax-deb-libicu.sh
    scripts/relax-deb-libicu.sh desktopApp/build/compose/binaries/main-release/deb/*.deb

Insert between "Build desktop artifacts" (line 99-104) and "Build portable archives" (line 106).

Note: linux-portable leg doesn't build .deb so no action needed there.

Testing

  • Script is idempotent — safe to run on any .deb
  • CI will validate on next PR build (ubuntu-latest produces .deb artifact)
  • Manual: install resulting .deb on Debian 13 (libicu76) to verify

Unanswered Questions

  • Should we also handle RPM libicu deps? (RPM has different dep mechanism, likely not affected since RPM uses Requires: from bundled libs differently)
  • Should the libicu version list be externalized to a config file for easier updates? (Probably YAGNI — adding a new version is a one-line sed edit)