-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix npm run on Windows #223
Conversation
0b00ebe
to
4dc1eab
Compare
71be0fd
to
f6ca593
Compare
let output = std::process::Command::new("cmd") | ||
.args(["/C", "npm"]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This PR customized the path to NPM that we use on the Windows platform.
Isn't it the same path, but another way of invoking npm
? That's my interpretation based on this post, though I'm not familiar with running commands on Windows.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm also confused by this - my understanding so far, is that direct npm
invocation does not work because of the different handling of PATH variable on Windows.
Adding cmd
here is supposed to add another layer of indirection that allows the GitHub action runner to inject the correct PATH variable (which is also defined in GITHUB_PATH
workflow variable).
I struggle to find any decent documentation about this PATH behaviour, but FWIW, the example from Rust docs uses cmd
on Windows: https://doc.rust-lang.org/nightly/std/process/struct.Command.html
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't necessarily disagree with the fix, but beware that invoking through cmd
like this can change the interpretation of the arguments. This can lead to some extremely frustrating to debug problems later down the line.
If it does work currently, then its fine, of course, especially since nobody out of us seriously uses windows for development and thus GHA is the only thing that needs to work. Using the which
crate as suggested in the referenced PR sounds like it may be a straightforward improvement in the reliability aspect (though with its own tradeoffs -- adding a dependency potentially means more difficult merges down the line.)
Adding cmd here is supposed to add another layer of indirection that allows the GitHub action runner to inject the correct PATH variable (which is also defined in GITHUB_PATH workflow variable).
FWIW the rust test runner is already invoked by cmd
so the %PATH%
should be already correct.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the references! Given that standard lib docs and other popular projects do the same, I suppose it is the right thing to do.
This PR customized the path to NPM that we use on the Windows platform.
It is inspired by https://github.com/oscartbeaumont/rspc/blob/03240ddca56dc5a473a8652296f648c2e1d3987b/crates/create-rspc-app/src/post_gen.rs#L48