fix: run yarn install from /tmp to avoid patch: protocol error

npm reads workspace package.json when run from source directory.
The frontend package.json contains patch: entries (Yarn 4.x PnP)
that npm can't understand. Run from /tmp instead.

Also fix 'run() got an unexpected keyword argument stdout' by
using subprocess.run() directly for npm uninstall/cache clean.
This commit is contained in:
iamninja committed 2026-10-05 14:56:26 +05:00
1 parent e2eb3fa65d
commit 6d4c69ff16
1 file changed
+7 -9
+7 -9
View File
@@ -2148,15 +2148,13 @@ def _build_frontend(src_frontend: Path, dest_frontend: Path):
# Uninstall old Yarn 1.x # Uninstall old Yarn 1.x
try: try:
run(["npm", "uninstall", "-g", "yarn"], check=False, subprocess.run(["npm", "uninstall", "-g", "yarn"], check=False)
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except Exception: except Exception:
pass pass
# Clear cache # Clear cache
try: try:
run(["npm", "cache", "clean", "--force"], check=False, subprocess.run(["npm", "cache", "clean", "--force"], check=False)
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except Exception: except Exception:
pass pass
@@ -2232,9 +2230,9 @@ def _build_frontend(src_frontend: Path, dest_frontend: Path):
if DEBUG: if DEBUG:
print(f" ⚠ 'yarn set version' failed: {e}") print(f" ⚠ 'yarn set version' failed: {e}")
# METHOD 3: npm install @yarnpkg/cli (yarn 4.x) # METHOD 3: npm install @yarnpkg/cli (yarn 4.x) — run from /tmp to avoid reading workspace package.json with patch: entries
try: try:
run(["npm", "install", "-g", "@yarnpkg/cli"], check=False) subprocess.run(["npm", "install", "-g", "@yarnpkg/cli"], check=False, cwd="/tmp")
if shutil.which("yarn"): if shutil.which("yarn"):
major = _get_yarn_major_version(["yarn"]) major = _get_yarn_major_version(["yarn"])
@@ -2251,15 +2249,14 @@ def _build_frontend(src_frontend: Path, dest_frontend: Path):
# First install yarn 1.x if not present # First install yarn 1.x if not present
if not shutil.which("yarn"): if not shutil.which("yarn"):
try: try:
run(["npm", "install", "-g", "yarn@1"], check=False) subprocess.run(["npm", "install", "-g", "yarn@1"], check=False, cwd="/tmp")
except Exception: except Exception:
pass pass
if shutil.which("yarn"): if shutil.which("yarn"):
try: try:
# Uninstall any global yarn 4.x first # Uninstall any global yarn 4.x first
run(["npm", "uninstall", "-g", "@yarnpkg/cli"], check=False, subprocess.run(["npm", "uninstall", "-g", "@yarnpkg/cli"], check=False, cwd="/tmp")
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
# yarn 1.x can upgrade itself to 4.x # yarn 1.x can upgrade itself to 4.x
result = subprocess.run( result = subprocess.run(
@@ -2267,6 +2264,7 @@ def _build_frontend(src_frontend: Path, dest_frontend: Path):
capture_output=True, capture_output=True,
timeout=120, timeout=120,
text=True, text=True,
cwd="/tmp",
check=False, check=False,
) )