Skip to content

chore: merge release-v1.4.1 back into master - #2134

Open
nullPointerEnjoyer wants to merge 13 commits into
masterfrom
chore/sync-master-with-release-v1.4.1
Open

nullPointerEnjoyer wants to merge 13 commits into
masterfrom
chore/sync-master-with-release-v1.4.1

Conversation

@nullPointerEnjoyer

Copy link
Copy Markdown
Collaborator

Summary

Carries the release-line v1.4.1 work onto master so the two lines are aligned after the v1.4.1 ship:

  • foreign-arch packaging smoke tests (Arch Linux ARM chroot, rootfs URL split, ownertrust import)
  • release changelog backfill and image tag comment refresh
  • mainnet/testnet checkpoint updates
  • api-server/rpc/wallet OpenCodeReview follow-up fixes (scanner-daemon reconnect handling, rpc error types, wallet rpc client)

One conflict resolved: .gitignore (kept master's # local agent workspace comment alongside the .opencode/ ignore). No code conflicts.

Verified: release-v1.4.1 and tag v1.4.1 point at the same commit (190cf62); after this merge master contains every commit reachable from v1.4.1.

nullPointerEnjoyer and others added 13 commits September 24, 2026 15:03
- Bump workspace version to 1.4.1
- Changelog: 1.4.1 section (wallet rescan fix; neutral PoS seal indexing entry)
- Extend testnet checkpoints to height 818500 (step 500, from local synced
  testnet node via chainstate_get_block_ids_as_checkpoints; ~2.5k blocks
  behind tip 821011 at generation time)
- release_linux.yml: the RPM smoke-test step never sourced
  packaging/images.env, so $FEDORA_IMAGE was empty and docker tried to
  pull the script path as an image name.
- win installers: declare TARGETDISTARCH x64. Without it the installers
  are 32-bit, so their HKLM\SOFTWARE uninstall entries land in
  WOW6432Node and the (64-bit PowerShell) smoke check cannot see them;
  files and PATH install fine, masking the issue until the registry
  assertion.
- rpc docs: regenerate node-daemon/docs/RPC{,_DEV}.md and
  wallet-rpc-daemon/docs/RPC.md for the 1.4.1 version bump; the
  expect-file tests embed CARGO_PKG_VERSION and failed on all three
  OS legs of the build workflow.

- win installers: replace the invalid TARGETDISTARCH x64 line with the
  proper NSIS mechanism: a shared MintlayerRequireX64 macro
  (common.nsh) that aborts on 32-bit Windows and switches the registry
  view to 64-bit via SetRegView, inserted from .onInit and un.onInit
  (the uninstaller is a separate process). This keeps the uninstall
  entries in the native HKLM\SOFTWARE hive as the smoke test expects,
  which the previous commit intended but implemented as a command NSIS
  rejects ("Invalid command: TARGETDISTARCH").

- arch smoke test: pacman has no IgnoreArch directive (that is a
  makepkg flag), so installing the foreign-architecture package failed
  with "package architecture is not valid". Add the foreign arch to
  the Architecture option of /etc/pacman.conf instead, and update the
  stale IgnoreArch comments in test-local.sh and release_linux.yml.
The previous fix added the foreign arch to pacman's Architecture list,
which lets the amd64-only Arch image *install* the aarch64 package, but
its binaries still cannot execute there: there is no aarch64 userland,
so every binary dies under qemu with exit 255 (the ELF interpreter
/lib/ld-linux-aarch64.so.1 does not exist). Docker Hub publishes no
arm64 Arch image at all (library/archlinux and archlinux/archlinux are
both amd64-only), so unlike the deb/rpm legs there is no --platform
linux/arm64 escape hatch.

For foreign-architecture packages, smoke-arch.sh now assembles a chroot
of the Arch Linux ARM rootfs and runs the same checks inside it: pacman
-U installs the package with dependencies from the arm repos, pacman
hooks run under emulation (sysusers creates the mintlayer user), and
the binaries execute through the host's qemu binfmt handlers already
registered for the deb/rpm arm64 legs.

Chroot quirks handled:
- pacman's download sandbox user switch fails under the container
  seccomp profile: pass --disable-sandbox inside the chroot
- /proc is not mounted, so /etc/mtab (pacman free-space check) is a
  static copy of the container's mount table
- pacman-key --populate needs process substitution (/dev/fd), which
  requires /proc: initialize the chroot keyring with the container's
  amd64 pacman-key via --gpgdir instead of the emulated one
- /work is not visible in the chroot: script, lib.sh and the package
  are copied in

Verified locally against the pinned CI image with a synthetic aarch64
package exercising install, sysusers hook, binaries, systemd-analyze,
and man page checks, plus an x86_64 package for the native path.
Accepted:

* rpc: reclassify ClientError::RequestTimeout as application-level.
  jsonrpsee does not terminate the WS client's background task on a
  timeout, so the connection may still be usable; tearing down a healthy
  client after one slow response churned connections under transient
  load. Genuinely dead connections are now detected instead by enabling
  WS-level pings in new_ws_client (failed pings terminate the background
  task and surface as RestartNeeded, i.e. a connection-level error),
  which also gives every consumer of the client half-dead-connection
  detection it previously lacked. The request timeout is pinned
  explicitly to 60 seconds (matching the previous default) so the
  daemons' no-wedge guarantees do not depend on a library default.

* scanner-daemon: wait one second after a successful sync before polling
  the node again. sync_once returns Ok immediately when the scanner is
  already at the tip, so the loop previously hammered the node's
  chainstate RPC thousands of times per second; the one-second cadence
  bounds the explorer's tip latency while keeping the node load gentle.

* scanner-daemon: document the ping-based dead-connection detection and
  the pinned request timeout in the supervision loop.

* tests: the scanner reconnect test logs its entropy seed
  (from_entropy_and_print) so CI failures are locally reproducible.

Rejected:

* 'make the supervision loop shutdown-aware': none of the mintlayer
  daemons install signal handling (documented in the web server's
  supervisor); graceful shutdown is a codebase-wide concern outside this
  PR's scope.

* 'reap a proxy connection pair as soon as either direction finishes':
  contradicts the previous round's own request (which asked for the
  either-finished reaping that the comment now documents); a
  half-drained pair still forwards in one direction and ends on its own
  once the peer socket closes, and the registry stays bounded.
