diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index a34764e2f25c..d0376f567c52 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"microsoft.dotnet.darc": {
- "version": "1.1.0-beta.24112.3",
+ "version": "1.1.0-beta.24157.2",
"commands": [
"darc"
]
diff --git a/.vsts-pr.yml b/.vsts-pr.yml
new file mode 100644
index 000000000000..429c53be0639
--- /dev/null
+++ b/.vsts-pr.yml
@@ -0,0 +1,361 @@
+trigger:
+ batch: true
+ branches:
+ include:
+ - main
+ - master
+ - release/*
+ - internal/release/*
+
+variables:
+- name: _PublishUsingPipelines
+ value: false
+- ${{ if or(startswith(variables['Build.SourceBranch'], 'refs/heads/release/'), startswith(variables['Build.SourceBranch'], 'refs/heads/internal/release/'), eq(variables['Build.Reason'], 'Manual')) }}:
+ - name: PostBuildSign
+ value: false
+- ${{ else }}:
+ - name: PostBuildSign
+ value: true
+- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
+ - name: Codeql.Enabled
+ value: true
+ - group: DotNet-DotNetCli-Storage
+ - group: DotNet-Installer-SDLValidation-Params
+ - name: _PublishUsingPipelines
+ value: true
+
+- name: _InternalRuntimeDownloadArgs
+ value: ''
+
+- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ - group: DotNetBuilds storage account read tokens
+ - name: _InternalRuntimeDownloadArgs
+ value: /p:DotNetRuntimeSourceFeed=https://dotnetbuilds.blob.core.windows.net/internal
+ /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64)
+ /p:dotnetbuilds-internal-container-read-token-base64=$(dotnetbuilds-internal-container-read-token-base64)
+
+- template: /eng/common/templates/variables/pool-providers.yml
+
+stages:
+- stage: Build
+ jobs:
+ # This job is for build retry configuration.
+ - job: Publish_Build_Configuration
+ pool:
+ ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ name: $(DncEngPublicBuildPool)
+ demands: ImageOverride -equals windows.vs2022preview.amd64.open
+ ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ name: $(DncEngInternalBuildPool)
+ demands: ImageOverride -equals windows.vs2022preview.amd64
+ steps:
+ - publish: $(Build.SourcesDirectory)\eng\buildConfiguration
+ artifact: buildConfiguration
+ displayName: Publish Build Config
+
+ ## PR-only jobs
+
+ - ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
+
+ ## Windows
+
+ - template: eng/build.yml
+ parameters:
+ agentOs: Windows_NT
+ jobName: Build_Debug_x64
+ buildConfiguration: Debug
+ buildArchitecture: x64
+ additionalBuildParameters: '/p:PublishInternalAsset=true'
+ runTests: true
+
+ ## Linux
+
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ jobName: Build_Ubuntu_22_04_Debug_x64
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04'
+ buildConfiguration: Debug
+ buildArchitecture: x64
+ linuxPortable: true
+ runTests: true
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ jobName: Build_Fedora_39_Debug_x64
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-39'
+ buildConfiguration: Debug
+ buildArchitecture: x64
+ linuxPortable: true
+ runTests: true
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ jobName: Build_CentOS_8_Stream_Debug_x64
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8'
+ buildConfiguration: Debug
+ buildArchitecture: x64
+ linuxPortable: false
+ runTests: true
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ jobName: Build_Debian_11_Debug_x64
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-amd64'
+ buildConfiguration: Debug
+ buildArchitecture: x64
+ additionalBuildParameters: '/p:BuildSdkDeb=true'
+ linuxPortable: false
+ runTests: true
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ jobName: Build_Arm64_Debug
+ buildConfiguration: Debug
+ buildArchitecture: arm64
+ runtimeIdentifier: 'linux-arm64'
+ linuxPortable: true
+ # Never run tests on arm64
+ runTests: false
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ jobName: Build_Linux_musl_Debug_x64
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.19-WithNode'
+ buildConfiguration: Debug
+ buildArchitecture: x64
+ runtimeIdentifier: 'linux-musl-x64'
+ # Pass in HostOSName when running on alpine
+ additionalBuildParameters: '/p:HostOSName="linux-musl"'
+ linuxPortable: false
+ runTests: true
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ jobName: Build_LinuxPortable_Release_x64
+ buildConfiguration: Release
+ buildArchitecture: x64
+ linuxPortable: true
+ runTests: true
+
+ # MacOS
+
+ - template: eng/build.yml
+ parameters:
+ agentOs: Darwin
+ jobName: Build_Release_x64
+ buildConfiguration: Release
+ buildArchitecture: x64
+ runTests: true
+
+ ## Official/PGO instrumentation Builds
+
+ - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
+
+ ## Windows
+
+ - template: eng/build.yml
+ parameters:
+ agentOs: Windows_NT
+ jobName: Build_Release_x64
+ buildConfiguration: Release
+ buildArchitecture: x64
+ additionalBuildParameters: '/p:PublishInternalAsset=true'
+ runTests: false
+ - template: eng/build.yml
+ parameters:
+ agentOs: Windows_NT
+ jobName: Build_Release_x86
+ buildConfiguration: Release
+ buildArchitecture: x86
+ runTests: false
+ - template: eng/build.yml
+ parameters:
+ agentOs: Windows_NT
+ jobName: Build_Release_arm64
+ buildConfiguration: Release
+ buildArchitecture: arm64
+ runTests: false
+
+ ## Linux
+
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ jobName: Build_Arm_Release
+ buildConfiguration: Release
+ buildArchitecture: arm
+ runtimeIdentifier: 'linux-arm'
+ linuxPortable: true
+ runTests: false
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ jobName: Build_Arm64_Release
+ buildConfiguration: Release
+ buildArchitecture: arm64
+ runtimeIdentifier: 'linux-arm64'
+ linuxPortable: true
+ runTests: false
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ jobName: Build_Linux_musl_Release_arm
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-cross-arm-alpine'
+ buildConfiguration: Release
+ buildArchitecture: arm
+ runtimeIdentifier: 'linux-musl-arm'
+ additionalBuildParameters: '/p:OSName="linux-musl"'
+ linuxPortable: false
+ runTests: false
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ jobName: Build_Linux_musl_Release_arm64
+ buildConfiguration: Release
+ buildArchitecture: arm64
+ runtimeIdentifier: 'linux-musl-arm64'
+ additionalBuildParameters: '/p:OSName="linux-musl"'
+ linuxPortable: false
+ runTests: false
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ jobName: Build_Linux_musl_Release_x64
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.19-WithNode'
+ buildConfiguration: Release
+ buildArchitecture: x64
+ runtimeIdentifier: 'linux-musl-x64'
+ # Pass in HostOSName when running on alpine
+ additionalBuildParameters: '/p:HostOSName="linux-musl"'
+ linuxPortable: false
+ runTests: false
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ jobName: Build_Linux_Portable_Deb_Release_x64
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-debpkg'
+ buildConfiguration: Release
+ buildArchitecture: x64
+ # Do not publish zips and tarballs. The linux-x64 binaries are
+ # already published by Build_LinuxPortable_Release_x64
+ additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:BuildSdkDeb=true'
+ linuxPortable: true
+ runTests: false
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ jobName: Build_Linux_Portable_Rpm_Release_x64
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-fpm'
+ buildConfiguration: Release
+ buildArchitecture: x64
+ # Do not publish zips and tarballs. The linux-x64 binaries are
+ # already published by Build_LinuxPortable_Release_x64
+ additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:IsRPMBasedDistro=true'
+ linuxPortable: true
+ runTests: false
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ jobName: Build_Linux_Portable_Rpm_Release_Arm64
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-fpm'
+ buildConfiguration: Release
+ buildArchitecture: arm64
+ runtimeIdentifier: 'linux-arm64'
+ # Do not publish zips and tarballs. The linux-x64 binaries are
+ # already published by Build_LinuxPortable_Release_x64
+ additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:CLIBUILD_SKIP_TESTS=true /p:IsRPMBasedDistro=true'
+ linuxPortable: true
+ runTests: false
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ jobName: Build_LinuxPortable_Release_x64
+ buildConfiguration: Release
+ buildArchitecture: x64
+ linuxPortable: true
+ runTests: false
+
+ # MacOS
+
+ - template: eng/build.yml
+ parameters:
+ agentOs: Darwin
+ jobName: Build_Release_x64
+ buildConfiguration: Release
+ buildArchitecture: x64
+ runTests: false
+ - template: eng/build.yml
+ parameters:
+ agentOs: Darwin
+ jobName: Build_Release_arm64
+ runtimeIdentifier: 'osx-arm64'
+ buildConfiguration: Release
+ buildArchitecture: arm64
+ runTests: false
+
+ ## Windows PGO Instrumentation builds
+
+ - template: eng/build.yml
+ parameters:
+ agentOs: Windows_NT
+ pgoInstrument: true
+ jobName: Build_Release_x64
+ buildConfiguration: Release
+ buildArchitecture: x64
+ additionalBuildParameters: '/p:PublishInternalAsset=true'
+ runTests: false
+ - template: eng/build.yml
+ parameters:
+ agentOs: Windows_NT
+ pgoInstrument: true
+ jobName: Build_Release_x86
+ buildConfiguration: Release
+ buildArchitecture: x86
+ runTests: false
+ - template: eng/build.yml
+ parameters:
+ agentOs: Windows_NT
+ pgoInstrument: true
+ jobName: Build_Release_arm64
+ buildConfiguration: Release
+ buildArchitecture: arm64
+ runTests: false
+
+ ## Linux PGO Instrumentation builds
+
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ pgoInstrument: true
+ jobName: Build_LinuxPortable_Release_x64
+ buildConfiguration: Release
+ buildArchitecture: x64
+ linuxPortable: true
+ runTests: false
+
+ - template: eng/build.yml
+ parameters:
+ agentOs: Linux
+ pgoInstrument: true
+ jobName: Build_Release_arm64
+ buildConfiguration: Release
+ buildArchitecture: arm64
+ linuxPortable: true
+ runTests: false
+
+ - template: /eng/common/templates/jobs/source-build.yml
+
+- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
+ - stage: Publish
+ dependsOn:
+ - Build
+ jobs:
+ - template: /eng/common/templates/job/publish-build-assets.yml
+ parameters:
+ publishUsingPipelines: true
+ publishAssetsImmediately: true
+ pool:
+ ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ name: $(DncEngInternalBuildPool)
+ demands: ImageOverride -equals windows.vs2022.amd64
diff --git a/CODEOWNERS b/CODEOWNERS
index 1272a3799109..b8ad3e9a9fce 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -4,5 +4,5 @@
/.devcontainer/ @dotnet/source-build-internal
/eng/SourceBuild* @dotnet/source-build-internal
/src/snaps/ @rbhanda
-/src/SourceBuild/ @dotnet/source-build-internal
+/src/SourceBuild/ @dotnet/source-build-internal @dotnet/product-construction
/src/VirtualMonoRepo/ @dotnet/product-construction
diff --git a/README.md b/README.md
index 58c25c670c82..553f83d35db4 100644
--- a/README.md
+++ b/README.md
@@ -114,7 +114,7 @@ Further instructions on how to build inside of the Codespace will be available u
tar zxf artifacts/x64/Release/dotnet-sdk-7.0.100-your-RID.tar.gz -C $HOME/dotnet
ln -s $HOME/dotnet/dotnet /usr/bin/dotnet
```
-
+
To test your source-built SDK, run the following:
```bash
@@ -170,22 +170,21 @@ Do not directly edit the table below. Use https://github.com/dotnet/installer/tr
### Table
-Use 'dotnet --help' to see available commands or visit: https://aka.ms/dotnet-cli
--------------------------------------------------------------------------------------
-| Platform | main
(9.0.x Runtime) | 9.0.1xx-preview1
(9.0-preview1 Runtime) | 8.0.3xx
(8.0 Runtime) | Release/7.0.4xx
(7.0.x Runtime) |
+| Platform | main
(9.0.x Runtime) | 9.0.1xx-preview2
(9.0-preview2 Runtime) | 8.0.3xx
(8.0 Runtime) | Release/7.0.4xx
(7.0.x Runtime) |
| :--------- | :----------: | :----------: | :----------: | :----------: |
-| **Windows x64** | [![][win-x64-badge-main]][win-x64-version-main]
[Installer][win-x64-installer-main] - [Checksum][win-x64-installer-checksum-main]
[zip][win-x64-zip-main] - [Checksum][win-x64-zip-checksum-main] | [![][win-x64-badge-9.0.1XX-preview1]][win-x64-version-9.0.1XX-preview1]
[Installer][win-x64-installer-9.0.1XX-preview1] - [Checksum][win-x64-installer-checksum-9.0.1XX-preview1]
[zip][win-x64-zip-9.0.1XX-preview1] - [Checksum][win-x64-zip-checksum-9.0.1XX-preview1] | [![][win-x64-badge-8.0.3XX]][win-x64-version-8.0.3XX]
[Installer][win-x64-installer-8.0.3XX] - [Checksum][win-x64-installer-checksum-8.0.3XX]
[zip][win-x64-zip-8.0.3XX] - [Checksum][win-x64-zip-checksum-8.0.3XX] | [![][win-x64-badge-7.0.4XX]][win-x64-version-7.0.4XX]
[Installer][win-x64-installer-7.0.4XX] - [Checksum][win-x64-installer-checksum-7.0.4XX]
[zip][win-x64-zip-7.0.4XX] - [Checksum][win-x64-zip-checksum-7.0.4XX] |
-| **Windows x86** | [![][win-x86-badge-main]][win-x86-version-main]
[Installer][win-x86-installer-main] - [Checksum][win-x86-installer-checksum-main]
[zip][win-x86-zip-main] - [Checksum][win-x86-zip-checksum-main] | [![][win-x86-badge-9.0.1XX-preview1]][win-x86-version-9.0.1XX-preview1]
[Installer][win-x86-installer-9.0.1XX-preview1] - [Checksum][win-x86-installer-checksum-9.0.1XX-preview1]
[zip][win-x86-zip-9.0.1XX-preview1] - [Checksum][win-x86-zip-checksum-9.0.1XX-preview1] | [![][win-x86-badge-8.0.3XX]][win-x86-version-8.0.3XX]
[Installer][win-x86-installer-8.0.3XX] - [Checksum][win-x86-installer-checksum-8.0.3XX]
[zip][win-x86-zip-8.0.3XX] - [Checksum][win-x86-zip-checksum-8.0.3XX] | [![][win-x86-badge-7.0.4XX]][win-x86-version-7.0.4XX]
[Installer][win-x86-installer-7.0.4XX] - [Checksum][win-x86-installer-checksum-7.0.4XX]
[zip][win-x86-zip-7.0.4XX] - [Checksum][win-x86-zip-checksum-7.0.4XX] |
+| **Windows x64** | [![][win-x64-badge-main]][win-x64-version-main]
[Installer][win-x64-installer-main] - [Checksum][win-x64-installer-checksum-main]
[zip][win-x64-zip-main] - [Checksum][win-x64-zip-checksum-main] | [![][win-x64-badge-9.0.1XX-preview2]][win-x64-version-9.0.1XX-preview2]
[Installer][win-x64-installer-9.0.1XX-preview2] - [Checksum][win-x64-installer-checksum-9.0.1XX-preview2]
[zip][win-x64-zip-9.0.1XX-preview2] - [Checksum][win-x64-zip-checksum-9.0.1XX-preview2] | [![][win-x64-badge-8.0.3XX]][win-x64-version-8.0.3XX]
[Installer][win-x64-installer-8.0.3XX] - [Checksum][win-x64-installer-checksum-8.0.3XX]
[zip][win-x64-zip-8.0.3XX] - [Checksum][win-x64-zip-checksum-8.0.3XX] | [![][win-x64-badge-7.0.4XX]][win-x64-version-7.0.4XX]
[Installer][win-x64-installer-7.0.4XX] - [Checksum][win-x64-installer-checksum-7.0.4XX]
[zip][win-x64-zip-7.0.4XX] - [Checksum][win-x64-zip-checksum-7.0.4XX] |
+| **Windows x86** | [![][win-x86-badge-main]][win-x86-version-main]
[Installer][win-x86-installer-main] - [Checksum][win-x86-installer-checksum-main]
[zip][win-x86-zip-main] - [Checksum][win-x86-zip-checksum-main] | [![][win-x86-badge-9.0.1XX-preview2]][win-x86-version-9.0.1XX-preview2]
[Installer][win-x86-installer-9.0.1XX-preview2] - [Checksum][win-x86-installer-checksum-9.0.1XX-preview2]
[zip][win-x86-zip-9.0.1XX-preview2] - [Checksum][win-x86-zip-checksum-9.0.1XX-preview2] | [![][win-x86-badge-8.0.3XX]][win-x86-version-8.0.3XX]
[Installer][win-x86-installer-8.0.3XX] - [Checksum][win-x86-installer-checksum-8.0.3XX]
[zip][win-x86-zip-8.0.3XX] - [Checksum][win-x86-zip-checksum-8.0.3XX] | [![][win-x86-badge-7.0.4XX]][win-x86-version-7.0.4XX]
[Installer][win-x86-installer-7.0.4XX] - [Checksum][win-x86-installer-checksum-7.0.4XX]
[zip][win-x86-zip-7.0.4XX] - [Checksum][win-x86-zip-checksum-7.0.4XX] |
| **Windows arm** | **N/A** | **N/A** | **N/A** | **N/A** |
-| **Windows arm64** | [![][win-arm64-badge-main]][win-arm64-version-main]
[Installer][win-arm64-installer-main] - [Checksum][win-arm64-installer-checksum-main]
[zip][win-arm64-zip-main] | [![][win-arm64-badge-9.0.1XX-preview1]][win-arm64-version-9.0.1XX-preview1]
[Installer][win-arm64-installer-9.0.1XX-preview1] - [Checksum][win-arm64-installer-checksum-9.0.1XX-preview1]
[zip][win-arm64-zip-9.0.1XX-preview1] | [![][win-arm64-badge-8.0.3XX]][win-arm64-version-8.0.3XX]
[Installer][win-arm64-installer-8.0.3XX] - [Checksum][win-arm64-installer-checksum-8.0.3XX]
[zip][win-arm64-zip-8.0.3XX] | [![][win-arm64-badge-7.0.4XX]][win-arm64-version-7.0.4XX]
[Installer][win-arm64-installer-7.0.4XX] - [Checksum][win-arm64-installer-checksum-7.0.4XX]
[zip][win-arm64-zip-7.0.4XX] |
-| **macOS x64** | [![][osx-x64-badge-main]][osx-x64-version-main]
[Installer][osx-x64-installer-main] - [Checksum][osx-x64-installer-checksum-main]
[tar.gz][osx-x64-targz-main] - [Checksum][osx-x64-targz-checksum-main] | [![][osx-x64-badge-9.0.1XX-preview1]][osx-x64-version-9.0.1XX-preview1]
[Installer][osx-x64-installer-9.0.1XX-preview1] - [Checksum][osx-x64-installer-checksum-9.0.1XX-preview1]
[tar.gz][osx-x64-targz-9.0.1XX-preview1] - [Checksum][osx-x64-targz-checksum-9.0.1XX-preview1] | [![][osx-x64-badge-8.0.3XX]][osx-x64-version-8.0.3XX]
[Installer][osx-x64-installer-8.0.3XX] - [Checksum][osx-x64-installer-checksum-8.0.3XX]
[tar.gz][osx-x64-targz-8.0.3XX] - [Checksum][osx-x64-targz-checksum-8.0.3XX] | [![][osx-x64-badge-7.0.4XX]][osx-x64-version-7.0.4XX]
[Installer][osx-x64-installer-7.0.4XX] - [Checksum][osx-x64-installer-checksum-7.0.4XX]
[tar.gz][osx-x64-targz-7.0.4XX] - [Checksum][osx-x64-targz-checksum-7.0.4XX] |
-| **macOS arm64** | [![][osx-arm64-badge-main]][osx-arm64-version-main]
[Installer][osx-arm64-installer-main] - [Checksum][osx-arm64-installer-checksum-main]
[tar.gz][osx-arm64-targz-main] - [Checksum][osx-arm64-targz-checksum-main] | [![][osx-arm64-badge-9.0.1XX-preview1]][osx-arm64-version-9.0.1XX-preview1]
[Installer][osx-arm64-installer-9.0.1XX-preview1] - [Checksum][osx-arm64-installer-checksum-9.0.1XX-preview1]
[tar.gz][osx-arm64-targz-9.0.1XX-preview1] - [Checksum][osx-arm64-targz-checksum-9.0.1XX-preview1] | [![][osx-arm64-badge-8.0.3XX]][osx-arm64-version-8.0.3XX]
[Installer][osx-arm64-installer-8.0.3XX] - [Checksum][osx-arm64-installer-checksum-8.0.3XX]
[tar.gz][osx-arm64-targz-8.0.3XX] - [Checksum][osx-arm64-targz-checksum-8.0.3XX] | [![][osx-arm64-badge-7.0.4XX]][osx-arm64-version-7.0.4XX]
[Installer][osx-arm64-installer-7.0.4XX] - [Checksum][osx-arm64-installer-checksum-7.0.4XX]
[tar.gz][osx-arm64-targz-7.0.4XX] - [Checksum][osx-arm64-targz-checksum-7.0.4XX] |
-| **Linux x64** | [![][linux-badge-main]][linux-version-main]
[DEB Installer][linux-DEB-installer-main] - [Checksum][linux-DEB-installer-checksum-main]
[RPM Installer][linux-RPM-installer-main] - [Checksum][linux-RPM-installer-checksum-main]
_see installer note below_1
[tar.gz][linux-targz-main] - [Checksum][linux-targz-checksum-main] | [![][linux-badge-9.0.1XX-preview1]][linux-version-9.0.1XX-preview1]
[DEB Installer][linux-DEB-installer-9.0.1XX-preview1] - [Checksum][linux-DEB-installer-checksum-9.0.1XX-preview1]
[RPM Installer][linux-RPM-installer-9.0.1XX-preview1] - [Checksum][linux-RPM-installer-checksum-9.0.1XX-preview1]
_see installer note below_1
[tar.gz][linux-targz-9.0.1XX-preview1] - [Checksum][linux-targz-checksum-9.0.1XX-preview1] | [![][linux-badge-8.0.3XX]][linux-version-8.0.3XX]
[DEB Installer][linux-DEB-installer-8.0.3XX] - [Checksum][linux-DEB-installer-checksum-8.0.3XX]
[RPM Installer][linux-RPM-installer-8.0.3XX] - [Checksum][linux-RPM-installer-checksum-8.0.3XX]
_see installer note below_1
[tar.gz][linux-targz-8.0.3XX] - [Checksum][linux-targz-checksum-8.0.3XX] | [![][linux-badge-7.0.4XX]][linux-version-7.0.4XX]
[DEB Installer][linux-DEB-installer-7.0.4XX] - [Checksum][linux-DEB-installer-checksum-7.0.4XX]
[RPM Installer][linux-RPM-installer-7.0.4XX] - [Checksum][linux-RPM-installer-checksum-7.0.4XX]
_see installer note below_1
[tar.gz][linux-targz-7.0.4XX] - [Checksum][linux-targz-checksum-7.0.4XX] |
-| **Linux arm** | [![][linux-arm-badge-main]][linux-arm-version-main]
[tar.gz][linux-arm-targz-main] - [Checksum][linux-arm-targz-checksum-main] | [![][linux-arm-badge-9.0.1XX-preview1]][linux-arm-version-9.0.1XX-preview1]
[tar.gz][linux-arm-targz-9.0.1XX-preview1] - [Checksum][linux-arm-targz-checksum-9.0.1XX-preview1] | [![][linux-arm-badge-8.0.3XX]][linux-arm-version-8.0.3XX]
[tar.gz][linux-arm-targz-8.0.3XX] - [Checksum][linux-arm-targz-checksum-8.0.3XX] | [![][linux-arm-badge-7.0.4XX]][linux-arm-version-7.0.4XX]
[tar.gz][linux-arm-targz-7.0.4XX] - [Checksum][linux-arm-targz-checksum-7.0.4XX] |
-| **Linux arm64** | [![][linux-arm64-badge-main]][linux-arm64-version-main]
[tar.gz][linux-arm64-targz-main] - [Checksum][linux-arm64-targz-checksum-main] | [![][linux-arm64-badge-9.0.1XX-preview1]][linux-arm64-version-9.0.1XX-preview1]
[tar.gz][linux-arm64-targz-9.0.1XX-preview1] - [Checksum][linux-arm64-targz-checksum-9.0.1XX-preview1] | [![][linux-arm64-badge-8.0.3XX]][linux-arm64-version-8.0.3XX]
[tar.gz][linux-arm64-targz-8.0.3XX] - [Checksum][linux-arm64-targz-checksum-8.0.3XX] | [![][linux-arm64-badge-7.0.4XX]][linux-arm64-version-7.0.4XX]
[tar.gz][linux-arm64-targz-7.0.4XX] - [Checksum][linux-arm64-targz-checksum-7.0.4XX] |
-| **Linux-musl-x64** | [![][linux-musl-x64-badge-main]][linux-musl-x64-version-main]
[tar.gz][linux-musl-x64-targz-main] - [Checksum][linux-musl-x64-targz-checksum-main] | [![][linux-musl-x64-badge-9.0.1XX-preview1]][linux-musl-x64-version-9.0.1XX-preview1]
[tar.gz][linux-musl-x64-targz-9.0.1XX-preview1] - [Checksum][linux-musl-x64-targz-checksum-9.0.1XX-preview1] | [![][linux-musl-x64-badge-8.0.3XX]][linux-musl-x64-version-8.0.3XX]
[tar.gz][linux-musl-x64-targz-8.0.3XX] - [Checksum][linux-musl-x64-targz-checksum-8.0.3XX] | [![][linux-musl-x64-badge-7.0.4XX]][linux-musl-x64-version-7.0.4XX]
[tar.gz][linux-musl-x64-targz-7.0.4XX] - [Checksum][linux-musl-x64-targz-checksum-7.0.4XX] |
-| **Linux-musl-arm** | [![][linux-musl-arm-badge-main]][linux-musl-arm-version-main]
[tar.gz][linux-musl-arm-targz-main] - [Checksum][linux-musl-arm-targz-checksum-main] | [![][linux-musl-arm-badge-9.0.1XX-preview1]][linux-musl-arm-version-9.0.1XX-preview1]
[tar.gz][linux-musl-arm-targz-9.0.1XX-preview1] - [Checksum][linux-musl-arm-targz-checksum-9.0.1XX-preview1] | [![][linux-musl-arm-badge-8.0.3XX]][linux-musl-arm-version-8.0.3XX]
[tar.gz][linux-musl-arm-targz-8.0.3XX] - [Checksum][linux-musl-arm-targz-checksum-8.0.3XX] | [![][linux-musl-arm-badge-7.0.4XX]][linux-musl-arm-version-7.0.4XX]
[tar.gz][linux-musl-arm-targz-7.0.4XX] - [Checksum][linux-musl-arm-targz-checksum-7.0.4XX] |
-| **Linux-musl-arm64** | [![][linux-musl-arm64-badge-main]][linux-musl-arm64-version-main]
[tar.gz][linux-musl-arm64-targz-main] - [Checksum][linux-musl-arm64-targz-checksum-main] | [![][linux-musl-arm64-badge-9.0.1XX-preview1]][linux-musl-arm64-version-9.0.1XX-preview1]
[tar.gz][linux-musl-arm64-targz-9.0.1XX-preview1] - [Checksum][linux-musl-arm64-targz-checksum-9.0.1XX-preview1] | [![][linux-musl-arm64-badge-8.0.3XX]][linux-musl-arm64-version-8.0.3XX]
[tar.gz][linux-musl-arm64-targz-8.0.3XX] - [Checksum][linux-musl-arm64-targz-checksum-8.0.3XX] | [![][linux-musl-arm64-badge-7.0.4XX]][linux-musl-arm64-version-7.0.4XX]
[tar.gz][linux-musl-arm64-targz-7.0.4XX] - [Checksum][linux-musl-arm64-targz-checksum-7.0.4XX] |
+| **Windows arm64** | [![][win-arm64-badge-main]][win-arm64-version-main]
[Installer][win-arm64-installer-main] - [Checksum][win-arm64-installer-checksum-main]
[zip][win-arm64-zip-main] | [![][win-arm64-badge-9.0.1XX-preview2]][win-arm64-version-9.0.1XX-preview2]
[Installer][win-arm64-installer-9.0.1XX-preview2] - [Checksum][win-arm64-installer-checksum-9.0.1XX-preview2]
[zip][win-arm64-zip-9.0.1XX-preview2] | [![][win-arm64-badge-8.0.3XX]][win-arm64-version-8.0.3XX]
[Installer][win-arm64-installer-8.0.3XX] - [Checksum][win-arm64-installer-checksum-8.0.3XX]
[zip][win-arm64-zip-8.0.3XX] | [![][win-arm64-badge-7.0.4XX]][win-arm64-version-7.0.4XX]
[Installer][win-arm64-installer-7.0.4XX] - [Checksum][win-arm64-installer-checksum-7.0.4XX]
[zip][win-arm64-zip-7.0.4XX] |
+| **macOS x64** | [![][osx-x64-badge-main]][osx-x64-version-main]
[Installer][osx-x64-installer-main] - [Checksum][osx-x64-installer-checksum-main]
[tar.gz][osx-x64-targz-main] - [Checksum][osx-x64-targz-checksum-main] | [![][osx-x64-badge-9.0.1XX-preview2]][osx-x64-version-9.0.1XX-preview2]
[Installer][osx-x64-installer-9.0.1XX-preview2] - [Checksum][osx-x64-installer-checksum-9.0.1XX-preview2]
[tar.gz][osx-x64-targz-9.0.1XX-preview2] - [Checksum][osx-x64-targz-checksum-9.0.1XX-preview2] | [![][osx-x64-badge-8.0.3XX]][osx-x64-version-8.0.3XX]
[Installer][osx-x64-installer-8.0.3XX] - [Checksum][osx-x64-installer-checksum-8.0.3XX]
[tar.gz][osx-x64-targz-8.0.3XX] - [Checksum][osx-x64-targz-checksum-8.0.3XX] | [![][osx-x64-badge-7.0.4XX]][osx-x64-version-7.0.4XX]
[Installer][osx-x64-installer-7.0.4XX] - [Checksum][osx-x64-installer-checksum-7.0.4XX]
[tar.gz][osx-x64-targz-7.0.4XX] - [Checksum][osx-x64-targz-checksum-7.0.4XX] |
+| **macOS arm64** | [![][osx-arm64-badge-main]][osx-arm64-version-main]
[Installer][osx-arm64-installer-main] - [Checksum][osx-arm64-installer-checksum-main]
[tar.gz][osx-arm64-targz-main] - [Checksum][osx-arm64-targz-checksum-main] | [![][osx-arm64-badge-9.0.1XX-preview2]][osx-arm64-version-9.0.1XX-preview2]
[Installer][osx-arm64-installer-9.0.1XX-preview2] - [Checksum][osx-arm64-installer-checksum-9.0.1XX-preview2]
[tar.gz][osx-arm64-targz-9.0.1XX-preview2] - [Checksum][osx-arm64-targz-checksum-9.0.1XX-preview2] | [![][osx-arm64-badge-8.0.3XX]][osx-arm64-version-8.0.3XX]
[Installer][osx-arm64-installer-8.0.3XX] - [Checksum][osx-arm64-installer-checksum-8.0.3XX]
[tar.gz][osx-arm64-targz-8.0.3XX] - [Checksum][osx-arm64-targz-checksum-8.0.3XX] | [![][osx-arm64-badge-7.0.4XX]][osx-arm64-version-7.0.4XX]
[Installer][osx-arm64-installer-7.0.4XX] - [Checksum][osx-arm64-installer-checksum-7.0.4XX]
[tar.gz][osx-arm64-targz-7.0.4XX] - [Checksum][osx-arm64-targz-checksum-7.0.4XX] |
+| **Linux x64** | [![][linux-badge-main]][linux-version-main]
[DEB Installer][linux-DEB-installer-main] - [Checksum][linux-DEB-installer-checksum-main]
[RPM Installer][linux-RPM-installer-main] - [Checksum][linux-RPM-installer-checksum-main]
_see installer note below_1
[tar.gz][linux-targz-main] - [Checksum][linux-targz-checksum-main] | [![][linux-badge-9.0.1XX-preview2]][linux-version-9.0.1XX-preview2]
[DEB Installer][linux-DEB-installer-9.0.1XX-preview2] - [Checksum][linux-DEB-installer-checksum-9.0.1XX-preview2]
[RPM Installer][linux-RPM-installer-9.0.1XX-preview2] - [Checksum][linux-RPM-installer-checksum-9.0.1XX-preview2]
_see installer note below_1
[tar.gz][linux-targz-9.0.1XX-preview2] - [Checksum][linux-targz-checksum-9.0.1XX-preview2] | [![][linux-badge-8.0.3XX]][linux-version-8.0.3XX]
[DEB Installer][linux-DEB-installer-8.0.3XX] - [Checksum][linux-DEB-installer-checksum-8.0.3XX]
[RPM Installer][linux-RPM-installer-8.0.3XX] - [Checksum][linux-RPM-installer-checksum-8.0.3XX]
_see installer note below_1
[tar.gz][linux-targz-8.0.3XX] - [Checksum][linux-targz-checksum-8.0.3XX] | [![][linux-badge-7.0.4XX]][linux-version-7.0.4XX]
[DEB Installer][linux-DEB-installer-7.0.4XX] - [Checksum][linux-DEB-installer-checksum-7.0.4XX]
[RPM Installer][linux-RPM-installer-7.0.4XX] - [Checksum][linux-RPM-installer-checksum-7.0.4XX]
_see installer note below_1
[tar.gz][linux-targz-7.0.4XX] - [Checksum][linux-targz-checksum-7.0.4XX] |
+| **Linux arm** | [![][linux-arm-badge-main]][linux-arm-version-main]
[tar.gz][linux-arm-targz-main] - [Checksum][linux-arm-targz-checksum-main] | [![][linux-arm-badge-9.0.1XX-preview2]][linux-arm-version-9.0.1XX-preview2]
[tar.gz][linux-arm-targz-9.0.1XX-preview2] - [Checksum][linux-arm-targz-checksum-9.0.1XX-preview2] | [![][linux-arm-badge-8.0.3XX]][linux-arm-version-8.0.3XX]
[tar.gz][linux-arm-targz-8.0.3XX] - [Checksum][linux-arm-targz-checksum-8.0.3XX] | [![][linux-arm-badge-7.0.4XX]][linux-arm-version-7.0.4XX]
[tar.gz][linux-arm-targz-7.0.4XX] - [Checksum][linux-arm-targz-checksum-7.0.4XX] |
+| **Linux arm64** | [![][linux-arm64-badge-main]][linux-arm64-version-main]
[tar.gz][linux-arm64-targz-main] - [Checksum][linux-arm64-targz-checksum-main] | [![][linux-arm64-badge-9.0.1XX-preview2]][linux-arm64-version-9.0.1XX-preview2]
[tar.gz][linux-arm64-targz-9.0.1XX-preview2] - [Checksum][linux-arm64-targz-checksum-9.0.1XX-preview2] | [![][linux-arm64-badge-8.0.3XX]][linux-arm64-version-8.0.3XX]
[tar.gz][linux-arm64-targz-8.0.3XX] - [Checksum][linux-arm64-targz-checksum-8.0.3XX] | [![][linux-arm64-badge-7.0.4XX]][linux-arm64-version-7.0.4XX]
[tar.gz][linux-arm64-targz-7.0.4XX] - [Checksum][linux-arm64-targz-checksum-7.0.4XX] |
+| **Linux-musl-x64** | [![][linux-musl-x64-badge-main]][linux-musl-x64-version-main]
[tar.gz][linux-musl-x64-targz-main] - [Checksum][linux-musl-x64-targz-checksum-main] | [![][linux-musl-x64-badge-9.0.1XX-preview2]][linux-musl-x64-version-9.0.1XX-preview2]
[tar.gz][linux-musl-x64-targz-9.0.1XX-preview2] - [Checksum][linux-musl-x64-targz-checksum-9.0.1XX-preview2] | [![][linux-musl-x64-badge-8.0.3XX]][linux-musl-x64-version-8.0.3XX]
[tar.gz][linux-musl-x64-targz-8.0.3XX] - [Checksum][linux-musl-x64-targz-checksum-8.0.3XX] | [![][linux-musl-x64-badge-7.0.4XX]][linux-musl-x64-version-7.0.4XX]
[tar.gz][linux-musl-x64-targz-7.0.4XX] - [Checksum][linux-musl-x64-targz-checksum-7.0.4XX] |
+| **Linux-musl-arm** | [![][linux-musl-arm-badge-main]][linux-musl-arm-version-main]
[tar.gz][linux-musl-arm-targz-main] - [Checksum][linux-musl-arm-targz-checksum-main] | [![][linux-musl-arm-badge-9.0.1XX-preview2]][linux-musl-arm-version-9.0.1XX-preview2]
[tar.gz][linux-musl-arm-targz-9.0.1XX-preview2] - [Checksum][linux-musl-arm-targz-checksum-9.0.1XX-preview2] | [![][linux-musl-arm-badge-8.0.3XX]][linux-musl-arm-version-8.0.3XX]
[tar.gz][linux-musl-arm-targz-8.0.3XX] - [Checksum][linux-musl-arm-targz-checksum-8.0.3XX] | [![][linux-musl-arm-badge-7.0.4XX]][linux-musl-arm-version-7.0.4XX]
[tar.gz][linux-musl-arm-targz-7.0.4XX] - [Checksum][linux-musl-arm-targz-checksum-7.0.4XX] |
+| **Linux-musl-arm64** | [![][linux-musl-arm64-badge-main]][linux-musl-arm64-version-main]
[tar.gz][linux-musl-arm64-targz-main] - [Checksum][linux-musl-arm64-targz-checksum-main] | [![][linux-musl-arm64-badge-9.0.1XX-preview2]][linux-musl-arm64-version-9.0.1XX-preview2]
[tar.gz][linux-musl-arm64-targz-9.0.1XX-preview2] - [Checksum][linux-musl-arm64-targz-checksum-9.0.1XX-preview2] | [![][linux-musl-arm64-badge-8.0.3XX]][linux-musl-arm64-version-8.0.3XX]
[tar.gz][linux-musl-arm64-targz-8.0.3XX] - [Checksum][linux-musl-arm64-targz-checksum-8.0.3XX] | [![][linux-musl-arm64-badge-7.0.4XX]][linux-musl-arm64-version-7.0.4XX]
[tar.gz][linux-musl-arm64-targz-7.0.4XX] - [Checksum][linux-musl-arm64-targz-checksum-7.0.4XX] |
| **RHEL 6** | **N/A** | **N/A** | **N/A** | **N/A** |
Reference notes:
@@ -202,12 +201,12 @@ Reference notes:
[win-x64-zip-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-x64.zip
[win-x64-zip-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-x64.zip.sha
-[win-x64-badge-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/win_x64_Release_version_badge.svg?no-cache
-[win-x64-version-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/productCommit-win-x64.txt
-[win-x64-installer-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-win-x64.exe
-[win-x64-installer-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-win-x64.exe.sha
-[win-x64-zip-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-win-x64.zip
-[win-x64-zip-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-win-x64.zip.sha
+[win-x64-badge-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/win_x64_Release_version_badge.svg?no-cache
+[win-x64-version-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/productCommit-win-x64.txt
+[win-x64-installer-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-win-x64.exe
+[win-x64-installer-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-win-x64.exe.sha
+[win-x64-zip-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-win-x64.zip
+[win-x64-zip-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-win-x64.zip.sha
[win-x64-badge-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/win_x64_Release_version_badge.svg?no-cache
[win-x64-version-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/productCommit-win-x64.txt
@@ -230,12 +229,12 @@ Reference notes:
[win-x86-zip-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-x86.zip
[win-x86-zip-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-x86.zip.sha
-[win-x86-badge-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/win_x86_Release_version_badge.svg?no-cache
-[win-x86-version-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/productCommit-win-x86.txt
-[win-x86-installer-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-win-x86.exe
-[win-x86-installer-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-win-x86.exe.sha
-[win-x86-zip-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-win-x86.zip
-[win-x86-zip-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-win-x86.zip.sha
+[win-x86-badge-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/win_x86_Release_version_badge.svg?no-cache
+[win-x86-version-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/productCommit-win-x86.txt
+[win-x86-installer-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-win-x86.exe
+[win-x86-installer-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-win-x86.exe.sha
+[win-x86-zip-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-win-x86.zip
+[win-x86-zip-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-win-x86.zip.sha
[win-x86-badge-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/win_x86_Release_version_badge.svg?no-cache
[win-x86-version-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/productCommit-win-x86.txt
@@ -258,12 +257,12 @@ Reference notes:
[osx-x64-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-osx-x64.tar.gz
[osx-x64-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-osx-x64.pkg.tar.gz.sha
-[osx-x64-badge-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/osx_x64_Release_version_badge.svg?no-cache
-[osx-x64-version-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/productCommit-osx-x64.txt
-[osx-x64-installer-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-osx-x64.pkg
-[osx-x64-installer-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-osx-x64.pkg.sha
-[osx-x64-targz-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-osx-x64.tar.gz
-[osx-x64-targz-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-osx-x64.pkg.tar.gz.sha
+[osx-x64-badge-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/osx_x64_Release_version_badge.svg?no-cache
+[osx-x64-version-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/productCommit-osx-x64.txt
+[osx-x64-installer-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-osx-x64.pkg
+[osx-x64-installer-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-osx-x64.pkg.sha
+[osx-x64-targz-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-osx-x64.tar.gz
+[osx-x64-targz-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-osx-x64.pkg.tar.gz.sha
[osx-x64-badge-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/osx_x64_Release_version_badge.svg?no-cache
[osx-x64-version-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/productCommit-osx-x64.txt
@@ -286,12 +285,12 @@ Reference notes:
[osx-arm64-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-osx-arm64.tar.gz
[osx-arm64-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-osx-arm64.pkg.tar.gz.sha
-[osx-arm64-badge-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/osx_arm64_Release_version_badge.svg?no-cache
-[osx-arm64-version-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/productCommit-osx-arm64.txt
-[osx-arm64-installer-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-osx-arm64.pkg
-[osx-arm64-installer-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-osx-arm64.pkg.sha
-[osx-arm64-targz-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-osx-arm64.tar.gz
-[osx-arm64-targz-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-osx-arm64.pkg.tar.gz.sha
+[osx-arm64-badge-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/osx_arm64_Release_version_badge.svg?no-cache
+[osx-arm64-version-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/productCommit-osx-arm64.txt
+[osx-arm64-installer-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-osx-arm64.pkg
+[osx-arm64-installer-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-osx-arm64.pkg.sha
+[osx-arm64-targz-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-osx-arm64.tar.gz
+[osx-arm64-targz-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-osx-arm64.pkg.tar.gz.sha
[osx-arm64-badge-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/osx_arm64_Release_version_badge.svg?no-cache
[osx-arm64-version-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/productCommit-osx-arm64.txt
@@ -316,14 +315,14 @@ Reference notes:
[linux-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz
[linux-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz.sha
-[linux-badge-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/linux_x64_Release_version_badge.svg?no-cache
-[linux-version-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/productCommit-linux-x64.txt
-[linux-DEB-installer-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-x64.deb
-[linux-DEB-installer-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-x64.deb.sha
-[linux-RPM-installer-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-x64.rpm
-[linux-RPM-installer-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-x64.rpm.sha
-[linux-targz-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-linux-x64.tar.gz
-[linux-targz-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-linux-x64.tar.gz.sha
+[linux-badge-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/linux_x64_Release_version_badge.svg?no-cache
+[linux-version-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/productCommit-linux-x64.txt
+[linux-DEB-installer-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-x64.deb
+[linux-DEB-installer-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-x64.deb.sha
+[linux-RPM-installer-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-x64.rpm
+[linux-RPM-installer-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-x64.rpm.sha
+[linux-targz-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-linux-x64.tar.gz
+[linux-targz-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-linux-x64.tar.gz.sha
[linux-badge-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/linux_x64_Release_version_badge.svg?no-cache
[linux-version-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/productCommit-linux-x64.txt
@@ -348,10 +347,10 @@ Reference notes:
[linux-arm-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-arm.tar.gz
[linux-arm-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-arm.tar.gz.sha
-[linux-arm-badge-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/linux_arm_Release_version_badge.svg?no-cache
-[linux-arm-version-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/productCommit-linux-arm.txt
-[linux-arm-targz-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-linux-arm.tar.gz
-[linux-arm-targz-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-linux-arm.tar.gz.sha
+[linux-arm-badge-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/linux_arm_Release_version_badge.svg?no-cache
+[linux-arm-version-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/productCommit-linux-arm.txt
+[linux-arm-targz-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-linux-arm.tar.gz
+[linux-arm-targz-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-linux-arm.tar.gz.sha
[linux-arm-badge-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/linux_arm_Release_version_badge.svg?no-cache
[linux-arm-version-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/productCommit-linux-arm.txt
@@ -368,10 +367,10 @@ Reference notes:
[linux-arm64-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-arm64.tar.gz
[linux-arm64-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-arm64.tar.gz.sha
-[linux-arm64-badge-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/linux_arm64_Release_version_badge.svg?no-cache
-[linux-arm64-version-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/productCommit-linux-arm64.txt
-[linux-arm64-targz-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-linux-arm64.tar.gz
-[linux-arm64-targz-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-linux-arm64.tar.gz.sha
+[linux-arm64-badge-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/linux_arm64_Release_version_badge.svg?no-cache
+[linux-arm64-version-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/productCommit-linux-arm64.txt
+[linux-arm64-targz-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-linux-arm64.tar.gz
+[linux-arm64-targz-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-linux-arm64.tar.gz.sha
[linux-arm64-badge-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/linux_arm64_Release_version_badge.svg?no-cache
[linux-arm64-version-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/productCommit-linux-arm64.txt
@@ -388,10 +387,10 @@ Reference notes:
[rhel-6-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-rhel.6-x64.tar.gz
[rhel-6-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-rhel.6-x64.tar.gz.sha
-[rhel-6-badge-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/rhel.6_x64_Release_version_badge.svg?no-cache
-[rhel-6-version-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/productCommit-rhel.6-x64.txt
-[rhel-6-targz-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-rhel.6-x64.tar.gz
-[rhel-6-targz-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-rhel.6-x64.tar.gz.sha
+[rhel-6-badge-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/rhel.6_x64_Release_version_badge.svg?no-cache
+[rhel-6-version-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/productCommit-rhel.6-x64.txt
+[rhel-6-targz-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-rhel.6-x64.tar.gz
+[rhel-6-targz-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-rhel.6-x64.tar.gz.sha
[rhel-6-badge-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/rhel.6_x64_Release_version_badge.svg?no-cache
[rhel-6-version-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/productCommit-rhel.6-x64.txt
@@ -408,10 +407,10 @@ Reference notes:
[linux-musl-x64-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-musl-x64.tar.gz
[linux-musl-x64-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-musl-x64.tar.gz.sha
-[linux-musl-x64-badge-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/linux_musl_x64_Release_version_badge.svg?no-cache
-[linux-musl-x64-version-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/productCommit-linux-musl-x64.txt
-[linux-musl-x64-targz-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-linux-musl-x64.tar.gz
-[linux-musl-x64-targz-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-linux-musl-x64.tar.gz.sha
+[linux-musl-x64-badge-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/linux_musl_x64_Release_version_badge.svg?no-cache
+[linux-musl-x64-version-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/productCommit-linux-musl-x64.txt
+[linux-musl-x64-targz-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-linux-musl-x64.tar.gz
+[linux-musl-x64-targz-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-linux-musl-x64.tar.gz.sha
[linux-musl-x64-badge-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/linux_musl_x64_Release_version_badge.svg?no-cache
[linux-musl-x64-version-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/productCommit-linux-musl-x64.txt
@@ -428,10 +427,10 @@ Reference notes:
[linux-musl-arm-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-musl-arm.tar.gz
[linux-musl-arm-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-musl-arm.tar.gz.sha
-[linux-musl-arm-badge-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/linux_musl_arm_Release_version_badge.svg?no-cache
-[linux-musl-arm-version-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/productCommit-linux-musl-arm.txt
-[linux-musl-arm-targz-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-linux-musl-arm.tar.gz
-[linux-musl-arm-targz-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-linux-musl-arm.tar.gz.sha
+[linux-musl-arm-badge-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/linux_musl_arm_Release_version_badge.svg?no-cache
+[linux-musl-arm-version-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/productCommit-linux-musl-arm.txt
+[linux-musl-arm-targz-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-linux-musl-arm.tar.gz
+[linux-musl-arm-targz-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-linux-musl-arm.tar.gz.sha
[linux-musl-arm-badge-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/linux_musl_arm_Release_version_badge.svg?no-cache
[linux-musl-arm-version-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/productCommit-linux-musl-arm.txt
@@ -448,10 +447,10 @@ Reference notes:
[linux-musl-arm64-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-musl-arm64.tar.gz
[linux-musl-arm64-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-musl-arm64.tar.gz.sha
-[linux-musl-arm64-badge-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/linux_musl_arm64_Release_version_badge.svg?no-cache
-[linux-musl-arm64-version-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/productCommit-linux-musl-arm64.txt
-[linux-musl-arm64-targz-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-linux-musl-arm64.tar.gz
-[linux-musl-arm64-targz-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-linux-musl-arm64.tar.gz.sha
+[linux-musl-arm64-badge-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/linux_musl_arm64_Release_version_badge.svg?no-cache
+[linux-musl-arm64-version-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/productCommit-linux-musl-arm64.txt
+[linux-musl-arm64-targz-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-linux-musl-arm64.tar.gz
+[linux-musl-arm64-targz-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-linux-musl-arm64.tar.gz.sha
[linux-musl-arm64-badge-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/linux_musl_arm64_Release_version_badge.svg?no-cache
[linux-musl-arm64-version-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/productCommit-linux-musl-arm64.txt
@@ -468,10 +467,10 @@ Reference notes:
[win-arm-zip-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-arm.zip
[win-arm-zip-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-arm.zip.sha
-[win-arm-badge-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/win_arm_Release_version_badge.svg?no-cache
-[win-arm-version-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/productCommit-win-arm.txt
-[win-arm-zip-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-win-arm.zip
-[win-arm-zip-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-win-arm.zip.sha
+[win-arm-badge-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/win_arm_Release_version_badge.svg?no-cache
+[win-arm-version-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/productCommit-win-arm.txt
+[win-arm-zip-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-win-arm.zip
+[win-arm-zip-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-win-arm.zip.sha
[win-arm-badge-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/win_arm_Release_version_badge.svg?no-cache
[win-arm-version-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/productCommit-win-arm.txt
@@ -490,12 +489,12 @@ Reference notes:
[win-arm64-zip-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-arm64.zip
[win-arm64-zip-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-arm64.zip.sha
-[win-arm64-badge-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/win_arm64_Release_version_badge.svg?no-cache
-[win-arm64-version-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/productCommit-win-arm64.txt
-[win-arm64-installer-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-win-arm64.exe
-[win-arm64-installer-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-win-arm64.exe.sha
-[win-arm64-zip-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-win-arm64.zip
-[win-arm64-zip-checksum-9.0.1XX-preview1]: https://aka.ms/dotnet/9.0.1xx-preview1/daily/dotnet-sdk-win-arm64.zip.sha
+[win-arm64-badge-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/win_arm64_Release_version_badge.svg?no-cache
+[win-arm64-version-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/productCommit-win-arm64.txt
+[win-arm64-installer-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-win-arm64.exe
+[win-arm64-installer-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-win-arm64.exe.sha
+[win-arm64-zip-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-win-arm64.zip
+[win-arm64-zip-checksum-9.0.1XX-preview2]: https://aka.ms/dotnet/9.0.1xx-preview2/daily/dotnet-sdk-win-arm64.zip.sha
[win-arm64-badge-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/win_arm64_Release_version_badge.svg?no-cache
[win-arm64-version-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/productCommit-win-arm64.txt
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index e7c47f344e62..55d502d705c8 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -5,41 +5,41 @@
Source-build uses transitive dependency resolution to determine correct build SHA of all product contributing repos.
The order of dependencies is important and should not be modified without approval from dotnet/source-build-internal.
-->
-
+
https://github.com/dotnet/windowsdesktop
- 1628f7c406cd03b2a4e7f3809ca7d51541630893
+ 35941ed48463df7c601a2c6850d150685fa7de55
-
+
https://github.com/dotnet/windowsdesktop
- 1628f7c406cd03b2a4e7f3809ca7d51541630893
+ 35941ed48463df7c601a2c6850d150685fa7de55
-
+
https://github.com/dotnet/windowsdesktop
- 1628f7c406cd03b2a4e7f3809ca7d51541630893
+ 35941ed48463df7c601a2c6850d150685fa7de55
-
+
https://github.com/dotnet/windowsdesktop
- 1628f7c406cd03b2a4e7f3809ca7d51541630893
+ 35941ed48463df7c601a2c6850d150685fa7de55
-
+
https://github.com/dotnet/runtime
- 5e603d595e63ddc5cdce9777a40608279abdcc37
+ 3eb8c7f1086b79b28a27b57a935f97be3b7fcccb
-
+
https://github.com/dotnet/runtime
- 5e603d595e63ddc5cdce9777a40608279abdcc37
+ 3eb8c7f1086b79b28a27b57a935f97be3b7fcccb
-
+
https://github.com/dotnet/runtime
- 5e603d595e63ddc5cdce9777a40608279abdcc37
+ 3eb8c7f1086b79b28a27b57a935f97be3b7fcccb
-
+
https://github.com/dotnet/runtime
- 5e603d595e63ddc5cdce9777a40608279abdcc37
+ 3eb8c7f1086b79b28a27b57a935f97be3b7fcccb
-
+
https://github.com/dotnet/runtime
- 5e603d595e63ddc5cdce9777a40608279abdcc37
+ 3eb8c7f1086b79b28a27b57a935f97be3b7fcccb
@@ -47,70 +47,70 @@
https://github.com/dotnet/core-setup
7d57652f33493fa022125b7f63aad0d70c52d810
-
+
https://github.com/dotnet/runtime
- 5e603d595e63ddc5cdce9777a40608279abdcc37
+ 3eb8c7f1086b79b28a27b57a935f97be3b7fcccb
-
+
https://github.com/dotnet/runtime
- 5e603d595e63ddc5cdce9777a40608279abdcc37
+ 3eb8c7f1086b79b28a27b57a935f97be3b7fcccb
-
+
https://github.com/dotnet/aspnetcore
- 3e5155276f3d486ef49e1f06ee875d6757983695
+ b3b8dffff4d092058b2d8942268b498cbfdb14ec
-
+
https://github.com/dotnet/aspnetcore
- 3e5155276f3d486ef49e1f06ee875d6757983695
+ b3b8dffff4d092058b2d8942268b498cbfdb14ec
-
+
https://github.com/dotnet/aspnetcore
- 3e5155276f3d486ef49e1f06ee875d6757983695
+ b3b8dffff4d092058b2d8942268b498cbfdb14ec
-
+
https://github.com/dotnet/aspnetcore
- 3e5155276f3d486ef49e1f06ee875d6757983695
+ b3b8dffff4d092058b2d8942268b498cbfdb14ec
-
+
https://github.com/dotnet/aspnetcore
- 3e5155276f3d486ef49e1f06ee875d6757983695
+ b3b8dffff4d092058b2d8942268b498cbfdb14ec
-
+
https://github.com/dotnet/aspnetcore
- 3e5155276f3d486ef49e1f06ee875d6757983695
+ b3b8dffff4d092058b2d8942268b498cbfdb14ec
-
+
https://github.com/dotnet/aspnetcore
- 3e5155276f3d486ef49e1f06ee875d6757983695
+ b3b8dffff4d092058b2d8942268b498cbfdb14ec
-
+
https://github.com/dotnet/aspnetcore
- 3e5155276f3d486ef49e1f06ee875d6757983695
+ b3b8dffff4d092058b2d8942268b498cbfdb14ec
-
+
https://github.com/dotnet/sdk
- 2ea26aa051bdb20577a65a0478fb856e304bdfc2
+ 464e4b34f20df0eef957ef6b2c9c8eea23b415b6
-
+
https://github.com/dotnet/sdk
- 2ea26aa051bdb20577a65a0478fb856e304bdfc2
+ 464e4b34f20df0eef957ef6b2c9c8eea23b415b6
-
+
https://github.com/dotnet/sdk
- 2ea26aa051bdb20577a65a0478fb856e304bdfc2
+ 464e4b34f20df0eef957ef6b2c9c8eea23b415b6
-
+
https://github.com/dotnet/sdk
- 2ea26aa051bdb20577a65a0478fb856e304bdfc2
+ 464e4b34f20df0eef957ef6b2c9c8eea23b415b6
-
+
https://github.com/dotnet/sdk
- 2ea26aa051bdb20577a65a0478fb856e304bdfc2
+ 464e4b34f20df0eef957ef6b2c9c8eea23b415b6
@@ -129,61 +129,61 @@
https://github.com/dotnet/test-templates
becc4bd157cd6608b51a5ffe414a5d2de6330272
-
+
https://github.com/dotnet/test-templates
- 36fdfebe8af73ed1c2ff796750984f1ebf6230b5
+ b27ce8a9d5b1931cb91cbc20a16d15bd7231c792
-
+
https://github.com/dotnet/test-templates
- 36fdfebe8af73ed1c2ff796750984f1ebf6230b5
+ b27ce8a9d5b1931cb91cbc20a16d15bd7231c792
-
+
https://github.com/dotnet/test-templates
- 36fdfebe8af73ed1c2ff796750984f1ebf6230b5
+ b27ce8a9d5b1931cb91cbc20a16d15bd7231c792
-
+
https://github.com/dotnet/winforms
- db743c12c82bfe6f1265bc20a5a97c6ecfa68ba2
+ bd6b531f3baf0db39cd301f2cfb0128381f37dab
-
+
https://github.com/dotnet/wpf
- d4d3ab8a86a71baed25b9eb076affd9c93bb9298
+ 8dc0343c350d3b7736710cacb306790bde0394d0
-
+
https://github.com/dotnet/fsharp
- b57dee7cec971021547a7b8a36a46d7271fea99e
+ 661d88ab1975665fbe8c580e7e2dab01bf264c27
-
+
https://github.com/dotnet/fsharp
- b57dee7cec971021547a7b8a36a46d7271fea99e
+ 661d88ab1975665fbe8c580e7e2dab01bf264c27
-
+
https://github.com/microsoft/vstest
- 39c7dd12c7ec24d0552513e84d95476f2077ca33
+ 316167369cea59e0ad6ece2a39d94a3a6d49cf12
-
+
https://github.com/microsoft/vstest
- 39c7dd12c7ec24d0552513e84d95476f2077ca33
+ 316167369cea59e0ad6ece2a39d94a3a6d49cf12
-
+
https://github.com/dotnet/runtime
- 5e603d595e63ddc5cdce9777a40608279abdcc37
+ 3eb8c7f1086b79b28a27b57a935f97be3b7fcccb
-
+
https://github.com/dotnet/roslyn
- 7471bf7cc5fbdfacc0e8d70537affa5f8e6fabd2
+ 026c96327b02c5ce4d3208f821e02d2ffa825312
-
+
https://github.com/dotnet/roslyn
- 7471bf7cc5fbdfacc0e8d70537affa5f8e6fabd2
+ 026c96327b02c5ce4d3208f821e02d2ffa825312
@@ -196,23 +196,23 @@
6f44380e4fdea6ddf5c11f48efeb25c2bf181e62
-
+
https://github.com/nuget/nuget.client
- 6009531090c927a8e61da9a0f97bdd5eb6f01a47
+ 2fdd0d41e33c3354de2750fe154b56751a6682aa
https://github.com/Microsoft/ApplicationInsights-dotnet
53b80940842204f78708a538628288ff5d741a1d
-
+
https://github.com/dotnet/emsdk
- 0f3e462442af5fe65271e3185d5b645ad40a6041
+ a5f4de78fca42544771977f8e8e04c4aa83e1d02
-
+
https://github.com/dotnet/emsdk
- 0f3e462442af5fe65271e3185d5b645ad40a6041
+ a5f4de78fca42544771977f8e8e04c4aa83e1d02
@@ -226,9 +226,9 @@
-
+
https://github.com/dotnet/source-build-externals
- 7fbf7ef59ca7ddcfa92269ef84e3fcb7544f8699
+ 16ece46ae00dd1e8ac30a360d3dd03a6a682db41
@@ -243,43 +243,43 @@
-
+
https://github.com/dotnet/arcade
- 87d89025bdd8827c016e4083660d31f497670e5c
+ f4538b1f8ff5ceb197aea509f3f61872b217b09e
-
+
https://github.com/dotnet/arcade
- 87d89025bdd8827c016e4083660d31f497670e5c
+ f4538b1f8ff5ceb197aea509f3f61872b217b09e
-
+
https://github.com/dotnet/arcade
- 87d89025bdd8827c016e4083660d31f497670e5c
+ f4538b1f8ff5ceb197aea509f3f61872b217b09e
-
+
https://github.com/dotnet/arcade-services
- c041bcdab75f5447be8bd11ddcfbe8e639f13f32
+ 049ed7fcb1a7038d20e160b798606c64f743058c
-
+
https://github.com/dotnet/arcade-services
- c041bcdab75f5447be8bd11ddcfbe8e639f13f32
+ 049ed7fcb1a7038d20e160b798606c64f743058c
-
+
https://github.com/dotnet/arcade
- 87d89025bdd8827c016e4083660d31f497670e5c
+ f4538b1f8ff5ceb197aea509f3f61872b217b09e
-
+
https://github.com/dotnet/arcade
- 87d89025bdd8827c016e4083660d31f497670e5c
+ f4538b1f8ff5ceb197aea509f3f61872b217b09e
https://github.com/dotnet/runtime
ab1a8224cdf115b65e0db5dc88d11f205068f444
-
+
https://github.com/dotnet/source-build-reference-packages
- d1c092f24a18f5ed76631fc6c865f706aca5d90f
+ 768378e775fc5ddc99d41f2c4d1c78182f326ea7
@@ -299,14 +299,14 @@
aren't shipping, or those extensions packages depend on aspnetcore packages that won't ship. However, given the cost
of maintaining this coherency path is high. This being toolset means that aspire is responsible for its own coherency.
-->
-
+
https://github.com/dotnet/aspire
- 1dd4b3265f01a50b20522fd3d7f3cd315db5be6b
+ fa3e45ee2a76c81e7a4876c6bef05282e35243f1
-
+
https://github.com/dotnet/aspire
- 1dd4b3265f01a50b20522fd3d7f3cd315db5be6b
+ fa3e45ee2a76c81e7a4876c6bef05282e35243f1
diff --git a/eng/Versions.props b/eng/Versions.props
index 1ec1d1d99abd..c7474f4a5208 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -39,19 +39,19 @@
- 9.0.0-beta.24151.5
+ 9.0.0-beta.24159.1
- 1.1.0-beta.24112.3
+ 1.1.0-beta.24157.2
- 9.0.0-preview.3.24127.3
+ 9.0.0-preview.3.24158.3
- 9.0.0-preview.3.24127.2
+ 9.0.0-preview.3.24158.3
@@ -63,8 +63,8 @@
1.1.0-rc.24069.1
1.1.0-rc.24069.1
- 1.1.0-rc.24151.1
- 1.1.0-rc.24151.1
+ 1.1.0-rc.24158.2
+ 1.1.0-rc.24158.2
@@ -72,49 +72,49 @@
- 9.0.0-preview.3.24151.1
- 9.0.0-preview.3.24151.1
- 9.0.0-preview.3.24151.1
- 9.0.0-preview.3.24151.1
- 9.0.0-preview.3.24151.1
- 9.0.0-preview.3.24151.1
- 9.0.0-preview.3.24151.1
+ 9.0.0-preview.3.24158.2
+ 9.0.0-preview.3.24158.2
+ 9.0.0-preview.3.24158.2
+ 9.0.0-preview.3.24158.2
+ 9.0.0-preview.3.24158.2
+ 9.0.0-preview.3.24158.2
+ 9.0.0-preview.3.24158.2
0.2.0
- 9.0.100-preview.3.24151.4
- 9.0.100-preview.3.24151.4
- 9.0.100-preview.3.24151.4
+ 9.0.100-preview.3.24161.2
+ 9.0.100-preview.3.24161.2
+ 9.0.100-preview.3.24161.2
$(MicrosoftNETSdkPackageVersion)
$(MicrosoftNETSdkPackageVersion)
$(MicrosoftNETSdkPackageVersion)
- 4.10.0-3.24129.7
+ 4.10.0-3.24158.5
- 9.0.0-preview.3.24129.2
+ 9.0.0-preview.3.24160.3
- 9.0.0-preview.3.24129.2
- 9.0.0-preview.3.24129.2
- 9.0.0-preview.3.24129.2
- 9.0.0-preview.3.24129.2
- 9.0.0-preview.3.24129.2
+ 9.0.0-preview.3.24160.3
+ 9.0.0-preview.3.24160.3
+ 9.0.0-preview.3.24160.3
+ 9.0.0-preview.3.24160.3
+ 9.0.0-preview.3.24160.3
2.1.0
- 9.0.0-preview.3.24129.1
- 9.0.0-preview.3.24129.1
- 9.0.0-preview.3.24129.1
- 9.0.0-preview.3.24129.1
+ 9.0.0-preview.3.24160.1
+ 9.0.0-preview.3.24160.1
+ 9.0.0-preview.3.24160.1
+ 9.0.0-preview.3.24160.1
@@ -126,7 +126,7 @@
- 6.10.0-preview.2.52
+ 6.10.0-preview.2.78
@@ -245,14 +245,14 @@
2.2.0-beta.19072.10
2.0.0
- 17.10.0-preview-24126-02
+ 17.10.0-preview-24158-06
9.0.0-alpha.1.24058.10
9.0.0-preview.24057.2
9.0.100-preview.1
- 9.0.0-preview.1.24116.3
+ 9.0.0-preview.1.24151.2
9.0.100-preview.1
9.0.0-preview.1.9973
34.99.0-preview.1.151
@@ -261,7 +261,7 @@
14.2.9088-net9-p1
17.2.9088-net9-p1
- 9.0.0-preview.3.24126.1
+ 9.0.0-preview.3.24156.3
$(MicrosoftNETWorkloadEmscriptenCurrentManifest90100TransportPackageVersion)
9.0.100$([System.Text.RegularExpressions.Regex]::Match($(EmscriptenWorkloadManifestVersion), `-[A-z]*[\.]*\d*`))
diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1
index 6c65e81925f2..efa2fd72bfaa 100644
--- a/eng/common/SetupNugetSources.ps1
+++ b/eng/common/SetupNugetSources.ps1
@@ -35,7 +35,7 @@ Set-StrictMode -Version 2.0
. $PSScriptRoot\tools.ps1
# Add source entry to PackageSources
-function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $Password) {
+function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) {
$packageSource = $sources.SelectSingleNode("add[@key='$SourceName']")
if ($packageSource -eq $null)
@@ -48,12 +48,11 @@ function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Usern
else {
Write-Host "Package source $SourceName already present."
}
-
- AddCredential -Creds $creds -Source $SourceName -Username $Username -Password $Password
+ AddCredential -Creds $creds -Source $SourceName -Username $Username -pwd $pwd
}
# Add a credential node for the specified source
-function AddCredential($creds, $source, $username, $password) {
+function AddCredential($creds, $source, $username, $pwd) {
# Looks for credential configuration for the given SourceName. Create it if none is found.
$sourceElement = $creds.SelectSingleNode($Source)
if ($sourceElement -eq $null)
@@ -82,17 +81,18 @@ function AddCredential($creds, $source, $username, $password) {
$passwordElement.SetAttribute("key", "ClearTextPassword")
$sourceElement.AppendChild($passwordElement) | Out-Null
}
- $passwordElement.SetAttribute("value", $Password)
+
+ $passwordElement.SetAttribute("value", $pwd)
}
-function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $Password) {
+function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $pwd) {
$maestroPrivateSources = $Sources.SelectNodes("add[contains(@key,'darc-int')]")
Write-Host "Inserting credentials for $($maestroPrivateSources.Count) Maestro's private feeds."
ForEach ($PackageSource in $maestroPrivateSources) {
Write-Host "`tInserting credential for Maestro's feed:" $PackageSource.Key
- AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -Password $Password
+ AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -pwd $pwd
}
}
@@ -144,13 +144,13 @@ if ($disabledSources -ne $null) {
$userName = "dn-bot"
# Insert credential nodes for Maestro's private feeds
-InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Username $userName -Password $Password
+InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Username $userName -pwd $Password
# 3.1 uses a different feed url format so it's handled differently here
$dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']")
if ($dotnet31Source -ne $null) {
- AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username $userName -Password $Password
- AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -Password $Password
+ AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password
+ AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password
}
$dotnetVersions = @('5','6','7','8')
@@ -159,9 +159,9 @@ foreach ($dotnetVersion in $dotnetVersions) {
$feedPrefix = "dotnet" + $dotnetVersion;
$dotnetSource = $sources.SelectSingleNode("add[@key='$feedPrefix']")
if ($dotnetSource -ne $null) {
- AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/v2" -Creds $creds -Username $userName -Password $Password
- AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/v2" -Creds $creds -Username $userName -Password $Password
+ AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password
+ AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password
}
}
-$doc.Save($filename)
+$doc.Save($filename)
\ No newline at end of file
diff --git a/eng/common/build.ps1 b/eng/common/build.ps1
index 510458eb35b8..83e6d82e027a 100644
--- a/eng/common/build.ps1
+++ b/eng/common/build.ps1
@@ -125,7 +125,6 @@ function Build {
/p:Test=$test `
/p:Pack=$pack `
/p:DotNetBuildRepo=$($productBuild -or $verticalBuild) `
- /p:ArcadeBuildVertical=$verticalBuild `
/p:IntegrationTest=$integrationTest `
/p:PerformanceTest=$performanceTest `
/p:Sign=$sign `
diff --git a/eng/common/build.sh b/eng/common/build.sh
index bec7d02594f6..d82ebf742808 100755
--- a/eng/common/build.sh
+++ b/eng/common/build.sh
@@ -241,7 +241,6 @@ function Build {
/p:DotNetBuildRepo=$product_build \
/p:ArcadeBuildFromSource=$source_build \
/p:DotNetBuildSourceOnly=$source_build \
- /p:ArcadeBuildVertical=$vertical_build \
/p:Rebuild=$rebuild \
/p:Test=$test \
/p:Pack=$pack \
diff --git a/eng/common/templates-official/job/job.yml b/eng/common/templates-official/job/job.yml
index 352607308fd5..1df0201243b8 100644
--- a/eng/common/templates-official/job/job.yml
+++ b/eng/common/templates-official/job/job.yml
@@ -15,6 +15,7 @@ parameters:
timeoutInMinutes: ''
variables: []
workspace: ''
+ templateContext: ''
# Job base template specific parameters
# See schema documentation - https://github.com/dotnet/arcade/blob/master/Documentation/AzureDevOps/TemplateSchema.md
@@ -68,6 +69,9 @@ jobs:
${{ if ne(parameters.timeoutInMinutes, '') }}:
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
+ ${{ if ne(parameters.templateContext, '') }}:
+ templateContext: ${{ parameters.templateContext }}
+
variables:
- ${{ if ne(parameters.enableTelemetry, 'false') }}:
- name: DOTNET_CLI_TELEMETRY_PROFILE
diff --git a/eng/common/templates-official/job/source-index-stage1.yml b/eng/common/templates-official/job/source-index-stage1.yml
index 757af7c7c4f2..53a9ef51fd82 100644
--- a/eng/common/templates-official/job/source-index-stage1.yml
+++ b/eng/common/templates-official/job/source-index-stage1.yml
@@ -1,6 +1,6 @@
parameters:
runAsPublic: false
- sourceIndexPackageVersion: 1.0.1-20231213.4
+ sourceIndexPackageVersion: 1.0.1-20240129.2
sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json
sourceIndexBuildCommand: powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -Command "eng/common/build.ps1 -restore -build -binarylog -ci"
preSteps: []
diff --git a/eng/common/templates-official/steps/send-to-helix.yml b/eng/common/templates-official/steps/send-to-helix.yml
index 3eb7e2d5f840..68fa739c4ab2 100644
--- a/eng/common/templates-official/steps/send-to-helix.yml
+++ b/eng/common/templates-official/steps/send-to-helix.yml
@@ -5,6 +5,8 @@ parameters:
HelixBuild: $(Build.BuildNumber) # required -- the build number Helix will use to identify this -- automatically set to the AzDO build number
HelixTargetQueues: '' # required -- semicolon-delimited list of Helix queues to test on; see https://helix.dot.net/ for a list of queues
HelixAccessToken: '' # required -- access token to make Helix API requests; should be provided by the appropriate variable group
+ HelixProjectPath: 'eng/common/helixpublish.proj' # optional -- path to the project file to build relative to BUILD_SOURCESDIRECTORY
+ HelixProjectArguments: '' # optional -- arguments passed to the build command
HelixConfiguration: '' # optional -- additional property attached to a job
HelixPreCommands: '' # optional -- commands to run before Helix work item execution
HelixPostCommands: '' # optional -- commands to run after Helix work item execution
@@ -29,7 +31,7 @@ parameters:
continueOnError: false # optional -- determines whether to continue the build if the step errors; defaults to false
steps:
- - powershell: 'powershell "$env:BUILD_SOURCESDIRECTORY\eng\common\msbuild.ps1 $env:BUILD_SOURCESDIRECTORY\eng\common\helixpublish.proj /restore /p:TreatWarningsAsErrors=false /t:Test /bl:$env:BUILD_SOURCESDIRECTORY\artifacts\log\$env:BuildConfig\SendToHelix.binlog"'
+ - powershell: 'powershell "$env:BUILD_SOURCESDIRECTORY\eng\common\msbuild.ps1 $env:BUILD_SOURCESDIRECTORY/${{ parameters.HelixProjectPath }} /restore /p:TreatWarningsAsErrors=false ${{ parameters.HelixProjectArguments }} /t:Test /bl:$env:BUILD_SOURCESDIRECTORY\artifacts\log\$env:BuildConfig\SendToHelix.binlog"'
displayName: ${{ parameters.DisplayNamePrefix }} (Windows)
env:
BuildConfig: $(_BuildConfig)
@@ -59,7 +61,7 @@ steps:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
condition: and(${{ parameters.condition }}, eq(variables['Agent.Os'], 'Windows_NT'))
continueOnError: ${{ parameters.continueOnError }}
- - script: $BUILD_SOURCESDIRECTORY/eng/common/msbuild.sh $BUILD_SOURCESDIRECTORY/eng/common/helixpublish.proj /restore /p:TreatWarningsAsErrors=false /t:Test /bl:$BUILD_SOURCESDIRECTORY/artifacts/log/$BuildConfig/SendToHelix.binlog
+ - script: $BUILD_SOURCESDIRECTORY/eng/common/msbuild.sh $BUILD_SOURCESDIRECTORY/${{ parameters.HelixProjectPath }} /restore /p:TreatWarningsAsErrors=false ${{ parameters.HelixProjectArguments }} /t:Test /bl:$BUILD_SOURCESDIRECTORY/artifacts/log/$BuildConfig/SendToHelix.binlog
displayName: ${{ parameters.DisplayNamePrefix }} (Unix)
env:
BuildConfig: $(_BuildConfig)
diff --git a/eng/common/templates-official/steps/source-build.yml b/eng/common/templates-official/steps/source-build.yml
index b1db70842f51..53ed57b6d48a 100644
--- a/eng/common/templates-official/steps/source-build.yml
+++ b/eng/common/templates-official/steps/source-build.yml
@@ -94,6 +94,8 @@ steps:
$baseOsArgs \
/p:SourceBuildNonPortable=${{ parameters.platform.nonPortable }} \
/p:ArcadeBuildFromSource=true \
+ /p:DotNetBuildSourceOnly=true \
+ /p:DotNetBuildRepo=true \
/p:AssetManifestFileName=$assetManifestFileName
displayName: Build
diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml
index 01c0dd995e4b..a3277bf15c51 100644
--- a/eng/common/templates/job/job.yml
+++ b/eng/common/templates/job/job.yml
@@ -15,6 +15,7 @@ parameters:
timeoutInMinutes: ''
variables: []
workspace: ''
+ templateContext: ''
# Job base template specific parameters
# See schema documentation - https://github.com/dotnet/arcade/blob/master/Documentation/AzureDevOps/TemplateSchema.md
@@ -68,6 +69,9 @@ jobs:
${{ if ne(parameters.timeoutInMinutes, '') }}:
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
+ ${{ if ne(parameters.templateContext, '') }}:
+ templateContext: ${{ parameters.templateContext }}
+
variables:
- ${{ if ne(parameters.enableTelemetry, 'false') }}:
- name: DOTNET_CLI_TELEMETRY_PROFILE
diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1
index 9bf873e3c258..a58aef2847e1 100644
--- a/eng/common/tools.ps1
+++ b/eng/common/tools.ps1
@@ -856,7 +856,7 @@ function MSBuild-Core() {
# When running on Azure Pipelines, override the returned exit code to avoid double logging.
# Skip this when the build is a child of the VMR orchestrator build.
- if ($ci -and $env:SYSTEM_TEAMPROJECT -ne $null -and !$productBuild -and $properties -notlike "*DotNetBuildRepo=true*") {
+ if ($ci -and $env:SYSTEM_TEAMPROJECT -ne $null -and !$productBuild -and -not($properties -like "*DotNetBuildRepo=true*")) {
Write-PipelineSetResult -Result "Failed" -Message "msbuild execution failed."
# Exiting with an exit code causes the azure pipelines task to log yet another "noise" error
# The above Write-PipelineSetResult will cause the task to be marked as failure without adding yet another error
diff --git a/eng/pipelines/templates/jobs/vmr-build.yml b/eng/pipelines/templates/jobs/vmr-build.yml
index bd5a791a9e3c..caf22758637a 100644
--- a/eng/pipelines/templates/jobs/vmr-build.yml
+++ b/eng/pipelines/templates/jobs/vmr-build.yml
@@ -208,7 +208,7 @@ jobs:
exit 1
fi
displayName: Setup Previously Source-Built SDK
-
+
- ${{ if eq(parameters.targetOS, 'windows') }}:
- script: |
call $(sourcesPath)\build.cmd -ci -cleanWhileBuilding -prepareMachine ${{ parameters.extraProperties }}
@@ -305,7 +305,7 @@ jobs:
for envVar in $customEnvVars; do
customDockerRunArgs="$customDockerRunArgs -e $envVar"
done
-
+
if [[ '${{ parameters.runOnline }}' == 'False' ]]; then
customDockerRunArgs="$customDockerRunArgs --network none"
fi
@@ -342,10 +342,10 @@ jobs:
# Don't use CopyFiles@2 as it encounters permissions issues because it indexes all files in the source directory graph.
- powershell: |
function CopyWithRelativeFolders($sourcePath, $targetFolder, $filter) {
- Get-ChildItem -Path $sourcePath -Filter $filter -Recurse | ForEach-Object {
+ Get-ChildItem -Path $sourcePath -Filter $filter -Recurse | ForEach-Object {
$targetPath = Join-Path $targetFolder (Resolve-Path -Relative $_.FullName)
New-Item -ItemType Directory -Path (Split-Path -Parent $targetPath) -Force | Out-Null
- Copy-Item $_.FullName -Destination $targetPath -Force
+ Copy-Item $_.FullName -Destination $targetPath -Force
}
}
@@ -356,6 +356,7 @@ jobs:
CopyWithRelativeFolders "artifacts/" $targetFolder "*.binlog"
CopyWithRelativeFolders "artifacts/" $targetFolder "*.log"
+ CopyWithRelativeFolders "artifacts/" $targetFolder "*.diff"
CopyWithRelativeFolders "src/" $targetFolder "*.binlog"
CopyWithRelativeFolders "src/" $targetFolder "*.log"
CopyWithRelativeFolders "test/" $targetFolder "*.binlog"
@@ -382,6 +383,7 @@ jobs:
cd "$(sourcesPath)"
find artifacts/ -type f -name "*.binlog" -exec rsync -R {} -t ${targetFolder} \;
find artifacts/ -type f -name "*.log" -exec rsync -R {} -t ${targetFolder} \;
+ find artifacts/ -type f -name "*.diff" -exec rsync -R {} -t ${targetFolder} \;
if [[ "${{ parameters.buildSourceOnly }}" == "True" ]]; then
find artifacts/prebuilt-report/ -exec rsync -R {} -t ${targetFolder} \;
fi
diff --git a/global.json b/global.json
index ed875e89bb63..ba1cfdb52d92 100644
--- a/global.json
+++ b/global.json
@@ -11,7 +11,7 @@
"cmake": "latest"
},
"msbuild-sdks": {
- "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.24151.5",
- "Microsoft.DotNet.CMake.Sdk": "9.0.0-beta.24151.5"
+ "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.24159.1",
+ "Microsoft.DotNet.CMake.Sdk": "9.0.0-beta.24159.1"
}
}
diff --git a/src/SourceBuild/content/Directory.Build.props b/src/SourceBuild/content/Directory.Build.props
index 52bed083548c..115646d298c4 100644
--- a/src/SourceBuild/content/Directory.Build.props
+++ b/src/SourceBuild/content/Directory.Build.props
@@ -15,8 +15,8 @@
solaris
haiku
windows
- $(BuildOS)
$(BuildOS)
+ $(TargetOS)
@@ -52,12 +52,12 @@
$(__DistroRid)
$([System.Runtime.InteropServices.RuntimeInformation]::RuntimeIdentifier)
- $(BuildRid)
$(BuildRid.Substring(0, $(BuildRid.LastIndexOf('-'))))-$(TargetArchitecture)
+ $(TargetRid)
- false
+ false
true
$(__PortableTargetOS)-$(TargetArchitecture)
@@ -146,7 +146,6 @@
false
minimal
- false
.cmd
.sh
@@ -203,6 +202,7 @@
$([MSBuild]::NormalizePath('$(ArtifactsBinDir)', 'Microsoft.DotNet.SourceBuild.Tasks.XPlat', '$(Configuration)', 'Microsoft.DotNet.SourceBuild.Tasks.XPlat.dll'))
$([MSBuild]::NormalizePath('$(ArtifactsBinDir)', 'Microsoft.DotNet.SourceBuild.Tasks.LeakDetection', '$(Configuration)', 'Microsoft.DotNet.SourceBuild.Tasks.LeakDetection.dll'))
+ $([MSBuild]::NormalizePath('$(ArtifactsBinDir)', 'Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff', '$(Configuration)', 'Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff.dll'))
diff --git a/src/SourceBuild/content/build.proj b/src/SourceBuild/content/build.proj
index 05c314d81d4e..66ed6262b607 100644
--- a/src/SourceBuild/content/build.proj
+++ b/src/SourceBuild/content/build.proj
@@ -10,6 +10,12 @@
+
+ source-build
+ non-source-build
+
+
+
+
0 ]]; do
;;
# Advanced settings
+ -build-tests)
+ properties="$properties /p:DotNetBuildTests=true"
+ ;;
-ci)
ci=true
;;
diff --git a/src/SourceBuild/content/eng/Version.Details.xml b/src/SourceBuild/content/eng/Version.Details.xml
index 94046ba35c0d..28584481bc08 100644
--- a/src/SourceBuild/content/eng/Version.Details.xml
+++ b/src/SourceBuild/content/eng/Version.Details.xml
@@ -3,9 +3,9 @@
-
+
https://github.com/dotnet/arcade
- 2fb543a45580400a559b5ae41c96a815ea14dac5
+ d5b02a4900c4d521cb48b8f0d7e3f28175268f7c
diff --git a/src/SourceBuild/content/eng/Versions.props b/src/SourceBuild/content/eng/Versions.props
index 6f096b470882..9884e085c9c8 100644
--- a/src/SourceBuild/content/eng/Versions.props
+++ b/src/SourceBuild/content/eng/Versions.props
@@ -22,8 +22,8 @@
of a .NET major or minor release, prebuilts may be needed. When the release is mature, prebuilts
are not necessary, and this property is removed from the file.
-->
- 9.0.100-preview.2.24104.1
- 9.0.100-preview.2.24104.1
+ 9.0.100-preview.2.24154.1-1
+ 9.0.100-preview.2.24154.1-1
15.7.179
diff --git a/src/SourceBuild/content/eng/build.ps1 b/src/SourceBuild/content/eng/build.ps1
index c13ce050adbf..b354a83422ef 100644
--- a/src/SourceBuild/content/eng/build.ps1
+++ b/src/SourceBuild/content/eng/build.ps1
@@ -10,6 +10,7 @@ Param(
[switch][Alias('h')]$help,
# Advanced settings
+ [switch]$buildTests,
[switch]$ci,
[switch][Alias('cwb')]$cleanWhileBuilding,
[switch][Alias('nobl')]$excludeCIBinarylog,
@@ -30,6 +31,7 @@ function Get-Usage() {
Write-Host ""
Write-Host "Advanced settings:"
+ Write-Host " -build-tests Build repository tests"
Write-Host " -ci Set when running on CI server"
Write-Host " -cleanWhileBuilding Cleans each repo after building (reduces disk space usage, short: -cwb)"
Write-Host " -excludeCIBinarylog Don't output binary log (short: -nobl)"
@@ -53,12 +55,14 @@ function Build {
$bl = if ($binaryLog) { '/bl:' + (Join-Path $LogDir 'Build.binlog') } else { '' }
$cwb = if ($cleanWhileBuilding) { '/p:CleanWhileBuilding=true' } else { '' }
+ $btst = if ($buildTests) { '/p:DotNetBuildTests=true' } else { '' }
$buildProj = Join-Path $RepoRoot 'build.proj'
MSBuild $buildProj `
$bl `
/p:Configuration=$configuration `
$cwb `
+ $btst `
@properties
}
diff --git a/src/SourceBuild/content/eng/build.sourcebuild.targets b/src/SourceBuild/content/eng/build.sourcebuild.targets
index 00b1439ef7d6..a05905856cf0 100644
--- a/src/SourceBuild/content/eng/build.sourcebuild.targets
+++ b/src/SourceBuild/content/eng/build.sourcebuild.targets
@@ -35,10 +35,6 @@
-
-
-
-
$(ArtifactsAssetsDir)dotnet-symbols-sdk-$(SourceBuiltSdkVersion)-$(TargetRid)$(ArchiveExtension)
diff --git a/src/SourceBuild/content/eng/restore-build-edited-files.ps1 b/src/SourceBuild/content/eng/restore-build-edited-files.ps1
new file mode 100644
index 000000000000..d817e177cf2e
--- /dev/null
+++ b/src/SourceBuild/content/eng/restore-build-edited-files.ps1
@@ -0,0 +1,45 @@
+<#
+.SYNOPSIS
+ Script to perform git restore for a set of commonly edited paths when building the VMR.
+
+.DESCRIPTION
+ This script restores the specified paths using git restore command. It provides options for logging, confirmation, and parameterized restore.
+
+.PARAMETER PathsToRestore
+ Specifies the paths to be restored. Default paths are:
+ - src/*/eng/common/*
+ - src/*global.json
+
+.PARAMETER LogPath
+ Specifies the path to save the log file. Default is 'restore.log' in the script directory.
+
+.PARAMETER NoPrompt
+ Indicates whether to skip the confirmation prompt. If specified, the script will restore the paths without confirmation.
+
+#>
+
+param (
+ [string[]]$PathsToRestore = @(
+ "src/*/eng/common/*",
+ "src/*global.json"
+ ),
+ [Alias("y")]
+ [switch]$NoPrompt = $false
+)
+
+# Confirmation prompt
+if (-not $NoPrompt) {
+ Write-Host "Will restore changes in the following paths:"
+ foreach ($path in $PathsToRestore) {
+ Write-Host " $path"
+ }
+ $choice = Read-Host "Do you want to proceed with restoring the paths? (Y/N)"
+ if (-not $($choice -ieq "Y")) {
+ exit 0
+ }
+}
+
+# Perform git restore for each path
+foreach ($path in $PathsToRestore) {
+ git -C (Split-Path -Path $PSScriptRoot -Parent) restore $path
+}
diff --git a/src/SourceBuild/content/eng/restore-build-edited-files.sh b/src/SourceBuild/content/eng/restore-build-edited-files.sh
new file mode 100755
index 000000000000..651256af7172
--- /dev/null
+++ b/src/SourceBuild/content/eng/restore-build-edited-files.sh
@@ -0,0 +1,80 @@
+#!/bin/bash
+
+# Help message
+show_help() {
+ echo "Script to perform git restore for a set of commonly edited paths when building the VMR."
+ echo ""
+ echo "Usage: $0 [-h] [-p ] [-n]"
+ echo ""
+ echo "Options:"
+ echo " -h, --help Show this help message and exit"
+ echo " -p, --path Specify the paths to be restored (default: src/*/eng/common/*, src/*global.json)"
+ echo " -y, --noprompt Skip the confirmation prompt"
+ echo ""
+ echo "Example:"
+ echo " $0 -p \"src/*/eng/common/*\" -p \"src/*global.json\""
+ echo ""
+ exit 0
+}
+
+source="${BASH_SOURCE[0]}"
+# resolve $source until the file is no longer a symlink
+while [[ -h "$source" ]]; do
+ scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
+ source="$(readlink "$source")"
+ # if $source was a relative symlink, we need to resolve it relative to the path where the
+ # symlink file was located
+ [[ $source != /* ]] && source="$scriptroot/$source"
+done
+scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
+
+# Default paths to restore
+DefaultPathsToRestore=(
+ "src/*/eng/common/*"
+ "src/*global.json"
+)
+PathsToRestore=()
+NoPrompt=false
+
+# Parse command line arguments
+while [[ $# -gt 0 ]]; do
+ case $1 in
+ -h|--help)
+ show_help
+ ;;
+ -p|--path)
+ shift
+ PathsToRestore+=("$1")
+ ;;
+ -y|--noprompt)
+ NoPrompt=true
+ ;;
+ *)
+ echo "Invalid option: $1"
+ show_help
+ ;;
+ esac
+ shift
+done
+
+# Use default paths if no paths are passed
+if [ ${#PathsToRestore[@]} -eq 0 ]; then
+ PathsToRestore=("${DefaultPathsToRestore[@]}")
+fi
+
+# Confirmation prompt
+if [ "$NoPrompt" = false ]; then
+ echo "Will restore changes in the following paths:"
+ for path in "${PathsToRestore[@]}"; do
+ echo " $path"
+ done
+ read -p "Do you want to proceed with restoring the paths? (Y/N)" choice
+ if [[ ! "$choice" =~ ^[Yy]$ ]]; then
+ exit 0
+ fi
+fi
+
+# Perform git restore for each path
+for path in "${PathsToRestore[@]}"; do
+ git -C "$(dirname "$scriptroot")" restore "$path"
+done
diff --git a/src/SourceBuild/content/eng/sdkArchiveDiff.targets b/src/SourceBuild/content/eng/sdkArchiveDiff.targets
new file mode 100644
index 000000000000..c3bc8078763a
--- /dev/null
+++ b/src/SourceBuild/content/eng/sdkArchiveDiff.targets
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_changedFiles Include="@(_ContentDifferences)" Condition="'%(_contentDifferences.Kind)' != 'Unchanged'" />
+ <_sdkFilesDiff Include="@(_ContentDifferences)" Condition="'%(_contentDifferences.Kind)' == 'Added'" >
+ +
+
+ <_sdkFilesDiff Include="@(_ContentDifferences)" Condition="'%(_contentDifferences.Kind)' == 'Removed'" >
+ -
+
+ <_sdkFilesDiff Include="@(_ContentDifferences)" Condition="'%(_contentDifferences.Kind)' == 'Unchanged'" >
+
+
+
+
+
+ $(ArtifactsLogDir)SdkArchiveContent.diff
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/SourceBuild/content/eng/tools/init-build.proj b/src/SourceBuild/content/eng/tools/init-build.proj
index 4d6b4d316651..f573747acaa8 100644
--- a/src/SourceBuild/content/eng/tools/init-build.proj
+++ b/src/SourceBuild/content/eng/tools/init-build.proj
@@ -15,6 +15,7 @@
UnpackTarballs;
BuildXPlatTasks;
BuildMSBuildSdkResolver;
+ BuildSdkArchiveDiff;
BuildLeakDetection;
ExtractToolPackage;
GenerateRootFs;
@@ -116,6 +117,15 @@
+
+
+
+
+
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Archive.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Archive.cs
new file mode 100644
index 000000000000..1417c88cad2c
--- /dev/null
+++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Archive.cs
@@ -0,0 +1,136 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Formats.Tar;
+using System.IO;
+using System.IO.Compression;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+public abstract class Archive : IDisposable
+{
+ public static async Task Create(string path, CancellationToken cancellationToken = default)
+ {
+ if (path.EndsWith(".tar.gz"))
+ return await TarArchive.Create(path, cancellationToken);
+ else if (path.EndsWith(".zip"))
+ return ZipFileArchive.Create(path);
+ else
+ throw new NotSupportedException("Unsupported archive type");
+ }
+
+ public abstract string[] GetFileNames();
+
+ public abstract bool Contains(string relativePath);
+
+ public abstract void Dispose();
+
+ public class TarArchive : Archive
+ {
+ private string _extractedFolder;
+
+ private TarArchive(string extractedFolder)
+ {
+ _extractedFolder = extractedFolder;
+ }
+
+ public static new async Task Create(string path, CancellationToken cancellationToken = default)
+ {
+ var tmpFolder = Directory.CreateTempSubdirectory(nameof(FindArchiveDiffs));
+ using (var gzStream = File.OpenRead(path))
+ using (var gzipStream = new GZipStream(gzStream, CompressionMode.Decompress))
+ {
+ await TarFile.ExtractToDirectoryAsync(gzipStream, tmpFolder.FullName, true, cancellationToken);
+ }
+ return new TarArchive(tmpFolder.FullName);
+ }
+
+ public override bool Contains(string relativePath)
+ {
+ return File.Exists(Path.Combine(_extractedFolder, relativePath));
+ }
+
+ public override string[] GetFileNames()
+ {
+ return Directory.GetFiles(_extractedFolder, "*", SearchOption.AllDirectories).Select(f => f.Substring(_extractedFolder.Length + 1)).ToArray();
+ }
+
+ public override void Dispose()
+ {
+ if (Directory.Exists(_extractedFolder))
+ Directory.Delete(_extractedFolder, true);
+ }
+ }
+
+ public class ZipFileArchive : Archive
+ {
+ private ZipArchive _archive;
+
+ private ZipFileArchive(ZipArchive archive)
+ {
+ _archive = archive;
+ }
+
+ public static ZipFileArchive Create(string path)
+ {
+ return new ZipFileArchive(new ZipArchive(File.OpenRead(path)));
+ }
+
+ public override bool Contains(string relativePath)
+ {
+ return _archive.GetEntry(relativePath) != null;
+ }
+
+ public override string[] GetFileNames()
+ {
+ return _archive.Entries.Select(e => e.FullName).ToArray();
+ }
+
+ public override void Dispose()
+ {
+ _archive.Dispose();
+ }
+ }
+
+ private static string GetArchiveExtension(string path)
+ {
+ if (path.EndsWith(".tar.gz"))
+ {
+ return ".tar.gz";
+ }
+ else if (path.EndsWith(".zip"))
+ {
+ return ".zip";
+ }
+ else
+ {
+ throw new ArgumentException($"Invalid archive extension '{path}': must end with .tar.gz or .zip");
+ }
+ }
+
+ public static (string Version, string Rid, string extension) GetInfoFromFileName(string filename, string packageName)
+ {
+ var extension = GetArchiveExtension(filename);
+ var Version = VersionIdentifier.GetVersion(filename);
+ if (Version is null)
+ throw new ArgumentException("Invalid archive file name '{filename}': No valid version found in file name.");
+ // Once we've removed the version, package name, and extension, we should be left with the RID
+ var Rid = filename
+ .Replace(extension, "")
+ .Replace(Version, "")
+ .Replace(packageName, "")
+ .Trim('-', '.', '_');
+
+ // A RID with '.' must have a version number after the first '.' in each part of the RID. For example, alpine.3.10-arm64.
+ // Otherwise, it's likely an archive of another type of file that we don't handle here, for example, .msi.wixpack.zip.
+ var ridParts = Rid.Split('-');
+ foreach(var item in ridParts.SelectMany(p => p.Split('.').Skip(1)))
+ {
+ if (!int.TryParse(item, out _))
+ throw new ArgumentException($"Invalid Rid '{Rid}' in archive file name '{filename}'. Expected RID with '.' to be part of a version. This likely means the file is an archive of a different file type.");
+ }
+ return (Version, Rid, extension);
+ }
+}
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Diff.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Diff.cs
new file mode 100644
index 000000000000..008fe67f0e16
--- /dev/null
+++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Diff.cs
@@ -0,0 +1,126 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Threading;
+using Microsoft.Build.Framework;
+using Microsoft.Build.Utilities;
+
+static class Diff
+{
+ public static ITaskItem TaskItemFromDiff((string, DifferenceKind) diff)
+ {
+ var item = new TaskItem(diff.Item1);
+ item.SetMetadata("Kind", Enum.GetName(diff.Item2));
+ return item;
+ }
+
+ public enum DifferenceKind
+ {
+ ///
+ /// Present in the test but not in the baseline
+ ///
+ Added,
+
+ ///
+ /// Present in the baseline but not in the test
+ ///
+ Removed,
+
+ ///
+ /// Present in both the baseline and test
+ ///
+ Unchanged
+ }
+
+ ///
+ /// Uses the Longest Common Subsequence algorithm (as used in 'git diff') to find the differences between two lists of strings.
+ /// Returns a list of the joined lists with the differences marked as either added or removed.
+ ///
+ public static List<(string, DifferenceKind DifferenceKind)> GetDiffs(
+ Span baselineSequence,
+ Span testSequence,
+ Func equalityComparer,
+ Func? formatter = null,
+ CancellationToken cancellationToken = default)
+ {
+ // Edit distance algorithm: https://en.wikipedia.org/wiki/Longest_common_subsequence
+ // cancellationToken.ThrowIfCancellationRequested();
+ formatter ??= static s => s;
+
+ // Optimization: remove common prefix
+ int i = 0;
+ List<(string, DifferenceKind)> prefix = [];
+ while (i < baselineSequence.Length && i < testSequence.Length && equalityComparer(baselineSequence[i], testSequence[i]))
+ {
+ prefix.Add((formatter(baselineSequence[i]), DifferenceKind.Unchanged));
+ i++;
+ }
+
+ baselineSequence = baselineSequence[i..];
+ testSequence = testSequence[i..];
+
+ // Initialize first row and column
+ int[,] m = new int[baselineSequence.Length + 1, testSequence.Length + 1];
+ for (i = 0; i <= baselineSequence.Length; i++)
+ {
+ m[i, 0] = i;
+ }
+ for (i = 0; i <= testSequence.Length; i++)
+ {
+ m[0, i] = i;
+ }
+
+ // Compute edit distance
+ for (i = 1; i <= baselineSequence.Length; i++)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+ for (int j = 1; j <= testSequence.Length; j++)
+ {
+ if (equalityComparer(baselineSequence[i - 1], testSequence[j - 1]))
+ {
+ m[i, j] = m[i - 1, j - 1];
+ }
+ else
+ {
+ m[i, j] = 1 + Math.Min(m[i - 1, j], m[i, j - 1]);
+ }
+ }
+ }
+
+ // Trace back the edits
+ int row = baselineSequence.Length;
+ int col = testSequence.Length;
+ List<(string, DifferenceKind)> diff = [];
+ while (row > 0 || col > 0)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+ if (row > 0 && col > 0 && equalityComparer(baselineSequence[row - 1], testSequence[col - 1]))
+ {
+ diff.Add((formatter(baselineSequence[row - 1]), DifferenceKind.Unchanged));
+ row--;
+ col--;
+ }
+ else if (col > 0 && (row == 0 || m[row, col - 1] <= m[row - 1, col]))
+ {
+ diff.Add((formatter(testSequence[col - 1]), DifferenceKind.Added));
+ col--;
+ }
+ else if (row > 0 && (col == 0 || m[row, col - 1] > m[row - 1, col]))
+ {
+ diff.Add((formatter(baselineSequence[row - 1]), DifferenceKind.Removed));
+ row--;
+ }
+ else
+ {
+ throw new UnreachableException();
+ }
+ }
+ diff.Reverse();
+ prefix.AddRange(diff);
+ return prefix;
+ }
+
+}
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/FindArchiveDiffs.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/FindArchiveDiffs.cs
new file mode 100644
index 000000000000..9fc19a7385c0
--- /dev/null
+++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/FindArchiveDiffs.cs
@@ -0,0 +1,49 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Build.Framework;
+using Task = System.Threading.Tasks.Task;
+
+public class FindArchiveDiffs : Microsoft.Build.Utilities.Task, ICancelableTask
+{
+ [Required]
+ public required ITaskItem BaselineArchive { get; init; }
+
+ [Required]
+ public required ITaskItem TestArchive { get; init; }
+
+ [Output]
+ public ITaskItem[] ContentDifferences { get; set; } = [];
+
+ private CancellationTokenSource _cancellationTokenSource = new();
+ private CancellationToken cancellationToken => _cancellationTokenSource.Token;
+
+ public override bool Execute()
+ {
+ return Task.Run(ExecuteAsync).Result;
+ }
+
+ public async Task ExecuteAsync()
+ {
+ var baselineTask = Archive.Create(BaselineArchive.ItemSpec);
+ var testTask = Archive.Create(TestArchive.ItemSpec);
+ Task.WaitAll([baselineTask, testTask], cancellationToken);
+ using var baseline = await baselineTask;
+ using var test = await testTask;
+ var baselineFiles = baseline.GetFileNames();
+ var testFiles = test.GetFileNames();
+ ContentDifferences =
+ Diff.GetDiffs(baselineFiles, testFiles, VersionIdentifier.AreVersionlessEqual, static p => VersionIdentifier.RemoveVersions(p, "{VERSION}"), cancellationToken)
+ .Select(Diff.TaskItemFromDiff)
+ .ToArray();
+ return true;
+ }
+
+ public void Cancel()
+ {
+ _cancellationTokenSource.Cancel();
+ }
+}
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetClosestArchive.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetClosestArchive.cs
new file mode 100644
index 000000000000..85592191d0b4
--- /dev/null
+++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetClosestArchive.cs
@@ -0,0 +1,94 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.IO;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Build.Framework;
+
+public abstract class GetClosestArchive : Microsoft.Build.Utilities.Task, ICancelableTask
+{
+ [Required]
+ public required string BuiltArchivePath { get; init; }
+
+ [Output]
+ public string ClosestOfficialArchivePath { get; set; } = "";
+
+ private string? _builtVersion;
+ protected string BuiltVersion
+ {
+ get => _builtVersion ?? throw new InvalidOperationException();
+ private set => _builtVersion = value;
+ }
+
+ private string? _builtRid;
+ protected string BuiltRid
+ {
+ get => _builtRid ?? throw new InvalidOperationException();
+ private set => _builtRid = value;
+ }
+
+ private string? _archiveExtension;
+ protected string ArchiveExtension
+ {
+ get => _archiveExtension ?? throw new InvalidOperationException();
+ private set => _archiveExtension = value;
+ }
+
+ ///
+ /// The name of the package to find the closest official archive for. For example, "dotnet-sdk" or "aspnetcore-runtime".
+ ///
+ protected abstract string ArchiveName { get; }
+
+ private CancellationTokenSource _cancellationTokenSource = new();
+ protected CancellationToken CancellationToken => _cancellationTokenSource.Token;
+ public void Cancel()
+ {
+ _cancellationTokenSource.Cancel();
+ }
+
+ ///
+ /// Get the URL of the latest official archive for the given version string and RID.
+ ///
+ public abstract Task GetClosestOfficialArchiveUrl();
+
+ public abstract Task GetClosestOfficialArchiveVersion();
+
+ public override bool Execute()
+ {
+ return Task.Run(ExecuteAsync).Result;
+ }
+
+ public async Task ExecuteAsync()
+ {
+ CancellationToken.ThrowIfCancellationRequested();
+ var filename = Path.GetFileName(BuiltArchivePath);
+ (BuiltVersion, BuiltRid, ArchiveExtension) = Archive.GetInfoFromFileName(filename, ArchiveName);
+ Log.LogMessage($"Finding closest official archive for '{ArchiveName}' version '{BuiltVersion}' RID '{BuiltRid}'");
+
+ string? downloadUrl = await GetClosestOfficialArchiveUrl();
+ if (downloadUrl == null)
+ {
+ Log.LogError($"Failed to find a download URL for '{ArchiveName}' version '{BuiltVersion}' RID '{BuiltRid}'");
+ return false;
+ }
+
+ HttpClient client = new HttpClient();
+
+ Log.LogMessage(MessageImportance.High, $"Downloading {downloadUrl}");
+ HttpResponseMessage packageResponse = await client.GetAsync(downloadUrl, CancellationToken);
+
+ var packageUriPath = packageResponse.RequestMessage!.RequestUri!.LocalPath;
+
+ ClosestOfficialArchivePath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName() + "." + Path.GetFileName(packageUriPath));
+ Log.LogMessage($"Copying {packageUriPath} to {ClosestOfficialArchivePath}");
+ using (var file = File.Create(ClosestOfficialArchivePath))
+ {
+ await packageResponse.Content.CopyToAsync(file, CancellationToken);
+ }
+
+ return true;
+ }
+}
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetClosestOfficialSdk.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetClosestOfficialSdk.cs
new file mode 100644
index 000000000000..bb038516c434
--- /dev/null
+++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetClosestOfficialSdk.cs
@@ -0,0 +1,44 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
+using Microsoft.Build.Framework;
+
+public class GetClosestOfficialSdk : GetClosestArchive
+{
+ protected override string ArchiveName => "dotnet-sdk";
+
+ HttpClient client = new HttpClient(new HttpClientHandler() { AllowAutoRedirect = false });
+
+ private string? closestVersion;
+ private string? closestUrl;
+
+ public override async Task GetClosestOfficialArchiveUrl()
+ {
+ // Channel in the form of 9.0.1xx
+ var channel = BuiltVersion[..5] + "xx";
+ var akaMsUrl = $"https://aka.ms/dotnet/{channel}/daily/{ArchiveName}-{BuiltRid}{ArchiveExtension}";
+ var redirectResponse = await client.GetAsync(akaMsUrl, CancellationToken);
+ // aka.ms returns a 301 for valid redirects and a 302 to Bing for invalid URLs
+ if (redirectResponse.StatusCode != HttpStatusCode.Moved)
+ {
+ Log.LogMessage(MessageImportance.High, $"Failed to find package at '{akaMsUrl}': invalid aka.ms URL");
+ return null;
+ }
+ closestUrl = redirectResponse.Headers.Location!.ToString();
+ closestVersion = VersionIdentifier.GetVersion(closestUrl);
+ return closestUrl;
+ }
+
+ public override async Task GetClosestOfficialArchiveVersion()
+ {
+ if (closestUrl is not null)
+ {
+ return closestVersion;
+ }
+ _ = await GetClosestOfficialArchiveUrl();
+ return closestVersion;
+ }
+}
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetValidArchiveItems.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetValidArchiveItems.cs
new file mode 100644
index 000000000000..bd27213b80b3
--- /dev/null
+++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetValidArchiveItems.cs
@@ -0,0 +1,57 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using Microsoft.Build.Framework;
+
+public class GetValidArchiveItems : Microsoft.Build.Utilities.Task
+{
+ [Required]
+ public required ITaskItem[] ArchiveItems { get; init; }
+
+ [Required]
+ public required string ArchiveName { get; init; }
+
+ [Output]
+ public ITaskItem[] ValidArchiveItems { get; set; } = [];
+
+ public override bool Execute()
+ {
+ List archiveItems = new();
+ foreach (var item in ArchiveItems)
+ {
+ var filename = Path.GetFileName(item.ItemSpec);
+ try
+ {
+ // Ensure the version and RID info can be parsed from the item
+ _ = Archive.GetInfoFromFileName(filename, ArchiveName);
+ archiveItems.Add(item);
+ }
+ catch (ArgumentException e)
+ {
+ Log.LogMessage($"'{item.ItemSpec}' is not a valid archive name: '{e.Message}'");
+ continue;
+ }
+ }
+ switch (archiveItems.Count)
+ {
+ case 0:
+ Log.LogMessage(MessageImportance.High, "No valid archive items found");
+ ValidArchiveItems = [];
+ return false;
+ case 1:
+ Log.LogMessage(MessageImportance.High, $"{archiveItems[0]} is the only valid archive item found");
+ ValidArchiveItems = archiveItems.ToArray();
+ break;
+ default:
+ archiveItems.Sort((a, b) => a.ItemSpec.Length - b.ItemSpec.Length);
+ Log.LogMessage(MessageImportance.High, $"Multiple valid archive items found: '{string.Join("', '", archiveItems)}'");
+ ValidArchiveItems = archiveItems.ToArray();
+ break;
+ }
+ return true;
+ }
+
+}
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff.csproj b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff.csproj
new file mode 100644
index 000000000000..ff3bf2402a01
--- /dev/null
+++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff.csproj
@@ -0,0 +1,12 @@
+
+
+
+ $(NetCurrent)
+ enable
+
+
+
+
+
+
+
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/VersionIdentifier.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/VersionIdentifier.cs
new file mode 100644
index 000000000000..2150a721197f
--- /dev/null
+++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/VersionIdentifier.cs
@@ -0,0 +1,257 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+// Copied from https://github.com/dotnet/arcade/blob/db45698020f58f88eef75b23b2598a59872918f6/src/Microsoft.DotNet.VersionTools/lib/src/BuildManifest/VersionIdentifier.cs
+// Conflicting MSBuild versions and some customizations make it difficult to use the Arcade assembly.
+public static class VersionIdentifier
+{
+ private static readonly HashSet _knownTags = new HashSet
+ {
+ "alpha",
+ "beta",
+ "preview",
+ "prerelease",
+ "servicing",
+ "rtm",
+ "rc"
+ };
+
+ private static readonly SortedDictionary _sequencesToReplace =
+ new SortedDictionary
+ {
+ { "-.", "." },
+ { "..", "." },
+ { "--", "-" },
+ { "//", "/" },
+ { "_.", "." }
+ };
+
+ private const string _finalSuffix = "final";
+
+ private static readonly char[] _delimiters = new char[] { '.', '-', '_' };
+
+ ///
+ /// Identify the version of an asset.
+ ///
+ /// Asset names can come in two forms:
+ /// - Blobs that include the full path
+ /// - Packages that do not include any path elements.
+ ///
+ /// There may be multiple different version numbers in a blob path.
+ /// This method starts at the last segment of the path and works backward to find a version number.
+ ///
+ /// Asset name
+ /// Version, or null if none is found.
+ public static string? GetVersion(string assetName)
+ {
+ string[] pathSegments = assetName.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
+ string? potentialVersion = null;
+ for (int i = pathSegments.Length - 1; i >= 0; i--)
+ {
+ potentialVersion = GetVersionForSingleSegment(pathSegments[i]);
+ if (potentialVersion != null)
+ {
+ return potentialVersion;
+ }
+ }
+
+ return potentialVersion;
+ }
+
+ ///
+ /// Identify the version number of an asset segment.
+ ///
+ /// Asset segment
+ /// Version number, or null if none was found
+ ///
+ /// Identifying versions is not particularly easy. To constrain the problem,
+ /// we apply the following assumptions which are generally valid for .NET Core.
+ /// - We always have major.minor.patch, and it always begins the version string.
+ /// - The only pre-release or build metadata labels we use begin with the _knownTags shown above.
+ /// - We use additional numbers in our version numbers after the initial
+ /// major.minor.patch-prereleaselabel.prereleaseiteration segment,
+ /// but any non-numeric element will end the version string.
+ /// - The we use in versions and file names are ., -, and _.
+ ///
+ private static string? GetVersionForSingleSegment(string assetPathSegment)
+ {
+
+ // Find the start of the version number by finding the major.minor.patch.
+ // Scan the string forward looking for a digit preceded by one of the delimiters,
+ // then look for a minor.patch, completing the major.minor.patch. Continue to do so until we get
+ // to something that is NOT major.minor.patch (this is necessary because we sometimes see things like:
+ // VS.Redist.Common.NetCore.Templates.x86.2.2.3.0.101-servicing-014320.nupkg
+ // Continue iterating until we find ALL potential versions. Return the one that is the latest in the segment
+ // This is to deal with files with multiple major.minor.patchs in the file name, for example:
+ // Microsoft.NET.Workload.Mono.ToolChain.Manifest-6.0.100.Msi.x64.6.0.0-rc.1.21380.2.symbols.nupkg
+
+ int currentIndex = 0;
+ // Stack of major.minor.patch.
+ Stack<(int versionNumber, int index)> majorMinorPatchStack = new Stack<(int, int)>(3);
+ string? majorMinorPatch = null;
+ int majorMinorPatchIndex = 0;
+ StringBuilder versionSuffix = new StringBuilder();
+ char prevDelimiterCharacter = char.MinValue;
+ char nextDelimiterCharacter = char.MinValue;
+ Dictionary majorMinorPatchDictionary = new Dictionary();
+ while (true)
+ {
+ string nextSegment;
+ prevDelimiterCharacter = nextDelimiterCharacter;
+ int nextDelimiterIndex = assetPathSegment.IndexOfAny(_delimiters, currentIndex);
+ if (nextDelimiterIndex != -1)
+ {
+ nextDelimiterCharacter = assetPathSegment[nextDelimiterIndex];
+ nextSegment = assetPathSegment.Substring(currentIndex, nextDelimiterIndex - currentIndex);
+ }
+ else
+ {
+ nextSegment = assetPathSegment.Substring(currentIndex);
+ }
+
+ // If we have not yet found the major/minor/patch, then there are four cases:
+ // - There have been no potential major/minor/patch numbers found and the current segment is a number. Push onto the majorMinorPatch stack
+ // and continue.
+ // - There has been at least one number found, but less than 3, and the current segment not a number or not preceded by '.'. In this case,
+ // we should clear out the stack and continue the search.
+ // - There have been at least 2 numbers found and the current segment is a number and preceded by '.'. Push onto the majorMinorPatch stack and continue
+ // - There have been at least 3 numbers found and the current segment is not a number or not preceded by '-'. In this case, we can call this the major minor
+ // patch number and no longer need to continue searching
+ if (majorMinorPatch == null)
+ {
+ bool isNumber = int.TryParse(nextSegment, out int potentialVersionSegment);
+ if ((majorMinorPatchStack.Count == 0 && isNumber) ||
+ (majorMinorPatchStack.Count > 0 && prevDelimiterCharacter == '.' && isNumber))
+ {
+ majorMinorPatchStack.Push((potentialVersionSegment, currentIndex));
+ }
+ // Check for partial major.minor.patch cases, like: 2.2.bar or 2.2-100.bleh
+ else if (majorMinorPatchStack.Count > 0 && majorMinorPatchStack.Count < 3 &&
+ (prevDelimiterCharacter != '.' || !isNumber))
+ {
+ majorMinorPatchStack.Clear();
+ }
+
+ // Determine whether we are done with major.minor.patch after this update.
+ if (majorMinorPatchStack.Count >= 3 && (prevDelimiterCharacter != '.' || !isNumber || nextDelimiterIndex == -1))
+ {
+ // Done with major.minor.patch, found. Pop the top 3 elements off the stack.
+ (int patch, int patchIndex) = majorMinorPatchStack.Pop();
+ (int minor, int minorIndex) = majorMinorPatchStack.Pop();
+ (int major, int majorIndex) = majorMinorPatchStack.Pop();
+ majorMinorPatch = $"{major}.{minor}.{patch}";
+ majorMinorPatchIndex = majorIndex;
+ }
+ }
+
+ // Don't use else, so that we don't miss segments
+ // in case we are just deciding that we've finished major minor patch.
+ if (majorMinorPatch != null)
+ {
+ // Now look at the next segment. If it looks like it could be part of a version, append to what we have
+ // and continue. If it can't, then we're done.
+ //
+ // Cases where we should break out and be done:
+ // - We have an empty pre-release label and the delimiter is not '-'.
+ // - We have an empty pre-release label and the next segment does not start with a known tag.
+ // - We have a non-empty pre-release label and the current segment is not a number and also not 'final'
+ // A corner case of versioning uses .final to represent a non-date suffixed final pre-release version:
+ // 3.1.0-preview.10.final
+ if (versionSuffix.Length == 0 &&
+ (prevDelimiterCharacter != '-' || !_knownTags.Any(tag => nextSegment.StartsWith(tag, StringComparison.OrdinalIgnoreCase))))
+ {
+ majorMinorPatchDictionary.Add(majorMinorPatchIndex, majorMinorPatch);
+ majorMinorPatch = null;
+ versionSuffix = new StringBuilder();
+ }
+ else if (versionSuffix.Length != 0 && !int.TryParse(nextSegment, out int potentialVersionSegment) && nextSegment != _finalSuffix)
+ {
+ majorMinorPatchDictionary.Add(majorMinorPatchIndex, $"{majorMinorPatch}{versionSuffix.ToString()}");
+ majorMinorPatch = null;
+ versionSuffix = new StringBuilder();
+ }
+ else
+ {
+ // Append the delimiter character and then the current segment
+ versionSuffix.Append(prevDelimiterCharacter);
+ versionSuffix.Append(nextSegment);
+ }
+ }
+
+ if (nextDelimiterIndex != -1)
+ {
+ currentIndex = nextDelimiterIndex + 1;
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ if (majorMinorPatch != null)
+ {
+ majorMinorPatchDictionary.Add(majorMinorPatchIndex, $"{majorMinorPatch}{versionSuffix.ToString()}");
+ }
+
+ if (!majorMinorPatchDictionary.Any())
+ {
+ return null;
+ }
+
+ int maxKey = majorMinorPatchDictionary.Keys.Max();
+ return majorMinorPatchDictionary[maxKey];
+ }
+
+ ///
+ /// Given an asset name, remove all .NET Core version numbers (as defined by GetVersionForSingleSegment)
+ /// from the string
+ ///
+ /// Asset
+ /// Asset name without versions
+ public static string RemoveVersions(string assetName, string replacement = "")
+ {
+ string[] pathSegments = assetName.Split('/');
+
+ // Remove the version number from each segment, then join back together and
+ // remove any useless character sequences.
+
+ for (int i = 0; i < pathSegments.Length; i++)
+ {
+ if (!string.IsNullOrEmpty(pathSegments[i]))
+ {
+ string? versionForSegment = GetVersionForSingleSegment(pathSegments[i]);
+ if (versionForSegment != null)
+ {
+ pathSegments[i] = pathSegments[i].Replace(versionForSegment, replacement);
+ }
+ }
+ }
+
+ // Continue replacing things until there is nothing left to replace.
+ string assetWithoutVersions = string.Join("/", pathSegments);
+ bool anyReplacements = true;
+ while (anyReplacements)
+ {
+ string replacementIterationResult = assetWithoutVersions;
+ foreach (var sequence in _sequencesToReplace)
+ {
+ replacementIterationResult = replacementIterationResult.Replace(sequence.Key, sequence.Value);
+ }
+ anyReplacements = replacementIterationResult != assetWithoutVersions;
+ assetWithoutVersions = replacementIterationResult;
+ }
+
+ return assetWithoutVersions;
+ }
+
+
+ public static bool AreVersionlessEqual(string assetName1, string assetName2)
+ {
+ return RemoveVersions(assetName1) == RemoveVersions(assetName2);
+ }
+}
diff --git a/src/SourceBuild/content/global.json b/src/SourceBuild/content/global.json
index 593a57a50a20..8ef2585218a5 100644
--- a/src/SourceBuild/content/global.json
+++ b/src/SourceBuild/content/global.json
@@ -1,10 +1,10 @@
{
"tools": {
- "dotnet": "9.0.100-preview.2.24103.2"
+ "dotnet": "9.0.100-preview.2.24154.2"
},
"msbuild-sdks": {
"Microsoft.Build.NoTargets": "3.7.0",
"Microsoft.Build.Traversal": "3.4.0",
- "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.24102.4"
+ "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.24114.1"
}
}
diff --git a/src/SourceBuild/content/repo-projects/Directory.Build.props b/src/SourceBuild/content/repo-projects/Directory.Build.props
index a08537f4a55c..a45f7bd567be 100644
--- a/src/SourceBuild/content/repo-projects/Directory.Build.props
+++ b/src/SourceBuild/content/repo-projects/Directory.Build.props
@@ -5,6 +5,12 @@
$(MSBuildProjectName)
$(GitInfoDir)$(RepositoryName).props
+ true
+ false
+
+ true
@@ -82,10 +88,6 @@
$(BuildArgs) /p:SourceBuildUseMonoRuntime=$(SourceBuildUseMonoRuntime)
-
- $(BuildArgs) /p:ArcadeBuildVertical=true
-
-
$(BuildArgs) /p:ArcadeBuildFromSource=true
$(BuildArgs) /p:DotNetBuildSourceOnly=true
diff --git a/src/SourceBuild/content/repo-projects/Directory.Build.targets b/src/SourceBuild/content/repo-projects/Directory.Build.targets
index 44cc7af061b5..ea9f412235c0 100644
--- a/src/SourceBuild/content/repo-projects/Directory.Build.targets
+++ b/src/SourceBuild/content/repo-projects/Directory.Build.targets
@@ -93,12 +93,6 @@
<_CommonBuildSources Include="@(DependentRepoSourceName)" />
<_CommonBuildSources Include="$(ExtraSourcesNuGetSourceName)" Condition="'$(ExtraRestoreSourcePath)' != ''" />
-
-
- <_BuildSources Condition="'$(DotNetBuildSourceOnly)' == 'true'"
- Include="$(PrebuiltNuGetSourceName);$(PreviouslySourceBuiltNuGetSourceName);$(ReferencePackagesNuGetSourceName)" />
- <_BuildSources Include="@(_CommonBuildSources)" />
-
diff --git a/src/SourceBuild/content/repo-projects/razor.proj b/src/SourceBuild/content/repo-projects/razor.proj
index 156d33d6ca90..100c56a759bf 100644
--- a/src/SourceBuild/content/repo-projects/razor.proj
+++ b/src/SourceBuild/content/repo-projects/razor.proj
@@ -4,6 +4,8 @@
$(BuildArgs) /p:UsingToolMicrosoftNetCompilers=false
+
+ $(BuildArgs) /p:TargetRid=$(TargetRid)
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/ArtifactsSizeTest.cs b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/ArtifactsSizeTest.cs
index 6e1bd1d0a622..e8cafd64183c 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/ArtifactsSizeTest.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/ArtifactsSizeTest.cs
@@ -51,14 +51,14 @@ public void CompareArtifactsToBaseline()
var tarEntries = ProcessSdkAndArtifactsTarballs();
ScanForDifferences(tarEntries);
- UpdateBaselineFile(tarEntries);
+ UpdateBaselineFile();
// Must wait to report differences until after the baseline file is updated else a failure
// will cause the baseline file to not be updated.
ReportDifferences();
}
- private FileSize[] ProcessSdkAndArtifactsTarballs()
+ private Dictionary ProcessSdkAndArtifactsTarballs()
{
string tempTarballDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
Directory.CreateDirectory(tempTarballDir);
@@ -66,19 +66,17 @@ private FileSize[] ProcessSdkAndArtifactsTarballs()
Utilities.ExtractTarball(Config.SdkTarballPath, tempTarballDir, OutputHelper);
Utilities.ExtractTarball(Config.SourceBuiltArtifactsPath, tempTarballDir, OutputHelper);
- FileSize[] tarEntries = Directory.EnumerateFiles(tempTarballDir, "*", SearchOption.AllDirectories)
- .Where(filepath => !filepath.Contains("SourceBuildReferencePackages"))
+ Dictionary tarEntries = Directory.EnumerateFiles(tempTarballDir, "*", SearchOption.AllDirectories)
+ .Where(filePath => !filePath.Contains("SourceBuildReferencePackages"))
.Select(filePath =>
{
- string result = filePath.Substring(tempTarballDir.Length + 1);
- result = ProcessFilePath(result);
- return new FileSize(result, new FileInfo(filePath).Length);
+ string relativePath = filePath.Substring(tempTarballDir.Length + 1);
+ return (ProcessFilePath(relativePath), new FileInfo(filePath).Length);
})
- .OrderBy(entry => entry.FilePath)
- .ToArray();
-
+ .ToDictionary(tuple => tuple.Item1, tuple => tuple.Item2);
+
Directory.Delete(tempTarballDir, true);
-
+
return tarEntries;
}
@@ -125,44 +123,59 @@ private string AddDifferenciatingSuffix(string filePath)
return filePath;
}
- private void ScanForDifferences(FileSize[] tarEntries)
+ private void ScanForDifferences(Dictionary tarEntries)
{
foreach (var entry in tarEntries)
{
- if (!Baseline.TryGetValue(entry.FilePath, out long baselineBytes))
+ if (!Baseline.TryGetValue(entry.Key, out long baselineBytes))
{
- TrackDifference($"{entry.FilePath} does not exist in baseline. Adding it to the baseline file");
+ TrackDifference($"{entry.Key} does not exist in baseline. It is {entry.Value} bytes. Adding it to the baseline file.");
+ Baseline.Add(entry.Key, entry.Value);
}
else
{
- CompareFileSizes(entry.FilePath, entry.Bytes, baselineBytes);
- Baseline.Remove(entry.FilePath);
+ CompareFileSizes(entry.Key, entry.Value, baselineBytes);
}
}
- foreach (var entry in Baseline)
+ foreach (var removedFile in Baseline.Keys.Except(tarEntries.Keys))
{
- TrackDifference($"`{entry.Key}` is no longer being produced. It was {entry.Value} bytes");
+ TrackDifference($"`{removedFile}` is no longer being produced. It was {Baseline[removedFile]} bytes.");
+ Baseline.Remove(removedFile);
}
}
private void CompareFileSizes(string filePath, long fileSize, long baselineSize)
{
+ // Only update the baseline with breaking differences. Non-breaking differences are file size changes
+ // less than the threshold percentage. This makes it easier to review the breaking changes and prevents
+ // inadvertently allowing small percentage changes to be accepted that can add up to a significant
+ // difference over time.
+ string breakingDifference = string.Empty;
+
if (fileSize == 0 && baselineSize != 0)
{
- TrackDifference($"'{filePath}' is now 0 bytes. It was {baselineSize} bytes");
+ breakingDifference = $"'{filePath}' is now 0 bytes. It was {baselineSize} bytes.";
}
else if (fileSize != 0 && baselineSize == 0)
{
- TrackDifference($"'{filePath}' is no longer 0 bytes. It is now {fileSize} bytes");
+ breakingDifference = $"'{filePath}' is no longer 0 bytes. It is now {fileSize} bytes.";
}
else if (baselineSize != 0 && (((fileSize - baselineSize) / (double)baselineSize) * 100) >= SizeThresholdPercentage)
{
- TrackDifference($"'{filePath}' increased in size by more than {SizeThresholdPercentage}%. It was originally {baselineSize} bytes and is now {fileSize} bytes");
+ breakingDifference =
+ $"'{filePath}' increased in size by more than {SizeThresholdPercentage}%. It was originally {baselineSize} bytes and is now {fileSize} bytes.";
}
else if (baselineSize != 0 && (((baselineSize - fileSize) / (double)baselineSize) * 100) >= SizeThresholdPercentage)
{
- TrackDifference($"'{filePath}' decreased in size by more than {SizeThresholdPercentage}%. It was originally {baselineSize} bytes and is now {fileSize} bytes");
+ breakingDifference =
+ $"'{filePath}' decreased in size by more than {SizeThresholdPercentage}%. It was originally {baselineSize} bytes and is now {fileSize} bytes.";
+ }
+
+ if (!string.IsNullOrEmpty(breakingDifference))
+ {
+ TrackDifference(breakingDifference);
+ Baseline[filePath] = fileSize;
}
}
@@ -172,7 +185,6 @@ private void ReportDifferences()
{
if (Differences.Length > 0)
{
-
if (Config.WarnOnSdkContentDiffs)
{
OutputHelper.LogWarningMessage(Differences.ToString());
@@ -180,33 +192,25 @@ private void ReportDifferences()
else
{
OutputHelper.WriteLine(Differences.ToString());
- Assert.Fail("Differences were found in the artifacts sizes");
+ Assert.Fail("Differences were found in the artifacts sizes.");
}
}
}
- private void UpdateBaselineFile(FileSize[] tarEntries)
+ private void UpdateBaselineFile()
{
try
{
string actualFilePath = Path.Combine(LogsDirectory, $"UpdatedArtifactsSizes_{Config.TargetRid}.txt");
- File.WriteAllLines(actualFilePath, tarEntries.Select(entry => $"{entry.FilePath}: {entry.Bytes}"));
+ File.WriteAllLines(
+ actualFilePath,
+ Baseline
+ .OrderBy(kvp => kvp.Key)
+ .Select(kvp => $"{kvp.Key}: {kvp.Value}"));
}
catch (IOException ex)
{
throw new InvalidOperationException($"An error occurred while copying the baselines file: {BaselineFilePath}", ex);
}
}
-
- private readonly struct FileSize
- {
- public string FilePath { get; }
- public long Bytes { get; }
-
- public FileSize(string filePath, long bytes)
- {
- FilePath = filePath;
- Bytes = bytes;
- }
- }
}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/SdkAssemblyVersionDiffExclusions.txt b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/SdkAssemblyVersionDiffExclusions.txt
index aa12be13703b..ce7d9c74aec0 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/SdkAssemblyVersionDiffExclusions.txt
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/SdkAssemblyVersionDiffExclusions.txt
@@ -47,6 +47,8 @@
./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/BuildHost-netcore/System.Reflection.Metadata.dll
# These assemblies are lifted to a higher version naturally via SB
+./sdk/x.y.z/DotnetTools/dotnet-format/dotnet-format.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/*/dotnet-format.resources.dll
./sdk/x.y.z/DotnetTools/dotnet-format/*/Microsoft.CodeAnalysis.*
./sdk/x.y.z/DotnetTools/dotnet-format/Humanizer.dll
./sdk/x.y.z/DotnetTools/dotnet-format/Microsoft.Build.Locator.dll
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/MsftToSbSdkFiles.diff b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/MsftToSbSdkFiles.diff
index d02f4b5ee736..a50c205b8947 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/MsftToSbSdkFiles.diff
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/MsftToSbSdkFiles.diff
@@ -81,9 +81,6 @@ index ------------
-./sdk/x.y.z/Containers/containerize/ko/Microsoft.DotNet.Cli.Utils.resources.dll
-./sdk/x.y.z/Containers/containerize/ko/Microsoft.NET.Build.Containers.resources.dll
-./sdk/x.y.z/Containers/containerize/ko/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.Build.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.Build.Framework.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.Build.Utilities.Core.dll
-./sdk/x.y.z/Containers/containerize/Microsoft.DotNet.Cli.Utils.dll
-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Configuration.Abstractions.dll
-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Configuration.Binder.dll
@@ -99,8 +96,6 @@ index ------------
-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Options.dll
-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Primitives.dll
-./sdk/x.y.z/Containers/containerize/Microsoft.NET.Build.Containers.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.NET.StringTools.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.VisualStudio.Setup.Configuration.Interop.dll
-./sdk/x.y.z/Containers/containerize/MSBuild.dll
-./sdk/x.y.z/Containers/containerize/Newtonsoft.Json.dll
-./sdk/x.y.z/Containers/containerize/NuGet.Common.dll
@@ -129,13 +124,8 @@ index ------------
-./sdk/x.y.z/Containers/containerize/runtimes/win/
-./sdk/x.y.z/Containers/containerize/runtimes/win/lib/
-./sdk/x.y.z/Containers/containerize/runtimes/win/lib/netx.y/
--./sdk/x.y.z/Containers/containerize/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.dll
--./sdk/x.y.z/Containers/containerize/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.Messages.dll
-./sdk/x.y.z/Containers/containerize/runtimes/win/lib/netx.y/System.Security.Cryptography.Pkcs.dll
-./sdk/x.y.z/Containers/containerize/System.CommandLine.dll
--./sdk/x.y.z/Containers/containerize/System.Configuration.ConfigurationManager.dll
--./sdk/x.y.z/Containers/containerize/System.Diagnostics.EventLog.dll
--./sdk/x.y.z/Containers/containerize/System.Reflection.MetadataLoadContext.dll
-./sdk/x.y.z/Containers/containerize/System.Security.Cryptography.Pkcs.dll
-./sdk/x.y.z/Containers/containerize/System.Security.Cryptography.ProtectedData.dll
-./sdk/x.y.z/Containers/containerize/tr/
@@ -182,8 +172,6 @@ index ------------
-./sdk/x.y.z/Containers/tasks/net472/ko/Microsoft.NET.Build.Containers.resources.dll
-./sdk/x.y.z/Containers/tasks/net472/ko/System.CommandLine.resources.dll
-./sdk/x.y.z/Containers/tasks/net472/Microsoft.Bcl.AsyncInterfaces.dll
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.Build.dll
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.Build.Framework.dll
-./sdk/x.y.z/Containers/tasks/net472/Microsoft.DotNet.Cli.Utils.dll
-./sdk/x.y.z/Containers/tasks/net472/Microsoft.DotNet.Cli.Utils.dll.config
-./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.DependencyInjection.Abstractions.dll
@@ -193,12 +181,9 @@ index ------------
-./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.Logging.dll
-./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.Options.dll
-./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.Primitives.dll
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.IO.Redist.dll
-./sdk/x.y.z/Containers/tasks/net472/Microsoft.NET.Build.Containers.deps.json
-./sdk/x.y.z/Containers/tasks/net472/Microsoft.NET.Build.Containers.dll
-./sdk/x.y.z/Containers/tasks/net472/Microsoft.NET.Build.Containers.dll.config
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.NET.StringTools.dll
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.VisualStudio.Setup.Configuration.Interop.dll
-./sdk/x.y.z/Containers/tasks/net472/Newtonsoft.Json.dll
-./sdk/x.y.z/Containers/tasks/net472/NuGet.Common.dll
-./sdk/x.y.z/Containers/tasks/net472/NuGet.Configuration.dll
@@ -223,19 +208,13 @@ index ------------
-./sdk/x.y.z/Containers/tasks/net472/ru/Microsoft.NET.Build.Containers.resources.dll
-./sdk/x.y.z/Containers/tasks/net472/ru/System.CommandLine.resources.dll
-./sdk/x.y.z/Containers/tasks/net472/System.Buffers.dll
--./sdk/x.y.z/Containers/tasks/net472/System.Collections.Immutable.dll
-./sdk/x.y.z/Containers/tasks/net472/System.CommandLine.dll
--./sdk/x.y.z/Containers/tasks/net472/System.Configuration.ConfigurationManager.dll
-./sdk/x.y.z/Containers/tasks/net472/System.Diagnostics.DiagnosticSource.dll
-./sdk/x.y.z/Containers/tasks/net472/System.Memory.dll
-./sdk/x.y.z/Containers/tasks/net472/System.Numerics.Vectors.dll
--./sdk/x.y.z/Containers/tasks/net472/System.Reflection.Metadata.dll
--./sdk/x.y.z/Containers/tasks/net472/System.Reflection.MetadataLoadContext.dll
-./sdk/x.y.z/Containers/tasks/net472/System.Runtime.CompilerServices.Unsafe.dll
--./sdk/x.y.z/Containers/tasks/net472/System.Security.Principal.Windows.dll
-./sdk/x.y.z/Containers/tasks/net472/System.Text.Encodings.Web.dll
-./sdk/x.y.z/Containers/tasks/net472/System.Text.Json.dll
--./sdk/x.y.z/Containers/tasks/net472/System.Threading.Tasks.Dataflow.dll
-./sdk/x.y.z/Containers/tasks/net472/System.Threading.Tasks.Extensions.dll
-./sdk/x.y.z/Containers/tasks/net472/System.ValueTuple.dll
-./sdk/x.y.z/Containers/tasks/net472/tr/
@@ -254,14 +233,6 @@ index ------------
./sdk/x.y.z/Containers/tasks/netx.y/
./sdk/x.y.z/Containers/tasks/netx.y/cs/
./sdk/x.y.z/Containers/tasks/netx.y/cs/Microsoft.DotNet.Cli.Utils.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/Containers/tasks/netx.y/Microsoft.NET.Build.Containers.deps.json
- ./sdk/x.y.z/Containers/tasks/netx.y/Microsoft.NET.Build.Containers.dll
- ./sdk/x.y.z/Containers/tasks/netx.y/Microsoft.NET.StringTools.dll
--./sdk/x.y.z/Containers/tasks/netx.y/Microsoft.VisualStudio.Setup.Configuration.Interop.dll
- ./sdk/x.y.z/Containers/tasks/netx.y/MSBuild.dll
- ./sdk/x.y.z/Containers/tasks/netx.y/Newtonsoft.Json.dll
- ./sdk/x.y.z/Containers/tasks/netx.y/NuGet.Common.dll
@@ ------------ @@
./sdk/x.y.z/Microsoft.Build.NuGetSdkResolver.dll
./sdk/x.y.z/Microsoft.Build.Tasks.Core.dll
diff --git a/src/core-sdk-tasks/ExtractArchiveToDirectory.cs b/src/core-sdk-tasks/ExtractArchiveToDirectory.cs
index e61f21e53363..4416122479e3 100644
--- a/src/core-sdk-tasks/ExtractArchiveToDirectory.cs
+++ b/src/core-sdk-tasks/ExtractArchiveToDirectory.cs
@@ -113,7 +113,7 @@ public override bool Execute()
retVal = base.Execute();
#else
// Decompress GZip content
- using FileStream compressedFileStream = File.Open(SourceArchive, FileMode.Open);
+ using FileStream compressedFileStream = File.OpenRead(SourceArchive);
using var decompressor = new GZipStream(compressedFileStream, CompressionMode.Decompress);
using var decompressedStream = new MemoryStream();
decompressor.CopyTo(decompressedStream);
diff --git a/src/redist/redist.csproj b/src/redist/redist.csproj
index 8006710cd9ea..b0335d8c310a 100644
--- a/src/redist/redist.csproj
+++ b/src/redist/redist.csproj
@@ -7,6 +7,7 @@
true
none
true
+ true
diff --git a/src/redist/targets/GenerateBundledVersions.targets b/src/redist/targets/GenerateBundledVersions.targets
index bd36c5e06fd5..6130b5eb862a 100644
--- a/src/redist/targets/GenerateBundledVersions.targets
+++ b/src/redist/targets/GenerateBundledVersions.targets
@@ -266,6 +266,10 @@
Condition="'$(BundleRuntimePacks)' == 'true'"
Include="$(ProductMonikerRid)" />
+
+