From 88ba649a0391f9617c7a0172db52a0a2a25c6b66 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Thu, 18 May 2023 14:55:46 +0200 Subject: [PATCH 01/47] Port first half into markdown --- .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 273 ++++++++++++++++++ .../UnifiedBuild/images/sdk-branches.png | Bin 0 -> 201635 bytes .../UnifiedBuild/images/sdk-channels.png | Bin 0 -> 91887 bytes 3 files changed, 273 insertions(+) create mode 100644 Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md create mode 100644 Documentation/UnifiedBuild/images/sdk-branches.png create mode 100644 Documentation/UnifiedBuild/images/sdk-channels.png diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md new file mode 100644 index 00000000000..d01f786c895 --- /dev/null +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -0,0 +1,273 @@ +# Managing SDK Bands + +## Purpose + +This document describes the problematics of managing multiple .NET SDK bands and discusses how we propose to solve this in the Unified Build world during the .NET 9 timeframe using the new build methodology and the full VMR. + +## Terminology + +This section presents more precise definitions of common terms used in this document that may be prone to confusion. + +- **Individual/Source repository** – One of the current development repositories, e.g., `dotnet/runtime`. An "individual product repository" is then one that contains code for part of the product (but no individual repository contains code to build the whole .NET Core product). +- **VMR (Virtual Monolithic Repository)** – A repository containing code layout that produces the official build product of .NET Core. The repository contains individual product repositories plus tooling to enable a full build of the product. +- **VMR-lite** – present state where changes only flow one way into the VMR which is read-only. +- **Full VMR (Backflow)** – future final state where changes can be made in the VMR too and flow both ways. Dependency flow at that time will be only between VMR and individual repos, not between individual repos themselves. +- **Source-Build** – A set of sources and a process which allows to build the entire product end to end including all its dependencies in offline mode, excluding native dependencies from the source. +- **Microsoft build** – The current build methodology used to assemble the final product. +- **SDK branch** – A git branch related to a specific SDK band, e.g. `release/8.0.1xx`. +- **Non-SDK branch** – A git branch common for all associated SDK bands, e.g. `release/8.0`. +- **Intermediate packages** – Packaged build produces of each of the individual repositories either built in their source repos or during the subsequent build of each individual repository component within the VMR. These are used during package flow between the VMR and the individual repositories. + +## SDK bands + +Presently, for each major .NET version (e.g., `7.0`), Microsoft not only releases new servicing versions of .NET in succession, but also multiple so-called “bands” of the .NET SDK per each servicing release. These bands differ in their feature set but also share some common parts such as the .NET runtime. +To best illustrate how this works in practice, let’s imagine the following timeline: + +![Example of git history of repositories with shared components and with SDK bands](images/sdk-branches.png) + +On the image you can see timelines of branches of two different repositories – `dotnet/sdk` and `dotnet/runtime`. As noted previously, each (servicing) release of .NET contains multiple SDK bands but only one runtime. Each individual repository of each component that needs to differ per band would then have these so-called “SDK branches” named `release/Z.0.Yxx` while repositories that are shared per release have the non-SDK `release/Z.0` branches. As shown in the example, the development of the single runtime would happen in the `release/8.0` branch while the various SDK bands are stored in the following SDK branches (e.g., `release/8.0.1xx` represents the “100th band”). + +Once we hit each release day (denoted with red vertical lines), we take the latest commit of each of those branches (that already exist) and release those together. For the releases in the example diagram, this might be: + +- Release day #1 – 8.0.0 runtime + one SDK (`8.0.100`) +- Release day #2 – 8.0.6 runtime + two SDKs (`8.0.109`, `8.0.205`) +- Release day #3 – 8.0.12 runtime + three SDKs (`8.0.111`, `8.0.207`, `8.0.302`) + +### Band coherence + +We call the builds of the SDK bands coherent when the versions of all shared components of each band are the same. To make sure, the bands are coherent and depend on the same version of each non-SDK component (e.g., runtime), we utilize the Maestro dependency flow channels. Non-SDK repositories publish their build products in those channels and the SDK branches consume those. Again, as an example, the following diagram shows a possible setup: + +![Example of relationships of repositories with SDK dependency flow channels](images/sdk-channels.png) + +This makes sure that eventually the latest version of each shared component (e.g., runtime) flows to all SDK branches which then become coherent between each other. + +### Release process + +The dependency flow eventually flows all the bits into the `dotnet/installer` repository which also uses the SDK branching. Each of those branches then produces an official build – so one build per band – and we release those. The exact process is that a dedicated person selects all the right official builds which are coherent on the shared bits (so each has the same of the runtime for instance) and inputs the IDs of these builds into the staging pipeline called `Stage-DotNet`. **During this process, it is important for the MSFT build that the shared bits are only built once officially and then re-used in the respective band builds.** + +The long-term plan is to transition to building and releasing using the Virtual Monolithic Repository which is a repository where each commit denotes a full set of sources needed for building .NET. The sources of this repository are synchronized from the individual repositories based on the contents of the `dotnet/installer` repository. The goal of this document is to discuss how this will be done with regards to both the different bands as well as the shared components. + +## Proposed solutions + +Currently, we end up with SDK branches in the `dotnet/installer` repository and the release process makes sure to package those into the final product. With releasing from the VMR, we have two ways we can approach this: + +- **SDK branches** + The first obvious solution that comes to mind is to just synchronize the existing SDK branches of `dotnet/installer` into matching branches of the VMR. This is, in fact, what we’re currently already doing with today’s read-only VMR-lite. Each branch/commit of the VMR would then keep producing a single SDK. However, we need to make sure the shared bits are the same in each released SDK branch – we’d say the SDK branches would be coherent then. We also need to make sure that changes made to the shared components in VMR’s SDK branches are flown everywhere appropriately. + +- **Side-by-Side folders in the VMR** + The second proposed solution would be to take the inverse approach and, instead of having SDK branches, we’d organize VMR’s branches based on the shared bits (e.g. `release/9.0`) and place the different bands of the SDK components side by side in the VMR, e.g. `src/sdk/9.0.1xx`. This makes sure that the shared bits exist only once and each commit of the VMR contains all bands which are coherent. + +## Proposal comparison + +To compare the two proposals, we identified several areas which might be impacted by the selected architecture, and we’ll try to evaluate how each of the solutions affect them: + +- **Build** – what would build of a single and of multiple bands look like with regards to Source Build +- **Code flow** – what does a breaking change mean; how do we (back-)flow the code between the VMR and the individual repositories +- **Developer experience** – impact on developer lives and how they work with the VMR; their options for making changes that span multiple repositories +- **Release** – how do we compile the final Microsoft release +- **Validation** – what do we validate (build/test) and when +- **build their own SDK(s) +- **VMR size & performance** – impact of selected architecture on the git repository +- **Community, 3rd parties & upstream/downstream story** – what does it mean for partners to +- **Implementation and maintenance complexity** – risks and costs associated with the future + +### Build + +The current (Microsoft) way of building the SDKs is based on re-using previously built artifacts which come into the build as NuGet packages. The components are flown as already compiled packages. This means that when building each SDK band, we only restore the shared components which were built only once at some point in the past during the official build of their source repository. + +In .NET 9.0, when the full VMR code flow is in place (see [VMR Code and Build Workflow](./VMR-Code-And-Build-Workflow.md) for details), we’ll be building the individual repositories on more occasions: + +- During the official build of their source repository – this will use other repo’s intermediate packages whenever they depend on another repo as if they were just built from source. +- During the official build of the VMR – when we build the whole product from source. This will end up producing an intermediate package per each individual repository built as part of the whole build. + +This means that at several places, we’ll be building both the shared components and the SDK band components from source where their dependencies will be either freshly built or restored in a local NuGet cache of the build machine. + +Regardless of how this will happen, there’s no real difference whether we’d build the SDK bands from folders which are side by side in a folder of a checked-out branch or which are checkouts of different SDK branches. The build process would need to know about the existence of multiple SDK bands eventually placed in a folder “somewhere on the disk”. **This means that the selected architecture doesn’t really affect the build and we don’t need to consider it during evaluation.** There will, however, be a change to the build process needed to accommodate for the new locations of the bands. + +The various situations can be summarized as follows: +- For individual repository builds, the build process will need to know about the location of the SDK bands. This is the same for both proposals. +- For the VMR build shared components are built with the first band and put in a local NuGet cache. Other bands restore shared components from the cache (or rebuild the components over of cache is not possible). + +### Code flow + +Code flow is where the two approaches differ dramatically. The biggest difference is during breaking changes in shared components and how/when these get resolved. To re-iterate what the code flow will look like in .NET 9 time frame with full VMR back flow – the individual repositories only receive and send updates from/to the VMR and not between each other, so the situation looks like this (see [VMR Code and Build Workflow](./VMR-Code-And-Build-Workflow.md) for details): + +```mermaid +flowchart TD + VMR[VMR] + Runtime[runtime] + Roslyn[roslyn] + MSBuild[msbuild] + FSharp[fsharp] + Other[...] + + Runtime-->VMR + Roslyn-->VMR + MSBuild-->VMR + Other-->VMR + FSharp-->VMR + VMR-->Runtime + VMR-->Roslyn + VMR-->MSBuild + VMR-->Other + VMR-->FSharp +``` + +For a simple forward flow where a shared component is changed, the code flow needed to update all branches does not differ much. + +SDK branches: + +```mermaid +sequenceDiagram + autonumber + + participant runtime as dotnet/runtime
release/9.0 + participant SDK_1xx as dotnet/sdk
release/9.0.1xx + participant SDK_2xx as dotnet/sdk
release/9.0.2xx + participant VMR_1xx as VMR
release/9.0.1xx + participant VMR_2xx as VMR
release/9.0.2xx + + Note over runtime, VMR_2xx: Initial state - all changes flown
dotnet/runtime 9.0 @ RUN_1
dotnet/sdk 1xx @ SDK_1.1 (RUN_1)
dotnet/sdk 2xx @ SDK_2.1 (RUN_1)
VMR 1xx @ VMR_1.1 (SDK_1.1, RUN_1)
VMR 2xx @ VMR_2.1 (SDK_2.1, RUN_1) + + runtime->>runtime: New change ➡️ RUN_2 + + runtime->>VMR_1xx: Flow of 📄 RUN_2 ➡️ VMR_1.2 + Note over VMR_1xx: 📦 Runtime intermediate 2 is built + runtime->>VMR_2xx: Flow of 📄 RUN_2 ➡️ VMR_2.1 + Note over VMR_2xx: 📦 Runtime intermediate 3 is built + + Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have 📄 RUN_2 + + # Backflow + VMR_1xx->>SDK_1xx: Backflow of 📦 RUN_IP_2 ➡️ SDK_1.2 + SDK_1xx->>VMR_1xx: Flow of 📄 SDK_1.2 + Note over VMR_1xx: 📦 SDK 1xx intermediate is built + VMR_2xx->>SDK_2xx: Backflow of 📦 RUN_IP_3 ➡️ SDK_2.2 + SDK_2xx->>VMR_2xx: Flow of 📄 SDK_2.2 + Note over VMR_2xx: 📦 SDK 2xx intermediate is built +``` + +Side-by-side folders: + + +```mermaid +sequenceDiagram + autonumber + + participant runtime as dotnet/runtime
release/9.0 + participant SDK_1xx as dotnet/sdk
release/9.0.1xx + participant SDK_2xx as dotnet/sdk
release/9.0.2xx + participant VMR as VMR
release/9.0 + + Note over runtime, VMR: Initial state - all changes flown
dotnet/runtime 9.0 @ RUN1
dotnet/sdk 1xx @ SDK1 / RUN1
dotnet/sdk 2xx @ SDK2 / RUN1
VMR 9.0 @ VMR1 / SDK1+SDK2, RUN1 + + runtime->>runtime: Change in runtime + runtime->>VMR: Flow of 📄 RUN_2 + Note over VMR: 📦 Runtime intermediate 2 is built + VMR->>SDK_1xx: Backflow of 📦 RUN_IP_2 + SDK_1xx->>VMR: Flow of 📄 SDK_1.2 + Note over VMR: 📦 SDK 1xx intermediate is built + VMR->>SDK_2xx: Backflow of 📦 RUN_IP_2 + SDK_2xx->>VMR: Flow of 📄 SDK_1.2 + Note over VMR: 📦 SDK 2xx intermediate is built +``` + +The situation gets more interesting for breaking changes. Let’s imagine a situation where a change is needed in one of the bands that requires a breaking change in a shared component. For this, we assume that a change like this would be always made in the VMR where we can change both components at the same time. + +SDK branches: + +```mermaid +sequenceDiagram + autonumber + + participant runtime as dotnet/runtime
release/9.0 + participant SDK_1xx as dotnet/sdk
release/9.0.1xx + participant SDK_2xx as dotnet/sdk
release/9.0.2xx + participant VMR_1xx as VMR
release/9.0.1xx + participant VMR_2xx as VMR
release/9.0.2xx + + Note over runtime, VMR_2xx: Initial state - all changes flown
dotnet/runtime 9.0 @ RUN_1
dotnet/sdk 1xx @ SDK_1.1 (RUN_1)
dotnet/sdk 2xx @ SDK_2.1 (RUN_1)
VMR 1xx @ VMR_1 (SDK_1.1, RUN_1)
VMR 2xx @ VMR_2 (SDK_2.1, RUN_1) + + # Change in SDK+runtime + VMR_1xx->>VMR_1xx: Change in runtime ➡️ SDK_1.2, RUN_2 + Note over VMR_1xx: 📦 Runtime intermediate 2 is built
📦 SDK 1xx intermediate is built + + # Backflow + VMR_1xx->>runtime: Backflow of 📄 RUN_2 + VMR_1xx->>SDK_1xx: Backflow of 📄 SDK_1.2, 📦 RUN_IP_2 ➡️ SDK_1.3 + + runtime->>VMR_2xx: Flow of RUN_2 + activate VMR_2xx + Note over VMR_2xx: ❌ Requires change in 2xx + Note over VMR_2xx: 📦 Runtime intermediate 3 is built
📦 SDK 2xx intermediate is built + + deactivate VMR_2xx + + Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have 📄 RUN_2 + + VMR_2xx->>SDK_2xx: Backflow of 📄 SDK_2.2, 📦 RUN_IP_3 ➡️ SDK_2.2 + SDK_2xx->>VMR_2xx: Flow of 📄 SDK_2.2 + Note over VMR_2xx: 📦 SDK 2xx intermediate is built +``` + +Side-by-side folders: + +```mermaid +sequenceDiagram + autonumber + + participant runtime as dotnet/runtime
release/9.0 + participant SDK_1xx as dotnet/sdk
release/9.0.1xx + participant SDK_2xx as dotnet/sdk
release/9.0.2xx + participant VMR as VMR
release/9.0 + + Note over runtime, VMR: Initial state - all changes flown
dotnet/runtime 9.0 @ RUN1
dotnet/sdk 1xx @ SDK1 / RUN1
dotnet/sdk 2xx @ SDK2 / RUN1
VMR 9.0 @ VMR1 / SDK1+SDK2, RUN1 + + activate VMR + VMR->>VMR: New change of runtime + SDK 1xx + Note over VMR: ❌ PR fails - Requires change in 2xx too + Note over VMR: Fix is made immediately + Note over VMR: 📄 RUN1, SDK_1.2 and SDK_2.2
📦 Runtime intermediate 2 is built + deactivate VMR + + # Backflow + VMR->>runtime: Backflow of 📄 RUN_2 + VMR->>SDK_1xx: Backflow of 📄 SDK_1.2, 📦 RUN_IP_2 + VMR->>SDK_2xx: Backflow of 📄 SDK_2.2, 📦 RUN_IP_2 +``` + +From the above, the side-by-side solution is much more resilient to breaking changes as those need to be dealt with immediately. The VMR won’t ever get into an inconsistent state as the bands live within a single commit. Whereas in the SDK folder solution, the breaking change is created and is dealt with in a follow-up step once code flows to the branch of the other band. + +Other difference is in the number of steps in the flow to reach a coherent state. This is lower for side-by-side as incoherency is impossible from the start and the system does not need to deal with it. The number of changes needed is not that much higher though as we still need to flow changes to the same number of branches of all individual repositories that are part of the change. This does not differ much whether we flow folders from one or more branches. + +### Developer experience + +Important area to consider is how the day-to-day interactions of .NET developers with the VMR would look like. We identified the following key actions the developers are interested in: + +- **Working with sources** – working with the source files such as searching, usual investigations such as checking file history & looking for symbols, and finally code editing and building itself +- **Git operation complexity** – actions such as checking file history, diffing bands, backporting changes between bands.. +- **Git operation performance** – duration of operations such as `git status`. This area is considered separately [later in the document](#TODO_Link_to_VMR_size_and_performance). + +That said, it’s important to realize that most of the work and the VMR is the most active in the preview time where we only have one SDK band. + +It is obvious that the SDK branch proposal wins in most of these categories. It stays truer to git by using commits/branches for file versioning rather than folders with versions in their name as it is with the side-by-side layout. This works well with all kinds of tooling and workflows: + +- File history breaks with side-by-side folders once we snap the bands. +- File and symbol search might be confusing when going through almost identical side-by-side folders. +- Backporting a change between bands sounds less error prone with SDK branches as it’s just porting commits. Making a change in several bands at once can lead to omitting a change in one of the bands, harder-to-review pull requests and overall it seems to be easier to transfer changes between bands using git-native approaches. Of course it’s possible to utilize patches but once a change is up for review, making sure all bands stay in sync might be problematic. +- Diffing bands sounds easier to do with SDK branches as well as you don’t need to worry which all components are shared and which are not – diffing side-by-side folders might become tedious once we need to compare several repositories at once. + +Some points of interested are rather a matter of personal preference – is it better for a developer to make a change in one SDK branch, open a PR and then backport to other branches, or is it better to do everything at once and build/validate it together? But over all it seems that storing code based on how we work with it rather than how we release it sounds better and the SDK branches proposal seems as the superior approach in this area since it optimizes for development rather than bend the architecture/layout to how we release the product. + +### Release + +> TODO +> - Separating development and release cycle – the fact that we release several SDKs is a Microsoft problem that 3rd parties may or may not care about. We shouldn’t enforce the problems of our custom release on others through the code layout – for instance, you shouldn’t be forced to check out multiple versions of the code if you don’t care about multiple bands. Further, we shouldn’t tax the .NET team itself and subordinate how we store code to how we release it later. +> - Note: Resiliency to band explosion – keeping bands in branches seems more resilient to outer requirements such as a sudden increase in the number of bands due to Visual Studio speeding up its release cycle. + +### Validation + +By validation we mean the process of running some set of tests over a changed code. For individual repositories, there is no change compared to today. There is a difference though for changes made directly in the VMR as we need to specify what needs to be built and validated. + +It is unclear what the validation story should be when we have all SDKs in folders side-by-side and how it would impact developers. On one hand, validating a shared component change in all SDK branches adds up to more compute time as the shared components will get re-built in each branch. On the other hand, building all non-shared components always impacts every build and that might have negative impact on developer productivity. + diff --git a/Documentation/UnifiedBuild/images/sdk-branches.png b/Documentation/UnifiedBuild/images/sdk-branches.png new file mode 100644 index 0000000000000000000000000000000000000000..f32b6d99dca324776d8c60d343d15aff738a3950 GIT binary patch literal 201635 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 !P!fo_%t@)3Ke@rR67U> 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�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 literal 0 HcmV?d00001 From 6b4d4b3590994830db1e5c125f90b307bbe7a3a2 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Thu, 18 May 2023 15:59:10 +0200 Subject: [PATCH 02/47] Port second half without tables --- .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index d01f786c895..505bca88107 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -271,3 +271,75 @@ By validation we mean the process of running some set of tests over a changed co It is unclear what the validation story should be when we have all SDKs in folders side-by-side and how it would impact developers. On one hand, validating a shared component change in all SDK branches adds up to more compute time as the shared components will get re-built in each branch. On the other hand, building all non-shared components always impacts every build and that might have negative impact on developer productivity. +> TODO: Missing table + +> TODO: Diagram showing the break + +### VMR size & performance + +By size and performance we mean the implications of each proposed repository layout onto these metrics onto few key metrics that affect common operations we do with the VMR. + +#### Git repository size + +The expectation is that the size of the overall repository won’t differ much between the two proposed layouts. This is due to the mechanism of how git stores data internally. For illustration of this expectation, imagine a situation where we have two SDK bands which differ in one file only – `src/sdk/foo/bar.txt`. Let’s look at what is inside of the git object database: + +- For SDK branches, we have the two commits that describe the two branches. These are equal at first, when we freshly snap the band branches. +- For side-by-side folders, the situation isn’t much different with the two git trees for each of the band folders – `src/sdk/9.0.1xx` and `src/sdk/9.0.2xx`. These are also the same at first – only the parent tree representing the sdk folder is an object created after the snap. +- +Once we change bar.txt, we’d get a new object for the file itself and then some other: + +- For SDK branches, we have the new git trees that describe the parent folders of the changed file leading up to the root of the repository (`/` → `src` → `sdk` → `foo`). +- For side-by-side folders, the situation is again not much different – we get a new set of git trees describing the path from foo through the new `src/sdk/9.0.2xx`. + +Looking at this simple example, it hints that whatever solution we pick, the number of git objects we’ll create to capture the changes are around the same. + +#### Single SDK source tarball size + +Another interesting metric is the archive of sources needed to build a single SDK. It seems that when 3rd parties that only care about one SDK band would be downloading sources of VMR commits, the side-by-side layout incurs quite a big toll on the overall size as we’d need to download the sources of all bands always. The release process might be customized, and we could omit other bands from the tarball. + +#### Release source tarball size + +By release source tarball we mean an archive of all sources needed to build a whole release containing several SDK bands. +For side-by-side folders, this would simply equal to a VMR commit. For SDK branches, we’d have to do something about compiling the release archive as the shared components need to appear in the tarball just once. + +> TODO: It’s a question whether there would be a thing such as “tarball for the whole release with all bands” but it’s probably possible to exclude the shared components from all but one band and reach the same result with SDK folder as with SDK branches. + +#### Git operation performance + +We care about the duration of common git operation duration such as checkout or status. We also need to consider scenarios in which we use the VMR – do we care about more bands than one? + +SDK branches seem to have the innate benefit of not having to check out all the bands always. This seems like a big win for scenarios where we for instance make changes to one band only. But it goes away quite quickly once we need to build all of them and suddenly the checkout takes much longer. + +> TODO: We should figure out how often would we care about building all bands in various flows – from CI to inner dev loop. + +#### Summary of git size/performance + +From the analysis above, it seems that to declare a winner, we need to consider how often we deal with a single vs multiple bands. Both solutions are a good fit for one or the other, never both. + +> TODO: Missing table + +### Community, 3rd parties & upstream/downstream story + +There are quite big implications of how we lay the bands out in the VMR. 3rd parties consuming .NET might or might not care about building multiple bands. Overall, the fact that we even need to have different SDK bands is native to Microsoft’s rhythm and way of bundling releases. + +For SDK branches, nothing really changes in this regard as you can keep building the branch as you were doing until now and get the SDK you care about. +For side-by-side, the situation is quite different. We’re suddenly influencing everyone’s experience with the VMR by projecting how we bundle releases into the layout of the code. This has negative implications such as having to check out all the bands always which would for instance prolong all repo operations. + +> TODO: Forks and upstreaming changes differences? Some things are common for both, such as confusion about where a change should go but that’s the same for folders/branches. + +### Implementation and maintenance complexity + +- TODO: Much more work to implement side-by-side +- TODO: Resiliency to band explosion – keeping bands in branches seems more resilient to outer requirements such as a sudden increase in the number of bands due to Visual Studio speeding up its release cycle. + +### Comparison summary + +## Comparison evaluation + +Both approaches seem to have pros and cons. To choose the best approach, we should assign importance to the evaluation areas on which we were comparing these and see which approach seems better. + +When doing so, we should take into account the product lifecycle. At first, the most active busy development happens in the preview time (on main branches). Only after the release, we move into servicing and only after then we branch out and snap the bands. We expect the servicing period to last very long but with less activity. During active development, we should prioritize **developer experience** and **code flow** as that has impact on product construction. +During servicing we need the system to be as frictionless as possible so that we’re able to react to external impulses fast and release fixes fast which hints at prioritizing **code flow**, **release**, and **maintenance complexity**. Some areas should be important in both periods such as **community impact**. + +> TODO: Actually decide + From 1f37d9e233ea24cdb2617114a68b5cab6f4794fb Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Mon, 22 May 2023 13:47:36 +0200 Subject: [PATCH 03/47] Add a list of repos --- .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 505bca88107..cba45e60eb5 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -47,6 +47,40 @@ The dependency flow eventually flows all the bits into the `dotnet/installer` re The long-term plan is to transition to building and releasing using the Virtual Monolithic Repository which is a repository where each commit denotes a full set of sources needed for building .NET. The sources of this repository are synchronized from the individual repositories based on the contents of the `dotnet/installer` repository. The goal of this document is to discuss how this will be done with regards to both the different bands as well as the shared components. +### Repository types + +Below you can find the split of shared component vs SDK-specific component as it is today. + +List of repositories without SDK branches: +- `dotnet/arcade` +- `dotnet/aspnetcore` +- `dotnet/cecil` +- `dotnet/deployment-tools` +- `dotnet/emsdk` +- `dotnet/runtime` +- `dotnet/source-build-externals` +- `dotnet/source-build-reference-packages` + +List of repositories with SDK branches: +- `dotnet/command-line-api` +- `dotnet/diagnostics` +- `dotnet/format` +- `dotnet/fsharp` +- `dotnet/installer` +- `dotnet/msbuild` +- `NuGet/NuGet.Client` +- `dotnet/razor - SDK` +- `dotnet/roslyn` +- `dotnet/roslyn-analyzers` +- `dotnet/sdk` +- `dotnet/sourcelink` +- `dotnet/symreader` +- `dotnet/templating` +- `dotnet/test-templates` +- `microsoft/vstest` +- `dotnet/xdt` +- `dotnet/xliff-tasks` + ## Proposed solutions Currently, we end up with SDK branches in the `dotnet/installer` repository and the release process makes sure to package those into the final product. With releasing from the VMR, we have two ways we can approach this: @@ -246,7 +280,7 @@ Important area to consider is how the day-to-day interactions of .NET developers - **Working with sources** – working with the source files such as searching, usual investigations such as checking file history & looking for symbols, and finally code editing and building itself - **Git operation complexity** – actions such as checking file history, diffing bands, backporting changes between bands.. -- **Git operation performance** – duration of operations such as `git status`. This area is considered separately [later in the document](#TODO_Link_to_VMR_size_and_performance). +- **Git operation performance** – duration of operations such as `git status`. This area is considered separately [later in the document](#vmr-size--performance). That said, it’s important to realize that most of the work and the VMR is the most active in the preview time where we only have one SDK band. From 1fb81bdd2a9d8a1548167635ea9e7be72c423ac9 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Tue, 23 May 2023 12:57:56 +0200 Subject: [PATCH 04/47] Use mermaid for everything --- .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 138 +++++++++++++++++- .../UnifiedBuild/images/sdk-branches.png | Bin 201635 -> 0 bytes .../UnifiedBuild/images/sdk-channels.png | Bin 91887 -> 0 bytes 3 files changed, 133 insertions(+), 5 deletions(-) delete mode 100644 Documentation/UnifiedBuild/images/sdk-branches.png delete mode 100644 Documentation/UnifiedBuild/images/sdk-channels.png diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index cba45e60eb5..63b3977b6fc 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -20,10 +20,107 @@ This section presents more precise definitions of common terms used in this docu ## SDK bands -Presently, for each major .NET version (e.g., `7.0`), Microsoft not only releases new servicing versions of .NET in succession, but also multiple so-called “bands” of the .NET SDK per each servicing release. These bands differ in their feature set but also share some common parts such as the .NET runtime. -To best illustrate how this works in practice, let’s imagine the following timeline: +Presently, for each major .NET version (e.g., `7.0`), Microsoft not only releases new servicing versions of .NET in succession, but also multiple so-called “bands” of the .NET SDK per each servicing release. These bands differ in their feature set but also share some common parts such as the .NET runtime. -![Example of git history of repositories with shared components and with SDK bands](images/sdk-branches.png) +To best illustrate how this works in practice, let’s imagine the following timeline for repositories with SDK branches (e.g., `dotnet/sdk`): + +```mermaid +%%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showCommitLabel': false, 'tagLabelFontSize': '24px'}} }%% +gitGraph + commit + commit + branch release/8.0.1xx + checkout release/8.0.1xx + commit + commit type: HIGHLIGHT tag: "Release #1 - SDK 8.0.100" + commit + checkout main + commit + commit + commit + checkout release/8.0.1xx + branch release/8.0.2xx + checkout release/8.0.2xx + commit + commit + commit type: HIGHLIGHT tag: "Release #2 - SDK 8.0.205" + checkout main + commit + checkout release/8.0.1xx + commit type: HIGHLIGHT tag: "Release #2 - SDK 8.0.109" + commit + commit + checkout main + commit + checkout release/8.0.1xx + commit + commit + checkout release/8.0.2xx + commit + checkout release/8.0.1xx + commit + checkout main + commit + commit + commit + checkout release/8.0.2xx + branch release/8.0.3xx + checkout release/8.0.3xx + commit + commit + checkout release/8.0.2xx + commit type: HIGHLIGHT tag: "Release #3 - SDK 8.0.207" + checkout release/8.0.1xx + commit type: HIGHLIGHT tag: "Release #3 - SDK 8.0.111" + checkout release/8.0.3xx + commit type: HIGHLIGHT tag: "Release #3 - SDK 8.0.302" + checkout main + commit +``` + +In parallel, this would represent the state of a shared repository (e.g., `dotnet/runtime`) that is not specific to any particular SDK band: + +```mermaid +%%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showCommitLabel': false, 'tagLabelFontSize': '24px'}} }%% +gitGraph + commit + commit + branch release/8.0 + checkout release/8.0 + commit + commit type: HIGHLIGHT tag: "Release #1 - Runtime 8.0.0" + commit + checkout main + commit + commit + commit + checkout release/8.0 + commit + commit + commit type: HIGHLIGHT tag: "Release #2 - Runtime 8.0.6" + checkout main + commit + commit + commit + checkout release/8.0 + commit + commit + checkout main + commit + checkout release/8.0 + commit + commit + checkout main + commit + commit + commit + checkout release/8.0 + commit + commit + commit type: HIGHLIGHT tag: "Release #3 - Runtime 8.0.12" + checkout main + commit +``` On the image you can see timelines of branches of two different repositories – `dotnet/sdk` and `dotnet/runtime`. As noted previously, each (servicing) release of .NET contains multiple SDK bands but only one runtime. Each individual repository of each component that needs to differ per band would then have these so-called “SDK branches” named `release/Z.0.Yxx` while repositories that are shared per release have the non-SDK `release/Z.0` branches. As shown in the example, the development of the single runtime would happen in the `release/8.0` branch while the various SDK bands are stored in the following SDK branches (e.g., `release/8.0.1xx` represents the “100th band”). @@ -37,7 +134,38 @@ Once we hit each release day (denoted with red vertical lines), we take the late We call the builds of the SDK bands coherent when the versions of all shared components of each band are the same. To make sure, the bands are coherent and depend on the same version of each non-SDK component (e.g., runtime), we utilize the Maestro dependency flow channels. Non-SDK repositories publish their build products in those channels and the SDK branches consume those. Again, as an example, the following diagram shows a possible setup: -![Example of relationships of repositories with SDK dependency flow channels](images/sdk-channels.png) +```mermaid +flowchart TD + classDef Channel fill:#2487DF,stroke:#fff,stroke-width:4px,color:#fff; + + sdk[dotnet/sdk
release/7.0.3xx] + roslyn[dotnet/roslyn
release/7.0.3xx] + + runtime[dotnet/runtime
release/7.0] + aspnetcore[dotnet/aspnetcore
release/7.0] + + arcade[dotnet/arcade
release/7.0] + + channel3xx[(.NET 7.0.3xx SDK
channel)] + channel7[(.NET 7
channel)] + channel7Eng[(.NET 7 Eng
channel)] + + installer[dotnet/installer
release/7.0.3xx] + + sdk-->channel3xx + roslyn-->channel3xx + + runtime-->channel7 + aspnetcore-->channel7 + + arcade-->channel7Eng + + channel3xx-->installer + channel7-->installer + channel7Eng-->installer + + class channel3xx,channel7,channel7Eng Channel +``` This makes sure that eventually the latest version of each shared component (e.g., runtime) flows to all SDK branches which then become coherent between each other. @@ -69,7 +197,7 @@ List of repositories with SDK branches: - `dotnet/installer` - `dotnet/msbuild` - `NuGet/NuGet.Client` -- `dotnet/razor - SDK` +- `dotnet/razor` - `dotnet/roslyn` - `dotnet/roslyn-analyzers` - `dotnet/sdk` diff --git a/Documentation/UnifiedBuild/images/sdk-branches.png b/Documentation/UnifiedBuild/images/sdk-branches.png deleted file mode 100644 index f32b6d99dca324776d8c60d343d15aff738a3950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201635 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 !P!fo_%t@)3Ke@rR67U> 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�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 From 9da28b64914e8afa6885a95d2378c76bc0040949 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Tue, 23 May 2023 13:20:04 +0200 Subject: [PATCH 05/47] Port new code flow diagrams --- .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 63b3977b6fc..e5b8d798612 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -325,13 +325,11 @@ sequenceDiagram runtime->>runtime: Change in runtime runtime->>VMR: Flow of 📄 RUN_2 - Note over VMR: 📦 Runtime intermediate 2 is built - VMR->>SDK_1xx: Backflow of 📦 RUN_IP_2 - SDK_1xx->>VMR: Flow of 📄 SDK_1.2 - Note over VMR: 📦 SDK 1xx intermediate is built - VMR->>SDK_2xx: Backflow of 📦 RUN_IP_2 - SDK_2xx->>VMR: Flow of 📄 SDK_1.2 - Note over VMR: 📦 SDK 2xx intermediate is built + Note over VMR: 📦 Intermediate VMR_2 is built + VMR->>SDK_1xx: Backflow of 📦 VMR_2 + SDK_1xx-->>VMR: No-op + VMR->>SDK_2xx: Backflow of 📦 VMR_2 + SDK_2xx-->>VMR: No-op ``` The situation gets more interesting for breaking changes. Let’s imagine a situation where a change is needed in one of the bands that requires a breaking change in a shared component. For this, we assume that a change like this would be always made in the VMR where we can change both components at the same time. @@ -348,28 +346,26 @@ sequenceDiagram participant VMR_1xx as VMR
release/9.0.1xx participant VMR_2xx as VMR
release/9.0.2xx - Note over runtime, VMR_2xx: Initial state - all changes flown
dotnet/runtime 9.0 @ RUN_1
dotnet/sdk 1xx @ SDK_1.1 (RUN_1)
dotnet/sdk 2xx @ SDK_2.1 (RUN_1)
VMR 1xx @ VMR_1 (SDK_1.1, RUN_1)
VMR 2xx @ VMR_2 (SDK_2.1, RUN_1) + Note over runtime, VMR_2xx: Initial state - all changes flown
dotnet/runtime 9.0 @ RUN_1
dotnet/sdk 1xx @ SDK_1.1 (RUN_1)
dotnet/sdk 2xx @ SDK_2.1 (RUN_1)
VMR 1xx @ VMR_1.1 (SDK_1.1, RUN_1)
VMR 2xx @ VMR_2.1 (SDK_2.1, RUN_1) # Change in SDK+runtime - VMR_1xx->>VMR_1xx: Change in runtime ➡️ SDK_1.2, RUN_2 - Note over VMR_1xx: 📦 Runtime intermediate 2 is built
📦 SDK 1xx intermediate is built + runtime->>runtime: Change in runtime ➡️ RUN_2 - # Backflow - VMR_1xx->>runtime: Backflow of 📄 RUN_2 - VMR_1xx->>SDK_1xx: Backflow of 📄 SDK_1.2, 📦 RUN_IP_2 ➡️ SDK_1.3 + runtime->>VMR_1xx: 📄 PR with source change to RUN_2 is opened + activate VMR_1xx + Note over VMR_1xx: ❌ Requires a change in SDK + Note over VMR_1xx: 📦 VMR_2 intermediates are built + VMR_1xx->>SDK_1xx: Flow of 📄 SDK_2.2, 📦 VMR_2 + deactivate VMR_1xx - runtime->>VMR_2xx: Flow of RUN_2 + runtime->>VMR_2xx: 📄 PR with source change to RUN_2 is opened activate VMR_2xx - Note over VMR_2xx: ❌ Requires change in 2xx - Note over VMR_2xx: 📦 Runtime intermediate 3 is built
📦 SDK 2xx intermediate is built - + Note over VMR_2xx: ❌ Requires a change in SDK + Note over VMR_2xx: 📦 VMR_3 intermediates are built deactivate VMR_2xx + VMR_2xx->>SDK_2xx: Flow of 📄 SDK_2.2, 📦 VMR_3 - Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have 📄 RUN_2 - - VMR_2xx->>SDK_2xx: Backflow of 📄 SDK_2.2, 📦 RUN_IP_3 ➡️ SDK_2.2 - SDK_2xx->>VMR_2xx: Flow of 📄 SDK_2.2 - Note over VMR_2xx: 📦 SDK 2xx intermediate is built + Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have RUN_2 ``` Side-by-side folders: @@ -385,17 +381,21 @@ sequenceDiagram Note over runtime, VMR: Initial state - all changes flown
dotnet/runtime 9.0 @ RUN1
dotnet/sdk 1xx @ SDK1 / RUN1
dotnet/sdk 2xx @ SDK2 / RUN1
VMR 9.0 @ VMR1 / SDK1+SDK2, RUN1 + runtime->>runtime: Change in runtime ➡️ RUN_2 + + + activate SDK_2xx + runtime->>VMR: Flow of runtime activate VMR - VMR->>VMR: New change of runtime + SDK 1xx - Note over VMR: ❌ PR fails - Requires change in 2xx too + Note over VMR: ❌ Requires change
(in sdk/1xx and sdk/2xx) Note over VMR: Fix is made immediately - Note over VMR: 📄 RUN1, SDK_1.2 and SDK_2.2
📦 Runtime intermediate 2 is built + Note over VMR: 📄 RUN1, SDK_1.2 and SDK_2.2
📦 VMR_2 intermediates are built deactivate VMR - # Backflow - VMR->>runtime: Backflow of 📄 RUN_2 - VMR->>SDK_1xx: Backflow of 📄 SDK_1.2, 📦 RUN_IP_2 - VMR->>SDK_2xx: Backflow of 📄 SDK_2.2, 📦 RUN_IP_2 + VMR->>SDK_1xx: Backflow of 📄 SDK_1.2, 📦 VMR_2 + VMR->>SDK_2xx: Backflow of 📄 SDK_2.2, 📦 VMR_2 + SDK_1xx-->>VMR: No-op + SDK_2xx-->>VMR: No-op ``` From the above, the side-by-side solution is much more resilient to breaking changes as those need to be dealt with immediately. The VMR won’t ever get into an inconsistent state as the bands live within a single commit. Whereas in the SDK folder solution, the breaking change is created and is dealt with in a follow-up step once code flows to the branch of the other band. From 86f6ecb94bc1e8e3f77d18544e27986a037be220 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Tue, 23 May 2023 13:24:00 +0200 Subject: [PATCH 06/47] Add parallel sections --- .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 78 ++++++++++--------- 1 file changed, 43 insertions(+), 35 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index e5b8d798612..c622272d708 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -293,20 +293,20 @@ sequenceDiagram runtime->>runtime: New change ➡️ RUN_2 - runtime->>VMR_1xx: Flow of 📄 RUN_2 ➡️ VMR_1.2 - Note over VMR_1xx: 📦 Runtime intermediate 2 is built - runtime->>VMR_2xx: Flow of 📄 RUN_2 ➡️ VMR_2.1 - Note over VMR_2xx: 📦 Runtime intermediate 3 is built + runtime->>VMR_1xx: Flow of 📄 RUN_2 + Note over VMR_1xx: 📦 VMR_2 intermediates are built + runtime->>VMR_2xx: Flow of 📄 RUN_2 + Note over VMR_2xx: 📦 VMR_3 intermediates are built Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have 📄 RUN_2 - # Backflow - VMR_1xx->>SDK_1xx: Backflow of 📦 RUN_IP_2 ➡️ SDK_1.2 - SDK_1xx->>VMR_1xx: Flow of 📄 SDK_1.2 - Note over VMR_1xx: 📦 SDK 1xx intermediate is built - VMR_2xx->>SDK_2xx: Backflow of 📦 RUN_IP_3 ➡️ SDK_2.2 - SDK_2xx->>VMR_2xx: Flow of 📄 SDK_2.2 - Note over VMR_2xx: 📦 SDK 2xx intermediate is built + par Backflow of intermediates + VMR_1xx->>SDK_1xx: Backflow of 📦 VMR_2 ➡️ SDK_1.2 + SDK_1xx-->>VMR_1xx: No-op + and + VMR_2xx->>SDK_2xx: Backflow of 📦 VMR_3 ➡️ SDK_2.2 + SDK_2xx-->>VMR_2xx: No-op + end ``` Side-by-side folders: @@ -326,10 +326,14 @@ sequenceDiagram runtime->>runtime: Change in runtime runtime->>VMR: Flow of 📄 RUN_2 Note over VMR: 📦 Intermediate VMR_2 is built - VMR->>SDK_1xx: Backflow of 📦 VMR_2 - SDK_1xx-->>VMR: No-op - VMR->>SDK_2xx: Backflow of 📦 VMR_2 - SDK_2xx-->>VMR: No-op + + par Backflow of intermediates + VMR->>SDK_1xx: Backflow of 📦 VMR_2 + SDK_1xx-->>VMR: No-op + and + VMR->>SDK_2xx: Backflow of 📦 VMR_2 + SDK_2xx-->>VMR: No-op + end ``` The situation gets more interesting for breaking changes. Let’s imagine a situation where a change is needed in one of the bands that requires a breaking change in a shared component. For this, we assume that a change like this would be always made in the VMR where we can change both components at the same time. @@ -351,19 +355,21 @@ sequenceDiagram # Change in SDK+runtime runtime->>runtime: Change in runtime ➡️ RUN_2 - runtime->>VMR_1xx: 📄 PR with source change to RUN_2 is opened - activate VMR_1xx - Note over VMR_1xx: ❌ Requires a change in SDK - Note over VMR_1xx: 📦 VMR_2 intermediates are built - VMR_1xx->>SDK_1xx: Flow of 📄 SDK_2.2, 📦 VMR_2 - deactivate VMR_1xx - - runtime->>VMR_2xx: 📄 PR with source change to RUN_2 is opened - activate VMR_2xx - Note over VMR_2xx: ❌ Requires a change in SDK - Note over VMR_2xx: 📦 VMR_3 intermediates are built - deactivate VMR_2xx - VMR_2xx->>SDK_2xx: Flow of 📄 SDK_2.2, 📦 VMR_3 + par + runtime->>VMR_1xx: 📄 PR with source change to RUN_2 is opened + activate VMR_1xx + Note over VMR_1xx: ❌ Requires a change in SDK + Note over VMR_1xx: 📦 VMR_2 intermediates are built + VMR_1xx->>SDK_1xx: Flow of 📄 SDK_2.2, 📦 VMR_2 + deactivate VMR_1xx + and + runtime->>VMR_2xx: 📄 PR with source change to RUN_2 is opened + activate VMR_2xx + Note over VMR_2xx: ❌ Requires a change in SDK + Note over VMR_2xx: 📦 VMR_3 intermediates are built + deactivate VMR_2xx + VMR_2xx->>SDK_2xx: Flow of 📄 SDK_2.2, 📦 VMR_3 + end Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have RUN_2 ``` @@ -387,15 +393,17 @@ sequenceDiagram activate SDK_2xx runtime->>VMR: Flow of runtime activate VMR - Note over VMR: ❌ Requires change
(in sdk/1xx and sdk/2xx) - Note over VMR: Fix is made immediately - Note over VMR: 📄 RUN1, SDK_1.2 and SDK_2.2
📦 VMR_2 intermediates are built + Note over VMR: ❌ Requires change
(in sdk/1xx and sdk/2xx)
Fix is made immediately deactivate VMR + Note over VMR: 📄 RUN1, SDK_1.2 and SDK_2.2
📦 VMR_2 intermediates are built - VMR->>SDK_1xx: Backflow of 📄 SDK_1.2, 📦 VMR_2 - VMR->>SDK_2xx: Backflow of 📄 SDK_2.2, 📦 VMR_2 - SDK_1xx-->>VMR: No-op - SDK_2xx-->>VMR: No-op + par Backflow + VMR->>SDK_1xx: Backflow of 📄 SDK_1.2, 📦 VMR_2 + SDK_1xx-->>VMR: No-op + and + VMR->>SDK_2xx: Backflow of 📄 SDK_2.2, 📦 VMR_2 + SDK_2xx-->>VMR: No-op + end ``` From the above, the side-by-side solution is much more resilient to breaking changes as those need to be dealt with immediately. The VMR won’t ever get into an inconsistent state as the bands live within a single commit. Whereas in the SDK folder solution, the breaking change is created and is dealt with in a follow-up step once code flows to the branch of the other band. From f56f3471f74b11a209778eaa457cc4d260cc5d01 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Tue, 23 May 2023 13:30:42 +0200 Subject: [PATCH 07/47] Remove initial state --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index c622272d708..58c168f6a86 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -289,8 +289,6 @@ sequenceDiagram participant VMR_1xx as VMR
release/9.0.1xx participant VMR_2xx as VMR
release/9.0.2xx - Note over runtime, VMR_2xx: Initial state - all changes flown
dotnet/runtime 9.0 @ RUN_1
dotnet/sdk 1xx @ SDK_1.1 (RUN_1)
dotnet/sdk 2xx @ SDK_2.1 (RUN_1)
VMR 1xx @ VMR_1.1 (SDK_1.1, RUN_1)
VMR 2xx @ VMR_2.1 (SDK_2.1, RUN_1) - runtime->>runtime: New change ➡️ RUN_2 runtime->>VMR_1xx: Flow of 📄 RUN_2 @@ -321,8 +319,6 @@ sequenceDiagram participant SDK_2xx as dotnet/sdk
release/9.0.2xx participant VMR as VMR
release/9.0 - Note over runtime, VMR: Initial state - all changes flown
dotnet/runtime 9.0 @ RUN1
dotnet/sdk 1xx @ SDK1 / RUN1
dotnet/sdk 2xx @ SDK2 / RUN1
VMR 9.0 @ VMR1 / SDK1+SDK2, RUN1 - runtime->>runtime: Change in runtime runtime->>VMR: Flow of 📄 RUN_2 Note over VMR: 📦 Intermediate VMR_2 is built @@ -350,8 +346,6 @@ sequenceDiagram participant VMR_1xx as VMR
release/9.0.1xx participant VMR_2xx as VMR
release/9.0.2xx - Note over runtime, VMR_2xx: Initial state - all changes flown
dotnet/runtime 9.0 @ RUN_1
dotnet/sdk 1xx @ SDK_1.1 (RUN_1)
dotnet/sdk 2xx @ SDK_2.1 (RUN_1)
VMR 1xx @ VMR_1.1 (SDK_1.1, RUN_1)
VMR 2xx @ VMR_2.1 (SDK_2.1, RUN_1) - # Change in SDK+runtime runtime->>runtime: Change in runtime ➡️ RUN_2 @@ -385,8 +379,6 @@ sequenceDiagram participant SDK_2xx as dotnet/sdk
release/9.0.2xx participant VMR as VMR
release/9.0 - Note over runtime, VMR: Initial state - all changes flown
dotnet/runtime 9.0 @ RUN1
dotnet/sdk 1xx @ SDK1 / RUN1
dotnet/sdk 2xx @ SDK2 / RUN1
VMR 9.0 @ VMR1 / SDK1+SDK2, RUN1 - runtime->>runtime: Change in runtime ➡️ RUN_2 From f0b15c02913e14b786319d887cca17adc6ffc1b1 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Tue, 23 May 2023 15:13:08 +0200 Subject: [PATCH 08/47] Small fixes --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 58c168f6a86..2bf93a0f8b2 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -116,19 +116,19 @@ gitGraph commit checkout release/8.0 commit - commit commit type: HIGHLIGHT tag: "Release #3 - Runtime 8.0.12" checkout main commit + commit ``` On the image you can see timelines of branches of two different repositories – `dotnet/sdk` and `dotnet/runtime`. As noted previously, each (servicing) release of .NET contains multiple SDK bands but only one runtime. Each individual repository of each component that needs to differ per band would then have these so-called “SDK branches” named `release/Z.0.Yxx` while repositories that are shared per release have the non-SDK `release/Z.0` branches. As shown in the example, the development of the single runtime would happen in the `release/8.0` branch while the various SDK bands are stored in the following SDK branches (e.g., `release/8.0.1xx` represents the “100th band”). Once we hit each release day (denoted with red vertical lines), we take the latest commit of each of those branches (that already exist) and release those together. For the releases in the example diagram, this might be: -- Release day #1 – 8.0.0 runtime + one SDK (`8.0.100`) -- Release day #2 – 8.0.6 runtime + two SDKs (`8.0.109`, `8.0.205`) -- Release day #3 – 8.0.12 runtime + three SDKs (`8.0.111`, `8.0.207`, `8.0.302`) +- Release day #1 – `8.0.0` runtime + one SDK (`8.0.100`) +- Release day #2 – `8.0.6` runtime + two SDKs (`8.0.109`, `8.0.205`) +- Release day #3 – `8.0.12` runtime + three SDKs (`8.0.111`, `8.0.207`, `8.0.302`) ### Band coherence @@ -228,9 +228,8 @@ To compare the two proposals, we identified several areas which might be impacte - **Developer experience** – impact on developer lives and how they work with the VMR; their options for making changes that span multiple repositories - **Release** – how do we compile the final Microsoft release - **Validation** – what do we validate (build/test) and when -- **build their own SDK(s) - **VMR size & performance** – impact of selected architecture on the git repository -- **Community, 3rd parties & upstream/downstream story** – what does it mean for partners to +- **Community, 3rd parties & upstream/downstream story** – what does it mean for partners to build their own SDK(s) - **Implementation and maintenance complexity** – risks and costs associated with the future ### Build From 7dc16340d3aa82cdbd0cedd19579cbb73ad92bb8 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Wed, 24 May 2023 12:27:10 +0200 Subject: [PATCH 09/47] Describe band life cycle --- .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 297 +++++++++--------- 1 file changed, 152 insertions(+), 145 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 2bf93a0f8b2..911a9e4b331 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -20,62 +20,62 @@ This section presents more precise definitions of common terms used in this docu ## SDK bands -Presently, for each major .NET version (e.g., `7.0`), Microsoft not only releases new servicing versions of .NET in succession, but also multiple so-called “bands” of the .NET SDK per each servicing release. These bands differ in their feature set but also share some common parts such as the .NET runtime. +To align with new Visual Studio releases, .NET SDK updates sometimes include new features or new versions of components such as Roslyn or MSBuild. These new features or components may be incompatible with the versions that shipped in previous SDK updates for the same major or minor version. To differentiate such updates, the .NET SDK uses the concept of feature bands. While these bands differ in their feature set they share some common parts such as the .NET runtime. To best illustrate how this works in practice, let’s imagine the following timeline for repositories with SDK branches (e.g., `dotnet/sdk`): ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showCommitLabel': false, 'tagLabelFontSize': '24px'}} }%% gitGraph - commit - commit - branch release/8.0.1xx - checkout release/8.0.1xx - commit - commit type: HIGHLIGHT tag: "Release #1 - SDK 8.0.100" - commit - checkout main - commit - commit - commit - checkout release/8.0.1xx - branch release/8.0.2xx - checkout release/8.0.2xx - commit - commit - commit type: HIGHLIGHT tag: "Release #2 - SDK 8.0.205" - checkout main - commit - checkout release/8.0.1xx - commit type: HIGHLIGHT tag: "Release #2 - SDK 8.0.109" - commit - commit - checkout main - commit - checkout release/8.0.1xx - commit - commit - checkout release/8.0.2xx - commit - checkout release/8.0.1xx - commit - checkout main - commit - commit - commit - checkout release/8.0.2xx - branch release/8.0.3xx - checkout release/8.0.3xx - commit - commit - checkout release/8.0.2xx - commit type: HIGHLIGHT tag: "Release #3 - SDK 8.0.207" - checkout release/8.0.1xx - commit type: HIGHLIGHT tag: "Release #3 - SDK 8.0.111" - checkout release/8.0.3xx - commit type: HIGHLIGHT tag: "Release #3 - SDK 8.0.302" - checkout main - commit + commit + commit + branch release/8.0.1xx + checkout release/8.0.1xx + commit + commit type: HIGHLIGHT tag: "Release #1 – SDK 8.0.100" + commit + checkout main + commit + commit + commit + checkout release/8.0.1xx + branch release/8.0.2xx + checkout release/8.0.2xx + commit + commit + commit type: HIGHLIGHT tag: "Release #2 – SDK 8.0.205" + checkout main + commit + checkout release/8.0.1xx + commit type: HIGHLIGHT tag: "Release #2 – SDK 8.0.109" + commit + commit + checkout main + commit + checkout release/8.0.1xx + commit + commit + checkout release/8.0.2xx + commit + checkout release/8.0.1xx + commit + checkout main + commit + commit + commit + checkout release/8.0.2xx + branch release/8.0.3xx + checkout release/8.0.3xx + commit + commit + checkout release/8.0.2xx + commit type: HIGHLIGHT tag: "Release #3 – SDK 8.0.207" + checkout release/8.0.1xx + commit type: HIGHLIGHT tag: "Release #3 – SDK 8.0.111" + checkout release/8.0.3xx + commit type: HIGHLIGHT tag: "Release #3 – SDK 8.0.302" + checkout main + commit ``` In parallel, this would represent the state of a shared repository (e.g., `dotnet/runtime`) that is not specific to any particular SDK band: @@ -83,43 +83,43 @@ In parallel, this would represent the state of a shared repository (e.g., `dotne ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showCommitLabel': false, 'tagLabelFontSize': '24px'}} }%% gitGraph - commit - commit - branch release/8.0 - checkout release/8.0 - commit - commit type: HIGHLIGHT tag: "Release #1 - Runtime 8.0.0" - commit - checkout main - commit - commit - commit - checkout release/8.0 - commit - commit - commit type: HIGHLIGHT tag: "Release #2 - Runtime 8.0.6" - checkout main - commit - commit - commit - checkout release/8.0 - commit - commit - checkout main - commit - checkout release/8.0 - commit - commit - checkout main - commit - commit - commit - checkout release/8.0 - commit - commit type: HIGHLIGHT tag: "Release #3 - Runtime 8.0.12" - checkout main - commit - commit + commit + commit + branch release/8.0 + checkout release/8.0 + commit + commit type: HIGHLIGHT tag: "Release #1 – Runtime 8.0.0" + commit + checkout main + commit + commit + commit + checkout release/8.0 + commit + commit + commit type: HIGHLIGHT tag: "Release #2 – Runtime 8.0.6" + checkout main + commit + commit + commit + checkout release/8.0 + commit + commit + checkout main + commit + checkout release/8.0 + commit + commit + checkout main + commit + commit + commit + checkout release/8.0 + commit + commit type: HIGHLIGHT tag: "Release #3 – Runtime 8.0.12" + checkout main + commit + commit ``` On the image you can see timelines of branches of two different repositories – `dotnet/sdk` and `dotnet/runtime`. As noted previously, each (servicing) release of .NET contains multiple SDK bands but only one runtime. Each individual repository of each component that needs to differ per band would then have these so-called “SDK branches” named `release/Z.0.Yxx` while repositories that are shared per release have the non-SDK `release/Z.0` branches. As shown in the example, the development of the single runtime would happen in the `release/8.0` branch while the various SDK bands are stored in the following SDK branches (e.g., `release/8.0.1xx` represents the “100th band”). @@ -130,44 +130,85 @@ Once we hit each release day (denoted with red vertical lines), we take the late - Release day #2 – `8.0.6` runtime + two SDKs (`8.0.109`, `8.0.205`) - Release day #3 – `8.0.12` runtime + three SDKs (`8.0.111`, `8.0.207`, `8.0.302`) -### Band coherence +### Current code flow -We call the builds of the SDK bands coherent when the versions of all shared components of each band are the same. To make sure, the bands are coherent and depend on the same version of each non-SDK component (e.g., runtime), we utilize the Maestro dependency flow channels. Non-SDK repositories publish their build products in those channels and the SDK branches consume those. Again, as an example, the following diagram shows a possible setup: +To organize what ends up in each band and to drive the code flow between the repositories, we utilize the Maestro dependency flow, namely the Maestro channels: -```mermaid -flowchart TD - classDef Channel fill:#2487DF,stroke:#fff,stroke-width:4px,color:#fff; +- **VS-centric channels** – To better match how teams opererate, some repositories align their build outputs with the Visual Studio versions, e.g. `dotnet/roslyn`. Outputs of repositories like that would end up in a channel named based on the version of VS, e.g. `17.5`. +- **SDK band channels** – The repositories that are closer to how we organize the final release are then targeting channels named based on the band version, e.g. `.NET 7.0.3xx SDK`. +- **Shared component channels** – Lastly, repositories with shared components and tooling repositories target channels named based on the major .NET version, e.g. `.NET 7`. - sdk[dotnet/sdk
release/7.0.3xx] - roslyn[dotnet/roslyn
release/7.0.3xx] +The following diagram shows a simplified example: - runtime[dotnet/runtime
release/7.0] - aspnetcore[dotnet/aspnetcore
release/7.0] +```mermaid +flowchart TD + classDef Channel fill:#2487DF,stroke:#fff,stroke-width:1px,color:#fff; + + roslyn174[dotnet/roslyn
dev/17.4] + channel174[(VS 17.4 channel)] + channel2xx[(.NET 7.0.2xx SDK
channel)] + + subgraph Shared components + runtime[dotnet/runtime
release/7.0] + aspnetcore[dotnet/aspnetcore
release/7.0] + arcade[dotnet/arcade
release/7.0] + channel7[(.NET 7
channel)] + channel7Eng[(.NET 7 Eng
channel)] + end - arcade[dotnet/arcade
release/7.0] + roslyn175[dotnet/roslyn
dev/17.5] + channel175[(VS 17.5 channel)] + sdk3xx[dotnet/sdk
release/7.0.3xx] channel3xx[(.NET 7.0.3xx SDK
channel)] - channel7[(.NET 7
channel)] - channel7Eng[(.NET 7 Eng
channel)] - - installer[dotnet/installer
release/7.0.3xx] + sdk2xx[dotnet/sdk
release/7.0.2xx] - sdk-->channel3xx - roslyn-->channel3xx + roslyn174-->channel174 + channel174-->sdk2xx + sdk2xx-->channel2xx + channel2xx-->installer2xx runtime-->channel7 aspnetcore-->channel7 - arcade-->channel7Eng - channel3xx-->installer - channel7-->installer - channel7Eng-->installer + channel7-->installer3xx + channel7-->installer2xx + channel7Eng-->installer2xx + channel7Eng-->installer3xx + + roslyn175-->channel175 + channel175-->sdk3xx + sdk3xx-->channel3xx + channel3xx-->installer3xx - class channel3xx,channel7,channel7Eng Channel + installer2xx[dotnet/installer
release/7.0.2xx] + installer3xx[dotnet/installer
release/7.0.3xx] + + class channel174,channel175,channel2xx,channel3xx,channel7,channel7Eng Channel ``` -This makes sure that eventually the latest version of each shared component (e.g., runtime) flows to all SDK branches which then become coherent between each other. +This setup makes sure that eventually the latest version of each shared component (e.g., runtime) flows to all SDK branches which then become coherent between each other. **We call the SDK bands coherent when the versions of all shared components of each band are the same**. + +### Band lifecycle + +As described above, the band lifecycle is tightly coupled with the releases of Visual Studio. For repositories that target the VS-centric bands, the `main` branch usually targets the next VS version which is in preview. Once a version of VS is released (is GA-ed), we create a new branch named `dev/XX.Y` where `XX.Y` is the version of the released VS. The `main` branch then targets the next VS version in preview + +As an example, let's say we have the following setup: +- VS `17.1` is the latest stable version of VS and is associated with the `7.0.1xx` band. +- VS `17.2` is in preview and is associated with the `7.0.2xx` band. +- VS-centric repositories would have a `dev/17.1` branch targeting the `17.1` channel and a `main` branch targeting `17.2`. +- The `17.1` channel would then flow into the `7.0.1xx` branches and the `17.2` channel would flow into the `7.0.2xx`. +- The `7.0.1xx` branches would then flow into the `7.0.1xx` SDK channel and the `7.0.2xx` branches would flow into the `7.0.2xx` SDK channel. +- The `7.0` and `7.0 Eng` channels would collect builds of shared repositories and flow into their respective `7.0.Yxx` branches. + +For this setup, we'd say the 100th band is in **servicing** and the 200th band is in **preview**. It is important to also note that **while a band is in preview, it uses the lastly released .NET runtime** while **the servicing band revs with the `7.0` channel**. + +When we would be ready to release VS `17.2`, we'd flow the latest shared components into the 200th band branches so that it becomes coherent with the 100th band. Then we'd release the coherent bands and after we would do the following: + +- We'd create the `dev/17.2` branch in VS-centric repositories, point it to the `17.2` channel and retarget `main` to `dev/17.3`. +- We'd snap branches of SDK repositories by branching `7.0.3xx` from `7.0.4xx`. While doing that, we'd update the runtime version of `7.0.3xx` to the just released version. +- We would set up the `7.0` shared channels to start flowing into the `7.0.3xx` branches as the runtime there would start reving. ### Release process @@ -175,40 +216,6 @@ The dependency flow eventually flows all the bits into the `dotnet/installer` re The long-term plan is to transition to building and releasing using the Virtual Monolithic Repository which is a repository where each commit denotes a full set of sources needed for building .NET. The sources of this repository are synchronized from the individual repositories based on the contents of the `dotnet/installer` repository. The goal of this document is to discuss how this will be done with regards to both the different bands as well as the shared components. -### Repository types - -Below you can find the split of shared component vs SDK-specific component as it is today. - -List of repositories without SDK branches: -- `dotnet/arcade` -- `dotnet/aspnetcore` -- `dotnet/cecil` -- `dotnet/deployment-tools` -- `dotnet/emsdk` -- `dotnet/runtime` -- `dotnet/source-build-externals` -- `dotnet/source-build-reference-packages` - -List of repositories with SDK branches: -- `dotnet/command-line-api` -- `dotnet/diagnostics` -- `dotnet/format` -- `dotnet/fsharp` -- `dotnet/installer` -- `dotnet/msbuild` -- `NuGet/NuGet.Client` -- `dotnet/razor` -- `dotnet/roslyn` -- `dotnet/roslyn-analyzers` -- `dotnet/sdk` -- `dotnet/sourcelink` -- `dotnet/symreader` -- `dotnet/templating` -- `dotnet/test-templates` -- `microsoft/vstest` -- `dotnet/xdt` -- `dotnet/xliff-tasks` - ## Proposed solutions Currently, we end up with SDK branches in the `dotnet/installer` repository and the release process makes sure to package those into the final product. With releasing from the VMR, we have two ways we can approach this: @@ -423,8 +430,8 @@ Some points of interested are rather a matter of personal preference – is it b ### Release > TODO -> - Separating development and release cycle – the fact that we release several SDKs is a Microsoft problem that 3rd parties may or may not care about. We shouldn’t enforce the problems of our custom release on others through the code layout – for instance, you shouldn’t be forced to check out multiple versions of the code if you don’t care about multiple bands. Further, we shouldn’t tax the .NET team itself and subordinate how we store code to how we release it later. -> - Note: Resiliency to band explosion – keeping bands in branches seems more resilient to outer requirements such as a sudden increase in the number of bands due to Visual Studio speeding up its release cycle. +> – Separating development and release cycle – the fact that we release several SDKs is a Microsoft problem that 3rd parties may or may not care about. We shouldn’t enforce the problems of our custom release on others through the code layout – for instance, you shouldn’t be forced to check out multiple versions of the code if you don’t care about multiple bands. Further, we shouldn’t tax the .NET team itself and subordinate how we store code to how we release it later. +> – Note: Resiliency to band explosion – keeping bands in branches seems more resilient to outer requirements such as a sudden increase in the number of bands due to Visual Studio speeding up its release cycle. ### Validation From 3451a665442cbe0b88d3c498b6ba3df59d138fa9 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Wed, 24 May 2023 14:01:38 +0200 Subject: [PATCH 10/47] Import missing tables --- .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 97 ++++++++++++++++--- 1 file changed, 86 insertions(+), 11 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 911a9e4b331..a55a3251734 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -136,7 +136,7 @@ To organize what ends up in each band and to drive the code flow between the rep - **VS-centric channels** – To better match how teams opererate, some repositories align their build outputs with the Visual Studio versions, e.g. `dotnet/roslyn`. Outputs of repositories like that would end up in a channel named based on the version of VS, e.g. `17.5`. - **SDK band channels** – The repositories that are closer to how we organize the final release are then targeting channels named based on the band version, e.g. `.NET 7.0.3xx SDK`. -- **Shared component channels** – Lastly, repositories with shared components and tooling repositories target channels named based on the major .NET version, e.g. `.NET 7`. +- **Shared component channels** – Lastly, repositories with shared components and tooling repositories target channels named based on the major .NET version, e.g. `.NET 7` or `.NET 7 Eng`. The following diagram shows a simplified example: @@ -263,10 +263,10 @@ Code flow is where the two approaches differ dramatically. The biggest differenc ```mermaid flowchart TD VMR[VMR] - Runtime[runtime] - Roslyn[roslyn] - MSBuild[msbuild] - FSharp[fsharp] + Runtime[dotnet/runtime] + Roslyn[dotnet/roslyn] + MSBuild[dotnet/msbuild] + FSharp[dotnet/fsharp] Other[...] Runtime-->VMR @@ -429,8 +429,10 @@ Some points of interested are rather a matter of personal preference – is it b ### Release -> TODO -> – Separating development and release cycle – the fact that we release several SDKs is a Microsoft problem that 3rd parties may or may not care about. We shouldn’t enforce the problems of our custom release on others through the code layout – for instance, you shouldn’t be forced to check out multiple versions of the code if you don’t care about multiple bands. Further, we shouldn’t tax the .NET team itself and subordinate how we store code to how we release it later. +> TODO: Describe what putting a release together looks like - but we should describe that in each of the proposals + +> Note : Separating development and release cycle – the fact that we release several SDKs is a Microsoft problem that 3rd parties may or may not care about. We shouldn’t enforce the problems of our custom release on others through the code layout – for instance, you shouldn’t be forced to check out multiple versions of the code if you don’t care about multiple bands. Further, we shouldn’t tax the .NET team itself and subordinate how we store code to how we release it later. + > – Note: Resiliency to band explosion – keeping bands in branches seems more resilient to outer requirements such as a sudden increase in the number of bands due to Visual Studio speeding up its release cycle. ### Validation @@ -439,9 +441,30 @@ By validation we mean the process of running some set of tests over a changed co It is unclear what the validation story should be when we have all SDKs in folders side-by-side and how it would impact developers. On one hand, validating a shared component change in all SDK branches adds up to more compute time as the shared components will get re-built in each branch. On the other hand, building all non-shared components always impacts every build and that might have negative impact on developer productivity. -> TODO: Missing table + + + + + + + + + + -> TODO: Diagram showing the break + + + + + + + + + + + + +
SDK branches Side-by-Side folders
SDK-band-specific component changed
We only rebuild 1 band/branch where the change happens. Change is flown to source repo and re-validated there.We’d need to detect that we don’t need to build all bands. Change is flown to source repo and re-validated there.
Shared component changed
We only rebuild 1 band – the branch this happened. Possible breaking changes with other bands which are detected after we try to flow the change back.We’d need to detect that and build/test all bands, validating the change.
### VMR size & performance @@ -484,11 +507,52 @@ SDK branches seem to have the innate benefit of not having to check out all the From the analysis above, it seems that to declare a winner, we need to consider how often we deal with a single vs multiple bands. Both solutions are a good fit for one or the other, never both. -> TODO: Missing table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SDK branches Side-by-Side folders
Git repository size
Roughly the same overhead
Single SDK source tarball size
Each VMR commit gives us this.Release process would have to be customized and other bands omitted.
Release source tarball size
Release process would have to be customized and shared components included just once.Each VMR commit gives us this.
Git operation performance
Ideal for scenarios concerning 1 band. Worse off for multi-band scenarios.Ideal for scenarios concerning multiple bands. Worse off for single-band scenarios.
### Community, 3rd parties & upstream/downstream story -There are quite big implications of how we lay the bands out in the VMR. 3rd parties consuming .NET might or might not care about building multiple bands. Overall, the fact that we even need to have different SDK bands is native to Microsoft’s rhythm and way of bundling releases. +There are quite big implications of how we lay the bands out in the VMR on the outside world. 3rd parties consuming .NET might or might not care about building multiple bands. Overall, the fact that we even need to have different SDK bands is native to Microsoft’s rhythm and way of bundling releases. For SDK branches, nothing really changes in this regard as you can keep building the branch as you were doing until now and get the SDK you care about. For side-by-side, the situation is quite different. We’re suddenly influencing everyone’s experience with the VMR by projecting how we bundle releases into the layout of the code. This has negative implications such as having to check out all the bands always which would for instance prolong all repo operations. @@ -502,6 +566,17 @@ For side-by-side, the situation is quite different. We’re suddenly influencing ### Comparison summary +| Comparison area | What comes out on top | +|-------------------------------------------------------------|:---------------------------:| +| Build | Does not matter | +| Code flow | Side-by-side folders | +| Developer experience | SDK branches | +| Release | ? | +| Validation | ? | +| VMR size & performance | SDK branches | +| Community, 3rd parties & upstream/downstream story | SDK branches | +| Implementation and maintenance complexity | SDK branches | + ## Comparison evaluation Both approaches seem to have pros and cons. To choose the best approach, we should assign importance to the evaluation areas on which we were comparing these and see which approach seems better. From 3855bbeb78d5d502656a5a88fbd160eb6dd582e2 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Wed, 24 May 2023 14:29:10 +0200 Subject: [PATCH 11/47] Add proposal docs --- .../VMR-Managing-SDK-Bands-SDK-branches.md | 38 ++++++++++++++++++ ...Managing-SDK-Bands-Side-by-Side-folders.md | 39 +++++++++++++++++++ .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 9 ++--- 3 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md create mode 100644 Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md new file mode 100644 index 00000000000..92de18a3230 --- /dev/null +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md @@ -0,0 +1,38 @@ +> Note: This is a proposal for a strategy to build, manage and release multiple SDK bands of .NET. The proposal is part of the [Unified Build](./README.md) effort. For more context about the problem this design is trying to solve see the [Managing SDK Bands](./VMR-Managing-SDK-Bands.md) document. + +# Managing SDK Bands - "SDK branches" proposal + +This proposal is probably the most obvious solution that comes to mind considering where we are today. The bottom line is that we'd just keep using SDK branches in the VMR the same way we have them today. This is, in fact, what we’re currently already doing with today’s read-only VMR-lite where we synchronize the SDK branches of `dotnet/installer`. + +This document describes the end-to-end process from developing to shipping multiple SDK bands using this model. + +## Layout + +For simplicity, let's consider we are synchronizing the repositories `dotnet/arcade`, `dotnet/runtime`, `dotnet/roslyn` and `dotnet/sdk` where `dotnet/runtime` and `dotnet/arcade` are the shared components. + +The layout of files stays the same as today's VMR-lite: + +``` +/ +└── src + ├── arcade + ├── roslyn + ├── runtime + └── sdk +``` + +The layout has the following characteristics: +- Each repository is a folder under `src/` in the VMR. +- VMR has SDK branches, e.g. `release/9.0.1xx` and `release/9.0.2xx`. +- Each branch has a full copy of all repositories, even shared ones. +- Each commit of the VMR produces a single runtime and single SDK. + +## Code flow + +## Build + +## Band snap + +## Release + +> TODO - note: However, we need to make sure the shared bits are the same in each released SDK branch – we’d say the SDK branches would be coherent then. We also need to make sure that changes made to the shared components in VMR’s SDK branches are flown everywhere appropriately. diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md new file mode 100644 index 00000000000..24d0e633b89 --- /dev/null +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md @@ -0,0 +1,39 @@ +> Note: This is a proposal for a strategy to build, manage and release multiple SDK bands of .NET. The proposal is part of the [Unified Build](./README.md) effort. For more context about the problem this design is trying to solve see the [Managing SDK Bands](./VMR-Managing-SDK-Bands.md) document. + +# Managing SDK Bands - "Side by Side folders" proposal + +This proposed solution would be to take the inverse approach and, instead of having SDK branches in the VMR, we’d organize the branches based on the shared bits (e.g. `release/9.0`). We would then place the band specific components side-by-side in folders. + +This document describes the end-to-end process from developing to shipping multiple SDK bands using this model. + +## Layout + +For simplicity, let's consider we are synchronizing the repositories `dotnet/arcade`, `dotnet/runtime`, `dotnet/roslyn` and `dotnet/sdk` where `dotnet/runtime` and `dotnet/arcade` are the shared components. + +Layout of files in the VMR would be as follows: + +``` +/ +└── src + ├── roslyn + ├── sdk + └── shared + ├── arcade + └── runtime +``` + +The layout has the following characteristics: + +- Each repository is a folder either under `src/` or `src/shared/` in the VMR. +- VMR has branches for each major .NET version, e.g. `release/9.0`. +- Each commit of the VMR contains code for all SDK bands with shared components having a single copy. + +> TODO: ❓❓❓ What does a single band VMR look like? Single band VMR is in the `main` where we develop preview version of .NET. + +## Code flow + +## Build + +## Band snap + +## Release \ No newline at end of file diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index a55a3251734..4b59b4cfc36 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -146,6 +146,7 @@ flowchart TD roslyn174[dotnet/roslyn
dev/17.4] channel174[(VS 17.4 channel)] + sdk2xx[dotnet/sdk
release/7.0.2xx] channel2xx[(.NET 7.0.2xx SDK
channel)] subgraph Shared components @@ -159,9 +160,7 @@ flowchart TD roslyn175[dotnet/roslyn
dev/17.5] channel175[(VS 17.5 channel)] sdk3xx[dotnet/sdk
release/7.0.3xx] - channel3xx[(.NET 7.0.3xx SDK
channel)] - sdk2xx[dotnet/sdk
release/7.0.2xx] roslyn174-->channel174 channel174-->sdk2xx @@ -220,10 +219,10 @@ The long-term plan is to transition to building and releasing using the Virtual Currently, we end up with SDK branches in the `dotnet/installer` repository and the release process makes sure to package those into the final product. With releasing from the VMR, we have two ways we can approach this: -- **SDK branches** - The first obvious solution that comes to mind is to just synchronize the existing SDK branches of `dotnet/installer` into matching branches of the VMR. This is, in fact, what we’re currently already doing with today’s read-only VMR-lite. Each branch/commit of the VMR would then keep producing a single SDK. However, we need to make sure the shared bits are the same in each released SDK branch – we’d say the SDK branches would be coherent then. We also need to make sure that changes made to the shared components in VMR’s SDK branches are flown everywhere appropriately. +- **SDK branches** - [📄 Detailed description of the proposal](./VMR-Managing-SDK-Bands-SDK-branches.md) + The first obvious solution that comes to mind considering where we are today. The bottom line is that we'd just keep using SDK branches in the VMR the same way we have them today. This is, in fact, what we’re currently already doing with today’s read-only VMR-lite where we synchronize the SDK branches of `dotnet/installer`. Each branch/commit of the VMR would then keep producing a single SDK. Each branch/commit of the VMR would then keep producing a single SDK. However, we need to make sure the shared bits are the same in each released SDK branch – we’d say the SDK branches would be coherent then. We also need to make sure that changes made to the shared components in VMR’s SDK branches are flown everywhere appropriately. -- **Side-by-Side folders in the VMR** +- **Side-by-Side folders in the VMR** - [📄 Detailed description of the proposal](./VMR-Managing-SDK-Bands-Side-by-Side-folders.md) The second proposed solution would be to take the inverse approach and, instead of having SDK branches, we’d organize VMR’s branches based on the shared bits (e.g. `release/9.0`) and place the different bands of the SDK components side by side in the VMR, e.g. `src/sdk/9.0.1xx`. This makes sure that the shared bits exist only once and each commit of the VMR contains all bands which are coherent. ## Proposal comparison From 902260756e18139a85e8011dd63abdb608c9e9be Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Wed, 24 May 2023 16:49:32 +0200 Subject: [PATCH 12/47] Add Maestro flow changes --- .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 59 +++++++++++-------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 4b59b4cfc36..5d4fc1c8013 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -17,6 +17,7 @@ This section presents more precise definitions of common terms used in this docu - **SDK branch** – A git branch related to a specific SDK band, e.g. `release/8.0.1xx`. - **Non-SDK branch** – A git branch common for all associated SDK bands, e.g. `release/8.0`. - **Intermediate packages** – Packaged build produces of each of the individual repositories either built in their source repos or during the subsequent build of each individual repository component within the VMR. These are used during package flow between the VMR and the individual repositories. +- **Maestro** - a service used by the .NET team to manage dependency flow between repositories. ## SDK bands @@ -132,7 +133,7 @@ Once we hit each release day (denoted with red vertical lines), we take the late ### Current code flow -To organize what ends up in each band and to drive the code flow between the repositories, we utilize the Maestro dependency flow, namely the Maestro channels: +To organize what ends up in each band and to drive the code flow between the repositories, we utilize the Maestro dependency flow, namely the Maestro channels (see [Channels, Branches and Subscriptions](../BranchesChannelsAndSubscriptions.md for details): - **VS-centric channels** – To better match how teams opererate, some repositories align their build outputs with the Visual Studio versions, e.g. `dotnet/roslyn`. Outputs of repositories like that would end up in a channel named based on the version of VS, e.g. `17.5`. - **SDK band channels** – The repositories that are closer to how we organize the final release are then targeting channels named based on the band version, e.g. `.NET 7.0.3xx SDK`. @@ -187,7 +188,9 @@ flowchart TD class channel174,channel175,channel2xx,channel3xx,channel7,channel7Eng Channel ``` -This setup makes sure that eventually the latest version of each shared component (e.g., runtime) flows to all SDK branches which then become coherent between each other. **We call the SDK bands coherent when the versions of all shared components of each band are the same**. +

*Note: Dependencies of roslyn and sdk on tooling repositories were left out for simplicity
+ +This setup makes sure that the latest version of each shared component (e.g., runtime) eventually flows to all SDK branches which then become coherent between each other. **We call the SDK bands coherent when the versions of all shared components of each band are the same**. ### Band lifecycle @@ -209,6 +212,35 @@ When we would be ready to release VS `17.2`, we'd flow the latest shared compone - We'd snap branches of SDK repositories by branching `7.0.3xx` from `7.0.4xx`. While doing that, we'd update the runtime version of `7.0.3xx` to the just released version. - We would set up the `7.0` shared channels to start flowing into the `7.0.3xx` branches as the runtime there would start reving. +### Full code backflow and Maestro + +Currently, the [VMR is synchronized](./VMR-Design-And-Operation.md#source-synchronization-process) based on the `dotnet/installer` repository mapping its commits 1:1 with `dotnet/installer`. This will have to change once we switch over to the full code backflow model. + +To re-iterate what the planned code flow looks like for .NET 9 (with full VMR back flow) – the individual repositories only receive and send updates from/to the VMR and not between each other, so the situation looks like this (see [VMR Code and Build Workflow](./VMR-Code-And-Build-Workflow.md) for details): + +```mermaid +flowchart TD + VMR[VMR] + arcade[dotnet/arcade] + runtime[dotnet/runtime] + roslyn[dotnet/roslyn] + sdk[dotnet/sdk] + other[...] + + arcade-->VMR + runtime-->VMR + roslyn-->VMR + sdk-->VMR + other-->VMR + VMR-->arcade + VMR-->runtime + VMR-->roslyn + VMR-->sdk + VMR-->other +``` + +The updates of the VMR will no longer happen when `dotnet/installer` is updated but rather whenever a new build appears in one of the channels. The information making the builds of the `dev/17.4` branch of `dotnet/roslyn` end up in the `7.0.3xx` SDK band is stored in the configuration of Maestro subscriptions between those branches. The Maestro service will have to follow this configuration and update the corresponding sources (the right folder of the right branch) of the VMR accordingly. It will also have to flow changes the other way too when a change is made in the VMR or when VMR produces a new intermediate package. **This is all new functionality that Maestro will have to implement.** That being said, both proposed solutions seem orthogonal to this and the impact on the Maestro changes needed should be minimal. + ### Release process The dependency flow eventually flows all the bits into the `dotnet/installer` repository which also uses the SDK branching. Each of those branches then produces an official build – so one build per band – and we release those. The exact process is that a dedicated person selects all the right official builds which are coherent on the shared bits (so each has the same of the runtime for instance) and inputs the IDs of these builds into the staging pipeline called `Stage-DotNet`. **During this process, it is important for the MSFT build that the shared bits are only built once officially and then re-used in the respective band builds.** @@ -257,28 +289,7 @@ The various situations can be summarized as follows: ### Code flow -Code flow is where the two approaches differ dramatically. The biggest difference is during breaking changes in shared components and how/when these get resolved. To re-iterate what the code flow will look like in .NET 9 time frame with full VMR back flow – the individual repositories only receive and send updates from/to the VMR and not between each other, so the situation looks like this (see [VMR Code and Build Workflow](./VMR-Code-And-Build-Workflow.md) for details): - -```mermaid -flowchart TD - VMR[VMR] - Runtime[dotnet/runtime] - Roslyn[dotnet/roslyn] - MSBuild[dotnet/msbuild] - FSharp[dotnet/fsharp] - Other[...] - - Runtime-->VMR - Roslyn-->VMR - MSBuild-->VMR - Other-->VMR - FSharp-->VMR - VMR-->Runtime - VMR-->Roslyn - VMR-->MSBuild - VMR-->Other - VMR-->FSharp -``` +Code flow is where the two approaches differ dramatically. The biggest difference is during breaking changes in shared components and how/when these get resolved. For a simple forward flow where a shared component is changed, the code flow needed to update all branches does not differ much. From 21b6d3567634e39c1a82147af97c6ec1506fd20b Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Wed, 24 May 2023 17:01:42 +0200 Subject: [PATCH 13/47] Fix a note --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 5d4fc1c8013..91fef929165 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -139,7 +139,7 @@ To organize what ends up in each band and to drive the code flow between the rep - **SDK band channels** – The repositories that are closer to how we organize the final release are then targeting channels named based on the band version, e.g. `.NET 7.0.3xx SDK`. - **Shared component channels** – Lastly, repositories with shared components and tooling repositories target channels named based on the major .NET version, e.g. `.NET 7` or `.NET 7 Eng`. -The following diagram shows a simplified example: +The following diagram shows a simplified example (some relationships are left out for brevity such as tooling leading to all repositories): ```mermaid flowchart TD @@ -188,8 +188,6 @@ flowchart TD class channel174,channel175,channel2xx,channel3xx,channel7,channel7Eng Channel ``` -
*Note: Dependencies of roslyn and sdk on tooling repositories were left out for simplicity
- This setup makes sure that the latest version of each shared component (e.g., runtime) eventually flows to all SDK branches which then become coherent between each other. **We call the SDK bands coherent when the versions of all shared components of each band are the same**. ### Band lifecycle From 82fd9c96f92213b3cdc5e1c15b767bb01ea64bab Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Thu, 25 May 2023 11:03:50 +0200 Subject: [PATCH 14/47] Move code flow diagrams --- .../VMR-Managing-SDK-Bands-SDK-branches.md | 63 +++++++++ ...Managing-SDK-Bands-Side-by-Side-folders.md | 67 +++++++++ .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 127 +----------------- 3 files changed, 132 insertions(+), 125 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md index 92de18a3230..ae0d547dc7f 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md @@ -29,6 +29,69 @@ The layout has the following characteristics: ## Code flow +To re-iterate what the planned code flow looks like for .NET 9 (with full VMR back flow) – the individual repositories only receive and send updates from/to the VMR and not between each other. A regular forward flow with changes going to the VMR only would look like this: + +```mermaid +sequenceDiagram + autonumber + + participant runtime as dotnet/runtime
release/9.0 + participant SDK_1xx as dotnet/sdk
release/9.0.1xx + participant SDK_2xx as dotnet/sdk
release/9.0.2xx + participant VMR_1xx as VMR
release/9.0.1xx + participant VMR_2xx as VMR
release/9.0.2xx + + runtime->>runtime: New change ➡️ RUN_2 + + runtime->>VMR_1xx: Flow of 📄 RUN_2 + Note over VMR_1xx: 📦 VMR_2 intermediates are built + runtime->>VMR_2xx: Flow of 📄 RUN_2 + Note over VMR_2xx: 📦 VMR_3 intermediates are built + + Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have 📄 RUN_2 + + par Backflow of intermediates + VMR_1xx->>SDK_1xx: Backflow of 📦 VMR_2 ➡️ SDK_1.2 + SDK_1xx-->>VMR_1xx: No-op + and + VMR_2xx->>SDK_2xx: Backflow of 📦 VMR_3 ➡️ SDK_2.2 + SDK_2xx-->>VMR_2xx: No-op + end +``` + +The situation gets more interesting for breaking changes. Let’s imagine a situation where a change is needed in one of the bands that requires a breaking change in a shared component. For this, we assume that a change like this would be always made in the VMR where we can change both components at the same time: + +```mermaid +sequenceDiagram + autonumber + + participant runtime as dotnet/runtime
release/9.0 + participant SDK_1xx as dotnet/sdk
release/9.0.1xx + participant SDK_2xx as dotnet/sdk
release/9.0.2xx + participant VMR_1xx as VMR
release/9.0.1xx + participant VMR_2xx as VMR
release/9.0.2xx + + runtime->>runtime: Change in runtime ➡️ RUN_2 + + par + runtime->>VMR_1xx: 📄 PR with source change to RUN_2 is opened + activate VMR_1xx + Note over VMR_1xx: ❌ Requires a change in SDK + Note over VMR_1xx: 📦 VMR_2 intermediates are built + VMR_1xx->>SDK_1xx: Flow of 📄 SDK_2.2, 📦 VMR_2 + deactivate VMR_1xx + and + runtime->>VMR_2xx: 📄 PR with source change to RUN_2 is opened + activate VMR_2xx + Note over VMR_2xx: ❌ Requires a change in SDK + Note over VMR_2xx: 📦 VMR_3 intermediates are built + deactivate VMR_2xx + VMR_2xx->>SDK_2xx: Flow of 📄 SDK_2.2, 📦 VMR_3 + end + + Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have RUN_2 +``` + ## Build ## Band snap diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md index 24d0e633b89..1de99798d0f 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md @@ -22,6 +22,19 @@ Layout of files in the VMR would be as follows: └── runtime ``` +There could be variations such as + +``` +/ +├── sdk +│ ├── roslyn +│ └── sdk +└── shared + ├── arcade + └── runtime +``` + +and it's more a matter of taste and up for discussion but it won't have as much of an impact down the line. The layout has the following characteristics: - Each repository is a folder either under `src/` or `src/shared/` in the VMR. @@ -32,6 +45,60 @@ The layout has the following characteristics: ## Code flow +To re-iterate what the planned code flow looks like for .NET 9 (with full VMR back flow) – the individual repositories only receive and send updates from/to the VMR and not between each other. A regular forward flow with changes going to the VMR only would look like this: + +```mermaid +sequenceDiagram + autonumber + + participant runtime as dotnet/runtime
release/9.0 + participant SDK_1xx as dotnet/sdk
release/9.0.1xx + participant SDK_2xx as dotnet/sdk
release/9.0.2xx + participant VMR as VMR
release/9.0 + + runtime->>runtime: Change in runtime + runtime->>VMR: Flow of 📄 RUN_2 + Note over VMR: 📦 Intermediate VMR_2 is built + + par Backflow of intermediates + VMR->>SDK_1xx: Backflow of 📦 VMR_2 + SDK_1xx-->>VMR: No-op + and + VMR->>SDK_2xx: Backflow of 📦 VMR_2 + SDK_2xx-->>VMR: No-op + end +``` + +The situation gets more interesting for breaking changes. Let’s imagine a situation where a change is needed in one of the bands that requires a breaking change in a shared component. For this, we assume that a change like this would be always made in the VMR where we can change both components at the same time: + +```mermaid +sequenceDiagram + autonumber + + participant runtime as dotnet/runtime
release/9.0 + participant SDK_1xx as dotnet/sdk
release/9.0.1xx + participant SDK_2xx as dotnet/sdk
release/9.0.2xx + participant VMR as VMR
release/9.0 + + runtime->>runtime: Change in runtime ➡️ RUN_2 + + + activate SDK_2xx + runtime->>VMR: Flow of runtime + activate VMR + Note over VMR: ❌ Requires change
(in sdk/1xx and sdk/2xx)
Fix is made immediately + deactivate VMR + Note over VMR: 📄 RUN1, SDK_1.2 and SDK_2.2
📦 VMR_2 intermediates are built + + par Backflow + VMR->>SDK_1xx: Backflow of 📄 SDK_1.2, 📦 VMR_2 + SDK_1xx-->>VMR: No-op + and + VMR->>SDK_2xx: Backflow of 📄 SDK_2.2, 📦 VMR_2 + SDK_2xx-->>VMR: No-op + end +``` + ## Build ## Band snap diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 91fef929165..764893668ea 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -287,132 +287,9 @@ The various situations can be summarized as follows: ### Code flow -Code flow is where the two approaches differ dramatically. The biggest difference is during breaking changes in shared components and how/when these get resolved. +Code flow is where the two approaches differ dramatically. The biggest difference is during breaking changes in shared components and how/when these get resolved. For a simple forward flow where a shared component is changed, the code flow needed to update all branches does not differ much as shown in the detailed designs of each of the proposals. -For a simple forward flow where a shared component is changed, the code flow needed to update all branches does not differ much. - -SDK branches: - -```mermaid -sequenceDiagram - autonumber - - participant runtime as dotnet/runtime
release/9.0 - participant SDK_1xx as dotnet/sdk
release/9.0.1xx - participant SDK_2xx as dotnet/sdk
release/9.0.2xx - participant VMR_1xx as VMR
release/9.0.1xx - participant VMR_2xx as VMR
release/9.0.2xx - - runtime->>runtime: New change ➡️ RUN_2 - - runtime->>VMR_1xx: Flow of 📄 RUN_2 - Note over VMR_1xx: 📦 VMR_2 intermediates are built - runtime->>VMR_2xx: Flow of 📄 RUN_2 - Note over VMR_2xx: 📦 VMR_3 intermediates are built - - Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have 📄 RUN_2 - - par Backflow of intermediates - VMR_1xx->>SDK_1xx: Backflow of 📦 VMR_2 ➡️ SDK_1.2 - SDK_1xx-->>VMR_1xx: No-op - and - VMR_2xx->>SDK_2xx: Backflow of 📦 VMR_3 ➡️ SDK_2.2 - SDK_2xx-->>VMR_2xx: No-op - end -``` - -Side-by-side folders: - - -```mermaid -sequenceDiagram - autonumber - - participant runtime as dotnet/runtime
release/9.0 - participant SDK_1xx as dotnet/sdk
release/9.0.1xx - participant SDK_2xx as dotnet/sdk
release/9.0.2xx - participant VMR as VMR
release/9.0 - - runtime->>runtime: Change in runtime - runtime->>VMR: Flow of 📄 RUN_2 - Note over VMR: 📦 Intermediate VMR_2 is built - - par Backflow of intermediates - VMR->>SDK_1xx: Backflow of 📦 VMR_2 - SDK_1xx-->>VMR: No-op - and - VMR->>SDK_2xx: Backflow of 📦 VMR_2 - SDK_2xx-->>VMR: No-op - end -``` - -The situation gets more interesting for breaking changes. Let’s imagine a situation where a change is needed in one of the bands that requires a breaking change in a shared component. For this, we assume that a change like this would be always made in the VMR where we can change both components at the same time. - -SDK branches: - -```mermaid -sequenceDiagram - autonumber - - participant runtime as dotnet/runtime
release/9.0 - participant SDK_1xx as dotnet/sdk
release/9.0.1xx - participant SDK_2xx as dotnet/sdk
release/9.0.2xx - participant VMR_1xx as VMR
release/9.0.1xx - participant VMR_2xx as VMR
release/9.0.2xx - - # Change in SDK+runtime - runtime->>runtime: Change in runtime ➡️ RUN_2 - - par - runtime->>VMR_1xx: 📄 PR with source change to RUN_2 is opened - activate VMR_1xx - Note over VMR_1xx: ❌ Requires a change in SDK - Note over VMR_1xx: 📦 VMR_2 intermediates are built - VMR_1xx->>SDK_1xx: Flow of 📄 SDK_2.2, 📦 VMR_2 - deactivate VMR_1xx - and - runtime->>VMR_2xx: 📄 PR with source change to RUN_2 is opened - activate VMR_2xx - Note over VMR_2xx: ❌ Requires a change in SDK - Note over VMR_2xx: 📦 VMR_3 intermediates are built - deactivate VMR_2xx - VMR_2xx->>SDK_2xx: Flow of 📄 SDK_2.2, 📦 VMR_3 - end - - Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have RUN_2 -``` - -Side-by-side folders: - -```mermaid -sequenceDiagram - autonumber - - participant runtime as dotnet/runtime
release/9.0 - participant SDK_1xx as dotnet/sdk
release/9.0.1xx - participant SDK_2xx as dotnet/sdk
release/9.0.2xx - participant VMR as VMR
release/9.0 - - runtime->>runtime: Change in runtime ➡️ RUN_2 - - - activate SDK_2xx - runtime->>VMR: Flow of runtime - activate VMR - Note over VMR: ❌ Requires change
(in sdk/1xx and sdk/2xx)
Fix is made immediately - deactivate VMR - Note over VMR: 📄 RUN1, SDK_1.2 and SDK_2.2
📦 VMR_2 intermediates are built - - par Backflow - VMR->>SDK_1xx: Backflow of 📄 SDK_1.2, 📦 VMR_2 - SDK_1xx-->>VMR: No-op - and - VMR->>SDK_2xx: Backflow of 📄 SDK_2.2, 📦 VMR_2 - SDK_2xx-->>VMR: No-op - end -``` - -From the above, the side-by-side solution is much more resilient to breaking changes as those need to be dealt with immediately. The VMR won’t ever get into an inconsistent state as the bands live within a single commit. Whereas in the SDK folder solution, the breaking change is created and is dealt with in a follow-up step once code flows to the branch of the other band. +The situation gets more interesting for breaking changes. where the side-by-side solution shows much more resiliency to breaking changes as those need to be dealt with immediately when we do the initial change. The VMR won’t ever get into an inconsistent state as the bands live within a single commit. Whereas in the SDK folder solution, the breaking change is created and is dealt with in a follow-up step once code flows to the branch of the other band. Other difference is in the number of steps in the flow to reach a coherent state. This is lower for side-by-side as incoherency is impossible from the start and the system does not need to deal with it. The number of changes needed is not that much higher though as we still need to flow changes to the same number of branches of all individual repositories that are part of the change. This does not differ much whether we flow folders from one or more branches. From 2cc97187b6afddda90b672216fe2897d89cfa923 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Thu, 25 May 2023 13:40:15 +0200 Subject: [PATCH 15/47] Add comments for code flow diagrams --- .../VMR-Managing-SDK-Bands-SDK-branches.md | 31 +++++++++++++------ ...Managing-SDK-Bands-Side-by-Side-folders.md | 24 ++++++++++---- .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 5 +-- 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md index ae0d547dc7f..8f52537fdc5 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md @@ -50,7 +50,7 @@ sequenceDiagram Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have 📄 RUN_2 - par Backflow of intermediates + par Parallel backflow of intermediates VMR_1xx->>SDK_1xx: Backflow of 📦 VMR_2 ➡️ SDK_1.2 SDK_1xx-->>VMR_1xx: No-op and @@ -59,7 +59,7 @@ sequenceDiagram end ``` -The situation gets more interesting for breaking changes. Let’s imagine a situation where a change is needed in one of the bands that requires a breaking change in a shared component. For this, we assume that a change like this would be always made in the VMR where we can change both components at the same time: +The situation gets more interesting for breaking changes. Let’s imagine a situation where a change is needed in one of the bands that requires a breaking change in a shared component: ```mermaid sequenceDiagram @@ -73,25 +73,38 @@ sequenceDiagram runtime->>runtime: Change in runtime ➡️ RUN_2 - par - runtime->>VMR_1xx: 📄 PR with source change to RUN_2 is opened + par Parallel backflow + runtime->>VMR_1xx: PR with source change to 📄 RUN_2 is opened activate VMR_1xx Note over VMR_1xx: ❌ Requires a change in SDK - Note over VMR_1xx: 📦 VMR_2 intermediates are built - VMR_1xx->>SDK_1xx: Flow of 📄 SDK_2.2, 📦 VMR_2 + VMR_1xx->>VMR_1xx: Change is made to sdk, creating 📄 SDK_1.2 deactivate VMR_1xx + Note over VMR_1xx: 📦 VMR_2 intermediates are built + VMR_1xx->>SDK_1xx: Flow of 📄 SDK_1.2, 📦 VMR_2 and - runtime->>VMR_2xx: 📄 PR with source change to RUN_2 is opened + runtime->>VMR_2xx: PR with source change to 📄 RUN_2 is opened activate VMR_2xx Note over VMR_2xx: ❌ Requires a change in SDK - Note over VMR_2xx: 📦 VMR_3 intermediates are built + VMR_2xx->>VMR_2xx: Change is made to sdk, creating 📄 SDK_2.2 deactivate VMR_2xx + Note over VMR_2xx: 📦 VMR_3 intermediates are built VMR_2xx->>SDK_2xx: Flow of 📄 SDK_2.2, 📦 VMR_3 end - Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have RUN_2 + Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have 📄 RUN_2 ``` +The diagram shows: + +1. A change was made in `dotnet/runtime`. This starts steps `2.` and `5.` in parallel. +2. The change is flown in parallel to the VMR SDK branch where a PR with the source change is opened. +3. The PR build fails and more changes are needed under the `src/sdk` folder. PR is merged. + Official VMR build publishes intermediate packages for each repository. +4. New sources of the `1xx` band, together with the we new runtime intermediate package are flown back to `dotnet/sdk`. +5. Same as steps `3.`-`6.` but for the other SDK band. + +After the last step, both SDK branches have the same sources of `dotnet/runtime` which means they're coherent. + ## Build ## Band snap diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md index 1de99798d0f..604d38a1f52 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md @@ -41,7 +41,7 @@ The layout has the following characteristics: - VMR has branches for each major .NET version, e.g. `release/9.0`. - Each commit of the VMR contains code for all SDK bands with shared components having a single copy. -> TODO: ❓❓❓ What does a single band VMR look like? Single band VMR is in the `main` where we develop preview version of .NET. +> TODO: ❓❓❓ What does a single band preview-time VMR look like? Single band VMR is in the `main` where we develop preview version of .NET. ## Code flow @@ -60,7 +60,7 @@ sequenceDiagram runtime->>VMR: Flow of 📄 RUN_2 Note over VMR: 📦 Intermediate VMR_2 is built - par Backflow of intermediates + par Parallel backflow of intermediates VMR->>SDK_1xx: Backflow of 📦 VMR_2 SDK_1xx-->>VMR: No-op and @@ -87,18 +87,30 @@ sequenceDiagram runtime->>VMR: Flow of runtime activate VMR Note over VMR: ❌ Requires change
(in sdk/1xx and sdk/2xx)
Fix is made immediately + VMR->>VMR: Change is made to sdk, creating 📄 SDK_1.2, SDK_2.2 deactivate VMR - Note over VMR: 📄 RUN1, SDK_1.2 and SDK_2.2
📦 VMR_2 intermediates are built - par Backflow + Note over VMR: 📦 VMR_2 intermediates are built + + par Parallel backflow VMR->>SDK_1xx: Backflow of 📄 SDK_1.2, 📦 VMR_2 - SDK_1xx-->>VMR: No-op and VMR->>SDK_2xx: Backflow of 📄 SDK_2.2, 📦 VMR_2 - SDK_2xx-->>VMR: No-op end ``` +The diagram shows: + +1. A change was made in `dotnet/runtime`. +2. The change is flown to the VMR SDK branch where a PR with the source change is opened. +3. Sources of both SDK bands are changed, PR is merged. + Official VMR build publishes intermediate packages for each repository. + This triggers the next steps in parallel. +4. New sources of both bands, together with the we new runtime intermediate package are flown back to `dotnet/sdk`. +5. Same as step `4.` but for the other SDK band. + +After the last step, both SDK branches have the same sources of `dotnet/runtime` which means they're coherent. + ## Build ## Band snap diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 764893668ea..4a14409a610 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -451,7 +451,7 @@ For side-by-side, the situation is quite different. We’re suddenly influencing ### Comparison summary -| Comparison area | What comes out on top | +| Comparison area | Preferred solution | |-------------------------------------------------------------|:---------------------------:| | Build | Does not matter | | Code flow | Side-by-side folders | @@ -468,6 +468,3 @@ Both approaches seem to have pros and cons. To choose the best approach, we shou When doing so, we should take into account the product lifecycle. At first, the most active busy development happens in the preview time (on main branches). Only after the release, we move into servicing and only after then we branch out and snap the bands. We expect the servicing period to last very long but with less activity. During active development, we should prioritize **developer experience** and **code flow** as that has impact on product construction. During servicing we need the system to be as frictionless as possible so that we’re able to react to external impulses fast and release fixes fast which hints at prioritizing **code flow**, **release**, and **maintenance complexity**. Some areas should be important in both periods such as **community impact**. - -> TODO: Actually decide - From d1f8697c68154fd0c58d347afac041e2f259afeb Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Thu, 25 May 2023 14:04:54 +0200 Subject: [PATCH 16/47] Add WIPs --- .../UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md | 6 ++++++ .../VMR-Managing-SDK-Bands-Side-by-Side-folders.md | 8 +++++++- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 4 ++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md index 8f52537fdc5..8ad4f6deeb9 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md @@ -107,8 +107,14 @@ After the last step, both SDK branches have the same sources of `dotnet/runtime` ## Build +🚧 WIP + ## Band snap +🚧 WIP + ## Release +🚧 WIP + > TODO - note: However, we need to make sure the shared bits are the same in each released SDK branch – we’d say the SDK branches would be coherent then. We also need to make sure that changes made to the shared components in VMR’s SDK branches are flown everywhere appropriately. diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md index 604d38a1f52..777d9dcee43 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md @@ -113,6 +113,12 @@ After the last step, both SDK branches have the same sources of `dotnet/runtime` ## Build +🚧 WIP + ## Band snap -## Release \ No newline at end of file +🚧 WIP + +## Release + +🚧 WIP diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 4a14409a610..ebceeae2cc8 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -442,10 +442,14 @@ There are quite big implications of how we lay the bands out in the VMR on the o For SDK branches, nothing really changes in this regard as you can keep building the branch as you were doing until now and get the SDK you care about. For side-by-side, the situation is quite different. We’re suddenly influencing everyone’s experience with the VMR by projecting how we bundle releases into the layout of the code. This has negative implications such as having to check out all the bands always which would for instance prolong all repo operations. +🚧 WIP + > TODO: Forks and upstreaming changes differences? Some things are common for both, such as confusion about where a change should go but that’s the same for folders/branches. ### Implementation and maintenance complexity +🚧 WIP + - TODO: Much more work to implement side-by-side - TODO: Resiliency to band explosion – keeping bands in branches seems more resilient to outer requirements such as a sudden increase in the number of bands due to Visual Studio speeding up its release cycle. From 14f0f834f67f2e10cfb6fad5efe772c24aa44e31 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Thu, 25 May 2023 15:12:06 +0200 Subject: [PATCH 17/47] Add more side-by-side --- ...Managing-SDK-Bands-Side-by-Side-folders.md | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md index 777d9dcee43..7ac109cef2c 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md @@ -12,36 +12,45 @@ For simplicity, let's consider we are synchronizing the repositories `dotnet/arc Layout of files in the VMR would be as follows: -``` -/ +```sh └── src ├── roslyn + │   ├── 9.0.1xx # Note: These could also be named just 2xx # dev/17.X branch of dotnet/roslyn maps here + │   └── 9.0.2xx ├── sdk + │   ├── 9.0.1xx # release/9.0.1xx branch of dotnet/sdk maps here + │   └── 9.0.2xx └── shared ├── arcade └── runtime ``` -There could be variations such as +There could be also variations of this such as this: -``` -/ +```sh ├── sdk │ ├── roslyn +│ │   ├── 9.0.1xx +│ │   └── 9.0.2xx │ └── sdk +│    ├── 9.0.1xx +│    └── 9.0.2xx └── shared ├── arcade └── runtime ``` -and it's more a matter of taste and up for discussion but it won't have as much of an impact down the line. +The impact of the actual structure is not so important in the context of this design but it's an important detail to consider that will influence the usability of the VMR. + The layout has the following characteristics: - Each repository is a folder either under `src/` or `src/shared/` in the VMR. +- Each band-specific component would have its full copy in the respective band folder. When creating a new band, the contents of `src/sdk/9.0.2xx` would be copied from `src/sdk/9.0.1xx` (with some changes described below). + - E.g. The `dev/17.7` branch of `dotnet/roslyn` would map to `src/roslyn/9.0.1xx` - VMR has branches for each major .NET version, e.g. `release/9.0`. - Each commit of the VMR contains code for all SDK bands with shared components having a single copy. -> TODO: ❓❓❓ What does a single band preview-time VMR look like? Single band VMR is in the `main` where we develop preview version of .NET. +> TODO: ❓❓❓ What does a single band preview-time VMR look like? Single band VMR is in the `main` where we develop preview version of .NET. Would we have this layout from the start? ## Code flow @@ -111,14 +120,16 @@ The diagram shows: After the last step, both SDK branches have the same sources of `dotnet/runtime` which means they're coherent. -## Build - -🚧 WIP - ## Band snap -🚧 WIP +To create a new band, and for the ease, it would be the best to do the snap in the VMR from where it would be flown to the appropriate branches in the individual repositories: + +1. Create the new band folders by copying the sources of the latest band. + E.g. `src/sdk/9.0.1xx` to `src/sdk/9.0.2xx` +2. Adjust versions, point the new band to the new runtime intermediate package. ❓❓❓ This doesn't make sense +3. Configure Maestro subscriptions between new VMR bands and their individual repository counterparts. +4. Maestro flows the changes from the VMR and creates the appropriate branches in the individual repositories. ## Release -🚧 WIP +Release would be quite simple as it would just mean doing a full build of a single VMR commit. From 66b5cc4977d338f708cdd5518b715a278fa86fce Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Thu, 25 May 2023 15:20:53 +0200 Subject: [PATCH 18/47] Add more SDK branches --- .../VMR-Managing-SDK-Bands-SDK-branches.md | 12 +++++++----- .../VMR-Managing-SDK-Bands-Side-by-Side-folders.md | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md index 8ad4f6deeb9..75156f8300d 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md @@ -105,13 +105,15 @@ The diagram shows: After the last step, both SDK branches have the same sources of `dotnet/runtime` which means they're coherent. -## Build - -🚧 WIP - ## Band snap -🚧 WIP +To create a new band, and for the ease, it would be the best to do the snap in the VMR from where it would be flown to the appropriate branches in the individual repositories: + +1. Create the new branch based off of the current one. + E.g. `src/sdk/9.0.1xx` to `src/sdk/9.0.2xx` +2. Adjust versions, point the new band to the new runtime intermediate package. ❓❓❓ This doesn't make sense +3. Configure Maestro subscriptions between new VMR bands and their individual repository counterparts. +4. Maestro flows the changes from the VMR and creates the appropriate branches in the individual repositories. ## Release diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md index 7ac109cef2c..45ac9ce8f74 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md @@ -124,7 +124,7 @@ After the last step, both SDK branches have the same sources of `dotnet/runtime` To create a new band, and for the ease, it would be the best to do the snap in the VMR from where it would be flown to the appropriate branches in the individual repositories: -1. Create the new band folders by copying the sources of the latest band. +1. Create the new band folders by copying the sources of the latest band. E.g. `src/sdk/9.0.1xx` to `src/sdk/9.0.2xx` 2. Adjust versions, point the new band to the new runtime intermediate package. ❓❓❓ This doesn't make sense 3. Configure Maestro subscriptions between new VMR bands and their individual repository counterparts. From 49830744b7b825da0847ed6e442607183e5baf9e Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Fri, 26 May 2023 13:07:37 +0200 Subject: [PATCH 19/47] Add the new proposal --- .../VMR-Managing-SDK-Bands-SDK-branches-v2.md | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches-v2.md diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches-v2.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches-v2.md new file mode 100644 index 00000000000..403a79aabb2 --- /dev/null +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches-v2.md @@ -0,0 +1,136 @@ +> Note: This is a proposal for a strategy to build, manage and release multiple SDK bands of .NET. The proposal is part of the [Unified Build](./README.md) effort. For more context about the problem this design is trying to solve see the [Managing SDK Bands](./VMR-Managing-SDK-Bands.md) document. + +# Managing SDK Bands - "SDK branches" proposal v2 + +This proposal follows closely how we organize SDK band branches today. The bottom line is that we'd just keep using SDK branches in the VMR the same way we have them in other repositories. This is, in fact, what we’re currently already doing with today’s read-only VMR-lite where we synchronize the SDK branches of `dotnet/installer`. + +This document describes the end-to-end process from developing to shipping multiple SDK bands using this model. + +## Layout + +For simplicity, let's consider we are synchronizing the repositories `dotnet/arcade`, `dotnet/runtime`, `dotnet/roslyn` and `dotnet/sdk` where `dotnet/runtime` and `dotnet/arcade` are the shared components. + +The layout of files stays the same as today's VMR-lite. There is one caveat though. The SDK branches for other bands than the first one (`1xx`) would not contain the sources of the shared components. +Instead, they would flow in the branches via a package flow where the branches would reference the intermediate packages that would be built in the from the `1xx` branch. + +So the layou would look like this: + +```sh +# release/9.0.1xx +└── src + ├── arcade + ├── roslyn + ├── runtime + └── sdk + +# release/9.0.2xx +└── src + ├── roslyn + └── sdk +``` + +The layout has the following characteristics: +- VMR has SDK branches, e.g. `release/9.0.1xx` and `release/9.0.2xx`. +- Each repository is a folder under `src/` in the `1xx` branch of the VMR. +- Each non-1xx branch of each SDK-specific repository maps to a folder under `src/` in a matching branch in the VMR. +- Each commit of the `1xx` branch produces a single runtime and single SDK. +- Commits of the `non-1xx` branches produce SDKs only and their shared components are referenced as packages built from the `1xx` branch. + +## Code flow + +To re-iterate what the planned code flow looks like for .NET 9 (with full VMR back flow) – the individual repositories only receive and send updates from/to the VMR and not between each other. A regular forward flow with changes going to the VMR only would look like this: + +```mermaid +sequenceDiagram + autonumber + + participant runtime as dotnet/runtime
release/9.0 + participant SDK_1xx as dotnet/sdk
release/9.0.1xx + participant SDK_2xx as dotnet/sdk
release/9.0.2xx + participant VMR_1xx as VMR
release/9.0.1xx + participant VMR_2xx as VMR
release/9.0.2xx + + runtime->>runtime: New change ➡️ RUN_2 + + runtime->>VMR_1xx: Flow of 📄 RUN_2 + Note over VMR_1xx: 📦 VMR_2 intermediates are built + runtime->>VMR_2xx: Flow of 📄 RUN_2 + Note over VMR_2xx: 📦 VMR_3 intermediates are built + + Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have 📄 RUN_2 + + par Parallel backflow of intermediates + VMR_1xx->>SDK_1xx: Backflow of 📦 VMR_2 ➡️ SDK_1.2 + SDK_1xx-->>VMR_1xx: No-op + and + VMR_2xx->>SDK_2xx: Backflow of 📦 VMR_3 ➡️ SDK_2.2 + SDK_2xx-->>VMR_2xx: No-op + end +``` + +The situation gets more interesting for breaking changes. Let’s imagine a situation where a change is needed in one of the bands that requires a breaking change in a shared component: + +```mermaid +sequenceDiagram + autonumber + + participant runtime as dotnet/runtime
release/9.0 + participant SDK_1xx as dotnet/sdk
release/9.0.1xx + participant SDK_2xx as dotnet/sdk
release/9.0.2xx + participant VMR_1xx as VMR
release/9.0.1xx + participant VMR_2xx as VMR
release/9.0.2xx + + runtime->>runtime: Change in runtime ➡️ RUN_2 + + runtime->>VMR_1xx: PR with source change to 📄 RUN_2 is opened + activate VMR_1xx + Note over VMR_1xx: ❌ Requires a change in SDK + VMR_1xx->>VMR_1xx: Change is made to sdk, creating 📄 SDK_1.2 + deactivate VMR_1xx + Note over VMR_1xx: 📦 VMR_2 intermediates are built + + VMR_1xx->>SDK_1xx: Flow of 📄 SDK_1.2, 📦 VMR_2 + + VMR_1xx->>VMR_2xx: Flow of 📦 VMR_2 + activate VMR_2xx + Note over VMR_2xx: ❌ Requires a change in SDK + VMR_2xx->>VMR_2xx: Change is made to sdk, creating 📄 SDK_2.2 + deactivate VMR_2xx + Note over VMR_2xx: 📦 VMR_3 intermediates are built + VMR_2xx->>SDK_2xx: Flow of 📄 SDK_2.2, 📦 VMR_3 + + Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have both 📦 VMR_2 +``` + +The diagram shows: + +1. A change was made in `dotnet/runtime`. This starts steps `2.` and `5.` in parallel. +2. The change is flown to VMR's 1xx branch where a PR with the source change is opened. +3. The PR build fails and more changes are needed under the `src/sdk` folder. PR is merged. + Official VMR build publishes intermediate packages for each repository. +4. New sources of the `1xx` band, together with the we new runtime intermediate package are flown back to `dotnet/sdk`. +5. Intermediate packages of shared components are flown to VMR's 2xx branch. +6. The PR build fails and more changes are needed under the `src/sdk` folder. PR is merged. + Official VMR build publishes intermediate packages for each repository. +7. New sources of the `2xx` band, together with the we new runtime intermediate package are flown back to `dotnet/sdk`. + +After the last step, the `1xx` VMR branch has the sources of `dotnet/runtime` that are packaged and used by the `2xx` branch which means they're coherent. + +## Band snap + +To create a new band, and for the ease, it would be the best to do the snap in the VMR from where it would be flown to the appropriate branches in the individual repositories: + +1. Create the new branch based off of the current one. + E.g. `src/sdk/9.0.1xx` to `src/sdk/9.0.2xx` +2. Remove sources of shared components, adjust versions and point the new band to the intermediate packages of shared components from the last release. +3. Configure Maestro subscriptions between new VMR bands and their individual repository counterparts. +4. If there are at least 3 bands, configure subscriptions of the currently released band to consume the intermediates of the `1xx` band. +5. Maestro flows the changes from the VMR and creates the appropriate branches in the individual repositories. + +This makes sure that the new (preview) band is locked down to use the latest released shared components and that the a newly released bands will start getting the newest shared components built in the `1xx` branch. + +## Release + +On a release day, we need to make sure the SDK branches are coherent. This means that the lastly published intermediates from the `1xx` branch have flown to all of the other SDK band branches. For that to happen, we need to enable the package flow for the preview band and consume the newest bits to validate everything. + +Since the shared components were built only once and stored inside of the intermediates, we can assemble the packages from all band branches and release them together. From 5b547d8c11d323ed2bc6c8b0a7ffeb05bf139e8e Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Fri, 26 May 2023 13:56:51 +0200 Subject: [PATCH 20/47] Remove v1 --- .../VMR-Managing-SDK-Bands-SDK-branches-v2.md | 136 ------------------ .../VMR-Managing-SDK-Bands-SDK-branches.md | 78 +++++----- 2 files changed, 46 insertions(+), 168 deletions(-) delete mode 100644 Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches-v2.md diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches-v2.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches-v2.md deleted file mode 100644 index 403a79aabb2..00000000000 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches-v2.md +++ /dev/null @@ -1,136 +0,0 @@ -> Note: This is a proposal for a strategy to build, manage and release multiple SDK bands of .NET. The proposal is part of the [Unified Build](./README.md) effort. For more context about the problem this design is trying to solve see the [Managing SDK Bands](./VMR-Managing-SDK-Bands.md) document. - -# Managing SDK Bands - "SDK branches" proposal v2 - -This proposal follows closely how we organize SDK band branches today. The bottom line is that we'd just keep using SDK branches in the VMR the same way we have them in other repositories. This is, in fact, what we’re currently already doing with today’s read-only VMR-lite where we synchronize the SDK branches of `dotnet/installer`. - -This document describes the end-to-end process from developing to shipping multiple SDK bands using this model. - -## Layout - -For simplicity, let's consider we are synchronizing the repositories `dotnet/arcade`, `dotnet/runtime`, `dotnet/roslyn` and `dotnet/sdk` where `dotnet/runtime` and `dotnet/arcade` are the shared components. - -The layout of files stays the same as today's VMR-lite. There is one caveat though. The SDK branches for other bands than the first one (`1xx`) would not contain the sources of the shared components. -Instead, they would flow in the branches via a package flow where the branches would reference the intermediate packages that would be built in the from the `1xx` branch. - -So the layou would look like this: - -```sh -# release/9.0.1xx -└── src - ├── arcade - ├── roslyn - ├── runtime - └── sdk - -# release/9.0.2xx -└── src - ├── roslyn - └── sdk -``` - -The layout has the following characteristics: -- VMR has SDK branches, e.g. `release/9.0.1xx` and `release/9.0.2xx`. -- Each repository is a folder under `src/` in the `1xx` branch of the VMR. -- Each non-1xx branch of each SDK-specific repository maps to a folder under `src/` in a matching branch in the VMR. -- Each commit of the `1xx` branch produces a single runtime and single SDK. -- Commits of the `non-1xx` branches produce SDKs only and their shared components are referenced as packages built from the `1xx` branch. - -## Code flow - -To re-iterate what the planned code flow looks like for .NET 9 (with full VMR back flow) – the individual repositories only receive and send updates from/to the VMR and not between each other. A regular forward flow with changes going to the VMR only would look like this: - -```mermaid -sequenceDiagram - autonumber - - participant runtime as dotnet/runtime
release/9.0 - participant SDK_1xx as dotnet/sdk
release/9.0.1xx - participant SDK_2xx as dotnet/sdk
release/9.0.2xx - participant VMR_1xx as VMR
release/9.0.1xx - participant VMR_2xx as VMR
release/9.0.2xx - - runtime->>runtime: New change ➡️ RUN_2 - - runtime->>VMR_1xx: Flow of 📄 RUN_2 - Note over VMR_1xx: 📦 VMR_2 intermediates are built - runtime->>VMR_2xx: Flow of 📄 RUN_2 - Note over VMR_2xx: 📦 VMR_3 intermediates are built - - Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have 📄 RUN_2 - - par Parallel backflow of intermediates - VMR_1xx->>SDK_1xx: Backflow of 📦 VMR_2 ➡️ SDK_1.2 - SDK_1xx-->>VMR_1xx: No-op - and - VMR_2xx->>SDK_2xx: Backflow of 📦 VMR_3 ➡️ SDK_2.2 - SDK_2xx-->>VMR_2xx: No-op - end -``` - -The situation gets more interesting for breaking changes. Let’s imagine a situation where a change is needed in one of the bands that requires a breaking change in a shared component: - -```mermaid -sequenceDiagram - autonumber - - participant runtime as dotnet/runtime
release/9.0 - participant SDK_1xx as dotnet/sdk
release/9.0.1xx - participant SDK_2xx as dotnet/sdk
release/9.0.2xx - participant VMR_1xx as VMR
release/9.0.1xx - participant VMR_2xx as VMR
release/9.0.2xx - - runtime->>runtime: Change in runtime ➡️ RUN_2 - - runtime->>VMR_1xx: PR with source change to 📄 RUN_2 is opened - activate VMR_1xx - Note over VMR_1xx: ❌ Requires a change in SDK - VMR_1xx->>VMR_1xx: Change is made to sdk, creating 📄 SDK_1.2 - deactivate VMR_1xx - Note over VMR_1xx: 📦 VMR_2 intermediates are built - - VMR_1xx->>SDK_1xx: Flow of 📄 SDK_1.2, 📦 VMR_2 - - VMR_1xx->>VMR_2xx: Flow of 📦 VMR_2 - activate VMR_2xx - Note over VMR_2xx: ❌ Requires a change in SDK - VMR_2xx->>VMR_2xx: Change is made to sdk, creating 📄 SDK_2.2 - deactivate VMR_2xx - Note over VMR_2xx: 📦 VMR_3 intermediates are built - VMR_2xx->>SDK_2xx: Flow of 📄 SDK_2.2, 📦 VMR_3 - - Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have both 📦 VMR_2 -``` - -The diagram shows: - -1. A change was made in `dotnet/runtime`. This starts steps `2.` and `5.` in parallel. -2. The change is flown to VMR's 1xx branch where a PR with the source change is opened. -3. The PR build fails and more changes are needed under the `src/sdk` folder. PR is merged. - Official VMR build publishes intermediate packages for each repository. -4. New sources of the `1xx` band, together with the we new runtime intermediate package are flown back to `dotnet/sdk`. -5. Intermediate packages of shared components are flown to VMR's 2xx branch. -6. The PR build fails and more changes are needed under the `src/sdk` folder. PR is merged. - Official VMR build publishes intermediate packages for each repository. -7. New sources of the `2xx` band, together with the we new runtime intermediate package are flown back to `dotnet/sdk`. - -After the last step, the `1xx` VMR branch has the sources of `dotnet/runtime` that are packaged and used by the `2xx` branch which means they're coherent. - -## Band snap - -To create a new band, and for the ease, it would be the best to do the snap in the VMR from where it would be flown to the appropriate branches in the individual repositories: - -1. Create the new branch based off of the current one. - E.g. `src/sdk/9.0.1xx` to `src/sdk/9.0.2xx` -2. Remove sources of shared components, adjust versions and point the new band to the intermediate packages of shared components from the last release. -3. Configure Maestro subscriptions between new VMR bands and their individual repository counterparts. -4. If there are at least 3 bands, configure subscriptions of the currently released band to consume the intermediates of the `1xx` band. -5. Maestro flows the changes from the VMR and creates the appropriate branches in the individual repositories. - -This makes sure that the new (preview) band is locked down to use the latest released shared components and that the a newly released bands will start getting the newest shared components built in the `1xx` branch. - -## Release - -On a release day, we need to make sure the SDK branches are coherent. This means that the lastly published intermediates from the `1xx` branch have flown to all of the other SDK band branches. For that to happen, we need to enable the package flow for the preview band and consume the newest bits to validate everything. - -Since the shared components were built only once and stored inside of the intermediates, we can assemble the packages from all band branches and release them together. diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md index 75156f8300d..4d25c172b12 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md @@ -2,7 +2,7 @@ # Managing SDK Bands - "SDK branches" proposal -This proposal is probably the most obvious solution that comes to mind considering where we are today. The bottom line is that we'd just keep using SDK branches in the VMR the same way we have them today. This is, in fact, what we’re currently already doing with today’s read-only VMR-lite where we synchronize the SDK branches of `dotnet/installer`. +This proposal follows closely how we organize SDK band branches today. The bottom line is that we'd just keep using SDK branches in the VMR the same way we have them in other repositories. This is, in fact, what we’re currently already doing with today’s read-only VMR-lite where we synchronize the SDK branches of `dotnet/installer`. This document describes the end-to-end process from developing to shipping multiple SDK bands using this model. @@ -10,22 +10,31 @@ This document describes the end-to-end process from developing to shipping multi For simplicity, let's consider we are synchronizing the repositories `dotnet/arcade`, `dotnet/runtime`, `dotnet/roslyn` and `dotnet/sdk` where `dotnet/runtime` and `dotnet/arcade` are the shared components. -The layout of files stays the same as today's VMR-lite: +The layout of files stays the same as today's VMR-lite. There is one caveat though. The SDK branches for other bands than the first one (`1xx`) would not contain the sources of the shared components. +Instead, they would flow in the branches via a package flow where the branches would reference the intermediate packages that would be built in the from the `1xx` branch. -``` -/ +So the layout would look like this: + +```sh +# release/9.0.1xx branch └── src ├── arcade ├── roslyn ├── runtime └── sdk + +# release/9.0.2xx branch +└── src + ├── roslyn + └── sdk ``` The layout has the following characteristics: -- Each repository is a folder under `src/` in the VMR. - VMR has SDK branches, e.g. `release/9.0.1xx` and `release/9.0.2xx`. -- Each branch has a full copy of all repositories, even shared ones. -- Each commit of the VMR produces a single runtime and single SDK. +- Each repository is a folder under `src/` in the `1xx` branch of the VMR. +- Each non-1xx branch of each SDK-specific repository maps to a folder under `src/` in a matching branch in the VMR. +- Each commit of the `1xx` branch produces a single runtime and single SDK. +- Commits of the `non-1xx` branches produce SDKs only and their shared components are referenced as packages built from the `1xx` branch. ## Code flow @@ -73,37 +82,39 @@ sequenceDiagram runtime->>runtime: Change in runtime ➡️ RUN_2 - par Parallel backflow - runtime->>VMR_1xx: PR with source change to 📄 RUN_2 is opened - activate VMR_1xx - Note over VMR_1xx: ❌ Requires a change in SDK - VMR_1xx->>VMR_1xx: Change is made to sdk, creating 📄 SDK_1.2 - deactivate VMR_1xx - Note over VMR_1xx: 📦 VMR_2 intermediates are built - VMR_1xx->>SDK_1xx: Flow of 📄 SDK_1.2, 📦 VMR_2 - and - runtime->>VMR_2xx: PR with source change to 📄 RUN_2 is opened - activate VMR_2xx - Note over VMR_2xx: ❌ Requires a change in SDK - VMR_2xx->>VMR_2xx: Change is made to sdk, creating 📄 SDK_2.2 - deactivate VMR_2xx - Note over VMR_2xx: 📦 VMR_3 intermediates are built - VMR_2xx->>SDK_2xx: Flow of 📄 SDK_2.2, 📦 VMR_3 - end + runtime->>VMR_1xx: PR with source change to 📄 RUN_2 is opened + activate VMR_1xx + Note over VMR_1xx: ❌ Requires a change in SDK + VMR_1xx->>VMR_1xx: Change is made to sdk, creating 📄 SDK_1.2 + deactivate VMR_1xx + Note over VMR_1xx: 📦 VMR_2 intermediates are built - Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have 📄 RUN_2 + VMR_1xx->>SDK_1xx: Flow of 📄 SDK_1.2, 📦 VMR_2 + + VMR_1xx->>VMR_2xx: Flow of 📦 VMR_2 + activate VMR_2xx + Note over VMR_2xx: ❌ Requires a change in SDK + VMR_2xx->>VMR_2xx: Change is made to sdk, creating 📄 SDK_2.2 + deactivate VMR_2xx + Note over VMR_2xx: 📦 VMR_3 intermediates are built + VMR_2xx->>SDK_2xx: Flow of 📄 SDK_2.2, 📦 VMR_3 + + Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have both 📦 VMR_2 ``` The diagram shows: 1. A change was made in `dotnet/runtime`. This starts steps `2.` and `5.` in parallel. -2. The change is flown in parallel to the VMR SDK branch where a PR with the source change is opened. +2. The change is flown to VMR's 1xx branch where a PR with the source change is opened. 3. The PR build fails and more changes are needed under the `src/sdk` folder. PR is merged. Official VMR build publishes intermediate packages for each repository. 4. New sources of the `1xx` band, together with the we new runtime intermediate package are flown back to `dotnet/sdk`. -5. Same as steps `3.`-`6.` but for the other SDK band. +5. Intermediate packages of shared components are flown to VMR's 2xx branch. +6. The PR build fails and more changes are needed under the `src/sdk` folder. PR is merged. + Official VMR build publishes intermediate packages for each repository. +7. New sources of the `2xx` band, together with the we new runtime intermediate package are flown back to `dotnet/sdk`. -After the last step, both SDK branches have the same sources of `dotnet/runtime` which means they're coherent. +After the last step, the `1xx` VMR branch has the sources of `dotnet/runtime` that are packaged and used by the `2xx` branch which means they're coherent. ## Band snap @@ -111,12 +122,15 @@ To create a new band, and for the ease, it would be the best to do the snap in t 1. Create the new branch based off of the current one. E.g. `src/sdk/9.0.1xx` to `src/sdk/9.0.2xx` -2. Adjust versions, point the new band to the new runtime intermediate package. ❓❓❓ This doesn't make sense +2. Remove sources of shared components, adjust versions and point the new band to the intermediate packages of shared components from the last release. 3. Configure Maestro subscriptions between new VMR bands and their individual repository counterparts. -4. Maestro flows the changes from the VMR and creates the appropriate branches in the individual repositories. +4. If there are at least 3 bands, configure subscriptions of the currently released band to consume the intermediates of the `1xx` band. +5. Maestro flows the changes from the VMR and creates the appropriate branches in the individual repositories. + +This makes sure that the new (preview) band is locked down to use the latest released shared components and that the a newly released bands will start getting the newest shared components built in the `1xx` branch. ## Release -🚧 WIP +On a release day, we need to make sure the SDK branches are coherent. This means that the lastly published intermediates from the `1xx` branch have flown to all of the other SDK band branches. For that to happen, we need to enable the package flow for the preview band and consume the newest bits to validate everything. -> TODO - note: However, we need to make sure the shared bits are the same in each released SDK branch – we’d say the SDK branches would be coherent then. We also need to make sure that changes made to the shared components in VMR’s SDK branches are flown everywhere appropriately. +Since the shared components were built only once and stored inside of the intermediates, we can assemble the packages from all band branches and release them together. From 7e587a33306621d123c84ad047255948a0fc787f Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Fri, 26 May 2023 14:27:13 +0200 Subject: [PATCH 21/47] Port changes from the PR --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index ebceeae2cc8..9a1d948bcb7 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -1,4 +1,4 @@ -# Managing SDK Bands +# The Unified Build Almanac (TUBA) - Managing SDK Bands ## Purpose @@ -6,7 +6,7 @@ This document describes the problematics of managing multiple .NET SDK bands and ## Terminology -This section presents more precise definitions of common terms used in this document that may be prone to confusion. +This section presents more precise definitions of common terms used in this document that may be prone to confusion. Also see the [Unified Build terminology](./Terminology.md) for more. - **Individual/Source repository** – One of the current development repositories, e.g., `dotnet/runtime`. An "individual product repository" is then one that contains code for part of the product (but no individual repository contains code to build the whole .NET Core product). - **VMR (Virtual Monolithic Repository)** – A repository containing code layout that produces the official build product of .NET Core. The repository contains individual product repositories plus tooling to enable a full build of the product. @@ -26,7 +26,7 @@ To align with new Visual Studio releases, .NET SDK updates sometimes include new To best illustrate how this works in practice, let’s imagine the following timeline for repositories with SDK branches (e.g., `dotnet/sdk`): ```mermaid -%%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showCommitLabel': false, 'tagLabelFontSize': '24px'}} }%% +%%{init: { 'gitGraph': {'showCommitLabel': false }}}%% gitGraph commit commit @@ -135,7 +135,7 @@ Once we hit each release day (denoted with red vertical lines), we take the late To organize what ends up in each band and to drive the code flow between the repositories, we utilize the Maestro dependency flow, namely the Maestro channels (see [Channels, Branches and Subscriptions](../BranchesChannelsAndSubscriptions.md for details): -- **VS-centric channels** – To better match how teams opererate, some repositories align their build outputs with the Visual Studio versions, e.g. `dotnet/roslyn`. Outputs of repositories like that would end up in a channel named based on the version of VS, e.g. `17.5`. +- **VS-centric channels** – To better match how teams operate, some repositories align their build outputs with the Visual Studio versions, e.g. `dotnet/roslyn`. Outputs of repositories like that would end up in a channel named based on the version of VS, e.g. `17.5`. - **SDK band channels** – The repositories that are closer to how we organize the final release are then targeting channels named based on the band version, e.g. `.NET 7.0.3xx SDK`. - **Shared component channels** – Lastly, repositories with shared components and tooling repositories target channels named based on the major .NET version, e.g. `.NET 7` or `.NET 7 Eng`. @@ -192,7 +192,7 @@ This setup makes sure that the latest version of each shared component (e.g., ru ### Band lifecycle -As described above, the band lifecycle is tightly coupled with the releases of Visual Studio. For repositories that target the VS-centric bands, the `main` branch usually targets the next VS version which is in preview. Once a version of VS is released (is GA-ed), we create a new branch named `dev/XX.Y` where `XX.Y` is the version of the released VS. The `main` branch then targets the next VS version in preview +As described above, the band lifecycle is tightly coupled with the releases of Visual Studio. The exception is 100th band that ships on .NET annual schedule and VS snaps to it. For repositories that target the VS-centric bands, the `main` branch usually targets the next VS version which is in preview. Once a version of VS is released (is GA-ed), we create a new branch named `dev/XX.Y` where `XX.Y` is the version of the released VS. The `main` branch then targets the next VS version in preview As an example, let's say we have the following setup: - VS `17.1` is the latest stable version of VS and is associated with the `7.0.1xx` band. From 1ae8359eb9148a7a82771d3c2c28381a4b3c824d Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Fri, 26 May 2023 14:51:11 +0200 Subject: [PATCH 22/47] Improve main document --- .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 9a1d948bcb7..a9e51b8c866 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -2,7 +2,7 @@ ## Purpose -This document describes the problematics of managing multiple .NET SDK bands and discusses how we propose to solve this in the Unified Build world during the .NET 9 timeframe using the new build methodology and the full VMR. +This document describes the problematics of managing multiple .NET SDK bands and discusses how we propose to solve this in the Unified Build world during the .NET 9 timeframe using the new build methodology and the full VMR. The document first gives context and explains how we do it today. Then there are two possible solutions discussed and compared. ## Terminology @@ -98,7 +98,7 @@ gitGraph checkout release/8.0 commit commit - commit type: HIGHLIGHT tag: "Release #2 – Runtime 8.0.6" + commit type: HIGHLIGHT tag: "Release #2 – Runtime 8.0.1" checkout main commit commit @@ -117,19 +117,21 @@ gitGraph commit checkout release/8.0 commit - commit type: HIGHLIGHT tag: "Release #3 – Runtime 8.0.12" + commit type: HIGHLIGHT tag: "Release #3 – Runtime 8.0.2" checkout main commit commit ``` -On the image you can see timelines of branches of two different repositories – `dotnet/sdk` and `dotnet/runtime`. As noted previously, each (servicing) release of .NET contains multiple SDK bands but only one runtime. Each individual repository of each component that needs to differ per band would then have these so-called “SDK branches” named `release/Z.0.Yxx` while repositories that are shared per release have the non-SDK `release/Z.0` branches. As shown in the example, the development of the single runtime would happen in the `release/8.0` branch while the various SDK bands are stored in the following SDK branches (e.g., `release/8.0.1xx` represents the “100th band”). +On the image you can see timelines of branches of two different repositories – `dotnet/sdk` and `dotnet/runtime`. As noted previously, each (servicing) release of .NET contains multiple SDK bands but only one runtime. Each individual repository of each component that needs to differ per band would then have these so-called *“SDK branches”* named `release/Z.0.Yxx` while repositories that are shared per release have the non-SDK `release/Z.0` branches. As shown in the example, the development of the single runtime would happen in the `release/8.0` branch while the various SDK bands are stored in the following SDK branches (e.g., `release/8.0.1xx` represents the “100th band”). -Once we hit each release day (denoted with red vertical lines), we take the latest commit of each of those branches (that already exist) and release those together. For the releases in the example diagram, this might be: +Once we hit each release day (denoted with red vertical lines), we take the latest commit of each of those branches (that already exist) and release those together. For the releases in the example diagram, these are the released compilations: -- Release day #1 – `8.0.0` runtime + one SDK (`8.0.100`) -- Release day #2 – `8.0.6` runtime + two SDKs (`8.0.109`, `8.0.205`) -- Release day #3 – `8.0.12` runtime + three SDKs (`8.0.111`, `8.0.207`, `8.0.302`) +| Release | Runtime | SDKs | +|:-------:|:-----------:|:-------------------------------:| +| #1 | `8.0.0` | `8.0.100` | +| #2 | `8.0.1` | `8.0.109`, `8.0.205` | +| #3 | `8.0.2` | `8.0.111`, `8.0.207`, `8.0.302` | ### Current code flow From 060cba6e10e372aa4fb5afd2be89ca9ee06093ee Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Mon, 29 May 2023 10:21:48 +0200 Subject: [PATCH 23/47] Small notes --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index a9e51b8c866..5dc883a5a5b 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -252,14 +252,14 @@ The long-term plan is to transition to building and releasing using the Virtual Currently, we end up with SDK branches in the `dotnet/installer` repository and the release process makes sure to package those into the final product. With releasing from the VMR, we have two ways we can approach this: - **SDK branches** - [📄 Detailed description of the proposal](./VMR-Managing-SDK-Bands-SDK-branches.md) - The first obvious solution that comes to mind considering where we are today. The bottom line is that we'd just keep using SDK branches in the VMR the same way we have them today. This is, in fact, what we’re currently already doing with today’s read-only VMR-lite where we synchronize the SDK branches of `dotnet/installer`. Each branch/commit of the VMR would then keep producing a single SDK. Each branch/commit of the VMR would then keep producing a single SDK. However, we need to make sure the shared bits are the same in each released SDK branch – we’d say the SDK branches would be coherent then. We also need to make sure that changes made to the shared components in VMR’s SDK branches are flown everywhere appropriately. + The first obvious solution that comes to mind considering where we are today. The bottom line is that we'd just keep using SDK branches in the VMR the same way we have them today. This is, in fact, what we’re currently already doing with today’s read-only VMR-lite where we synchronize the SDK branches of `dotnet/installer`. Each branch/commit of the VMR would then keep producing a single SDK. However, we need to make sure the shared bits are the same in each released SDK branch – we’d say the SDK branches would be coherent then. We also need to make sure that changes made to the shared components in VMR’s SDK branches are flown everywhere appropriately. - **Side-by-Side folders in the VMR** - [📄 Detailed description of the proposal](./VMR-Managing-SDK-Bands-Side-by-Side-folders.md) The second proposed solution would be to take the inverse approach and, instead of having SDK branches, we’d organize VMR’s branches based on the shared bits (e.g. `release/9.0`) and place the different bands of the SDK components side by side in the VMR, e.g. `src/sdk/9.0.1xx`. This makes sure that the shared bits exist only once and each commit of the VMR contains all bands which are coherent. ## Proposal comparison -To compare the two proposals, we identified several areas which might be impacted by the selected architecture, and we’ll try to evaluate how each of the solutions affect them: +To compare the two proposals, we identified several areas which might be impacted by the selected architecture: - **Build** – what would build of a single and of multiple bands look like with regards to Source Build - **Code flow** – what does a breaking change mean; how do we (back-)flow the code between the VMR and the individual repositories From 946cc50ded192e2e8e77c0ab0230a96e551d21e0 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Mon, 29 May 2023 14:09:14 +0200 Subject: [PATCH 24/47] Update proposals with ideas around using intermediates --- .../VMR-Managing-SDK-Bands-SDK-branches.md | 81 ++++++++++++++----- ...Managing-SDK-Bands-Side-by-Side-folders.md | 70 +++++++++++----- 2 files changed, 111 insertions(+), 40 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md index 4d25c172b12..bdc9ee02b45 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md @@ -10,32 +10,68 @@ This document describes the end-to-end process from developing to shipping multi For simplicity, let's consider we are synchronizing the repositories `dotnet/arcade`, `dotnet/runtime`, `dotnet/roslyn` and `dotnet/sdk` where `dotnet/runtime` and `dotnet/arcade` are the shared components. -The layout of files stays the same as today's VMR-lite. There is one caveat though. The SDK branches for other bands than the first one (`1xx`) would not contain the sources of the shared components. -Instead, they would flow in the branches via a package flow where the branches would reference the intermediate packages that would be built in the from the `1xx` branch. - -So the layout would look like this: +The layout of files will stay almost the same as today's VMR-lite: ```sh -# release/9.0.1xx branch └── src ├── arcade ├── roslyn ├── runtime └── sdk +``` + +The problem with this is that each SDK branch would contain source code for all shared components. This would cause problems with keeping the sources of these synchronized. To work around that, we'd have to make an adjustment. This adjustment would require a feature in Source Build where we could specify whether a components is built form source or restored from its intermediate package. +This functionality actually already exists and each repository already references its dependencies via `eng/Version.Details.xml` so that it can build inside of its individual repository. -# release/9.0.2xx branch +Considering we have this capability, we'd then change the VMR contents so that the SDK branches of other bands than the first one (`1xx`) would not contain the sources of the shared components. +Instead, they would flow in the branches via a package dependency flow where the branches would reference the intermediate packages that would be built from the `1xx` branch. This will give us more flexibility such as locking down the version of the shared components in the preview band to the last released version. + +The complete layout would then look like this: + +```sh +# release/9.0.1xx branch └── src + ├── arcade ├── roslyn + ├── runtime └── sdk + +# release/9.0.2xx and other branch +└── src + ├── roslyn # references the runtime and arcade intermediates instead of sources + └── sdk # references the runtime and arcade intermediates instead of sources ``` -The layout has the following characteristics: +To summarize the characteristics: + - VMR has SDK branches, e.g. `release/9.0.1xx` and `release/9.0.2xx`. - Each repository is a folder under `src/` in the `1xx` branch of the VMR. -- Each non-1xx branch of each SDK-specific repository maps to a folder under `src/` in a matching branch in the VMR. -- Each commit of the `1xx` branch produces a single runtime and single SDK. +- Each non-1xx branch of each SDK-specific repository maps to a folder under `src/` in a matching branch of the VMR. +- Each commit of the `1xx` branch produces a single runtime and single SDK. The non-1xx branches do not contain all the code however. - Commits of the `non-1xx` branches produce SDKs only and their shared components are referenced as packages built from the `1xx` branch. +## Working with the code + +The proposed layout has some problematic implications. Let's consider the following scenarios: + +1. A developer needs to make sure a cross-repo change to `src/runtime` and `src/sdk` in the `3xx` band. +2. A distro maintainer needs to build the `3xx` band from source. + +We need to make sure both of these scenarios are easy to do but the layout of the sources doesn't allow that out of the box. + +It seems that to make this work, we'd need to be able to tell Source Build to easily swap between using the sources and the intermediate packages of the shared components. +When someone would be interested in these flows, we should have a mechanism to also checkout the sources and reference them during the build. There are couple of possibilities: + +1. The `src/` folder of non-1xx branches would contain submodules pointing to the original individual repositories. These would not be used in most flows but could be activated. When we'd be flowing changes from the 1xx branch, we could also change where the submodule points. +2. Have a script that would check the components out into `src/` onto the same location where they are placed in the 1xx branch. It would also create some dummy file to signal that Source Build should ignore `Version.Details.xml` when restoring the intermediates but rather build the sources. The `src/` locations and the signal file would be ".gitignored". The dev would then have to backport their changes from withing the folders to either the 1xx branch or the individual repositories. +3. We could just expect the individual repositories to be checked out somewhere else on developer's disk (e.g. next to the VMR itself) and Source Build would know to find and build those instead (again through an invisible signal file for instance). + +The first option seems quite straightforward but the individual repository doesn't necessarily have to have the same contents as its counterpart in the VMR which might be problematic. +The second flow solves the scenario of .NET distro maintainers fully as we'd easily create a source tarball that would match the layout of the 1xx branch. It doesn't work well for the developer scenario though. +The third option seems to be the best for the developer but doesn't solve the distro maintainer scenario fully. + +It seems that we could have a mixture of `2.` and `3.` where Source Build would have a feature of "know to look elsewhere" and distro maintainers would build from a tarball assembled as described in `2.` and developers would have the option to use the sources from their local individual repositories as shown in `3.`. + ## Code flow To re-iterate what the planned code flow looks like for .NET 9 (with full VMR back flow) – the individual repositories only receive and send updates from/to the VMR and not between each other. A regular forward flow with changes going to the VMR only would look like this: @@ -85,7 +121,7 @@ sequenceDiagram runtime->>VMR_1xx: PR with source change to 📄 RUN_2 is opened activate VMR_1xx Note over VMR_1xx: ❌ Requires a change in SDK - VMR_1xx->>VMR_1xx: Change is made to sdk, creating 📄 SDK_1.2 + VMR_1xx->>VMR_1xx: Change needed in src/sdk
Creating 📄 SDK_1.2 deactivate VMR_1xx Note over VMR_1xx: 📦 VMR_2 intermediates are built @@ -94,43 +130,44 @@ sequenceDiagram VMR_1xx->>VMR_2xx: Flow of 📦 VMR_2 activate VMR_2xx Note over VMR_2xx: ❌ Requires a change in SDK - VMR_2xx->>VMR_2xx: Change is made to sdk, creating 📄 SDK_2.2 + VMR_2xx->>VMR_2xx: Change needed in src/sdk
Creating 📄 SDK_2.2 deactivate VMR_2xx Note over VMR_2xx: 📦 VMR_3 intermediates are built VMR_2xx->>SDK_2xx: Flow of 📄 SDK_2.2, 📦 VMR_3 - Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have both 📦 VMR_2 + Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx both use 📄 RUN_2 ``` The diagram shows: -1. A change was made in `dotnet/runtime`. This starts steps `2.` and `5.` in parallel. -2. The change is flown to VMR's 1xx branch where a PR with the source change is opened. +1. A change was made in `dotnet/runtime`. +2. The change is flown to VMR's `1xx` branch where a PR with the source change is opened. 3. The PR build fails and more changes are needed under the `src/sdk` folder. PR is merged. Official VMR build publishes intermediate packages for each repository. 4. New sources of the `1xx` band, together with the we new runtime intermediate package are flown back to `dotnet/sdk`. 5. Intermediate packages of shared components are flown to VMR's 2xx branch. -6. The PR build fails and more changes are needed under the `src/sdk` folder. PR is merged. +6. The PR build fails and, similarly to the `1xx` branch PR, more changes are needed under the `src/sdk` folder. PR is merged. Official VMR build publishes intermediate packages for each repository. 7. New sources of the `2xx` band, together with the we new runtime intermediate package are flown back to `dotnet/sdk`. After the last step, the `1xx` VMR branch has the sources of `dotnet/runtime` that are packaged and used by the `2xx` branch which means they're coherent. +## Release + +On a release day, we need to make sure the SDK branches are coherent. This means that the lastly published intermediates from the `1xx` branch have flown to all of the other SDK band branches. For that to happen, we need to enable the package flow for the preview band and consume the newest bits to validate everything. +Since the shared components were built only once and stored inside of the intermediates, we can assemble the packages from all band branches and release them together, similarly to how we do it today. + +The Source Build releases where we publish sources to distro maintainers, would have to be adjusted and in cases when building a single non-1xx band only, we'd have to make sure the distro maintainers can acquire a tarball with the complete sources. + ## Band snap To create a new band, and for the ease, it would be the best to do the snap in the VMR from where it would be flown to the appropriate branches in the individual repositories: 1. Create the new branch based off of the current one. E.g. `src/sdk/9.0.1xx` to `src/sdk/9.0.2xx` -2. Remove sources of shared components, adjust versions and point the new band to the intermediate packages of shared components from the last release. +2. Remove sources of shared components in the `2xx` branch. Adjust package versions and point the new band to the intermediate packages of shared components from the last release. 3. Configure Maestro subscriptions between new VMR bands and their individual repository counterparts. 4. If there are at least 3 bands, configure subscriptions of the currently released band to consume the intermediates of the `1xx` band. 5. Maestro flows the changes from the VMR and creates the appropriate branches in the individual repositories. This makes sure that the new (preview) band is locked down to use the latest released shared components and that the a newly released bands will start getting the newest shared components built in the `1xx` branch. - -## Release - -On a release day, we need to make sure the SDK branches are coherent. This means that the lastly published intermediates from the `1xx` branch have flown to all of the other SDK band branches. For that to happen, we need to enable the package flow for the preview band and consume the newest bits to validate everything. - -Since the shared components were built only once and stored inside of the intermediates, we can assemble the packages from all band branches and release them together. diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md index 45ac9ce8f74..c9d9236f72e 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md @@ -15,10 +15,10 @@ Layout of files in the VMR would be as follows: ```sh └── src ├── roslyn - │   ├── 9.0.1xx # Note: These could also be named just 2xx # dev/17.X branch of dotnet/roslyn maps here + │   ├── 9.0.1xx # Note: These could also be named just 2xx │   └── 9.0.2xx ├── sdk - │   ├── 9.0.1xx # release/9.0.1xx branch of dotnet/sdk maps here + │   ├── 9.0.1xx │   └── 9.0.2xx └── shared ├── arcade @@ -28,21 +28,43 @@ Layout of files in the VMR would be as follows: There could be also variations of this such as this: ```sh -├── sdk -│ ├── roslyn -│ │   ├── 9.0.1xx -│ │   └── 9.0.2xx -│ └── sdk -│    ├── 9.0.1xx -│    └── 9.0.2xx -└── shared - ├── arcade - └── runtime +└── src + ├── sdk + │ ├── roslyn + │ │   ├── 9.0.1xx + │ │   └── 9.0.2xx + │ └── sdk + │    ├── 9.0.1xx + │    └── 9.0.2xx + └── shared + ├── arcade + └── runtime ``` The impact of the actual structure is not so important in the context of this design but it's an important detail to consider that will influence the usability of the VMR. -The layout has the following characteristics: +This layout however doesn't comply with the requirement where the preview band is locked down to use the latest released runtime. To work around that, we'd have to make an adjustment. This adjustment would require a feature in Source Build where we could specify whether a components is built form source or restored from its intermediate package. +This functionality actually already exists and each repository already references its dependencies via `eng/Version.Details.xml` so that it can build inside of its individual repository. + +Considering we have this capability, we'd then change the VMR contents so that the SDK-specific components of other bands than the first one (`1xx`) would not contain the sources of the shared components. +Instead, they would reference intermediate packages that would be built from the `1xx` branch. This will give us more flexibility such as locking down the version of the shared components in the preview band to the last released version. + +The complete layout would then look like this: + +```sh +└── src + ├── roslyn + │   ├── 9.0.1xx + │   └── 9.0.2xx # references the runtime and arcade intermediates instead of sources + ├── sdk + │   ├── 9.0.1xx + │   └── 9.0.2xx # references the runtime and arcade intermediates instead of sources + └── shared + ├── arcade + └── runtime +``` + +To summarize the characteristics: - Each repository is a folder either under `src/` or `src/shared/` in the VMR. - Each band-specific component would have its full copy in the respective band folder. When creating a new band, the contents of `src/sdk/9.0.2xx` would be copied from `src/sdk/9.0.1xx` (with some changes described below). @@ -52,6 +74,18 @@ The layout has the following characteristics: > TODO: ❓❓❓ What does a single band preview-time VMR look like? Single band VMR is in the `main` where we develop preview version of .NET. Would we have this layout from the start? +## Working with the code + +The proposed layout has some problematic implications. Let's consider the following scenarios: + +1. A developer wants to make a cross-repo change in a preview band and a shared component. +2. Distro maintainer wants to build the latest band only. + +It might be counter-intuitive to build a commit only to find out that the non-1xx bands do not contain the runtime from that commit. For instance, when you change a sources of a shared component to rebuild a non-1xx band only for the change to not manifest. This is due to the fact that the band would restore the dependencies from the intermediate package instead. This is not ideal as it will be quite hard to test the branch against arbitrary code. + +It seems that to make this work, we'd need to be able to tell Source Build to easily swap between using the sources and the intermediate packages of the shared components. +When someone would be interested in these flows, they would point Source Build to sources somewhere on their disk - either directly in the VMR (e.g. `src/runtime`) or in a full clone of the individual repository checked out outside of the VMR folder. + ## Code flow To re-iterate what the planned code flow looks like for .NET 9 (with full VMR back flow) – the individual repositories only receive and send updates from/to the VMR and not between each other. A regular forward flow with changes going to the VMR only would look like this: @@ -120,16 +154,16 @@ The diagram shows: After the last step, both SDK branches have the same sources of `dotnet/runtime` which means they're coherent. +## Release + +Release would mean we'd have to make all released SDK band components use sources to build and use their dependencies from. After that, it should be quite simple to build everything together as all the sources would happen to be within one commit. + ## Band snap To create a new band, and for the ease, it would be the best to do the snap in the VMR from where it would be flown to the appropriate branches in the individual repositories: 1. Create the new band folders by copying the sources of the latest band. E.g. `src/sdk/9.0.1xx` to `src/sdk/9.0.2xx` -2. Adjust versions, point the new band to the new runtime intermediate package. ❓❓❓ This doesn't make sense +2. Adjust versions, point the new band to the new runtime intermediate package. 3. Configure Maestro subscriptions between new VMR bands and their individual repository counterparts. 4. Maestro flows the changes from the VMR and creates the appropriate branches in the individual repositories. - -## Release - -Release would be quite simple as it would just mean doing a full build of a single VMR commit. From 22a1c61edf0bac4486b84d0c5613f8e05a5e977b Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Mon, 29 May 2023 15:33:24 +0200 Subject: [PATCH 25/47] Add Release and Implementation complexity sections --- .../VMR-Managing-SDK-Bands-SDK-branches.md | 4 +- .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 93 ++++++++++++------- 2 files changed, 63 insertions(+), 34 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md index bdc9ee02b45..aa3bc8377db 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md @@ -96,10 +96,10 @@ sequenceDiagram Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have 📄 RUN_2 par Parallel backflow of intermediates - VMR_1xx->>SDK_1xx: Backflow of 📦 VMR_2 ➡️ SDK_1.2 + VMR_1xx->>SDK_1xx: Backflow of 📦 VMR_2 ➡️ 📄 SDK_1.2 SDK_1xx-->>VMR_1xx: No-op and - VMR_2xx->>SDK_2xx: Backflow of 📦 VMR_3 ➡️ SDK_2.2 + VMR_2xx->>SDK_2xx: Backflow of 📦 VMR_3 ➡️ 📄 SDK_2.2 SDK_2xx-->>VMR_2xx: No-op end ``` diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index f9641dc0201..958f11d130c 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -275,20 +275,20 @@ To compare the two proposals, we identified several areas which might be impacte ### Build -The current (Microsoft) way of building the SDKs is based on re-using previously built artifacts which come into the build as NuGet packages. The components are flown as already compiled packages. This means that when building each SDK band, we only restore the shared components which were built only once at some point in the past during the official build of their source repository. - +The current (Microsoft) way of building the SDKs is based on re-using previously built artifacts which come into the build as NuGet packages. The components are flown as already compiled packages. This means that when building each SDK band, we only restore the shared components which were built only once at some point in the past during the official build of their source repository. In .NET 9.0, when the full VMR code flow is in place (see [VMR Code and Build Workflow](./VMR-Code-And-Build-Workflow.md) for details), we’ll be building the individual repositories on more occasions: - During the official build of their source repository – this will use other repo’s intermediate packages whenever they depend on another repo as if they were just built from source. - During the official build of the VMR – when we build the whole product from source. This will end up producing an intermediate package per each individual repository built as part of the whole build. -This means that at several places, we’ll be building both the shared components and the SDK band components from source where their dependencies will be either freshly built or restored in a local NuGet cache of the build machine. - -Regardless of how this will happen, there’s no real difference whether we’d build the SDK bands from folders which are side by side in a folder of a checked-out branch or which are checkouts of different SDK branches. The build process would need to know about the existence of multiple SDK bands eventually placed in a folder “somewhere on the disk”. **This means that the selected architecture doesn’t really affect the build and we don’t need to consider it during evaluation.** There will, however, be a change to the build process needed to accommodate for the new locations of the bands. +This means that in several places, we’ll be building both the shared components and the SDK band components from source where their dependencies will be either freshly built or restored in a local NuGet cache. +Regardless of how this will happen, there’s no real difference whether we’d build the SDK bands from folders which are side by side in a folder of a checked-out branch or which are checkouts of different SDK branches. The various situations can be summarized as follows: -- For individual repository builds, the build process will need to know about the location of the SDK bands. This is the same for both proposals. -- For the VMR build shared components are built with the first band and put in a local NuGet cache. Other bands restore shared components from the cache (or rebuild the components over of cache is not possible). +- For individual repository builds, the build process will restore the dependencies from intermediate packages. +- For the VMR build shared components are built with the first band and put in a local NuGet cache. Other bands restore shared components from the cache. + +Upon inspection of the proposals, the above **doesn't differ for the given proposal which means the selected architecture doesn’t really affect the build** and we don’t need to consider it during evaluation. There will, however, be a change to the build process needed to accommodate for the new locations of the bands within the VMR. ### Code flow @@ -308,22 +308,26 @@ Important area to consider is how the day-to-day interactions of .NET developers That said, it’s important to realize that most of the work and the VMR is the most active in the preview time where we only have one SDK band. -It is obvious that the SDK branch proposal wins in most of these categories. It stays truer to git by using commits/branches for file versioning rather than folders with versions in their name as it is with the side-by-side layout. This works well with all kinds of tooling and workflows: +It is obvious that the SDK branch proposal wins in most of these categories. It stays more true to git by using commits/branches for file versioning rather than folders with version using in their name as it is with the side-by-side layout. This works well with all kinds of tooling and workflows: -- File history breaks with side-by-side folders once we snap the bands. +- File history breaks with side-by-side folders once we snap the bands as files are copied in a new path. - File and symbol search might be confusing when going through almost identical side-by-side folders. - Backporting a change between bands sounds less error prone with SDK branches as it’s just porting commits. Making a change in several bands at once can lead to omitting a change in one of the bands, harder-to-review pull requests and overall it seems to be easier to transfer changes between bands using git-native approaches. Of course it’s possible to utilize patches but once a change is up for review, making sure all bands stay in sync might be problematic. - Diffing bands sounds easier to do with SDK branches as well as you don’t need to worry which all components are shared and which are not – diffing side-by-side folders might become tedious once we need to compare several repositories at once. -Some points of interested are rather a matter of personal preference – is it better for a developer to make a change in one SDK branch, open a PR and then backport to other branches, or is it better to do everything at once and build/validate it together? But over all it seems that storing code based on how we work with it rather than how we release it sounds better and the SDK branches proposal seems as the superior approach in this area since it optimizes for development rather than bend the architecture/layout to how we release the product. +Some points of interest are rather a matter of personal preference – is it better for a developer to make a change in one SDK branch, open a PR and then backport to other branches, or is it better to do everything at once and build/validate it together? Over all it seems that storing code based on how we work with it rather than how we release it sounds better and the SDK branches proposal seems as the superior approach in this area since it optimizes for development rather than bend the layout to how we release the product. ### Release -> TODO: Describe what putting a release together looks like - but we should describe that in each of the proposals +There are few key parts of the release process: -> Note : Separating development and release cycle – the fact that we release several SDKs is a Microsoft problem that 3rd parties may or may not care about. We shouldn’t enforce the problems of our custom release on others through the code layout – for instance, you shouldn’t be forced to check out multiple versions of the code if you don’t care about multiple bands. Further, we shouldn’t tax the .NET team itself and subordinate how we store code to how we release it later. +- Figuring out what to release - we need to flow dependencies to the right places and determine which sources are coherent enough to be released. +- Compiling the binary release - we need to be able to build all the sources in such a way that shared components do not get built more than once. +- Publishing and communicating the release of the sources (Source Build release) - Identifying and publishing sources of the release so that they are easily consumed by 3rd party partners. -> – Note: Resiliency to band explosion – keeping bands in branches seems more resilient to outer requirements such as a sudden increase in the number of bands due to Visual Studio speeding up its release cycle. +From the above, it seems like the release process itself might be much easier with the side-by-side folder layout. Everything is identified by a single commit and we can just build/share this commit. + +🚧 TODO - Mean time to release metric and implications ### Validation @@ -366,8 +370,7 @@ The expectation is that the size of the overall repository won’t differ much b - For SDK branches, we have the two commits that describe the two branches. These are equal at first, when we freshly snap the band branches. - For side-by-side folders, the situation isn’t much different with the two git trees for each of the band folders – `src/sdk/9.0.1xx` and `src/sdk/9.0.2xx`. These are also the same at first – only the parent tree representing the sdk folder is an object created after the snap. -- -Once we change bar.txt, we’d get a new object for the file itself and then some other: +- Once we change `bar.txt`, we’d get a new object for the file itself and then some other: - For SDK branches, we have the new git trees that describe the parent folders of the changed file leading up to the root of the repository (`/` → `src` → `sdk` → `foo`). - For side-by-side folders, the situation is again not much different – we get a new set of git trees describing the path from foo through the new `src/sdk/9.0.2xx`. @@ -383,17 +386,17 @@ Another interesting metric is the archive of sources needed to build a single SD By release source tarball we mean an archive of all sources needed to build a whole release containing several SDK bands. For side-by-side folders, this would simply equal to a VMR commit. For SDK branches, we’d have to do something about compiling the release archive as the shared components need to appear in the tarball just once. -> TODO: It’s a question whether there would be a thing such as “tarball for the whole release with all bands” but it’s probably possible to exclude the shared components from all but one band and reach the same result with SDK folder as with SDK branches. +> 🚧 TODO: It’s a question whether there would be a thing such as “tarball for the whole release with all bands” but it’s probably possible to exclude the shared components from all but one band and reach the same result with SDK folder as with SDK branches. + +> 🚧 TODO: Resiliency to band explosion – keeping bands in branches seems more resilient to outer requirements such as a sudden increase in the number of bands due to Visual Studio speeding up its release cycle. #### Git operation performance We care about the duration of common git operation duration such as checkout or status. We also need to consider scenarios in which we use the VMR – do we care about more bands than one? -SDK branches seem to have the innate benefit of not having to check out all the bands always. This seems like a big win for scenarios where we for instance make changes to one band only. But it goes away quite quickly once we need to build all of them and suddenly the checkout takes much longer. +SDK branches seem to have the innate benefit of not having to check out all the bands always. This seems like a big win for scenarios where we for instance make changes to one band only. Checking out mostly the same versions of the same files but in few copies will take its toll on the performance of git operations. -> TODO: We should figure out how often would we care about building all bands in various flows – from CI to inner dev loop. - -#### Summary of git size/performance +#### Summary From the analysis above, it seems that to declare a winner, we need to consider how often we deal with a single vs multiple bands. Both solutions are a good fit for one or the other, never both. @@ -453,23 +456,49 @@ For side-by-side, the situation is quite different. We’re suddenly influencing ### Implementation and maintenance complexity +There will be several areas where we’ll need to implement new functionality to make the above work: + +- **Code/dependency flow** - changes required to flow the code and the intermediate packages between the VMR and the individual repositories. +- **Source Build** - tooling and infrastracture to build either one or multiple bands from the new layout of the sources. +- **Product lifecycle processes** - tooling connected to processes such as branching, band snapping, servicing, etc. + +#### Code/dependency flow + +Both solutions will require us to extend the Maestro service so that it understands flowing both sources and intermediate package versions between the VMR and the individual repositories. Most of the work will be captured in extending the configuration of Maestro subscriptions and working through the problems of the backflow process itself. +For the side-by-side solution, we’ll need to further implement a new code flow model which will allow us to target specific folders within the VMR. This will also slightly complicate several aspects such as configuration of the source mappings in the VMR and how we keep track of which sources are presently in the VMR. + +#### Source Build + +Both solutions will require us to implement new behaviours into the Source Build infrastructure that will allow us: +- Build one or multiple bands from the new layout. +- Swap between restoring shared components from an intermediate package and building them from source. + +The SDK branch solution is closer to what we have today as the layout of files would stay the same while switching between restoring and building shared components would be common for both proposals. It is also already partially implemented. + +#### Product lifecycle processes + +Both solutions will require us to define, document and support processes such as snapping the bands. It doesn't look like these would differ much between the two. + +#### Maintenance + 🚧 WIP -- TODO: Much more work to implement side-by-side -- TODO: Resiliency to band explosion – keeping bands in branches seems more resilient to outer requirements such as a sudden increase in the number of bands due to Visual Studio speeding up its release cycle. +#### Summary + +The SDK folder solution is much closer to where we are these days as the layout of the VMR won't really change. That being said, the complexity of the implementation should not have a high priority when making the decision as it is a one-time cost. ### Comparison summary -| Comparison area | Preferred solution | -|-------------------------------------------------------------|:---------------------------:| -| Build | Does not matter | -| Code flow | Side-by-side folders | -| Developer experience | SDK branches | -| Release | ? | -| Validation | ? | -| VMR size & performance | SDK branches | -| Community, 3rd parties & upstream/downstream story | SDK branches | -| Implementation and maintenance complexity | SDK branches | +| Comparison area | Preferred solution | Impact on decision | +|-------------------------------------------------------------|:---------------------------:|:------------------:| +| Build | Does not matter | high | +| Code flow | Side-by-side folders | medium/high | +| Developer experience | SDK branches | high | +| Community, 3rd parties & upstream/downstream story | SDK branches | high | +| Release | Side-by-side folders | medium | +| Validation | ? | medium | +| VMR size & performance | SDK branches | medium | +| Implementation and maintenance complexity | SDK branches | low | ## Comparison evaluation From 60fca841d59c3c3d3db25757e62c91eceb121500 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Mon, 29 May 2023 16:03:11 +0200 Subject: [PATCH 26/47] More fixes --- .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 958f11d130c..d753ad7d548 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -135,7 +135,7 @@ Once we hit each release day (denoted with red vertical lines), we take the late ### Current code flow -To organize what ends up in each band and to drive the code flow between the repositories, we utilize the Maestro dependency flow, namely the Maestro channels (see [Channels, Branches and Subscriptions](../BranchesChannelsAndSubscriptions.md for details): +To organize what ends up in each band and to drive the code flow between the repositories, we utilize the Maestro dependency flow, namely the Maestro channels (see [Channels, Branches and Subscriptions](../BranchesChannelsAndSubscriptions.md) for details): - **VS-centric channels** – To better match how teams operate, some repositories align their build outputs with the Visual Studio versions, e.g. `dotnet/roslyn`. Outputs of repositories like that would end up in a channel named based on the version of VS, e.g. `17.5`. - **SDK band channels** – The repositories that are closer to how we organize the final release are then targeting channels named based on the band version, e.g. `.NET 7.0.3xx SDK`. @@ -327,7 +327,7 @@ There are few key parts of the release process: From the above, it seems like the release process itself might be much easier with the side-by-side folder layout. Everything is identified by a single commit and we can just build/share this commit. -🚧 TODO - Mean time to release metric and implications +> 🚧 TODO - Mean time to release metric and implications ### Validation @@ -445,21 +445,21 @@ From the analysis above, it seems that to declare a winner, we need to consider ### Community, 3rd parties & upstream/downstream story -There are quite big implications of how we lay the bands out in the VMR on the outside world. 3rd parties consuming .NET might or might not care about building multiple bands. Overall, the fact that we even need to have different SDK bands is native to Microsoft’s rhythm and way of bundling releases. +There are quite big implications of how we lay the bands out in the VMR on the outside world. 3rd parties consuming .NET might or might not care about building multiple bands. Overall, the fact that we even need to have different SDK bands is native to Microsoft’s rhythm and way of bundling releases. It is a question whether we will impose more pain on 3rd parties by having to build multiple band branches or by having to deal with the side-by-side layout. For SDK branches, nothing really changes in this regard as you can keep building the branch as you were doing until now and get the SDK you care about. For side-by-side, the situation is quite different. We’re suddenly influencing everyone’s experience with the VMR by projecting how we bundle releases into the layout of the code. This has negative implications such as having to check out all the bands always which would for instance prolong all repo operations. -🚧 WIP +Additionally, both proposals have the problem of locking the preview band on the latest runtime. The SDK branch proposal is more intuitive in this as the SDK branch of the preview band doesn't contain code for shared components. This is better than the side-by-side design which has the sources laid out but they are not used as the preview band will restore them from an intermediate package. This will cause confusion. -> TODO: Forks and upstreaming changes differences? Some things are common for both, such as confusion about where a change should go but that’s the same for folders/branches. +> 🚧 TODO: We should be clear on how to interact with the VMR/repositories, e.g. where do we expect the community to upstream their changes to, etc. ### Implementation and maintenance complexity There will be several areas where we’ll need to implement new functionality to make the above work: - **Code/dependency flow** - changes required to flow the code and the intermediate packages between the VMR and the individual repositories. -- **Source Build** - tooling and infrastracture to build either one or multiple bands from the new layout of the sources. +- **Source Build** - tooling and infrastructure to build either one or multiple bands from the new layout of the sources. - **Product lifecycle processes** - tooling connected to processes such as branching, band snapping, servicing, etc. #### Code/dependency flow @@ -481,7 +481,7 @@ Both solutions will require us to define, document and support processes such as #### Maintenance -🚧 WIP +> 🚧 WIP - Costs associated with keeping the infrastructure running so that we can do servicing #### Summary @@ -491,7 +491,7 @@ The SDK folder solution is much closer to where we are these days as the layout | Comparison area | Preferred solution | Impact on decision | |-------------------------------------------------------------|:---------------------------:|:------------------:| -| Build | Does not matter | high | +| Build | Does not matter | medium | | Code flow | Side-by-side folders | medium/high | | Developer experience | SDK branches | high | | Community, 3rd parties & upstream/downstream story | SDK branches | high | From 0d0aa92150ebd5a6c33224afb161cb4f95f69235 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Tue, 30 May 2023 10:35:49 +0200 Subject: [PATCH 27/47] Improve the release section --- .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index d753ad7d548..ce4964a36cf 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -321,13 +321,33 @@ Some points of interest are rather a matter of personal preference – is it bet There are few key parts of the release process: -- Figuring out what to release - we need to flow dependencies to the right places and determine which sources are coherent enough to be released. -- Compiling the binary release - we need to be able to build all the sources in such a way that shared components do not get built more than once. -- Publishing and communicating the release of the sources (Source Build release) - Identifying and publishing sources of the release so that they are easily consumed by 3rd party partners. +- **Figuring out what to release** - we need to flow dependencies to the right places and determine which sources are coherent enough to be released. +- **Compiling the binary release** - we need to be able to build all the sources in such a way that shared components do not get built more than once. +- **Publishing and communicating the release of the sources** - publishing of sources so they are easily consumed by 3rd party partners. -From the above, it seems like the release process itself might be much easier with the side-by-side folder layout. Everything is identified by a single commit and we can just build/share this commit. +#### Figuring out what to release -> 🚧 TODO - Mean time to release metric and implications +For side-by-side, we only need to identify a single commit which is easier than SDK branches, for which we need to identify a commit per each band where also the commits of the non-1xx band reference the intermediate packages of the 1xx band commit. + +#### Compiling the binary release + +It is unclear whether we would re-build everything from source or whether we'd just collect outputs of the official VMR build(s). The latter seems more likely as it seems it would be easier to re-use the existing staging pipeline which does that for `dotnet/installer` builds already. It would also make sure we only build the shared components once and we have tested those exact binaries. + +It seems that both proposals would mean we have an official VMR build to take the products from. We currently don't have the build infrastructure to build several bands together but that would happen for both proposals. + +#### Publishing and communicating the release of the sources + +Last part of the release would be the so-called Source Build release where we'd need to collect and publish the sources representing the release for the .NET distro maintainers. The side-by-side proposal would contain all of the sources within one commit which makes things easier. However, for anyone who only cares about a single band, we'd need to be able to provide some trimmed version of this commit. +For SDK branches, the situation is a bit more complicated. For a single SDK band release, only the 1xx band branch would contain the sources in such a way that you could build directly. The non-1xx band branches do not contain the source code of the shared components and only reference them as intermediate packages. This means that we'd need to compile the sources by restoring them from the 1xx band branch. For releases of multiple SDKs together, we'd also need to compile the full set of sources by bringing the branches together. + +It seems that while the SDK branches approach brings a bit more complexity, we'll have to create new processes of how to get the sources to our partners for both approaches. + +#### Mean time to release + +There is one more metric important to consider connected to releases and that is *mean time to release*. This says how long it takes from making an arbitrary change in the product to releasing it. This is very important is it says how reactive we might be in situations like security fixes. + +The side-by-side solution needs fewer steps to flow a change between the VMR and the individual repositories but this difference is not dramatic. The flow still needs to happen to/from the same amount of individual repository branches. It only happens for one VMR branch as opposed to all SDK band branches as with the SDK branches proposal. +The key improvement that Unified Build brings is flattening the dependency graph which will have a big impact and improve this metric regardless of what we choose here. ### Validation @@ -384,7 +404,7 @@ Another interesting metric is the archive of sources needed to build a single SD #### Release source tarball size By release source tarball we mean an archive of all sources needed to build a whole release containing several SDK bands. -For side-by-side folders, this would simply equal to a VMR commit. For SDK branches, we’d have to do something about compiling the release archive as the shared components need to appear in the tarball just once. +For side-by-side folders, this would simply equal to a VMR commit. For SDK branches, we’d have to do something about compiling the release archive as the shared components need to appear in the tarball just once. For that, we'd have to specify what such a layout would look like and how we would build that as there is no immediate plan for that in the SDK branches proposal. > 🚧 TODO: It’s a question whether there would be a thing such as “tarball for the whole release with all bands” but it’s probably possible to exclude the shared components from all but one band and reach the same result with SDK folder as with SDK branches. @@ -492,10 +512,10 @@ The SDK folder solution is much closer to where we are these days as the layout | Comparison area | Preferred solution | Impact on decision | |-------------------------------------------------------------|:---------------------------:|:------------------:| | Build | Does not matter | medium | -| Code flow | Side-by-side folders | medium/high | +| Code flow | Side-by-side | medium/high | | Developer experience | SDK branches | high | | Community, 3rd parties & upstream/downstream story | SDK branches | high | -| Release | Side-by-side folders | medium | +| Release | Side-by-side | medium | | Validation | ? | medium | | VMR size & performance | SDK branches | medium | | Implementation and maintenance complexity | SDK branches | low | From 09499990bb507aa52e4becd2e9d7b4d5929ad862 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Tue, 30 May 2023 10:41:13 +0200 Subject: [PATCH 28/47] More cosmetics --- .../UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md | 6 ++---- .../VMR-Managing-SDK-Bands-Side-by-Side-folders.md | 2 -- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md index aa3bc8377db..77fc958f4a4 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md @@ -96,11 +96,9 @@ sequenceDiagram Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have 📄 RUN_2 par Parallel backflow of intermediates - VMR_1xx->>SDK_1xx: Backflow of 📦 VMR_2 ➡️ 📄 SDK_1.2 - SDK_1xx-->>VMR_1xx: No-op + VMR_1xx->>SDK_1xx: Backflow of 📦 VMR_2 and - VMR_2xx->>SDK_2xx: Backflow of 📦 VMR_3 ➡️ 📄 SDK_2.2 - SDK_2xx-->>VMR_2xx: No-op + VMR_2xx->>SDK_2xx: Backflow of 📦 VMR_3 end ``` diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md index c9d9236f72e..10180cb5617 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md @@ -105,10 +105,8 @@ sequenceDiagram par Parallel backflow of intermediates VMR->>SDK_1xx: Backflow of 📦 VMR_2 - SDK_1xx-->>VMR: No-op and VMR->>SDK_2xx: Backflow of 📦 VMR_2 - SDK_2xx-->>VMR: No-op end ``` From fb3aa702468d67e2371d6669af87161ecd77bd37 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Tue, 30 May 2023 10:57:24 +0200 Subject: [PATCH 29/47] Release section in proposals --- .../UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md | 9 ++++++--- .../VMR-Managing-SDK-Bands-Side-by-Side-folders.md | 8 +++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md index 77fc958f4a4..2a447605806 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md @@ -152,10 +152,13 @@ After the last step, the `1xx` VMR branch has the sources of `dotnet/runtime` th ## Release -On a release day, we need to make sure the SDK branches are coherent. This means that the lastly published intermediates from the `1xx` branch have flown to all of the other SDK band branches. For that to happen, we need to enable the package flow for the preview band and consume the newest bits to validate everything. -Since the shared components were built only once and stored inside of the intermediates, we can assemble the packages from all band branches and release them together, similarly to how we do it today. +The release has three main phases: -The Source Build releases where we publish sources to distro maintainers, would have to be adjusted and in cases when building a single non-1xx band only, we'd have to make sure the distro maintainers can acquire a tarball with the complete sources. +1. **Figuring out what to release** - We need to make sure the SDK branches are coherent. This means that the lastly published intermediates from the `1xx` branch have flown to all of the other SDK band branches. For that to happen, we need to enable the package flow for the preview band and consume the newest bits to validate everything. + +2. **Compiling the binary release** - Since the shared components were built only once and stored inside of the intermediates, we can assemble the packages from all band branches and release them together, similarly to how we do it today. The staging pipeline could assemble the build products from the official builds similarly to how we do it today. + +3. **Publishing and communicating the release of the sources** - Publishing of sources so they are easily consumed by 3rd party partners would differ based on whether the consumer cares about one or all bands. or a single SDK band release, only the 1xx band branch would contain the sources in such a way that you could build directly. The non-1xx band branches do not contain the source code of the shared components and only reference them as intermediate packages. This means that we'd need to compile the sources by restoring them from the 1xx band branch. For releases of multiple SDKs together, we'd also need to compile the full set of sources by bringing the branches together. ## Band snap diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md index 10180cb5617..b64fc9e87d5 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md @@ -154,7 +154,13 @@ After the last step, both SDK branches have the same sources of `dotnet/runtime` ## Release -Release would mean we'd have to make all released SDK band components use sources to build and use their dependencies from. After that, it should be quite simple to build everything together as all the sources would happen to be within one commit. +The release has three main phases: + +1. **Figuring out what to release** - We need to make sure the SDK bands are coherent. This means that the preview bands do not restore shared components from intermediate packages anymore and that we can build and validate the whole VMR commit we're about to release. + +2. **Compiling the binary release** - We need to collect the build products of the official VMR build of a commit that we're releasing. The staging pipeline would pull the artifacts from there which is very close to pulling it from installer today. + +3. **Publishing and communicating the release of the sources** - The VMR contains all of the sources within one commit which makes things easy. However, for anyone who only cares about a single band, we'd need to be able to provide some trimmed-down version of the released commit. ## Band snap From 9a5cfaf8d48d572c504595f0685e2a2bda5efe30 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Tue, 30 May 2023 11:25:24 +0200 Subject: [PATCH 30/47] Fix TODOs --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index ce4964a36cf..ea245cead1c 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -406,7 +406,7 @@ Another interesting metric is the archive of sources needed to build a single SD By release source tarball we mean an archive of all sources needed to build a whole release containing several SDK bands. For side-by-side folders, this would simply equal to a VMR commit. For SDK branches, we’d have to do something about compiling the release archive as the shared components need to appear in the tarball just once. For that, we'd have to specify what such a layout would look like and how we would build that as there is no immediate plan for that in the SDK branches proposal. -> 🚧 TODO: It’s a question whether there would be a thing such as “tarball for the whole release with all bands” but it’s probably possible to exclude the shared components from all but one band and reach the same result with SDK folder as with SDK branches. +> 🚧 TODO: It’s a question whether there would be a thing such as “tarball for the whole release with all bands” and what the flow for distro maintaners would be. If there wasn't a need for this, the SDK branch proposal would benefit from this but it would still need a story for assembling sources of a single non-1xx band. > 🚧 TODO: Resiliency to band explosion – keeping bands in branches seems more resilient to outer requirements such as a sudden increase in the number of bands due to Visual Studio speeding up its release cycle. @@ -472,7 +472,7 @@ For side-by-side, the situation is quite different. We’re suddenly influencing Additionally, both proposals have the problem of locking the preview band on the latest runtime. The SDK branch proposal is more intuitive in this as the SDK branch of the preview band doesn't contain code for shared components. This is better than the side-by-side design which has the sources laid out but they are not used as the preview band will restore them from an intermediate package. This will cause confusion. -> 🚧 TODO: We should be clear on how to interact with the VMR/repositories, e.g. where do we expect the community to upstream their changes to, etc. +Regardless of the chosen solution, we must be clear on how to interact with the VMR/repositories (e.g. where do we expect the community to upstream their changes to) and we must have communicate it well. ### Implementation and maintenance complexity @@ -501,7 +501,7 @@ Both solutions will require us to define, document and support processes such as #### Maintenance -> 🚧 WIP - Costs associated with keeping the infrastructure running so that we can do servicing +> 🚧 WIP - Costs associated with keeping the infrastructure running so that we can do servicing. I don't think there will be many differences though. #### Summary From 7a55e96e0d87f0077c9f9c6fef6771cfb11c7bfe Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Tue, 30 May 2023 14:32:05 +0200 Subject: [PATCH 31/47] Adjust priorities --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index ea245cead1c..aa7a6c79fe5 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -511,13 +511,13 @@ The SDK folder solution is much closer to where we are these days as the layout | Comparison area | Preferred solution | Impact on decision | |-------------------------------------------------------------|:---------------------------:|:------------------:| -| Build | Does not matter | medium | -| Code flow | Side-by-side | medium/high | -| Developer experience | SDK branches | high | -| Community, 3rd parties & upstream/downstream story | SDK branches | high | +| Build | Does not matter | none | +| Code flow | Side-by-side | **medium/high** | +| Developer experience | SDK branches | **high** | +| Community, 3rd parties & upstream/downstream story | SDK branches | **high** | | Release | Side-by-side | medium | | Validation | ? | medium | -| VMR size & performance | SDK branches | medium | +| VMR size & performance | SDK branches | **medium/high** | | Implementation and maintenance complexity | SDK branches | low | ## Comparison evaluation From ef9e7e17c365ababe4fa924635017007ab3de52d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emek=20Vysok=C3=BD?= Date: Tue, 6 Jun 2023 23:48:52 -0700 Subject: [PATCH 32/47] Apply suggestions from Matt Co-authored-by: Matt Mitchell --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index aa7a6c79fe5..0255eb01d6c 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -255,7 +255,7 @@ The long-term plan is to transition to building and releasing using the Virtual Currently, we end up with SDK branches in the `dotnet/installer` repository and the release process makes sure to package those into the final product. With releasing from the VMR, we have two ways we can approach this: - **SDK branches** - [📄 Detailed description of the proposal](./VMR-Managing-SDK-Bands-SDK-branches.md) - The first obvious solution that comes to mind considering where we are today. The bottom line is that we'd just keep using SDK branches in the VMR the same way we have them today. This is, in fact, what we’re currently already doing with today’s read-only VMR-lite where we synchronize the SDK branches of `dotnet/installer`. Each branch/commit of the VMR would then keep producing a single SDK. However, we need to make sure the shared bits are the same in each released SDK branch – we’d say the SDK branches would be coherent then. We also need to make sure that changes made to the shared components in VMR’s SDK branches are flown everywhere appropriately. + Keep using SDK branches in the VMR the same way we have them today. This is, in fact, what we’re currently already doing with today’s read-only VMR-lite where we synchronize the SDK branches of `dotnet/installer`. Each branch/commit of the VMR would then keep producing a single SDK. However, we need to make sure the shared bits are the same in each released SDK branch – we’d say the SDK branches would be coherent then. We also need to make sure that changes made to the shared components in VMR’s SDK branches are flown everywhere appropriately. - **Side-by-Side folders in the VMR** - [📄 Detailed description of the proposal](./VMR-Managing-SDK-Bands-Side-by-Side-folders.md) The second proposed solution would be to take the inverse approach and, instead of having SDK branches, we’d organize VMR’s branches based on the shared bits (e.g. `release/9.0`) and place the different bands of the SDK components side by side in the VMR, e.g. `src/sdk/9.0.1xx`. This makes sure that the shared bits exist only once and each commit of the VMR contains all bands which are coherent. @@ -286,7 +286,7 @@ Regardless of how this will happen, there’s no real difference whether we’d The various situations can be summarized as follows: - For individual repository builds, the build process will restore the dependencies from intermediate packages. -- For the VMR build shared components are built with the first band and put in a local NuGet cache. Other bands restore shared components from the cache. +- For the VMR build shared components are built with the first band and put in a local NuGet feed. Other bands restore shared components from the feed. Upon inspection of the proposals, the above **doesn't differ for the given proposal which means the selected architecture doesn’t really affect the build** and we don’t need to consider it during evaluation. There will, however, be a change to the build process needed to accommodate for the new locations of the bands within the VMR. @@ -294,7 +294,7 @@ Upon inspection of the proposals, the above **doesn't differ for the given propo Code flow is where the two approaches differ dramatically. The biggest difference is during breaking changes in shared components and how/when these get resolved. For a simple forward flow where a shared component is changed, the code flow needed to update all branches does not differ much as shown in the detailed designs of each of the proposals. -The situation gets more interesting for breaking changes. where the side-by-side solution shows much more resiliency to breaking changes as those need to be dealt with immediately when we do the initial change. The VMR won’t ever get into an inconsistent state as the bands live within a single commit. Whereas in the SDK folder solution, the breaking change is created and is dealt with in a follow-up step once code flows to the branch of the other band. +The situation gets more interesting for breaking changes. The side-by-side solution shows much more resiliency to breaking changes as those need to be dealt with immediately when we do the initial shared component change. The VMR won’t ever get into an inconsistent state as the bands live within a single commit. Whereas in the SDK branch solution, the breaking change is created and is dealt with in a follow-up step once code flows to the branch of the other band. Other difference is in the number of steps in the flow to reach a coherent state. This is lower for side-by-side as incoherency is impossible from the start and the system does not need to deal with it. The number of changes needed is not that much higher though as we still need to flow changes to the same number of branches of all individual repositories that are part of the change. This does not differ much whether we flow folders from one or more branches. @@ -306,7 +306,7 @@ Important area to consider is how the day-to-day interactions of .NET developers - **Git operation complexity** – actions such as checking file history, diffing bands, backporting changes between bands.. - **Git operation performance** – duration of operations such as `git status`. This area is considered separately [later in the document](#vmr-size--performance). -That said, it’s important to realize that most of the work and the VMR is the most active in the preview time where we only have one SDK band. +**_That said, it’s important to realize that most of the work and the VMR is the most active in the preview time where we only have one SDK band._** It is obvious that the SDK branch proposal wins in most of these categories. It stays more true to git by using commits/branches for file versioning rather than folders with version using in their name as it is with the side-by-side layout. This works well with all kinds of tooling and workflows: From fee509fe36a17924d2b6f9c24f0e635a261609f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emek=20Vysok=C3=BD?= Date: Tue, 6 Jun 2023 23:58:14 -0700 Subject: [PATCH 33/47] "Rolling" build --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 0255eb01d6c..81642a4d222 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -278,7 +278,7 @@ To compare the two proposals, we identified several areas which might be impacte The current (Microsoft) way of building the SDKs is based on re-using previously built artifacts which come into the build as NuGet packages. The components are flown as already compiled packages. This means that when building each SDK band, we only restore the shared components which were built only once at some point in the past during the official build of their source repository. In .NET 9.0, when the full VMR code flow is in place (see [VMR Code and Build Workflow](./VMR-Code-And-Build-Workflow.md) for details), we’ll be building the individual repositories on more occasions: -- During the official build of their source repository – this will use other repo’s intermediate packages whenever they depend on another repo as if they were just built from source. +- During the rolling build of their source repository – this will use other repo’s intermediate packages whenever they depend on another repo as if they were just built from source. - During the official build of the VMR – when we build the whole product from source. This will end up producing an intermediate package per each individual repository built as part of the whole build. This means that in several places, we’ll be building both the shared components and the SDK band components from source where their dependencies will be either freshly built or restored in a local NuGet cache. From 83c2cc0b01baef71b8dfde43a965fa00ba467435 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Thu, 8 Jun 2023 12:53:22 +0200 Subject: [PATCH 34/47] Fix diagram for branches --- .../UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md index 2a447605806..0640f086174 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md @@ -90,7 +90,7 @@ sequenceDiagram runtime->>VMR_1xx: Flow of 📄 RUN_2 Note over VMR_1xx: 📦 VMR_2 intermediates are built - runtime->>VMR_2xx: Flow of 📄 RUN_2 + VMR_1xx->>VMR_2xx: Flow of 📦 VMR_2
(runtime intermediates) Note over VMR_2xx: 📦 VMR_3 intermediates are built Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have 📄 RUN_2 From cf3f2b7de9af5c16b1f7797ed0f5c5b8a09610ea Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Thu, 8 Jun 2023 13:02:40 +0200 Subject: [PATCH 35/47] Adjust comparison summary --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 81642a4d222..85d2e281e9f 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -511,14 +511,17 @@ The SDK folder solution is much closer to where we are these days as the layout | Comparison area | Preferred solution | Impact on decision | |-------------------------------------------------------------|:---------------------------:|:------------------:| -| Build | Does not matter | none | -| Code flow | Side-by-side | **medium/high** | +| Build | Side-by-side | low | +| Code flow | Side-by-side | low/medium\* | | Developer experience | SDK branches | **high** | | Community, 3rd parties & upstream/downstream story | SDK branches | **high** | | Release | Side-by-side | medium | -| Validation | ? | medium | +| Validation | tie | medium | | VMR size & performance | SDK branches | **medium/high** | -| Implementation and maintenance complexity | SDK branches | low | +| Implementation and maintenance complexity | SDK branches | low\*\* | + +> \* The impact of code flow may be low, given that most changes in shared components that require changes in the SDK happen when the 1xx band is the only band. So the code flow is not really affected by this edge case. Over all the simplification we are getting with using the VMR is massive regardless of the chosen solution. +> \*\* The implementation complexity is a one-time cost (but much lower for SDK branches). Maintenance seems to be similar for both.solutions. ## Comparison evaluation From 755a6f4d587d992ef0d0fdb66e93165695210697 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Thu, 8 Jun 2023 13:04:49 +0200 Subject: [PATCH 36/47] Fill out maintenance --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 85d2e281e9f..43e8027a140 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -501,7 +501,7 @@ Both solutions will require us to define, document and support processes such as #### Maintenance -> 🚧 WIP - Costs associated with keeping the infrastructure running so that we can do servicing. I don't think there will be many differences though. +Both solutions will require the Maestro dependency (back-)flow system to work. The solution will not differ much between the two as we'll be synchronizing code into the VMR and back based on some rules. It's a detail whether those are folders in one branch or multiple. #### Summary From 57ea7c46b7b4477f3b1bc32dd7bc9a436fd594c7 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Thu, 8 Jun 2023 13:13:51 +0200 Subject: [PATCH 37/47] Add a note explaining "at least 3 bands" --- .../UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md index 0640f086174..052cafd70d8 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md @@ -168,7 +168,8 @@ To create a new band, and for the ease, it would be the best to do the snap in t E.g. `src/sdk/9.0.1xx` to `src/sdk/9.0.2xx` 2. Remove sources of shared components in the `2xx` branch. Adjust package versions and point the new band to the intermediate packages of shared components from the last release. 3. Configure Maestro subscriptions between new VMR bands and their individual repository counterparts. -4. If there are at least 3 bands, configure subscriptions of the currently released band to consume the intermediates of the `1xx` band. +4. If there are at least 3 bands, configure subscriptions of the currently released band to consume the intermediates of the `1xx` band. + > Note: We need 3 bands at minimum because The first one is there from the beginning so we need to wait until a second one only gets out of preview which happens when we snap the third one. 5. Maestro flows the changes from the VMR and creates the appropriate branches in the individual repositories. This makes sure that the new (preview) band is locked down to use the latest released shared components and that the a newly released bands will start getting the newest shared components built in the `1xx` branch. From 09475492af958a8fb152bea199589a030b8d6eee Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Mon, 12 Jun 2023 13:57:57 +0200 Subject: [PATCH 38/47] Explain why we want shared components only once --- .../UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md index 052cafd70d8..f7a32af45b5 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md @@ -20,9 +20,11 @@ The layout of files will stay almost the same as today's VMR-lite: └── sdk ``` -The problem with this is that each SDK branch would contain source code for all shared components. This would cause problems with keeping the sources of these synchronized. To work around that, we'd have to make an adjustment. This adjustment would require a feature in Source Build where we could specify whether a components is built form source or restored from its intermediate package. -This functionality actually already exists and each repository already references its dependencies via `eng/Version.Details.xml` so that it can build inside of its individual repository. +The problem with this is that each SDK branch would contain source code for all shared components. This would cause problems with keeping the sources of these synchronized. +Furthermore, we don't really even want this behavior as for instance, the preview band always stays locked to the last released version of the shared components until right before the release happens. +To work around that, we'd have to make an adjustment. This adjustment would require a feature in Source Build where we could specify whether a components is built form source or restored from its intermediate package. +This functionality actually already exists and each repository already references its dependencies via `eng/Version.Details.xml` so that it can build inside of its individual repository. Considering we have this capability, we'd then change the VMR contents so that the SDK branches of other bands than the first one (`1xx`) would not contain the sources of the shared components. Instead, they would flow in the branches via a package dependency flow where the branches would reference the intermediate packages that would be built from the `1xx` branch. This will give us more flexibility such as locking down the version of the shared components in the preview band to the last released version. From 2b24e267a4f7f72f8552a250c4b8b656f4ce95af Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Mon, 12 Jun 2023 14:05:18 +0200 Subject: [PATCH 39/47] Resolve few more comments --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 43e8027a140..918e8a9769c 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -294,7 +294,7 @@ Upon inspection of the proposals, the above **doesn't differ for the given propo Code flow is where the two approaches differ dramatically. The biggest difference is during breaking changes in shared components and how/when these get resolved. For a simple forward flow where a shared component is changed, the code flow needed to update all branches does not differ much as shown in the detailed designs of each of the proposals. -The situation gets more interesting for breaking changes. The side-by-side solution shows much more resiliency to breaking changes as those need to be dealt with immediately when we do the initial shared component change. The VMR won’t ever get into an inconsistent state as the bands live within a single commit. Whereas in the SDK branch solution, the breaking change is created and is dealt with in a follow-up step once code flows to the branch of the other band. +The situation gets more interesting for breaking changes. However, that does not happen often once we have multiple bands out already. This would mean API changes which does not really happen or rarely when dependencies EOL or infrastructural changes are needed. Regardless, the side-by-side solution shows much more resiliency to breaking changes as those need to be dealt with immediately when we do the initial shared component change. The VMR won’t ever get into an inconsistent state as the bands live within a single commit. Whereas in the SDK branch solution, the breaking change is created and is dealt with in a follow-up step once code flows to the branch of the other band. Other difference is in the number of steps in the flow to reach a coherent state. This is lower for side-by-side as incoherency is impossible from the start and the system does not need to deal with it. The number of changes needed is not that much higher though as we still need to flow changes to the same number of branches of all individual repositories that are part of the change. This does not differ much whether we flow folders from one or more branches. @@ -331,7 +331,7 @@ For side-by-side, we only need to identify a single commit which is easier than #### Compiling the binary release -It is unclear whether we would re-build everything from source or whether we'd just collect outputs of the official VMR build(s). The latter seems more likely as it seems it would be easier to re-use the existing staging pipeline which does that for `dotnet/installer` builds already. It would also make sure we only build the shared components once and we have tested those exact binaries. +For the release, we'd just collect outputs of the official VMR build(s) so it's quite similar to today's staging pipeline behavour which does that for `dotnet/installer` builds already. This also makes sure we only build the shared components once and we have tested those exact binaries already. It seems that both proposals would mean we have an official VMR build to take the products from. We currently don't have the build infrastructure to build several bands together but that would happen for both proposals. From 917c1e1976ad174d416f02c98621c5747c3287ec Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Mon, 12 Jun 2023 15:27:38 +0200 Subject: [PATCH 40/47] Add band life cycles --- .../VMR-Managing-SDK-Bands-SDK-branches.md | 35 +++++++++++-------- ...Managing-SDK-Bands-Side-by-Side-folders.md | 27 ++++++++------ 2 files changed, 37 insertions(+), 25 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md index f7a32af45b5..3c0077146f4 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md @@ -52,6 +52,27 @@ To summarize the characteristics: - Each commit of the `1xx` branch produces a single runtime and single SDK. The non-1xx branches do not contain all the code however. - Commits of the `non-1xx` branches produce SDKs only and their shared components are referenced as packages built from the `1xx` branch. +## Band life cycle + +- **Product preview time** + The preview time is when most of the development happens and the VMR would contain a single band only. For this time, we only have the 1xx branch in the VMR and everything works the same way as now. + +- **Band preview time** + The band that is created the latest and is to be released next is called the preview band. Except of the 1xx, each preview band is locked down to use the latest released version of the shared components for the time of development. Since this proposal won't put the sources of the shared components in the non-1xx branches, it will be quite obvious that the dependencies come from packages. + +- **Band snap** + To create a new band, and for the ease, it would be the best to do the snap in the VMR from where it would be flown to the appropriate branches in the individual repositories: + + 1. Create the new branch based off of the current one. + E.g. `src/sdk/9.0.1xx` to `src/sdk/9.0.2xx` + 2. Remove sources of shared components in the `2xx` branch. Adjust package versions and point the new band to the intermediate packages of shared components from the last release. + 3. Configure Maestro subscriptions between new VMR bands and their individual repository counterparts. + 4. If there are at least 3 bands, configure subscriptions of the currently released band to consume the intermediates of the `1xx` band. + > Note: We need 3 bands at minimum because The first one is there from the beginning so we need to wait until a second one only gets out of preview which happens when we snap the third one. + 5. Maestro flows the changes from the VMR and creates the appropriate branches in the individual repositories. + + This makes sure that the new (preview) band is locked down to use the latest released shared components and that the a newly released bands will start getting the newest shared components built in the `1xx` branch. + ## Working with the code The proposed layout has some problematic implications. Let's consider the following scenarios: @@ -161,17 +182,3 @@ The release has three main phases: 2. **Compiling the binary release** - Since the shared components were built only once and stored inside of the intermediates, we can assemble the packages from all band branches and release them together, similarly to how we do it today. The staging pipeline could assemble the build products from the official builds similarly to how we do it today. 3. **Publishing and communicating the release of the sources** - Publishing of sources so they are easily consumed by 3rd party partners would differ based on whether the consumer cares about one or all bands. or a single SDK band release, only the 1xx band branch would contain the sources in such a way that you could build directly. The non-1xx band branches do not contain the source code of the shared components and only reference them as intermediate packages. This means that we'd need to compile the sources by restoring them from the 1xx band branch. For releases of multiple SDKs together, we'd also need to compile the full set of sources by bringing the branches together. - -## Band snap - -To create a new band, and for the ease, it would be the best to do the snap in the VMR from where it would be flown to the appropriate branches in the individual repositories: - -1. Create the new branch based off of the current one. - E.g. `src/sdk/9.0.1xx` to `src/sdk/9.0.2xx` -2. Remove sources of shared components in the `2xx` branch. Adjust package versions and point the new band to the intermediate packages of shared components from the last release. -3. Configure Maestro subscriptions between new VMR bands and their individual repository counterparts. -4. If there are at least 3 bands, configure subscriptions of the currently released band to consume the intermediates of the `1xx` band. - > Note: We need 3 bands at minimum because The first one is there from the beginning so we need to wait until a second one only gets out of preview which happens when we snap the third one. -5. Maestro flows the changes from the VMR and creates the appropriate branches in the individual repositories. - -This makes sure that the new (preview) band is locked down to use the latest released shared components and that the a newly released bands will start getting the newest shared components built in the `1xx` branch. diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md index b64fc9e87d5..aa4be901e1b 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md @@ -72,7 +72,22 @@ To summarize the characteristics: - VMR has branches for each major .NET version, e.g. `release/9.0`. - Each commit of the VMR contains code for all SDK bands with shared components having a single copy. -> TODO: ❓❓❓ What does a single band preview-time VMR look like? Single band VMR is in the `main` where we develop preview version of .NET. Would we have this layout from the start? +## Band life cycle + +- **Product preview time** + The preview time is when most of the development happens and the VMR would contain a single band only. It would be quite obvious what is in the VMR and how to work with the code as it would be very close to what we have in the VMR today - just a single folder per repository. + +- **Band preview time** + The band that is created the latest and is to be released next is called the preview band. Except of the 1xx, each preview band is locked down to use the latest released version of the shared components for the time of development. This means that the band would have to depend on and use the intermediate packages instead of the sources. **This will be confusing as it won't be quite clear that this is happening.** Changing the sources of the shared components would not manifest during a rebuild of the preview band when working with the repository. + +- **Band snap** + To create a new band, and for the ease, it would be the best to do the snap in the VMR from where it would be flown to the appropriate branches in the individual repositories: + + 1. Create the new band folders by copying the sources of the latest band. + E.g. `src/sdk/9.0.1xx` to `src/sdk/9.0.2xx` + 2. Adjust versions, point the new band to the new runtime intermediate package. + 3. Configure Maestro subscriptions between new VMR bands and their individual repository counterparts. + 4. Maestro flows the changes from the VMR and creates the appropriate branches in the individual repositories. ## Working with the code @@ -161,13 +176,3 @@ The release has three main phases: 2. **Compiling the binary release** - We need to collect the build products of the official VMR build of a commit that we're releasing. The staging pipeline would pull the artifacts from there which is very close to pulling it from installer today. 3. **Publishing and communicating the release of the sources** - The VMR contains all of the sources within one commit which makes things easy. However, for anyone who only cares about a single band, we'd need to be able to provide some trimmed-down version of the released commit. - -## Band snap - -To create a new band, and for the ease, it would be the best to do the snap in the VMR from where it would be flown to the appropriate branches in the individual repositories: - -1. Create the new band folders by copying the sources of the latest band. - E.g. `src/sdk/9.0.1xx` to `src/sdk/9.0.2xx` -2. Adjust versions, point the new band to the new runtime intermediate package. -3. Configure Maestro subscriptions between new VMR bands and their individual repository counterparts. -4. Maestro flows the changes from the VMR and creates the appropriate branches in the individual repositories. From d13d22464b0dbead01de3ad4deabae73bb73acb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emek=20Vysok=C3=BD?= Date: Mon, 12 Jun 2023 07:21:27 -0700 Subject: [PATCH 41/47] Update Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md Co-authored-by: Jan Kotas --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 918e8a9769c..719709ee11e 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -331,7 +331,7 @@ For side-by-side, we only need to identify a single commit which is easier than #### Compiling the binary release -For the release, we'd just collect outputs of the official VMR build(s) so it's quite similar to today's staging pipeline behavour which does that for `dotnet/installer` builds already. This also makes sure we only build the shared components once and we have tested those exact binaries already. +For the release, we'd just collect outputs of the official VMR build(s) so it's quite similar to today's staging pipeline behavior which does that for `dotnet/installer` builds already. This also makes sure we only build the shared components once and we have tested those exact binaries already. It seems that both proposals would mean we have an official VMR build to take the products from. We currently don't have the build infrastructure to build several bands together but that would happen for both proposals. From 8d1fb7c40a5cd6d974cbda645a338e45792a3e19 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Fri, 16 Jun 2023 14:04:25 +0200 Subject: [PATCH 42/47] Intermediates -> Build output packages --- .../VMR-Managing-SDK-Bands-SDK-branches.md | 44 +++++++++---------- ...Managing-SDK-Bands-Side-by-Side-folders.md | 28 ++++++------ .../UnifiedBuild/VMR-Managing-SDK-Bands.md | 22 +++++----- 3 files changed, 47 insertions(+), 47 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md index 3c0077146f4..a542780f16d 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-SDK-branches.md @@ -23,10 +23,10 @@ The layout of files will stay almost the same as today's VMR-lite: The problem with this is that each SDK branch would contain source code for all shared components. This would cause problems with keeping the sources of these synchronized. Furthermore, we don't really even want this behavior as for instance, the preview band always stays locked to the last released version of the shared components until right before the release happens. -To work around that, we'd have to make an adjustment. This adjustment would require a feature in Source Build where we could specify whether a components is built form source or restored from its intermediate package. +To work around that, we'd have to make an adjustment. This adjustment would require a feature in Source Build where we could specify whether a components is built form source or restored from its build output package. This functionality actually already exists and each repository already references its dependencies via `eng/Version.Details.xml` so that it can build inside of its individual repository. Considering we have this capability, we'd then change the VMR contents so that the SDK branches of other bands than the first one (`1xx`) would not contain the sources of the shared components. -Instead, they would flow in the branches via a package dependency flow where the branches would reference the intermediate packages that would be built from the `1xx` branch. This will give us more flexibility such as locking down the version of the shared components in the preview band to the last released version. +Instead, they would flow in the branches via a package dependency flow where the branches would reference the build output packages that would be built from the `1xx` branch. This will give us more flexibility such as locking down the version of the shared components in the preview band to the last released version. The complete layout would then look like this: @@ -40,8 +40,8 @@ The complete layout would then look like this: # release/9.0.2xx and other branch └── src - ├── roslyn # references the runtime and arcade intermediates instead of sources - └── sdk # references the runtime and arcade intermediates instead of sources + ├── roslyn # references the runtime and arcade build output packages instead of sources + └── sdk # references the runtime and arcade build output packages instead of sources ``` To summarize the characteristics: @@ -65,9 +65,9 @@ To summarize the characteristics: 1. Create the new branch based off of the current one. E.g. `src/sdk/9.0.1xx` to `src/sdk/9.0.2xx` - 2. Remove sources of shared components in the `2xx` branch. Adjust package versions and point the new band to the intermediate packages of shared components from the last release. + 2. Remove sources of shared components in the `2xx` branch. Adjust package versions and point the new band to the build output packages of shared components from the last release. 3. Configure Maestro subscriptions between new VMR bands and their individual repository counterparts. - 4. If there are at least 3 bands, configure subscriptions of the currently released band to consume the intermediates of the `1xx` band. + 4. If there are at least 3 bands, configure subscriptions of the currently released band to consume the build output packages of the `1xx` band. > Note: We need 3 bands at minimum because The first one is there from the beginning so we need to wait until a second one only gets out of preview which happens when we snap the third one. 5. Maestro flows the changes from the VMR and creates the appropriate branches in the individual repositories. @@ -82,11 +82,11 @@ The proposed layout has some problematic implications. Let's consider the follow We need to make sure both of these scenarios are easy to do but the layout of the sources doesn't allow that out of the box. -It seems that to make this work, we'd need to be able to tell Source Build to easily swap between using the sources and the intermediate packages of the shared components. +It seems that to make this work, we'd need to be able to tell Source Build to easily swap between using the sources and the build output packages of the shared components. When someone would be interested in these flows, we should have a mechanism to also checkout the sources and reference them during the build. There are couple of possibilities: 1. The `src/` folder of non-1xx branches would contain submodules pointing to the original individual repositories. These would not be used in most flows but could be activated. When we'd be flowing changes from the 1xx branch, we could also change where the submodule points. -2. Have a script that would check the components out into `src/` onto the same location where they are placed in the 1xx branch. It would also create some dummy file to signal that Source Build should ignore `Version.Details.xml` when restoring the intermediates but rather build the sources. The `src/` locations and the signal file would be ".gitignored". The dev would then have to backport their changes from withing the folders to either the 1xx branch or the individual repositories. +2. Have a script that would check the components out into `src/` onto the same location where they are placed in the 1xx branch. It would also create some dummy file to signal that Source Build should ignore `Version.Details.xml` when restoring the build output packages but rather build the sources. The `src/` locations and the signal file would be ".gitignored". The dev would then have to backport their changes from withing the folders to either the 1xx branch or the individual repositories. 3. We could just expect the individual repositories to be checked out somewhere else on developer's disk (e.g. next to the VMR itself) and Source Build would know to find and build those instead (again through an invisible signal file for instance). The first option seems quite straightforward but the individual repository doesn't necessarily have to have the same contents as its counterpart in the VMR which might be problematic. @@ -112,13 +112,13 @@ sequenceDiagram runtime->>runtime: New change ➡️ RUN_2 runtime->>VMR_1xx: Flow of 📄 RUN_2 - Note over VMR_1xx: 📦 VMR_2 intermediates are built - VMR_1xx->>VMR_2xx: Flow of 📦 VMR_2
(runtime intermediates) - Note over VMR_2xx: 📦 VMR_3 intermediates are built + Note over VMR_1xx: 📦 VMR_2 build output packages are built + VMR_1xx->>VMR_2xx: Flow of 📦 VMR_2
(runtime build output packages) + Note over VMR_2xx: 📦 VMR_3 build output packages are built Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx have 📄 RUN_2 - par Parallel backflow of intermediates + par Parallel backflow of build output packages VMR_1xx->>SDK_1xx: Backflow of 📦 VMR_2 and VMR_2xx->>SDK_2xx: Backflow of 📦 VMR_3 @@ -144,7 +144,7 @@ sequenceDiagram Note over VMR_1xx: ❌ Requires a change in SDK VMR_1xx->>VMR_1xx: Change needed in src/sdk
Creating 📄 SDK_1.2 deactivate VMR_1xx - Note over VMR_1xx: 📦 VMR_2 intermediates are built + Note over VMR_1xx: 📦 VMR_2 build output packages are built VMR_1xx->>SDK_1xx: Flow of 📄 SDK_1.2, 📦 VMR_2 @@ -153,7 +153,7 @@ sequenceDiagram Note over VMR_2xx: ❌ Requires a change in SDK VMR_2xx->>VMR_2xx: Change needed in src/sdk
Creating 📄 SDK_2.2 deactivate VMR_2xx - Note over VMR_2xx: 📦 VMR_3 intermediates are built + Note over VMR_2xx: 📦 VMR_3 build output packages are built VMR_2xx->>SDK_2xx: Flow of 📄 SDK_2.2, 📦 VMR_3 Note over VMR_2xx: ✅ Coherent state
VMR 1xx and 2xx both use 📄 RUN_2 @@ -164,12 +164,12 @@ The diagram shows: 1. A change was made in `dotnet/runtime`. 2. The change is flown to VMR's `1xx` branch where a PR with the source change is opened. 3. The PR build fails and more changes are needed under the `src/sdk` folder. PR is merged. - Official VMR build publishes intermediate packages for each repository. -4. New sources of the `1xx` band, together with the we new runtime intermediate package are flown back to `dotnet/sdk`. -5. Intermediate packages of shared components are flown to VMR's 2xx branch. + Official VMR build publishes build output packages for each repository. +4. New sources of the `1xx` band, together with the we new runtime build output package are flown back to `dotnet/sdk`. +5. Build output packages of shared components are flown to VMR's 2xx branch. 6. The PR build fails and, similarly to the `1xx` branch PR, more changes are needed under the `src/sdk` folder. PR is merged. - Official VMR build publishes intermediate packages for each repository. -7. New sources of the `2xx` band, together with the we new runtime intermediate package are flown back to `dotnet/sdk`. + Official VMR build publishes build output packages for each repository. +7. New sources of the `2xx` band, together with the we new runtime build output package are flown back to `dotnet/sdk`. After the last step, the `1xx` VMR branch has the sources of `dotnet/runtime` that are packaged and used by the `2xx` branch which means they're coherent. @@ -177,8 +177,8 @@ After the last step, the `1xx` VMR branch has the sources of `dotnet/runtime` th The release has three main phases: -1. **Figuring out what to release** - We need to make sure the SDK branches are coherent. This means that the lastly published intermediates from the `1xx` branch have flown to all of the other SDK band branches. For that to happen, we need to enable the package flow for the preview band and consume the newest bits to validate everything. +1. **Figuring out what to release** - We need to make sure the SDK branches are coherent. This means that the lastly published build output packages from the `1xx` branch have flown to all of the other SDK band branches. For that to happen, we need to enable the package flow for the preview band and consume the newest bits to validate everything. -2. **Compiling the binary release** - Since the shared components were built only once and stored inside of the intermediates, we can assemble the packages from all band branches and release them together, similarly to how we do it today. The staging pipeline could assemble the build products from the official builds similarly to how we do it today. +2. **Compiling the binary release** - Since the shared components were built only once and stored inside of the build output packages, we can assemble the packages from all band branches and release them together, similarly to how we do it today. The staging pipeline could assemble the build products from the official builds similarly to how we do it today. -3. **Publishing and communicating the release of the sources** - Publishing of sources so they are easily consumed by 3rd party partners would differ based on whether the consumer cares about one or all bands. or a single SDK band release, only the 1xx band branch would contain the sources in such a way that you could build directly. The non-1xx band branches do not contain the source code of the shared components and only reference them as intermediate packages. This means that we'd need to compile the sources by restoring them from the 1xx band branch. For releases of multiple SDKs together, we'd also need to compile the full set of sources by bringing the branches together. +3. **Publishing and communicating the release of the sources** - Publishing of sources so they are easily consumed by 3rd party partners would differ based on whether the consumer cares about one or all bands. or a single SDK band release, only the 1xx band branch would contain the sources in such a way that you could build directly. The non-1xx band branches do not contain the source code of the shared components and only reference them as build output packages. This means that we'd need to compile the sources by restoring them from the 1xx band branch. For releases of multiple SDKs together, we'd also need to compile the full set of sources by bringing the branches together. diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md index aa4be901e1b..bee3d726449 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands-Side-by-Side-folders.md @@ -43,11 +43,11 @@ There could be also variations of this such as this: The impact of the actual structure is not so important in the context of this design but it's an important detail to consider that will influence the usability of the VMR. -This layout however doesn't comply with the requirement where the preview band is locked down to use the latest released runtime. To work around that, we'd have to make an adjustment. This adjustment would require a feature in Source Build where we could specify whether a components is built form source or restored from its intermediate package. +This layout however doesn't comply with the requirement where the preview band is locked down to use the latest released runtime. To work around that, we'd have to make an adjustment. This adjustment would require a feature in Source Build where we could specify whether a components is built form source or restored from its build output package. This functionality actually already exists and each repository already references its dependencies via `eng/Version.Details.xml` so that it can build inside of its individual repository. Considering we have this capability, we'd then change the VMR contents so that the SDK-specific components of other bands than the first one (`1xx`) would not contain the sources of the shared components. -Instead, they would reference intermediate packages that would be built from the `1xx` branch. This will give us more flexibility such as locking down the version of the shared components in the preview band to the last released version. +Instead, they would reference build output packages that would be built from the `1xx` branch. This will give us more flexibility such as locking down the version of the shared components in the preview band to the last released version. The complete layout would then look like this: @@ -55,10 +55,10 @@ The complete layout would then look like this: └── src ├── roslyn │   ├── 9.0.1xx - │   └── 9.0.2xx # references the runtime and arcade intermediates instead of sources + │   └── 9.0.2xx # references the runtime and arcade build output packages instead of sources ├── sdk │   ├── 9.0.1xx - │   └── 9.0.2xx # references the runtime and arcade intermediates instead of sources + │   └── 9.0.2xx # references the runtime and arcade build output packages instead of sources └── shared ├── arcade └── runtime @@ -78,14 +78,14 @@ To summarize the characteristics: The preview time is when most of the development happens and the VMR would contain a single band only. It would be quite obvious what is in the VMR and how to work with the code as it would be very close to what we have in the VMR today - just a single folder per repository. - **Band preview time** - The band that is created the latest and is to be released next is called the preview band. Except of the 1xx, each preview band is locked down to use the latest released version of the shared components for the time of development. This means that the band would have to depend on and use the intermediate packages instead of the sources. **This will be confusing as it won't be quite clear that this is happening.** Changing the sources of the shared components would not manifest during a rebuild of the preview band when working with the repository. + The band that is created the latest and is to be released next is called the preview band. Except of the 1xx, each preview band is locked down to use the latest released version of the shared components for the time of development. This means that the band would have to depend on and use the build output packages instead of the sources. **This will be confusing as it won't be quite clear that this is happening.** Changing the sources of the shared components would not manifest during a rebuild of the preview band when working with the repository. - **Band snap** To create a new band, and for the ease, it would be the best to do the snap in the VMR from where it would be flown to the appropriate branches in the individual repositories: 1. Create the new band folders by copying the sources of the latest band. E.g. `src/sdk/9.0.1xx` to `src/sdk/9.0.2xx` - 2. Adjust versions, point the new band to the new runtime intermediate package. + 2. Adjust versions, point the new band to the new runtime build output package. 3. Configure Maestro subscriptions between new VMR bands and their individual repository counterparts. 4. Maestro flows the changes from the VMR and creates the appropriate branches in the individual repositories. @@ -96,9 +96,9 @@ The proposed layout has some problematic implications. Let's consider the follow 1. A developer wants to make a cross-repo change in a preview band and a shared component. 2. Distro maintainer wants to build the latest band only. -It might be counter-intuitive to build a commit only to find out that the non-1xx bands do not contain the runtime from that commit. For instance, when you change a sources of a shared component to rebuild a non-1xx band only for the change to not manifest. This is due to the fact that the band would restore the dependencies from the intermediate package instead. This is not ideal as it will be quite hard to test the branch against arbitrary code. +It might be counter-intuitive to build a commit only to find out that the non-1xx bands do not contain the runtime from that commit. For instance, when you change a sources of a shared component to rebuild a non-1xx band only for the change to not manifest. This is due to the fact that the band would restore the dependencies from the build output package instead. This is not ideal as it will be quite hard to test the branch against arbitrary code. -It seems that to make this work, we'd need to be able to tell Source Build to easily swap between using the sources and the intermediate packages of the shared components. +It seems that to make this work, we'd need to be able to tell Source Build to easily swap between using the sources and the build output packages of the shared components. When someone would be interested in these flows, they would point Source Build to sources somewhere on their disk - either directly in the VMR (e.g. `src/runtime`) or in a full clone of the individual repository checked out outside of the VMR folder. ## Code flow @@ -116,9 +116,9 @@ sequenceDiagram runtime->>runtime: Change in runtime runtime->>VMR: Flow of 📄 RUN_2 - Note over VMR: 📦 Intermediate VMR_2 is built + Note over VMR: 📦 Build output package VMR_2 is built - par Parallel backflow of intermediates + par Parallel backflow of build output packages VMR->>SDK_1xx: Backflow of 📦 VMR_2 and VMR->>SDK_2xx: Backflow of 📦 VMR_2 @@ -146,7 +146,7 @@ sequenceDiagram VMR->>VMR: Change is made to sdk, creating 📄 SDK_1.2, SDK_2.2 deactivate VMR - Note over VMR: 📦 VMR_2 intermediates are built + Note over VMR: 📦 VMR_2 build output package is built par Parallel backflow VMR->>SDK_1xx: Backflow of 📄 SDK_1.2, 📦 VMR_2 @@ -160,9 +160,9 @@ The diagram shows: 1. A change was made in `dotnet/runtime`. 2. The change is flown to the VMR SDK branch where a PR with the source change is opened. 3. Sources of both SDK bands are changed, PR is merged. - Official VMR build publishes intermediate packages for each repository. + Official VMR build publishes build output packages for each repository. This triggers the next steps in parallel. -4. New sources of both bands, together with the we new runtime intermediate package are flown back to `dotnet/sdk`. +4. New sources of both bands, together with the we new runtime build output package are flown back to `dotnet/sdk`. 5. Same as step `4.` but for the other SDK band. After the last step, both SDK branches have the same sources of `dotnet/runtime` which means they're coherent. @@ -171,7 +171,7 @@ After the last step, both SDK branches have the same sources of `dotnet/runtime` The release has three main phases: -1. **Figuring out what to release** - We need to make sure the SDK bands are coherent. This means that the preview bands do not restore shared components from intermediate packages anymore and that we can build and validate the whole VMR commit we're about to release. +1. **Figuring out what to release** - We need to make sure the SDK bands are coherent. This means that the preview bands do not restore shared components from build output packages anymore and that we can build and validate the whole VMR commit we're about to release. 2. **Compiling the binary release** - We need to collect the build products of the official VMR build of a commit that we're releasing. The staging pipeline would pull the artifacts from there which is very close to pulling it from installer today. diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 719709ee11e..dbe126b9612 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -16,7 +16,7 @@ This section presents more precise definitions of common terms used in this docu - **Microsoft build** – The current build methodology used to assemble the final product that Microsoft ships binaries from. - **SDK branch** – A git branch related to a specific SDK band, e.g. `release/8.0.1xx`. - **Non-SDK branch** – A git branch common for all associated SDK bands, e.g. `release/8.0`. -- **Intermediate packages** – Packaged build products of each of the individual repositories either built in their individual repo source-build or during the build of each individual repository component within the full VMR build. These are used during package flow between the VMR and the individual repositories, and in the VMR build itself. +- **Build output packages** – Packaged build products of each of the individual repositories either built in their individual repo source-build or during the build of each individual repository component within the full VMR build. These are used during package flow between the VMR and the individual repositories, and in the VMR build itself. - **Maestro** - a service used by the .NET team to manage dependency flow between repositories. ## SDK bands @@ -242,7 +242,7 @@ flowchart TD VMR-->other ``` -The updates of the VMR will no longer happen when `dotnet/installer` is updated but rather whenever a new build appears in one of the channels. The information making the builds of the `dev/17.4` branch of `dotnet/roslyn` end up in the `7.0.3xx` SDK band is stored in the configuration of Maestro subscriptions between those branches. The Maestro service will have to follow this configuration and update the corresponding sources (the right folder of the right branch) of the VMR accordingly. It will also have to flow changes the other way too when a change is made in the VMR or when VMR produces a new intermediate package. **This is all new functionality that Maestro will have to implement.** That being said, both proposed solutions seem orthogonal to this and the impact on the Maestro changes needed should be minimal. +The updates of the VMR will no longer happen when `dotnet/installer` is updated but rather whenever a new build appears in one of the channels. The information making the builds of the `dev/17.4` branch of `dotnet/roslyn` end up in the `7.0.3xx` SDK band is stored in the configuration of Maestro subscriptions between those branches. The Maestro service will have to follow this configuration and update the corresponding sources (the right folder of the right branch) of the VMR accordingly. It will also have to flow changes the other way too when a change is made in the VMR or when VMR produces a new build output package. **This is all new functionality that Maestro will have to implement.** That being said, both proposed solutions seem orthogonal to this and the impact on the Maestro changes needed should be minimal. ### Release process @@ -278,14 +278,14 @@ To compare the two proposals, we identified several areas which might be impacte The current (Microsoft) way of building the SDKs is based on re-using previously built artifacts which come into the build as NuGet packages. The components are flown as already compiled packages. This means that when building each SDK band, we only restore the shared components which were built only once at some point in the past during the official build of their source repository. In .NET 9.0, when the full VMR code flow is in place (see [VMR Code and Build Workflow](./VMR-Code-And-Build-Workflow.md) for details), we’ll be building the individual repositories on more occasions: -- During the rolling build of their source repository – this will use other repo’s intermediate packages whenever they depend on another repo as if they were just built from source. -- During the official build of the VMR – when we build the whole product from source. This will end up producing an intermediate package per each individual repository built as part of the whole build. +- During the rolling build of their source repository – this will use other repo’s build output packages whenever they depend on another repo as if they were just built from source. +- During the official build of the VMR – when we build the whole product from source. This will end up producing an build output package per each individual repository built as part of the whole build. This means that in several places, we’ll be building both the shared components and the SDK band components from source where their dependencies will be either freshly built or restored in a local NuGet cache. Regardless of how this will happen, there’s no real difference whether we’d build the SDK bands from folders which are side by side in a folder of a checked-out branch or which are checkouts of different SDK branches. The various situations can be summarized as follows: -- For individual repository builds, the build process will restore the dependencies from intermediate packages. +- For individual repository builds, the build process will restore the dependencies from build output packages. - For the VMR build shared components are built with the first band and put in a local NuGet feed. Other bands restore shared components from the feed. Upon inspection of the proposals, the above **doesn't differ for the given proposal which means the selected architecture doesn’t really affect the build** and we don’t need to consider it during evaluation. There will, however, be a change to the build process needed to accommodate for the new locations of the bands within the VMR. @@ -327,7 +327,7 @@ There are few key parts of the release process: #### Figuring out what to release -For side-by-side, we only need to identify a single commit which is easier than SDK branches, for which we need to identify a commit per each band where also the commits of the non-1xx band reference the intermediate packages of the 1xx band commit. +For side-by-side, we only need to identify a single commit which is easier than SDK branches, for which we need to identify a commit per each band where also the commits of the non-1xx band reference the build output packages of the 1xx band commit. #### Compiling the binary release @@ -338,7 +338,7 @@ It seems that both proposals would mean we have an official VMR build to take th #### Publishing and communicating the release of the sources Last part of the release would be the so-called Source Build release where we'd need to collect and publish the sources representing the release for the .NET distro maintainers. The side-by-side proposal would contain all of the sources within one commit which makes things easier. However, for anyone who only cares about a single band, we'd need to be able to provide some trimmed version of this commit. -For SDK branches, the situation is a bit more complicated. For a single SDK band release, only the 1xx band branch would contain the sources in such a way that you could build directly. The non-1xx band branches do not contain the source code of the shared components and only reference them as intermediate packages. This means that we'd need to compile the sources by restoring them from the 1xx band branch. For releases of multiple SDKs together, we'd also need to compile the full set of sources by bringing the branches together. +For SDK branches, the situation is a bit more complicated. For a single SDK band release, only the 1xx band branch would contain the sources in such a way that you could build directly. The non-1xx band branches do not contain the source code of the shared components and only reference them as build output packages. This means that we'd need to compile the sources by restoring them from the 1xx band branch. For releases of multiple SDKs together, we'd also need to compile the full set of sources by bringing the branches together. It seems that while the SDK branches approach brings a bit more complexity, we'll have to create new processes of how to get the sources to our partners for both approaches. @@ -470,7 +470,7 @@ There are quite big implications of how we lay the bands out in the VMR on the o For SDK branches, nothing really changes in this regard as you can keep building the branch as you were doing until now and get the SDK you care about. For side-by-side, the situation is quite different. We’re suddenly influencing everyone’s experience with the VMR by projecting how we bundle releases into the layout of the code. This has negative implications such as having to check out all the bands always which would for instance prolong all repo operations. -Additionally, both proposals have the problem of locking the preview band on the latest runtime. The SDK branch proposal is more intuitive in this as the SDK branch of the preview band doesn't contain code for shared components. This is better than the side-by-side design which has the sources laid out but they are not used as the preview band will restore them from an intermediate package. This will cause confusion. +Additionally, both proposals have the problem of locking the preview band on the latest runtime. The SDK branch proposal is more intuitive in this as the SDK branch of the preview band doesn't contain code for shared components. This is better than the side-by-side design which has the sources laid out but they are not used as the preview band will restore them from an build output package. This will cause confusion. Regardless of the chosen solution, we must be clear on how to interact with the VMR/repositories (e.g. where do we expect the community to upstream their changes to) and we must have communicate it well. @@ -478,20 +478,20 @@ Regardless of the chosen solution, we must be clear on how to interact with the There will be several areas where we’ll need to implement new functionality to make the above work: -- **Code/dependency flow** - changes required to flow the code and the intermediate packages between the VMR and the individual repositories. +- **Code/dependency flow** - changes required to flow the code and the build output packages between the VMR and the individual repositories. - **Source Build** - tooling and infrastructure to build either one or multiple bands from the new layout of the sources. - **Product lifecycle processes** - tooling connected to processes such as branching, band snapping, servicing, etc. #### Code/dependency flow -Both solutions will require us to extend the Maestro service so that it understands flowing both sources and intermediate package versions between the VMR and the individual repositories. Most of the work will be captured in extending the configuration of Maestro subscriptions and working through the problems of the backflow process itself. +Both solutions will require us to extend the Maestro service so that it understands flowing both sources and build output package versions between the VMR and the individual repositories. Most of the work will be captured in extending the configuration of Maestro subscriptions and working through the problems of the backflow process itself. For the side-by-side solution, we’ll need to further implement a new code flow model which will allow us to target specific folders within the VMR. This will also slightly complicate several aspects such as configuration of the source mappings in the VMR and how we keep track of which sources are presently in the VMR. #### Source Build Both solutions will require us to implement new behaviours into the Source Build infrastructure that will allow us: - Build one or multiple bands from the new layout. -- Swap between restoring shared components from an intermediate package and building them from source. +- Swap between restoring shared components from an build output package and building them from source. The SDK branch solution is closer to what we have today as the layout of files would stay the same while switching between restoring and building shared components would be common for both proposals. It is also already partially implemented. From d6f2d8272ddbdaf84700718d2d3d49079bb0e2c3 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Fri, 16 Jun 2023 14:11:31 +0200 Subject: [PATCH 43/47] Mark SDK branches as the winner of the build area --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index dbe126b9612..4b25b440f23 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -288,7 +288,9 @@ The various situations can be summarized as follows: - For individual repository builds, the build process will restore the dependencies from build output packages. - For the VMR build shared components are built with the first band and put in a local NuGet feed. Other bands restore shared components from the feed. -Upon inspection of the proposals, the above **doesn't differ for the given proposal which means the selected architecture doesn’t really affect the build** and we don’t need to consider it during evaluation. There will, however, be a change to the build process needed to accommodate for the new locations of the bands within the VMR. +Upon inspection of the proposals, the above seems to work for both proposals as we'd be able to supply all of the sources. However, the difference lies in the build process itself. +For SDK branches, this does not really differ as the layout stays roughly the same. For side-by-side folders, the build would get more complicated than today as each component would have to know which SDK folder of its dependency it should use. It seems quite error prone and difficult to figure out where dependencies came from once we have built everything. +For this reason, the SDK branches solution wins but the impact on the final architecture is not as big as this would be a one-time cost. ### Code flow @@ -511,7 +513,7 @@ The SDK folder solution is much closer to where we are these days as the layout | Comparison area | Preferred solution | Impact on decision | |-------------------------------------------------------------|:---------------------------:|:------------------:| -| Build | Side-by-side | low | +| Build | SDK branches | low | | Code flow | Side-by-side | low/medium\* | | Developer experience | SDK branches | **high** | | Community, 3rd parties & upstream/downstream story | SDK branches | **high** | From dc2c797e56dce2282e7953275460e1b924a8acb1 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Fri, 16 Jun 2023 14:13:30 +0200 Subject: [PATCH 44/47] Explain shared components --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 4b25b440f23..4906ffbda17 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -17,13 +17,23 @@ This section presents more precise definitions of common terms used in this docu - **SDK branch** – A git branch related to a specific SDK band, e.g. `release/8.0.1xx`. - **Non-SDK branch** – A git branch common for all associated SDK bands, e.g. `release/8.0`. - **Build output packages** – Packaged build products of each of the individual repositories either built in their individual repo source-build or during the build of each individual repository component within the full VMR build. These are used during package flow between the VMR and the individual repositories, and in the VMR build itself. +- **Shared component** - A component that is shared between multiple SDK bands. For example, the .NET runtime is shared between all SDK bands. +- **Band-specific component** - The opposite of a *shared component*. A component whose version differs between SDK bands. - **Maestro** - a service used by the .NET team to manage dependency flow between repositories. ## SDK bands To align with new Visual Studio releases, .NET SDK updates sometimes include new features or new versions of components such as Roslyn or MSBuild. These new features or components may be incompatible with the versions that shipped in previous SDK updates for the same major or minor version. To differentiate such updates, the .NET SDK uses the concept of feature bands. While these bands differ in their feature set they share some common parts such as the .NET runtime. -To best illustrate how this works in practice, let’s imagine the following timeline for repositories with SDK branches (e.g., `dotnet/sdk`): +### Shared- vs band-specific components + +A shared component is a component that is shared between multiple SDK bands. For instance, the .NET runtime is a good example of a shared component while the Roslyn compiler would typically differ between bands. + +During the development cycle, it can happen that shared components require band-specific changes and they can become band-specific for some time. Usually, this is a point in time event and the component becomes shared again after some time. A good example of this is the Arcade repository which contains build tools/infrastructure. However, there are no strict rules about this and it is possible that a component remains band-specific. + +### Example + +To best illustrate how SDK bands are developer and released in practice, let’s imagine the following timeline for repositories with SDK branches (e.g., `dotnet/sdk`): ```mermaid %%{init: { 'gitGraph': {'showCommitLabel': false }}}%% From 7df4aa4a525961881ad8d809706f783077b615bd Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Fri, 16 Jun 2023 14:29:11 +0200 Subject: [PATCH 45/47] Add conclusion --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index 4906ffbda17..ea7d565cb22 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -541,3 +541,7 @@ Both approaches seem to have pros and cons. To choose the best approach, we shou When doing so, we should take into account the product lifecycle. At first, the most active busy development happens in the preview time (on main branches). Only after the release, we move into servicing and only after then we branch out and snap the bands. We expect the servicing period to last very long but with less activity. During active development, we should prioritize **developer experience** and **code flow** as that has impact on product construction. During servicing we need the system to be as frictionless as possible so that we’re able to react to external impulses fast and release fixes fast which hints at prioritizing **code flow**, **release**, and **maintenance complexity**. Some areas should be important in both periods such as **community impact**. + +## Conclusion + +From the above, it seems that the SDK branches proposal brings more flexibility and benefits over the side-by-side folders. It will mean much easier development experience for the developers and the community. It will also mean that we can keep the VMR size and performance better in check. The only area where the side-by-side folders seem to be better is the release process but that is not a high priority area. The implementation complexity for both code flow infrastructure as well as Source Build is much lower with SDK branches even though this is a one-time cost. From c8470344234a9b3428b65822a896be7ddc8c5e5d Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Fri, 16 Jun 2023 14:47:51 +0200 Subject: [PATCH 46/47] Fix typo --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index ea7d565cb22..d98e65063e4 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -25,7 +25,7 @@ This section presents more precise definitions of common terms used in this docu To align with new Visual Studio releases, .NET SDK updates sometimes include new features or new versions of components such as Roslyn or MSBuild. These new features or components may be incompatible with the versions that shipped in previous SDK updates for the same major or minor version. To differentiate such updates, the .NET SDK uses the concept of feature bands. While these bands differ in their feature set they share some common parts such as the .NET runtime. -### Shared- vs band-specific components +### Shared vs band-specific components A shared component is a component that is shared between multiple SDK bands. For instance, the .NET runtime is a good example of a shared component while the Roslyn compiler would typically differ between bands. From d40a1b55b34221f1a0187f9ef5d359422cedac5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emek=20Vysok=C3=BD?= Date: Mon, 26 Jun 2023 04:09:57 -0700 Subject: [PATCH 47/47] Fix a typo Co-authored-by: Dominik Viererbe --- Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md index d98e65063e4..9f4037a1b41 100644 --- a/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md +++ b/Documentation/UnifiedBuild/VMR-Managing-SDK-Bands.md @@ -33,7 +33,7 @@ During the development cycle, it can happen that shared components require band- ### Example -To best illustrate how SDK bands are developer and released in practice, let’s imagine the following timeline for repositories with SDK branches (e.g., `dotnet/sdk`): +To best illustrate how SDK bands are developed and released in practice, let’s imagine the following timeline for repositories with SDK branches (e.g., `dotnet/sdk`): ```mermaid %%{init: { 'gitGraph': {'showCommitLabel': false }}}%%