Carries the release-line fixes onto master: foreign-arch packaging smoke
tests, release changelog backfill, checkpoint updates, and the
api-server/rpc/wallet OpenCodeReview follow-ups.

# Conflicts:
#	.gitignore
@github-actions

github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

🔍 OpenCodeReview found 6 issue(s) in this PR.

  • ✅ Successfully posted inline: 4 comment(s)
  • 📋 Routed to summary by policy: 2 comment(s)

maintainability · low

📄 packaging/checks/smoke-arch.sh (L41-L41)

⚠️ GitHub could not post this as an inline comment: Routed to summary (severity low · category maintainability)

--disable-sandbox is a relatively new pacman flag; if the ALARM rootfs ships an older pacman that does not know it, every chroot pacman_cmd invocation fails with 'unrecognized option' and no hint. Consider probing once (e.g. pacman --disable-sandbox -Q >/dev/null 2>&1) and setting a flag variable, or at least leaving a comment stating the minimum ALARM/pacman version this script requires.

💡 Suggested Change

Before:

        pacman --disable-sandbox "$@"

After:

        # Requires pacman >= 6.0.x with --disable-sandbox (present in current ALARM rootfs)
        pacman --disable-sandbox "$@"

documentation · low

📄 packaging/test-local.sh (L252-L254)

⚠️ GitHub could not post this as an inline comment: Routed to summary (severity low · category documentation)

The updated comment says the aarch64 leg relies on "qemu binfmt handlers ... plus smoke-arch.sh's foreign-arch handling", but the foreign-arch path now additionally requires downloading the Arch Linux ARM rootfs (~100+ MB) over the network inside the container, which needs outbound HTTPS from the docker run and noticeably increases runtime. A brief note here (and in the local-test prerequisites) would prevent confusion when this leg fails in sandboxed/offline environments.

Comment thread packaging/checks/smoke-arch.sh
Comment thread packaging/checks/smoke-arch.sh
Comment thread packaging/checks/smoke-arch.sh
Comment thread packaging/checks/smoke-arch.sh
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