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:
1 parent
e2eb3fa65d
commit
6d4c69ff16
1 file changed
+7
-9
+7
-9
@@ -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,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user