yarn-plugin-nixify icon indicating copy to clipboard operation
yarn-plugin-nixify copied to clipboard

How to handle conditional / `@patch` dependencies

Open sir4ur0n opened this issue 2 years ago • 2 comments

Hi,

I recently tried to migrate the VS Code extension build of Nickel to use yarn-plugin-nixify. As you can see, the build succeeds for Linux but fails for Darwin OSes.

       > patching sources
       > updateAutotoolsGnuConfigScriptsPhase
       > configuring
       > ➤ YN0000: ┌ Resolution step
       > ➤ YN0000: └ Completed
       > ➤ YN0000: ┌ Fetch step
       > ➤ YN0056: │ fsevents@patch:fsevents@npm%3A2.3.2#~builtin<compat/fsevents>::version=2.3.2&hash=df0bf1: Cache entry required but missing for fsevents@patch:fsevents@npm%3A2.3.2#~builtin<compat/fsevents>::version=2.3.2&hash=df0bf1
       > ➤ YN0013: │ 375 packages were already cached, one had to be fetched (fsevents@patch:fsevents@npm%3A2.3.2#~builtin<compat/fsevents>::version=2.3.2&hash=df0bf1)
       > ➤ YN0000: └ Completed
       > ➤ YN0000: Failed with errors in 0s 114ms

By looking into yarn.lock we see the following about fsevents:

"fsevents@npm:~2.3.1":
  version: 2.3.2
  resolution: "fsevents@npm:2.3.2"
  dependencies:
    node-gyp: latest
  checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f
  conditions: os=darwin
  languageName: node
  linkType: hard

"fsevents@patch:fsevents@~2.3.1#~builtin<compat/fsevents>":
  version: 2.3.2
  resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin<compat/fsevents>::version=2.3.2&hash=df0bf1"
  dependencies:
    node-gyp: latest
  conditions: os=darwin
  languageName: node
  linkType: hard

Notice the conditions: os=darwin, and the fsevents@patch:fsevents@~2.3.1#~builtin<compat/fsevents> package.

But to my surprise, when we look into the generated yarn-project.nix:

  • there is no mention whatsoever of darwin
  • only fsevents@npm:2.3.2 is present, the other one is absent!

So I guess I have 3 questions :sweat_smile:

  • how are conditional dependencies supposed to be handled by this plugin?
  • why isn't fsevents@patch:fsevents@~2.3.1#~builtin<compat/fsevents> present in the generated yarn-project.nix file?
  • would you have any idea how to fix the original problem, in case the 2 previous questions are not enough to solve this? :pray:

I searched in the documentation, code and issues, but with poor results :disappointed: The only part that looks interesting is in generate.ts function collectTree: https://github.com/stephank/yarn-plugin-nixify/blob/main/src/generate.ts#L149

but that does not help me understand what I should do to make this work.

Please let me know if I can provide any additional information to help investigate!

sir4ur0n avatar Nov 25 '22 16:11 sir4ur0n