-
Notifications
You must be signed in to change notification settings - Fork 4.8k
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Announcement: Consolidating .NET GitHub repos #13257
Comments
@stephentoub , feel free to get in touch with me about merging repos and some issues we ran into in the past regarding it when we merged most of the ASP.NET Core repos into mostly one repo. We learned a lot of right things to do and also a few wrong things (or, at least, less-than-ideal things). |
Bring the Xamarin to dotnet organization dotnet/xamarin. Xamarin is part of dotnet ecosystem and I don't see any reason to keeping it out of the organization. Recently its documentations were out of the Microsoft Docs but now we have it in Microsoft Docs.
|
Sounds great! BTW - I've also felt these pain points in other scenarios:
In both of these scenarios, as I understand it, the former ships to the latter to provide |
This looks like a great path forward to me! Would there also be any benefit in pulling in some of the LLILC pieces that CoreCLR tools and CoreRT depend on? The only thing I’m wondering is what impact putting CoreRT components behind branches would have on their discoverability. I guess it just depends on what shape the |
Which parts of CoreRT? I suppose the parts you want to pull into master are CPAOT (aka ILCompiler.ReadyToRun) for AOTv3, why not the rest as well? The rest of CoreRT doesn't really affect the other parts of the repo. Putting CoreRT into an experimental branch just replaces continous mirroring by continous merging from master. |
I get all the moves - it sounds massive and does have downsides with notifications and such, but I do see the net win. On the downsides: we’re working on major Razor contributions (in ASP.NET) that were interrupted the first time with the major repo combination - I’m not looking forward to sinking time into that move again. Please be aware of the community fatigue on those repos specifically. We’ll probably just forgo contributing anything significant there in 2019 and wait for things to settle. My main question was actually dotnet/cli. While that repo name makes sense today, I can’t see it making sense with SDK and such in there. When I’m troubleshooting an MSBuild/Visual Studio issue I would not be looking at the cli repo to file an issue. Can you please share some rational in choosing cli as the combined name? With the current info, It doesn’t seem like it sounds accurate for what’s planned or (more importantly, IMO) intuitive for the future. I would think dotnet/toolchain or something may make more sense...so tossing that out there. |
alternatively, a merge from cli -> sdk instead of sdk -> cli. it follows common usage, and after all, the sdk is what you install to get a copy of the cli... |
dotnet/sdk or dotnet/toolchain makes more sense to me too (prefer sdk). While you're at it, why not use dotnet/asp instead of dotnet/aspnetcore (the Core term is getting deprecated and .net is already in dotnet) |
Can you please elaborate on the plans for CoreRT - ie. what will continue to work on these suggested feature branches? May we continue to use the native compilation on our existing projects that depend on it via the same features that work today? Can we continue to rely on existing published packages at the nuget feed or do we risk that our projects suddenly stop compiling? |
Please don't put CoreRT in a separate branch. Why can't it be put in a folder called experimental? |
@jkotas can best speak to corert. corert today doesn't contribute to .NET Core and is only tangentially related to this consolidation effort for the repos that do compose the shipping .NET. I included it in the description to try to make things clearer, but it seems to have had the opposite effect; apologies. The mentions of corert were meant to highlight that there are pieces that we plan to consume into coreclr moving forward, which would mean they'd end up in whatever branch coreclr was actively being maintained in. Everything else about the corert experiment would remain separate in some fashion. |
@nguerrera, can you speak to the questions about dotnet/cli? |
@Eilon, thanks. Nate shared his experiences from the effort, the good and the less-than-ideal, but yours would be welcome as well. |
It seems the main concern is about the name for CLI. I think we would be open to another name for the merger of (cli + sdk + toolset). I think we want to avoid 'sdk' because people confuse it with 'core-sdk', which is actually the whole SDK box coming together, including the runtimes. That said, it does produce the 'toolset' is actually relatively accurate for the combination, and what we named the top repo of these 3, so maybe we use that. I've seen a few votes for toolchain above. @livarcocc , what do you think? |
An issue that came up in Twitter discussions was one I didn’t think of: coding style/convention differences between coreclr and corefx today. We point people at corefx as an example of what to do and coreclr...not so much. What is the plan there now that the boundary disappears? @nguerrera toolset or toolchain both work well IMO - if toolset is easier then 👍 |
The style employed by corefx. We've already started cleaning up Corelib, adding StyleCop, adding FxCop analyzers, fixing a bunch of stuff, etc. |
@stephentoub #12884 See this. Will structure of dotnet's packages have change? |
As far as consolidating issues go, I hope the existing boundaries are preserved through a distinct set of labels. I agree that it's currently very confusing for newcomers where an issue should best be filed, but I think the separation is valuable for people who are more experienced with the ecosystem. For instance, when originally researching https://github.com/dotnet/coreclr/issues/23168 I knew that CoreCLR was going to be the most applicable repo so it's where I focused my attention. Searching things relating to stack traces in The current I'm sure this is planned, but wanted to mention it just in case. TL;DR: Please make |
I too share this concern about CoreRT. Especially when it comes to issues. Right now it's very easy to look at https://github.com/dotnet/corert/issues and get an idea of the issues affecting CoreRT. In a consolidated future, the relatively few CoreRT issues would be drowned out by CoreFX and CoreCLR issues. Labels don't help here as much because only Microsoft employees can assign labels to issues, I'd worry that the relatively-low-priority CoreRT issues would generally not get labeled in a timely manner. I was going to say that I feel like it'd be better to have CoreRT live as a fork (in the GitHub sense of the term) of the An alternative solution would be to make a fork (in the Git sense of the term), this would allow better visibility and have a separate set of issues. A downside here is that GitHub would not recognize the repo as a fork so it'd come up in site-wide searched when Another solution I'd propose is having a meta project for CoreRT issues. (Similar to One final solution: We could have a convention of prefixing issues with the relevant component. (IE: Titling an issue Anyway, sorry for the wall of text. Just wanted to highlight my concern and throw out some ideas that came to mind. |
Sharing a tool that will make your life easier: https://github.com/google/copybara
|
I would like to express my deepest concern about the future of CoreRT. While Microsoft seems to think about this project as a non-productizable, best-effort playground, there is at least one important use case for CoreRT which none of your AOT efforts covers — single-file, zero-dependency shared libraries with DllExport's. Those are a way to use well-known C# and .NET technologies to write extensions and plugins for apps that don't support loading .NET assemblies out of the box. There is an outstanding 3F/DllExport project out there, but it still depends on now-deprecated, non-cross-platform .NET Framework. Unless at least this scenario is covered by the "mainstream" AOT, CoreRT repo must not go away. Also, as far as I can see, CoreRT AOT approach based on RyuJIT codegen is considered pretty mature by many devs out there, so I believe it's best to keep CoreRT repo separate. |
@stephentoub I suggest reordering this announcement so that the actual repo merges (in the "Plan" section) are listed before the rationale, as that's what most people will be immediately interested in. |
Agreed, something like Also, what happens to I'd also like to echo @adamralph's mention of NuGet. Why should it stay as a separate org? It's most definitely a part of the platform now, it only makes sense to take a look at that org as well. |
Weighing in on many previous comments, I too think that CoreRT shouldn't be hidden on a branch. It IS very much part of the "platform", so by all means make it part of the consolidation effort, but put it in a folder or something. Blazor (client side) is experimental too, would that be hidden on a branch as well? The other thing that caught my eye is the consideration of merging Entity Framework into the ASP.NET repo. I don't think that's a good idea, those are 2 separate, independent libraries... EF can be used in many other environments, they should be kept strictly separated. |
@petroemil Blazor isn't considered experimental anymore, though:
|
Agreed. They should either be in dotnet/corefx or in their own repo under the dotnet org. |
@stephentoub would it be possible to pin this issue? seems like an important one coming and peeps might not see it as it moves down stream when newer issues are added. thx |
Yes, please kill NuGet (in a friendly manner). Put it under dotnet/toolset. Personally, NuGet has so much negative associations that I would cheer for a complete "fusion". It already is hidden via the CLI ( But I understand the challenges like the feeds, gallery, website etc. Another interesting discussion: should MSBuild (https://github.com/microsoft/msbuild) also fall under dotnet/toolset? It is also used outside of .NET right? For .NET it would be very clear imo. Also, NuGet and MSBuild (and SDK) are becoming more integrated than ever (for example Edit1: After reading some valid comments I should state that my main point is about the NuGet Client. From a .NET developer perspective I think we should think about 3 or 4 concepts: the platform, the language, the app model and the toolset. And hide things like NuGet, MSBuild, SDK, XML files etc. The CLI should be able to do almost everything. Edit2: I know the ship has already sailed but I like dot.net/pkg (bit like Go) or dot.net/packages as replacement or addition to the NuGet Gallery. And of course VS should remove NuGet names. Okay, I'm dreaming |
Unfortunately it's not totally hidden... for example you still have to do |
To all the people talking about NuGet: NuGet is not strictly a .NET technology. It's definitely most strongly associated with the .NET ecosystem, but it can be and is used in other places where a package manager can be useful. In particular, Native C++ and Chocolatey come to mind. |
OK, thanks @nguerrera. |
I've updated the README on dotnet/cli to reflect the interim state we're at now. |
Did the new repo's name get changed to dotnet/runtime instead? |
|
This file should be updated to reflect the new repos: It's linked from https://github.com/dotnet/core#getting-help. |
dotnet/corefx, dotnet/coreclr, dotnet/core-setup, and the relevant code from mono/mono have now all been consolidated into dotnet/runtime. |
Hi, can you please take a look at Github Actions and guide us what change we need to make? |
@9034725985 can you please open a new issue. |
The old |
The aspnet/aspnetcore repo simply moved orgs to dotnet/aspnetcore. My understanding is GitHub should have preserved links appropriately. From the above docs: It sounds like that didn't happen in all cases. cc: @Pilchie, @ViktorHofer |
FWIW I wasn't part of the aspnetcore migration but here's what I noticed: Interesting, the URL doesn't resolve either for dotnet/aspnetcore: https://raw.githubusercontent.com/dotnet/aspnetcore/28cf04843f3456a72f1816e83a1f4aa59f49a049/src/Microsoft.AspNetCore/WebHost.cs. I can't find a file under the path |
Based on the files that do exist, presumably it should have been: |
Hmm. Also tagging @tmat. Maybe we have something wrong with our SourceLink config, so it is pulling stuff relative to the project being built instead of the repo root? |
Okay, it also seems to be a problem of this specific package. (For example Just for reference, I'm talking about Microsoft.AspNetCore v2.1.7 and the used PDB is http://msdl.microsoft.com/download/symbols/microsoft.aspnetcore.pdb/6f8e3d27a142426faf0d0b876ed8d5bbFFFFFFFF/microsoft.aspnetcore.pdb. |
Ah. 2.1 :-/ 2.1 servicing got consolidated from all the other aspnet/* repos at some point, and I could totally believe that sourcelink wasn't correctly configured as part of that. I've filed an issue on |
@ulrichb that file has since moved: https://github.com/dotnet/aspnetcore/blob/release/2.1/src/DefaultBuilder/src/WebHost.cs. Could you try using a newer PDB? The most recent version of 2.1 is 2.1.18 |
@wtgodbe Hmm ... 2.1.7 is the latest 2.1.* version, see https://www.nuget.org/packages/Microsoft.AspNetCore/2.1.7 .. isn't it? |
@ulrichb that is the last time we produced that particular package, but we've continued to ship releases of the 2.1 product. Our most recent was last month - see the release notes here, which has links to download the asp.net runtime: https://github.com/dotnet/aspnetcore/releases/tag/v2.1.18 |
Okay, but even the Microsoft.AspNetCore.App v2.1.18 package references Microsoft.AspNetCore (>= 2.1.7 && < 2.2.0) (which directly contains the |
... and just guessing: Maybe it hasn't been released/updated after the directory move because the assembly's content hasn't changed (it's a pretty small assembly), but only the .PDB (paths) have changed. |
Any later code movement and the directory consolidation are red herrings for this part of the discussion. https://raw.githubusercontent.com/aspnet/AspnetCore/28cf04843f3456a72f1816e83a1f4aa59f49a049/src/MetaPackages/src/Microsoft.AspNetCore/WebHost.cs is a completely valid URI that matches what https://github.com/dotnet/aspnetcore/blob/v2.1.7/src/MetaPackages/src/Microsoft.AspNetCore/WebHost.cs shows. The PDB is messed up. Questions:
|
@wtgodbe do we have a dotnet/aspnetcore issue tracking the sourcelink problem? This discussion is pretty far from this issue and dotnet/runtime (which doesn't even contain 2.1 code 😃) in particular. |
dotnet/aspnetcore#22469. I'll look more into it when I get some time |
Over the next few months, we plan to consolidate several of the foundational repositories of .NET Core, including dotnet/coreclr and dotnet/corefx.
.NET’s repository structure on GitHub was initially created in a fairly fine-grained manner, with the aim of enabling runtime agility and increased developer productivity. However, this separation has led to a variety of complications for contributors and maintainers alike. For example:
The issues go beyond the runtime. For example, the ASP.NET maintainers and community did a great job in the past year or so consolidating from ~55 repos down to ~5 repos, but that’s still more repos than is desirable, leading to similar issues as cited above for the runtime. On top of that, these ASP.NET repositories are in the aspnet GitHub org, which adds an additional set of issues, for example:
The issues extend into tooling as well. For example, we currently have multiple repositories that all logically make up the dotnet CLI, but actually creating a working installer spans multiple repos.
Plan
To address these issues, we’re planning to make some changes to our repository structure:
FAQ
Why are we merging repos?
We believe we can significantly improve several aspects of .NET on GitHub by combining repos, benefiting both maintainers and contributors. These improvements will manifest in a variety of ways, such as in better issue management, much easier models of contribution, and easier and faster ways to build and install the resulting bits.
What will happen to the aspnet org?
The aspnet org as a separate entity is legacy and artificial. In time we hope to absorb it into the dotnet org and sunset the aspnet org.
Will the coreclr and corefx repos go away?
With the help of GitHub, we plan to migrate all issues from these repos to the new dotnet/platform repo, and then lock down creation of additional issues, such that the repos will no longer be used for issue management. We will also inhibit the creation of PRs to the master branch, which will effectively become an archive for read-only review of history. In this sense, these repos will be archived, and no active development will happen with them. However, we plan to continue servicing previous .NET Core releases out of these repos, so the various release branches (e.g. release/2.1, release/3.0, etc.) will continue to see (limited) activity.
Will the mono repo go away?
No. mono/mono contains the source for the full mono stack and will continue to live on happily. We will simply be moving the managed source associated with System.Private.CoreLib and copying the relatively small amount of source that makes up the native mono runtime to dotnet/platform. We may choose to then use some mirroring technology to keep the runtime copy in sync (this will, however, not suffer from the same mirroring issues we currently experience, as we would not be mirroring between two components required to build the same binaries), or we may choose to let them diverge and manually sync only those changes deemed relevant to both implementations.
Will the corert repo go away?
Yes. We plan to retire/archive the corert repo. Some of the technology in the corert repo will be migrated to the master branch of dotnet/platform, where it will be productized as part of .NET. Other portions of the corert repo will be migrated to feature branches of dotnet/platform, where the experimentation can continue. In this way, we will use feature branches to continue experimenting with the corert technology, while making it easier to share portions with its shipping counterpart and also graduate functionality into master if/when it’s ready.
Does this mean there will be a single repo for all of .NET?
No. We will be reducing the number of repos that contribute to .NET, but currently we do not believe that going all the way down to one is the right answer.
Doesn’t this mean that issue and PR tracking will now be overwhelming?
It is already the case that the vast majority of issues in a given repo are not relevant to any individual developer, and with several thousand open issues in each repo and on the order of a hundred open PRs in each, we already need systems (e.g. labels) to successfully manage issues and PRs. As such, we don’t believe the merging will have a significant impact on this aspect of developer productivity. If it turns out to have an unexpectedly large negative impact, we will work with the community to find ways to mitigate the problem. However, there are already a multitude of successful open source projects on GitHub with at least an order of magnitude more issues.
What will happen to existing issues?
With the help of GitHub functionality, we plan to migrate all issues from old repos (e.g. dotnet/coreclr, dotnet/corefx) to the new repos (e.g. dotnet/platform). We may also use this as a forcing function to revisit stale issues and either close those that are no longer relevant or reinvigorate those that are demanding of more immediate attention.
What about git history?
In general, we plan to keep history, such that history from each constituent repo will be a part of the new repo. However, we have made some mistakes in the past (e.g. large binaries, multitudes of automated PRs for flowing bits and source between repos, etc.), and we plan to rewrite history to correct those mistakes wherever possible and impactful. Some rough calculations suggest this could end up significantly reducing the size of the repos as well as the time it takes to clone, which should not only help developers approaching the project but also CI. This will end up meaning that SHAs may be different in the new repo than they were in the old repo; as previously mentioned, however, any references to the old SHAs in the old repos will continue to work, as those repos will remain accessible.
Will I still show up in the contributor list due to previous contributions?
Yes. We plan to merge all such history.
Will this break debugging with SourceLink?
No. The existing repos will continue to be accessible, and commit SHAs there will remain unchanged.
Might plans change?
Sure. Part of the goal of posting this announcement is to hear from you, hear about additional benefits you're excited about, and hear about additional concerns we may not have considered. We will include such ideas in our planning and course correct as necessary.
The text was updated successfully, but these errors were encountered: