build: bump Rust toolchain to nightly-2026-07-20#34452
Conversation
|
Warning Review limit reached
Next review available in: 6 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (29)
Comment |
|
No |
|
Found 1 issue this PR may fix:
🤖 Generated with Claude Code |
|
This PR may be a duplicate of:
🤖 Generated with Claude Code |
|
Re the overlap with #31415: that PR is already in conflict with main and its const- |
There was a problem hiding this comment.
Beyond the pre-existing inline finding, I walked each chunks_exact → as_chunks site to confirm remainder handling is unchanged (every site either has an exact-multiple length or already discarded the remainder), checked that the bun_core as_chunks_mut borrow ends before the tail dst[copied..] reborrow, and confirmed folder_resolver.rs still assigns abs in both branches before the new rel expression uses it.
Extended reasoning...
The only finding is explicitly pre-existing (Time::to_binary off-by-one, unrelated to this PR's mechanical rewrite of the call site). I verified the less-obviously-mechanical lint fixes for behaviour preservation — in particular the as_chunks conversions (remainder semantics match chunks_exact at every site) and the needless_late_init rewrites where a second variable (abs in folder_resolver, minify_renamer/no_op_renamer in js_printer) is still assigned inside the branches. Deferring rather than approving because a toolchain bump touching 28 files plus build scripts should have the full BuildKite matrix confirmed green by a human before merge.
Bumps the pinned Rust nightly from 2026-05-06 to 2026-07-15 across
rust-toolchain.toml and the format/clippy/miri workflow pins.
Two nightly API changes in core::mem::type_info required code changes
in bun_collections::MultiArrayList:
- core::intrinsics::type_id is now comptime-only; wrap in const { }
- Type.size field removed; use TypeId::size() instead
The rest of the Rust changes are mechanical fixes for clippy lints
newly promoted on this nightly:
- clippy::needless_late_init (let x = if ... else ...)
- clippy::chunks_exact_to_as_chunks (as_chunks::<N>())
- clippy::manual_isolate_lowest_one (isolate_lowest_one())
- clippy::manual_clear (clear() over truncate(0))
- clippy::drain_collect (mem::take over drain(..).collect())
Also quiets the rustup toolchain install chatter that ran on every
build: pass -q (log level WARN) and --no-self-update to the
configure-time and ninja-rule rustup invocations so the 'info: syncing
channel updates' / 'info: self-update is disabled' block no longer
prints on a no-op reinstall. Errors and warnings still surface.
30aa4fd to
b238a79
Compare
|
Rebased onto current main (102 commits) and bumped the target to |
nightly-2026-07-20 adds a rustc lint that flags extern declarations of runtime symbols (exit, abort, etc.) whose Rust signature does not match std's own declaration. Our libc_exit is declared 'safe fn' intentionally (no memory-safety preconditions, callers are plain calls); the ABI is identical, only the Rust-side safety annotation differs. Allow the lint on the block.
|
Superseded by #34782, which folds this toolchain bump in alongside the CI pipeline changes and image bake. Closing in favour of that PR. |
…s, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] in the commit subject opts a PR back in. binary-size annotates only on non-LTO PRs since the comparison against the LTO main baseline is not like-for-like. Tests now run on main (minus asan) and the canary upload-release step depends on every *-test-bun key; a red lane blocks the GitHub/S3 upload. [skip tests] on main still releases. x64 builds are baseline-only: config.ts defaults baseline=true on x64, the haswell -march entry is dropped, and the non-baseline x64 build/test lanes are removed from ci.mjs. upload-release.sh aliases the old bun-*-x64.zip names to the -baseline zips so existing download URLs and install scripts keep resolving. ENABLE_SIMD becomes false on x64; runtime SIMD dispatch already covers the paths that matter. bootstrap.sh v40: install_macos_sdk() fetches the repo's xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk (resolveMacosSdkPath already checks there), and install_linux_glibc_sysroot() drops a bootlin glibc sysroot into /opt/linux-sysroot-glibc (detected by the new detectLinuxGlibcSysroot() but not yet consumed; the --wrap symbol portability mechanism stays live). Dead install_osxcross path removed. Rust toolchain bumped to nightly-2026-07-20 (folds #34452, plus an allow for the new suspicious_runtime_symbol_definitions lint on the safe-fn libc extern block in Global.rs).
…s, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] in the commit subject opts a PR back in. binary-size annotates only on non-LTO PRs since the comparison against the LTO main baseline is not like-for-like. Tests now run on main (minus asan) and the canary upload-release step depends on every *-test-bun key; a red lane blocks the GitHub/S3 upload. [skip tests] on main still releases. x64 builds are baseline-only: config.ts defaults baseline=true on x64, the haswell -march entry is dropped, and the non-baseline x64 build/test lanes are removed from ci.mjs. upload-release.sh aliases the old bun-*-x64.zip names to the -baseline zips so existing download URLs and install scripts keep resolving. ENABLE_SIMD becomes false on x64; runtime SIMD dispatch already covers the paths that matter. bootstrap.sh v40: install_macos_sdk() fetches the repo's xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk (resolveMacosSdkPath already checks there), and install_linux_glibc_sysroot() drops a bootlin glibc sysroot into /opt/linux-sysroot-glibc (detected by the new detectLinuxGlibcSysroot() but not yet consumed; the --wrap symbol portability mechanism stays live). Dead install_osxcross path removed. Rust toolchain bumped to nightly-2026-07-20 (folds #34452, plus an allow for the new suspicious_runtime_symbol_definitions lint on the safe-fn libc extern block in Global.rs).
…s, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] in the commit subject opts a PR back in. binary-size annotates only on non-LTO PRs since the comparison against the LTO main baseline is not like-for-like. Tests now run on main (minus asan) and the canary upload-release step depends on every *-test-bun key; a red lane blocks the GitHub/S3 upload. [skip tests] on main still releases. x64 builds are baseline-only: config.ts defaults baseline=true on x64, the haswell -march entry is dropped, and the non-baseline x64 build/test lanes are removed from ci.mjs. upload-release.sh aliases the old bun-*-x64.zip names to the -baseline zips so existing download URLs and install scripts keep resolving. ENABLE_SIMD becomes false on x64; runtime SIMD dispatch already covers the paths that matter. bootstrap.sh v40: install_macos_sdk() fetches the repo's xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk (resolveMacosSdkPath already checks there), and install_linux_glibc_sysroot() drops a bootlin glibc sysroot into /opt/linux-sysroot-glibc (detected by the new detectLinuxGlibcSysroot() but not yet consumed; the --wrap symbol portability mechanism stays live). Dead install_osxcross path removed. Rust toolchain bumped to nightly-2026-07-20 (folds #34452, plus an allow for the new suspicious_runtime_symbol_definitions lint on the safe-fn libc extern block in Global.rs).
…s, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] in the commit subject opts a PR back in. binary-size annotates only on non-LTO PRs since the comparison against the LTO main baseline is not like-for-like; [lto] PRs enforce the threshold. Tests now run on main (minus asan) and the canary upload-release step depends on every *-test-bun key; a red lane blocks the GitHub/S3 upload. [skip tests] on main still releases. x64 builds are baseline-only: config.ts defaults baseline=true on x64, the haswell -march entry is dropped, and the separate -baseline build/ test lanes are removed. Step keys and artifact names use the plain *-x64 form (no -baseline suffix); computeBunTriplet() drops the suffix, and upload-release.sh uploads the historical -baseline names as copies. WebKit's prebuiltSuffix() only appends -baseline for linux/windows (no macOS/FreeBSD baseline tarball exists). needsBaselineVerification() now runs on every release x64 lane. ENABLE_SIMD becomes false on x64; runtime SIMD dispatch already covers the hot paths. bootstrap.sh v40: install_macos_sdk() fetches the repo's xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk (resolveMacosSdkPath already checks there), and install_linux_glibc_sysroot() drops a bootlin glibc sysroot into /opt/linux-sysroot-glibc (detected by the new detectLinuxGlibcSysroot() but not yet consumed; the --wrap symbol portability mechanism stays live). Dead install_osxcross path removed. Rust toolchain bumped to nightly-2026-07-20 (folds #34452, plus an allow for the new suspicious_runtime_symbol_definitions lint on the safe-fn libc extern block in Global.rs).
…s, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] in the commit subject opts a PR back in. binary-size annotates only on non-LTO PRs since the comparison against the LTO main baseline is not like-for-like; [lto] PRs enforce the threshold. Tests now run on main (minus asan) and the canary upload-release step depends on every *-test-bun key; a red lane blocks the GitHub/S3 upload. [skip tests] on main still releases. x64 builds are baseline-only: config.ts defaults baseline=true on x64, the haswell -march entry is dropped, and the separate -baseline build/ test lanes are removed. Step keys and artifact names use the plain *-x64 form (no -baseline suffix); computeBunTriplet() drops the suffix, and upload-release.sh uploads the historical -baseline names as copies. WebKit's prebuiltSuffix() only appends -baseline for linux/windows (no macOS/FreeBSD baseline tarball exists). needsBaselineVerification() now runs on every release x64 lane. ENABLE_SIMD becomes false on x64; runtime SIMD dispatch already covers the hot paths. bootstrap.sh v40: install_macos_sdk() fetches the repo's xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk (resolveMacosSdkPath already checks there), and install_linux_glibc_sysroot() drops a bootlin glibc sysroot into /opt/linux-sysroot-glibc (detected by the new detectLinuxGlibcSysroot() but not yet consumed; the --wrap symbol portability mechanism stays live). Dead install_osxcross path removed. Rust toolchain bumped to nightly-2026-07-20 (folds #34452, plus an allow for the new suspicious_runtime_symbol_definitions lint on the safe-fn libc extern block in Global.rs).
…s, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] in the commit subject opts a PR back in. binary-size enforces only on [lto] PRs; main records the baseline and non-LTO PRs annotate only. Tests now run on main (minus asan) and the canary upload-release step depends on every *-test-bun key; a red lane blocks the GitHub/S3 upload. [skip tests] on main still releases. x64 is baseline-only. config.ts defaults baseline=true on x64; the haswell -march entry (and rust.ts haswell cpuTarget) is gone. Step keys, labels, and artifact names use the plain *-x64 form: computeBunTriplet() drops the -baseline suffix, upload-release.sh re-zips each x64 artifact under the historical -baseline name (inner dir renamed) for old clients. WebKit prebuiltSuffix() only appends -baseline for linux(gnu/musl) and windows (no macOS/FreeBSD/Android -baseline tarball exists). The runtime binary no longer carries the concept: Environment::BASELINE / ENABLE_SIMD / BUN__GITHUB_BASELINE_URL / bun_warn_avx_missing / the version-string suffix and crash-report char are removed; compile_target still accepts -baseline/-modern tokens (normalized to the plain triplet). install.sh / install.ps1 drop the AVX2 probe; bun upgrade requests the plain name. bootstrap.sh v40: install_macos_sdk() fetches the repo's xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk (resolveMacosSdkPath already checks there), and install_linux_glibc_sysroot() drops a bootlin glibc sysroot into /opt/linux-sysroot-glibc (detected by the new detectLinuxGlibcSysroot() but not yet consumed; the --wrap symbol portability mechanism stays live). Dead install_osxcross path removed. Rust toolchain bumped to nightly-2026-07-20 (folds #34452, plus an allow for the new suspicious_runtime_symbol_definitions lint on the safe-fn libc extern block in Global.rs).
…s, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] in the commit subject opts a PR back in. binary-size enforces only on [lto] PRs; main records the baseline and non-LTO PRs annotate only. Tests now run on main (minus asan) and the canary upload-release step depends on every *-test-bun key; a red lane blocks the GitHub/S3 upload. [skip tests] on main still releases. x64 is baseline-only. config.ts defaults baseline=true on x64; the haswell -march entry (and rust.ts haswell cpuTarget) is gone. Step keys, labels, and artifact names use the plain *-x64 form: computeBunTriplet() drops the -baseline suffix, upload-release.sh re-zips each x64 artifact under the historical -baseline name (inner dir renamed) for old clients. WebKit prebuiltSuffix() only appends -baseline for linux(gnu/musl) and windows (no macOS/FreeBSD/Android -baseline tarball exists). The runtime binary no longer carries the concept: Environment::BASELINE / ENABLE_SIMD / BUN__GITHUB_BASELINE_URL / bun_warn_avx_missing / the version-string suffix and crash-report char are removed; compile_target still accepts -baseline/-modern tokens (normalized to the plain triplet). install.sh / install.ps1 drop the AVX2 probe; bun upgrade requests the plain name. bootstrap.sh v40: install_macos_sdk() fetches the repo's xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk (resolveMacosSdkPath already checks there), and install_linux_glibc_sysroot() drops a bootlin glibc sysroot into /opt/linux-sysroot-glibc (detected by the new detectLinuxGlibcSysroot() but not yet consumed; the --wrap symbol portability mechanism stays live). Dead install_osxcross path removed. Rust toolchain bumped to nightly-2026-07-20 (folds #34452, plus an allow for the new suspicious_runtime_symbol_definitions lint on the safe-fn libc extern block in Global.rs).
…s, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] in the commit subject opts a PR back in. binary-size enforces only on [lto] PRs; main records the baseline and non-LTO PRs annotate only. Tests now run on main (minus asan) and the canary upload-release step depends on every *-test-bun key; a red lane blocks the GitHub/S3 upload. [skip tests] on main still releases. x64 is baseline-only. config.ts defaults baseline=true on x64; the haswell -march entry (and rust.ts haswell cpuTarget) is gone. Step keys, labels, and artifact names use the plain *-x64 form: computeBunTriplet() drops the -baseline suffix, upload-release.sh re-zips each x64 artifact under the historical -baseline name (inner dir renamed) for old clients and compile --target. WebKit prebuiltSuffix() only appends -baseline for linux(gnu/musl) and windows. The runtime binary no longer carries the concept: Environment::BASELINE / ENABLE_SIMD / BUN__GITHUB_BASELINE_URL / bun_warn_avx_missing / the version-string suffix and crash-report char are removed. compile_target keeps its baseline field (user-written -baseline is respected in the npm URL so pinned old versions work); install.sh/ps1 keep the AVX2 probe for the same reason. bun-release platform.ts keeps -baseline entries as alias:true (published, not auto-selected); avx2 probes/filter removed. bootstrap.sh v40: install_macos_sdk() fetches the repo's xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk (resolveMacosSdkPath already checks there), and install_linux_glibc_sysroot() drops a bootlin glibc sysroot into /opt/linux-sysroot-glibc (detected by the new detectLinuxGlibcSysroot() but not yet consumed; the --wrap symbol portability mechanism stays live). Dead install_osxcross path removed. Rust toolchain bumped to nightly-2026-07-20 (folds #34452, plus an allow for the new suspicious_runtime_symbol_definitions lint on the safe-fn libc extern block in Global.rs).
…s, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] in the commit subject opts a PR back in. binary-size enforces only on [lto] PRs; main records the baseline and non-LTO PRs annotate only. Tests now run on main (minus asan) and the canary upload-release step depends on every *-test-bun key; a red lane blocks the GitHub/S3 upload. [skip tests] on main still releases. x64 is baseline-only. config.ts defaults baseline=true on x64; the haswell -march entry (and rust.ts haswell cpuTarget) is gone. Step keys, labels, and artifact names use the plain *-x64 form: computeBunTriplet() drops the -baseline suffix, upload-release.sh re-zips each x64 artifact under the historical -baseline name (inner dir renamed) for old clients and compile --target. WebKit prebuiltSuffix() only appends -baseline for linux(gnu/musl) and windows. The runtime binary no longer carries the concept: Environment::BASELINE / ENABLE_SIMD / BUN__GITHUB_BASELINE_URL / bun_warn_avx_missing / the version-string suffix and crash-report char are removed. compile_target keeps its baseline field (user-written -baseline is respected in the npm URL so pinned old versions work); install.sh/ps1 keep the AVX2 probe for the same reason. bun-release platform.ts keeps -baseline entries as alias:true (published, not auto-selected); avx2 probes/filter removed. bootstrap.sh v40: install_macos_sdk() fetches the repo's xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk (resolveMacosSdkPath already checks there), and install_linux_glibc_sysroot() drops a bootlin glibc sysroot into /opt/linux-sysroot-glibc (detected by the new detectLinuxGlibcSysroot() but not yet consumed; the --wrap symbol portability mechanism stays live). Dead install_osxcross path removed. Rust toolchain bumped to nightly-2026-07-20 (folds #34452, plus an allow for the new suspicious_runtime_symbol_definitions lint on the safe-fn libc extern block in Global.rs).
…s, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] in the commit subject opts a PR back in. binary-size enforces only on [lto] PRs; main records the baseline and non-LTO PRs annotate only. Tests now run on main (minus asan) and the canary upload-release step depends on every *-test-bun key; a red lane blocks the GitHub/S3 upload. [skip tests] on main still releases. x64 is baseline-only. config.ts defaults baseline=true on x64; the haswell -march entry (and rust.ts haswell cpuTarget) is gone. Step keys, labels, and artifact names use the plain *-x64 form: computeBunTriplet() drops the -baseline suffix, upload-release.sh re-zips each x64 artifact under the historical -baseline name (inner dir renamed) for old clients and compile --target. WebKit prebuiltSuffix() only appends -baseline for linux(gnu/musl) and windows. The runtime binary no longer carries the concept: Environment::BASELINE / ENABLE_SIMD / BUN__GITHUB_BASELINE_URL / bun_warn_avx_missing / the version-string suffix and crash-report char are removed. compile_target keeps its baseline field (user-written -baseline is respected in the npm URL so pinned old versions work); install.sh/ps1 keep the AVX2 probe for the same reason. bun-release platform.ts keeps -baseline entries as alias:true (published, not auto-selected); avx2 probes/filter removed. bootstrap.sh v40: install_macos_sdk() fetches the repo's xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk (resolveMacosSdkPath already checks there), and install_linux_glibc_sysroot() drops a bootlin glibc sysroot into /opt/linux-sysroot-glibc (detected by the new detectLinuxGlibcSysroot() but not yet consumed; the --wrap symbol portability mechanism stays live). Dead install_osxcross path removed. Rust toolchain bumped to nightly-2026-07-20 (folds #34452, plus an allow for the new suspicious_runtime_symbol_definitions lint on the safe-fn libc extern block in Global.rs).
…s, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] in the commit subject opts a PR back in. binary-size enforces only on [lto] PRs; main records the baseline and non-LTO PRs annotate only. Tests now run on main (minus asan) and the canary upload-release step depends on every *-test-bun key; a red lane blocks the GitHub/S3 upload. [skip tests] on main still releases. x64 is baseline-only. config.ts defaults baseline=true on x64; the haswell -march entry (and rust.ts haswell cpuTarget) is gone. Step keys, labels, and artifact names use the plain *-x64 form: computeBunTriplet() drops the -baseline suffix, upload-release.sh re-zips each x64 artifact under the historical -baseline name (inner dir renamed) for old clients and compile --target. WebKit prebuiltSuffix() only appends -baseline for linux(gnu/musl) and windows. The runtime binary no longer carries the concept: Environment::BASELINE / ENABLE_SIMD / BUN__GITHUB_BASELINE_URL / bun_warn_avx_missing / the version-string suffix and crash-report char are removed. compile_target keeps its baseline field (user-written -baseline is respected in the npm URL so pinned old versions work); install.sh/ps1 keep the AVX2 probe for the same reason. bun-release platform.ts keeps -baseline entries as alias:true (published, not auto-selected); avx2 probes/filter removed. bootstrap.sh v40: install_macos_sdk() fetches the repo's xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk (resolveMacosSdkPath already checks there), and install_linux_glibc_sysroot() drops a bootlin glibc sysroot into /opt/linux-sysroot-glibc (detected by the new detectLinuxGlibcSysroot() but not yet consumed; the --wrap symbol portability mechanism stays live). Dead install_osxcross path removed. Rust toolchain bumped to nightly-2026-07-20 (folds #34452, plus an allow for the new suspicious_runtime_symbol_definitions lint on the safe-fn libc extern block in Global.rs).
…s, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] in the commit subject opts a PR back in. binary-size enforces only on [lto] PRs; main records the baseline and non-LTO PRs annotate only. Tests now run on main (minus asan) and the canary upload-release step depends on every *-test-bun key; a red lane blocks the GitHub/S3 upload. [skip tests] on main still releases. x64 is baseline-only. config.ts defaults baseline=true on x64; the haswell -march entry (and rust.ts haswell cpuTarget) is gone. Step keys, labels, and artifact names use the plain *-x64 form: computeBunTriplet() drops the -baseline suffix, upload-release.sh re-zips each x64 artifact under the historical -baseline name (inner dir renamed) for old clients and compile --target. WebKit prebuiltSuffix() only appends -baseline for linux(gnu/musl) and windows. The runtime binary no longer carries the concept: Environment::BASELINE / ENABLE_SIMD / BUN__GITHUB_BASELINE_URL / bun_warn_avx_missing / the version-string suffix and crash-report char are removed. compile_target keeps its baseline field (user-written -baseline is respected in the npm URL so pinned old versions work); install.sh/ps1 keep the AVX2 probe for the same reason. bun-release platform.ts keeps -baseline entries as alias:true (published, not auto-selected); avx2 probes/filter removed. bootstrap.sh v40: install_macos_sdk() fetches the repo's xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk (resolveMacosSdkPath already checks there), and install_linux_glibc_sysroot() drops a bootlin glibc sysroot into /opt/linux-sysroot-glibc (detected by the new detectLinuxGlibcSysroot() but not yet consumed; the --wrap symbol portability mechanism stays live). Dead install_osxcross path removed. Rust toolchain bumped to nightly-2026-07-20 (folds #34452, plus an allow for the new suspicious_runtime_symbol_definitions lint on the safe-fn libc extern block in Global.rs).
…s, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] in the commit subject opts a PR back in. binary-size enforces only on [lto] PRs; main records the baseline and non-LTO PRs annotate only. Tests now run on main (minus asan) and the canary upload-release step depends on every *-test-bun key; a red lane blocks the GitHub/S3 upload. [skip tests] on main still releases. x64 is baseline-only. config.ts defaults baseline=true on x64; the haswell -march entry (and rust.ts haswell cpuTarget) is gone. Step keys, labels, and artifact names use the plain *-x64 form: computeBunTriplet() drops the -baseline suffix, upload-release.sh re-zips each x64 artifact under the historical -baseline name (inner dir renamed) for old clients and compile --target. WebKit prebuiltSuffix() only appends -baseline for linux(gnu/musl) and windows. The runtime binary no longer carries the concept: Environment::BASELINE / ENABLE_SIMD / BUN__GITHUB_BASELINE_URL / bun_warn_avx_missing / the version-string suffix and crash-report char are removed. compile_target keeps its baseline field (user-written -baseline is respected in the npm URL so pinned old versions work); install.sh/ps1 keep the AVX2 probe for the same reason. bun-release platform.ts keeps -baseline entries as alias:true (published, not auto-selected); avx2 probes/filter removed. bootstrap.sh v40: install_macos_sdk() fetches the repo's xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk (resolveMacosSdkPath already checks there), and install_linux_glibc_sysroot() drops a bootlin glibc sysroot into /opt/linux-sysroot-glibc (detected by the new detectLinuxGlibcSysroot() but not yet consumed; the --wrap symbol portability mechanism stays live). Dead install_osxcross path removed. Rust toolchain bumped to nightly-2026-07-20 (folds #34452, plus an allow for the new suspicious_runtime_symbol_definitions lint on the safe-fn libc extern block in Global.rs).
…er, sysroots, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] opts a PR back in. binary-size enforces only on [lto] PRs. Tests run on main (minus asan); canary upload depends on every *-test-bun key. [skip tests] on main still releases. x64 is baseline-only. config.ts defaults baseline=true on x64; the haswell -march entry (and rust.ts haswell cpuTarget, and the brotli -fno-lto gate) is gone. Step keys/labels/artifact names use plain *-x64; computeBunTriplet() drops the suffix, upload-release.sh re-zips each x64 artifact under the historical -baseline name (inner dir renamed) for old clients. WebKit prebuiltSuffix() only appends -baseline for linux(gnu/musl)+windows release/ lto (no macOS/FreeBSD/Android/arm64/-asan/-debug tarball exists). The runtime binary drops Environment::BASELINE / ENABLE_SIMD (SWAR loop ungated) / BUN__GITHUB_BASELINE_URL / bun_warn_avx_missing / version-string suffix / crash-report char. compile_target keeps its baseline field (user-written -baseline respected for old-version npm URLs); install.sh/ps1 keep the AVX2 probe for pinned old versions. bun-release platform.ts keeps -baseline entries as alias:true (published, not auto-selected); avx2 probes removed. build-bun now runs cargo + link on one agent (ci-rust-and-link mode): build.ts does cargo -> poll cpp step outcome (buildkite-agent step get) -> download cpp artifact -> ninja link -> package. ci.mjs drops getLinkBunStep and getBuildRustStep; getBuildBunStep emits key=*-build-bun on the per- target image (not the shared alpine rust box). Saves ~1.5m/platform. scripts/packer/build-image.pkr.hcl: docker + amazon-ebs sources on debian-12-slim, runs bootstrap.sh as the provisioner. bootstrap.sh audited for debian compat (added lsb-release for llvm.sh, qemu-user for apt). bootstrap.sh v40: install_macos_sdk() fetches xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk. install_linux_glibc_sysroot() scaffolds manylinux2014 (glibc 2.17) layer extraction into /opt/linux-sysroot-glibc (detected by detectLinuxGlibcSysroot() but not yet consumed; --wrap stays live). Dead install_osxcross removed. Rust toolchain to nightly-2026-07-20 (folds #34452 + allow for the new suspicious_runtime_symbol_definitions lint on Global.rs's safe-fn extern). windows-cross-config and webkit-prebuilt-url source-lints tests updated for the new baseline default.
…er, sysroots, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] opts a PR back in. binary-size enforces only on [lto] PRs. Tests run on main (minus asan); canary upload depends on every *-test-bun key. [skip tests] on main still releases. x64 is baseline-only. config.ts defaults baseline=true on x64; the haswell -march entry (and rust.ts haswell cpuTarget, and the brotli -fno-lto gate) is gone. Step keys/labels/artifact names use plain *-x64; computeBunTriplet() drops the suffix, upload-release.sh re-zips each x64 artifact under the historical -baseline name (inner dir renamed) for old clients. WebKit prebuiltSuffix() only appends -baseline for linux(gnu/musl)+windows release/ lto (no macOS/FreeBSD/Android/arm64/-asan/-debug tarball exists). The runtime binary drops Environment::BASELINE / ENABLE_SIMD (SWAR loop ungated) / BUN__GITHUB_BASELINE_URL / bun_warn_avx_missing / version-string suffix / crash-report char. compile_target keeps its baseline field (user-written -baseline respected for old-version npm URLs); install.sh/ps1 keep the AVX2 probe for pinned old versions. bun-release platform.ts keeps -baseline entries as alias:true (published, not auto-selected); avx2 probes removed. build-bun now runs cargo + link on one agent (ci-rust-and-link mode): build.ts does cargo -> poll cpp step outcome (buildkite-agent step get) -> download cpp artifact -> ninja link -> package. ci.mjs drops getLinkBunStep and getBuildRustStep; getBuildBunStep emits key=*-build-bun on the per- target image (not the shared alpine rust box). Saves ~1.5m/platform. scripts/packer/build-image.pkr.hcl: docker + amazon-ebs sources on debian-12-slim, runs bootstrap.sh as the provisioner. bootstrap.sh audited for debian compat (added lsb-release for llvm.sh, qemu-user for apt). bootstrap.sh v40: install_macos_sdk() fetches xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk. install_linux_glibc_sysroot() scaffolds manylinux2014 (glibc 2.17) layer extraction into /opt/linux-sysroot-glibc (detected by detectLinuxGlibcSysroot() but not yet consumed; --wrap stays live). Dead install_osxcross removed. Rust toolchain to nightly-2026-07-20 (folds #34452 + allow for the new suspicious_runtime_symbol_definitions lint on Global.rs's safe-fn extern). windows-cross-config and webkit-prebuilt-url source-lints tests updated for the new baseline default.
…er, sysroots, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] opts a PR back in. binary-size enforces only on [lto] PRs. Tests run on main (minus asan); canary upload depends on every *-test-bun key. [skip tests] on main still releases. x64 is baseline-only. config.ts defaults baseline=true on x64; the haswell -march entry (and rust.ts haswell cpuTarget, and the brotli -fno-lto gate) is gone. Step keys/labels/artifact names use plain *-x64; computeBunTriplet() drops the suffix, upload-release.sh re-zips each x64 artifact under the historical -baseline name (inner dir renamed) for old clients. WebKit prebuiltSuffix() only appends -baseline for linux(gnu/musl)+windows release/ lto (no macOS/FreeBSD/Android/arm64/-asan/-debug tarball exists). The runtime binary drops Environment::BASELINE / ENABLE_SIMD (SWAR loop ungated) / BUN__GITHUB_BASELINE_URL / bun_warn_avx_missing / version-string suffix / crash-report char. compile_target keeps its baseline field (user-written -baseline respected for old-version npm URLs); install.sh/ps1 keep the AVX2 probe for pinned old versions. bun-release platform.ts keeps -baseline entries as alias:true (published, not auto-selected); avx2 probes removed. build-bun now runs cargo + link on one agent (ci-rust-and-link mode): build.ts does cargo -> poll cpp step outcome (buildkite-agent step get) -> download cpp artifact -> ninja link -> package. ci.mjs drops getLinkBunStep and getBuildRustStep; getBuildBunStep emits key=*-build-bun on the per- target image (not the shared alpine rust box). Saves ~1.5m/platform. scripts/packer/build-image.pkr.hcl: docker + amazon-ebs sources on debian-12-slim, runs bootstrap.sh as the provisioner. bootstrap.sh audited for debian compat (added lsb-release for llvm.sh, qemu-user for apt). bootstrap.sh v40: install_macos_sdk() fetches xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk. install_linux_glibc_sysroot() scaffolds manylinux2014 (glibc 2.17) layer extraction into /opt/linux-sysroot-glibc (detected by detectLinuxGlibcSysroot() but not yet consumed; --wrap stays live). Dead install_osxcross removed. Rust toolchain to nightly-2026-07-20 (folds #34452 + allow for the new suspicious_runtime_symbol_definitions lint on Global.rs's safe-fn extern). windows-cross-config and webkit-prebuilt-url source-lints tests updated for the new baseline default.
…er, sysroots, rust 2026-07-20 [build images] PR builds pass --lto=off (linux link ~15m -> ~1m, darwin ~6m -> ~1m); main keeps LTO so canary matches what ships. [lto] opts a PR back in. binary-size enforces only on [lto] PRs. Tests run on main (minus asan); canary upload depends on every *-test-bun key. [skip tests] on main still releases. x64 is baseline-only. config.ts defaults baseline=true on x64; the haswell -march entry (and rust.ts haswell cpuTarget, and the brotli -fno-lto gate) is gone. Step keys/labels/artifact names use plain *-x64; computeBunTriplet() drops the suffix, upload-release.sh re-zips each x64 artifact under the historical -baseline name (inner dir renamed) for old clients. WebKit prebuiltSuffix() only appends -baseline for linux(gnu/musl)+windows release/ lto (no macOS/FreeBSD/Android/arm64/-asan/-debug tarball exists). The runtime binary drops Environment::BASELINE / ENABLE_SIMD (SWAR loop ungated) / BUN__GITHUB_BASELINE_URL / bun_warn_avx_missing / version-string suffix / crash-report char. compile_target keeps its baseline field (user-written -baseline respected for old-version npm URLs); install.sh/ps1 keep the AVX2 probe for pinned old versions. bun-release platform.ts keeps -baseline entries as alias:true (published, not auto-selected); avx2 probes removed. build-bun now runs cargo + link on one agent (ci-rust-and-link mode): build.ts does cargo -> poll cpp step outcome (buildkite-agent step get) -> download cpp artifact -> ninja link -> package. ci.mjs drops getLinkBunStep and getBuildRustStep; getBuildBunStep emits key=*-build-bun on the per- target image (not the shared alpine rust box). Saves ~1.5m/platform. scripts/packer/build-image.pkr.hcl: docker + amazon-ebs sources on debian-12-slim, runs bootstrap.sh as the provisioner. bootstrap.sh audited for debian compat (added lsb-release for llvm.sh, qemu-user for apt). bootstrap.sh v40: install_macos_sdk() fetches xmac.mjs and splats the pinned MacOSX SDK into /opt/macos-sdk. install_linux_glibc_sysroot() scaffolds manylinux2014 (glibc 2.17) layer extraction into /opt/linux-sysroot-glibc (detected by detectLinuxGlibcSysroot() but not yet consumed; --wrap stays live). Dead install_osxcross removed. Rust toolchain to nightly-2026-07-20 (folds #34452 + allow for the new suspicious_runtime_symbol_definitions lint on Global.rs's safe-fn extern). windows-cross-config and webkit-prebuilt-url source-lints tests updated for the new baseline default.
Bumps the pinned Rust nightly from
nightly-2026-05-06tonightly-2026-07-20.Notable upstream changes in this range
_Rprefix instead of legacy_ZN. std's own backtrace printer demangles both, but bun.report's server-side remapper and any external profiler/debugger tooling that reads Bun's Rust frames needs a v0-aware demangler. We do not pin-Csymbol-mangling-version, so this takes effect.linker_messageslint on by default (rust#153968, 1.97). Already handled:scripts/build/rust.tsandscripts/build/cargo-config.tspass-Alinker_messages.rust-lto-fixstep still reads rustc-emitted bitcode with rustc's ownllvm-tools.WSAESHUTDOWNnow maps toio::ErrorKind::BrokenPipe(rust#156063, 1.97). N/A for us: Bun's socket layer maps Win32 errors throughbun_errno(which already mapsWSAESHUTDOWN→EPIPE), not std'sErrorKind.repr(Rust)enums (rust#155473, 1.97). N/A: every enum we pass across FFI isrepr(C)/repr(u*).{integer}::isolate_lowest_one/isolate_highest_onestabilised (1.97). Used in two of the clippy fixes below.core::mem::type_infonightly feature reshaped:core::intrinsics::type_idis now#[rustc_comptime](compile-time only), andtype_info::Typelost itssizefield in favour ofTypeId::size().bun_collections::MultiArrayListis the only user; fixed below.adt_const_params,allocator_api,arbitrary_self_types_pointers,generic_const_exprs,hasher_prefixfree_extras,inherent_associated_types,macro_metavar_expr,sync_unsafe_cell,thread_local,type_info,core_intrinsics), onlytype_info/core_intrinsicschanged shape.suspicious_runtime_symbol_definitions(1.99 nightly). Flagsextern "C"declarations of runtime symbols (exit, etc.) whose Rust signature differs from std's own. Ourbun_core::Globaldeclareslibc_exitassafe fnon purpose (no memory-safety preconditions); the ABI is identical, so#[allow]on the block.Toolchain pin
rust-toolchain.toml.github/workflows/{format,clippy,miri}.yml(RUSTUP_TOOLCHAIN)Nightly API changes (
core::mem::type_info)bun_collections::MultiArrayListuses the experimental reflection API, which changed shape:core::intrinsics::type_idis now#[rustc_comptime](callable only at compile time). Wrapped the call in aconst { }block.type_info::Typeno longer has asizefield; the size now comes fromTypeId::size().New clippy lints
The new nightly promotes several lints that trip under the workspace's
-D warnings. All fixes are mechanical and preserve behaviour:clippy::needless_late_init: convert latelet x; if ... { x = ... } else { x = ... }tolet x = if ... { ... } else { ... };(bun_alloc, bun_collections, js_parser, js_printer, install, runtime/node/path, runtime/socket/udp, valkey_jsc, sql_jsc/mysql)clippy::chunks_exact_to_as_chunks: replace.chunks_exact(N)/.chunks_exact_mut(N)on constNwith.as_chunks::<N>()(bun_core, boringssl, ast/char_freq, http_jsc websocket, runtime/cli/upgrade, runtime/image, runtime/webcore/encoding)clippy::manual_isolate_lowest_one:x & x.wrapping_neg()→x.isolate_lowest_one()(collections, css)clippy::manual_clear:truncate(0)→clear()(router)clippy::drain_collect:vec.drain(..).collect()→mem::take(&mut vec)(react_compiler)Quiet rustup output
The build runs
rustup toolchain install --forcebefore cargo to self-heal partial toolchain installs. On a no-op this printed:Added
-q(sets rustup log level to WARN) and--no-self-updateto the three call sites (scripts/build/{rust.ts,source.ts,tools.ts}) so the info lines are suppressed while download/error output still surfaces.Verification
bun bdbuilds andbun-debug --revisionrunscargo fmt --all --checkis clean on the new nightly (no formatting drift)cargo clippy --workspace --no-deps --keep-goingpasses on the new nightlycargo test -p bun_collections multi_arraypasses (7/7)Fixes #31414