Skip to content

[Bug] Not all linkers respect supportedArchitectures #4323

Closed
@Brooooooklyn

Description

@Brooooooklyn
  • I'd be willing to implement this feature (contributing guide)
  • This feature is important to have in this repository; a contrib plugin wouldn't do

Describe the user story

I'm using yarn3.2.0 in my NAPI-RS projects, and in the CI test steps I want to install dependencies on host platform and testing the native addons on the qemu Docker images.

Installing dependencies on the host platform has many advantages:

  • It's easy to use actions/cache to cache yarn dependencies.
  • It's faster because the host platform is running on the native CPU arch.

Imagine testing linux-aarch64-musl native addons on ubuntu-latest x64 host, I want to install dependencies in these steps:

  • yarn config set supportedArchitectures.cpu 'arm64'
  • yarn config set supportedArchitectures.libc 'musl'
  • yarn install --immutable --mode=skip-build

With the current version, yarn will throw error in linking step: Error: While persisting /canvas/.yarn/cache/@swc-core-linux-x64-gnu-npm-1.2.163-e0dc2d703e-8.zip/node_modules/@swc/core-linux-x64-gnu/ -> /canvas/node_modules/@swc/core-linux-x64-gnu ENOENT: no such file or directory, scandir '/canvas/.yarn/cache/@swc-core-linux-x64-gnu-npm-1.2.163-e0dc2d703e-8.zip/node_modules/@swc/core-linux-x64-gnu'

If set CPU and libc with current:

  • yarn config set supportedArchitectures.cpu --json '["arm64", "current"]'
  • yarn config set supportedArchitectures.libc --json '["musl", "current"]'
  • yarn install --immutable --mode=skip-build

Only packages satisfied with the current platform will be preserved, ls -la @swc:

root@6d7dbe3dd415:/canvas# ls node_modules/@swc
core  core-linux-x64-gnu

Describe the solution you'd like

I think in linking steps should only preserve the packages satisfied with supportedArchitectures but not the current platform.

Describe the drawbacks of your solution

Only preserve the packages satisfied with supportedArchitectures.

Describe alternatives you've considered

Add a flag to specify this behavior?

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions