From 97700146119bc2c7fed3983fd2d98d6215de7b47 Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Wed, 15 Oct 2025 12:29:16 -0500 Subject: [PATCH 01/21] Doc: feature band source building --- Documentation/feature-band-source-building.md | 797 ++++++++++++++++++ 1 file changed, 797 insertions(+) create mode 100644 Documentation/feature-band-source-building.md diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md new file mode 100644 index 0000000000..b735fb9917 --- /dev/null +++ b/Documentation/feature-band-source-building.md @@ -0,0 +1,797 @@ +# .NET VMR Feature Band Source Building Guide for Linux Distro Maintainers + +This document provides guidance for Linux distribution maintainers on source +building .NET SDK feature band branches of the Virtual Monolithic Repository +(VMR). It covers bootstrapping and ongoing servicing workflows when building +multiple SDK feature bands. + +## What are .NET SDK Feature Bands? + +.NET SDK feature bands are different versions of the .NET SDK that provide +additional tooling functionality during the servicing lifetime of a .NET major +release. These bands primarily support new Visual Studio scenarios and are +identified by differences in the first digit of the patch numbers in the .NET +SDK version. + +Each feature band shares the same .NET runtime but includes different SDK +tooling. For more information, see the [official +documentation](https://learn.microsoft.com/en-us/dotnet/core/releases-and-support#feature-bands-sdk-only). + +## Key Terminology + +- **VMR** - Virtual Monolithic Repository containing .NET source code +- **N** - Placeholder for the .NET major version number (e.g., `N.0.1xx` + where `N`=10 for .NET 10) +- **1xx band** - The initial SDK feature band that ships with .NET GA and + contains the shared runtime components +- **2xx/3xx/Nxx bands** - Later SDK feature bands with enhanced tooling +- **Previously Source-Built (PSB) artifacts** - Artifacts from previous builds + that provide dependencies but are not redistributed +- **Shared component artifacts** - Shared runtime and foundational components + from the 1xx band build that are redistributed across feature bands + +## Overview + +Building .NET SDK feature bands from source follows a two-stage approach: + +1. **Build the 1xx band** - This produces the shared .NET runtime and the 1xx + SDK tooling. The 1xx band contains all runtime components and serves as the + foundation for other bands. + +2. **Build additional bands (2xx, 3xx, etc.)** - These bands contain only the + SDK tooling components that differ from the 1xx band. They reuse the shared + runtime from the 1xx build. + +Each feature band branch in the VMR contains only the source code that differs +from the 1xx band. Components that don't change between bands are excluded +from the later band branches to avoid confusion and maintenance overhead. + +```mermaid +flowchart LR + subgraph "1xx Band (Full VMR)" + Runtime[.NET Runtime] + Core[Core Libraries] + SDK1xx[1xx SDK Tools] + end + + subgraph "2xx Band (Subset VMR)" + SDK2xx[2xx SDK Tools -
Enhanced] + end + + subgraph "3xx Band (Subset VMR)" + SDK3xx[3xx SDK Tools -
Latest Features] + end + + Runtime -.-> SDK2xx + Runtime -.-> SDK3xx + Core -.-> SDK2xx + Core -.-> SDK3xx + + SDK1xx --> SDK2xx + SDK2xx --> SDK3xx +``` + +*Dotted lines indicate shared runtime components from the 1xx band; solid +lines show SDK tooling dependencies between bands* + +## Understanding Bootstrap vs Sequential Build + +### Bootstrap Process (Two-Stage) +Bootstrapping is required when you don't have suitable source-built artifacts +to build a release. It's a two-stage process: + +1. **Stage 1**: Use Microsoft-provided source-built artifacts and Microsoft + SDK to build the target release +2. **Stage 2**: Use the outputs from Stage 1 to rebuild the same release from + source + +The second stage validates that the release can be built using only +source-built components and produces the final artifacts for distribution. + +```mermaid +flowchart TD + subgraph Bootstrap["Bootstrap (Two-Stage)"] + MS_SDK[Microsoft SDK] --> Stage1[Stage 1 Build] + MS_Artifacts[Microsoft Source-Built
Artifacts] --> Stage1 + Stage1 --> SB_SDK[Source-Built SDK] + Stage1 --> SB_Artifacts[Source-Built Artifacts] + SB_SDK --> Stage2[Stage 2 Build] + SB_Artifacts --> Stage2 + Stage2 --> Final1[Final Source-Built SDK] + Stage2 --> Final2[Final Source-Built
Artifacts] + end +``` + +See [Bootstrapping Guidelines](bootstrapping-guidelines.md) for more info. + +### Sequential Build (Single-Stage) +When you have appropriate source-built artifacts from previous builds, you can +build directly without bootstrapping. This is the typical workflow for ongoing +releases. + +```mermaid +flowchart TD + subgraph Sequential["Sequential Build (Single-Stage)"] + Prev_SDK[Previous Source-Built SDK] --> Build + Prev_Artifacts[Previous Source-Built
Artifacts] --> Build + Build --> Final1[Final Source-Built SDK] + Build --> Final2[Final Source-Built
Artifacts] + end +``` + +## Required Build Inputs + +When building feature bands, you'll work with two types of source-built +artifacts: + +### Previously Source-Built (PSB) Artifacts +These are artifacts from previous servicing releases or bootstrap builds: +- Used as build dependencies but not redistributed in outputs +- Come from previous monthly .NET releases (e.g., 8.0.1 artifacts when + building 8.0.2) +- Subject to [poison detection](leak-detection.md) to ensure no Microsoft + binaries leak into outputs + +### Shared Component Artifacts +These are shared runtime and foundational components from the 1xx band: +- Come from the 1xx band build in the same release cycle +- Can be used as dependencies AND redistributed in outputs +- Include shared runtime and foundational components that all feature bands + depend on + +## Feature Band Characteristics + +### 1xx Band (GA/Non-breaking) +The foundational feature band that ships with .NET GA releases: +- **Content**: Contains the complete VMR with .NET runtime, core libraries, + and SDK tooling +- **Purpose**: Provides the stable runtime foundation that all other bands + depend on +- **Release cycle**: Follows .NET GA release schedule with monthly servicing + updates +- **Compatibility**: Non-breaking changes only during servicing + +### 2xx Band (Stable/Enhanced) +Enhanced SDK tooling that ships with Visual Studio updates: +- **Content**: Contains only SDK tooling differences from 1xx band (subset + VMR) +- **Purpose**: Adds enhanced developer tooling and Visual Studio integration + features +- **Release cycle**: Aligns with Visual Studio feature releases (not + necessarily monthly) +- **Compatibility**: Stable features that have been validated in 3xx previews +- **Dependencies**: Always uses shared runtime components from 1xx band + +### 3xx Band (Preview/Insiders) +Cutting-edge SDK features for early adopters and insiders: +- **Content**: Contains only SDK tooling differences from 2xx band (subset + VMR) +- **Purpose**: Delivers latest experimental features and early access + capabilities +- **Release cycle**: Independent preview releases, not aligned with other + bands +- **Compatibility**: Preview/experimental features that may change before + stabilization +- **Dependencies**: Uses 2xx tooling for builds, shares runtime from 1xx band +- **Flow**: Selected features flow from 3xx → 2xx over time through + cherry-picking + +## Build Requirements by Feature Band + +Each feature band has specific requirements for SDKs and artifacts: + +### 1xx Band Build Requirements +- **Bootstrap (any version)**: Two-stage process using Microsoft source-built + 1xx artifacts + Microsoft SDK + script +- **Servicing (N.0.101+)**: Source-built SDK and artifacts from the previous + 1xx release + +Note: Only the 1xx SDK is guaranteed to build the shared runtime components + +### 2xx Band Build Requirements +- **Bootstrap (any version)**: Two-stage process using Microsoft source-built + 2xx artifacts + Microsoft 2xx SDK + prep script +- **Initial Release (N.0.200)**: Latest source-built 1xx artifacts + Latest + source-built 1xx SDK +- **Servicing (N.0.201+)**: Source-built SDK and artifacts from the previous + 2xx release + Latest released 1xx artifacts + +### 3xx Band Build Requirements +- **Bootstrap (any version)**: Two-stage process using Microsoft source-built + 2xx artifacts + Microsoft 2xx SDK + prep script +- **Initial Release (N.0.300)**: Latest source-built 1xx artifacts + Latest + source-built 2xx artifacts + Latest source-built 2xx SDK +- **Servicing (N.0.301+)**: Source-built SDK from the previous 2xx release + + Latest released 1xx artifacts + Latest released 2xx artifacts + +### Feature Band Key Points +- Release schedules across branches are not necessarily aligned. +- 1xx band produces the shared runtime that all bands use. +- Not all 3xx check-ins flow to 2xx (changes are cherry-picked as needed). +- 3xx builds always use 2xx tooling (never the 3xx SDK). +- 3xx artifacts are only used for distribution, never as build inputs for + other bands. +- Servicing builds use source-built SDKs from the previous releases of the + same band (or 2xx for 3xx). +- For bootstrapping of 2xx/3xx feature bands, stage 2 does not require the 1xx + shared components as input. The artifacts produced by stage 1 contain all + required packages. + +## Build Command Arguments + +Feature band builds make use of these relevant command-line arguments: + +- `--with-packages` - Provides PSB artifacts +- `--with-shared-components` - Provides shared component artifacts from 1xx build +- `--with-sdk` - Specifies the SDK to use for building + +## Distro Maintainer Workflows + +The following sections describe the workflows for different scenarios. + +### Input Artifacts Summary + +**For 1xx band builds:** +- **Bootstrap**: + - PSB artifacts: Microsoft-built previous N.0.1xx release + - SDK: Microsoft-built previous N.0.1xx release +- **Servicing**: + - PSB artifacts: Source-built previous N.0.1xx release + - SDK: Source-built previous N.0.1xx release + +**For 2xx band builds:** +- **Initial release (N.0.200)**: + - Shared component artifacts: Source-built current N.0.1xx release + - PSB artifacts: Source-built previous N.0.1xx release + - SDK: Source-built previous N.0.1xx release +- **Bootstrap initial release (N.0.200)**: + - Shared component artifacts: Source-built current N.0.1xx release + - PSB artifacts: Microsoft-built previous N.0.1xx release + - SDK: Microsoft-built previous N.0.1xx release +- **Bootstrap (N.0.201+)**: + - Shared component artifacts: Source-built current N.0.1xx release + - PSB artifacts: Microsoft-built previous N.0.2xx release + - SDK: Microsoft-built previous N.0.2xx release +- **Servicing (N.0.201+)**: + - Shared component artifacts: Source-built current N.0.1xx release + - PSB artifacts: Source-built previous N.0.2xx release + - SDK: Source-built previous N.0.2xx release + +**For 3xx band builds:** +- **Initial release (N.0.300)**: + - Shared component artifacts: Source-built current N.0.1xx release + - PSB artifacts: Source-built previous N.0.2xx release + - SDK: Source-built previous N.0.2xx release +- **Bootstrap (N.0.300)**: + - Shared component artifacts: Source-built current N.0.1xx release + - PSB artifacts: Microsoft-built previous N.0.2xx release + - SDK: Microsoft-built previous N.0.2xx release +- **Bootstrap (N.0.301+)**: + - Shared component artifacts: Source-built current N.0.1xx release + - PSB artifacts: Microsoft-built previous N.0.2xx release + - SDK: Microsoft-built previous N.0.2xx release +- **Servicing (N.0.301+)**: + - Shared component artifacts: Source-built current N.0.1xx release + - PSB artifacts: Source-built previous N.0.2xx release + - SDK: Source-built previous N.0.2xx release + +### Scenario 1: 1xx Band Bootstrap + +For the initial bootstrap of a 1xx band (two-stage process): + +```bash +# Clone VMR branch/tag +git clone -b <1xx-release-branch> https://github.com/dotnet/dotnet.git +cd dotnet + +# === +# Stage 1: Build with Microsoft artifacts +# === + +# Downloads Microsoft source-built 1xx artifacts and Microsoft SDK +./prep-source-build.sh + +# Build the SDK +./build.sh --source-only + +# Extract and store the built SDK and artifacts +tar -ozxf artifacts/assets/Release/dotnet-sdk-*-tar.gz \ + -C /tmp/dotnet/sdk +tar -ozxf artifacts/assets/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ + -C /tmp/dotnet/artifacts + +# === +# Stage 2: Rebuild using stage 1 outputs +# === + +./build.sh --source-only --with-sdk /tmp/dotnet/sdk --with-packages /tmp/dotnet/artifacts + +# Final source-built outputs available in artifacts/x64/Release/ +``` + +```mermaid +flowchart LR + subgraph Msft["Previous 1xx MS Release"] + MS_SDK[Microsoft-built
1xx SDK] + MS_Art[Microsoft-built
1xx artifacts] + end + + subgraph SB["Current SB 1xx Release"] + subgraph Stage1["Stage 1: Bootstrap Build"] + Build1((Build Process)) + S1_SDK[Stage 1 SDK] + S1_Art[Stage 1 Artifacts] + end + + subgraph Stage2["Stage 2: Final Build"] + Build2((Build Process)) + Final_SDK[Final 1xx SDK] + Final_Art[Final 1xx Artifacts] + end + end + + MS_SDK -.-> Build1 + MS_Art -.->|PSB| Build1 + Build1 --> S1_SDK + Build1 --> S1_Art + S1_SDK -.-> Build2 + S1_Art -.->|PSB| Build2 + Build2 --> Final_SDK + Build2 --> Final_Art + + classDef msRelease fill:#9b9bdb,stroke:#666,stroke-width:2px,color:#000 + classDef prev1xx fill:#db9b9b,stroke:#666,stroke-width:2px,color:#000 + classDef curr1xx fill:#5bb75b,stroke:#666,stroke-width:2px,color:#000 + class Msft msRelease + class SB curr1xx +``` + +### Scenario 2: 1xx Band Servicing + +For ongoing 1xx servicing builds. + +Required inputs: +* source-built SDK and artifacts from the previous 1xx release + +```bash +git clone -b <1xx-release-branch> https://github.com/dotnet/dotnet.git +cd dotnet + +# Build the SDK referencing assets from previous 1xx release +./build.sh --source-only \ + --with-sdk /path/to/source-built-1xx/sdk \ + --with-packages /path/to/source-built-1xx/artifacts + +# Final source-built outputs available in artifacts/x64/Release/ +``` + +```mermaid +flowchart LR + subgraph Msft["Previous 1xx SB Release"] + Prev_SDK[Source-built 1xx SDK] + Prev_Art[Source-built 1xx artifacts] + end + + subgraph SB["Current 1xx SB Release"] + Build((Build Process)) + New_SDK[New 1xx SDK] + New_Art[New 1xx Artifacts] + + Prev_SDK -.-> Build + Prev_Art -.->|PSB| Build + Build --> New_SDK + Build --> New_Art + end + + classDef prev1xx fill:#db9b9b,stroke:#666,stroke-width:2px,color:#000 + classDef curr1xx fill:#5bb75b,stroke:#666,stroke-width:2px,color:#000 + class Msft prev1xx + class SB curr1xx +``` + +### Scenario 3: 2xx Band Initial Release (N.0.200) + +Initial release of the 2xx band. + +Required inputs: +* source-built artifacts of the current 1xx release +* source-built SDK artifacts from the previous 1xx release + +```bash +git clone -b <2xx-release-branch> https://github.com/dotnet/dotnet.git +cd dotnet + +# Build the SDK +./build.sh --source-only \ + --with-sdk /path/to/previous-source-built-1xx/sdk \ + --with-packages /path/to/previous-source-built-1xx/artifacts \ + --with-shared-components /path/to/current-source-built-1xx/artifacts + +# Final source-built outputs available in artifacts/x64/Release/ +``` + +```mermaid +flowchart LR + subgraph SBPrev["Previous 1xx SB Release"] + Prev_1xx_SDK[Source-built 1xx SDK] + Prev_1xx_Art[Source-built 1xx artifacts] + end + + subgraph SBCurrent1xx["Current SB 1xx Release"] + Curr_1xx_Art[Current source-built
1xx Artifacts] + end + + subgraph SBCurrent2xx["Current SB 2xx Release"] + Build((Build Process)) + SDK_2xx[New 2xx SDK] + Art_2xx[New 2xx Artifacts] + + Prev_1xx_SDK -.-> Build + Prev_1xx_Art -.->|PSB| Build + Curr_1xx_Art -.->|shared components| Build + Build --> SDK_2xx + Build --> Art_2xx + end + + classDef prev1xx fill:#db9b9b,stroke:#666,stroke-width:2px,color:#000 + classDef curr1xx fill:#5bb75b,stroke:#666,stroke-width:2px,color:#000 + classDef curr2xx fill:#3da53d,stroke:#666,stroke-width:2px,color:#000 + class SBPrev prev1xx + class SBCurrent1xx curr1xx + class SBCurrent2xx curr2xx +``` + +### Scenario 4: 2xx Band Bootstrap (N.0.200+) + +For 2xx releases that require bootstrap (two-stage process). + +Required inputs: +* source-built artifacts of the current 1xx release + +```bash +git clone -b <2xx-release-branch> https://github.com/dotnet/dotnet.git +cd dotnet + +# === +# Stage 1: Build with Microsoft artifacts +# === + +# Downloads Microsoft-built artifacts and SDK +./prep-source-build.sh + +# Build the SDK referencing assets from current 1xx release +./build.sh --source-only --with-shared-components /path/to/source-built-1xx/artifacts + +# Extract and store the built 2xx SDK and artifacts +tar -ozxf artifacts/assets/Release/dotnet-sdk-*-tar.gz \ + -C /tmp/dotnet/sdk +tar -ozxf artifacts/assets/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ + -C /tmp/dotnet/artifacts + +# === +# Stage 2: Rebuild using stage 1 outputs +# === + +./build.sh --source-only \ + --with-sdk /tmp/dotnet/sdk \ + --with-packages /tmp/dotnet/artifacts + +# Final source-built outputs available in artifacts/x64/Release/ +``` + +```mermaid +flowchart LR + subgraph Msft["Previous MS Release"] + MS_SDK[Microsoft-built SDK] + MS_Art[Microsoft-built artifacts] + end + + subgraph SB1xx["Previous 1xx SB Release"] + SB_1xx[Source-built 1xx artifacts] + end + + subgraph SB["Current SB 2xx Release"] + subgraph Stage1["Stage 1: Bootstrap Build"] + Build1((Build Process)) + S1_SDK[Stage 1 2xx SDK] + S1_Art[Stage 1 2xx Artifacts] + end + + subgraph Stage2["Stage 2: Final Build"] + Build2((Build Process)) + Final_SDK[Final 2xx SDK] + Final_Art[Final 2xx Artifacts] + end + end + + MS_SDK -.-> Build1 + MS_Art -.->|PSB| Build1 + SB_1xx -.->|shared components| Build1 + Build1 --> S1_SDK + Build1 --> S1_Art + S1_SDK -.-> Build2 + S1_Art -.->|PSB| Build2 + Build2 --> Final_SDK + Build2 --> Final_Art + + classDef msRelease fill:#9b9bdb,stroke:#666,stroke-width:2px,color:#000 + classDef prev1xx fill:#db9b9b,stroke:#666,stroke-width:2px,color:#000 + classDef curr2xx fill:#3da53d,stroke:#666,stroke-width:2px,color:#000 + class Msft msRelease + class SB1xx prev1xx + class SB curr2xx +``` + +### Scenario 5: 2xx Band Servicing (N.0.201+) + +For ongoing 2xx servicing builds. + +Required inputs: +* source-built artifacts of the current 1xx release +* source-built SDK and artifacts from the previous 2xx release + +```bash +git clone -b <2xx-release-branch> https://github.com/dotnet/dotnet.git +cd dotnet + +# Build the SDK +./build.sh --source-only \ + --with-sdk /path/to/previous-source-built-2xx/sdk \ + --with-packages /path/to/previous-source-built-2xx/artifacts \ + --with-shared-components /path/to/current-source-built-1xx/artifacts + +# Final source-built outputs available in artifacts/x64/Release/ +``` + +```mermaid +flowchart LR + subgraph SBPrev2xx["Previous 2xx SB Release"] + Prev_1xx_SDK[Source-built
2xx SDK] + Prev_2xx_Art[Source-built
2xx Artifacts] + end + + subgraph SBCurrent1xx["Current 1xx SB Release"] + Curr_1xx_Art[Current source-built
1xx Artifacts] + end + + subgraph SBCurrent2xx["Current 2xx SB Release"] + Build((Build Process)) + SDK_2xx[New 2xx SDK] + Art_2xx[New 2xx Artifacts] + end + + Prev_1xx_SDK -.-> Build + Prev_2xx_Art -.->|PSB| Build + Curr_1xx_Art -.->|shared components| Build + Build --> SDK_2xx + Build --> Art_2xx + + classDef prev2xx fill:#c98989,stroke:#666,stroke-width:2px,color:#000 + classDef curr1xx fill:#5bb75b,stroke:#666,stroke-width:2px,color:#000 + classDef curr2xx fill:#3da53d,stroke:#666,stroke-width:2px,color:#000 + class SBPrev2xx prev2xx + class SBCurrent1xx curr1xx + class SBCurrent2xx curr2xx +``` + +### Scenario 6: 3xx Band Initial Release (N.0.300) + +For the initial 3xx release. + +Required inputs: +* source-built artifacts from the current 1xx release +* source-built SDK and artifacts from the previous 2xx release + +```bash +git clone -b <3xx-release-branch> https://github.com/dotnet/dotnet.git +cd dotnet + +# Build the SDK +./build.sh --source-only \ + --with-sdk /path/to/previous-source-built-2xx/sdk \ + --with-packages /path/to/previous-source-built-2xx/artifacts \ + --with-shared-components /path/to/current-source-built-1xx/artifacts + +# Final source-built outputs available in artifacts/x64/Release/ +``` + +```mermaid +flowchart LR + subgraph SBPrev2xx["Previous 2xx SB Release"] + Prev_2xx_SDK[Source-built 2xx SDK] + Prev_2xx_Art[Source-built 2xx Artifacts] + end + + subgraph SBCurr1xx["Current 1xx SB Release"] + Curr_1xx_Art[Source-built 1xx artifacts] + end + + subgraph SBCurr3xx["Current 3xx SB Release"] + Build((Build Process)) + SDK_3xx[New 3xx SDK] + Art_3xx[New 3xx Artifacts] + end + + Prev_2xx_SDK -.-> Build + Prev_2xx_Art -.->|PSB| Build + Curr_1xx_Art -.->|shared components| Build + Build --> SDK_3xx + Build --> Art_3xx + + classDef prev2xx fill:#c98989,stroke:#666,stroke-width:2px,color:#000 + classDef curr1xx fill:#5bb75b,stroke:#666,stroke-width:2px,color:#000 + classDef curr3xx fill:#2d8b2d,stroke:#666,stroke-width:2px,color:#000 + class SBPrev2xx prev2xx + class SBCurr1xx curr1xx + class SBCurr3xx curr3xx +``` + +### Scenario 7: 3xx Band Bootstrap (N.0.300+) + +For 3xx releases that require bootstrap (two-stage process). + +Required inputs: +* source-built artifacts from the current 1xx release + +```bash +git clone -b <3xx-release-branch> https://github.com/dotnet/dotnet.git +cd dotnet + +# === +# Stage 1: Build with Microsoft artifacts +# === + +# Downloads Microsoft-built artifacts and Microsoft SDK +./prep-source-build.sh + +# Build the SDK referencing assets from current 1xx release +./build.sh --source-only --with-shared-components /path/to/source-built-1xx/artifacts + +# Extract and store the built 3xx SDK and artifacts +tar -ozxf artifacts/assets/Release/dotnet-sdk-*-tar.gz \ + -C /tmp/dotnet/sdk +tar -ozxf artifacts/assets/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ + -C /tmp/dotnet/artifacts + +# === +# Stage 2: Rebuild using stage 1 outputs +# === + +./build.sh --source-only \ + --with-sdk /tmp/dotnet/sdk \ + --with-packages /tmp/dotnet/artifacts + +# Final source-built outputs available in artifacts/x64/Release/ +``` + +```mermaid +flowchart LR + subgraph MS["Previous MS Release"] + MS_SDK[Microsoft-built SDK] + MS_Art[Microsoft-built artifacts] + end + + subgraph SBCurr1xx["Current 1xx SB Release"] + SB_1xx[Source-built 1xx artifacts] + end + + subgraph SBCurr3xx["Current 3xx SB Release"] + subgraph Stage1["Stage 1: Bootstrap Build"] + Build1((Build Process)) + S1_SDK[Stage 1 3xx SDK] + S1_Art[Stage 1 3xx artifacts] + end + + subgraph Stage2["Stage 2: Build"] + Build2((Build Process)) + Final_SDK[Final 3xx SDK] + Final_Art[Final 3xx artifacts] + end + end + + MS_SDK -.-> Build1 + MS_Art -.->|PSB| Build1 + SB_1xx -.->|shared components| Build1 + Build1 --> S1_SDK + Build1 --> S1_Art + S1_SDK -.-> Build2 + S1_Art -.->|PSB| Build2 + Build2 --> Final_SDK + Build2 --> Final_Art + + classDef msRelease fill:#9b9bdb,stroke:#666,stroke-width:2px,color:#000 + classDef curr1xx fill:#5bb75b,stroke:#666,stroke-width:2px,color:#000 + classDef curr3xx fill:#2d8b2d,stroke:#666,stroke-width:2px,color:#000 + class MS msRelease + class SBCurr1xx curr1xx + class SBCurr3xx curr3xx +``` + +### Scenario 8: 3xx Band Servicing (N.0.301+) + +For ongoing 3xx servicing builds: + +Required inputs: +* source-built SDK and artifacts from the previous 2xx release +* source-built artifacts from the current 1xx release + +```bash +# Ensure you have latest source-built 1xx, 2xx artifacts and 2xx SDK from previous builds +git clone -b <3xx-release-branch> https://github.com/dotnet/dotnet.git +cd dotnet + +# Build the SDK +./build.sh --source-only \ + --with-sdk /path/to/previous-source-built-2xx/sdk \ + --with-packages /path/to/previous-source-built-3xx/artifacts \ + --with-shared-components /path/to/current-source-built-1xx/artifacts + +# Final source-built outputs available in artifacts/x64/Release/ +``` + +```mermaid +flowchart LR + subgraph SBPrev2xx["Previous 2xx SB Release"] + Prev_2xx_SDK[Source-built 2xx SDK] + Prev_2xx_Art[Source-built 2xx artifacts] + end + + subgraph SBCurr1xx["Current 1xx SB Release"] + Curr_1xx_Art[Source-built 1xx artifacts] + end + + subgraph SBCurr3xx["Current 3xx SB Release"] + Build((Build Process)) + SDK_3xx[New 3xx SDK] + Art_3xx[New 3xx Artifacts] + end + + Prev_2xx_SDK -.-> Build + Prev_2xx_Art -.->|PSB| Build + Curr_1xx_Art -.->|shared components| Build + Build --> SDK_3xx + Build --> Art_3xx + + classDef prev2xx fill:#c98989,stroke:#666,stroke-width:2px,color:#000 + classDef curr1xx fill:#5bb75b,stroke:#666,stroke-width:2px,color:#000 + classDef curr3xx fill:#2d8b2d,stroke:#666,stroke-width:2px,color:#000 + class SBPrev2xx prev2xx + class SBCurr1xx curr1xx + class SBCurr3xx curr3xx +``` + +## Troubleshooting + +**Error**: `Shared components cannot be provided as input to a build which +produces shared components` +- **Explanation**: You're building the 1xx band (`main` or `N.0.1xx` branch) + and providing shared component artifacts as input. The 1xx band produces + shared components, so it doesn't consume them as inputs. +- **Resolution**: Exclude the `--with-shared-components` parameter from the + `build.sh` script. + +**Error**: `Shared components must be provided as input to a build which does +not produce shared components` +- **Explanation**: You're building a 2xx or 3xx band and not providing shared + component artifacts as input. These bands require shared components from the + 1xx band because they provide the necessary runtime and foundational + components for the SDK. +- **Resolution**: Include the `--with-shared-components` parameter for the + `build.sh` script. + +## Poison and Prebuilt Detection + +The poison detection system treats shared component and PSB artifacts +differently: + +- **PSB artifacts**: Subject to poison detection to prevent Microsoft binaries + in output +- **Shared component artifacts**: Not poisoned since they're shared components + from the same source-build iteration +- **Prebuilt detection**: Shared component inputs are not considered prebuilts + +## Additional Resources + +- [.NET Feature Bands](https://learn.microsoft.com/en-us/dotnet/core/releases-and-support#feature-bands-sdk-only) +- [Source-Build Documentation](../README.md) +- [VMR Managing SDK Bands](https://github.com/dotnet/dotnet/blob/main/docs/VMR-Managing-SDK-Bands.md) From 2f22469b232e8d997b0acabdb4abe047a793535a Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Wed, 15 Oct 2025 14:39:57 -0500 Subject: [PATCH 02/21] Fix linter errors --- Documentation/feature-band-source-building.md | 106 +++++++++++------- 1 file changed, 67 insertions(+), 39 deletions(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index b735fb9917..ee46cf0f15 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -77,6 +77,7 @@ lines show SDK tooling dependencies between bands* ## Understanding Bootstrap vs Sequential Build ### Bootstrap Process (Two-Stage) + Bootstrapping is required when you don't have suitable source-built artifacts to build a release. It's a two-stage process: @@ -105,6 +106,7 @@ flowchart TD See [Bootstrapping Guidelines](bootstrapping-guidelines.md) for more info. ### Sequential Build (Single-Stage) + When you have appropriate source-built artifacts from previous builds, you can build directly without bootstrapping. This is the typical workflow for ongoing releases. @@ -125,7 +127,9 @@ When building feature bands, you'll work with two types of source-built artifacts: ### Previously Source-Built (PSB) Artifacts + These are artifacts from previous servicing releases or bootstrap builds: + - Used as build dependencies but not redistributed in outputs - Come from previous monthly .NET releases (e.g., 8.0.1 artifacts when building 8.0.2) @@ -133,7 +137,9 @@ These are artifacts from previous servicing releases or bootstrap builds: binaries leak into outputs ### Shared Component Artifacts + These are shared runtime and foundational components from the 1xx band: + - Come from the 1xx band build in the same release cycle - Can be used as dependencies AND redistributed in outputs - Include shared runtime and foundational components that all feature bands @@ -142,7 +148,9 @@ These are shared runtime and foundational components from the 1xx band: ## Feature Band Characteristics ### 1xx Band (GA/Non-breaking) + The foundational feature band that ships with .NET GA releases: + - **Content**: Contains the complete VMR with .NET runtime, core libraries, and SDK tooling - **Purpose**: Provides the stable runtime foundation that all other bands @@ -152,7 +160,9 @@ The foundational feature band that ships with .NET GA releases: - **Compatibility**: Non-breaking changes only during servicing ### 2xx Band (Stable/Enhanced) + Enhanced SDK tooling that ships with Visual Studio updates: + - **Content**: Contains only SDK tooling differences from 1xx band (subset VMR) - **Purpose**: Adds enhanced developer tooling and Visual Studio integration @@ -163,7 +173,9 @@ Enhanced SDK tooling that ships with Visual Studio updates: - **Dependencies**: Always uses shared runtime components from 1xx band ### 3xx Band (Preview/Insiders) + Cutting-edge SDK features for early adopters and insiders: + - **Content**: Contains only SDK tooling differences from 2xx band (subset VMR) - **Purpose**: Delivers latest experimental features and early access @@ -181,6 +193,7 @@ Cutting-edge SDK features for early adopters and insiders: Each feature band has specific requirements for SDKs and artifacts: ### 1xx Band Build Requirements + - **Bootstrap (any version)**: Two-stage process using Microsoft source-built 1xx artifacts + Microsoft SDK + script - **Servicing (N.0.101+)**: Source-built SDK and artifacts from the previous @@ -189,6 +202,7 @@ Each feature band has specific requirements for SDKs and artifacts: Note: Only the 1xx SDK is guaranteed to build the shared runtime components ### 2xx Band Build Requirements + - **Bootstrap (any version)**: Two-stage process using Microsoft source-built 2xx artifacts + Microsoft 2xx SDK + prep script - **Initial Release (N.0.200)**: Latest source-built 1xx artifacts + Latest @@ -197,6 +211,7 @@ Note: Only the 1xx SDK is guaranteed to build the shared runtime components 2xx release + Latest released 1xx artifacts ### 3xx Band Build Requirements + - **Bootstrap (any version)**: Two-stage process using Microsoft source-built 2xx artifacts + Microsoft 2xx SDK + prep script - **Initial Release (N.0.300)**: Latest source-built 1xx artifacts + Latest @@ -205,6 +220,7 @@ Note: Only the 1xx SDK is guaranteed to build the shared runtime components Latest released 1xx artifacts + Latest released 2xx artifacts ### Feature Band Key Points + - Release schedules across branches are not necessarily aligned. - 1xx band produces the shared runtime that all bands use. - Not all 3xx check-ins flow to 2xx (changes are cherry-picked as needed). @@ -232,48 +248,51 @@ The following sections describe the workflows for different scenarios. ### Input Artifacts Summary **For 1xx band builds:** + - **Bootstrap**: - - PSB artifacts: Microsoft-built previous N.0.1xx release - - SDK: Microsoft-built previous N.0.1xx release + - PSB artifacts: Microsoft-built previous N.0.1xx release + - SDK: Microsoft-built previous N.0.1xx release - **Servicing**: - - PSB artifacts: Source-built previous N.0.1xx release - - SDK: Source-built previous N.0.1xx release + - PSB artifacts: Source-built previous N.0.1xx release + - SDK: Source-built previous N.0.1xx release **For 2xx band builds:** + - **Initial release (N.0.200)**: - - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Source-built previous N.0.1xx release - - SDK: Source-built previous N.0.1xx release + - Shared component artifacts: Source-built current N.0.1xx release + - PSB artifacts: Source-built previous N.0.1xx release + - SDK: Source-built previous N.0.1xx release - **Bootstrap initial release (N.0.200)**: - - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Microsoft-built previous N.0.1xx release - - SDK: Microsoft-built previous N.0.1xx release + - Shared component artifacts: Source-built current N.0.1xx release + - PSB artifacts: Microsoft-built previous N.0.1xx release + - SDK: Microsoft-built previous N.0.1xx release - **Bootstrap (N.0.201+)**: - - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Microsoft-built previous N.0.2xx release - - SDK: Microsoft-built previous N.0.2xx release + - Shared component artifacts: Source-built current N.0.1xx release + - PSB artifacts: Microsoft-built previous N.0.2xx release + - SDK: Microsoft-built previous N.0.2xx release - **Servicing (N.0.201+)**: - - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Source-built previous N.0.2xx release - - SDK: Source-built previous N.0.2xx release + - Shared component artifacts: Source-built current N.0.1xx release + - PSB artifacts: Source-built previous N.0.2xx release + - SDK: Source-built previous N.0.2xx release **For 3xx band builds:** + - **Initial release (N.0.300)**: - - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Source-built previous N.0.2xx release - - SDK: Source-built previous N.0.2xx release + - Shared component artifacts: Source-built current N.0.1xx release + - PSB artifacts: Source-built previous N.0.2xx release + - SDK: Source-built previous N.0.2xx release - **Bootstrap (N.0.300)**: - - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Microsoft-built previous N.0.2xx release - - SDK: Microsoft-built previous N.0.2xx release + - Shared component artifacts: Source-built current N.0.1xx release + - PSB artifacts: Microsoft-built previous N.0.2xx release + - SDK: Microsoft-built previous N.0.2xx release - **Bootstrap (N.0.301+)**: - - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Microsoft-built previous N.0.2xx release - - SDK: Microsoft-built previous N.0.2xx release + - Shared component artifacts: Source-built current N.0.1xx release + - PSB artifacts: Microsoft-built previous N.0.2xx release + - SDK: Microsoft-built previous N.0.2xx release - **Servicing (N.0.301+)**: - - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Source-built previous N.0.2xx release - - SDK: Source-built previous N.0.2xx release + - Shared component artifacts: Source-built current N.0.1xx release + - PSB artifacts: Source-built previous N.0.2xx release + - SDK: Source-built previous N.0.2xx release ### Scenario 1: 1xx Band Bootstrap @@ -351,7 +370,8 @@ flowchart LR For ongoing 1xx servicing builds. Required inputs: -* source-built SDK and artifacts from the previous 1xx release + +- source-built SDK and artifacts from the previous 1xx release ```bash git clone -b <1xx-release-branch> https://github.com/dotnet/dotnet.git @@ -394,8 +414,9 @@ flowchart LR Initial release of the 2xx band. Required inputs: -* source-built artifacts of the current 1xx release -* source-built SDK artifacts from the previous 1xx release + +- source-built artifacts of the current 1xx release +- source-built SDK artifacts from the previous 1xx release ```bash git clone -b <2xx-release-branch> https://github.com/dotnet/dotnet.git @@ -446,7 +467,8 @@ flowchart LR For 2xx releases that require bootstrap (two-stage process). Required inputs: -* source-built artifacts of the current 1xx release + +- source-built artifacts of the current 1xx release ```bash git clone -b <2xx-release-branch> https://github.com/dotnet/dotnet.git @@ -527,8 +549,9 @@ flowchart LR For ongoing 2xx servicing builds. Required inputs: -* source-built artifacts of the current 1xx release -* source-built SDK and artifacts from the previous 2xx release + +- source-built artifacts of the current 1xx release +- source-built SDK and artifacts from the previous 2xx release ```bash git clone -b <2xx-release-branch> https://github.com/dotnet/dotnet.git @@ -579,8 +602,9 @@ flowchart LR For the initial 3xx release. Required inputs: -* source-built artifacts from the current 1xx release -* source-built SDK and artifacts from the previous 2xx release + +- source-built artifacts from the current 1xx release +- source-built SDK and artifacts from the previous 2xx release ```bash git clone -b <3xx-release-branch> https://github.com/dotnet/dotnet.git @@ -631,7 +655,8 @@ flowchart LR For 3xx releases that require bootstrap (two-stage process). Required inputs: -* source-built artifacts from the current 1xx release + +- source-built artifacts from the current 1xx release ```bash git clone -b <3xx-release-branch> https://github.com/dotnet/dotnet.git @@ -712,8 +737,9 @@ flowchart LR For ongoing 3xx servicing builds: Required inputs: -* source-built SDK and artifacts from the previous 2xx release -* source-built artifacts from the current 1xx release + +- source-built SDK and artifacts from the previous 2xx release +- source-built artifacts from the current 1xx release ```bash # Ensure you have latest source-built 1xx, 2xx artifacts and 2xx SDK from previous builds @@ -764,6 +790,7 @@ flowchart LR **Error**: `Shared components cannot be provided as input to a build which produces shared components` + - **Explanation**: You're building the 1xx band (`main` or `N.0.1xx` branch) and providing shared component artifacts as input. The 1xx band produces shared components, so it doesn't consume them as inputs. @@ -772,6 +799,7 @@ produces shared components` **Error**: `Shared components must be provided as input to a build which does not produce shared components` + - **Explanation**: You're building a 2xx or 3xx band and not providing shared component artifacts as input. These bands require shared components from the 1xx band because they provide the necessary runtime and foundational From 24f9f583a2d9bca717d0295913f85ea190c19ffd Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Mon, 20 Oct 2025 16:07:30 -0500 Subject: [PATCH 03/21] Clarify Content descriptions for feature bands - 1xx: Contains complete VMR - 2xx/3xx: Contains only tooling sources - runtime/core libraries excluded --- Documentation/feature-band-source-building.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index ee46cf0f15..0e44ec6cd7 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -163,8 +163,8 @@ The foundational feature band that ships with .NET GA releases: Enhanced SDK tooling that ships with Visual Studio updates: -- **Content**: Contains only SDK tooling differences from 1xx band (subset - VMR) +- **Content**: Contains only tooling sources - runtime/core libraries are + excluded - **Purpose**: Adds enhanced developer tooling and Visual Studio integration features - **Release cycle**: Aligns with Visual Studio feature releases (not @@ -176,8 +176,8 @@ Enhanced SDK tooling that ships with Visual Studio updates: Cutting-edge SDK features for early adopters and insiders: -- **Content**: Contains only SDK tooling differences from 2xx band (subset - VMR) +- **Content**: Contains only tooling sources - runtime/core libraries are + excluded - **Purpose**: Delivers latest experimental features and early access capabilities - **Release cycle**: Independent preview releases, not aligned with other From 9f4b08e6baabb0dd6304c3abfb60f3256ce11169 Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Mon, 20 Oct 2025 16:20:26 -0500 Subject: [PATCH 04/21] Replace 'latest' with 'current' terminology - Change 'Latest' to 'current' in Build Requirements section for clarity - Remove redundant comment in 3xx servicing scenario - Addresses PR feedback about consistent terminology usage --- Documentation/feature-band-source-building.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index 0e44ec6cd7..a3814b2e3a 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -205,19 +205,19 @@ Note: Only the 1xx SDK is guaranteed to build the shared runtime components - **Bootstrap (any version)**: Two-stage process using Microsoft source-built 2xx artifacts + Microsoft 2xx SDK + prep script -- **Initial Release (N.0.200)**: Latest source-built 1xx artifacts + Latest +- **Initial Release (N.0.200)**: Current source-built 1xx artifacts + current source-built 1xx SDK - **Servicing (N.0.201+)**: Source-built SDK and artifacts from the previous - 2xx release + Latest released 1xx artifacts + 2xx release + current 1xx artifacts ### 3xx Band Build Requirements - **Bootstrap (any version)**: Two-stage process using Microsoft source-built 2xx artifacts + Microsoft 2xx SDK + prep script -- **Initial Release (N.0.300)**: Latest source-built 1xx artifacts + Latest - source-built 2xx artifacts + Latest source-built 2xx SDK +- **Initial Release (N.0.300)**: Current source-built 1xx artifacts + current + source-built 2xx artifacts + current source-built 2xx SDK - **Servicing (N.0.301+)**: Source-built SDK from the previous 2xx release + - Latest released 1xx artifacts + Latest released 2xx artifacts + current 1xx artifacts + current 2xx artifacts ### Feature Band Key Points @@ -742,7 +742,6 @@ Required inputs: - source-built artifacts from the current 1xx release ```bash -# Ensure you have latest source-built 1xx, 2xx artifacts and 2xx SDK from previous builds git clone -b <3xx-release-branch> https://github.com/dotnet/dotnet.git cd dotnet From b88103086a89ccb3b6c0b5627cbf3ab6ea515b71 Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Mon, 27 Oct 2025 13:19:36 -0500 Subject: [PATCH 05/21] Update diagram labels to match build script parameters --- Documentation/feature-band-source-building.md | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index a3814b2e3a..267007cc54 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -349,12 +349,12 @@ flowchart LR end end - MS_SDK -.-> Build1 - MS_Art -.->|PSB| Build1 + MS_SDK -.->|with-sdk| Build1 + MS_Art -.->|with-packages| Build1 Build1 --> S1_SDK Build1 --> S1_Art - S1_SDK -.-> Build2 - S1_Art -.->|PSB| Build2 + S1_SDK -.->|with-sdk| Build2 + S1_Art -.->|with-packages| Build2 Build2 --> Final_SDK Build2 --> Final_Art @@ -397,8 +397,8 @@ flowchart LR New_SDK[New 1xx SDK] New_Art[New 1xx Artifacts] - Prev_SDK -.-> Build - Prev_Art -.->|PSB| Build + Prev_SDK -.->|with-sdk| Build + Prev_Art -.->|with-packages| Build Build --> New_SDK Build --> New_Art end @@ -447,9 +447,9 @@ flowchart LR SDK_2xx[New 2xx SDK] Art_2xx[New 2xx Artifacts] - Prev_1xx_SDK -.-> Build - Prev_1xx_Art -.->|PSB| Build - Curr_1xx_Art -.->|shared components| Build + Prev_1xx_SDK -.->|with-sdk| Build + Prev_1xx_Art -.->|with-packages| Build + Curr_1xx_Art -.->|with-shared-components| Build Build --> SDK_2xx Build --> Art_2xx end @@ -526,13 +526,13 @@ flowchart LR end end - MS_SDK -.-> Build1 - MS_Art -.->|PSB| Build1 - SB_1xx -.->|shared components| Build1 + MS_SDK -.->|with-sdk| Build1 + MS_Art -.->|with-packages| Build1 + SB_1xx -.->|with-shared-components| Build1 Build1 --> S1_SDK Build1 --> S1_Art - S1_SDK -.-> Build2 - S1_Art -.->|PSB| Build2 + S1_SDK -.->|with-sdk| Build2 + S1_Art -.->|with-packages| Build2 Build2 --> Final_SDK Build2 --> Final_Art @@ -583,9 +583,9 @@ flowchart LR Art_2xx[New 2xx Artifacts] end - Prev_1xx_SDK -.-> Build - Prev_2xx_Art -.->|PSB| Build - Curr_1xx_Art -.->|shared components| Build + Prev_1xx_SDK -.->|with-sdk| Build + Prev_2xx_Art -.->|with-packages| Build + Curr_1xx_Art -.->|with-shared-components| Build Build --> SDK_2xx Build --> Art_2xx @@ -714,13 +714,13 @@ flowchart LR end end - MS_SDK -.-> Build1 - MS_Art -.->|PSB| Build1 - SB_1xx -.->|shared components| Build1 + MS_SDK -.->|with-sdk| Build1 + MS_Art -.->|with-packages| Build1 + SB_1xx -.->|with-shared-components| Build1 Build1 --> S1_SDK Build1 --> S1_Art - S1_SDK -.-> Build2 - S1_Art -.->|PSB| Build2 + S1_SDK -.->|with-sdk| Build2 + S1_Art -.->|with-packages| Build2 Build2 --> Final_SDK Build2 --> Final_Art @@ -771,9 +771,9 @@ flowchart LR Art_3xx[New 3xx Artifacts] end - Prev_2xx_SDK -.-> Build - Prev_2xx_Art -.->|PSB| Build - Curr_1xx_Art -.->|shared components| Build + Prev_2xx_SDK -.->|with-sdk| Build + Prev_2xx_Art -.->|with-packages| Build + Curr_1xx_Art -.->|with-shared-components| Build Build --> SDK_3xx Build --> Art_3xx From 3e3d8f6a9fefe9994ea04267f696b1d956bee26d Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Mon, 27 Oct 2025 13:24:19 -0500 Subject: [PATCH 06/21] Remove 'Scenario X:' prefixes from scenario headers --- Documentation/feature-band-source-building.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index 267007cc54..a4425b4298 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -294,7 +294,7 @@ The following sections describe the workflows for different scenarios. - PSB artifacts: Source-built previous N.0.2xx release - SDK: Source-built previous N.0.2xx release -### Scenario 1: 1xx Band Bootstrap +### 1xx Band Bootstrap For the initial bootstrap of a 1xx band (two-stage process): @@ -365,7 +365,7 @@ flowchart LR class SB curr1xx ``` -### Scenario 2: 1xx Band Servicing +### 1xx Band Servicing For ongoing 1xx servicing builds. @@ -409,7 +409,7 @@ flowchart LR class SB curr1xx ``` -### Scenario 3: 2xx Band Initial Release (N.0.200) +### 2xx Band Initial Release (N.0.200) Initial release of the 2xx band. @@ -462,7 +462,7 @@ flowchart LR class SBCurrent2xx curr2xx ``` -### Scenario 4: 2xx Band Bootstrap (N.0.200+) +### 2xx Band Bootstrap (N.0.200+) For 2xx releases that require bootstrap (two-stage process). @@ -544,7 +544,7 @@ flowchart LR class SB curr2xx ``` -### Scenario 5: 2xx Band Servicing (N.0.201+) +### 2xx Band Servicing (N.0.201+) For ongoing 2xx servicing builds. @@ -597,7 +597,7 @@ flowchart LR class SBCurrent2xx curr2xx ``` -### Scenario 6: 3xx Band Initial Release (N.0.300) +### 3xx Band Initial Release (N.0.300) For the initial 3xx release. @@ -650,7 +650,7 @@ flowchart LR class SBCurr3xx curr3xx ``` -### Scenario 7: 3xx Band Bootstrap (N.0.300+) +### 3xx Band Bootstrap (N.0.300+) For 3xx releases that require bootstrap (two-stage process). @@ -732,7 +732,7 @@ flowchart LR class SBCurr3xx curr3xx ``` -### Scenario 8: 3xx Band Servicing (N.0.301+) +### 3xx Band Servicing (N.0.301+) For ongoing 3xx servicing builds: From 437401029acaeb14735a4550c34e7b8f44bb5ec2 Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Mon, 27 Oct 2025 13:27:26 -0500 Subject: [PATCH 07/21] Link to scenarios --- Documentation/feature-band-source-building.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index a4425b4298..14c2eacfcd 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -249,47 +249,47 @@ The following sections describe the workflows for different scenarios. **For 1xx band builds:** -- **Bootstrap**: +- **[Bootstrap](#1xx-band-bootstrap)**: - PSB artifacts: Microsoft-built previous N.0.1xx release - SDK: Microsoft-built previous N.0.1xx release -- **Servicing**: +- **[Servicing](#1xx-band-servicing)**: - PSB artifacts: Source-built previous N.0.1xx release - SDK: Source-built previous N.0.1xx release **For 2xx band builds:** -- **Initial release (N.0.200)**: +- **[Initial release (N.0.200)](#2xx-band-initial-release-n0200)**: - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Source-built previous N.0.1xx release - SDK: Source-built previous N.0.1xx release -- **Bootstrap initial release (N.0.200)**: +- **[Bootstrap initial release (N.0.200)](#2xx-band-bootstrap-n0200)**: - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Microsoft-built previous N.0.1xx release - SDK: Microsoft-built previous N.0.1xx release -- **Bootstrap (N.0.201+)**: +- **[Bootstrap (N.0.201+)](#2xx-band-bootstrap-n0200)**: - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Microsoft-built previous N.0.2xx release - SDK: Microsoft-built previous N.0.2xx release -- **Servicing (N.0.201+)**: +- **[Servicing (N.0.201+)](#2xx-band-servicing-n0201)**: - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Source-built previous N.0.2xx release - SDK: Source-built previous N.0.2xx release **For 3xx band builds:** -- **Initial release (N.0.300)**: +- **[Initial release (N.0.300)](#3xx-band-initial-release-n0300)**: - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Source-built previous N.0.2xx release - SDK: Source-built previous N.0.2xx release -- **Bootstrap (N.0.300)**: +- **[Bootstrap (N.0.300)](#3xx-band-bootstrap-n0300)**: - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Microsoft-built previous N.0.2xx release - SDK: Microsoft-built previous N.0.2xx release -- **Bootstrap (N.0.301+)**: +- **[Bootstrap (N.0.301+)](#3xx-band-bootstrap-n0300)**: - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Microsoft-built previous N.0.2xx release - SDK: Microsoft-built previous N.0.2xx release -- **Servicing (N.0.301+)**: +- **[Servicing (N.0.301+)](#3xx-band-servicing-n0301)**: - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Source-built previous N.0.2xx release - SDK: Source-built previous N.0.2xx release From ff2c119f323dba3fc703ba40ee14ff9939fcb5fd Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Mon, 27 Oct 2025 13:27:36 -0500 Subject: [PATCH 08/21] Doc TOC --- Documentation/feature-band-source-building.md | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index 14c2eacfcd..ed4d409fdb 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -5,6 +5,30 @@ building .NET SDK feature band branches of the Virtual Monolithic Repository (VMR). It covers bootstrapping and ongoing servicing workflows when building multiple SDK feature bands. +## Table of Contents + +- [What are .NET SDK Feature Bands?](#what-are-net-sdk-feature-bands) +- [Key Terminology](#key-terminology) +- [Overview](#overview) +- [Understanding Bootstrap vs Sequential Build](#understanding-bootstrap-vs-sequential-build) +- [Required Build Inputs](#required-build-inputs) +- [Feature Band Characteristics](#feature-band-characteristics) +- [Build Requirements by Feature Band](#build-requirements-by-feature-band) +- [Build Command Arguments](#build-command-arguments) +- [Distro Maintainer Workflows](#distro-maintainer-workflows) + - [Input Artifacts Summary](#input-artifacts-summary) + - [1xx Band Bootstrap](#1xx-band-bootstrap) + - [1xx Band Servicing](#1xx-band-servicing) + - [2xx Band Initial Release (N.0.200)](#2xx-band-initial-release-n0200) + - [2xx Band Bootstrap (N.0.200+)](#2xx-band-bootstrap-n0200) + - [2xx Band Servicing (N.0.201+)](#2xx-band-servicing-n0201) + - [3xx Band Initial Release (N.0.300)](#3xx-band-initial-release-n0300) + - [3xx Band Bootstrap (N.0.300+)](#3xx-band-bootstrap-n0300) + - [3xx Band Servicing (N.0.301+)](#3xx-band-servicing-n0301) +- [Troubleshooting](#troubleshooting) +- [Poison and Prebuilt Detection](#poison-and-prebuilt-detection) +- [Additional Resources](#additional-resources) + ## What are .NET SDK Feature Bands? .NET SDK feature bands are different versions of the .NET SDK that provide From 4701e29a7f00bb2e15d8b726f7c24ce3b284fb42 Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Mon, 27 Oct 2025 14:37:27 -0500 Subject: [PATCH 09/21] Update content to describe 1xx/2xx/3xx/4xx progression --- Documentation/feature-band-source-building.md | 160 +++++++++++------- 1 file changed, 102 insertions(+), 58 deletions(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index ed4d409fdb..a9b89697be 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -48,7 +48,8 @@ documentation](https://learn.microsoft.com/en-us/dotnet/core/releases-and-suppor where `N`=10 for .NET 10) - **1xx band** - The initial SDK feature band that ships with .NET GA and contains the shared runtime components -- **2xx/3xx/Nxx bands** - Later SDK feature bands with enhanced tooling +- **2xx/3xx/4xx bands** - Additional SDK feature bands with enhanced tooling + that are released sequentially (2xx → 3xx → 4xx) - **Previously Source-Built (PSB) artifacts** - Artifacts from previous builds that provide dependencies but are not redistributed - **Shared component artifacts** - Shared runtime and foundational components @@ -79,20 +80,27 @@ flowchart LR end subgraph "2xx Band (Subset VMR)" - SDK2xx[2xx SDK Tools -
Enhanced] + SDK2xx[2xx SDK Tools] end subgraph "3xx Band (Subset VMR)" - SDK3xx[3xx SDK Tools -
Latest Features] + SDK3xx[3xx SDK Tools] + end + + subgraph "4xx Band (Subset VMR)" + SDK4xx[4xx SDK Tools] end Runtime -.-> SDK2xx Runtime -.-> SDK3xx + Runtime -.-> SDK4xx Core -.-> SDK2xx Core -.-> SDK3xx + Core -.-> SDK4xx SDK1xx --> SDK2xx SDK2xx --> SDK3xx + SDK3xx --> SDK4xx ``` *Dotted lines indicate shared runtime components from the 1xx band; solid @@ -182,35 +190,52 @@ The foundational feature band that ships with .NET GA releases: - **Release cycle**: Follows .NET GA release schedule with monthly servicing updates - **Compatibility**: Non-breaking changes only during servicing +- **Support**: Always in support alongside one other feature band (2xx, 3xx, + or 4xx) + +### 2xx Band + +SDK tooling band that ships after the 1xx band: + +- **Content**: Contains only tooling sources - runtime/core libraries are + excluded +- **Purpose**: Adds enhanced developer tooling features +- **Release cycle**: Independent of other band releases +- **Dependencies**: + - Initial release (N.0.200) depends on the latest 1xx release + - Subsequent releases can depend on previous 2xx releases + - Always uses shared runtime components from 1xx band +- **Support**: In support alongside 1xx until 3xx is released -### 2xx Band (Stable/Enhanced) +### 3xx Band -Enhanced SDK tooling that ships with Visual Studio updates: +SDK tooling band that ships after the 2xx band: - **Content**: Contains only tooling sources - runtime/core libraries are excluded -- **Purpose**: Adds enhanced developer tooling and Visual Studio integration - features -- **Release cycle**: Aligns with Visual Studio feature releases (not - necessarily monthly) -- **Compatibility**: Stable features that have been validated in 3xx previews -- **Dependencies**: Always uses shared runtime components from 1xx band +- **Purpose**: Delivers additional SDK features and capabilities +- **Release cycle**: Independent of other band releases +- **Dependencies**: + - Initial release (N.0.300) depends on the latest 2xx release + - Subsequent releases can depend on previous 3xx releases + - Always uses shared runtime components from 1xx band +- **Support**: In support alongside 1xx until 4xx is released -### 3xx Band (Preview/Insiders) +### 4xx Band -Cutting-edge SDK features for early adopters and insiders: +SDK tooling band that ships after the 3xx band: - **Content**: Contains only tooling sources - runtime/core libraries are excluded -- **Purpose**: Delivers latest experimental features and early access - capabilities -- **Release cycle**: Independent preview releases, not aligned with other - bands -- **Compatibility**: Preview/experimental features that may change before - stabilization -- **Dependencies**: Uses 2xx tooling for builds, shares runtime from 1xx band -- **Flow**: Selected features flow from 3xx → 2xx over time through - cherry-picking +- **Purpose**: Delivers additional SDK features and capabilities +- **Release cycle**: Independent of other band releases +- **Dependencies**: + - Initial release (N.0.400) depends on the latest 3xx release + - Subsequent releases can depend on previous 4xx releases + - Always uses shared runtime components from 1xx band +- **Support**: In support alongside 1xx +- **Note**: 4xx band follows the same build patterns and scenarios as 3xx, + with adjusted version numbers ## Build Requirements by Feature Band @@ -237,25 +262,34 @@ Note: Only the 1xx SDK is guaranteed to build the shared runtime components ### 3xx Band Build Requirements - **Bootstrap (any version)**: Two-stage process using Microsoft source-built - 2xx artifacts + Microsoft 2xx SDK + prep script + 3xx artifacts + Microsoft 3xx SDK + prep script - **Initial Release (N.0.300)**: Current source-built 1xx artifacts + current source-built 2xx artifacts + current source-built 2xx SDK -- **Servicing (N.0.301+)**: Source-built SDK from the previous 2xx release + - current 1xx artifacts + current 2xx artifacts +- **Servicing (N.0.301+)**: Source-built SDK and artifacts from the previous + 3xx release + current 1xx artifacts + +### 4xx Band Build Requirements + +- **Bootstrap (any version)**: Two-stage process using Microsoft source-built + 4xx artifacts + Microsoft 4xx SDK + prep script +- **Initial Release (N.0.400)**: Current source-built 1xx artifacts + current + source-built 3xx artifacts + current source-built 3xx SDK +- **Servicing (N.0.401+)**: Source-built SDK and artifacts from the previous + 4xx release + current 1xx artifacts ### Feature Band Key Points -- Release schedules across branches are not necessarily aligned. +- Release schedules across bands are not necessarily aligned. - 1xx band produces the shared runtime that all bands use. -- Not all 3xx check-ins flow to 2xx (changes are cherry-picked as needed). -- 3xx builds always use 2xx tooling (never the 3xx SDK). -- 3xx artifacts are only used for distribution, never as build inputs for - other bands. -- Servicing builds use source-built SDKs from the previous releases of the - same band (or 2xx for 3xx). -- For bootstrapping of 2xx/3xx feature bands, stage 2 does not require the 1xx - shared components as input. The artifacts produced by stage 1 contain all - required packages. +- Only 1xx and one other band (2xx, 3xx, or 4xx) are in support at any given + time. +- The initial release of each feature band depends on the latest release of + the previous band. +- 3xx and 4xx bands follow identical build patterns; the scenarios documented + for 3xx apply equally to 4xx with adjusted version numbers. +- For bootstrapping of 2xx/3xx/4xx feature bands, stage 2 does not require the + 1xx shared components as input. The artifacts produced by stage 1 contain + all required packages. ## Build Command Arguments @@ -269,6 +303,13 @@ Feature band builds make use of these relevant command-line arguments: The following sections describe the workflows for different scenarios. +**Note on 4xx band**: The 4xx band follows the same build patterns as the 3xx +band documented below, with the version numbers adjusted accordingly (e.g., +N.0.400 instead of N.0.300). For the initial 4xx release, the dependencies +would come from the latest 3xx release instead of 2xx. The 3xx band also follows +the same pattern as 2xx but is documented here for clarity to illustrate that +later feature bands continue to use 1xx as input, not just the previous band. + ### Input Artifacts Summary **For 1xx band builds:** @@ -299,24 +340,24 @@ The following sections describe the workflows for different scenarios. - PSB artifacts: Source-built previous N.0.2xx release - SDK: Source-built previous N.0.2xx release -**For 3xx band builds:** +**For 3xx band builds (4xx follows the same pattern with adjusted version numbers):** - **[Initial release (N.0.300)](#3xx-band-initial-release-n0300)**: - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Source-built previous N.0.2xx release - SDK: Source-built previous N.0.2xx release -- **[Bootstrap (N.0.300)](#3xx-band-bootstrap-n0300)**: +- **[Bootstrap initial release (N.0.300)](#3xx-band-bootstrap-n0300)**: - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Microsoft-built previous N.0.2xx release - SDK: Microsoft-built previous N.0.2xx release -- **[Bootstrap (N.0.301+)](#3xx-band-bootstrap-n0300)**: +- **[Bootstrap (N.0.301+)](#2xx-band-bootstrap-n0300)**: - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Microsoft-built previous N.0.2xx release - - SDK: Microsoft-built previous N.0.2xx release + - PSB artifacts: Microsoft-built previous N.0.3xx release + - SDK: Microsoft-built previous N.0.3xx release - **[Servicing (N.0.301+)](#3xx-band-servicing-n0301)**: - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Source-built previous N.0.2xx release - - SDK: Source-built previous N.0.2xx release + - PSB artifacts: Source-built previous N.0.3xx release + - SDK: Source-built previous N.0.3xx release ### 1xx Band Bootstrap @@ -623,7 +664,8 @@ flowchart LR ### 3xx Band Initial Release (N.0.300) -For the initial 3xx release. +For the initial 3xx release. The same pattern applies to 4xx band initial +release (N.0.400), which would depend on the latest 3xx release instead of 2xx. Required inputs: @@ -676,7 +718,8 @@ flowchart LR ### 3xx Band Bootstrap (N.0.300+) -For 3xx releases that require bootstrap (two-stage process). +For 3xx releases that require bootstrap (two-stage process). The same pattern +applies to 4xx band bootstrap. Required inputs: @@ -758,12 +801,13 @@ flowchart LR ### 3xx Band Servicing (N.0.301+) -For ongoing 3xx servicing builds: +For ongoing 3xx servicing builds. The same pattern applies to 4xx band +servicing (N.0.401+). Required inputs: -- source-built SDK and artifacts from the previous 2xx release - source-built artifacts from the current 1xx release +- source-built SDK and artifacts from the previous 3xx release ```bash git clone -b <3xx-release-branch> https://github.com/dotnet/dotnet.git @@ -771,7 +815,7 @@ cd dotnet # Build the SDK ./build.sh --source-only \ - --with-sdk /path/to/previous-source-built-2xx/sdk \ + --with-sdk /path/to/previous-source-built-3xx/sdk \ --with-packages /path/to/previous-source-built-3xx/artifacts \ --with-shared-components /path/to/current-source-built-1xx/artifacts @@ -780,9 +824,9 @@ cd dotnet ```mermaid flowchart LR - subgraph SBPrev2xx["Previous 2xx SB Release"] - Prev_2xx_SDK[Source-built 2xx SDK] - Prev_2xx_Art[Source-built 2xx artifacts] + subgraph SBPrev3xx["Previous 3xx SB Release"] + Prev_3xx_SDK[Source-built 3xx SDK] + Prev_3xx_Art[Source-built 3xx artifacts] end subgraph SBCurr1xx["Current 1xx SB Release"] @@ -795,16 +839,16 @@ flowchart LR Art_3xx[New 3xx Artifacts] end - Prev_2xx_SDK -.->|with-sdk| Build - Prev_2xx_Art -.->|with-packages| Build + Prev_3xx_SDK -.->|with-sdk| Build + Prev_3xx_Art -.->|with-packages| Build Curr_1xx_Art -.->|with-shared-components| Build Build --> SDK_3xx Build --> Art_3xx - classDef prev2xx fill:#c98989,stroke:#666,stroke-width:2px,color:#000 + classDef prev3xx fill:#c98989,stroke:#666,stroke-width:2px,color:#000 classDef curr1xx fill:#5bb75b,stroke:#666,stroke-width:2px,color:#000 classDef curr3xx fill:#2d8b2d,stroke:#666,stroke-width:2px,color:#000 - class SBPrev2xx prev2xx + class SBPrev3xx prev3xx class SBCurr1xx curr1xx class SBCurr3xx curr3xx ``` @@ -823,10 +867,10 @@ produces shared components` **Error**: `Shared components must be provided as input to a build which does not produce shared components` -- **Explanation**: You're building a 2xx or 3xx band and not providing shared - component artifacts as input. These bands require shared components from the - 1xx band because they provide the necessary runtime and foundational - components for the SDK. +- **Explanation**: You're building a 2xx, 3xx, or 4xx band and not providing + shared component artifacts as input. These bands require shared components + from the 1xx band because they provide the necessary runtime and + foundational components for the SDK. - **Resolution**: Include the `--with-shared-components` parameter for the `build.sh` script. From b98d3eebf5fe9931d073917d89cbbd51aa91198b Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Mon, 27 Oct 2025 14:54:42 -0500 Subject: [PATCH 10/21] Shared components are needed as explicit input for stage 2 builds --- Documentation/feature-band-source-building.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index a9b89697be..c3ff706f65 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -287,9 +287,6 @@ Note: Only the 1xx SDK is guaranteed to build the shared runtime components the previous band. - 3xx and 4xx bands follow identical build patterns; the scenarios documented for 3xx apply equally to 4xx with adjusted version numbers. -- For bootstrapping of 2xx/3xx/4xx feature bands, stage 2 does not require the - 1xx shared components as input. The artifacts produced by stage 1 contain - all required packages. ## Build Command Arguments @@ -561,7 +558,8 @@ tar -ozxf artifacts/assets/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ ./build.sh --source-only \ --with-sdk /tmp/dotnet/sdk \ - --with-packages /tmp/dotnet/artifacts + --with-packages /tmp/dotnet/artifacts \ + --with-shared-components /tmp/dotnet/artifacts # Final source-built outputs available in artifacts/x64/Release/ ``` @@ -573,7 +571,7 @@ flowchart LR MS_Art[Microsoft-built artifacts] end - subgraph SB1xx["Previous 1xx SB Release"] + subgraph SB1xx["Current 1xx SB Release"] SB_1xx[Source-built 1xx artifacts] end @@ -598,6 +596,7 @@ flowchart LR Build1 --> S1_Art S1_SDK -.->|with-sdk| Build2 S1_Art -.->|with-packages| Build2 + S1_Art -.->|with-shared-components| Build2 Build2 --> Final_SDK Build2 --> Final_Art @@ -751,7 +750,8 @@ tar -ozxf artifacts/assets/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ ./build.sh --source-only \ --with-sdk /tmp/dotnet/sdk \ - --with-packages /tmp/dotnet/artifacts + --with-packages /tmp/dotnet/artifacts \ + --with-shared-components /tmp/dotnet/artifacts # Final source-built outputs available in artifacts/x64/Release/ ``` @@ -788,6 +788,7 @@ flowchart LR Build1 --> S1_Art S1_SDK -.->|with-sdk| Build2 S1_Art -.->|with-packages| Build2 + S1_Art -.->|with-shared-components| Build2 Build2 --> Final_SDK Build2 --> Final_Art From 0f4c88a4bb6fd35be8c9d68059020caaac56b919 Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Tue, 28 Oct 2025 09:32:28 -0500 Subject: [PATCH 11/21] Fix linter errors --- Documentation/feature-band-source-building.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index c3ff706f65..00fa15796d 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -201,7 +201,7 @@ SDK tooling band that ships after the 1xx band: excluded - **Purpose**: Adds enhanced developer tooling features - **Release cycle**: Independent of other band releases -- **Dependencies**: +- **Dependencies**: - Initial release (N.0.200) depends on the latest 1xx release - Subsequent releases can depend on previous 2xx releases - Always uses shared runtime components from 1xx band @@ -347,7 +347,7 @@ later feature bands continue to use 1xx as input, not just the previous band. - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Microsoft-built previous N.0.2xx release - SDK: Microsoft-built previous N.0.2xx release -- **[Bootstrap (N.0.301+)](#2xx-band-bootstrap-n0300)**: +- **[Bootstrap (N.0.301+)](#3xx-band-bootstrap-n0301)**: - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Microsoft-built previous N.0.3xx release - SDK: Microsoft-built previous N.0.3xx release From 60ae7e823716eab217486f2602f33623dcbd1c44 Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Tue, 28 Oct 2025 09:44:18 -0500 Subject: [PATCH 12/21] Fix link --- Documentation/feature-band-source-building.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index 00fa15796d..4b345ee556 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -347,7 +347,7 @@ later feature bands continue to use 1xx as input, not just the previous band. - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Microsoft-built previous N.0.2xx release - SDK: Microsoft-built previous N.0.2xx release -- **[Bootstrap (N.0.301+)](#3xx-band-bootstrap-n0301)**: +- **[Bootstrap (N.0.301+)](#3xx-band-bootstrap-n0300)**: - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Microsoft-built previous N.0.3xx release - SDK: Microsoft-built previous N.0.3xx release From 5e251077d8b6eaa7a0a38d142cff6ecbadc20bce Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Wed, 29 Oct 2025 12:35:41 -0500 Subject: [PATCH 13/21] Update Documentation/feature-band-source-building.md Co-authored-by: Michael Simons --- Documentation/feature-band-source-building.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index 4b345ee556..e9132b6679 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -281,7 +281,7 @@ Note: Only the 1xx SDK is guaranteed to build the shared runtime components - Release schedules across bands are not necessarily aligned. - 1xx band produces the shared runtime that all bands use. -- Only 1xx and one other band (2xx, 3xx, or 4xx) are in support at any given +- Only 1xx and at most one other band (2xx, 3xx, or 4xx) are in support at any given time. - The initial release of each feature band depends on the latest release of the previous band. From c562b17e2617c740c9b407fd298bab42ece91443 Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Wed, 29 Oct 2025 10:37:09 -0500 Subject: [PATCH 14/21] Change the ordering of scenarios The diff makes this look more complicated than it is. All I did was swap the order so that bootstrap was positioned after servicing. --- Documentation/feature-band-source-building.md | 178 +++++++++--------- 1 file changed, 89 insertions(+), 89 deletions(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index e9132b6679..07f2d7643a 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -20,11 +20,11 @@ multiple SDK feature bands. - [1xx Band Bootstrap](#1xx-band-bootstrap) - [1xx Band Servicing](#1xx-band-servicing) - [2xx Band Initial Release (N.0.200)](#2xx-band-initial-release-n0200) - - [2xx Band Bootstrap (N.0.200+)](#2xx-band-bootstrap-n0200) - [2xx Band Servicing (N.0.201+)](#2xx-band-servicing-n0201) + - [2xx Band Bootstrap (N.0.200+)](#2xx-band-bootstrap-n0200) - [3xx Band Initial Release (N.0.300)](#3xx-band-initial-release-n0300) - - [3xx Band Bootstrap (N.0.300+)](#3xx-band-bootstrap-n0300) - [3xx Band Servicing (N.0.301+)](#3xx-band-servicing-n0301) + - [3xx Band Bootstrap (N.0.300+)](#3xx-band-bootstrap-n0300) - [Troubleshooting](#troubleshooting) - [Poison and Prebuilt Detection](#poison-and-prebuilt-detection) - [Additional Resources](#additional-resources) @@ -524,6 +524,59 @@ flowchart LR class SBCurrent2xx curr2xx ``` +### 2xx Band Servicing (N.0.201+) + +For ongoing 2xx servicing builds. + +Required inputs: + +- source-built artifacts of the current 1xx release +- source-built SDK and artifacts from the previous 2xx release + +```bash +git clone -b <2xx-release-branch> https://github.com/dotnet/dotnet.git +cd dotnet + +# Build the SDK +./build.sh --source-only \ + --with-sdk /path/to/previous-source-built-2xx/sdk \ + --with-packages /path/to/previous-source-built-2xx/artifacts \ + --with-shared-components /path/to/current-source-built-1xx/artifacts + +# Final source-built outputs available in artifacts/x64/Release/ +``` + +```mermaid +flowchart LR + subgraph SBPrev2xx["Previous 2xx SB Release"] + Prev_1xx_SDK[Source-built
2xx SDK] + Prev_2xx_Art[Source-built
2xx Artifacts] + end + + subgraph SBCurrent1xx["Current 1xx SB Release"] + Curr_1xx_Art[Current source-built
1xx Artifacts] + end + + subgraph SBCurrent2xx["Current 2xx SB Release"] + Build((Build Process)) + SDK_2xx[New 2xx SDK] + Art_2xx[New 2xx Artifacts] + end + + Prev_1xx_SDK -.->|with-sdk| Build + Prev_2xx_Art -.->|with-packages| Build + Curr_1xx_Art -.->|with-shared-components| Build + Build --> SDK_2xx + Build --> Art_2xx + + classDef prev2xx fill:#c98989,stroke:#666,stroke-width:2px,color:#000 + classDef curr1xx fill:#5bb75b,stroke:#666,stroke-width:2px,color:#000 + classDef curr2xx fill:#3da53d,stroke:#666,stroke-width:2px,color:#000 + class SBPrev2xx prev2xx + class SBCurrent1xx curr1xx + class SBCurrent2xx curr2xx +``` + ### 2xx Band Bootstrap (N.0.200+) For 2xx releases that require bootstrap (two-stage process). @@ -608,17 +661,18 @@ flowchart LR class SB curr2xx ``` -### 2xx Band Servicing (N.0.201+) +### 3xx Band Initial Release (N.0.300) -For ongoing 2xx servicing builds. +For the initial 3xx release. The same pattern applies to 4xx band initial +release (N.0.400), which would depend on the latest 3xx release instead of 2xx. Required inputs: -- source-built artifacts of the current 1xx release +- source-built artifacts from the current 1xx release - source-built SDK and artifacts from the previous 2xx release ```bash -git clone -b <2xx-release-branch> https://github.com/dotnet/dotnet.git +git clone -b <3xx-release-branch> https://github.com/dotnet/dotnet.git cd dotnet # Build the SDK @@ -633,43 +687,43 @@ cd dotnet ```mermaid flowchart LR subgraph SBPrev2xx["Previous 2xx SB Release"] - Prev_1xx_SDK[Source-built
2xx SDK] - Prev_2xx_Art[Source-built
2xx Artifacts] + Prev_2xx_SDK[Source-built 2xx SDK] + Prev_2xx_Art[Source-built 2xx Artifacts] end - subgraph SBCurrent1xx["Current 1xx SB Release"] - Curr_1xx_Art[Current source-built
1xx Artifacts] + subgraph SBCurr1xx["Current 1xx SB Release"] + Curr_1xx_Art[Source-built 1xx artifacts] end - subgraph SBCurrent2xx["Current 2xx SB Release"] + subgraph SBCurr3xx["Current 3xx SB Release"] Build((Build Process)) - SDK_2xx[New 2xx SDK] - Art_2xx[New 2xx Artifacts] + SDK_3xx[New 3xx SDK] + Art_3xx[New 3xx Artifacts] end - Prev_1xx_SDK -.->|with-sdk| Build - Prev_2xx_Art -.->|with-packages| Build - Curr_1xx_Art -.->|with-shared-components| Build - Build --> SDK_2xx - Build --> Art_2xx + Prev_2xx_SDK -.-> Build + Prev_2xx_Art -.->|PSB| Build + Curr_1xx_Art -.->|shared components| Build + Build --> SDK_3xx + Build --> Art_3xx classDef prev2xx fill:#c98989,stroke:#666,stroke-width:2px,color:#000 classDef curr1xx fill:#5bb75b,stroke:#666,stroke-width:2px,color:#000 - classDef curr2xx fill:#3da53d,stroke:#666,stroke-width:2px,color:#000 + classDef curr3xx fill:#2d8b2d,stroke:#666,stroke-width:2px,color:#000 class SBPrev2xx prev2xx - class SBCurrent1xx curr1xx - class SBCurrent2xx curr2xx + class SBCurr1xx curr1xx + class SBCurr3xx curr3xx ``` -### 3xx Band Initial Release (N.0.300) +### 3xx Band Servicing (N.0.301+) -For the initial 3xx release. The same pattern applies to 4xx band initial -release (N.0.400), which would depend on the latest 3xx release instead of 2xx. +For ongoing 3xx servicing builds. The same pattern applies to 4xx band +servicing (N.0.401+). Required inputs: - source-built artifacts from the current 1xx release -- source-built SDK and artifacts from the previous 2xx release +- source-built SDK and artifacts from the previous 3xx release ```bash git clone -b <3xx-release-branch> https://github.com/dotnet/dotnet.git @@ -677,8 +731,8 @@ cd dotnet # Build the SDK ./build.sh --source-only \ - --with-sdk /path/to/previous-source-built-2xx/sdk \ - --with-packages /path/to/previous-source-built-2xx/artifacts \ + --with-sdk /path/to/previous-source-built-3xx/sdk \ + --with-packages /path/to/previous-source-built-3xx/artifacts \ --with-shared-components /path/to/current-source-built-1xx/artifacts # Final source-built outputs available in artifacts/x64/Release/ @@ -686,9 +740,9 @@ cd dotnet ```mermaid flowchart LR - subgraph SBPrev2xx["Previous 2xx SB Release"] - Prev_2xx_SDK[Source-built 2xx SDK] - Prev_2xx_Art[Source-built 2xx Artifacts] + subgraph SBPrev3xx["Previous 3xx SB Release"] + Prev_3xx_SDK[Source-built 3xx SDK] + Prev_3xx_Art[Source-built 3xx artifacts] end subgraph SBCurr1xx["Current 1xx SB Release"] @@ -701,16 +755,16 @@ flowchart LR Art_3xx[New 3xx Artifacts] end - Prev_2xx_SDK -.-> Build - Prev_2xx_Art -.->|PSB| Build - Curr_1xx_Art -.->|shared components| Build + Prev_3xx_SDK -.->|with-sdk| Build + Prev_3xx_Art -.->|with-packages| Build + Curr_1xx_Art -.->|with-shared-components| Build Build --> SDK_3xx Build --> Art_3xx - classDef prev2xx fill:#c98989,stroke:#666,stroke-width:2px,color:#000 + classDef prev3xx fill:#c98989,stroke:#666,stroke-width:2px,color:#000 classDef curr1xx fill:#5bb75b,stroke:#666,stroke-width:2px,color:#000 classDef curr3xx fill:#2d8b2d,stroke:#666,stroke-width:2px,color:#000 - class SBPrev2xx prev2xx + class SBPrev3xx prev3xx class SBCurr1xx curr1xx class SBCurr3xx curr3xx ``` @@ -800,60 +854,6 @@ flowchart LR class SBCurr3xx curr3xx ``` -### 3xx Band Servicing (N.0.301+) - -For ongoing 3xx servicing builds. The same pattern applies to 4xx band -servicing (N.0.401+). - -Required inputs: - -- source-built artifacts from the current 1xx release -- source-built SDK and artifacts from the previous 3xx release - -```bash -git clone -b <3xx-release-branch> https://github.com/dotnet/dotnet.git -cd dotnet - -# Build the SDK -./build.sh --source-only \ - --with-sdk /path/to/previous-source-built-3xx/sdk \ - --with-packages /path/to/previous-source-built-3xx/artifacts \ - --with-shared-components /path/to/current-source-built-1xx/artifacts - -# Final source-built outputs available in artifacts/x64/Release/ -``` - -```mermaid -flowchart LR - subgraph SBPrev3xx["Previous 3xx SB Release"] - Prev_3xx_SDK[Source-built 3xx SDK] - Prev_3xx_Art[Source-built 3xx artifacts] - end - - subgraph SBCurr1xx["Current 1xx SB Release"] - Curr_1xx_Art[Source-built 1xx artifacts] - end - - subgraph SBCurr3xx["Current 3xx SB Release"] - Build((Build Process)) - SDK_3xx[New 3xx SDK] - Art_3xx[New 3xx Artifacts] - end - - Prev_3xx_SDK -.->|with-sdk| Build - Prev_3xx_Art -.->|with-packages| Build - Curr_1xx_Art -.->|with-shared-components| Build - Build --> SDK_3xx - Build --> Art_3xx - - classDef prev3xx fill:#c98989,stroke:#666,stroke-width:2px,color:#000 - classDef curr1xx fill:#5bb75b,stroke:#666,stroke-width:2px,color:#000 - classDef curr3xx fill:#2d8b2d,stroke:#666,stroke-width:2px,color:#000 - class SBPrev3xx prev3xx - class SBCurr1xx curr1xx - class SBCurr3xx curr3xx -``` - ## Troubleshooting **Error**: `Shared components cannot be provided as input to a build which From 9da7560647459b09e68e1aa88066ce90a098a0b1 Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Wed, 29 Oct 2025 10:39:51 -0500 Subject: [PATCH 15/21] Update labels for flow arrows --- Documentation/feature-band-source-building.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index 07f2d7643a..0b86019028 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -701,9 +701,9 @@ flowchart LR Art_3xx[New 3xx Artifacts] end - Prev_2xx_SDK -.-> Build - Prev_2xx_Art -.->|PSB| Build - Curr_1xx_Art -.->|shared components| Build + Prev_2xx_SDK -.->|with-sdk| Build + Prev_2xx_Art -.->|with-packages| Build + Curr_1xx_Art -.->|with-shared-components| Build Build --> SDK_3xx Build --> Art_3xx From 82ff0a3b7be4880fe66329fba6deb9d71c5b7127 Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Wed, 29 Oct 2025 12:23:37 -0500 Subject: [PATCH 16/21] Update chart label --- Documentation/feature-band-source-building.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index 0b86019028..ea1c64491f 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -145,7 +145,7 @@ releases. ```mermaid flowchart TD - subgraph Sequential["Sequential Build (Single-Stage)"] + subgraph Sequential["Sequential (Single-Stage)"] Prev_SDK[Previous Source-Built SDK] --> Build Prev_Artifacts[Previous Source-Built
Artifacts] --> Build Build --> Final1[Final Source-Built SDK] From 8aeb886e9ac20ed77625bf4352b48491909018a9 Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Wed, 29 Oct 2025 12:28:45 -0500 Subject: [PATCH 17/21] Update 1xx support statement --- Documentation/feature-band-source-building.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index ea1c64491f..052c831375 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -190,8 +190,7 @@ The foundational feature band that ships with .NET GA releases: - **Release cycle**: Follows .NET GA release schedule with monthly servicing updates - **Compatibility**: Non-breaking changes only during servicing -- **Support**: Always in support alongside one other feature band (2xx, 3xx, - or 4xx) +- **Support**: In support for the lifetime of the associated .NET major version ### 2xx Band From 9b62f7969dbd4248bb301a0cb04e1356551e49bb Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Wed, 29 Oct 2025 12:35:28 -0500 Subject: [PATCH 18/21] Update release schedule --- Documentation/feature-band-source-building.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index 052c831375..53daae4186 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -278,7 +278,8 @@ Note: Only the 1xx SDK is guaranteed to build the shared runtime components ### Feature Band Key Points -- Release schedules across bands are not necessarily aligned. +- Release schedules across bands are not necessarily aligned (unless there is + a security release in the shared components in which case they will be aligned). - 1xx band produces the shared runtime that all bands use. - Only 1xx and at most one other band (2xx, 3xx, or 4xx) are in support at any given time. From f838e479473848fb437e2197fad42ec24d183dbf Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Wed, 29 Oct 2025 12:54:25 -0500 Subject: [PATCH 19/21] Combine bootstrap input descriptions --- Documentation/feature-band-source-building.md | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index 53daae4186..b3ee8d3217 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -324,14 +324,11 @@ later feature bands continue to use 1xx as input, not just the previous band. - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Source-built previous N.0.1xx release - SDK: Source-built previous N.0.1xx release -- **[Bootstrap initial release (N.0.200)](#2xx-band-bootstrap-n0200)**: +- **[Bootstrap (N.0.200+)](#2xx-band-bootstrap-n0200)**: - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Microsoft-built previous N.0.1xx release + - PSB artifacts: Microsoft-built previous N.0.1xx (for bootstrapping N.0.200) + or N.0.2xx (for bootstrapping N0.0.201+) release - SDK: Microsoft-built previous N.0.1xx release -- **[Bootstrap (N.0.201+)](#2xx-band-bootstrap-n0200)**: - - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Microsoft-built previous N.0.2xx release - - SDK: Microsoft-built previous N.0.2xx release - **[Servicing (N.0.201+)](#2xx-band-servicing-n0201)**: - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Source-built previous N.0.2xx release @@ -343,14 +340,11 @@ later feature bands continue to use 1xx as input, not just the previous band. - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Source-built previous N.0.2xx release - SDK: Source-built previous N.0.2xx release -- **[Bootstrap initial release (N.0.300)](#3xx-band-bootstrap-n0300)**: +- **[Bootstrap (N.0.300+)](#3xx-band-bootstrap-n0300)**: - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Microsoft-built previous N.0.2xx release + - PSB artifacts: Microsoft-built previous N.0.2xx (for bootstrapping N.0.300) + or N.0.3xx (for bootstrapping N.0.301+) release - SDK: Microsoft-built previous N.0.2xx release -- **[Bootstrap (N.0.301+)](#3xx-band-bootstrap-n0300)**: - - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Microsoft-built previous N.0.3xx release - - SDK: Microsoft-built previous N.0.3xx release - **[Servicing (N.0.301+)](#3xx-band-servicing-n0301)**: - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Source-built previous N.0.3xx release From 4e69de87b6471c192157c21ce321251f5c5bfa4c Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Wed, 29 Oct 2025 14:04:25 -0500 Subject: [PATCH 20/21] Combine 3xx/4xx into common patterns --- Documentation/feature-band-source-building.md | 244 +++++------------- 1 file changed, 65 insertions(+), 179 deletions(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index b3ee8d3217..56e13a9907 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -17,14 +17,12 @@ multiple SDK feature bands. - [Build Command Arguments](#build-command-arguments) - [Distro Maintainer Workflows](#distro-maintainer-workflows) - [Input Artifacts Summary](#input-artifacts-summary) - - [1xx Band Bootstrap](#1xx-band-bootstrap) - [1xx Band Servicing](#1xx-band-servicing) - [2xx Band Initial Release (N.0.200)](#2xx-band-initial-release-n0200) - [2xx Band Servicing (N.0.201+)](#2xx-band-servicing-n0201) - - [2xx Band Bootstrap (N.0.200+)](#2xx-band-bootstrap-n0200) - - [3xx Band Initial Release (N.0.300)](#3xx-band-initial-release-n0300) - - [3xx Band Servicing (N.0.301+)](#3xx-band-servicing-n0301) - - [3xx Band Bootstrap (N.0.300+)](#3xx-band-bootstrap-n0300) + - [3xx Band Initial Release (N.0.300)](#3xx4xx-band-initial-release-n0b00) + - [3xx Band Servicing (N.0.301+)](#3xx4xx-band-servicing-n0b01) + - [2xx/3xx/4xx Bootstrap (N.0.B00+)](#2xx3xx4xx-bootstrap-n0b00) - [Troubleshooting](#troubleshooting) - [Poison and Prebuilt Detection](#poison-and-prebuilt-detection) - [Additional Resources](#additional-resources) @@ -106,6 +104,13 @@ flowchart LR *Dotted lines indicate shared runtime components from the 1xx band; solid lines show SDK tooling dependencies between bands* +**Note on 3xx and 4xx bands**: The 3xx and 4xx bands follow the same build patterns. +To keep the document more concise, the pattern used by 3xx and 4xx will be +described in a general way that is come to both bands. When `Bxx` is used, it +refers to the feature band in context (e.g. `Bxx` means 3xx in the context of the +3xx feature band). Similarly, when `(B-1)xx` is used, it refers to the previous +feature band (e.g. `(B-1)xx` means 2xx in the context of the 3xx feature band). + ## Understanding Bootstrap vs Sequential Build ### Bootstrap Process (Two-Stage) @@ -206,35 +211,20 @@ SDK tooling band that ships after the 1xx band: - Always uses shared runtime components from 1xx band - **Support**: In support alongside 1xx until 3xx is released -### 3xx Band - -SDK tooling band that ships after the 2xx band: - -- **Content**: Contains only tooling sources - runtime/core libraries are - excluded -- **Purpose**: Delivers additional SDK features and capabilities -- **Release cycle**: Independent of other band releases -- **Dependencies**: - - Initial release (N.0.300) depends on the latest 2xx release - - Subsequent releases can depend on previous 3xx releases - - Always uses shared runtime components from 1xx band -- **Support**: In support alongside 1xx until 4xx is released - -### 4xx Band +### 3xx/4xx Band -SDK tooling band that ships after the 3xx band: +Subsequent SDK tooling bands after 2xx band: - **Content**: Contains only tooling sources - runtime/core libraries are excluded - **Purpose**: Delivers additional SDK features and capabilities - **Release cycle**: Independent of other band releases - **Dependencies**: - - Initial release (N.0.400) depends on the latest 3xx release - - Subsequent releases can depend on previous 4xx releases + - Initial release depends on the latest release of the previous supported feature band + - Subsequent releases can depend on previous releases of the same feature band - Always uses shared runtime components from 1xx band - **Support**: In support alongside 1xx -- **Note**: 4xx band follows the same build patterns and scenarios as 3xx, - with adjusted version numbers + - 3xx becomes unsupported when 4xx is released ## Build Requirements by Feature Band @@ -258,23 +248,14 @@ Note: Only the 1xx SDK is guaranteed to build the shared runtime components - **Servicing (N.0.201+)**: Source-built SDK and artifacts from the previous 2xx release + current 1xx artifacts -### 3xx Band Build Requirements +### 3xx/4xx Band Build Requirements - **Bootstrap (any version)**: Two-stage process using Microsoft source-built - 3xx artifacts + Microsoft 3xx SDK + prep script -- **Initial Release (N.0.300)**: Current source-built 1xx artifacts + current - source-built 2xx artifacts + current source-built 2xx SDK -- **Servicing (N.0.301+)**: Source-built SDK and artifacts from the previous - 3xx release + current 1xx artifacts - -### 4xx Band Build Requirements - -- **Bootstrap (any version)**: Two-stage process using Microsoft source-built - 4xx artifacts + Microsoft 4xx SDK + prep script -- **Initial Release (N.0.400)**: Current source-built 1xx artifacts + current - source-built 3xx artifacts + current source-built 3xx SDK -- **Servicing (N.0.401+)**: Source-built SDK and artifacts from the previous - 4xx release + current 1xx artifacts + Bxx artifacts + Microsoft Bxx SDK + prep script +- **Initial Release (N.0.B00)**: Current source-built 1xx artifacts + current + source-built (B-1)xx artifacts + current source-built (B-1)xx SDK +- **Servicing (N.0.B01+)**: Source-built SDK and artifacts from the previous + Bxx release + current 1xx artifacts ### Feature Band Key Points @@ -300,13 +281,6 @@ Feature band builds make use of these relevant command-line arguments: The following sections describe the workflows for different scenarios. -**Note on 4xx band**: The 4xx band follows the same build patterns as the 3xx -band documented below, with the version numbers adjusted accordingly (e.g., -N.0.400 instead of N.0.300). For the initial 4xx release, the dependencies -would come from the latest 3xx release instead of 2xx. The 3xx band also follows -the same pattern as 2xx but is documented here for clarity to illustrate that -later feature bands continue to use 1xx as input, not just the previous band. - ### Input Artifacts Summary **For 1xx band builds:** @@ -324,7 +298,7 @@ later feature bands continue to use 1xx as input, not just the previous band. - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Source-built previous N.0.1xx release - SDK: Source-built previous N.0.1xx release -- **[Bootstrap (N.0.200+)](#2xx-band-bootstrap-n0200)**: +- **[Bootstrap (N.0.200+)](#2xx3xx4xx-bootstrap-n0b00)**: - Shared component artifacts: Source-built current N.0.1xx release - PSB artifacts: Microsoft-built previous N.0.1xx (for bootstrapping N.0.200) or N.0.2xx (for bootstrapping N0.0.201+) release @@ -334,21 +308,20 @@ later feature bands continue to use 1xx as input, not just the previous band. - PSB artifacts: Source-built previous N.0.2xx release - SDK: Source-built previous N.0.2xx release -**For 3xx band builds (4xx follows the same pattern with adjusted version numbers):** +**For 3xx/4xx band builds:** -- **[Initial release (N.0.300)](#3xx-band-initial-release-n0300)**: +- **[Initial release (N.0.B00)](#3xx4xx-band-initial-release-n0b00)**: - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Source-built previous N.0.2xx release - - SDK: Source-built previous N.0.2xx release -- **[Bootstrap (N.0.300+)](#3xx-band-bootstrap-n0300)**: + - PSB artifacts: Source-built previous N.0.(B-1)xx release + - SDK: Source-built previous N.0.(B-1)xx release +- **[Bootstrap (N.0.B00+)](#2xx3xx4xx-bootstrap-n0b00)**: - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Microsoft-built previous N.0.2xx (for bootstrapping N.0.300) - or N.0.3xx (for bootstrapping N.0.301+) release - - SDK: Microsoft-built previous N.0.2xx release -- **[Servicing (N.0.301+)](#3xx-band-servicing-n0301)**: + - PSB artifacts: Microsoft-built previous N.0.(B-1)xx release + - SDK: Microsoft-built previous N.0.(B-1)xx release +- **[Servicing (N.0.B01+)](#3xx4xx-band-servicing-n0b01)**: - Shared component artifacts: Source-built current N.0.1xx release - - PSB artifacts: Source-built previous N.0.3xx release - - SDK: Source-built previous N.0.3xx release + - PSB artifacts: Source-built previous N.0.Bxx release + - SDK: Source-built previous N.0.Bxx release ### 1xx Band Bootstrap @@ -571,108 +544,23 @@ flowchart LR class SBCurrent2xx curr2xx ``` -### 2xx Band Bootstrap (N.0.200+) +### 3xx/4xx Band Initial Release (N.0.B00) -For 2xx releases that require bootstrap (two-stage process). - -Required inputs: - -- source-built artifacts of the current 1xx release - -```bash -git clone -b <2xx-release-branch> https://github.com/dotnet/dotnet.git -cd dotnet - -# === -# Stage 1: Build with Microsoft artifacts -# === - -# Downloads Microsoft-built artifacts and SDK -./prep-source-build.sh - -# Build the SDK referencing assets from current 1xx release -./build.sh --source-only --with-shared-components /path/to/source-built-1xx/artifacts - -# Extract and store the built 2xx SDK and artifacts -tar -ozxf artifacts/assets/Release/dotnet-sdk-*-tar.gz \ - -C /tmp/dotnet/sdk -tar -ozxf artifacts/assets/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ - -C /tmp/dotnet/artifacts - -# === -# Stage 2: Rebuild using stage 1 outputs -# === - -./build.sh --source-only \ - --with-sdk /tmp/dotnet/sdk \ - --with-packages /tmp/dotnet/artifacts \ - --with-shared-components /tmp/dotnet/artifacts - -# Final source-built outputs available in artifacts/x64/Release/ -``` - -```mermaid -flowchart LR - subgraph Msft["Previous MS Release"] - MS_SDK[Microsoft-built SDK] - MS_Art[Microsoft-built artifacts] - end - - subgraph SB1xx["Current 1xx SB Release"] - SB_1xx[Source-built 1xx artifacts] - end - - subgraph SB["Current SB 2xx Release"] - subgraph Stage1["Stage 1: Bootstrap Build"] - Build1((Build Process)) - S1_SDK[Stage 1 2xx SDK] - S1_Art[Stage 1 2xx Artifacts] - end - - subgraph Stage2["Stage 2: Final Build"] - Build2((Build Process)) - Final_SDK[Final 2xx SDK] - Final_Art[Final 2xx Artifacts] - end - end - - MS_SDK -.->|with-sdk| Build1 - MS_Art -.->|with-packages| Build1 - SB_1xx -.->|with-shared-components| Build1 - Build1 --> S1_SDK - Build1 --> S1_Art - S1_SDK -.->|with-sdk| Build2 - S1_Art -.->|with-packages| Build2 - S1_Art -.->|with-shared-components| Build2 - Build2 --> Final_SDK - Build2 --> Final_Art - - classDef msRelease fill:#9b9bdb,stroke:#666,stroke-width:2px,color:#000 - classDef prev1xx fill:#db9b9b,stroke:#666,stroke-width:2px,color:#000 - classDef curr2xx fill:#3da53d,stroke:#666,stroke-width:2px,color:#000 - class Msft msRelease - class SB1xx prev1xx - class SB curr2xx -``` - -### 3xx Band Initial Release (N.0.300) - -For the initial 3xx release. The same pattern applies to 4xx band initial -release (N.0.400), which would depend on the latest 3xx release instead of 2xx. +For the initial Bxx release. Required inputs: - source-built artifacts from the current 1xx release -- source-built SDK and artifacts from the previous 2xx release +- source-built SDK and artifacts from the previous (B-1)xx release ```bash -git clone -b <3xx-release-branch> https://github.com/dotnet/dotnet.git +git clone -b https://github.com/dotnet/dotnet.git cd dotnet # Build the SDK ./build.sh --source-only \ - --with-sdk /path/to/previous-source-built-2xx/sdk \ - --with-packages /path/to/previous-source-built-2xx/artifacts \ + --with-sdk /path/to/previous-source-built-(B-1)xx/sdk \ + --with-packages /path/to/previous-source-built-(B-1)xx/artifacts \ --with-shared-components /path/to/current-source-built-1xx/artifacts # Final source-built outputs available in artifacts/x64/Release/ @@ -680,19 +568,19 @@ cd dotnet ```mermaid flowchart LR - subgraph SBPrev2xx["Previous 2xx SB Release"] - Prev_2xx_SDK[Source-built 2xx SDK] - Prev_2xx_Art[Source-built 2xx Artifacts] + subgraph SBPrev2xx["Previous (B-1)xx SB Release"] + Prev_2xx_SDK[Source-built (B-1)xx SDK] + Prev_2xx_Art[Source-built (B-1)xx Artifacts] end subgraph SBCurr1xx["Current 1xx SB Release"] Curr_1xx_Art[Source-built 1xx artifacts] end - subgraph SBCurr3xx["Current 3xx SB Release"] + subgraph SBCurr3xx["Current Bxx SB Release"] Build((Build Process)) - SDK_3xx[New 3xx SDK] - Art_3xx[New 3xx Artifacts] + SDK_3xx[New Bxx SDK] + Art_3xx[New Bxx Artifacts] end Prev_2xx_SDK -.->|with-sdk| Build @@ -709,24 +597,23 @@ flowchart LR class SBCurr3xx curr3xx ``` -### 3xx Band Servicing (N.0.301+) +### 3xx/4xx Band Servicing (N.0.B01+) -For ongoing 3xx servicing builds. The same pattern applies to 4xx band -servicing (N.0.401+). +For ongoing 3xx servicing builds. Required inputs: - source-built artifacts from the current 1xx release -- source-built SDK and artifacts from the previous 3xx release +- source-built SDK and artifacts from the previous Bxx release ```bash -git clone -b <3xx-release-branch> https://github.com/dotnet/dotnet.git +git clone -b https://github.com/dotnet/dotnet.git cd dotnet # Build the SDK ./build.sh --source-only \ - --with-sdk /path/to/previous-source-built-3xx/sdk \ - --with-packages /path/to/previous-source-built-3xx/artifacts \ + --with-sdk /path/to/previous-source-built-Bxx/sdk \ + --with-packages /path/to/previous-source-built-Bxx/artifacts \ --with-shared-components /path/to/current-source-built-1xx/artifacts # Final source-built outputs available in artifacts/x64/Release/ @@ -734,19 +621,19 @@ cd dotnet ```mermaid flowchart LR - subgraph SBPrev3xx["Previous 3xx SB Release"] - Prev_3xx_SDK[Source-built 3xx SDK] - Prev_3xx_Art[Source-built 3xx artifacts] + subgraph SBPrev3xx["Previous Bxx SB Release"] + Prev_3xx_SDK[Source-built Bxx SDK] + Prev_3xx_Art[Source-built Bxx artifacts] end subgraph SBCurr1xx["Current 1xx SB Release"] Curr_1xx_Art[Source-built 1xx artifacts] end - subgraph SBCurr3xx["Current 3xx SB Release"] + subgraph SBCurr3xx["Current Bxx SB Release"] Build((Build Process)) - SDK_3xx[New 3xx SDK] - Art_3xx[New 3xx Artifacts] + SDK_3xx[New Bxx SDK] + Art_3xx[New Bxx Artifacts] end Prev_3xx_SDK -.->|with-sdk| Build @@ -763,17 +650,16 @@ flowchart LR class SBCurr3xx curr3xx ``` -### 3xx Band Bootstrap (N.0.300+) +### 2xx/3xx/4xx Bootstrap (N.0.B00+) -For 3xx releases that require bootstrap (two-stage process). The same pattern -applies to 4xx band bootstrap. +For releases that require bootstrap (two-stage process). Required inputs: - source-built artifacts from the current 1xx release ```bash -git clone -b <3xx-release-branch> https://github.com/dotnet/dotnet.git +git clone -b https://github.com/dotnet/dotnet.git cd dotnet # === @@ -786,7 +672,7 @@ cd dotnet # Build the SDK referencing assets from current 1xx release ./build.sh --source-only --with-shared-components /path/to/source-built-1xx/artifacts -# Extract and store the built 3xx SDK and artifacts +# Extract and store the built Bxx SDK and artifacts tar -ozxf artifacts/assets/Release/dotnet-sdk-*-tar.gz \ -C /tmp/dotnet/sdk tar -ozxf artifacts/assets/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ @@ -815,17 +701,17 @@ flowchart LR SB_1xx[Source-built 1xx artifacts] end - subgraph SBCurr3xx["Current 3xx SB Release"] + subgraph SBCurr3xx["Current Bxx SB Release"] subgraph Stage1["Stage 1: Bootstrap Build"] Build1((Build Process)) - S1_SDK[Stage 1 3xx SDK] - S1_Art[Stage 1 3xx artifacts] + S1_SDK[Stage 1 Bxx SDK] + S1_Art[Stage 1 Bxx artifacts] end subgraph Stage2["Stage 2: Build"] Build2((Build Process)) - Final_SDK[Final 3xx SDK] - Final_Art[Final 3xx artifacts] + Final_SDK[Final Bxx SDK] + Final_Art[Final Bxx artifacts] end end From 72f544432e325bec917062269c02b1024bbc044d Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Wed, 29 Oct 2025 14:09:55 -0500 Subject: [PATCH 21/21] remove trailing space --- Documentation/feature-band-source-building.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/feature-band-source-building.md b/Documentation/feature-band-source-building.md index 56e13a9907..fa86da734a 100644 --- a/Documentation/feature-band-source-building.md +++ b/Documentation/feature-band-source-building.md @@ -107,7 +107,7 @@ lines show SDK tooling dependencies between bands* **Note on 3xx and 4xx bands**: The 3xx and 4xx bands follow the same build patterns. To keep the document more concise, the pattern used by 3xx and 4xx will be described in a general way that is come to both bands. When `Bxx` is used, it -refers to the feature band in context (e.g. `Bxx` means 3xx in the context of the +refers to the feature band in context (e.g. `Bxx` means 3xx in the context of the 3xx feature band). Similarly, when `(B-1)xx` is used, it refers to the previous feature band (e.g. `(B-1)xx` means 2xx in the context of the 3xx feature band).