fix(ci): replace chromium netlink binary patch with LD_PRELOAD shim, upgrade Playwright to 1.60.0#9385
Open
fatih-acar wants to merge 2 commits into
Open
fix(ci): replace chromium netlink binary patch with LD_PRELOAD shim, upgrade Playwright to 1.60.0#9385fatih-acar wants to merge 2 commits into
fatih-acar wants to merge 2 commits into
Conversation
The E2E job patched the installed chrome binary (objdump to find net::internal::AddressTrackerLinux::ReadMessages, then dd an 0xc3 RET over it) to dodge ERR_NETWORK_CHANGED flake from Docker/veth netlink churn on the runners. That offset detection depends on an exact mangled symbol and binary layout, both of which newer Playwright/Chromium builds change, so the patch breaks. Replace it with an LD_PRELOAD shim (no_netlink.c) that fails NETLINK_ROUTE sockets with EAFNOSUPPORT at the libc level, so AddressTrackerLinux::Init takes its graceful "assume always online" path. This is version-independent since it never inspects the chromium binary. The shim is compiled in CI and injected into the browser process only, via playwright.config.ts launchOptions keyed on NO_NETLINK_SO, keeping it out of node/pnpm subprocesses. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bump @playwright/test and the playwright/playwright-core pnpm overrides from 1.56.1 to 1.60.0 (latest stable), refresh the lockfile, and update the tech-stack note in AGENTS.md. The netlink LD_PRELOAD shim added in the prior commit replaces the binary patching that broke on newer Chromium builds, so the upgrade no longer depends on it. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
No issues found across 6 files
Confidence score: 5/5
- Automated review surfaced no issues in the provided summaries.
- No files require special attention.
Shadow auto-approve: would auto-approve. This PR fixes a flaky E2E test infrastructure issue by replacing a brittle chromium binary patch with a robust, version-independent LD_PRELOAD shim and upgrading Playwright to a minor stable release, with all changes scoped to CI and test configuration and no impact on production code.
Re-trigger cubic
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two commits:
ci:replace the chromium netlink binary patch with anLD_PRELOADshim. The E2E job worked aroundERR_NETWORK_CHANGEDflake (Docker/veth netlink churn on the runners) by patching the installed chrome binary:objdumpto locatenet::internal::AddressTrackerLinux::ReadMessages(...), thenddan0xc3(x86RET) over its first instruction. That offset detection depends on an exact unstripped mangled symbol and the--no-shellbinary layout — both of which newer Playwright/Chromium builds change, so the patch breaks. Replaced with anLD_PRELOADshim (frontend/app/tests/e2e/fixtures/no_netlink.c, ported from styrmin) that failsNETLINK_ROUTEsockets withEAFNOSUPPORTat the libc level, soAddressTrackerLinux::Inittakes its graceful "assume always online" path. Version-independent — it never inspects the chromium binary.test:upgrade Playwright1.56.1 → 1.60.0(latest stable):@playwright/test+ theplaywright/playwright-corepnpm overrides, refreshed lockfile, and the AGENTS.md tech-stack note.Ordered shim-first so the version bump doesn't ride on the already-broken
ddpatch.Implementation notes
gcc -shared -fPIC … -ldl) and exported asNO_NETLINK_SO.playwright.config.tsinjects it vialaunchOptions.envscoped to the browser process only, so it doesn't leak into node/pnpm subprocesses (whose libuv interface enumeration also usesNETLINK_ROUTE).pnpm installadditionally re-tidied unrelatedschema-visualizer/@xyflowentries (pnpm 10.33 cosmetic reformatting), which--frozen-lockfiledoes not require; that churn was kept out.Verification
socket.playwright.config.tsloads and enumerates 245 tests with and withoutNO_NETLINK_SO; Biome clean.pnpm install --frozen-lockfilepasses and resolves@playwright/test 1.60.0;pnpm exec playwright install chromium --no-shelldownloads the 1.60.0 build (Chrome for Testing 148).E2E-testing-playwrightjob.🤖 Generated with Claude Code
Summary by cubic
Replaced the brittle Chromium binary patch with an
LD_PRELOADshim to stop netlink churn from causing E2E flakes, and upgraded Playwright to 1.60.0.Bug Fixes
objdump/ddChrome patch; build ano_netlink.soshim in CI and exportNO_NETLINK_SO.launchOptions.env.LD_PRELOADinplaywright.config.ts, scoped to the browser process only.NETLINK_ROUTEsockets so Chromium assumes “always online,” eliminatingERR_NETWORK_CHANGEDflakes.Dependencies
@playwright/testto1.60.0withplaywright/playwright-coreoverrides.Written for commit 2a321bb. Summary will update on new commits.
Review in cubic