melos icon indicating copy to clipboard operation
melos copied to clipboard

fix: git dependency overrides which resolve in multiple packages

Open XavierChanth opened this issue 1 year ago • 2 comments

Is there an existing issue for this?

  • [X] I have searched the existing issues.

Version

4.0.0

Description

Melos throws a fit when bootstrapping with a git dependency override in CI: See this GitHub actions workflow run

For some context, we have the packages at_client (dart), and at_client_mobile (flutter) which depends on at_client. We have this git dependency override in place for both packages:

dependency_overrides:
  at_chops:
    git:
      url: https://github.com/atsign-foundation/at_libraries
      path: packages/at_chops
      ref: pass_optional_key_params

This will fail, since by default melos will try to git clone to the same directory in parallel:

Resolving dependencies...
Git error. Command: `git clone --mirror https://github.com/atsign-foundation/at_libraries /opt/hostedtoolcache/flutter/stable-3.16.8-x64/.pub-cache/git/cache/at_libraries-ed225b56f65e31be444cc0aa4c9ba1b9ae3eb239`
stdout: 
stderr: fatal: destination path '/opt/hostedtoolcache/flutter/stable-3.16.8-x64/.pub-cache/git/cache/at_libraries-ed225b56f65e31be444cc0aa4c9ba1b9ae3eb239' already exists and is not an empty directory.
exit code: 128
BootstrapException: Failed to install.: at_functional_test at /home/runner/work/at_client_sdk/at_client_sdk/tests/at_functional_test.
Error: Process completed with exit code 1.

The solution is to disable runPubGetInParallel in melos.yaml:

command:
  bootstrap:
    runPubGetInParallel: false

Steps to reproduce

See description above.

Expected behavior

It would be nice if melos checks for git dependency overrides, or any git dependency conflicts between packages, and automatically falls back to running pub get serially. In addition, it would be nice if melos printed a hint to try disabling runPubGetInParallel when this error occurs.

Screenshots

No response

Additional context and comments

In our normal development workflows this isn't usually an issue. We only use git dependency overrides when we want to test against upstream package changes, I would like the speed of running pub get in parallel when possible.

XavierChanth avatar Jan 19 '24 09:01 XavierChanth

Does this work when it's not in a CI environment?

spydon avatar Jan 21 '24 19:01 spydon

@XavierChanth?

spydon avatar Mar 05 '24 16:03 spydon

Does this work when it's not in a CI environment?

We've not run into the conflict since. If I recall the problem correctly, the conflict was between a package and it's example creating a race condition by trying to clone the same repo to the same place at the same time. We've since resolved the issue through other means.

If you would like to investigate this issue further, see https://github.com/atsign-foundation/at_client_sdk/pull/1216, the commits are all open source. The race condition should still be possible, unless it's already been inherently fixed in melos.

XavierChanth avatar Mar 11 '24 16:03 XavierChanth