Skip to content

Mongo2Go 5.0.0 — MongoDB 8.0.26 (breaking change)#162

Merged
JohannesHoppe merged 1 commit into
mainfrom
feature/mongodb-8-lts
Jul 21, 2026
Merged

Mongo2Go 5.0.0 — MongoDB 8.0.26 (breaking change)#162
JohannesHoppe merged 1 commit into
mainfrom
feature/mongodb-8-lts

Conversation

@JohannesHoppe

@JohannesHoppe JohannesHoppe commented Jul 21, 2026

Copy link
Copy Markdown
Member

Mongo2Go 5.0.0 — MongoDB 8.0.26

Upgrades the bundled MongoDB from 4.4.4 → 8.0.26 (8.0 LTS) and Database Tools 100.3.1 → 100.14.0. MongoDB 8.0 raises consumers' minimum OS (Linux glibc 2.35+ — Ubuntu 22.04+/Debian 12+/RHEL 9+), so this is a breaking change → v5.0.0.

Highlights

Notable engineering

  • Package size — 8.x binaries are ~1.9× larger. We ship only the three executables per platform (upstream licence terms moved to the README), strip them, and the release recompresses the .nupkg at maximum Deflate → 248 MiB, ~1.6 MiB under nuget.org's 250 MiB limit.
  • Apple Silicon signing — stripping removes MongoDB's code signature, and an unsigned arm64 binary is SIGKILLed by the kernel, so the downloader ad-hoc re-signs arm64 after stripping (Intel x64 stays unsigned, as it always was).
  • Binaries in git — the 8.x mongod binaries exceed GitHub's 100 MB per-file limit, so they are committed gzip-compressed (tools/**/bin/*.gz, ≤50 MB each) and unpacked at build time by an MSBuild target. The shipped package and the runtime are unchanged — the nupkg still contains the full binaries.
  • Downloader robustness — bounded the concurrent llvm-strip/archive work and switched to streaming downloads so a full run no longer OOM-kills a modest machine; fixed two extraction crashes specific to the 8.x archives (tar directory entries, and a Windows zip file-lock while stripping).

Note on the binaries

The vendored binaries were re-downloaded from MongoDB's own endpoints, verified against MongoDB's published SHA-256, stripped and signed by @JohannesHoppe .

@JohannesHoppe
JohannesHoppe force-pushed the feature/mongodb-8-lts branch 3 times, most recently from 8b31767 to ff1f912 Compare July 21, 2026 16:28
Bundle MongoDB Community Server 8.0.26 (8.0 LTS) and Database Tools
100.14.0, replacing 4.4.4 / 100.3.1. MongoDB 8.0 raises consumers'
minimum OS (the Linux build needs glibc 2.35+), so this is a major
version bump.

Highlights
- Native macOS arm64 (Apple Silicon): no more Rosetta 2, completing #127.
  Bundled platforms are now Windows x64, Linux x64 & arm64, macOS x64 & arm64.
- libcrypto.so.1.1 is no longer required: the Linux binaries are the
  ubuntu2204 build, linked against OpenSSL 3. Fixes #149 and #135.
- Fix "too many open files" (#147): dispose the chmod, import/export and
  replica-set-init processes/clients that leaked file descriptors on every
  runner start and every import/export.
- Strong-name the Mongo2Go assembly (#150) so it can be referenced from
  strong-named consumer projects. MongoDB.Driver has been strong-named since
  2.28.0, so the separate MongoDB.Driver.signed package is not needed.

MongoDownloader
- Cap concurrent llvm-strip and archive processing, stream downloads to disk,
  and compact the heap between archives, so a full multi-platform run stays
  within a modest RAM budget instead of being OOM-killed.
- Handle tar directory entries and close the zip extraction stream before
  stripping; both crashed extraction on the 8.x archives.
- Strip macOS binaries by removing the signature first, then ad-hoc re-sign
  arm64 so the stripped binary runs on Apple Silicon (unsigned arm64 is
  SIGKILLed by the kernel); the Intel x64 binary is left unsigned as before.
- Ship only the three executables per platform. Upstream licence terms are
  reproduced in README.md instead, keeping the package under nuget.org's
  250 MiB limit.

Repository storage
- The binaries are committed gzip-compressed (tools/**/bin/*.gz) because
  GitHub rejects files over 100 MB and the 8.x mongod binaries are larger.
  The build unpacks them on demand (PrepareMongoBinaries target); the
  decompressed executables are git-ignored. The manifest and the runtime
  verification still work on the decompressed binaries, unchanged.

Packaging
- The release job recompresses the .nupkg at maximum Deflate before pushing,
  reclaiming ~1.1 MiB, and fails the release if the package is still at or
  over the 250 MiB limit.

tools/**/*.gz and src/Mongo2Go/MongoBinaries.sha256 are regenerated together;
the runtime checksum manifest describes the (decompressed) binaries exactly.
All 49 tests pass against the real 8.0.26 binaries on macOS arm64, with
Mongo2Go.dll strong-named on both target frameworks.
@JohannesHoppe
JohannesHoppe force-pushed the feature/mongodb-8-lts branch from ff1f912 to 46cbe7a Compare July 21, 2026 17:11
@JohannesHoppe
JohannesHoppe merged commit 56cf91e into main Jul 21, 2026
14 of 18 checks passed
@JohannesHoppe
JohannesHoppe deleted the feature/mongodb-8-lts branch July 21, 2026 19:30
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.

Is possible to create nuget with MongoDB.Driver.signed? Missing libcrypto.so.1.1 in mcr.microsoft.com/dotnet/sdk:8.0

1 participant