cypress-io / cypress

Fast, easy and reliable testing for anything that runs in a browser.
https://cypress.io
MIT License
47.09k stars 3.19k forks source link

Win32-Arm64 Is not supported. #30252

Open KimPlaybit opened 2 months ago

KimPlaybit commented 2 months ago

What would you like?

Run a web application with Cypress on a computer with Win32-Arm64 OS.

Why is this needed?

With Asus recently releasing laptops with Qualcomm CPUs, this will be more and more requested. See The Asus Vivobook S 15.

Other

I managed to start my Web app with cypress regardless.

By adding in win32-arm64 as a valid OS in install.js and then hardcode so that "getUrl" in download.js returns "https://download.cypress.io/desktop/13.13.3?platform=win32&arch=x64". What side-effects this has is unknow.

MikeMcC399 commented 2 months ago

@KimPlaybit

Are you using Windows 11 24H2?

KimPlaybit commented 2 months ago

@KimPlaybit

Are you using Windows 11 24H2?

Yes, i am.

but i dont know if this matters? since the problem is that "validateOS" does not support "win32-arm64" and there is no download link for windows with an ARM CPU. I am using a windows Laptop with a Qualcomm Snapdragon(R) X Elite CPU.

MikeMcC399 commented 2 months ago

@KimPlaybit

Thanks for providing the details of your environment!

Cypress is built for win32-x64 only.

According to https://learn.microsoft.com/en-us/windows/arm/overview the emulation changed in Windows 11 24H2, so that is relevant.

KimPlaybit commented 2 months ago

@KimPlaybit

Thanks for providing the details of your environment!

Cypress is built for win32-x64 only.

According to https://learn.microsoft.com/en-us/windows/arm/overview the emulation changed in Windows 11 24H2, so that is relevant.

Alright, but this also states that with Windows 11 24H2 supports emulation of x64 apps. wouldnt that put cypress in that category?

Thus, when i enforced that https://download.cypress.io/desktop/13.13.3?platform=win32&arch=x64 would be downloaded is not wrong. other than that side-effects might happen.

-- Tho, Prism is specificly optimized and tuned for snapdragon.

MikeMcC399 commented 2 months ago

@KimPlaybit

I can't be of much help here as I don't have access to the hardware you're using.

Have you installed Node.js Windows arm64 or Node.js Windows x64? Reading the Node.js docs it seems like the x64 version of Node.js might give you a better experience, however I can't really say as I can't test this.

KimPlaybit commented 2 months ago

@KimPlaybit

I can't be of much help here as I don't have access to the hardware you're using.

Have you installed Node.js Windows arm64 or Node.js Windows x64? Reading the Node.js docs it seems like the x64 version of Node.js might give you a better experience, however I can't really say as I can't test this.

At the current moment i havnt found any issues yet. I am running Node.js Windows ARM64. If you like, i can report any issues i find.

i found this, https://learn.microsoft.com/en-us/windows/arm/arm64ec. Which suggests that Windows 11 ARM has been supporting x64 emulation for a while and that Windows 11 24h2 added "Prism", which is an optimization for Snapdragon.

windows 10 ARM however, do not support x64 emulation, might cause problems.

__

i believe i added this as a feature request. but maybe i should point that out.

MikeMcC399 commented 2 months ago

@KimPlaybit

i believe i added this as a feature request. but maybe i should point that out.

I understood it that way. The Cypress.io team may add a label accordingly.

In terms of using the emulation, it may simply be a question of testing and documentation.

Building Cypress for Windows arm64 would however be a major enhancement to the process and the documentation. https://www.arm.com/developer-hub/laptops-and-desktops

KimPlaybit commented 2 months ago

@KimPlaybit

i believe i added this as a feature request. but maybe i should point that out.

I understood it that way. The Cypress.io team may add a label accordingly.

In terms of using the emulation, it may simply be a question of testing and documentation.

Building Cypress for Windows arm64 would however be a major enhancement to the process and the documentation. https://www.arm.com/developer-hub/laptops-and-desktops

Building it for Windows arm64 would be great. But to add the label to run cypress with the emulator might be a good start tho.

alexsch01 commented 2 months ago

For the time being, I wonder if the Cypress team can redirect https://download.cypress.io/desktop/13.13.3?platform=win32&arch=arm64 to the win32-x64 version

MikeMcC399 commented 2 months ago

With the disclaimer that running Cypress on Windows arm64 is unsupported, undocumented and untested:

  1. Try Node.js Windows x64, as the documentation os.arch() says:

Returns the operating system CPU architecture for which the Node.js binary was compiled. Possible values are 'arm', 'arm64', 'ia32', 'loong64', 'mips', 'mipsel', 'ppc', 'ppc64', 'riscv64', 's390', 's390x', and 'x64'.

  1. I don't think that making the CDN server deliver x64 when arm64 has been requested is a good thing to start doing. Use Advanced Installation, for instance in a Windows PowerShell terminal, and try the following to provide a workaround on the client-side:
$env:CYPRESS_DOWNLOAD_PATH_TEMPLATE='${endpoint}/win32-x64/cypress.zip'
$env:DEBUG='cypress:cli*'
npm install cypress --save-dev --ignore-scripts
npx cypress install --force

followed by

npx cypress verify
npx cypress open

to confirm.

Instead of install cypress, install cypress@latest or install cypress@<version> like install cypress@13.14.2 will also be accepted.

saschanaz commented 1 month ago

Not sure that's feasible if cypress is installed through dev-dependencies. Some overriding method like an env variable CYPRESS_ARCH=x64 would be nice. Okay, actually the core problem is, as briefly mentioned by OP, install.js outright bans win32-arm64 via validateOS(). Once there's a way to skip that, the download path template should work.

MikeMcC399 commented 1 month ago

A possible way forward would be to patch Cypress locally to allow downloading and installing a Cypress win32-x64 binary on win32-arm64 so that it could run in emulation mode. The Cypress documentation instructions on References > Troubleshooting > Patch Cypress describe how to add a patch to the installation process.

It would be good to have win32-arm64 runners available to test in CI, for instance to be able to test the https://github.com/cypress-io/cypress-example-kitchensink repo on Windows on Arm (WoA).

There is some work going on to provide such runners, however it seems that win32-arm64 runners are not yet generally available as free runners hosted on GitHub or on CircleCI.

GitHub Actions

CircleCI

jennifer-shehane commented 2 weeks ago

You could use patch-package to update your Cypress for now to bypass the OS validation for now. That's our recommendation.