-
Notifications
You must be signed in to change notification settings - Fork 279
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Turn stdarch into a subtree #1655
Comments
I think the main issue is writing the logic that triggers the stdarch CI bits only when something is changed on here.
|
Generally we don't do this in rust-lang CI since it is rather fragile -- it is easy to miss some file that can make tests fail, and then it can be tricky to debug when a failure actually got introduced. CI should be stateless -- it should ensure that the repo satisfies certain checks, in a repeatable way that does not depend on past history. Miri and clippy for example get tested on rustc CI each time, not just when their subtrees change.
I use josh without docker,
AFAIK one has to use a patched version to make it usable with large repos like rustc, otherwise it is way too slow.
I have not tried this one. It seems to be squashing the subrepo history in the main repo into a single large commit for each pull, whereas |
Cc @calebzulawski @flip1995 @lnicola (for portable-simd, clippy, RA) in case they have anything to add to the choice of tool here. |
My only comment is that I often find myself deleting the branch and recreating it when something goes a little awry with git-subtree. I haven't tried josh yet but it seems possibly easier to use. |
Then I guess josh is a winner :) |
This is still causing regular pain during compiler work, e.g. when cleaning up intrinsics in rust-lang/rust#136543. |
rust-lang/rust#132735 is also running into this. Can we make some sort of concrete plan here, so that stdarch stops being a constant thorn in the side of compiler contributors? |
I guess the main question pending is who's doing the conversion and secondarily who's going to write the documentation so contributors won't get lost :) |
If it's going to be done with josh-proxy, I can help, but the maintainers need to be closely involved to ensure this works long-term. rustc-dev-guide was recently migrated from a submodule to a josh-subtree so that could be used as a template (and it points out some of the potential pitfalls). |
Sure, I'm willing to do the migration! I'll have to check stdarch's CI though, I remember it being a bit complex. Do you think that it is necessary to run the full CI in rust-lang/rust, or could we get away with a subset that checks the most critical stuff, and then deal with the rest during pulls? |
I believe the best plan for the long term is to fully migrate stdarch into rust-lang/rust and archive this repository. As such I think the best plan for a migration is:
|
That would also work, of course -- and I agree re: all the implementation details. Is it worth doing the josh setup if in the end we'll want to retire the separate repo anyway? |
I'm fully in favor of moving stdarch into rust-lang/rust!
That would require cross-compilation, I assume. Is stdarch configured in a way where this is easy to do? I was more thinking about the opposite direction, i.e. run stdarch tests for architecture X in an existing rustc runner that already runs rustc (and other) tests for architecture X. |
In theory it should just be a matter of executing all the We have a handful of windows/mac targets which use plain |
Hmm, it's not that simple, I think. Linux jobs in r-l/r already run inside Docker, and tackling another Docker after tham would have a lot of complexity, I don't think we will want to do that. So we'll need to transplant the stdarch jobs into the rustc Docker containers somehow. Furthermore, the stdarch test suite will somehow need to be reimplemented within bootstrap, so it can be executed locally, and not just on CI. I'll take a look at how it could be done. |
stdarch is one of the few remaining big submodules in the rustc repo. And it's painful -- stdarch depends on a lot of very internal rustc implementation details, but refactoring / improving those details always requires a complicated multi-stage process to ensure stdarch keeps building. It would be so much easier if the two could be updated in lock-step, but with a submodule that's not very practical. I ran into this twice just recently: as part of rust-lang/rust#128738, and as part of rust-lang/rust#131349. To ensure our continued ability of maintaining and improving rustc, we should fix this situation.
Miri, clippy, portable-simd, RA are all using subtrees, using either
git subtree
or josh.git subtree
has some bad interacts withgit blame
due to the way it mirrors the changes between the repo. josh has the downside that many of the merge commits from the rustc repo end up being mirrored into the subrepo (see josh-project/josh#1328). I don't care very strongly which is used, though the general trend has been away fromgit subtree
and towardsjosh
(RA recently migrated, clippy decided to migrate but the effort seems currently stalled). If you pickjosh
, I can help with the migration. (I have some migration notes here but those are for a migration fromgit subtree
tojosh
. Migrating from submodules will look a bit different.) You'll likely want some maintainer scripts in the stdarch repo to simplify pushing and pulling changes from and to the rustc repo;cargo xtask
is probably the easiest way to set that up (that's what RA uses).Last time I brought this up with @Amanieu, they were concerned about testing changes that land via rustc, since not the full stdarch test suite runs in rustc CI. I don't know how much testing in rustc CI is required to alleviate these concerns -- would be good to get a clear list of requirements. And then I hope someone can get motivated to work on this so that stdarch can stop being a roadblock for rustc evolution. :)
The text was updated successfully, but these errors were encountered: