scalameta / mdoc

Typechecked markdown documentation for Scala
https://scalameta.org/mdoc/
Apache License 2.0
394 stars 80 forks source link

Doesn't work in Windows with Yarn from chocolatey #792

Closed JD557 closed 11 months ago

JD557 commented 1 year ago

So, chocolatey seems to install yarn on C:\Program Files (x86)\Yarn\bin, which contains the following files:

PS C:\Program Files (x86)\Yarn\bin> ls

    Directory: C:\Program Files (x86)\Yarn\bin

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          10/05/2022    11:40           1025 yarn
-a---          10/05/2022    11:40             34 yarn.cmd
-a---          10/05/2022    11:40           1015 yarn.js
-a---          10/05/2022    11:40             42 yarnpkg
-a---          10/05/2022    11:40             30 yarnpkg.cmd

yarn.cmd contains a windows launcher while yarn contains a Unix launcher.

So, running scala.sys.process.Process("yarn").! does not work, it should be scala.sys.process.Process("yarn.cmd").!

scala> scala.sys.process.Process("yarn").!
java.io.IOException: Cannot run program "yarn": CreateProcess error=2, The system cannot find the file specified
  at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1140)
  at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1074)
  at scala.sys.process.ProcessBuilderImpl$Simple.run(ProcessBuilderImpl.scala:85)
  at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.run(ProcessBuilderImpl.scala:117)
  at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.$bang(ProcessBuilderImpl.scala:144)
  ... 37 elided
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
  at java.base/java.lang.ProcessImpl.create(Native Method)
  at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:500)
  at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:159)
  at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1111)
  ... 41 more

scala> scala.sys.process.Process("yarn.cmd").!
yarn install v1.22.19
info No lockfile found.
$ :; (node ./preinstall.js > /dev/null 2>&1 || true)
[1/5] Validating package.json...
[2/5] Resolving packages...
[3/5] Fetching packages...
[4/5] Linking dependencies...
[5/5] Building fresh packages...
error Could not write file "C:\\Program Files (x86)\\Yarn\\yarn-error.log": "EPERM: operation not permitted, open 'C:\\Program Files (x86)\\Yarn\\yarn-error.log'"
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
error An unexpected error occurred: "EPERM: operation not permitted, mkdir 'C:\\Program Files (x86)\\Yarn\\node_modules'".
val res1: Int = 1

As such docusaurusCreateSite is failing in https://github.com/scalameta/mdoc/blob/26a176c79eb61fb94c57862fe49074d0b61279f9/mdoc-sbt/src/main/scala/mdoc/DocusaurusPlugin.scala#L124-L125

tgodzik commented 11 months ago

Thanks for reporting! Would you be able to take a look at it maybe and see if there is a way to work around it?

Would it just be the case of checking if we are on windows and running yarn.cmd in those cases? Or should we do it only as a fallback?

JD557 commented 11 months ago

I'll try to check next week once I'm back at my normal machine.

I think it should be enough to call yarn.cmd on windows, but I want to double check that other install methods (e.g. via npm) also need that.

A fallback would probably also work.