Skip to content

Fix Signal Desktop v8.0.0 binary ACI by building signal-cli from master#801

Open
strichter wants to merge 3 commits intobbernhard:masterfrom
strichter:fix/build-signal-cli-from-master
Open

Fix Signal Desktop v8.0.0 binary ACI by building signal-cli from master#801
strichter wants to merge 3 commits intobbernhard:masterfrom
strichter:fix/build-signal-cli-from-master

Conversation

@strichter
Copy link

Summary

Signal Desktop v8.0.0 switched from string ACI fields to binary ACI encoding in protobuf messages, breaking reactions, mentions, and quotes in signal-cli v0.13.24. The signal-cli maintainer confirmed that the master branch already includes the fix (signal-service-java:2.15.3_unofficial_138 with dual-format ACI parsing).

This PR builds signal-cli from master on x86_64 instead of checking out the v0.13.24 tag, which resolves all three issues without needing a patch file:

  • Reactions from Desktop: targetAuthorUuid populated
  • Mentions from Desktop: mentions array with resolved UUIDs
  • Quotes from Desktop: quote.authorUuid populated

Changes

  • Build from signal-cli master (default branch) instead of v0.13.24 tag on x86_64
  • Use installDist output as the main signal-cli installation (replaces the release tarball on x86_64)
  • Detect libsignal-client jar version dynamically (master uses 0.87.1 vs 0.87.0 in v0.13.24)
  • Update signal-cli-native.patch to match master's build.gradle.kts structure
  • Move BaseConfig/libsignal workarounds behind architecture guard (arm64/armv7 only — they still use the v0.13.24 release tarball)

How it works

  • x86_64: Source build clones signal-cli master, builds with ./gradlew installDist, replaces the release tarball directory, injects the custom libsignal_jni.so, then compiles the GraalVM native image.
  • arm64/armv7: No change — continues using the v0.13.24 release tarball with existing workarounds. These architectures will get the fix when signal-cli cuts a new release.

Supersedes #799 (which patched v0.13.24 with the same fixes that are now on master).

Test plan

  • Verified signal-cli master handles binary ACI correctly (tested reactions, mentions, quotes from Signal Desktop v8.0.0 to a linked signal-cli instance)
  • Build Docker image on x86_64 (docker build .)
  • Verify arm64/armv7 builds are unaffected (no changes to those code paths)

🤖 Generated with Claude Code

… ACI

Signal Desktop v8.0.0 switched to binary ACI encoding which breaks
reactions, mentions, and quotes in signal-cli v0.13.24. The signal-cli
master branch already includes the fix (signal-service-java
unofficial_138 with dual-format ACI parsing), so building from master
on x86_64 resolves all three issues without needing a patch.

Changes:
- Build from signal-cli master instead of v0.13.24 tag on x86_64
- Use installDist output as the main signal-cli installation
- Detect libsignal-client jar version dynamically (master uses 0.87.1)
- Update signal-cli-native.patch for master's build.gradle.kts
- Move BaseConfig/libsignal workarounds behind arch guard (arm64/armv7 only)

Supersedes bbernhard#799 (patch-based approach).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@strichter
Copy link
Author

Fixes #796 — builds signal-cli from master which includes the binary ACI fix, resolving incomplete JSON serialization for reactions, mentions, and quotes from Signal Desktop v8.0.0. Supersedes #799.

signal-cli master's buildSrc requires Java 24, and the libsignal-cli
subproject requires Java 25 for compilation. GraalVM 21.0.0 (Java 21)
fails both checks. Bump to GraalVM Community Edition 25.0.2 (JDK 25).

The native binary produced by GraalVM does not require a JRE at runtime,
so openjdk-21-jre in the runtime image remains sufficient.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@strichter strichter force-pushed the fix/build-signal-cli-from-master branch from 9fa2b8b to dd97a24 Compare February 28, 2026 11:23
@bbernhard
Copy link
Owner

Thanks for the PR, but I do not want to include any patches for signal-cli and/or build signal-cli directly from the master branch. Building from master could be quite dangerous, since it might contain some partial commits.

signal-cli master (0.14.0-SNAPSHOT) is compiled with GraalVM 25 / Java 25.
The JVM launcher (`signal-cli`) requires a Java 25 runtime, but the
previous image used Ubuntu Jammy with openjdk-21-jre.

- Base image: ubuntu:jammy → ubuntu:noble (24.04 LTS)
- JRE: openjdk-21-jre → openjdk-25-jre
- netcat → netcat-openbsd (no transitional package on Noble)
- Remove default `ubuntu` user (UID/GID 1000 conflict on Noble)
@strichter strichter force-pushed the fix/build-signal-cli-from-master branch from 6dd8258 to 32c793b Compare February 28, 2026 13:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants