Skip to content

ci(release): lower Linux gnu glibc baseline for Node.js & Python SDKs - #609

Merged
hogan-yuan merged 1 commit into
mainfrom
fix/linux-gnu-glibc-baseline
Oct 16, 2026
Merged

hogan-yuan merged 1 commit into
mainfrom
fix/linux-gnu-glibc-baseline

Conversation

@hogan-yuan

Copy link
Copy Markdown
Member

Problem

The Linux x86_64/aarch64 gnu native binaries for the Node.js and Python SDKs were built directly on the ubuntu-24.04 CI runner (glibc 2.39), so they required glibc ≥ 2.39 at load time and failed with ERR_DLOPEN_FAILED / GLIBC_2.39 not found on glibc-2.34 platforms: Amazon Linux 2023, AWS Lambda, Vercel, RHEL 9, Ubuntu 22.04.

The musl builds (musllinux_1_2) and the Java JNI artifacts (cross-built) were already unaffected.

Reported as longbridge/developers#811.

Fix

Lower the gnu glibc baseline in release.yml:

  • Python — maturin-action builds gnu wheels in the manylinux_2_28 container (glibc 2.28). manylinux is set only for the ubuntu matrix entries; Windows/macOS use auto (ignored off-Linux).
  • Node.js — gnu targets cross-compile with @napi-rs/cross-toolchain via --use-napi-cross; the per-entry build command moves into matrix.settings.build.

Validation

CI-only change — cannot be validated locally. Needs a release-pipeline run; after building, confirm the artifacts' max glibc symbol is ≤ 2.28 (Python) / the napi-cross baseline (Node), e.g.:

grep -aoP 'GLIBC_[\d.]+' *.node | sort -uV | tail -1

Shipping the fix to users requires a new release.

The Linux x86_64/aarch64 gnu native binaries were built directly on the
ubuntu-24.04 runner (glibc 2.39), so they required glibc >= 2.39 at load
time and failed with ERR_DLOPEN_FAILED / 'GLIBC_2.39 not found' on
glibc-2.34 platforms (Amazon Linux 2023, AWS Lambda, Vercel, RHEL 9,
Ubuntu 22.04).

- Python: build gnu wheels in the manylinux_2_28 container (glibc 2.28).
- Node.js: cross-compile gnu targets with @napi-rs/cross-toolchain
  (--use-napi-cross), using matrix.settings.build per entry.

musl builds and the Java JNI (cross-built) artifacts were unaffected.

Reported as longbridge/developers#811
@hogan-yuan
hogan-yuan merged commit 4cfc453 into main Oct 16, 2026
56 checks passed
@hogan-yuan
hogan-yuan deleted the fix/linux-gnu-glibc-baseline branch October 16, 2026 06:04
@hogan-yuan hogan-yuan mentioned this pull request Oct 16, 2026
hogan-yuan added a commit that referenced this pull request Oct 16, 2026
Release **v5.2.2**. Bumps workspace `5.2.1` → `5.2.2`.

### New since v5.2.1
- **Added:** attached (take-profit / stop-loss) orders gain bid/ask
depth levels (longbridge/developers#1189). `SubmitAttachedParams` /
`ReplaceAttachedParams` gain `profit_taker_depth_level` /
`stop_loss_depth_level` (int32, valid when `activate_order_type` is
`LIT`), and `AttachedOrderDetail` gains `limit_depth_level`. Across
Rust, C, C++, Java, Node.js and Python (the Go SDK ships separately,
openapi-go#132) (#607)

### Release pipeline (no SDK changes)
- Java: bump `central-publishing-maven-plugin` to 0.12.0 so Maven
Central accepts bundles built with Maven 3.10 (#606)
- Node.js: skip npm publish when the version is already published, so
re-running the Release workflow no longer fails with E403 (#608)
- Lower the Linux gnu glibc baseline for the Node.js & Python SDKs
(#609)

Only `Cargo.toml` (workspace version + internal dep reqs) and
`CHANGELOG.md` change.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
hogan-yuan added a commit that referenced this pull request Oct 19, 2026
## Problem

The v5.2.2 Release run (38894106821) failed in `build-python-sdk (3.12,
ubuntu-24.04-arm)`:

```
📦 Built wheel for CPython 3.9 to dist/longbridge-5.2.2-cp39-cp39-manylinux_2_28_aarch64.whl
ERROR: Could not find a version that satisfies the requirement longbridge (from versions: none)
```

#609 moved the Linux gnu wheels into the `manylinux_2_28` container but
kept `-i python`. Inside the container, a bare `python` is the image's
default interpreter, not the runner's setup-python one. So every Linux
job built a **cp39** wheel no matter what its matrix version was, and
the 3.12 job couldn't install it. `fail-fast` then cancelled the rest of
the matrix.

**Nothing was published.** Every `publish-*` job waits on the aggregate
`build` job, which needs all builds to succeed.

The Node.js half of #609 (`--use-napi-cross`) built fine: both Linux gnu
`build-nodejs-sdk` jobs succeeded in that run.

## Fix

On Linux, name the interpreter explicitly: `-i python${{
matrix.python-version }}`. This is what the `build-python-sdk-musl` job
already does inside its `musllinux_1_2` container. Windows and macOS
build on the runner itself and keep `-i python`.

## Verification

- `release.yml` parses as valid YAML.
- The expression only changes the Linux matrix entries.
- The same `-i python<version>` form already works for the musl wheels
in every release run.
- Not exercised in CI here: this workflow only runs on a push to
`release`.

CI-only change; no CHANGELOG entry.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
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.

1 participant