Idea for better monorepo support

Hi there,

I have an idea for improving monorepo support

Currently you can enter a root directory, however by using this only the root path gets cloned and for a monorepo the code will break because shared packages aren't included. So to address this issue, the root directory feature needs to be updated as follows:

  • Clone the full repo

  • Run build/install commands from the root directory (working directory)

For my company, we use a monorepo with shared packages and we use Rust for some tools. Right now we run cargo run -p {project} for every service and yes this works but it could be improved.

I hope everything is clear, if there are some questions. Feel free to ask!

Have a nice day!

10 Replies

brody
EMPLOYEE

2 years ago

Clone the full repo

Run build/install commands from the root directory (working directory)

may I ask what's preventing you from not setting a root directory and then doing the above?


Hi brody, the problem right now is that when using Root Directory it only clones the path specified and not the full repo.

Here is an example repo:

/crates
/helpers
/[project] (uses helpers crate, specified in Cargo.toml)

If you specify the root directory as /crates/[project], the root directory gets cloned but the helpers crate not.

Here is the error in the build log:
0.312 error: failed to parse manifest at /app/Cargo.toml
0.312
0.312 Caused by:
0.312 error inheriting helpers from workspace root manifest's workspace.dependencies.helpers
0.312
0.312 Caused by:
0.312 failed to find a workspace root


Well it's not well formatted but /helpers and /[project] are in the /crates directory


brody
EMPLOYEE

2 years ago

why can't you omit setting the root directory, and then run all the applicable commands?


Because you have to always define the project name like cargo run -p {project} or cargo build -p {project} and it would be much easier if the root directory will be set as the working directory so you just need to run cargo run or build


brody
EMPLOYEE

2 years ago

while I don't think doing that is all too difficult, you can easily achieve such things with a Dockerfile

https://docs.docker.com/reference/dockerfile/#workdir


This is how you could do it but wouldn't it make more sense to have the root directory replace the working directory and clone the full repo?


brody
EMPLOYEE

2 years ago

I believe the current behaviour makes sense, for complete control you would definitely want to utilise a Dockerfile


How exactly would you structure the Dockerfile? I've added a Dockerfile to each crate but again it's saying: error inheritinghelpersfrom workspace root manifest's workspace.dependencies.helpers.


brody
EMPLOYEE

2 years ago

I'm not a rust developer so I unfortunately wouldn't be of any use with that specific issue


Loading...