Version
v24.16.0
Platform
Linux, Docker image `node:24.16.0-slim`
Subsystem
No response
What steps will reproduce the bug?
#!/usr/bin/env bash
set -euo pipefail
for NODE_VERSION in 24.15.0 24.16.0; do
echo "### Testing Node ${NODE_VERSION}"
docker run --rm "node:${NODE_VERSION}-slim" sh -lc '
set -eu
apt-get update >/dev/null
apt-get install -y curl >/dev/null
mkdir -p /repro /tmp/out-node
cd /repro
npm init -y >/dev/null 2>&1
npm install extract-zip@2.0.1 >/dev/null 2>&1
curl -fsSL -o chrome.zip https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.35/linux64/chrome-linux64.zip
node --input-type=module -e "import extract from \"extract-zip\"; await extract(\"chrome.zip\", { dir: \"/tmp/out-node\" }); console.log(\"extract-zip done\")"
test -x /tmp/out-node/chrome-linux64/chrome
echo "extract-zip: PASS"
'
done
How often does it reproduce? Is there a required condition?
Always with v24.16.0, never with v24.15.0
What is the expected behavior? Why is that the expected behavior?
Both Node versions should complete extraction successfully
What do you see instead?
### Testing Node 24.15.0
debconf: delaying package configuration, since apt-utils is not installed
extract-zip done
extract-zip: PASS
### Testing Node 24.16.0
debconf: delaying package configuration, since apt-utils is not installed
Warning: Detected unsettled top-level await at file:///repro/[eval1]:1
import extract from "extract-zip"; await extract("chrome.zip", { dir: "/tmp/out-node" }); console.log("extract-zip done")
Seems like extract-zip started extracting, but its async operation got stuck in a state where Node thinks there is nothing left to wait for. And the extraction remains incomplete.
Additional information
When this happens through Puppeteer / @puppeteer/browsers, the install appears to leave a partial extraction. For example, only a few files exist:
/tmp/out-node/chrome-linux64/ABOUT
/tmp/out-node/chrome-linux64/MEIPreload/manifest.json
/tmp/out-node/chrome-linux64/MEIPreload/preloaded_data.pb
/tmp/out-node/chrome-linux64/PrivacySandboxAttestationsPreloaded/manifest.json
/tmp/out-node/chrome-linux64/PrivacySandboxAttestationsPreloaded/privacy-sandbox-attestations.dat
/tmp/out-node/chrome-linux64/WidevineCdm/LICENSE
But the expected executable is missing:
/tmp/out-node/chrome-linux64/chrome
Chrome and Puppeteer versions are all fixed on our side and we didn't change them.
Thanks :)
Version
v24.16.0
Platform
Subsystem
No response
What steps will reproduce the bug?
How often does it reproduce? Is there a required condition?
Always with v24.16.0, never with v24.15.0
What is the expected behavior? Why is that the expected behavior?
Both Node versions should complete extraction successfully
What do you see instead?
Seems like
extract-zipstarted extracting, but its async operation got stuck in a state where Node thinks there is nothing left to wait for. And the extraction remains incomplete.Additional information
When this happens through Puppeteer / @puppeteer/browsers, the install appears to leave a partial extraction. For example, only a few files exist:
But the expected executable is missing:
/tmp/out-node/chrome-linux64/chromeChrome and Puppeteer versions are all fixed on our side and we didn't change them.
Thanks :)