Merge branch 'feature/installer-merge-update-main' into feature/installer-merge-update

# Conflicts:
#	.vsts-ci.yml
#	eng/Publishing.props
#	eng/Versions.props
#	eng/build.yml
#	global.json
#	src/redist/targets/BundledTemplates.targets
#	src/redist/targets/GenerateBundledVersions.targets
#	src/redist/targets/Versions.targets
This commit is contained in:
Michael Yanni 2024-04-05 11:17:48 -07:00
commit 3acc889653
191 changed files with 10271 additions and 4334 deletions

View file

@ -0,0 +1,21 @@
## DO NOT MODIFY THIS FILE MANUALLY. This is part of auto-baselining from 1ES Pipeline Templates. Go to [https://aka.ms/1espt-autobaselining] for more details.
pipelines:
286:
retail:
binary:
credscan:
lastModifiedDate: 2024-03-15
binskim:
lastModifiedDate: 2024-03-15
spotbugs:
lastModifiedDate: 2024-03-15
source:
credscan:
lastModifiedDate: 2024-03-15
eslint:
lastModifiedDate: 2024-03-15
psscriptanalyzer:
lastModifiedDate: 2024-03-15
armory:
lastModifiedDate: 2024-03-15

View file

@ -3,7 +3,7 @@
"isRoot": true, "isRoot": true,
"tools": { "tools": {
"microsoft.dotnet.darc": { "microsoft.dotnet.darc": {
"version": "1.1.0-beta.24112.3", "version": "1.1.0-beta.24168.3",
"commands": [ "commands": [
"darc" "darc"
] ]

View file

@ -0,0 +1,225 @@
{
"properties": {
"helpUri": "https://eng.ms/docs/microsoft-security/security/azure-security/cloudai-security-fundamentals-engineering/security-integration/guardian-wiki/microsoft-guardian/general/baselines"
},
"version": "1.0.0",
"baselines": {
"default": {
"name": "default",
"createdDate": "2024-03-15 21:07:20Z",
"lastUpdatedDate": "2024-03-15 21:07:20Z"
}
},
"results": {
"9fcdc81730d500a234ad1fcd1a18108502b8c50c48567b91176c8e26f6bc5d34": {
"signature": "9fcdc81730d500a234ad1fcd1a18108502b8c50c48567b91176c8e26f6bc5d34",
"alternativeSignatures": [],
"target": "MicroBuild/Plugins/nuget.config",
"line": 9,
"memberOf": [
"default"
],
"tool": "credscan",
"ruleId": "CSCAN-GENERAL0060",
"createdDate": "2024-03-15 21:07:20Z",
"expirationDate": "2024-09-01 21:43:51Z",
"justification": "This error is baselined with an expiration date of 180 days from 2024-03-15 21:43:51Z"
},
"8814a931c03f7ee625e291e19f2f5671357142600639b0143a3c46631b864e93": {
"signature": "8814a931c03f7ee625e291e19f2f5671357142600639b0143a3c46631b864e93",
"alternativeSignatures": [],
"target": "MicroBuild/Plugins/MicroBuild.Plugins.Signing.1.1.902/build/tools/dlabnugetcert.pfx",
"line": 1,
"memberOf": [
"default"
],
"tool": "credscan",
"ruleId": "CSCAN-GENERAL0020",
"createdDate": "2024-03-15 21:10:36Z",
"expirationDate": "2024-09-01 21:43:51Z",
"justification": "This error is baselined with an expiration date of 180 days from 2024-03-15 21:43:51Z"
},
"29ef09fbcdcda70063644424ad6a64c7aaae97e31b89c31c89b631eab56252e9": {
"signature": "29ef09fbcdcda70063644424ad6a64c7aaae97e31b89c31c89b631eab56252e9",
"alternativeSignatures": [],
"target": "MicroBuild/Plugins/MicroBuild.Plugins.Signing.1.1.902/build/tools/dynamicsha1.pfx",
"line": 1,
"memberOf": [
"default"
],
"tool": "credscan",
"ruleId": "CSCAN-GENERAL0020",
"createdDate": "2024-03-15 21:10:36Z",
"expirationDate": "2024-09-01 21:43:51Z",
"justification": "This error is baselined with an expiration date of 180 days from 2024-03-15 21:43:51Z"
},
"5801a584cc6df8c732f18f7abc1b1ccf64ab2a6ddbb05f9bbdde8beb5a67fe3a": {
"signature": "5801a584cc6df8c732f18f7abc1b1ccf64ab2a6ddbb05f9bbdde8beb5a67fe3a",
"alternativeSignatures": [],
"target": "MicroBuild/Plugins/MicroBuild.Plugins.Signing.1.1.902/build/tools/dynamicsha2.pfx",
"line": 1,
"memberOf": [
"default"
],
"tool": "credscan",
"ruleId": "CSCAN-GENERAL0020",
"createdDate": "2024-03-15 21:10:36Z",
"expirationDate": "2024-09-01 21:43:51Z",
"justification": "This error is baselined with an expiration date of 180 days from 2024-03-15 21:43:51Z"
},
"cab715138e57370e027c311bdcfcd828aef2e813338eb9b6db44c222132dcc43": {
"signature": "cab715138e57370e027c311bdcfcd828aef2e813338eb9b6db44c222132dcc43",
"alternativeSignatures": [],
"target": "MicroBuild/Plugins/MicroBuild.Plugins.Signing.1.1.902/build/tools/testdlab.pfx",
"line": 1,
"memberOf": [
"default"
],
"tool": "credscan",
"ruleId": "CSCAN-GENERAL0020",
"createdDate": "2024-03-15 21:10:36Z",
"expirationDate": "2024-09-01 21:43:51Z",
"justification": "This error is baselined with an expiration date of 180 days from 2024-03-15 21:43:51Z"
},
"69fdade2005d4c82978110367d00ff0b563d127022c89cc13d9130ff08811249": {
"signature": "69fdade2005d4c82978110367d00ff0b563d127022c89cc13d9130ff08811249",
"alternativeSignatures": [],
"target": "MicroBuild/Plugins/MicroBuild.Plugins.Signing.1.1.902/build/tools/testdlabsha2.pfx",
"line": 1,
"memberOf": [
"default"
],
"tool": "credscan",
"ruleId": "CSCAN-GENERAL0020",
"createdDate": "2024-03-15 21:10:36Z",
"expirationDate": "2024-09-01 21:43:51Z",
"justification": "This error is baselined with an expiration date of 180 days from 2024-03-15 21:43:51Z"
},
"efe01799a8cef937301b58208e2b347b9f5c534d89815d9843d75be7b2e2fb43": {
"signature": "efe01799a8cef937301b58208e2b347b9f5c534d89815d9843d75be7b2e2fb43",
"alternativeSignatures": [],
"target": "MicroBuild/Plugins/MicroBuild.Plugins.Signing.1.1.902/build/tools/vsmsappx.pfx",
"line": 1,
"memberOf": [
"default"
],
"tool": "credscan",
"ruleId": "CSCAN-GENERAL0020",
"createdDate": "2024-03-15 21:10:36Z",
"expirationDate": "2024-09-01 21:43:51Z",
"justification": "This error is baselined with an expiration date of 180 days from 2024-03-15 21:43:51Z"
},
"f5eed94d081284181a2cd78b47b336ece0fcf2c0eafd462ffe6a88ff913d8184": {
"signature": "f5eed94d081284181a2cd78b47b336ece0fcf2c0eafd462ffe6a88ff913d8184",
"alternativeSignatures": [],
"target": "MicroBuild/Plugins/MicroBuild.Plugins.Signing.1.1.902/build/tools/WinBlue.pfx",
"line": 1,
"memberOf": [
"default"
],
"tool": "credscan",
"ruleId": "CSCAN-GENERAL0020",
"createdDate": "2024-03-15 21:10:36Z",
"expirationDate": "2024-09-01 21:43:51Z",
"justification": "This error is baselined with an expiration date of 180 days from 2024-03-15 21:43:51Z"
},
"3aa029a27ef41acb56bd41ac97412078144ad5e722c21c325333f3af37b51d8a": {
"signature": "3aa029a27ef41acb56bd41ac97412078144ad5e722c21c325333f3af37b51d8a",
"alternativeSignatures": [],
"target": "MicroBuild/Plugins/MicroBuild.Plugins.Signing.1.1.902/build/tools/WP223.pfx",
"line": 1,
"memberOf": [
"default"
],
"tool": "credscan",
"ruleId": "CSCAN-GENERAL0020",
"createdDate": "2024-03-15 21:10:36Z",
"expirationDate": "2024-09-01 21:43:51Z",
"justification": "This error is baselined with an expiration date of 180 days from 2024-03-15 21:43:51Z"
},
"624055be3115da111704bd2823e64fb78862b3650767e571aef8a9b7a127c6d8": {
"signature": "624055be3115da111704bd2823e64fb78862b3650767e571aef8a9b7a127c6d8",
"alternativeSignatures": [],
"target": "MicroBuild/Plugins/MicroBuild.Plugins.Signing.1.1.902/build/tools/MobileTools/7Sign/tcb.pfx",
"line": 1,
"memberOf": [
"default"
],
"tool": "credscan",
"ruleId": "CSCAN-GENERAL0020",
"createdDate": "2024-03-15 21:10:36Z",
"expirationDate": "2024-09-01 21:43:51Z",
"justification": "This error is baselined with an expiration date of 180 days from 2024-03-15 21:43:51Z"
},
"1d4ee8b341d5f1ef56c8e517759511e55556866f0a6fbabf23440798da1f05d5": {
"signature": "1d4ee8b341d5f1ef56c8e517759511e55556866f0a6fbabf23440798da1f05d5",
"alternativeSignatures": [],
"target": "MicroBuild/Plugins/nuget.config",
"line": 9,
"memberOf": [
"default"
],
"tool": "credscan",
"ruleId": "CSCAN-GENERAL0060",
"createdDate": "2024-03-15 21:10:23Z",
"expirationDate": "2024-09-01 21:43:51Z",
"justification": "This error is baselined with an expiration date of 180 days from 2024-03-15 21:43:51Z"
},
"4fdcce44747d67552fa68a352060f50d85431c0c7ea4215b395bdb360db739a7": {
"signature": "4fdcce44747d67552fa68a352060f50d85431c0c7ea4215b395bdb360db739a7",
"alternativeSignatures": [],
"target": "MicroBuild/Plugins/nuget.config",
"line": 9,
"memberOf": [
"default"
],
"tool": "credscan",
"ruleId": "CSCAN-GENERAL0060",
"createdDate": "2024-03-15 21:10:36Z",
"expirationDate": "2024-09-01 21:43:51Z",
"justification": "This error is baselined with an expiration date of 180 days from 2024-03-15 21:43:51Z"
},
"62685d821fc38b8db7ddb0a07decba2a1be29c26ce13b5cb75fcc123ad048783": {
"signature": "62685d821fc38b8db7ddb0a07decba2a1be29c26ce13b5cb75fcc123ad048783",
"alternativeSignatures": [],
"target": "MicroBuild/Plugins/nuget.config",
"line": 9,
"memberOf": [
"default"
],
"tool": "credscan",
"ruleId": "CSCAN-GENERAL0060",
"createdDate": "2024-03-15 21:10:55Z",
"expirationDate": "2024-09-01 21:43:51Z",
"justification": "This error is baselined with an expiration date of 180 days from 2024-03-15 21:43:51Z"
},
"0ecc3cb201b58b5026eef9239d3a888de6188f974948d8c2d76ea5f22dd12fd2": {
"signature": "0ecc3cb201b58b5026eef9239d3a888de6188f974948d8c2d76ea5f22dd12fd2",
"alternativeSignatures": [],
"target": "MicroBuild/Plugins/nuget.config",
"line": 9,
"memberOf": [
"default"
],
"tool": "credscan",
"ruleId": "CSCAN-GENERAL0060",
"createdDate": "2024-03-15 21:10:23Z",
"expirationDate": "2024-09-01 21:43:51Z",
"justification": "This error is baselined with an expiration date of 180 days from 2024-03-15 21:43:51Z"
},
"e4e0934b769d92960066e0db46b39bcb24f69fb478779b630d2d8581f384a95c": {
"signature": "e4e0934b769d92960066e0db46b39bcb24f69fb478779b630d2d8581f384a95c",
"alternativeSignatures": [],
"target": "MicroBuild/Plugins/nuget.config",
"line": 9,
"memberOf": [
"default"
],
"tool": "credscan",
"ruleId": "CSCAN-GENERAL0060",
"createdDate": "2024-03-15 21:10:36Z",
"expirationDate": "2024-09-01 21:43:51Z",
"justification": "This error is baselined with an expiration date of 180 days from 2024-03-15 21:43:51Z"
}
}
}

View file

@ -27,4 +27,4 @@ vmr_branch=$(git -C "$installer_dir" log --pretty=format:'%D' HEAD^ \
"$workspace_dir/synchronize-vmr.sh" --branch "$vmr_branch" --debug "$workspace_dir/synchronize-vmr.sh" --branch "$vmr_branch" --debug
(cd "$vmr_dir" && ./prep.sh) (cd "$vmr_dir" && ./prep-source-build.sh)

View file

@ -1,3 +1,5 @@
# Pipeline: https://dnceng.visualstudio.com/internal/_build?definitionId=286
trigger: trigger:
batch: true batch: true
branches: branches:
@ -23,43 +25,79 @@ variables:
- group: DotNet-Installer-SDLValidation-Params - group: DotNet-Installer-SDLValidation-Params
- name: _PublishUsingPipelines - name: _PublishUsingPipelines
value: true value: true
- name: _InternalRuntimeDownloadArgs - name: _InternalRuntimeDownloadArgs
value: '' value: ''
- ${{ if eq(variables['System.TeamProject'], 'internal') }}: - ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- group: DotNetBuilds storage account read tokens - group: DotNetBuilds storage account read tokens
- name: _InternalRuntimeDownloadArgs - name: _InternalRuntimeDownloadArgs
value: /p:DotNetRuntimeSourceFeed=https://dotnetbuilds.blob.core.windows.net/internal value: /p:DotNetRuntimeSourceFeed=https://dotnetbuilds.blob.core.windows.net/internal
/p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64)
/p:dotnetbuilds-internal-container-read-token-base64=$(dotnetbuilds-internal-container-read-token-base64) /p:dotnetbuilds-internal-container-read-token-base64=$(dotnetbuilds-internal-container-read-token-base64)
- template: /eng/common/templates-official/variables/pool-providers.yml
# Set the MicroBuild plugin installation directory to the agent temp directory to avoid SDL tool scanning.
- name: MicroBuildOutputFolderOverride
value: $(Agent.TempDirectory)
- template: /eng/common/templates/variables/pool-providers.yml resources:
repositories:
- repository: 1esPipelines
type: git
name: 1ESPipelineTemplates/1ESPipelineTemplates
ref: refs/tags/release
extends:
${{ if notin(variables['Build.Reason'], 'PullRequest') }}:
template: v1/1ES.Official.PipelineTemplate.yml@1esPipelines
${{ else }}:
template: v1/1ES.Unofficial.PipelineTemplate.yml@1esPipelines
parameters:
containers:
alpine319WithNode:
image: mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.19-WithNode
cblMariner20Fpm:
image: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-fpm
centosStream8:
image: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8
debian11Amd64:
image: mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-amd64
fedora39:
image: mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-39
ubuntu2204:
image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04
ubuntu2204CrossArmAlpine:
image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-cross-arm-alpine
ubuntu2204DebPkg:
image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-debpkg
sdl:
sourceAnalysisPool:
name: $(DncEngInternalBuildPool)
image: 1es-windows-2022
os: windows
stages: stages:
- stage: Build - stage: Build
jobs: jobs:
# This job is for build retry configuration. # Build Retry Configuration
- job: Publish_Build_Configuration - job: Publish_Build_Configuration
pool: pool:
${{ if eq(variables['System.TeamProject'], 'public') }}: ${{ if eq(variables['System.TeamProject'], 'public') }}:
name: $(DncEngPublicBuildPool) name: $(DncEngPublicBuildPool)
demands: ImageOverride -equals windows.vs2022preview.amd64.open image: 1es-windows-2022-open
os: windows
${{ if eq(variables['System.TeamProject'], 'internal') }}: ${{ if eq(variables['System.TeamProject'], 'internal') }}:
name: $(DncEngInternalBuildPool) name: $(DncEngInternalBuildPool)
demands: ImageOverride -equals windows.vs2022preview.amd64 image: 1es-windows-2022
os: windows
steps: steps:
- publish: $(Build.SourcesDirectory)\eng\buildConfiguration - task: 1ES.PublishPipelineArtifact@1
artifact: buildConfiguration
displayName: Publish Build Config displayName: Publish Build Config
inputs:
targetPath: $(Build.SourcesDirectory)\eng\buildConfiguration
artifactName: buildConfiguration
## PR-only jobs # PR-only jobs
- ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}: - ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
# Windows
## Windows - template: eng/build.yml@self
- template: eng/build.yml
parameters: parameters:
agentOs: Windows_NT agentOs: Windows_NT
jobName: Build_Debug_x64 jobName: Build_Debug_x64
@ -68,46 +106,45 @@ stages:
additionalBuildParameters: '/p:PublishInternalAsset=true' additionalBuildParameters: '/p:PublishInternalAsset=true'
runTests: true runTests: true
## Linux # Linux
- template: eng/build.yml@self
- template: eng/build.yml
parameters: parameters:
agentOs: Linux agentOs: Linux
jobName: Build_Ubuntu_22_04_Debug_x64 jobName: Build_Ubuntu_22_04_Debug_x64
container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04' container: ubuntu2204
buildConfiguration: Debug buildConfiguration: Debug
buildArchitecture: x64 buildArchitecture: x64
linuxPortable: true linuxPortable: true
runTests: true runTests: true
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Linux agentOs: Linux
jobName: Build_Fedora_39_Debug_x64 jobName: Build_Fedora_39_Debug_x64
container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-39' container: fedora39
buildConfiguration: Debug buildConfiguration: Debug
buildArchitecture: x64 buildArchitecture: x64
linuxPortable: true linuxPortable: true
runTests: true runTests: true
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Linux agentOs: Linux
jobName: Build_CentOS_8_Stream_Debug_x64 jobName: Build_CentOS_8_Stream_Debug_x64
container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8' container: centosStream8
buildConfiguration: Debug buildConfiguration: Debug
buildArchitecture: x64 buildArchitecture: x64
linuxPortable: false linuxPortable: false
runTests: true runTests: true
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Linux agentOs: Linux
jobName: Build_Debian_11_Debug_x64 jobName: Build_Debian_11_Debug_x64
container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-amd64' container: debian11Amd64
buildConfiguration: Debug buildConfiguration: Debug
buildArchitecture: x64 buildArchitecture: x64
additionalBuildParameters: '/p:BuildSdkDeb=true' additionalBuildParameters: '/p:BuildSdkDeb=true'
linuxPortable: false linuxPortable: false
runTests: true runTests: true
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Linux agentOs: Linux
jobName: Build_Arm64_Debug jobName: Build_Arm64_Debug
@ -117,11 +154,11 @@ stages:
linuxPortable: true linuxPortable: true
# Never run tests on arm64 # Never run tests on arm64
runTests: false runTests: false
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Linux agentOs: Linux
jobName: Build_Linux_musl_Debug_x64 jobName: Build_Linux_musl_Debug_x64
container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.19-WithNode' container: alpine319WithNode
buildConfiguration: Debug buildConfiguration: Debug
buildArchitecture: x64 buildArchitecture: x64
runtimeIdentifier: 'linux-musl-x64' runtimeIdentifier: 'linux-musl-x64'
@ -129,7 +166,7 @@ stages:
additionalBuildParameters: '/p:HostOSName="linux-musl"' additionalBuildParameters: '/p:HostOSName="linux-musl"'
linuxPortable: false linuxPortable: false
runTests: true runTests: true
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Linux agentOs: Linux
jobName: Build_LinuxPortable_Release_x64 jobName: Build_LinuxPortable_Release_x64
@ -139,8 +176,7 @@ stages:
runTests: true runTests: true
# MacOS # MacOS
- template: eng/build.yml@self
- template: eng/build.yml
parameters: parameters:
agentOs: Darwin agentOs: Darwin
jobName: Build_Release_x64 jobName: Build_Release_x64
@ -148,13 +184,10 @@ stages:
buildArchitecture: x64 buildArchitecture: x64
runTests: true runTests: true
## Official/PGO instrumentation Builds # Official/PGO instrumentation Builds
- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
# Windows
## Windows - template: eng/build.yml@self
- template: eng/build.yml
parameters: parameters:
agentOs: Windows_NT agentOs: Windows_NT
jobName: Build_Release_x64 jobName: Build_Release_x64
@ -162,14 +195,14 @@ stages:
buildArchitecture: x64 buildArchitecture: x64
additionalBuildParameters: '/p:PublishInternalAsset=true' additionalBuildParameters: '/p:PublishInternalAsset=true'
runTests: false runTests: false
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Windows_NT agentOs: Windows_NT
jobName: Build_Release_x86 jobName: Build_Release_x86
buildConfiguration: Release buildConfiguration: Release
buildArchitecture: x86 buildArchitecture: x86
runTests: false runTests: false
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Windows_NT agentOs: Windows_NT
jobName: Build_Release_arm64 jobName: Build_Release_arm64
@ -177,9 +210,8 @@ stages:
buildArchitecture: arm64 buildArchitecture: arm64
runTests: false runTests: false
## Linux # Linux
- template: eng/build.yml@self
- template: eng/build.yml
parameters: parameters:
agentOs: Linux agentOs: Linux
jobName: Build_Arm_Release jobName: Build_Arm_Release
@ -188,7 +220,7 @@ stages:
runtimeIdentifier: 'linux-arm' runtimeIdentifier: 'linux-arm'
linuxPortable: true linuxPortable: true
runTests: false runTests: false
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Linux agentOs: Linux
jobName: Build_Arm64_Release jobName: Build_Arm64_Release
@ -197,18 +229,18 @@ stages:
runtimeIdentifier: 'linux-arm64' runtimeIdentifier: 'linux-arm64'
linuxPortable: true linuxPortable: true
runTests: false runTests: false
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Linux agentOs: Linux
jobName: Build_Linux_musl_Release_arm jobName: Build_Linux_musl_Release_arm
container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-cross-arm-alpine' container: ubuntu2204CrossArmAlpine
buildConfiguration: Release buildConfiguration: Release
buildArchitecture: arm buildArchitecture: arm
runtimeIdentifier: 'linux-musl-arm' runtimeIdentifier: 'linux-musl-arm'
additionalBuildParameters: '/p:OSName="linux-musl"' additionalBuildParameters: '/p:OSName="linux-musl"'
linuxPortable: false linuxPortable: false
runTests: false runTests: false
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Linux agentOs: Linux
jobName: Build_Linux_musl_Release_arm64 jobName: Build_Linux_musl_Release_arm64
@ -218,11 +250,11 @@ stages:
additionalBuildParameters: '/p:OSName="linux-musl"' additionalBuildParameters: '/p:OSName="linux-musl"'
linuxPortable: false linuxPortable: false
runTests: false runTests: false
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Linux agentOs: Linux
jobName: Build_Linux_musl_Release_x64 jobName: Build_Linux_musl_Release_x64
container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.19-WithNode' container: alpine319WithNode
buildConfiguration: Release buildConfiguration: Release
buildArchitecture: x64 buildArchitecture: x64
runtimeIdentifier: 'linux-musl-x64' runtimeIdentifier: 'linux-musl-x64'
@ -230,11 +262,11 @@ stages:
additionalBuildParameters: '/p:HostOSName="linux-musl"' additionalBuildParameters: '/p:HostOSName="linux-musl"'
linuxPortable: false linuxPortable: false
runTests: false runTests: false
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Linux agentOs: Linux
jobName: Build_Linux_Portable_Deb_Release_x64 jobName: Build_Linux_Portable_Deb_Release_x64
container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-debpkg' container: ubuntu2204DebPkg
buildConfiguration: Release buildConfiguration: Release
buildArchitecture: x64 buildArchitecture: x64
# Do not publish zips and tarballs. The linux-x64 binaries are # Do not publish zips and tarballs. The linux-x64 binaries are
@ -242,11 +274,11 @@ stages:
additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:BuildSdkDeb=true' additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:BuildSdkDeb=true'
linuxPortable: true linuxPortable: true
runTests: false runTests: false
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Linux agentOs: Linux
jobName: Build_Linux_Portable_Rpm_Release_x64 jobName: Build_Linux_Portable_Rpm_Release_x64
container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-fpm' container: cblMariner20Fpm
buildConfiguration: Release buildConfiguration: Release
buildArchitecture: x64 buildArchitecture: x64
# Do not publish zips and tarballs. The linux-x64 binaries are # Do not publish zips and tarballs. The linux-x64 binaries are
@ -254,11 +286,11 @@ stages:
additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:IsRPMBasedDistro=true' additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:IsRPMBasedDistro=true'
linuxPortable: true linuxPortable: true
runTests: false runTests: false
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Linux agentOs: Linux
jobName: Build_Linux_Portable_Rpm_Release_Arm64 jobName: Build_Linux_Portable_Rpm_Release_Arm64
container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-fpm' container: cblMariner20Fpm
buildConfiguration: Release buildConfiguration: Release
buildArchitecture: arm64 buildArchitecture: arm64
runtimeIdentifier: 'linux-arm64' runtimeIdentifier: 'linux-arm64'
@ -267,7 +299,7 @@ stages:
additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:CLIBUILD_SKIP_TESTS=true /p:IsRPMBasedDistro=true' additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:CLIBUILD_SKIP_TESTS=true /p:IsRPMBasedDistro=true'
linuxPortable: true linuxPortable: true
runTests: false runTests: false
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Linux agentOs: Linux
jobName: Build_LinuxPortable_Release_x64 jobName: Build_LinuxPortable_Release_x64
@ -277,15 +309,14 @@ stages:
runTests: false runTests: false
# MacOS # MacOS
- template: eng/build.yml@self
- template: eng/build.yml
parameters: parameters:
agentOs: Darwin agentOs: Darwin
jobName: Build_Release_x64 jobName: Build_Release_x64
buildConfiguration: Release buildConfiguration: Release
buildArchitecture: x64 buildArchitecture: x64
runTests: false runTests: false
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Darwin agentOs: Darwin
jobName: Build_Release_arm64 jobName: Build_Release_arm64
@ -294,9 +325,8 @@ stages:
buildArchitecture: arm64 buildArchitecture: arm64
runTests: false runTests: false
## Windows PGO Instrumentation builds # Windows PGO Instrumentation
- template: eng/build.yml@self
- template: eng/build.yml
parameters: parameters:
agentOs: Windows_NT agentOs: Windows_NT
pgoInstrument: true pgoInstrument: true
@ -305,7 +335,7 @@ stages:
buildArchitecture: x64 buildArchitecture: x64
additionalBuildParameters: '/p:PublishInternalAsset=true' additionalBuildParameters: '/p:PublishInternalAsset=true'
runTests: false runTests: false
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Windows_NT agentOs: Windows_NT
pgoInstrument: true pgoInstrument: true
@ -313,7 +343,7 @@ stages:
buildConfiguration: Release buildConfiguration: Release
buildArchitecture: x86 buildArchitecture: x86
runTests: false runTests: false
- template: eng/build.yml - template: eng/build.yml@self
parameters: parameters:
agentOs: Windows_NT agentOs: Windows_NT
pgoInstrument: true pgoInstrument: true
@ -322,9 +352,8 @@ stages:
buildArchitecture: arm64 buildArchitecture: arm64
runTests: false runTests: false
## Linux PGO Instrumentation builds # Linux PGO Instrumentation
- template: eng/build.yml@self
- template: eng/build.yml
parameters: parameters:
agentOs: Linux agentOs: Linux
pgoInstrument: true pgoInstrument: true
@ -333,8 +362,7 @@ stages:
buildArchitecture: x64 buildArchitecture: x64
linuxPortable: true linuxPortable: true
runTests: false runTests: false
- template: eng/build.yml@self
- template: eng/build.yml
parameters: parameters:
agentOs: Linux agentOs: Linux
pgoInstrument: true pgoInstrument: true
@ -344,18 +372,19 @@ stages:
linuxPortable: true linuxPortable: true
runTests: false runTests: false
- template: /eng/common/templates/jobs/source-build.yml # Source Build
- template: /eng/common/templates-official/jobs/source-build.yml@self
- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- stage: Publish - stage: Publish
dependsOn: dependsOn:
- Build - Build
jobs: jobs:
- template: /eng/common/templates/job/publish-build-assets.yml - template: /eng/common/templates-official/job/publish-build-assets.yml@self
parameters: parameters:
publishUsingPipelines: true publishUsingPipelines: true
publishAssetsImmediately: true publishAssetsImmediately: true
pool: pool:
${{ if eq(variables['System.TeamProject'], 'internal') }}:
name: $(DncEngInternalBuildPool) name: $(DncEngInternalBuildPool)
demands: ImageOverride -equals windows.vs2022.amd64 image: 1es-windows-2022
os: windows

363
.vsts-pr.yml Normal file
View file

@ -0,0 +1,363 @@
# Pipeline: https://dev.azure.com/dnceng-public/public/_build?definitionId=20
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-pr.yml
parameters:
agentOs: Windows_NT
jobName: Build_Debug_x64
buildConfiguration: Debug
buildArchitecture: x64
additionalBuildParameters: '/p:PublishInternalAsset=true'
runTests: true
## Linux
- template: eng/build-pr.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-pr.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-pr.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-pr.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-pr.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-pr.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-pr.yml
parameters:
agentOs: Linux
jobName: Build_LinuxPortable_Release_x64
buildConfiguration: Release
buildArchitecture: x64
linuxPortable: true
runTests: true
# MacOS
- template: eng/build-pr.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-pr.yml
parameters:
agentOs: Windows_NT
jobName: Build_Release_x64
buildConfiguration: Release
buildArchitecture: x64
additionalBuildParameters: '/p:PublishInternalAsset=true'
runTests: false
- template: eng/build-pr.yml
parameters:
agentOs: Windows_NT
jobName: Build_Release_x86
buildConfiguration: Release
buildArchitecture: x86
runTests: false
- template: eng/build-pr.yml
parameters:
agentOs: Windows_NT
jobName: Build_Release_arm64
buildConfiguration: Release
buildArchitecture: arm64
runTests: false
## Linux
- template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_Arm_Release
buildConfiguration: Release
buildArchitecture: arm
runtimeIdentifier: 'linux-arm'
linuxPortable: true
runTests: false
- template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_Arm64_Release
buildConfiguration: Release
buildArchitecture: arm64
runtimeIdentifier: 'linux-arm64'
linuxPortable: true
runTests: false
- template: eng/build-pr.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-pr.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-pr.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-pr.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-pr.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-pr.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-pr.yml
parameters:
agentOs: Linux
jobName: Build_LinuxPortable_Release_x64
buildConfiguration: Release
buildArchitecture: x64
linuxPortable: true
runTests: false
# MacOS
- template: eng/build-pr.yml
parameters:
agentOs: Darwin
jobName: Build_Release_x64
buildConfiguration: Release
buildArchitecture: x64
runTests: false
- template: eng/build-pr.yml
parameters:
agentOs: Darwin
jobName: Build_Release_arm64
runtimeIdentifier: 'osx-arm64'
buildConfiguration: Release
buildArchitecture: arm64
runTests: false
## Windows PGO Instrumentation builds
- template: eng/build-pr.yml
parameters:
agentOs: Windows_NT
pgoInstrument: true
jobName: Build_Release_x64
buildConfiguration: Release
buildArchitecture: x64
additionalBuildParameters: '/p:PublishInternalAsset=true'
runTests: false
- template: eng/build-pr.yml
parameters:
agentOs: Windows_NT
pgoInstrument: true
jobName: Build_Release_x86
buildConfiguration: Release
buildArchitecture: x86
runTests: false
- template: eng/build-pr.yml
parameters:
agentOs: Windows_NT
pgoInstrument: true
jobName: Build_Release_arm64
buildConfiguration: Release
buildArchitecture: arm64
runTests: false
## Linux PGO Instrumentation builds
- template: eng/build-pr.yml
parameters:
agentOs: Linux
pgoInstrument: true
jobName: Build_LinuxPortable_Release_x64
buildConfiguration: Release
buildArchitecture: x64
linuxPortable: true
runTests: false
- template: eng/build-pr.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

View file

@ -4,5 +4,5 @@
/.devcontainer/ @dotnet/source-build-internal /.devcontainer/ @dotnet/source-build-internal
/eng/SourceBuild* @dotnet/source-build-internal /eng/SourceBuild* @dotnet/source-build-internal
/src/snaps/ @rbhanda /src/snaps/ @rbhanda
/src/SourceBuild/ @dotnet/source-build-internal /src/SourceBuild/ @dotnet/source-build-internal @dotnet/product-construction
/src/VirtualMonoRepo/ @dotnet/product-construction /src/VirtualMonoRepo/ @dotnet/product-construction

View file

@ -14,7 +14,6 @@
<add key="dotnet-tools" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" /> <add key="dotnet-tools" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" />
<add key="dotnet-eng" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json" /> <add key="dotnet-eng" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json" />
<add key="dotnet-public" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json" /> <add key="dotnet-public" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json" />
<add key="dotnet-eol-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eol-transport/nuget/v3/index.json" />
<add key="dotnet6" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json" /> <add key="dotnet6" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json" />
<add key="dotnet6-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6-transport/nuget/v3/index.json" /> <add key="dotnet6-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6-transport/nuget/v3/index.json" />
<add key="dotnet7" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet7/nuget/v3/index.json" /> <add key="dotnet7" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet7/nuget/v3/index.json" />

157
README.md
View file

@ -170,22 +170,21 @@ Do not directly edit the table below. Use https://github.com/dotnet/installer/tr
### Table ### Table
Use 'dotnet --help' to see available commands or visit: https://aka.ms/dotnet-cli
-------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------
| Platform | main<br>(9.0.x&nbsp;Runtime) | 9.0.1xx-preview1<br>(9.0-preview1&nbsp;Runtime) | 8.0.3xx<br>(8.0&nbsp;Runtime) | Release/7.0.4xx<br>(7.0.x&nbsp;Runtime) | | Platform | main<br>(9.0.x&nbsp;Runtime) | 9.0.1xx-preview3<br>(9.0-preview3&nbsp;Runtime) | 8.0.3xx<br>(8.0&nbsp;Runtime) | Release/7.0.4xx<br>(7.0.x&nbsp;Runtime) |
| :--------- | :----------: | :----------: | :----------: | :----------: | | :--------- | :----------: | :----------: | :----------: | :----------: |
| **Windows x64** | [![][win-x64-badge-main]][win-x64-version-main]<br>[Installer][win-x64-installer-main] - [Checksum][win-x64-installer-checksum-main]<br>[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]<br>[Installer][win-x64-installer-9.0.1XX-preview1] - [Checksum][win-x64-installer-checksum-9.0.1XX-preview1]<br>[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]<br>[Installer][win-x64-installer-8.0.3XX] - [Checksum][win-x64-installer-checksum-8.0.3XX]<br>[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]<br>[Installer][win-x64-installer-7.0.4XX] - [Checksum][win-x64-installer-checksum-7.0.4XX]<br>[zip][win-x64-zip-7.0.4XX] - [Checksum][win-x64-zip-checksum-7.0.4XX] | | **Windows x64** | [![][win-x64-badge-main]][win-x64-version-main]<br>[Installer][win-x64-installer-main] - [Checksum][win-x64-installer-checksum-main]<br>[zip][win-x64-zip-main] - [Checksum][win-x64-zip-checksum-main] | [![][win-x64-badge-9.0.1XX-preview3]][win-x64-version-9.0.1XX-preview3]<br>[Installer][win-x64-installer-9.0.1XX-preview3] - [Checksum][win-x64-installer-checksum-9.0.1XX-preview3]<br>[zip][win-x64-zip-9.0.1XX-preview3] - [Checksum][win-x64-zip-checksum-9.0.1XX-preview3] | [![][win-x64-badge-8.0.3XX]][win-x64-version-8.0.3XX]<br>[Installer][win-x64-installer-8.0.3XX] - [Checksum][win-x64-installer-checksum-8.0.3XX]<br>[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]<br>[Installer][win-x64-installer-7.0.4XX] - [Checksum][win-x64-installer-checksum-7.0.4XX]<br>[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]<br>[Installer][win-x86-installer-main] - [Checksum][win-x86-installer-checksum-main]<br>[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]<br>[Installer][win-x86-installer-9.0.1XX-preview1] - [Checksum][win-x86-installer-checksum-9.0.1XX-preview1]<br>[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]<br>[Installer][win-x86-installer-8.0.3XX] - [Checksum][win-x86-installer-checksum-8.0.3XX]<br>[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]<br>[Installer][win-x86-installer-7.0.4XX] - [Checksum][win-x86-installer-checksum-7.0.4XX]<br>[zip][win-x86-zip-7.0.4XX] - [Checksum][win-x86-zip-checksum-7.0.4XX] | | **Windows x86** | [![][win-x86-badge-main]][win-x86-version-main]<br>[Installer][win-x86-installer-main] - [Checksum][win-x86-installer-checksum-main]<br>[zip][win-x86-zip-main] - [Checksum][win-x86-zip-checksum-main] | [![][win-x86-badge-9.0.1XX-preview3]][win-x86-version-9.0.1XX-preview3]<br>[Installer][win-x86-installer-9.0.1XX-preview3] - [Checksum][win-x86-installer-checksum-9.0.1XX-preview3]<br>[zip][win-x86-zip-9.0.1XX-preview3] - [Checksum][win-x86-zip-checksum-9.0.1XX-preview3] | [![][win-x86-badge-8.0.3XX]][win-x86-version-8.0.3XX]<br>[Installer][win-x86-installer-8.0.3XX] - [Checksum][win-x86-installer-checksum-8.0.3XX]<br>[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]<br>[Installer][win-x86-installer-7.0.4XX] - [Checksum][win-x86-installer-checksum-7.0.4XX]<br>[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 arm** | **N/A** | **N/A** | **N/A** | **N/A** |
| **Windows arm64** | [![][win-arm64-badge-main]][win-arm64-version-main]<br>[Installer][win-arm64-installer-main] - [Checksum][win-arm64-installer-checksum-main]<br>[zip][win-arm64-zip-main] | [![][win-arm64-badge-9.0.1XX-preview1]][win-arm64-version-9.0.1XX-preview1]<br>[Installer][win-arm64-installer-9.0.1XX-preview1] - [Checksum][win-arm64-installer-checksum-9.0.1XX-preview1]<br>[zip][win-arm64-zip-9.0.1XX-preview1] | [![][win-arm64-badge-8.0.3XX]][win-arm64-version-8.0.3XX]<br>[Installer][win-arm64-installer-8.0.3XX] - [Checksum][win-arm64-installer-checksum-8.0.3XX]<br>[zip][win-arm64-zip-8.0.3XX] | [![][win-arm64-badge-7.0.4XX]][win-arm64-version-7.0.4XX]<br>[Installer][win-arm64-installer-7.0.4XX] - [Checksum][win-arm64-installer-checksum-7.0.4XX]<br>[zip][win-arm64-zip-7.0.4XX] | | **Windows arm64** | [![][win-arm64-badge-main]][win-arm64-version-main]<br>[Installer][win-arm64-installer-main] - [Checksum][win-arm64-installer-checksum-main]<br>[zip][win-arm64-zip-main] | [![][win-arm64-badge-9.0.1XX-preview3]][win-arm64-version-9.0.1XX-preview3]<br>[Installer][win-arm64-installer-9.0.1XX-preview3] - [Checksum][win-arm64-installer-checksum-9.0.1XX-preview3]<br>[zip][win-arm64-zip-9.0.1XX-preview3] | [![][win-arm64-badge-8.0.3XX]][win-arm64-version-8.0.3XX]<br>[Installer][win-arm64-installer-8.0.3XX] - [Checksum][win-arm64-installer-checksum-8.0.3XX]<br>[zip][win-arm64-zip-8.0.3XX] | [![][win-arm64-badge-7.0.4XX]][win-arm64-version-7.0.4XX]<br>[Installer][win-arm64-installer-7.0.4XX] - [Checksum][win-arm64-installer-checksum-7.0.4XX]<br>[zip][win-arm64-zip-7.0.4XX] |
| **macOS x64** | [![][osx-x64-badge-main]][osx-x64-version-main]<br>[Installer][osx-x64-installer-main] - [Checksum][osx-x64-installer-checksum-main]<br>[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]<br>[Installer][osx-x64-installer-9.0.1XX-preview1] - [Checksum][osx-x64-installer-checksum-9.0.1XX-preview1]<br>[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]<br>[Installer][osx-x64-installer-8.0.3XX] - [Checksum][osx-x64-installer-checksum-8.0.3XX]<br>[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]<br>[Installer][osx-x64-installer-7.0.4XX] - [Checksum][osx-x64-installer-checksum-7.0.4XX]<br>[tar.gz][osx-x64-targz-7.0.4XX] - [Checksum][osx-x64-targz-checksum-7.0.4XX] | | **macOS x64** | [![][osx-x64-badge-main]][osx-x64-version-main]<br>[Installer][osx-x64-installer-main] - [Checksum][osx-x64-installer-checksum-main]<br>[tar.gz][osx-x64-targz-main] - [Checksum][osx-x64-targz-checksum-main] | [![][osx-x64-badge-9.0.1XX-preview3]][osx-x64-version-9.0.1XX-preview3]<br>[Installer][osx-x64-installer-9.0.1XX-preview3] - [Checksum][osx-x64-installer-checksum-9.0.1XX-preview3]<br>[tar.gz][osx-x64-targz-9.0.1XX-preview3] - [Checksum][osx-x64-targz-checksum-9.0.1XX-preview3] | [![][osx-x64-badge-8.0.3XX]][osx-x64-version-8.0.3XX]<br>[Installer][osx-x64-installer-8.0.3XX] - [Checksum][osx-x64-installer-checksum-8.0.3XX]<br>[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]<br>[Installer][osx-x64-installer-7.0.4XX] - [Checksum][osx-x64-installer-checksum-7.0.4XX]<br>[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]<br>[Installer][osx-arm64-installer-main] - [Checksum][osx-arm64-installer-checksum-main]<br>[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]<br>[Installer][osx-arm64-installer-9.0.1XX-preview1] - [Checksum][osx-arm64-installer-checksum-9.0.1XX-preview1]<br>[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]<br>[Installer][osx-arm64-installer-8.0.3XX] - [Checksum][osx-arm64-installer-checksum-8.0.3XX]<br>[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]<br>[Installer][osx-arm64-installer-7.0.4XX] - [Checksum][osx-arm64-installer-checksum-7.0.4XX]<br>[tar.gz][osx-arm64-targz-7.0.4XX] - [Checksum][osx-arm64-targz-checksum-7.0.4XX] | | **macOS arm64** | [![][osx-arm64-badge-main]][osx-arm64-version-main]<br>[Installer][osx-arm64-installer-main] - [Checksum][osx-arm64-installer-checksum-main]<br>[tar.gz][osx-arm64-targz-main] - [Checksum][osx-arm64-targz-checksum-main] | [![][osx-arm64-badge-9.0.1XX-preview3]][osx-arm64-version-9.0.1XX-preview3]<br>[Installer][osx-arm64-installer-9.0.1XX-preview3] - [Checksum][osx-arm64-installer-checksum-9.0.1XX-preview3]<br>[tar.gz][osx-arm64-targz-9.0.1XX-preview3] - [Checksum][osx-arm64-targz-checksum-9.0.1XX-preview3] | [![][osx-arm64-badge-8.0.3XX]][osx-arm64-version-8.0.3XX]<br>[Installer][osx-arm64-installer-8.0.3XX] - [Checksum][osx-arm64-installer-checksum-8.0.3XX]<br>[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]<br>[Installer][osx-arm64-installer-7.0.4XX] - [Checksum][osx-arm64-installer-checksum-7.0.4XX]<br>[tar.gz][osx-arm64-targz-7.0.4XX] - [Checksum][osx-arm64-targz-checksum-7.0.4XX] |
| **Linux x64** | [![][linux-badge-main]][linux-version-main]<br>[DEB Installer][linux-DEB-installer-main] - [Checksum][linux-DEB-installer-checksum-main]<br>[RPM Installer][linux-RPM-installer-main] - [Checksum][linux-RPM-installer-checksum-main]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-main] - [Checksum][linux-targz-checksum-main] | [![][linux-badge-9.0.1XX-preview1]][linux-version-9.0.1XX-preview1]<br>[DEB Installer][linux-DEB-installer-9.0.1XX-preview1] - [Checksum][linux-DEB-installer-checksum-9.0.1XX-preview1]<br>[RPM Installer][linux-RPM-installer-9.0.1XX-preview1] - [Checksum][linux-RPM-installer-checksum-9.0.1XX-preview1]<br>_see installer note below_<sup>1</sup><br>[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]<br>[DEB Installer][linux-DEB-installer-8.0.3XX] - [Checksum][linux-DEB-installer-checksum-8.0.3XX]<br>[RPM Installer][linux-RPM-installer-8.0.3XX] - [Checksum][linux-RPM-installer-checksum-8.0.3XX]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-8.0.3XX] - [Checksum][linux-targz-checksum-8.0.3XX] | [![][linux-badge-7.0.4XX]][linux-version-7.0.4XX]<br>[DEB Installer][linux-DEB-installer-7.0.4XX] - [Checksum][linux-DEB-installer-checksum-7.0.4XX]<br>[RPM Installer][linux-RPM-installer-7.0.4XX] - [Checksum][linux-RPM-installer-checksum-7.0.4XX]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-7.0.4XX] - [Checksum][linux-targz-checksum-7.0.4XX] | | **Linux x64** | [![][linux-badge-main]][linux-version-main]<br>[DEB Installer][linux-DEB-installer-main] - [Checksum][linux-DEB-installer-checksum-main]<br>[RPM Installer][linux-RPM-installer-main] - [Checksum][linux-RPM-installer-checksum-main]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-main] - [Checksum][linux-targz-checksum-main] | [![][linux-badge-9.0.1XX-preview3]][linux-version-9.0.1XX-preview3]<br>[DEB Installer][linux-DEB-installer-9.0.1XX-preview3] - [Checksum][linux-DEB-installer-checksum-9.0.1XX-preview3]<br>[RPM Installer][linux-RPM-installer-9.0.1XX-preview3] - [Checksum][linux-RPM-installer-checksum-9.0.1XX-preview3]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-9.0.1XX-preview3] - [Checksum][linux-targz-checksum-9.0.1XX-preview3] | [![][linux-badge-8.0.3XX]][linux-version-8.0.3XX]<br>[DEB Installer][linux-DEB-installer-8.0.3XX] - [Checksum][linux-DEB-installer-checksum-8.0.3XX]<br>[RPM Installer][linux-RPM-installer-8.0.3XX] - [Checksum][linux-RPM-installer-checksum-8.0.3XX]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-8.0.3XX] - [Checksum][linux-targz-checksum-8.0.3XX] | [![][linux-badge-7.0.4XX]][linux-version-7.0.4XX]<br>[DEB Installer][linux-DEB-installer-7.0.4XX] - [Checksum][linux-DEB-installer-checksum-7.0.4XX]<br>[RPM Installer][linux-RPM-installer-7.0.4XX] - [Checksum][linux-RPM-installer-checksum-7.0.4XX]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-7.0.4XX] - [Checksum][linux-targz-checksum-7.0.4XX] |
| **Linux arm** | [![][linux-arm-badge-main]][linux-arm-version-main]<br>[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]<br>[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]<br>[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]<br>[tar.gz][linux-arm-targz-7.0.4XX] - [Checksum][linux-arm-targz-checksum-7.0.4XX] | | **Linux arm** | [![][linux-arm-badge-main]][linux-arm-version-main]<br>[tar.gz][linux-arm-targz-main] - [Checksum][linux-arm-targz-checksum-main] | [![][linux-arm-badge-9.0.1XX-preview3]][linux-arm-version-9.0.1XX-preview3]<br>[tar.gz][linux-arm-targz-9.0.1XX-preview3] - [Checksum][linux-arm-targz-checksum-9.0.1XX-preview3] | [![][linux-arm-badge-8.0.3XX]][linux-arm-version-8.0.3XX]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[tar.gz][linux-arm64-targz-7.0.4XX] - [Checksum][linux-arm64-targz-checksum-7.0.4XX] | | **Linux arm64** | [![][linux-arm64-badge-main]][linux-arm64-version-main]<br>[tar.gz][linux-arm64-targz-main] - [Checksum][linux-arm64-targz-checksum-main] | [![][linux-arm64-badge-9.0.1XX-preview3]][linux-arm64-version-9.0.1XX-preview3]<br>[tar.gz][linux-arm64-targz-9.0.1XX-preview3] - [Checksum][linux-arm64-targz-checksum-9.0.1XX-preview3] | [![][linux-arm64-badge-8.0.3XX]][linux-arm64-version-8.0.3XX]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[tar.gz][linux-musl-x64-targz-7.0.4XX] - [Checksum][linux-musl-x64-targz-checksum-7.0.4XX] | | **Linux-musl-x64** | [![][linux-musl-x64-badge-main]][linux-musl-x64-version-main]<br>[tar.gz][linux-musl-x64-targz-main] - [Checksum][linux-musl-x64-targz-checksum-main] | [![][linux-musl-x64-badge-9.0.1XX-preview3]][linux-musl-x64-version-9.0.1XX-preview3]<br>[tar.gz][linux-musl-x64-targz-9.0.1XX-preview3] - [Checksum][linux-musl-x64-targz-checksum-9.0.1XX-preview3] | [![][linux-musl-x64-badge-8.0.3XX]][linux-musl-x64-version-8.0.3XX]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[tar.gz][linux-musl-arm-targz-7.0.4XX] - [Checksum][linux-musl-arm-targz-checksum-7.0.4XX] | | **Linux-musl-arm** | [![][linux-musl-arm-badge-main]][linux-musl-arm-version-main]<br>[tar.gz][linux-musl-arm-targz-main] - [Checksum][linux-musl-arm-targz-checksum-main] | [![][linux-musl-arm-badge-9.0.1XX-preview3]][linux-musl-arm-version-9.0.1XX-preview3]<br>[tar.gz][linux-musl-arm-targz-9.0.1XX-preview3] - [Checksum][linux-musl-arm-targz-checksum-9.0.1XX-preview3] | [![][linux-musl-arm-badge-8.0.3XX]][linux-musl-arm-version-8.0.3XX]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[tar.gz][linux-musl-arm64-targz-7.0.4XX] - [Checksum][linux-musl-arm64-targz-checksum-7.0.4XX] | | **Linux-musl-arm64** | [![][linux-musl-arm64-badge-main]][linux-musl-arm64-version-main]<br>[tar.gz][linux-musl-arm64-targz-main] - [Checksum][linux-musl-arm64-targz-checksum-main] | [![][linux-musl-arm64-badge-9.0.1XX-preview3]][linux-musl-arm64-version-9.0.1XX-preview3]<br>[tar.gz][linux-musl-arm64-targz-9.0.1XX-preview3] - [Checksum][linux-musl-arm64-targz-checksum-9.0.1XX-preview3] | [![][linux-musl-arm64-badge-8.0.3XX]][linux-musl-arm64-version-8.0.3XX]<br>[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]<br>[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** | | **RHEL 6** | **N/A** | **N/A** | **N/A** | **N/A** |
Reference notes: 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-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-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-badge-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-version-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-installer-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-zip-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-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 [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-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-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-badge-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-version-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-installer-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-zip-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-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 [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-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-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-badge-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-version-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-installer-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-targz-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-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 [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-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-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-badge-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-version-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-installer-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-targz-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-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 [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-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-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-badge-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-version-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-DEB-installer-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-RPM-installer-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-targz-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-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 [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-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-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-badge-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-version-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-targz-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-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 [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-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-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-badge-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-version-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-targz-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-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 [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-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-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-badge-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-version-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-targz-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-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 [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-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-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-badge-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-version-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-targz-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-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 [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-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-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-badge-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-version-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-targz-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-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 [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-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-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-badge-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-version-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-targz-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-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 [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-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-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-badge-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-version-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-zip-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-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 [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-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-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-badge-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-version-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-installer-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-zip-checksum-9.0.1XX-preview3]: https://aka.ms/dotnet/9.0.1xx-preview3/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-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 [win-arm64-version-8.0.3XX]: https://aka.ms/dotnet/8.0.3xx/daily/productCommit-win-arm64.txt

View file

@ -1,11 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the MIT license. See License.txt in the project root for full license information. -->
<Project> <Project>
<PropertyGroup>
<PublishingVersion>3</PublishingVersion>
</PropertyGroup>
<PropertyGroup> <PropertyGroup>
<Product>Sdk</Product> <Product>Sdk</Product>
<BlobStoragePartialRelativePath>$(Product)</BlobStoragePartialRelativePath> <BlobStoragePartialRelativePath>$(Product)</BlobStoragePartialRelativePath>
@ -133,7 +127,7 @@
<IsStableBuild Condition="'$(DotNetFinalVersionKind)' == 'release'">true</IsStableBuild> <IsStableBuild Condition="'$(DotNetFinalVersionKind)' == 'release'">true</IsStableBuild>
</PropertyGroup> </PropertyGroup>
<PushToAzureDevOpsArtifacts <PushToBuildStorage
AzureDevOpsCollectionUri="$(SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)" AzureDevOpsCollectionUri="$(SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)"
AzureDevOpsProject="$(SYSTEM_TEAMPROJECT)" AzureDevOpsProject="$(SYSTEM_TEAMPROJECT)"
AzureDevOpsBuildId="$(BUILD_BUILDID)" AzureDevOpsBuildId="$(BUILD_BUILDID)"
@ -151,7 +145,12 @@
AssetManifestPath="$(InstallersAssetManifestFilePath)" AssetManifestPath="$(InstallersAssetManifestFilePath)"
PublishFlatContainer="true" PublishFlatContainer="true"
IsStableBuild="$(IsStableBuild)" IsStableBuild="$(IsStableBuild)"
PublishingVersion="3" /> PublishingVersion="3"
PushToLocalStorage="$(PushToLocalStorage)"
AssetsLocalStorageDir="$(SourceBuiltAssetsDir)"
ShippingPackagesLocalStorageDir="$(SourceBuiltShippingPackagesDir)"
NonShippingPackagesLocalStorageDir="$(SourceBuiltNonShippingPackagesDir)"
AssetManifestsLocalStorageDir="$(SourceBuiltAssetManifestsDir)" />
</Target> </Target>
</Project> </Project>

View file

@ -38,12 +38,6 @@
<FileSignInfo Include="comhost.dll" CertificateName="None" /> <FileSignInfo Include="comhost.dll" CertificateName="None" />
<FileSignInfo Include="singlefilehost.exe" CertificateName="None" /> <FileSignInfo Include="singlefilehost.exe" CertificateName="None" />
<!-- These are 3rd party nupkgs and should not be signed with an MS cert -->
<FileSignInfo Include="nunit3.dotnetnew.template.$(NUnit3Templates21PackageVersion).nupkg" CertificateName="None" />
<FileSignInfo Include="nunit3.dotnetnew.template.$(NUnit3Templates30PackageVersion).nupkg" CertificateName="None" />
<FileSignInfo Include="nunit3.dotnetnew.template.$(NUnit3Templates31PackageVersion).nupkg" CertificateName="None" />
<FileSignInfo Include="nunit3.dotnetnew.template.$(NUnit3Templates50PackageVersion).nupkg" CertificateName="None" />
<FileExtensionSignInfo Include=".msi" CertificateName="$(InternalCertificateId)" /> <FileExtensionSignInfo Include=".msi" CertificateName="$(InternalCertificateId)" />
<!-- .ttf, .otf, and .js files come in from some older aspnetcore packages (e.g. 2.1). <!-- .ttf, .otf, and .js files come in from some older aspnetcore packages (e.g. 2.1).
These files in the 5.0 packages are NOT signed. When doing postbuild signing, These files in the 5.0 packages are NOT signed. When doing postbuild signing,

View file

@ -5,41 +5,41 @@
Source-build uses transitive dependency resolution to determine correct build SHA of all product contributing repos. 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. The order of dependencies is important and should not be modified without approval from dotnet/source-build-internal.
--> -->
<Dependency Name="Microsoft.WindowsDesktop.App.Ref" Version="9.0.0-preview.2.24122.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.WindowsDesktop.App.Ref" Version="9.0.0-preview.4.24202.13" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/windowsdesktop</Uri> <Uri>https://github.com/dotnet/windowsdesktop</Uri>
<Sha>6cd8a235fa93f02ae0400a78625dab312c4642f2</Sha> <Sha>0c21ff31531b14dc1712e2811625beb51cacee97</Sha>
</Dependency> </Dependency>
<Dependency Name="VS.Redist.Common.WindowsDesktop.SharedFramework.x64.9.0" Version="9.0.0-preview.2.24122.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="VS.Redist.Common.WindowsDesktop.SharedFramework.x64.9.0" Version="9.0.0-preview.4.24202.13" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/windowsdesktop</Uri> <Uri>https://github.com/dotnet/windowsdesktop</Uri>
<Sha>6cd8a235fa93f02ae0400a78625dab312c4642f2</Sha> <Sha>0c21ff31531b14dc1712e2811625beb51cacee97</Sha>
</Dependency> </Dependency>
<Dependency Name="VS.Redist.Common.WindowsDesktop.TargetingPack.x64.9.0" Version="9.0.0-preview.2.24122.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="VS.Redist.Common.WindowsDesktop.TargetingPack.x64.9.0" Version="9.0.0-preview.4.24202.13" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/windowsdesktop</Uri> <Uri>https://github.com/dotnet/windowsdesktop</Uri>
<Sha>6cd8a235fa93f02ae0400a78625dab312c4642f2</Sha> <Sha>0c21ff31531b14dc1712e2811625beb51cacee97</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.WindowsDesktop.App.Runtime.win-x64" Version="9.0.0-preview.2.24122.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.WindowsDesktop.App.Runtime.win-x64" Version="9.0.0-preview.4.24202.13" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/windowsdesktop</Uri> <Uri>https://github.com/dotnet/windowsdesktop</Uri>
<Sha>6cd8a235fa93f02ae0400a78625dab312c4642f2</Sha> <Sha>0c21ff31531b14dc1712e2811625beb51cacee97</Sha>
</Dependency> </Dependency>
<Dependency Name="VS.Redist.Common.NetCore.SharedFramework.x64.9.0" Version="9.0.0-preview.2.24123.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="VS.Redist.Common.NetCore.SharedFramework.x64.9.0" Version="9.0.0-preview.4.24202.9" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>99b76018b6e4edc4ce185dd5f3c5697c6941d88e</Sha> <Sha>995989e8b33864648080c55e31116d9818b8760c</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.NETCore.App.Ref" Version="9.0.0-preview.2.24123.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.NETCore.App.Ref" Version="9.0.0-preview.4.24202.9" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>99b76018b6e4edc4ce185dd5f3c5697c6941d88e</Sha> <Sha>995989e8b33864648080c55e31116d9818b8760c</Sha>
</Dependency> </Dependency>
<Dependency Name="VS.Redist.Common.NetCore.TargetingPack.x64.9.0" Version="9.0.0-preview.2.24123.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="VS.Redist.Common.NetCore.TargetingPack.x64.9.0" Version="9.0.0-preview.4.24202.9" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>99b76018b6e4edc4ce185dd5f3c5697c6941d88e</Sha> <Sha>995989e8b33864648080c55e31116d9818b8760c</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="9.0.0-preview.2.24123.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="9.0.0-preview.4.24202.9" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>99b76018b6e4edc4ce185dd5f3c5697c6941d88e</Sha> <Sha>995989e8b33864648080c55e31116d9818b8760c</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.NETCore.App.Host.win-x64" Version="9.0.0-preview.2.24123.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.NETCore.App.Host.win-x64" Version="9.0.0-preview.4.24202.9" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>99b76018b6e4edc4ce185dd5f3c5697c6941d88e</Sha> <Sha>995989e8b33864648080c55e31116d9818b8760c</Sha>
</Dependency> </Dependency>
<!-- Change blob version in GenerateLayout.targets if this is unpinned to service targeting pack --> <!-- Change blob version in GenerateLayout.targets if this is unpinned to service targeting pack -->
<!-- No new netstandard.library planned for 3.1 timeframe at this time. --> <!-- No new netstandard.library planned for 3.1 timeframe at this time. -->
@ -47,70 +47,70 @@
<Uri>https://github.com/dotnet/core-setup</Uri> <Uri>https://github.com/dotnet/core-setup</Uri>
<Sha>7d57652f33493fa022125b7f63aad0d70c52d810</Sha> <Sha>7d57652f33493fa022125b7f63aad0d70c52d810</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.NETCore.Platforms" Version="9.0.0-preview.2.24123.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.NETCore.Platforms" Version="9.0.0-preview.4.24202.9" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>99b76018b6e4edc4ce185dd5f3c5697c6941d88e</Sha> <Sha>995989e8b33864648080c55e31116d9818b8760c</Sha>
</Dependency> </Dependency>
<!-- Intermediate is necessary for source build. --> <!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.runtime.linux-x64" Version="9.0.0-preview.2.24123.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.SourceBuild.Intermediate.runtime.linux-x64" Version="9.0.0-preview.4.24202.9" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>99b76018b6e4edc4ce185dd5f3c5697c6941d88e</Sha> <Sha>995989e8b33864648080c55e31116d9818b8760c</Sha>
<SourceBuild RepoName="runtime" ManagedOnly="false" /> <SourceBuild RepoName="runtime" ManagedOnly="false" />
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.App.Ref" Version="9.0.0-preview.2.24121.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.AspNetCore.App.Ref" Version="9.0.0-preview.4.24202.2" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/aspnetcore</Uri> <Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>cc5bc6b56dc0a6e6f1ca103acff5afd9c71973ba</Sha> <Sha>4e75678e761c993ed85b108fab57353eeecf5245</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.App.Ref.Internal" Version="9.0.0-preview.2.24121.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.AspNetCore.App.Ref.Internal" Version="9.0.0-preview.4.24202.2" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/aspnetcore</Uri> <Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>cc5bc6b56dc0a6e6f1ca103acff5afd9c71973ba</Sha> <Sha>4e75678e761c993ed85b108fab57353eeecf5245</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.App.Runtime.win-x64" Version="9.0.0-preview.2.24121.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.AspNetCore.App.Runtime.win-x64" Version="9.0.0-preview.4.24202.2" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/aspnetcore</Uri> <Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>cc5bc6b56dc0a6e6f1ca103acff5afd9c71973ba</Sha> <Sha>4e75678e761c993ed85b108fab57353eeecf5245</Sha>
</Dependency> </Dependency>
<Dependency Name="VS.Redist.Common.AspNetCore.SharedFramework.x64.9.0" Version="9.0.0-preview.2.24121.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="VS.Redist.Common.AspNetCore.SharedFramework.x64.9.0" Version="9.0.0-preview.4.24202.2" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/aspnetcore</Uri> <Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>cc5bc6b56dc0a6e6f1ca103acff5afd9c71973ba</Sha> <Sha>4e75678e761c993ed85b108fab57353eeecf5245</Sha>
</Dependency> </Dependency>
<Dependency Name="dotnet-dev-certs" Version="9.0.0-preview.2.24121.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="dotnet-dev-certs" Version="9.0.0-preview.4.24202.2" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/aspnetcore</Uri> <Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>cc5bc6b56dc0a6e6f1ca103acff5afd9c71973ba</Sha> <Sha>4e75678e761c993ed85b108fab57353eeecf5245</Sha>
</Dependency> </Dependency>
<Dependency Name="dotnet-user-jwts" Version="9.0.0-preview.2.24121.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="dotnet-user-jwts" Version="9.0.0-preview.4.24202.2" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/aspnetcore</Uri> <Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>cc5bc6b56dc0a6e6f1ca103acff5afd9c71973ba</Sha> <Sha>4e75678e761c993ed85b108fab57353eeecf5245</Sha>
</Dependency> </Dependency>
<Dependency Name="dotnet-user-secrets" Version="9.0.0-preview.2.24121.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="dotnet-user-secrets" Version="9.0.0-preview.4.24202.2" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/aspnetcore</Uri> <Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>cc5bc6b56dc0a6e6f1ca103acff5afd9c71973ba</Sha> <Sha>4e75678e761c993ed85b108fab57353eeecf5245</Sha>
</Dependency> </Dependency>
<!-- Intermediate is necessary for source build. --> <!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.aspnetcore" Version="9.0.0-preview.2.24121.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.SourceBuild.Intermediate.aspnetcore" Version="9.0.0-preview.4.24202.2" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/aspnetcore</Uri> <Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>cc5bc6b56dc0a6e6f1ca103acff5afd9c71973ba</Sha> <Sha>4e75678e761c993ed85b108fab57353eeecf5245</Sha>
<SourceBuild RepoName="aspnetcore" ManagedOnly="true" /> <SourceBuild RepoName="aspnetcore" ManagedOnly="true" />
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.Common.ItemTemplates" Version="9.0.100-preview.2.24123.3"> <Dependency Name="Microsoft.DotNet.Common.ItemTemplates" Version="9.0.100-preview.4.24202.52">
<Uri>https://github.com/dotnet/sdk</Uri> <Uri>https://github.com/dotnet/sdk</Uri>
<Sha>e0a3cd9377fb9decba91d8cbcd50f2fe6107b12c</Sha> <Sha>9d6ed6d197399176e0110fe83d2ef0f86baac8a2</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.TemplateEngine.Cli" Version="9.0.100-preview.2.24123.3"> <Dependency Name="Microsoft.TemplateEngine.Cli" Version="9.0.100-preview.4.24202.52">
<Uri>https://github.com/dotnet/sdk</Uri> <Uri>https://github.com/dotnet/sdk</Uri>
<Sha>e0a3cd9377fb9decba91d8cbcd50f2fe6107b12c</Sha> <Sha>9d6ed6d197399176e0110fe83d2ef0f86baac8a2</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.NET.Sdk" Version="9.0.100-preview.2.24123.3"> <Dependency Name="Microsoft.NET.Sdk" Version="9.0.100-preview.4.24202.52">
<Uri>https://github.com/dotnet/sdk</Uri> <Uri>https://github.com/dotnet/sdk</Uri>
<Sha>e0a3cd9377fb9decba91d8cbcd50f2fe6107b12c</Sha> <Sha>9d6ed6d197399176e0110fe83d2ef0f86baac8a2</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.MSBuildSdkResolver" Version="9.0.100-preview.2.24123.3"> <Dependency Name="Microsoft.DotNet.MSBuildSdkResolver" Version="9.0.100-preview.4.24202.52">
<Uri>https://github.com/dotnet/sdk</Uri> <Uri>https://github.com/dotnet/sdk</Uri>
<Sha>e0a3cd9377fb9decba91d8cbcd50f2fe6107b12c</Sha> <Sha>9d6ed6d197399176e0110fe83d2ef0f86baac8a2</Sha>
</Dependency> </Dependency>
<!-- Intermediate is necessary for source build. --> <!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.sdk" Version="9.0.100-preview.2.24123.3"> <Dependency Name="Microsoft.SourceBuild.Intermediate.sdk" Version="9.0.100-preview.4.24202.52">
<Uri>https://github.com/dotnet/sdk</Uri> <Uri>https://github.com/dotnet/sdk</Uri>
<Sha>e0a3cd9377fb9decba91d8cbcd50f2fe6107b12c</Sha> <Sha>9d6ed6d197399176e0110fe83d2ef0f86baac8a2</Sha>
<SourceBuild RepoName="sdk" ManagedOnly="true" /> <SourceBuild RepoName="sdk" ManagedOnly="true" />
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.2.1" Version="1.0.2-beta4.22406.1"> <Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.2.1" Version="1.0.2-beta4.22406.1">
@ -129,76 +129,76 @@
<Uri>https://github.com/dotnet/test-templates</Uri> <Uri>https://github.com/dotnet/test-templates</Uri>
<Sha>becc4bd157cd6608b51a5ffe414a5d2de6330272</Sha> <Sha>becc4bd157cd6608b51a5ffe414a5d2de6330272</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.8.0" Version="1.1.0-rc.24120.2"> <Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.8.0" Version="1.1.0-rc.24202.1">
<Uri>https://github.com/dotnet/test-templates</Uri> <Uri>https://github.com/dotnet/test-templates</Uri>
<Sha>1591b24326caa98288e04e18e5c1b75c36c917c1</Sha> <Sha>49c9ad01f057b3c6352bbec12b117acc2224493c</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.9.0" Version="1.1.0-rc.24120.2"> <Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.9.0" Version="1.1.0-rc.24202.1">
<Uri>https://github.com/dotnet/test-templates</Uri> <Uri>https://github.com/dotnet/test-templates</Uri>
<Sha>1591b24326caa98288e04e18e5c1b75c36c917c1</Sha> <Sha>49c9ad01f057b3c6352bbec12b117acc2224493c</Sha>
</Dependency> </Dependency>
<!-- Intermediate is necessary for source build. --> <!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.test-templates" Version="1.1.0-rc.24120.2"> <Dependency Name="Microsoft.SourceBuild.Intermediate.test-templates" Version="1.1.0-rc.24202.1">
<Uri>https://github.com/dotnet/test-templates</Uri> <Uri>https://github.com/dotnet/test-templates</Uri>
<Sha>1591b24326caa98288e04e18e5c1b75c36c917c1</Sha> <Sha>49c9ad01f057b3c6352bbec12b117acc2224493c</Sha>
<SourceBuild RepoName="test-templates" ManagedOnly="true" /> <SourceBuild RepoName="test-templates" ManagedOnly="true" />
</Dependency> </Dependency>
<!-- For coherency purposes, these versions should be gated by the versions of winforms and wpf routed via windowsdesktop --> <!-- For coherency purposes, these versions should be gated by the versions of winforms and wpf routed via windowsdesktop -->
<Dependency Name="Microsoft.Dotnet.WinForms.ProjectTemplates" Version="9.0.0-preview.2.24122.2" CoherentParentDependency="Microsoft.WindowsDesktop.App.Runtime.win-x64"> <Dependency Name="Microsoft.Dotnet.WinForms.ProjectTemplates" Version="9.0.0-preview.4.24201.2" CoherentParentDependency="Microsoft.WindowsDesktop.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/winforms</Uri> <Uri>https://github.com/dotnet/winforms</Uri>
<Sha>822e882f4080b6197234cd82ad0d2f2a485a4f35</Sha> <Sha>6710618bf954958130cd0e940cc25223079b12d5</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.Wpf.ProjectTemplates" Version="9.0.0-preview.2.24122.1" CoherentParentDependency="Microsoft.WindowsDesktop.App.Runtime.win-x64"> <Dependency Name="Microsoft.DotNet.Wpf.ProjectTemplates" Version="9.0.0-preview.4.24202.2" CoherentParentDependency="Microsoft.WindowsDesktop.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/wpf</Uri> <Uri>https://github.com/dotnet/wpf</Uri>
<Sha>a86dc342ee4a97a9d36c1e55503e5d7ae7eb8b80</Sha> <Sha>25ba139a0c67220a843c989343d27580877c3f8b</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.FSharp.Compiler" Version="12.8.300-beta.24122.3" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.FSharp.Compiler" Version="12.8.300-beta.24202.3" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/fsharp</Uri> <Uri>https://github.com/dotnet/fsharp</Uri>
<Sha>02bb351b606468bce98688fccda9d0c8adcd964d</Sha> <Sha>1632b069d8b6a8f323e9f53240a500bf71387c43</Sha>
</Dependency> </Dependency>
<!-- Intermediate is necessary for source build. --> <!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.fsharp" Version="8.0.300-beta.24122.3" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.SourceBuild.Intermediate.fsharp" Version="8.0.300-beta.24202.3" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/fsharp</Uri> <Uri>https://github.com/dotnet/fsharp</Uri>
<Sha>02bb351b606468bce98688fccda9d0c8adcd964d</Sha> <Sha>1632b069d8b6a8f323e9f53240a500bf71387c43</Sha>
<SourceBuild RepoName="fsharp" ManagedOnly="true" /> <SourceBuild RepoName="fsharp" ManagedOnly="true" />
</Dependency> </Dependency>
<Dependency Name="Microsoft.NET.Test.Sdk" Version="17.10.0-preview-24120-01" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.NET.Test.Sdk" Version="17.10.0-release-24177-07" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/microsoft/vstest</Uri> <Uri>https://github.com/microsoft/vstest</Uri>
<Sha>48d8e778c871315db0bad221b00f4843b06242c3</Sha> <Sha>1cd0d8998250d36c95ed65a76304ef5d1b33e98f</Sha>
</Dependency> </Dependency>
<!-- Intermediate is necessary for source build. --> <!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.vstest" Version="17.10.0-preview-24120-01" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.SourceBuild.Intermediate.vstest" Version="17.10.0-release-24177-07" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/microsoft/vstest</Uri> <Uri>https://github.com/microsoft/vstest</Uri>
<Sha>48d8e778c871315db0bad221b00f4843b06242c3</Sha> <Sha>1cd0d8998250d36c95ed65a76304ef5d1b33e98f</Sha>
<SourceBuild RepoName="vstest" ManagedOnly="true" /> <SourceBuild RepoName="vstest" ManagedOnly="true" />
</Dependency> </Dependency>
<Dependency Name="Microsoft.NET.ILLink.Tasks" Version="9.0.0-preview.2.24123.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.NET.ILLink.Tasks" Version="9.0.0-preview.4.24202.9" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>99b76018b6e4edc4ce185dd5f3c5697c6941d88e</Sha> <Sha>995989e8b33864648080c55e31116d9818b8760c</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Net.Compilers.Toolset" Version="4.10.0-2.24122.3" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.Net.Compilers.Toolset" Version="4.11.0-1.24180.2" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/roslyn</Uri> <Uri>https://github.com/dotnet/roslyn</Uri>
<Sha>2bfcc497086de48b15861bb56407324facef4c4a</Sha> <Sha>0288056413b6de0d0941b0b1ed770c273d870fb0</Sha>
</Dependency> </Dependency>
<!-- Intermediate is necessary for source build. --> <!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.roslyn" Version="4.10.0-2.24122.3" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.SourceBuild.Intermediate.roslyn" Version="4.11.0-1.24180.2" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/roslyn</Uri> <Uri>https://github.com/dotnet/roslyn</Uri>
<Sha>2bfcc497086de48b15861bb56407324facef4c4a</Sha> <Sha>0288056413b6de0d0941b0b1ed770c273d870fb0</Sha>
<SourceBuild RepoName="roslyn" ManagedOnly="true" /> <SourceBuild RepoName="roslyn" ManagedOnly="true" />
</Dependency> </Dependency>
<Dependency Name="Microsoft.Build" Version="17.10.0-preview-24122-01" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.Build" Version="17.11.0-preview-24178-16" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/msbuild</Uri> <Uri>https://github.com/dotnet/msbuild</Uri>
<Sha>d4cb14fe4d2e6df0327308feab18ccbb2046246c</Sha> <Sha>7ca3c98fad986066bbf2802c863236b4a0f4e34a</Sha>
</Dependency> </Dependency>
<!-- Intermediate is necessary for source build. --> <!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.msbuild" Version="17.10.0-preview-24122-01" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.SourceBuild.Intermediate.msbuild" Version="17.11.0-preview-24178-16" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/msbuild</Uri> <Uri>https://github.com/dotnet/msbuild</Uri>
<Sha>d4cb14fe4d2e6df0327308feab18ccbb2046246c</Sha> <Sha>7ca3c98fad986066bbf2802c863236b4a0f4e34a</Sha>
<SourceBuild RepoName="msbuild" ManagedOnly="true" /> <SourceBuild RepoName="msbuild" ManagedOnly="true" />
</Dependency> </Dependency>
<Dependency Name="NuGet.Build.Tasks" Version="6.10.0-preview.2.41" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="NuGet.Build.Tasks" Version="6.10.0-preview.2.97" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/nuget/nuget.client</Uri> <Uri>https://github.com/nuget/nuget.client</Uri>
<Sha>63958aab19b7120862ff55eac32ab6a155596a59</Sha> <Sha>fb50d1a45ed10b39b5f335bc3a4bdcaea9b951cf</Sha>
<SourceBuildTarball RepoName="nuget-client" ManagedOnly="true" /> <SourceBuildTarball RepoName="nuget-client" ManagedOnly="true" />
</Dependency> </Dependency>
<!-- This is only used by source build SmokeTests. --> <!-- This is only used by source build SmokeTests. -->
@ -206,91 +206,91 @@
<Uri>https://github.com/Microsoft/ApplicationInsights-dotnet</Uri> <Uri>https://github.com/Microsoft/ApplicationInsights-dotnet</Uri>
<Sha>53b80940842204f78708a538628288ff5d741a1d</Sha> <Sha>53b80940842204f78708a538628288ff5d741a1d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.NET.Workload.Emscripten.Current.Manifest-9.0.100.Transport" Version="9.0.0-preview.2.24121.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="Microsoft.NET.Workload.Emscripten.Current.Manifest-9.0.100.Transport" Version="9.0.0-preview.4.24176.2" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/emsdk</Uri> <Uri>https://github.com/dotnet/emsdk</Uri>
<Sha>2d3f1fe4807a21879cedba9d3fde8cd329fb17f2</Sha> <Sha>5b7beea1daa64d283d62d52a0027b13ee9484ff6</Sha>
</Dependency> </Dependency>
<!-- Intermediate is necessary for source build. --> <!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.emsdk" Version="9.0.0-preview.2.24121.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="Microsoft.SourceBuild.Intermediate.emsdk" Version="9.0.0-preview.4.24176.2" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/emsdk</Uri> <Uri>https://github.com/dotnet/emsdk</Uri>
<Sha>2d3f1fe4807a21879cedba9d3fde8cd329fb17f2</Sha> <Sha>5b7beea1daa64d283d62d52a0027b13ee9484ff6</Sha>
<SourceBuild RepoName="emsdk" ManagedOnly="true" /> <SourceBuild RepoName="emsdk" ManagedOnly="true" />
</Dependency> </Dependency>
<Dependency Name="Microsoft.Deployment.DotNet.Releases" Version="2.0.0-preview.1.24113.2" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.Deployment.DotNet.Releases" Version="2.0.0-preview.1.24172.2" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/deployment-tools</Uri> <Uri>https://github.com/dotnet/deployment-tools</Uri>
<Sha>822ff266c5f999ab9ceb6928df59d79285ea4a4f</Sha> <Sha>596a11e185d2274531fe57a2c9e03bbe4f23064d</Sha>
</Dependency> </Dependency>
<!-- Intermediate is necessary for source build. --> <!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.deployment-tools" Version="9.0.0-preview.1.24113.2" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.SourceBuild.Intermediate.deployment-tools" Version="9.0.0-preview.1.24172.2" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/deployment-tools</Uri> <Uri>https://github.com/dotnet/deployment-tools</Uri>
<Sha>822ff266c5f999ab9ceb6928df59d79285ea4a4f</Sha> <Sha>596a11e185d2274531fe57a2c9e03bbe4f23064d</Sha>
<SourceBuild RepoName="deployment-tools" ManagedOnly="true" /> <SourceBuild RepoName="deployment-tools" ManagedOnly="true" />
</Dependency> </Dependency>
<!-- Intermediate is necessary for source build. --> <!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-externals" Version="9.0.0-alpha.1.24112.1"> <Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-externals" Version="9.0.0-alpha.1.24201.3">
<Uri>https://github.com/dotnet/source-build-externals</Uri> <Uri>https://github.com/dotnet/source-build-externals</Uri>
<Sha>ddfb60463c966af55fd0e222c2266170e83d1324</Sha> <Sha>bcd44732882bc2b81b30146c778eb6ccb7fea793</Sha>
<SourceBuild RepoName="source-build-externals" ManagedOnly="true" /> <SourceBuild RepoName="source-build-externals" ManagedOnly="true" />
</Dependency> </Dependency>
<Dependency Name="System.CommandLine" Version="2.0.0-beta4.24112.1" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="System.CommandLine" Version="2.0.0-beta4.24201.1" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/command-line-api</Uri> <Uri>https://github.com/dotnet/command-line-api</Uri>
<Sha>e9ac4ff4293cf853f3d07eb9e747aef27f5be965</Sha> <Sha>c96672b8b84c307feb035fed6cbe9db85d5b87d3</Sha>
</Dependency> </Dependency>
<!-- Intermediate is necessary for source build. --> <!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.command-line-api" Version="0.1.511201" CoherentParentDependency="Microsoft.NET.Sdk"> <Dependency Name="Microsoft.SourceBuild.Intermediate.command-line-api" Version="0.1.520101" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/command-line-api</Uri> <Uri>https://github.com/dotnet/command-line-api</Uri>
<Sha>e9ac4ff4293cf853f3d07eb9e747aef27f5be965</Sha> <Sha>c96672b8b84c307feb035fed6cbe9db85d5b87d3</Sha>
<SourceBuild RepoName="command-line-api" ManagedOnly="true" /> <SourceBuild RepoName="command-line-api" ManagedOnly="true" />
</Dependency> </Dependency>
</ProductDependencies> </ProductDependencies>
<ToolsetDependencies> <ToolsetDependencies>
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="9.0.0-beta.24114.1"> <Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="9.0.0-beta.24201.3">
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d5b02a4900c4d521cb48b8f0d7e3f28175268f7c</Sha> <Sha>0ffb8e9f4a064d8c77f07420dc399baec9daef89</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.CMake.Sdk" Version="9.0.0-beta.24114.1"> <Dependency Name="Microsoft.DotNet.CMake.Sdk" Version="9.0.0-beta.24201.3">
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d5b02a4900c4d521cb48b8f0d7e3f28175268f7c</Sha> <Sha>0ffb8e9f4a064d8c77f07420dc399baec9daef89</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.Build.Tasks.Installers" Version="9.0.0-beta.24114.1"> <Dependency Name="Microsoft.DotNet.Build.Tasks.Installers" Version="9.0.0-beta.24201.3">
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d5b02a4900c4d521cb48b8f0d7e3f28175268f7c</Sha> <Sha>0ffb8e9f4a064d8c77f07420dc399baec9daef89</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.Darc" Version="1.1.0-beta.24112.3"> <Dependency Name="Microsoft.DotNet.Darc" Version="1.1.0-beta.24168.3">
<Uri>https://github.com/dotnet/arcade-services</Uri> <Uri>https://github.com/dotnet/arcade-services</Uri>
<Sha>c041bcdab75f5447be8bd11ddcfbe8e639f13f32</Sha> <Sha>0e9abfee048404d9b994fc64235b42216ce68dad</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.DarcLib" Version="1.1.0-beta.24112.3"> <Dependency Name="Microsoft.DotNet.DarcLib" Version="1.1.0-beta.24168.3">
<Uri>https://github.com/dotnet/arcade-services</Uri> <Uri>https://github.com/dotnet/arcade-services</Uri>
<Sha>c041bcdab75f5447be8bd11ddcfbe8e639f13f32</Sha> <Sha>0e9abfee048404d9b994fc64235b42216ce68dad</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.XliffTasks" Version="9.0.0-beta.24114.1"> <Dependency Name="Microsoft.DotNet.XliffTasks" Version="9.0.0-beta.24201.3">
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d5b02a4900c4d521cb48b8f0d7e3f28175268f7c</Sha> <Sha>0ffb8e9f4a064d8c77f07420dc399baec9daef89</Sha>
</Dependency> </Dependency>
<!-- Intermediate is necessary for source build. --> <!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.arcade" Version="9.0.0-beta.24114.1"> <Dependency Name="Microsoft.SourceBuild.Intermediate.arcade" Version="9.0.0-beta.24201.3">
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d5b02a4900c4d521cb48b8f0d7e3f28175268f7c</Sha> <Sha>0ffb8e9f4a064d8c77f07420dc399baec9daef89</Sha>
<SourceBuild RepoName="arcade" ManagedOnly="true" /> <SourceBuild RepoName="arcade" ManagedOnly="true" />
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="9.0.0-alpha.1.23612.13"> <Dependency Name="Microsoft.Extensions.Logging.Console" Version="9.0.0-alpha.1.23612.13">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>ab1a8224cdf115b65e0db5dc88d11f205068f444</Sha> <Sha>ab1a8224cdf115b65e0db5dc88d11f205068f444</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-reference-packages" Version="9.0.0-alpha.1.24119.1"> <Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-reference-packages" Version="9.0.0-alpha.1.24162.2">
<Uri>https://github.com/dotnet/source-build-reference-packages</Uri> <Uri>https://github.com/dotnet/source-build-reference-packages</Uri>
<Sha>539af5d8ae183d4fe61e8b2f8f4a8505c8a765a7</Sha> <Sha>c0b5d69a1a1513528c77fffff708c7502d57c35c</Sha>
<SourceBuild RepoName="source-build-reference-packages" ManagedOnly="true" /> <SourceBuild RepoName="source-build-reference-packages" ManagedOnly="true" />
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.ScenarioTests.SdkTemplateTests" Version="9.0.0-preview.24057.2"> <Dependency Name="Microsoft.DotNet.ScenarioTests.SdkTemplateTests" Version="9.0.0-preview.24176.1">
<Uri>https://github.com/dotnet/scenario-tests</Uri> <Uri>https://github.com/dotnet/scenario-tests</Uri>
<Sha>bfde902a10d7b672f4fc7e844198ede405dbb9c6</Sha> <Sha>ddccfec3ccd631fb8341c8b6e4e422e8cb339aa5</Sha>
</Dependency> </Dependency>
<!-- Intermediate is necessary for source build. --> <!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.scenario-tests" Version="9.0.0-preview.24057.2"> <Dependency Name="Microsoft.SourceBuild.Intermediate.scenario-tests" Version="9.0.0-preview.24176.1">
<Uri>https://github.com/dotnet/scenario-tests</Uri> <Uri>https://github.com/dotnet/scenario-tests</Uri>
<Sha>bfde902a10d7b672f4fc7e844198ede405dbb9c6</Sha> <Sha>ddccfec3ccd631fb8341c8b6e4e422e8cb339aa5</Sha>
<SourceBuild RepoName="scenario-tests" ManagedOnly="true" /> <SourceBuild RepoName="scenario-tests" ManagedOnly="true" />
</Dependency> </Dependency>
<!-- Aspire isn't really a toolset dependency. However, it only inserts a baseline manifest in installer, <!-- Aspire isn't really a toolset dependency. However, it only inserts a baseline manifest in installer,
@ -300,14 +300,14 @@
aren't shipping, or those extensions packages depend on aspnetcore packages that won't ship. However, given the cost 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. of maintaining this coherency path is high. This being toolset means that aspire is responsible for its own coherency.
--> -->
<Dependency Name="Microsoft.NET.Sdk.Aspire.Manifest-9.0.100-preview.1" Version="9.0.0-preview.1.24116.3"> <Dependency Name="Microsoft.NET.Sdk.Aspire.Manifest-9.0.100-preview.1" Version="9.0.0-preview.2.24163.9">
<Uri>https://github.com/dotnet/aspire</Uri> <Uri>https://github.com/dotnet/aspire</Uri>
<Sha>1dd4b3265f01a50b20522fd3d7f3cd315db5be6b</Sha> <Sha>9faf59f870abdeb427c51c1380fce84d8163f2f0</Sha>
</Dependency> </Dependency>
<!-- Intermediate is necessary for source build. --> <!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.aspire" Version="9.0.0-preview.1.24116.3"> <Dependency Name="Microsoft.SourceBuild.Intermediate.aspire" Version="9.0.0-preview.2.24163.9">
<Uri>https://github.com/dotnet/aspire</Uri> <Uri>https://github.com/dotnet/aspire</Uri>
<Sha>1dd4b3265f01a50b20522fd3d7f3cd315db5be6b</Sha> <Sha>9faf59f870abdeb427c51c1380fce84d8163f2f0</Sha>
<SourceBuild RepoName="aspire" ManagedOnly="true" /> <SourceBuild RepoName="aspire" ManagedOnly="true" />
</Dependency> </Dependency>
</ToolsetDependencies> </ToolsetDependencies>

View file

@ -1,9 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <Project>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Arcade features -->
<PropertyGroup>
<UsingToolNetFrameworkReferenceAssemblies>true</UsingToolNetFrameworkReferenceAssemblies>
</PropertyGroup>
<PropertyGroup> <PropertyGroup>
<VersionMajor>9</VersionMajor> <VersionMajor>9</VersionMajor>
<VersionMinor>0</VersionMinor> <VersionMinor>0</VersionMinor>
@ -23,15 +18,15 @@
<PreReleaseVersionLabel Condition="'$(StabilizePackageVersion)' != 'true'">preview</PreReleaseVersionLabel> <PreReleaseVersionLabel Condition="'$(StabilizePackageVersion)' != 'true'">preview</PreReleaseVersionLabel>
<PreReleaseVersionLabel Condition="'$(StabilizePackageVersion)' == 'true' and '$(VersionFeature)' == '00'">rtm</PreReleaseVersionLabel> <PreReleaseVersionLabel Condition="'$(StabilizePackageVersion)' == 'true' and '$(VersionFeature)' == '00'">rtm</PreReleaseVersionLabel>
<PreReleaseVersionLabel Condition="'$(StabilizePackageVersion)' == 'true' and '$(VersionFeature)' != '00'">servicing</PreReleaseVersionLabel> <PreReleaseVersionLabel Condition="'$(StabilizePackageVersion)' == 'true' and '$(VersionFeature)' != '00'">servicing</PreReleaseVersionLabel>
<PreReleaseVersionIteration Condition="'$(StabilizePackageVersion)' != 'true'">3</PreReleaseVersionIteration> <PreReleaseVersionIteration Condition="'$(StabilizePackageVersion)' != 'true'">4</PreReleaseVersionIteration>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<VersionFeature21>30</VersionFeature21> <VersionFeature21>30</VersionFeature21>
<VersionFeature31>32</VersionFeature31> <VersionFeature31>32</VersionFeature31>
<VersionFeature50>17</VersionFeature50> <VersionFeature50>17</VersionFeature50>
<VersionFeature60>26</VersionFeature60> <VersionFeature60>27</VersionFeature60>
<VersionFeature70>15</VersionFeature70> <VersionFeature70>16</VersionFeature70>
<VersionFeature80>1</VersionFeature80> <VersionFeature80>2</VersionFeature80>
<!-- Should be kept in sync with VersionFeature70. It should match the version of Microsoft.NET.ILLink.Tasks <!-- Should be kept in sync with VersionFeature70. It should match the version of Microsoft.NET.ILLink.Tasks
referenced by the same 7.0 SDK that references the 7.0.VersionFeature70 runtime pack. --> referenced by the same 7.0 SDK that references the 7.0.VersionFeature70 runtime pack. -->
<_NET70ILLinkPackVersion>7.0.100-1.23211.1</_NET70ILLinkPackVersion> <_NET70ILLinkPackVersion>7.0.100-1.23211.1</_NET70ILLinkPackVersion>
@ -44,32 +39,27 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- Dependency from https://github.com/dotnet/arcade --> <!-- Dependency from https://github.com/dotnet/arcade -->
<MicrosoftDotNetBuildTasksInstallersPackageVersion>9.0.0-beta.24114.1</MicrosoftDotNetBuildTasksInstallersPackageVersion> <MicrosoftDotNetBuildTasksInstallersPackageVersion>9.0.0-beta.24201.3</MicrosoftDotNetBuildTasksInstallersPackageVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- Dependency from https://github.com/dotnet/arcade-services --> <!-- Dependency from https://github.com/dotnet/arcade-services -->
<MicrosoftDotNetDarcLibVersion>1.1.0-beta.24112.3</MicrosoftDotNetDarcLibVersion> <MicrosoftDotNetDarcLibVersion>1.1.0-beta.24168.3</MicrosoftDotNetDarcLibVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- Dependency from https://github.com/dotnet/winforms --> <!-- Dependency from https://github.com/dotnet/winforms -->
<MicrosoftDotnetWinFormsProjectTemplatesPackageVersion>9.0.0-preview.2.24122.2</MicrosoftDotnetWinFormsProjectTemplatesPackageVersion> <MicrosoftDotnetWinFormsProjectTemplatesPackageVersion>9.0.0-preview.4.24201.2</MicrosoftDotnetWinFormsProjectTemplatesPackageVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- Dependency from https://github.com/dotnet/wpf --> <!-- Dependency from https://github.com/dotnet/wpf -->
<MicrosoftDotNetWpfProjectTemplatesPackageVersion>9.0.0-preview.2.24122.1</MicrosoftDotNetWpfProjectTemplatesPackageVersion> <MicrosoftDotNetWpfProjectTemplatesPackageVersion>9.0.0-preview.4.24202.2</MicrosoftDotNetWpfProjectTemplatesPackageVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- Dependency from https://github.com/dotnet/test-templates --> <!-- Dependency from https://github.com/dotnet/test-templates -->
<!-- Legacy versions -->
<MicrosoftDotNetTestProjectTemplates21PackageVersion>1.0.2-beta4.22406.1</MicrosoftDotNetTestProjectTemplates21PackageVersion>
<MicrosoftDotNetTestProjectTemplates30PackageVersion>1.0.2-beta4.22406.1</MicrosoftDotNetTestProjectTemplates30PackageVersion>
<MicrosoftDotNetTestProjectTemplates31PackageVersion>1.1.0-rc.22558.1</MicrosoftDotNetTestProjectTemplates31PackageVersion>
<MicrosoftDotNetTestProjectTemplates50PackageVersion>1.1.0-rc.23558.1</MicrosoftDotNetTestProjectTemplates50PackageVersion>
<!-- Supported versions --> <!-- Supported versions -->
<MicrosoftDotNetTestProjectTemplates60PackageVersion>1.1.0-rc.24069.1</MicrosoftDotNetTestProjectTemplates60PackageVersion> <MicrosoftDotNetTestProjectTemplates60PackageVersion>1.1.0-rc.24069.1</MicrosoftDotNetTestProjectTemplates60PackageVersion>
<MicrosoftDotNetTestProjectTemplates70PackageVersion>1.1.0-rc.24069.1</MicrosoftDotNetTestProjectTemplates70PackageVersion> <MicrosoftDotNetTestProjectTemplates70PackageVersion>1.1.0-rc.24069.1</MicrosoftDotNetTestProjectTemplates70PackageVersion>
<MicrosoftDotNetTestProjectTemplates80PackageVersion>1.1.0-rc.24120.2</MicrosoftDotNetTestProjectTemplates80PackageVersion> <MicrosoftDotNetTestProjectTemplates80PackageVersion>1.1.0-rc.24202.1</MicrosoftDotNetTestProjectTemplates80PackageVersion>
<MicrosoftDotNetTestProjectTemplates90PackageVersion>1.1.0-rc.24120.2</MicrosoftDotNetTestProjectTemplates90PackageVersion> <MicrosoftDotNetTestProjectTemplates90PackageVersion>1.1.0-rc.24202.1</MicrosoftDotNetTestProjectTemplates90PackageVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- NUnit3.DotNetNew.Template versions do not 'flow in' --> <!-- NUnit3.DotNetNew.Template versions do not 'flow in' -->
@ -77,49 +67,49 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- Dependencies from https://github.com/aspnet/AspNetCore --> <!-- Dependencies from https://github.com/aspnet/AspNetCore -->
<MicrosoftAspNetCoreAppRuntimewinx64PackageVersion>9.0.0-preview.2.24121.1</MicrosoftAspNetCoreAppRuntimewinx64PackageVersion> <MicrosoftAspNetCoreAppRuntimewinx64PackageVersion>9.0.0-preview.4.24202.2</MicrosoftAspNetCoreAppRuntimewinx64PackageVersion>
<MicrosoftAspNetCoreAppRefPackageVersion>9.0.0-preview.2.24121.1</MicrosoftAspNetCoreAppRefPackageVersion> <MicrosoftAspNetCoreAppRefPackageVersion>9.0.0-preview.4.24202.2</MicrosoftAspNetCoreAppRefPackageVersion>
<MicrosoftAspNetCoreAppRefInternalPackageVersion>9.0.0-preview.2.24121.1</MicrosoftAspNetCoreAppRefInternalPackageVersion> <MicrosoftAspNetCoreAppRefInternalPackageVersion>9.0.0-preview.4.24202.2</MicrosoftAspNetCoreAppRefInternalPackageVersion>
<VSRedistCommonAspNetCoreSharedFrameworkx6490PackageVersion>9.0.0-preview.2.24121.1</VSRedistCommonAspNetCoreSharedFrameworkx6490PackageVersion> <VSRedistCommonAspNetCoreSharedFrameworkx6490PackageVersion>9.0.0-preview.4.24202.2</VSRedistCommonAspNetCoreSharedFrameworkx6490PackageVersion>
<DotnetDevCertsPackageVersion>9.0.0-preview.2.24121.1</DotnetDevCertsPackageVersion> <DotnetDevCertsPackageVersion>9.0.0-preview.4.24202.2</DotnetDevCertsPackageVersion>
<DotnetUserJwtsPackageVersion>9.0.0-preview.2.24121.1</DotnetUserJwtsPackageVersion> <DotnetUserJwtsPackageVersion>9.0.0-preview.4.24202.2</DotnetUserJwtsPackageVersion>
<DotnetUserSecretsPackageVersion>9.0.0-preview.2.24121.1</DotnetUserSecretsPackageVersion> <DotnetUserSecretsPackageVersion>9.0.0-preview.4.24202.2</DotnetUserSecretsPackageVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<MicroBuildCorePackageVersion>0.2.0</MicroBuildCorePackageVersion> <MicroBuildCorePackageVersion>0.2.0</MicroBuildCorePackageVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- Dependencies from https://github.com/dotnet/sdk --> <!-- Dependencies from https://github.com/dotnet/sdk -->
<MicrosoftDotNetCommonItemTemplatesPackageVersion>9.0.100-preview.2.24123.3</MicrosoftDotNetCommonItemTemplatesPackageVersion> <MicrosoftDotNetCommonItemTemplatesPackageVersion>9.0.100-preview.4.24202.52</MicrosoftDotNetCommonItemTemplatesPackageVersion>
<MicrosoftNETSdkPackageVersion>9.0.100-preview.2.24123.3</MicrosoftNETSdkPackageVersion> <MicrosoftNETSdkPackageVersion>9.0.100-preview.4.24202.52</MicrosoftNETSdkPackageVersion>
<MicrosoftDotNetMSBuildSdkResolverPackageVersion>9.0.100-preview.2.24123.3</MicrosoftDotNetMSBuildSdkResolverPackageVersion> <MicrosoftDotNetMSBuildSdkResolverPackageVersion>9.0.100-preview.4.24202.52</MicrosoftDotNetMSBuildSdkResolverPackageVersion>
<MicrosoftNETBuildExtensionsPackageVersion>$(MicrosoftNETSdkPackageVersion)</MicrosoftNETBuildExtensionsPackageVersion> <MicrosoftNETBuildExtensionsPackageVersion>$(MicrosoftNETSdkPackageVersion)</MicrosoftNETBuildExtensionsPackageVersion>
<MicrosoftDotnetToolsetInternalPackageVersion>$(MicrosoftNETSdkPackageVersion)</MicrosoftDotnetToolsetInternalPackageVersion> <MicrosoftDotnetToolsetInternalPackageVersion>$(MicrosoftNETSdkPackageVersion)</MicrosoftDotnetToolsetInternalPackageVersion>
<MicrosoftDotnetTemplateLocatorPackageVersion>$(MicrosoftNETSdkPackageVersion)</MicrosoftDotnetTemplateLocatorPackageVersion> <MicrosoftDotnetTemplateLocatorPackageVersion>$(MicrosoftNETSdkPackageVersion)</MicrosoftDotnetTemplateLocatorPackageVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- Dependencies from https://github.com/dotnet/roslyn --> <!-- Dependencies from https://github.com/dotnet/roslyn -->
<MicrosoftNetCompilersToolsetPackageVersion>4.10.0-2.24122.3</MicrosoftNetCompilersToolsetPackageVersion> <MicrosoftNetCompilersToolsetPackageVersion>4.11.0-1.24180.2</MicrosoftNetCompilersToolsetPackageVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- Dependencies from https://github.com/dotnet/corefx --> <!-- Dependencies from https://github.com/dotnet/corefx -->
<MicrosoftNETCorePlatformsPackageVersion>9.0.0-preview.2.24123.1</MicrosoftNETCorePlatformsPackageVersion> <MicrosoftNETCorePlatformsPackageVersion>9.0.0-preview.4.24202.9</MicrosoftNETCorePlatformsPackageVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- Dependencies from https://github.com/dotnet/core-setup --> <!-- Dependencies from https://github.com/dotnet/core-setup -->
<VSRedistCommonNetCoreSharedFrameworkx6490PackageVersion>9.0.0-preview.2.24123.1</VSRedistCommonNetCoreSharedFrameworkx6490PackageVersion> <VSRedistCommonNetCoreSharedFrameworkx6490PackageVersion>9.0.0-preview.4.24202.9</VSRedistCommonNetCoreSharedFrameworkx6490PackageVersion>
<VSRedistCommonNetCoreTargetingPackx6490PackageVersion>9.0.0-preview.2.24123.1</VSRedistCommonNetCoreTargetingPackx6490PackageVersion> <VSRedistCommonNetCoreTargetingPackx6490PackageVersion>9.0.0-preview.4.24202.9</VSRedistCommonNetCoreTargetingPackx6490PackageVersion>
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>9.0.0-preview.2.24123.1</MicrosoftNETCoreAppRuntimewinx64PackageVersion> <MicrosoftNETCoreAppRuntimewinx64PackageVersion>9.0.0-preview.4.24202.9</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
<MicrosoftNETCoreAppHostwinx64PackageVersion>9.0.0-preview.2.24123.1</MicrosoftNETCoreAppHostwinx64PackageVersion> <MicrosoftNETCoreAppHostwinx64PackageVersion>9.0.0-preview.4.24202.9</MicrosoftNETCoreAppHostwinx64PackageVersion>
<MicrosoftNETCoreAppRefPackageVersion>9.0.0-preview.2.24123.1</MicrosoftNETCoreAppRefPackageVersion> <MicrosoftNETCoreAppRefPackageVersion>9.0.0-preview.4.24202.9</MicrosoftNETCoreAppRefPackageVersion>
<NETStandardLibraryRefPackageVersion>2.1.0</NETStandardLibraryRefPackageVersion> <NETStandardLibraryRefPackageVersion>2.1.0</NETStandardLibraryRefPackageVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- Dependencies from https://github.com/dotnet/windowsdesktop --> <!-- Dependencies from https://github.com/dotnet/windowsdesktop -->
<VSRedistCommonWindowsDesktopSharedFrameworkx6490PackageVersion>9.0.0-preview.2.24122.1</VSRedistCommonWindowsDesktopSharedFrameworkx6490PackageVersion> <VSRedistCommonWindowsDesktopSharedFrameworkx6490PackageVersion>9.0.0-preview.4.24202.13</VSRedistCommonWindowsDesktopSharedFrameworkx6490PackageVersion>
<VSRedistCommonWindowsDesktopTargetingPackx6490PackageVersion>9.0.0-preview.2.24122.1</VSRedistCommonWindowsDesktopTargetingPackx6490PackageVersion> <VSRedistCommonWindowsDesktopTargetingPackx6490PackageVersion>9.0.0-preview.4.24202.13</VSRedistCommonWindowsDesktopTargetingPackx6490PackageVersion>
<MicrosoftWindowsDesktopAppRuntimewinx64PackageVersion>9.0.0-preview.2.24122.1</MicrosoftWindowsDesktopAppRuntimewinx64PackageVersion> <MicrosoftWindowsDesktopAppRuntimewinx64PackageVersion>9.0.0-preview.4.24202.13</MicrosoftWindowsDesktopAppRuntimewinx64PackageVersion>
<MicrosoftWindowsDesktopAppRefPackageVersion>9.0.0-preview.2.24122.1</MicrosoftWindowsDesktopAppRefPackageVersion> <MicrosoftWindowsDesktopAppRefPackageVersion>9.0.0-preview.4.24202.13</MicrosoftWindowsDesktopAppRefPackageVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- Runtime and Apphost pack versions are the same for all RIDs. We flow the x64 version above and create aliases without the winx64 here for clarity elsewhere. --> <!-- Runtime and Apphost pack versions are the same for all RIDs. We flow the x64 version above and create aliases without the winx64 here for clarity elsewhere. -->
@ -130,11 +120,11 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- Dependencies from https://github.com/NuGet/NuGet.Client --> <!-- Dependencies from https://github.com/NuGet/NuGet.Client -->
<NuGetBuildTasksPackageVersion>6.10.0-preview.2.41</NuGetBuildTasksPackageVersion> <NuGetBuildTasksPackageVersion>6.10.0-preview.2.97</NuGetBuildTasksPackageVersion>
</PropertyGroup> </PropertyGroup>
<!-- Dependencies from https://github.com/dotnet/deployment-tools --> <!-- Dependencies from https://github.com/dotnet/deployment-tools -->
<PropertyGroup> <PropertyGroup>
<MicrosoftDeploymentDotNetReleasesVersion>2.0.0-preview.1.24113.2</MicrosoftDeploymentDotNetReleasesVersion> <MicrosoftDeploymentDotNetReleasesVersion>2.0.0-preview.1.24172.2</MicrosoftDeploymentDotNetReleasesVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- Automated versions for asp.net templates --> <!-- Automated versions for asp.net templates -->
@ -167,18 +157,14 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- Cross-release dependency versions --> <!-- Cross-release dependency versions -->
<MicrosoftAspNetCoreAppRuntime50PackageVersion>5.0.17</MicrosoftAspNetCoreAppRuntime50PackageVersion>
<MicrosoftAspNetCoreAppRuntime60PackageVersion>6.0.14</MicrosoftAspNetCoreAppRuntime60PackageVersion> <MicrosoftAspNetCoreAppRuntime60PackageVersion>6.0.14</MicrosoftAspNetCoreAppRuntime60PackageVersion>
<MicrosoftAspNetCoreAppRuntime70PackageVersion>7.0.3</MicrosoftAspNetCoreAppRuntime70PackageVersion> <MicrosoftAspNetCoreAppRuntime70PackageVersion>7.0.3</MicrosoftAspNetCoreAppRuntime70PackageVersion>
<MicrosoftDotNetCommonItemTemplates50PackageVersion>5.0.403</MicrosoftDotNetCommonItemTemplates50PackageVersion>
<MicrosoftDotNetCommonItemTemplates60PackageVersion>6.0.302</MicrosoftDotNetCommonItemTemplates60PackageVersion> <MicrosoftDotNetCommonItemTemplates60PackageVersion>6.0.302</MicrosoftDotNetCommonItemTemplates60PackageVersion>
<MicrosoftDotNetCommonItemTemplates70PackageVersion>7.0.100</MicrosoftDotNetCommonItemTemplates70PackageVersion> <MicrosoftDotNetCommonItemTemplates70PackageVersion>7.0.100</MicrosoftDotNetCommonItemTemplates70PackageVersion>
<MicrosoftDotNetCommonItemTemplates80PackageVersion>8.0.100</MicrosoftDotNetCommonItemTemplates80PackageVersion> <MicrosoftDotNetCommonItemTemplates80PackageVersion>8.0.100</MicrosoftDotNetCommonItemTemplates80PackageVersion>
<MicrosoftWinFormsProjectTemplates50PackageVersion>5.0.17-servicing.22215.4</MicrosoftWinFormsProjectTemplates50PackageVersion>
<MicrosoftWinFormsProjectTemplates60PackageVersion>6.0.7-servicing.22322.3</MicrosoftWinFormsProjectTemplates60PackageVersion> <MicrosoftWinFormsProjectTemplates60PackageVersion>6.0.7-servicing.22322.3</MicrosoftWinFormsProjectTemplates60PackageVersion>
<MicrosoftWinFormsProjectTemplates70PackageVersion>7.0.0-rtm.22518.7</MicrosoftWinFormsProjectTemplates70PackageVersion> <MicrosoftWinFormsProjectTemplates70PackageVersion>7.0.0-rtm.22518.7</MicrosoftWinFormsProjectTemplates70PackageVersion>
<MicrosoftWinFormsProjectTemplates80PackageVersion>8.0.0-rtm.23531.5</MicrosoftWinFormsProjectTemplates80PackageVersion> <MicrosoftWinFormsProjectTemplates80PackageVersion>8.0.0-rtm.23531.5</MicrosoftWinFormsProjectTemplates80PackageVersion>
<MicrosoftWPFProjectTemplates50PackageVersion>5.0.17-servicing.22218.2</MicrosoftWPFProjectTemplates50PackageVersion>
<MicrosoftWPFProjectTemplates60PackageVersion>6.0.7-servicing.22322.2</MicrosoftWPFProjectTemplates60PackageVersion> <MicrosoftWPFProjectTemplates60PackageVersion>6.0.7-servicing.22322.2</MicrosoftWPFProjectTemplates60PackageVersion>
<MicrosoftWPFProjectTemplates70PackageVersion>7.0.0-rtm.22518.2</MicrosoftWPFProjectTemplates70PackageVersion> <MicrosoftWPFProjectTemplates70PackageVersion>7.0.0-rtm.22518.2</MicrosoftWPFProjectTemplates70PackageVersion>
<MicrosoftWPFProjectTemplates80PackageVersion>8.0.0-rtm.23531.4</MicrosoftWPFProjectTemplates80PackageVersion> <MicrosoftWPFProjectTemplates80PackageVersion>8.0.0-rtm.23531.4</MicrosoftWPFProjectTemplates80PackageVersion>
@ -218,45 +204,19 @@
<MicrosoftDotnetWinFormsProjectTemplates60PackageVersion>$(MicrosoftWinFormsProjectTemplates60PackageVersion)</MicrosoftDotnetWinFormsProjectTemplates60PackageVersion> <MicrosoftDotnetWinFormsProjectTemplates60PackageVersion>$(MicrosoftWinFormsProjectTemplates60PackageVersion)</MicrosoftDotnetWinFormsProjectTemplates60PackageVersion>
<MicrosoftDotNetWpfProjectTemplates60PackageVersion>$(MicrosoftWPFProjectTemplates60PackageVersion)</MicrosoftDotNetWpfProjectTemplates60PackageVersion> <MicrosoftDotNetWpfProjectTemplates60PackageVersion>$(MicrosoftWPFProjectTemplates60PackageVersion)</MicrosoftDotNetWpfProjectTemplates60PackageVersion>
<NUnit3Templates60PackageVersion>$(NUnit3DotNetNewTemplatePackageVersion)</NUnit3Templates60PackageVersion> <NUnit3Templates60PackageVersion>$(NUnit3DotNetNewTemplatePackageVersion)</NUnit3Templates60PackageVersion>
<!-- 5.0 Template versions -->
<AspNetCorePackageVersionFor50Templates>5.0.17</AspNetCorePackageVersionFor50Templates>
<MicrosoftDotNetCommonProjectTemplates50PackageVersion>$(MicrosoftDotNetCommonItemTemplates50PackageVersion)</MicrosoftDotNetCommonProjectTemplates50PackageVersion>
<MicrosoftDotnetWinFormsProjectTemplates50PackageVersion>$(MicrosoftWinFormsProjectTemplates50PackageVersion)</MicrosoftDotnetWinFormsProjectTemplates50PackageVersion>
<MicrosoftDotNetWpfProjectTemplates50PackageVersion>$(MicrosoftWPFProjectTemplates50PackageVersion)</MicrosoftDotNetWpfProjectTemplates50PackageVersion>
<NUnit3Templates50PackageVersion>$(NUnit3DotNetNewTemplatePackageVersion)</NUnit3Templates50PackageVersion>
<!-- 3.1 Template versions -->
<AspNetCorePackageVersionFor31Templates>3.1.32</AspNetCorePackageVersionFor31Templates>
<MicrosoftAspNetCoreComponentsWebAssemblyTemplatesPackageVersion>3.2.1</MicrosoftAspNetCoreComponentsWebAssemblyTemplatesPackageVersion>
<MicrosoftDotNetCommonItemTemplates31PackageVersion>3.1.27</MicrosoftDotNetCommonItemTemplates31PackageVersion>
<MicrosoftDotNetCommonProjectTemplates31PackageVersion>$(MicrosoftDotNetCommonItemTemplates31PackageVersion)</MicrosoftDotNetCommonProjectTemplates31PackageVersion>
<MicrosoftDotnetWinFormsProjectTemplates31PackageVersion>4.8.1-servicing.19605.5</MicrosoftDotnetWinFormsProjectTemplates31PackageVersion>
<MicrosoftDotNetWpfProjectTemplates31PackageVersion>3.1.2-servicing.20066.4</MicrosoftDotNetWpfProjectTemplates31PackageVersion>
<NUnit3Templates31PackageVersion>1.7.2</NUnit3Templates31PackageVersion>
<!-- 3.0 Template versions -->
<MicrosoftDotnetWinFormsProjectTemplates30PackageVersion>4.8.0-rc2.19462.10</MicrosoftDotnetWinFormsProjectTemplates30PackageVersion>
<MicrosoftDotNetWpfProjectTemplates30PackageVersion>3.0.0</MicrosoftDotNetWpfProjectTemplates30PackageVersion>
<NUnit3Templates30PackageVersion>1.6.5</NUnit3Templates30PackageVersion>
<MicrosoftDotNetCommonItemTemplates30PackageVersion>2.0.0-preview8.19373.1</MicrosoftDotNetCommonItemTemplates30PackageVersion>
<MicrosoftDotNetCommonProjectTemplates30PackageVersion>$(MicrosoftDotNetCommonItemTemplates30PackageVersion)</MicrosoftDotNetCommonProjectTemplates30PackageVersion>
<AspNetCorePackageVersionFor30Templates>3.0.3</AspNetCorePackageVersionFor30Templates>
<!-- 2.1 Template versions -->
<NUnit3Templates21PackageVersion>1.5.3</NUnit3Templates21PackageVersion>
<MicrosoftDotNetCommonItemTemplates21PackageVersion>1.0.2-beta3</MicrosoftDotNetCommonItemTemplates21PackageVersion>
<MicrosoftDotNetCommonProjectTemplates21PackageVersion>$(MicrosoftDotNetCommonItemTemplates21PackageVersion)</MicrosoftDotNetCommonProjectTemplates21PackageVersion>
<AspNetCorePackageVersionFor21Templates>2.1.34</AspNetCorePackageVersionFor21Templates>
</PropertyGroup> </PropertyGroup>
<!-- infrastructure and test only dependencies --> <!-- infrastructure and test only dependencies -->
<PropertyGroup> <PropertyGroup>
<VersionToolsVersion>2.2.0-beta.19072.10</VersionToolsVersion> <VersionToolsVersion>2.2.0-beta.19072.10</VersionToolsVersion>
<DotnetDebToolVersion>2.0.0</DotnetDebToolVersion> <DotnetDebToolVersion>2.0.0</DotnetDebToolVersion>
<MicrosoftNETTestSdkVersion>17.10.0-preview-24120-01</MicrosoftNETTestSdkVersion> <MicrosoftNETTestSdkVersion>17.10.0-release-24177-07</MicrosoftNETTestSdkVersion>
<MicrosoftExtensionsLoggingConsoleVersion>9.0.0-alpha.1.24058.10</MicrosoftExtensionsLoggingConsoleVersion> <MicrosoftExtensionsLoggingConsoleVersion>9.0.0-alpha.1.24058.10</MicrosoftExtensionsLoggingConsoleVersion>
<MicrosoftDotNetScenarioTestsSdkTemplateTestsVersion>9.0.0-preview.24057.2</MicrosoftDotNetScenarioTestsSdkTemplateTestsVersion> <MicrosoftDotNetScenarioTestsSdkTemplateTestsVersion>9.0.0-preview.24176.1</MicrosoftDotNetScenarioTestsSdkTemplateTestsVersion>
</PropertyGroup> </PropertyGroup>
<!-- Workload manifest package versions --> <!-- Workload manifest package versions -->
<PropertyGroup> <PropertyGroup>
<AspireFeatureBand>9.0.100-preview.1</AspireFeatureBand> <AspireFeatureBand>9.0.100-preview.1</AspireFeatureBand>
<MicrosoftNETSdkAspireManifest90100preview1PackageVersion>9.0.0-preview.1.24116.3</MicrosoftNETSdkAspireManifest90100preview1PackageVersion> <MicrosoftNETSdkAspireManifest90100preview1PackageVersion>9.0.0-preview.2.24163.9</MicrosoftNETSdkAspireManifest90100preview1PackageVersion>
<MauiFeatureBand>9.0.100-preview.1</MauiFeatureBand> <MauiFeatureBand>9.0.100-preview.1</MauiFeatureBand>
<MauiWorkloadManifestVersion>9.0.0-preview.1.9973</MauiWorkloadManifestVersion> <MauiWorkloadManifestVersion>9.0.0-preview.1.9973</MauiWorkloadManifestVersion>
<XamarinAndroidWorkloadManifestVersion>34.99.0-preview.1.151</XamarinAndroidWorkloadManifestVersion> <XamarinAndroidWorkloadManifestVersion>34.99.0-preview.1.151</XamarinAndroidWorkloadManifestVersion>
@ -265,7 +225,7 @@
<XamarinMacOSWorkloadManifestVersion>14.2.9088-net9-p1</XamarinMacOSWorkloadManifestVersion> <XamarinMacOSWorkloadManifestVersion>14.2.9088-net9-p1</XamarinMacOSWorkloadManifestVersion>
<XamarinTvOSWorkloadManifestVersion>17.2.9088-net9-p1</XamarinTvOSWorkloadManifestVersion> <XamarinTvOSWorkloadManifestVersion>17.2.9088-net9-p1</XamarinTvOSWorkloadManifestVersion>
<!-- Workloads from dotnet/emsdk --> <!-- Workloads from dotnet/emsdk -->
<MicrosoftNETWorkloadEmscriptenCurrentManifest90100TransportPackageVersion>9.0.0-preview.2.24121.1</MicrosoftNETWorkloadEmscriptenCurrentManifest90100TransportPackageVersion> <MicrosoftNETWorkloadEmscriptenCurrentManifest90100TransportPackageVersion>9.0.0-preview.4.24176.2</MicrosoftNETWorkloadEmscriptenCurrentManifest90100TransportPackageVersion>
<EmscriptenWorkloadManifestVersion>$(MicrosoftNETWorkloadEmscriptenCurrentManifest90100TransportPackageVersion)</EmscriptenWorkloadManifestVersion> <EmscriptenWorkloadManifestVersion>$(MicrosoftNETWorkloadEmscriptenCurrentManifest90100TransportPackageVersion)</EmscriptenWorkloadManifestVersion>
<!-- emsdk workload prerelease version band must match the emsdk feature band --> <!-- emsdk workload prerelease version band must match the emsdk feature band -->
<EmscriptenWorkloadFeatureBand>9.0.100$([System.Text.RegularExpressions.Regex]::Match($(EmscriptenWorkloadManifestVersion), `-[A-z]*[\.]*\d*`))</EmscriptenWorkloadFeatureBand> <EmscriptenWorkloadFeatureBand>9.0.100$([System.Text.RegularExpressions.Regex]::Match($(EmscriptenWorkloadManifestVersion), `-[A-z]*[\.]*\d*`))</EmscriptenWorkloadFeatureBand>

261
eng/build-pr.yml Normal file
View file

@ -0,0 +1,261 @@
parameters:
# Agent OS identifier and used as job name
- name: agentOs
type: string
# Job name
- name: jobName
type: string
# Container to run the build in, if any
- name: container
type: string
default: ''
# Job timeout
- name: timeoutInMinutes
type: number
default: 180
# Build configuration (Debug, Release)
- name: buildConfiguration
type: string
values:
- Debug
- Release
# Build architecture
- name: buildArchitecture
type: string
values:
- arm
- arm64
- x64
- x86
# Linux portable. If true, passes portable switch to build
- name: linuxPortable
type: boolean
default: false
# Runtime Identifier
- name: runtimeIdentifier
type: string
default: ''
# UI lang
- name: dotnetCLIUILanguage
type: string
default: ''
# Additional parameters
- name: additionalBuildParameters
type: string
default: ''
# Run tests
- name: runTests
type: boolean
default: true
# PGO instrumentation jobs
- name: pgoInstrument
type: boolean
default: false
- name: isBuiltFromVmr
displayName: True when build is running from dotnet/dotnet
type: boolean
default: false
jobs:
- template: common/templates/job/job.yml
parameters:
# Set up the name of the job.
${{ if parameters.pgoInstrument }}:
name: PGO_${{ parameters.agentOs }}_${{ parameters.jobName }}
${{ if not(parameters.pgoInstrument) }}:
name: ${{ parameters.agentOs }}_${{ parameters.jobName }}
## Set up the pool/machine info to be used based on the Agent OS
${{ if eq(parameters.agentOs, 'Windows_NT') }}:
enableMicrobuild: true
pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
name: $(DncEngPublicBuildPool)
demands: ImageOverride -equals windows.vs2022.amd64.open
${{ if eq(variables['System.TeamProject'], 'internal') }}:
name: $(DncEngInternalBuildPool)
demands: ImageOverride -equals windows.vs2022.amd64
${{ if eq(parameters.agentOs, 'Linux') }}:
pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
name: $(DncEngPublicBuildPool)
demands: ImageOverride -equals Build.Ubuntu.1804.Amd64.Open
${{ if eq(variables['System.TeamProject'], 'internal') }}:
name: $(DncEngInternalBuildPool)
demands: ImageOverride -equals Build.Ubuntu.1804.Amd64
container: ${{ parameters.container }}
${{ if eq(parameters.agentOs, 'Darwin') }}:
pool:
vmImage: 'macOS-latest'
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
${{ if parameters.isBuiltFromVmr }}:
enableSbom: false
${{ else }}:
enablePublishBuildAssets: true
enablePublishUsingPipelines: true
enableTelemetry: true
helixRepo: dotnet/installer
workspace:
clean: all
# Test parameters
variables:
- ${{ if eq(parameters.agentOs, 'Windows_NT') }}:
- _PackArg: '-pack'
- ${{ if parameters.runTests }}:
- _TestArg: '-test'
- ${{ else }}:
- _TestArg: ''
- ${{ if ne(parameters.agentOs, 'Windows_NT') }}:
- _PackArg: '--pack'
- ${{ if parameters.runTests }}:
- _TestArg: '--test'
- ${{ else }}:
- _TestArg: ''
- ${{ if parameters.pgoInstrument }}:
- _PgoInstrument: '/p:PgoInstrument=true'
- _PackArg: ''
- ${{ else }}:
- _PgoInstrument: ''
- ${{ if parameters.linuxPortable }}:
- _LinuxPortable: '--linux-portable'
- ${{ else }}:
- _LinuxPortable: ''
- ${{ if ne(parameters.runtimeIdentifier, '') }}:
- _RuntimeIdentifier: '--runtime-id ${{ parameters.runtimeIdentifier }}'
- ${{ else }}:
- _RuntimeIdentifier: ''
- _AgentOSName: ${{ parameters.agentOs }}
- _TeamName: Roslyn-Project-System
- _SignType: test
- _BuildArgs: '/p:DotNetSignType=$(_SignType) $(_PgoInstrument)'
- ${{ if parameters.isBuiltFromVmr }}:
- installerRoot: '$(Build.SourcesDirectory)/src/installer'
- _SignType: test
- _PushToVSFeed: false
- _BuildArgs: /p:OfficialBuildId=$(BUILD.BUILDNUMBER)
/p:TeamName=$(_TeamName)
/p:DotNetPublishUsingPipelines=true
/p:PublishToSymbolServer=false
$(_PgoInstrument)
- ${{ else }}:
- installerRoot: '$(Build.SourcesDirectory)'
- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- group: DotNet-HelixApi-Access
- _PushToVSFeed: true
- _SignType: real
- _BuildArgs: /p:OfficialBuildId=$(BUILD.BUILDNUMBER)
/p:DotNetSignType=$(_SignType)
/p:TeamName=$(_TeamName)
/p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines)
$(_PgoInstrument)
- template: /eng/common/templates/variables/pool-providers.yml
steps:
- checkout: self
clean: true
- ${{ if eq(parameters.agentOs, 'Windows_NT') }}:
- ${{ if and(not(parameters.isBuiltFromVmr), ne(variables['System.TeamProject'], 'public')) }}:
- task: PowerShell@2
displayName: Setup Private Feeds Credentials
inputs:
filePath: $(installerRoot)/eng/common/SetupNugetSources.ps1
arguments: -ConfigFile $(installerRoot)/NuGet.config -Password $Env:Token
env:
Token: $(dn-bot-dnceng-artifact-feeds-rw)
- script: $(installerRoot)/build.cmd
$(_TestArg) $(_PackArg)
-publish -ci -sign
-Configuration ${{ parameters.buildConfiguration }}
-Architecture ${{ parameters.buildArchitecture }}
$(_BuildArgs)
${{ parameters.additionalBuildParameters }}
$(_InternalRuntimeDownloadArgs)
displayName: Build
env:
DOTNET_CLI_UI_LANGUAGE: ${{ parameters.dotnetCLIUILanguage }}
- ${{ if ne(parameters.agentOs, 'Windows_NT') }}:
- ${{ if and(not(parameters.isBuiltFromVmr), ne(variables['System.TeamProject'], 'public')) }}:
- task: Bash@3
displayName: Setup Private Feeds Credentials
inputs:
filePath: $(installerRoot)/eng/common/SetupNugetSources.sh
arguments: $(installerRoot)/NuGet.config $Token
env:
Token: $(dn-bot-dnceng-artifact-feeds-rw)
- ${{ if eq(parameters.agentOs, 'Linux') }}:
- script: $(installerRoot)/build.sh
$(_TestArg) $(_PackArg)
--publish --ci
--noprettyprint
--configuration ${{ parameters.buildConfiguration }}
--architecture ${{ parameters.buildArchitecture }}
$(_LinuxPortable)
$(_RuntimeIdentifier)
$(_BuildArgs)
${{ parameters.additionalBuildParameters }}
$(_InternalRuntimeDownloadArgs)
displayName: Build
- ${{ if or(eq(parameters.agentOs, 'Darwin'), eq(parameters.agentOs, 'FreeBSD')) }}:
- script: $(installerRoot)/build.sh
$(_TestArg)
--pack --publish --ci
--noprettyprint
--configuration ${{ parameters.buildConfiguration }}
--architecture ${{ parameters.buildArchitecture }}
$(_RuntimeIdentifier)
$(_BuildArgs)
${{ parameters.additionalBuildParameters }}
$(_InternalRuntimeDownloadArgs)
displayName: Build
- task: PublishTestResults@2
displayName: Publish Test Results
inputs:
testRunner: XUnit
testResultsFiles: 'artifacts/TestResults/${{ parameters.buildConfiguration }}/*.xml'
testRunTitle: '$(_AgentOSName)_$(Agent.JobName)'
platform: '$(BuildPlatform)'
configuration: '${{ parameters.buildConfiguration }}'
condition: ne(variables['_TestArg'], '')
- task: CopyFiles@2
displayName: Gather Logs
inputs:
SourceFolder: '$(installerRoot)/artifacts'
Contents: |
log/${{ parameters.buildConfiguration }}/**/*
TestResults/${{ parameters.buildConfiguration }}/**/*
TargetFolder: '$(Build.ArtifactStagingDirectory)'
continueOnError: true
condition: always()
- task: PublishBuildArtifacts@1
displayName: Publish Logs to VSTS
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: '$(_AgentOSName)_$(Agent.JobName)_$(Build.BuildNumber)'
publishLocation: Container
continueOnError: true
condition: always()

View file

@ -69,7 +69,7 @@ parameters:
default: false default: false
jobs: jobs:
- template: common/templates/job/job.yml - template: common/templates-official/job/job.yml
parameters: parameters:
# Set up the name of the job. # Set up the name of the job.
${{ if parameters.pgoInstrument }}: ${{ if parameters.pgoInstrument }}:
@ -77,28 +77,34 @@ jobs:
${{ if not(parameters.pgoInstrument) }}: ${{ if not(parameters.pgoInstrument) }}:
name: ${{ parameters.agentOs }}_${{ parameters.jobName }} name: ${{ parameters.agentOs }}_${{ parameters.jobName }}
## Set up the pool/machine info to be used based on the Agent OS # Set up the pool/machine info to be used based on the Agent OS
${{ if eq(parameters.agentOs, 'Windows_NT') }}: ${{ if eq(parameters.agentOs, 'Windows_NT') }}:
enableMicrobuild: true enableMicrobuild: true
pool: pool:
${{ if eq(variables['System.TeamProject'], 'public') }}: ${{ if eq(variables['System.TeamProject'], 'public') }}:
name: $(DncEngPublicBuildPool) name: $(DncEngPublicBuildPool)
demands: ImageOverride -equals windows.vs2022.amd64.open image: 1es-windows-2022-open
os: windows
${{ if eq(variables['System.TeamProject'], 'internal') }}: ${{ if eq(variables['System.TeamProject'], 'internal') }}:
name: $(DncEngInternalBuildPool) name: $(DncEngInternalBuildPool)
demands: ImageOverride -equals windows.vs2022.amd64 image: 1es-windows-2022
os: windows
${{ if eq(parameters.agentOs, 'Linux') }}: ${{ if eq(parameters.agentOs, 'Linux') }}:
pool: pool:
${{ if eq(variables['System.TeamProject'], 'public') }}: ${{ if eq(variables['System.TeamProject'], 'public') }}:
name: $(DncEngPublicBuildPool) name: $(DncEngPublicBuildPool)
demands: ImageOverride -equals Build.Ubuntu.2204.Amd64.Open image: 1es-ubuntu-2004-open
os: linux
${{ if eq(variables['System.TeamProject'], 'internal') }}: ${{ if eq(variables['System.TeamProject'], 'internal') }}:
name: $(DncEngInternalBuildPool) name: $(DncEngInternalBuildPool)
demands: ImageOverride -equals Build.Ubuntu.2204.Amd64 image: 1es-ubuntu-2204
os: linux
container: ${{ parameters.container }} container: ${{ parameters.container }}
${{ if eq(parameters.agentOs, 'Darwin') }}: ${{ if eq(parameters.agentOs, 'Darwin') }}:
pool: pool:
vmImage: 'macOS-latest' name: Azure Pipelines
image: macOS-latest
os: macOS
timeoutInMinutes: ${{ parameters.timeoutInMinutes }} timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
${{ if parameters.isBuiltFromVmr }}: ${{ if parameters.isBuiltFromVmr }}:
@ -111,8 +117,8 @@ jobs:
workspace: workspace:
clean: all clean: all
# Test parameters
variables: variables:
# Test variables
- ${{ if eq(parameters.agentOs, 'Windows_NT') }}: - ${{ if eq(parameters.agentOs, 'Windows_NT') }}:
- _PackArg: '-pack' - _PackArg: '-pack'
- ${{ if parameters.runTests }}: - ${{ if parameters.runTests }}:
@ -168,7 +174,7 @@ jobs:
/p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines) /p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines)
$(_PgoInstrument) $(_PgoInstrument)
- template: /eng/common/templates/variables/pool-providers.yml - template: /eng/common/templates-official/variables/pool-providers.yml
steps: steps:
- checkout: self - checkout: self
@ -251,7 +257,7 @@ jobs:
continueOnError: true continueOnError: true
condition: always() condition: always()
- task: PublishBuildArtifacts@1 - task: 1ES.PublishBuildArtifacts@1
displayName: Publish Logs to VSTS displayName: Publish Logs to VSTS
inputs: inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)' PathtoPublish: '$(Build.ArtifactStagingDirectory)'

View file

@ -35,7 +35,7 @@ Set-StrictMode -Version 2.0
. $PSScriptRoot\tools.ps1 . $PSScriptRoot\tools.ps1
# Add source entry to PackageSources # 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']") $packageSource = $sources.SelectSingleNode("add[@key='$SourceName']")
if ($packageSource -eq $null) if ($packageSource -eq $null)
@ -48,12 +48,11 @@ function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Usern
else { else {
Write-Host "Package source $SourceName already present." Write-Host "Package source $SourceName already present."
} }
AddCredential -Creds $creds -Source $SourceName -Username $Username -pwd $pwd
AddCredential -Creds $creds -Source $SourceName -Username $Username -Password $Password
} }
# Add a credential node for the specified source # 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. # Looks for credential configuration for the given SourceName. Create it if none is found.
$sourceElement = $creds.SelectSingleNode($Source) $sourceElement = $creds.SelectSingleNode($Source)
if ($sourceElement -eq $null) if ($sourceElement -eq $null)
@ -82,17 +81,18 @@ function AddCredential($creds, $source, $username, $password) {
$passwordElement.SetAttribute("key", "ClearTextPassword") $passwordElement.SetAttribute("key", "ClearTextPassword")
$sourceElement.AppendChild($passwordElement) | Out-Null $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')]") $maestroPrivateSources = $Sources.SelectNodes("add[contains(@key,'darc-int')]")
Write-Host "Inserting credentials for $($maestroPrivateSources.Count) Maestro's private feeds." Write-Host "Inserting credentials for $($maestroPrivateSources.Count) Maestro's private feeds."
ForEach ($PackageSource in $maestroPrivateSources) { ForEach ($PackageSource in $maestroPrivateSources) {
Write-Host "`tInserting credential for Maestro's feed:" $PackageSource.Key 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" $userName = "dn-bot"
# Insert credential nodes for Maestro's private feeds # 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 # 3.1 uses a different feed url format so it's handled differently here
$dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']") $dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']")
if ($dotnet31Source -ne $null) { 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" -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 -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 -pwd $Password
} }
$dotnetVersions = @('5','6','7','8') $dotnetVersions = @('5','6','7','8')
@ -159,8 +159,8 @@ foreach ($dotnetVersion in $dotnetVersions) {
$feedPrefix = "dotnet" + $dotnetVersion; $feedPrefix = "dotnet" + $dotnetVersion;
$dotnetSource = $sources.SelectSingleNode("add[@key='$feedPrefix']") $dotnetSource = $sources.SelectSingleNode("add[@key='$feedPrefix']")
if ($dotnetSource -ne $null) { 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" -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 -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 -pwd $Password
} }
} }

View file

@ -125,7 +125,6 @@ function Build {
/p:Test=$test ` /p:Test=$test `
/p:Pack=$pack ` /p:Pack=$pack `
/p:DotNetBuildRepo=$($productBuild -or $verticalBuild) ` /p:DotNetBuildRepo=$($productBuild -or $verticalBuild) `
/p:ArcadeBuildVertical=$verticalBuild `
/p:IntegrationTest=$integrationTest ` /p:IntegrationTest=$integrationTest `
/p:PerformanceTest=$performanceTest ` /p:PerformanceTest=$performanceTest `
/p:Sign=$sign ` /p:Sign=$sign `

View file

@ -241,7 +241,6 @@ function Build {
/p:DotNetBuildRepo=$product_build \ /p:DotNetBuildRepo=$product_build \
/p:ArcadeBuildFromSource=$source_build \ /p:ArcadeBuildFromSource=$source_build \
/p:DotNetBuildSourceOnly=$source_build \ /p:DotNetBuildSourceOnly=$source_build \
/p:ArcadeBuildVertical=$vertical_build \
/p:Rebuild=$rebuild \ /p:Rebuild=$rebuild \
/p:Test=$test \ /p:Test=$test \
/p:Pack=$pack \ /p:Pack=$pack \

View file

@ -63,7 +63,7 @@ if [ -z "$CLR_CC" ]; then
# Set default versions # Set default versions
if [ -z "$majorVersion" ]; then if [ -z "$majorVersion" ]; then
# note: gcc (all versions) and clang versions higher than 6 do not have minor version in file name, if it is zero. # note: gcc (all versions) and clang versions higher than 6 do not have minor version in file name, if it is zero.
if [ "$compiler" = "clang" ]; then versions="17 16 15 14 13 12 11 10 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5" if [ "$compiler" = "clang" ]; then versions="18 17 16 15 14 13 12 11 10 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5"
elif [ "$compiler" = "gcc" ]; then versions="13 12 11 10 9 8 7 6 5 4.9"; fi elif [ "$compiler" = "gcc" ]; then versions="13 12 11 10 9 8 7 6 5 4.9"; fi
for version in $versions; do for version in $versions; do
@ -125,8 +125,8 @@ if [ -z "$CC" ]; then
exit 1 exit 1
fi fi
# Only lld version >= 9 can be considered stable. lld doesn't support s390x. # Only lld version >= 9 can be considered stable. lld supports s390x starting from 18.0.
if [ "$compiler" = "clang" ] && [ -n "$majorVersion" ] && [ "$majorVersion" -ge 9 ] && [ "$build_arch" != "s390x" ]; then if [ "$compiler" = "clang" ] && [ -n "$majorVersion" ] && [ "$majorVersion" -ge 9 ] && ([ "$build_arch" != "s390x" ] || [ "$majorVersion" -ge 18 ]); then
if "$CC" -fuse-ld=lld -Wl,--version >/dev/null 2>&1; then if "$CC" -fuse-ld=lld -Wl,--version >/dev/null 2>&1; then
LDFLAGS="-fuse-ld=lld" LDFLAGS="-fuse-ld=lld"
fi fi

View file

@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/bin/sh
# getNonPortableDistroRid # getNonPortableDistroRid
# #
@ -11,21 +11,20 @@
# non-portable rid # non-portable rid
getNonPortableDistroRid() getNonPortableDistroRid()
{ {
local targetOs="$1" targetOs="$1"
local targetArch="$2" targetArch="$2"
local rootfsDir="$3" rootfsDir="$3"
local nonPortableRid="" nonPortableRid=""
if [ "$targetOs" = "linux" ]; then if [ "$targetOs" = "linux" ]; then
# shellcheck disable=SC1091
if [ -e "${rootfsDir}/etc/os-release" ]; then if [ -e "${rootfsDir}/etc/os-release" ]; then
source "${rootfsDir}/etc/os-release" . "${rootfsDir}/etc/os-release"
if [ "${ID}" = "rhel" ] || [ "${ID}" = "rocky" ] || [ "${ID}" = "alpine" ] || [ "${ID}" = "ol" ]; then
if [[ "${ID}" == "rhel" || "${ID}" == "rocky" || "${ID}" == "alpine" ]]; then VERSION_ID="${VERSION_ID%.*}" # Remove the last version digit for these distros
# remove the last version digit
VERSION_ID="${VERSION_ID%.*}"
fi fi
if [[ "${VERSION_ID:-}" =~ ^([[:digit:]]|\.)+$ ]]; then if echo "${VERSION_ID:-}" | grep -qE '^([[:digit:]]|\.)+$'; then
nonPortableRid="${ID}.${VERSION_ID}-${targetArch}" nonPortableRid="${ID}.${VERSION_ID}-${targetArch}"
else else
# Rolling release distros either do not set VERSION_ID, set it as blank or # Rolling release distros either do not set VERSION_ID, set it as blank or
@ -33,45 +32,45 @@ getNonPortableDistroRid()
# so omit it here to be consistent with everything else. # so omit it here to be consistent with everything else.
nonPortableRid="${ID}-${targetArch}" nonPortableRid="${ID}-${targetArch}"
fi fi
elif [ -e "${rootfsDir}/android_platform" ]; then elif [ -e "${rootfsDir}/android_platform" ]; then
source "$rootfsDir"/android_platform # shellcheck disable=SC1091
. "${rootfsDir}/android_platform"
nonPortableRid="$RID" nonPortableRid="$RID"
fi fi
fi fi
if [ "$targetOs" = "freebsd" ]; then if [ "$targetOs" = "freebsd" ]; then
# $rootfsDir can be empty. freebsd-version is shell script and it should always work. # $rootfsDir can be empty. freebsd-version is a shell script and should always work.
__freebsd_major_version=$($rootfsDir/bin/freebsd-version | { read v; echo "${v%%.*}"; }) __freebsd_major_version=$("$rootfsDir"/bin/freebsd-version | cut -d'.' -f1)
nonPortableRid="freebsd.$__freebsd_major_version-${targetArch}" nonPortableRid="freebsd.$__freebsd_major_version-${targetArch}"
elif command -v getprop && getprop ro.product.system.model 2>&1 | grep -qi android; then elif command -v getprop >/dev/null && getprop ro.product.system.model | grep -qi android; then
__android_sdk_version=$(getprop ro.build.version.sdk) __android_sdk_version=$(getprop ro.build.version.sdk)
nonPortableRid="android.$__android_sdk_version-${targetArch}" nonPortableRid="android.$__android_sdk_version-${targetArch}"
elif [ "$targetOs" = "illumos" ]; then elif [ "$targetOs" = "illumos" ]; then
__uname_version=$(uname -v) __uname_version=$(uname -v)
case "$__uname_version" in case "$__uname_version" in
omnios-*) omnios-*)
__omnios_major_version=$(echo "${__uname_version:8:2}") __omnios_major_version=$(echo "$__uname_version" | cut -c9-10)
nonPortableRid=omnios."$__omnios_major_version"-"$targetArch" nonPortableRid="omnios.$__omnios_major_version-${targetArch}"
;; ;;
joyent_*) joyent_*)
__smartos_major_version=$(echo "${__uname_version:7:4}") __smartos_major_version=$(echo "$__uname_version" | cut -c9-10)
nonPortableRid=smartos."$__smartos_major_version"-"$targetArch" nonPortableRid="smartos.$__smartos_major_version-${targetArch}"
;; ;;
illumos_*) *)
nonPortableRid=openindiana-"$targetArch" nonPortableRid="illumos-${targetArch}"
;; ;;
esac esac
elif [ "$targetOs" = "solaris" ]; then elif [ "$targetOs" = "solaris" ]; then
__uname_version=$(uname -v) __uname_version=$(uname -v)
__solaris_major_version=$(echo "${__uname_version%.*}") __solaris_major_version=$(echo "$__uname_version" | cut -d'.' -f1)
nonPortableRid=solaris."$__solaris_major_version"-"$targetArch" nonPortableRid="solaris.$__solaris_major_version-${targetArch}"
elif [ "$targetOs" = "haiku" ]; then elif [ "$targetOs" = "haiku" ]; then
__uname_release=$(uname -r) __uname_release="$(uname -r)"
nonPortableRid=haiku.r"$__uname_release"-"$targetArch" nonPortableRid=haiku.r"$__uname_release"-"$targetArch"
fi fi
echo "$(echo $nonPortableRid | tr '[:upper:]' '[:lower:]')" echo "$nonPortableRid" | tr '[:upper:]' '[:lower:]'
} }
# initDistroRidGlobal # initDistroRidGlobal
@ -85,26 +84,23 @@ getNonPortableDistroRid()
# None # None
# #
# Notes: # Notes:
#
# It is important to note that the function does not return anything, but it # It is important to note that the function does not return anything, but it
# exports the following variables on success: # exports the following variables on success:
#
# __DistroRid : Non-portable rid of the target platform. # __DistroRid : Non-portable rid of the target platform.
# __PortableTargetOS : OS-part of the portable rid that corresponds to the target platform. # __PortableTargetOS : OS-part of the portable rid that corresponds to the target platform.
#
initDistroRidGlobal() initDistroRidGlobal()
{ {
local targetOs="$1" targetOs="$1"
local targetArch="$2" targetArch="$2"
local rootfsDir="" rootfsDir=""
if [ "$#" -ge 3 ]; then if [ $# -ge 3 ]; then
rootfsDir="$3" rootfsDir="$3"
fi fi
if [ -n "${rootfsDir}" ]; then if [ -n "${rootfsDir}" ]; then
# We may have a cross build. Check for the existence of the rootfsDir # We may have a cross build. Check for the existence of the rootfsDir
if [ ! -e "${rootfsDir}" ]; then if [ ! -e "${rootfsDir}" ]; then
echo "Error rootfsDir has been passed, but the location is not valid." echo "Error: rootfsDir has been passed, but the location is not valid."
exit 1 exit 1
fi fi
fi fi
@ -119,7 +115,7 @@ initDistroRidGlobal()
STRINGS="$(command -v llvm-strings || true)" STRINGS="$(command -v llvm-strings || true)"
fi fi
# Check for musl-based distros (e.g Alpine Linux, Void Linux). # Check for musl-based distros (e.g. Alpine Linux, Void Linux).
if "${rootfsDir}/usr/bin/ldd" --version 2>&1 | grep -q musl || if "${rootfsDir}/usr/bin/ldd" --version 2>&1 | grep -q musl ||
( [ -n "$STRINGS" ] && "$STRINGS" "${rootfsDir}/usr/bin/ldd" 2>&1 | grep -q musl ); then ( [ -n "$STRINGS" ] && "$STRINGS" "${rootfsDir}/usr/bin/ldd" 2>&1 | grep -q musl ); then
__PortableTargetOS="linux-musl" __PortableTargetOS="linux-musl"

View file

@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/bin/sh
# Use uname to determine what the OS is. # Use uname to determine what the OS is.
OSName=$(uname -s | tr '[:upper:]' '[:lower:]') OSName=$(uname -s | tr '[:upper:]' '[:lower:]')
@ -54,6 +54,7 @@ case "$CPUName" in
;; ;;
armv7l|armv8l) armv7l|armv8l)
# shellcheck disable=SC1091
if (NAME=""; . /etc/os-release; test "$NAME" = "Tizen"); then if (NAME=""; . /etc/os-release; test "$NAME" = "Tizen"); then
arch=armel arch=armel
else else

View file

@ -0,0 +1,264 @@
# Internal resources (telemetry, microbuild) can only be accessed from non-public projects,
# and some (Microbuild) should only be applied to non-PR cases for internal builds.
parameters:
# Job schema parameters - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#job
cancelTimeoutInMinutes: ''
condition: ''
container: ''
continueOnError: false
dependsOn: ''
displayName: ''
pool: ''
steps: []
strategy: ''
timeoutInMinutes: ''
variables: []
workspace: ''
templateContext: ''
# Job base template specific parameters
# See schema documentation - https://github.com/dotnet/arcade/blob/master/Documentation/AzureDevOps/TemplateSchema.md
artifacts: ''
enableMicrobuild: false
enablePublishBuildArtifacts: false
enablePublishBuildAssets: false
enablePublishTestResults: false
enablePublishUsingPipelines: false
enableBuildRetry: false
disableComponentGovernance: ''
componentGovernanceIgnoreDirectories: ''
mergeTestResults: false
testRunTitle: ''
testResultsFormat: ''
name: ''
preSteps: []
runAsPublic: false
# Sbom related params
enableSbom: true
PackageVersion: 7.0.0
BuildDropPath: '$(Build.SourcesDirectory)/artifacts'
jobs:
- job: ${{ parameters.name }}
${{ if ne(parameters.cancelTimeoutInMinutes, '') }}:
cancelTimeoutInMinutes: ${{ parameters.cancelTimeoutInMinutes }}
${{ if ne(parameters.condition, '') }}:
condition: ${{ parameters.condition }}
${{ if ne(parameters.container, '') }}:
container: ${{ parameters.container }}
${{ if ne(parameters.continueOnError, '') }}:
continueOnError: ${{ parameters.continueOnError }}
${{ if ne(parameters.dependsOn, '') }}:
dependsOn: ${{ parameters.dependsOn }}
${{ if ne(parameters.displayName, '') }}:
displayName: ${{ parameters.displayName }}
${{ if ne(parameters.pool, '') }}:
pool: ${{ parameters.pool }}
${{ if ne(parameters.strategy, '') }}:
strategy: ${{ parameters.strategy }}
${{ 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
value: '$(Build.Repository.Uri)'
- ${{ if eq(parameters.enableRichCodeNavigation, 'true') }}:
- name: EnableRichCodeNavigation
value: 'true'
# Retry signature validation up to three times, waiting 2 seconds between attempts.
# See https://learn.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu3028#retry-untrusted-root-failures
- name: NUGET_EXPERIMENTAL_CHAIN_BUILD_RETRY_POLICY
value: 3,2000
- ${{ each variable in parameters.variables }}:
# handle name-value variable syntax
# example:
# - name: [key]
# value: [value]
- ${{ if ne(variable.name, '') }}:
- name: ${{ variable.name }}
value: ${{ variable.value }}
# handle variable groups
- ${{ if ne(variable.group, '') }}:
- group: ${{ variable.group }}
# handle template variable syntax
# example:
# - template: path/to/template.yml
# parameters:
# [key]: [value]
- ${{ if ne(variable.template, '') }}:
- template: ${{ variable.template }}
${{ if ne(variable.parameters, '') }}:
parameters: ${{ variable.parameters }}
# handle key-value variable syntax.
# example:
# - [key]: [value]
- ${{ if and(eq(variable.name, ''), eq(variable.group, ''), eq(variable.template, '')) }}:
- ${{ each pair in variable }}:
- name: ${{ pair.key }}
value: ${{ pair.value }}
# DotNet-HelixApi-Access provides 'HelixApiAccessToken' for internal builds
- ${{ if and(eq(parameters.enableTelemetry, 'true'), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- group: DotNet-HelixApi-Access
${{ if ne(parameters.workspace, '') }}:
workspace: ${{ parameters.workspace }}
steps:
- ${{ if ne(parameters.preSteps, '') }}:
- ${{ each preStep in parameters.preSteps }}:
- ${{ preStep }}
- ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- ${{ if eq(parameters.enableMicrobuild, 'true') }}:
- task: MicroBuildSigningPlugin@4
displayName: Install MicroBuild plugin
inputs:
signType: $(_SignType)
zipSources: false
feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json
env:
TeamName: $(_TeamName)
MicroBuildOutputFolderOverride: '$(Agent.TempDirectory)'
continueOnError: ${{ parameters.continueOnError }}
condition: and(succeeded(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT'))
- ${{ if and(eq(parameters.runAsPublic, 'false'), eq(variables['System.TeamProject'], 'internal')) }}:
- task: NuGetAuthenticate@1
- ${{ if and(ne(parameters.artifacts.download, 'false'), ne(parameters.artifacts.download, '')) }}:
- task: DownloadPipelineArtifact@2
inputs:
buildType: current
artifactName: ${{ coalesce(parameters.artifacts.download.name, 'Artifacts_$(Agent.OS)_$(_BuildConfig)') }}
targetPath: ${{ coalesce(parameters.artifacts.download.path, 'artifacts') }}
itemPattern: ${{ coalesce(parameters.artifacts.download.pattern, '**') }}
- ${{ each step in parameters.steps }}:
- ${{ step }}
- ${{ if eq(parameters.enableRichCodeNavigation, true) }}:
- task: RichCodeNavIndexer@0
displayName: RichCodeNav Upload
inputs:
languages: ${{ coalesce(parameters.richCodeNavigationLanguage, 'csharp') }}
environment: ${{ coalesce(parameters.richCodeNavigationEnvironment, 'internal') }}
richNavLogOutputDirectory: $(Build.SourcesDirectory)/artifacts/bin
uploadRichNavArtifacts: ${{ coalesce(parameters.richCodeNavigationUploadArtifacts, false) }}
continueOnError: true
- template: /eng/common/templates-official/steps/component-governance.yml
parameters:
${{ if eq(parameters.disableComponentGovernance, '') }}:
${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(parameters.runAsPublic, 'false'), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/dotnet/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/microsoft/'), eq(variables['Build.SourceBranch'], 'refs/heads/main'))) }}:
disableComponentGovernance: false
${{ else }}:
disableComponentGovernance: true
${{ else }}:
disableComponentGovernance: ${{ parameters.disableComponentGovernance }}
componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }}
- ${{ if eq(parameters.enableMicrobuild, 'true') }}:
- ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- task: MicroBuildCleanup@1
displayName: Execute Microbuild cleanup tasks
condition: and(always(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT'))
continueOnError: ${{ parameters.continueOnError }}
env:
TeamName: $(_TeamName)
- ${{ if ne(parameters.artifacts.publish, '') }}:
- ${{ if and(ne(parameters.artifacts.publish.artifacts, 'false'), ne(parameters.artifacts.publish.artifacts, '')) }}:
- task: CopyFiles@2
displayName: Gather binaries for publish to artifacts
inputs:
SourceFolder: 'artifacts/bin'
Contents: '**'
TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/bin'
- task: CopyFiles@2
displayName: Gather packages for publish to artifacts
inputs:
SourceFolder: 'artifacts/packages'
Contents: '**'
TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/packages'
- task: 1ES.PublishBuildArtifacts@1
displayName: Publish pipeline artifacts
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts'
PublishLocation: Container
ArtifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }}
continueOnError: true
condition: always()
- ${{ if and(ne(parameters.artifacts.publish.logs, 'false'), ne(parameters.artifacts.publish.logs, '')) }}:
- task: 1ES.PublishPipelineArtifact@1
inputs:
targetPath: 'artifacts/log'
artifactName: ${{ coalesce(parameters.artifacts.publish.logs.name, 'Logs_Build_$(Agent.Os)_$(_BuildConfig)') }}
displayName: 'Publish logs'
continueOnError: true
condition: always()
- ${{ if ne(parameters.enablePublishBuildArtifacts, 'false') }}:
- task: 1ES.PublishBuildArtifacts@1
displayName: Publish Logs
inputs:
PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)'
PublishLocation: Container
ArtifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)' ) }}
continueOnError: true
condition: always()
- ${{ if or(and(eq(parameters.enablePublishTestResults, 'true'), eq(parameters.testResultsFormat, '')), eq(parameters.testResultsFormat, 'xunit')) }}:
- task: PublishTestResults@2
displayName: Publish XUnit Test Results
inputs:
testResultsFormat: 'xUnit'
testResultsFiles: '*.xml'
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)'
testRunTitle: ${{ coalesce(parameters.testRunTitle, parameters.name, '$(System.JobName)') }}-xunit
mergeTestResults: ${{ parameters.mergeTestResults }}
continueOnError: true
condition: always()
- ${{ if or(and(eq(parameters.enablePublishTestResults, 'true'), eq(parameters.testResultsFormat, '')), eq(parameters.testResultsFormat, 'vstest')) }}:
- task: PublishTestResults@2
displayName: Publish TRX Test Results
inputs:
testResultsFormat: 'VSTest'
testResultsFiles: '*.trx'
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)'
testRunTitle: ${{ coalesce(parameters.testRunTitle, parameters.name, '$(System.JobName)') }}-trx
mergeTestResults: ${{ parameters.mergeTestResults }}
continueOnError: true
condition: always()
- ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(parameters.enableSbom, 'true')) }}:
- template: /eng/common/templates-official/steps/generate-sbom.yml
parameters:
PackageVersion: ${{ parameters.packageVersion}}
BuildDropPath: ${{ parameters.buildDropPath }}
IgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }}
- ${{ if eq(parameters.enableBuildRetry, 'true') }}:
- task: 1ES.PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)\eng\common\BuildConfiguration'
artifactName: 'BuildConfiguration'
displayName: 'Publish build retry configuration'
continueOnError: true

View file

@ -0,0 +1,112 @@
parameters:
# Optional: dependencies of the job
dependsOn: ''
# Optional: A defined YAML pool - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#pool
pool: ''
CeapexPat: $(dn-bot-ceapex-package-r) # PAT for the loc AzDO instance https://dev.azure.com/ceapex
GithubPat: $(BotAccount-dotnet-bot-repo-PAT)
SourcesDirectory: $(Build.SourcesDirectory)
CreatePr: true
AutoCompletePr: false
ReusePr: true
UseLfLineEndings: true
UseCheckedInLocProjectJson: false
SkipLocProjectJsonGeneration: false
LanguageSet: VS_Main_Languages
LclSource: lclFilesInRepo
LclPackageId: ''
RepoType: gitHub
GitHubOrg: dotnet
MirrorRepo: ''
MirrorBranch: main
condition: ''
JobNameSuffix: ''
jobs:
- job: OneLocBuild${{ parameters.JobNameSuffix }}
dependsOn: ${{ parameters.dependsOn }}
displayName: OneLocBuild${{ parameters.JobNameSuffix }}
variables:
- group: OneLocBuildVariables # Contains the CeapexPat and GithubPat
- name: _GenerateLocProjectArguments
value: -SourcesDirectory ${{ parameters.SourcesDirectory }}
-LanguageSet "${{ parameters.LanguageSet }}"
-CreateNeutralXlfs
- ${{ if eq(parameters.UseCheckedInLocProjectJson, 'true') }}:
- name: _GenerateLocProjectArguments
value: ${{ variables._GenerateLocProjectArguments }} -UseCheckedInLocProjectJson
- template: /eng/common/templates-official/variables/pool-providers.yml
${{ if ne(parameters.pool, '') }}:
pool: ${{ parameters.pool }}
${{ if eq(parameters.pool, '') }}:
pool:
# We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com)
${{ if eq(variables['System.TeamProject'], 'DevDiv') }}:
name: AzurePipelines-EO
image: 1ESPT-Windows2022
demands: Cmd
os: windows
# If it's not devdiv, it's dnceng
${{ if ne(variables['System.TeamProject'], 'DevDiv') }}:
name: $(DncEngInternalBuildPool)
image: 1es-windows-2022
os: windows
steps:
- ${{ if ne(parameters.SkipLocProjectJsonGeneration, 'true') }}:
- task: Powershell@2
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/generate-locproject.ps1
arguments: $(_GenerateLocProjectArguments)
displayName: Generate LocProject.json
condition: ${{ parameters.condition }}
- task: OneLocBuild@2
displayName: OneLocBuild
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
inputs:
locProj: eng/Localize/LocProject.json
outDir: $(Build.ArtifactStagingDirectory)
lclSource: ${{ parameters.LclSource }}
lclPackageId: ${{ parameters.LclPackageId }}
isCreatePrSelected: ${{ parameters.CreatePr }}
isAutoCompletePrSelected: ${{ parameters.AutoCompletePr }}
${{ if eq(parameters.CreatePr, true) }}:
isUseLfLineEndingsSelected: ${{ parameters.UseLfLineEndings }}
${{ if eq(parameters.RepoType, 'gitHub') }}:
isShouldReusePrSelected: ${{ parameters.ReusePr }}
packageSourceAuth: patAuth
patVariable: ${{ parameters.CeapexPat }}
${{ if eq(parameters.RepoType, 'gitHub') }}:
repoType: ${{ parameters.RepoType }}
gitHubPatVariable: "${{ parameters.GithubPat }}"
${{ if ne(parameters.MirrorRepo, '') }}:
isMirrorRepoSelected: true
gitHubOrganization: ${{ parameters.GitHubOrg }}
mirrorRepo: ${{ parameters.MirrorRepo }}
mirrorBranch: ${{ parameters.MirrorBranch }}
condition: ${{ parameters.condition }}
- task: 1ES.PublishBuildArtifacts@1
displayName: Publish Localization Files
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)/loc'
PublishLocation: Container
ArtifactName: Loc
condition: ${{ parameters.condition }}
- task: 1ES.PublishBuildArtifacts@1
displayName: Publish LocProject.json
inputs:
PathtoPublish: '$(Build.SourcesDirectory)/eng/Localize/'
PublishLocation: Container
ArtifactName: Loc
condition: ${{ parameters.condition }}

View file

@ -0,0 +1,159 @@
parameters:
configuration: 'Debug'
# Optional: condition for the job to run
condition: ''
# Optional: 'true' if future jobs should run even if this job fails
continueOnError: false
# Optional: dependencies of the job
dependsOn: ''
# Optional: Include PublishBuildArtifacts task
enablePublishBuildArtifacts: false
# Optional: A defined YAML pool - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#pool
pool: {}
# Optional: should run as a public build even in the internal project
# if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects.
runAsPublic: false
# Optional: whether the build's artifacts will be published using release pipelines or direct feed publishing
publishUsingPipelines: false
# Optional: whether the build's artifacts will be published using release pipelines or direct feed publishing
publishAssetsImmediately: false
artifactsPublishingAdditionalParameters: ''
signingValidationAdditionalParameters: ''
jobs:
- job: Asset_Registry_Publish
dependsOn: ${{ parameters.dependsOn }}
timeoutInMinutes: 150
${{ if eq(parameters.publishAssetsImmediately, 'true') }}:
displayName: Publish Assets
${{ else }}:
displayName: Publish to Build Asset Registry
variables:
- template: /eng/common/templates-official/variables/pool-providers.yml
- ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- group: Publish-Build-Assets
- group: AzureDevOps-Artifact-Feeds-Pats
- name: runCodesignValidationInjection
value: false
# unconditional - needed for logs publishing (redactor tool version)
- template: /eng/common/templates-official/post-build/common-variables.yml
pool:
# We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com)
${{ if eq(variables['System.TeamProject'], 'DevDiv') }}:
name: AzurePipelines-EO
image: 1ESPT-Windows2022
demands: Cmd
os: windows
# If it's not devdiv, it's dnceng
${{ if ne(variables['System.TeamProject'], 'DevDiv') }}:
name: NetCore1ESPool-Publishing-Internal
image: windows.vs2019.amd64
os: windows
steps:
- ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- checkout: self
fetchDepth: 3
clean: true
- task: DownloadBuildArtifacts@0
displayName: Download artifact
inputs:
artifactName: AssetManifests
downloadPath: '$(Build.StagingDirectory)/Download'
checkDownloadedFiles: true
condition: ${{ parameters.condition }}
continueOnError: ${{ parameters.continueOnError }}
- task: NuGetAuthenticate@1
- task: PowerShell@2
displayName: Publish Build Assets
inputs:
filePath: eng\common\sdk-task.ps1
arguments: -task PublishBuildAssets -restore -msbuildEngine dotnet
/p:ManifestsPath='$(Build.StagingDirectory)/Download/AssetManifests'
/p:BuildAssetRegistryToken=$(MaestroAccessToken)
/p:MaestroApiEndpoint=https://maestro.dot.net
/p:PublishUsingPipelines=${{ parameters.publishUsingPipelines }}
/p:OfficialBuildId=$(Build.BuildNumber)
condition: ${{ parameters.condition }}
continueOnError: ${{ parameters.continueOnError }}
- task: powershell@2
displayName: Create ReleaseConfigs Artifact
inputs:
targetType: inline
script: |
New-Item -Path "$(Build.StagingDirectory)/ReleaseConfigs" -ItemType Directory -Force
$filePath = "$(Build.StagingDirectory)/ReleaseConfigs/ReleaseConfigs.txt"
Add-Content -Path $filePath -Value $(BARBuildId)
Add-Content -Path $filePath -Value "$(DefaultChannels)"
Add-Content -Path $filePath -Value $(IsStableBuild)
- task: 1ES.PublishBuildArtifacts@1
displayName: Publish ReleaseConfigs Artifact
inputs:
PathtoPublish: '$(Build.StagingDirectory)/ReleaseConfigs'
PublishLocation: Container
ArtifactName: ReleaseConfigs
- task: powershell@2
displayName: Check if SymbolPublishingExclusionsFile.txt exists
inputs:
targetType: inline
script: |
$symbolExclusionfile = "$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt"
if(Test-Path -Path $symbolExclusionfile)
{
Write-Host "SymbolExclusionFile exists"
Write-Host "##vso[task.setvariable variable=SymbolExclusionFile]true"
}
else{
Write-Host "Symbols Exclusion file does not exists"
Write-Host "##vso[task.setvariable variable=SymbolExclusionFile]false"
}
- task: 1ES.PublishBuildArtifacts@1
displayName: Publish SymbolPublishingExclusionsFile Artifact
condition: eq(variables['SymbolExclusionFile'], 'true')
inputs:
PathtoPublish: '$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt'
PublishLocation: Container
ArtifactName: ReleaseConfigs
- ${{ if eq(parameters.publishAssetsImmediately, 'true') }}:
- template: /eng/common/templates-official/post-build/setup-maestro-vars.yml
parameters:
BARBuildId: ${{ parameters.BARBuildId }}
PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }}
- task: PowerShell@2
displayName: Publish Using Darc
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1
arguments: -BuildId $(BARBuildId)
-PublishingInfraVersion 3
-AzdoToken '$(publishing-dnceng-devdiv-code-r-build-re)'
-MaestroToken '$(MaestroApiAccessToken)'
-WaitPublishingFinish true
-ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}'
-SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}'
- ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}:
- template: /eng/common/templates-official/steps/publish-logs.yml
parameters:
JobLabel: 'Publish_Artifacts_Logs'

View file

@ -0,0 +1,67 @@
parameters:
# This template adds arcade-powered source-build to CI. The template produces a server job with a
# default ID 'Source_Build_Complete' to put in a dependency list if necessary.
# Specifies the prefix for source-build jobs added to pipeline. Use this if disambiguation needed.
jobNamePrefix: 'Source_Build'
# Defines the platform on which to run the job. By default, a linux-x64 machine, suitable for
# managed-only repositories. This is an object with these properties:
#
# name: ''
# The name of the job. This is included in the job ID.
# targetRID: ''
# The name of the target RID to use, instead of the one auto-detected by Arcade.
# nonPortable: false
# Enables non-portable mode. This means a more specific RID (e.g. fedora.32-x64 rather than
# linux-x64), and compiling against distro-provided packages rather than portable ones.
# skipPublishValidation: false
# Disables publishing validation. By default, a check is performed to ensure no packages are
# published by source-build.
# container: ''
# A container to use. Runs in docker.
# pool: {}
# A pool to use. Runs directly on an agent.
# buildScript: ''
# Specifies the build script to invoke to perform the build in the repo. The default
# './build.sh' should work for typical Arcade repositories, but this is customizable for
# difficult situations.
# jobProperties: {}
# A list of job properties to inject at the top level, for potential extensibility beyond
# container and pool.
platform: {}
jobs:
- job: ${{ parameters.jobNamePrefix }}_${{ parameters.platform.name }}
displayName: Source-Build (${{ parameters.platform.name }})
${{ each property in parameters.platform.jobProperties }}:
${{ property.key }}: ${{ property.value }}
${{ if ne(parameters.platform.container, '') }}:
container: ${{ parameters.platform.container }}
${{ if eq(parameters.platform.pool, '') }}:
# The default VM host AzDO pool. This should be capable of running Docker containers: almost all
# source-build builds run in Docker, including the default managed platform.
# /eng/common/templates-official/variables/pool-providers.yml can't be used here (some customers declare variables already), so duplicate its logic
pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore-Svc-Public' ), False, 'NetCore-Public')]
demands: ImageOverride -equals build.ubuntu.1804.amd64
${{ if eq(variables['System.TeamProject'], 'internal') }}:
name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore1ESPool-Svc-Internal'), False, 'NetCore1ESPool-Internal')]
image: 1es-mariner-2
os: linux
${{ if ne(parameters.platform.pool, '') }}:
pool: ${{ parameters.platform.pool }}
workspace:
clean: all
steps:
- template: /eng/common/templates-official/steps/source-build.yml
parameters:
platform: ${{ parameters.platform }}

View file

@ -0,0 +1,67 @@
parameters:
runAsPublic: false
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: []
binlogPath: artifacts/log/Debug/Build.binlog
condition: ''
dependsOn: ''
pool: ''
jobs:
- job: SourceIndexStage1
dependsOn: ${{ parameters.dependsOn }}
condition: ${{ parameters.condition }}
variables:
- name: SourceIndexPackageVersion
value: ${{ parameters.sourceIndexPackageVersion }}
- name: SourceIndexPackageSource
value: ${{ parameters.sourceIndexPackageSource }}
- name: BinlogPath
value: ${{ parameters.binlogPath }}
- ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- group: source-dot-net stage1 variables
- template: /eng/common/templates-official/variables/pool-providers.yml
${{ if ne(parameters.pool, '') }}:
pool: ${{ parameters.pool }}
${{ if eq(parameters.pool, '') }}:
pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
name: $(DncEngPublicBuildPool)
image: windows.vs2022.amd64.open
${{ if eq(variables['System.TeamProject'], 'internal') }}:
name: $(DncEngInternalBuildPool)
image: windows.vs2022.amd64
steps:
- ${{ each preStep in parameters.preSteps }}:
- ${{ preStep }}
- task: UseDotNet@2
displayName: Use .NET 8 SDK
inputs:
packageType: sdk
version: 8.0.x
installationPath: $(Agent.TempDirectory)/dotnet
workingDirectory: $(Agent.TempDirectory)
- script: |
$(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version $(SourceIndexPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools
$(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version $(SourceIndexPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools
displayName: Download Tools
# Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk.
workingDirectory: $(Agent.TempDirectory)
- script: ${{ parameters.sourceIndexBuildCommand }}
displayName: Build Repository
- script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i $(BinlogPath) -r $(Build.SourcesDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output
displayName: Process Binlog into indexable sln
- ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- script: $(Agent.TempDirectory)/.source-index/tools/UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name)
displayName: Upload stage1 artifacts to source index
env:
BLOB_CONTAINER_URL: $(source-dot-net-stage1-blob-container-url)

View file

@ -0,0 +1,31 @@
parameters:
# See schema documentation in /Documentation/AzureDevOps/TemplateSchema.md
continueOnError: false
# Required: A collection of jobs to run - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#job
jobs: []
# Optional: if specified, restore and use this version of Guardian instead of the default.
overrideGuardianVersion: ''
jobs:
- template: /eng/common/templates-official/jobs/jobs.yml
parameters:
enableMicrobuild: false
enablePublishBuildArtifacts: false
enablePublishTestResults: false
enablePublishBuildAssets: false
enablePublishUsingPipelines: false
enableTelemetry: true
variables:
- group: Publish-Build-Assets
# The Guardian version specified in 'eng/common/sdl/packages.config'. This value must be kept in
# sync with the packages.config file.
- name: DefaultGuardianVersion
value: 0.109.0
- name: GuardianPackagesConfigFile
value: $(Build.SourcesDirectory)\eng\common\sdl\packages.config
- name: GuardianVersion
value: ${{ coalesce(parameters.overrideGuardianVersion, '$(DefaultGuardianVersion)') }}
jobs: ${{ parameters.jobs }}

View file

@ -0,0 +1,97 @@
parameters:
# See schema documentation in /Documentation/AzureDevOps/TemplateSchema.md
continueOnError: false
# Optional: Include PublishBuildArtifacts task
enablePublishBuildArtifacts: false
# Optional: Enable publishing using release pipelines
enablePublishUsingPipelines: false
# Optional: Enable running the source-build jobs to build repo from source
enableSourceBuild: false
# Optional: Parameters for source-build template.
# See /eng/common/templates-official/jobs/source-build.yml for options
sourceBuildParameters: []
graphFileGeneration:
# Optional: Enable generating the graph files at the end of the build
enabled: false
# Optional: Include toolset dependencies in the generated graph files
includeToolset: false
# Required: A collection of jobs to run - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#job
jobs: []
# Optional: Override automatically derived dependsOn value for "publish build assets" job
publishBuildAssetsDependsOn: ''
# Optional: Publish the assets as soon as the publish to BAR stage is complete, rather doing so in a separate stage.
publishAssetsImmediately: false
# Optional: If using publishAssetsImmediately and additional parameters are needed, can be used to send along additional parameters (normally sent to post-build.yml)
artifactsPublishingAdditionalParameters: ''
signingValidationAdditionalParameters: ''
# Optional: should run as a public build even in the internal project
# if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects.
runAsPublic: false
enableSourceIndex: false
sourceIndexParams: {}
# Internal resources (telemetry, microbuild) can only be accessed from non-public projects,
# and some (Microbuild) should only be applied to non-PR cases for internal builds.
jobs:
- ${{ each job in parameters.jobs }}:
- template: ../job/job.yml
parameters:
# pass along parameters
${{ each parameter in parameters }}:
${{ if ne(parameter.key, 'jobs') }}:
${{ parameter.key }}: ${{ parameter.value }}
# pass along job properties
${{ each property in job }}:
${{ if ne(property.key, 'job') }}:
${{ property.key }}: ${{ property.value }}
name: ${{ job.job }}
- ${{ if eq(parameters.enableSourceBuild, true) }}:
- template: /eng/common/templates-official/jobs/source-build.yml
parameters:
allCompletedJobId: Source_Build_Complete
${{ each parameter in parameters.sourceBuildParameters }}:
${{ parameter.key }}: ${{ parameter.value }}
- ${{ if eq(parameters.enableSourceIndex, 'true') }}:
- template: ../job/source-index-stage1.yml
parameters:
runAsPublic: ${{ parameters.runAsPublic }}
${{ each parameter in parameters.sourceIndexParams }}:
${{ parameter.key }}: ${{ parameter.value }}
- ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- ${{ if or(eq(parameters.enablePublishBuildAssets, true), eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, '')) }}:
- template: ../job/publish-build-assets.yml
parameters:
continueOnError: ${{ parameters.continueOnError }}
dependsOn:
- ${{ if ne(parameters.publishBuildAssetsDependsOn, '') }}:
- ${{ each job in parameters.publishBuildAssetsDependsOn }}:
- ${{ job.job }}
- ${{ if eq(parameters.publishBuildAssetsDependsOn, '') }}:
- ${{ each job in parameters.jobs }}:
- ${{ job.job }}
- ${{ if eq(parameters.enableSourceBuild, true) }}:
- Source_Build_Complete
runAsPublic: ${{ parameters.runAsPublic }}
publishUsingPipelines: ${{ parameters.enablePublishUsingPipelines }}
publishAssetsImmediately: ${{ parameters.publishAssetsImmediately }}
enablePublishBuildArtifacts: ${{ parameters.enablePublishBuildArtifacts }}
artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }}
signingValidationAdditionalParameters: ${{ parameters.signingValidationAdditionalParameters }}

View file

@ -0,0 +1,46 @@
parameters:
# This template adds arcade-powered source-build to CI. A job is created for each platform, as
# well as an optional server job that completes when all platform jobs complete.
# The name of the "join" job for all source-build platforms. If set to empty string, the job is
# not included. Existing repo pipelines can use this job depend on all source-build jobs
# completing without maintaining a separate list of every single job ID: just depend on this one
# server job. By default, not included. Recommended name if used: 'Source_Build_Complete'.
allCompletedJobId: ''
# See /eng/common/templates-official/job/source-build.yml
jobNamePrefix: 'Source_Build'
# This is the default platform provided by Arcade, intended for use by a managed-only repo.
defaultManagedPlatform:
name: 'Managed'
container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8'
# Defines the platforms on which to run build jobs. One job is created for each platform, and the
# object in this array is sent to the job template as 'platform'. If no platforms are specified,
# one job runs on 'defaultManagedPlatform'.
platforms: []
jobs:
- ${{ if ne(parameters.allCompletedJobId, '') }}:
- job: ${{ parameters.allCompletedJobId }}
displayName: Source-Build Complete
pool: server
dependsOn:
- ${{ each platform in parameters.platforms }}:
- ${{ parameters.jobNamePrefix }}_${{ platform.name }}
- ${{ if eq(length(parameters.platforms), 0) }}:
- ${{ parameters.jobNamePrefix }}_${{ parameters.defaultManagedPlatform.name }}
- ${{ each platform in parameters.platforms }}:
- template: /eng/common/templates-official/job/source-build.yml
parameters:
jobNamePrefix: ${{ parameters.jobNamePrefix }}
platform: ${{ platform }}
- ${{ if eq(length(parameters.platforms), 0) }}:
- template: /eng/common/templates-official/job/source-build.yml
parameters:
jobNamePrefix: ${{ parameters.jobNamePrefix }}
platform: ${{ parameters.defaultManagedPlatform }}

View file

@ -0,0 +1,24 @@
variables:
- group: Publish-Build-Assets
# Whether the build is internal or not
- name: IsInternalBuild
value: ${{ and(ne(variables['System.TeamProject'], 'public'), contains(variables['Build.SourceBranch'], 'internal')) }}
# Default Maestro++ API Endpoint and API Version
- name: MaestroApiEndPoint
value: "https://maestro.dot.net"
- name: MaestroApiAccessToken
value: $(MaestroAccessToken)
- name: MaestroApiVersion
value: "2020-02-20"
- name: SourceLinkCLIVersion
value: 3.0.0
- name: SymbolToolVersion
value: 1.0.1
- name: BinlogToolVersion
value: 1.0.11
- name: runCodesignValidationInjection
value: false

View file

@ -0,0 +1,285 @@
parameters:
# Which publishing infra should be used. THIS SHOULD MATCH THE VERSION ON THE BUILD MANIFEST.
# Publishing V1 is no longer supported
# Publishing V2 is no longer supported
# Publishing V3 is the default
- name: publishingInfraVersion
displayName: Which version of publishing should be used to promote the build definition?
type: number
default: 3
values:
- 3
- name: BARBuildId
displayName: BAR Build Id
type: number
default: 0
- name: PromoteToChannelIds
displayName: Channel to promote BARBuildId to
type: string
default: ''
- name: enableSourceLinkValidation
displayName: Enable SourceLink validation
type: boolean
default: false
- name: enableSigningValidation
displayName: Enable signing validation
type: boolean
default: true
- name: enableSymbolValidation
displayName: Enable symbol validation
type: boolean
default: false
- name: enableNugetValidation
displayName: Enable NuGet validation
type: boolean
default: true
- name: publishInstallersAndChecksums
displayName: Publish installers and checksums
type: boolean
default: true
- name: SDLValidationParameters
type: object
default:
enable: false
publishGdn: false
continueOnError: false
params: ''
artifactNames: ''
downloadArtifacts: true
# These parameters let the user customize the call to sdk-task.ps1 for publishing
# symbols & general artifacts as well as for signing validation
- name: symbolPublishingAdditionalParameters
displayName: Symbol publishing additional parameters
type: string
default: ''
- name: artifactsPublishingAdditionalParameters
displayName: Artifact publishing additional parameters
type: string
default: ''
- name: signingValidationAdditionalParameters
displayName: Signing validation additional parameters
type: string
default: ''
# Which stages should finish execution before post-build stages start
- name: validateDependsOn
type: object
default:
- build
- name: publishDependsOn
type: object
default:
- Validate
# Optional: Call asset publishing rather than running in a separate stage
- name: publishAssetsImmediately
type: boolean
default: false
stages:
- ${{ if or(eq( parameters.enableNugetValidation, 'true'), eq(parameters.enableSigningValidation, 'true'), eq(parameters.enableSourceLinkValidation, 'true'), eq(parameters.SDLValidationParameters.enable, 'true')) }}:
- stage: Validate
dependsOn: ${{ parameters.validateDependsOn }}
displayName: Validate Build Assets
variables:
- template: common-variables.yml
- template: /eng/common/templates-official/variables/pool-providers.yml
jobs:
- job:
displayName: NuGet Validation
condition: and(succeededOrFailed(), eq( ${{ parameters.enableNugetValidation }}, 'true'))
pool:
# We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com)
${{ if eq(variables['System.TeamProject'], 'DevDiv') }}:
name: AzurePipelines-EO
image: 1ESPT-Windows2022
demands: Cmd
os: windows
# If it's not devdiv, it's dnceng
${{ else }}:
name: $(DncEngInternalBuildPool)
image: 1es-windows-2022
os: windows
steps:
- template: setup-maestro-vars.yml
parameters:
BARBuildId: ${{ parameters.BARBuildId }}
PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }}
- task: DownloadBuildArtifacts@0
displayName: Download Package Artifacts
inputs:
buildType: specific
buildVersionToDownload: specific
project: $(AzDOProjectName)
pipeline: $(AzDOPipelineId)
buildId: $(AzDOBuildId)
artifactName: PackageArtifacts
checkDownloadedFiles: true
- task: PowerShell@2
displayName: Validate
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/post-build/nuget-validation.ps1
arguments: -PackagesPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/
-ToolDestinationPath $(Agent.BuildDirectory)/Extract/
- job:
displayName: Signing Validation
condition: and( eq( ${{ parameters.enableSigningValidation }}, 'true'), ne( variables['PostBuildSign'], 'true'))
pool:
# We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com)
${{ if eq(variables['System.TeamProject'], 'DevDiv') }}:
name: AzurePipelines-EO
image: 1ESPT-Windows2022
demands: Cmd
os: windows
# If it's not devdiv, it's dnceng
${{ else }}:
name: $(DncEngInternalBuildPool)
image: 1es-windows-2022
os: windows
steps:
- template: setup-maestro-vars.yml
parameters:
BARBuildId: ${{ parameters.BARBuildId }}
PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }}
- task: DownloadBuildArtifacts@0
displayName: Download Package Artifacts
inputs:
buildType: specific
buildVersionToDownload: specific
project: $(AzDOProjectName)
pipeline: $(AzDOPipelineId)
buildId: $(AzDOBuildId)
artifactName: PackageArtifacts
checkDownloadedFiles: true
itemPattern: |
**
!**/Microsoft.SourceBuild.Intermediate.*.nupkg
# This is necessary whenever we want to publish/restore to an AzDO private feed
# Since sdk-task.ps1 tries to restore packages we need to do this authentication here
# otherwise it'll complain about accessing a private feed.
- task: NuGetAuthenticate@1
displayName: 'Authenticate to AzDO Feeds'
# Signing validation will optionally work with the buildmanifest file which is downloaded from
# Azure DevOps above.
- task: PowerShell@2
displayName: Validate
inputs:
filePath: eng\common\sdk-task.ps1
arguments: -task SigningValidation -restore -msbuildEngine vs
/p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts'
/p:SignCheckExclusionsFile='$(Build.SourcesDirectory)/eng/SignCheckExclusionsFile.txt'
${{ parameters.signingValidationAdditionalParameters }}
- template: ../steps/publish-logs.yml
parameters:
StageLabel: 'Validation'
JobLabel: 'Signing'
BinlogToolVersion: $(BinlogToolVersion)
- job:
displayName: SourceLink Validation
condition: eq( ${{ parameters.enableSourceLinkValidation }}, 'true')
pool:
# We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com)
${{ if eq(variables['System.TeamProject'], 'DevDiv') }}:
name: AzurePipelines-EO
image: 1ESPT-Windows2022
demands: Cmd
os: windows
# If it's not devdiv, it's dnceng
${{ else }}:
name: $(DncEngInternalBuildPool)
image: 1es-windows-2022
os: windows
steps:
- template: setup-maestro-vars.yml
parameters:
BARBuildId: ${{ parameters.BARBuildId }}
PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }}
- task: DownloadBuildArtifacts@0
displayName: Download Blob Artifacts
inputs:
buildType: specific
buildVersionToDownload: specific
project: $(AzDOProjectName)
pipeline: $(AzDOPipelineId)
buildId: $(AzDOBuildId)
artifactName: BlobArtifacts
checkDownloadedFiles: true
- task: PowerShell@2
displayName: Validate
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/post-build/sourcelink-validation.ps1
arguments: -InputPath $(Build.ArtifactStagingDirectory)/BlobArtifacts/
-ExtractPath $(Agent.BuildDirectory)/Extract/
-GHRepoName $(Build.Repository.Name)
-GHCommit $(Build.SourceVersion)
-SourcelinkCliVersion $(SourceLinkCLIVersion)
continueOnError: true
- ${{ if ne(parameters.publishAssetsImmediately, 'true') }}:
- stage: publish_using_darc
${{ if or(eq(parameters.enableNugetValidation, 'true'), eq(parameters.enableSigningValidation, 'true'), eq(parameters.enableSourceLinkValidation, 'true'), eq(parameters.SDLValidationParameters.enable, 'true')) }}:
dependsOn: ${{ parameters.publishDependsOn }}
${{ else }}:
dependsOn: ${{ parameters.validateDependsOn }}
displayName: Publish using Darc
variables:
- template: common-variables.yml
- template: /eng/common/templates-official/variables/pool-providers.yml
jobs:
- job:
displayName: Publish Using Darc
timeoutInMinutes: 120
pool:
# We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com)
${{ if eq(variables['System.TeamProject'], 'DevDiv') }}:
name: AzurePipelines-EO
image: 1ESPT-Windows2022
demands: Cmd
os: windows
# If it's not devdiv, it's dnceng
${{ else }}:
name: NetCore1ESPool-Publishing-Internal
image: windows.vs2019.amd64
os: windows
steps:
- template: setup-maestro-vars.yml
parameters:
BARBuildId: ${{ parameters.BARBuildId }}
PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }}
- task: NuGetAuthenticate@1
- task: PowerShell@2
displayName: Publish Using Darc
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1
arguments: -BuildId $(BARBuildId)
-PublishingInfraVersion ${{ parameters.publishingInfraVersion }}
-AzdoToken '$(publishing-dnceng-devdiv-code-r-build-re)'
-MaestroToken '$(MaestroApiAccessToken)'
-WaitPublishingFinish true
-ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}'
-SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}'

View file

@ -0,0 +1,70 @@
parameters:
BARBuildId: ''
PromoteToChannelIds: ''
steps:
- ${{ if eq(coalesce(parameters.PromoteToChannelIds, 0), 0) }}:
- task: DownloadBuildArtifacts@0
displayName: Download Release Configs
inputs:
buildType: current
artifactName: ReleaseConfigs
checkDownloadedFiles: true
- task: PowerShell@2
name: setReleaseVars
displayName: Set Release Configs Vars
inputs:
targetType: inline
pwsh: true
script: |
try {
if (!$Env:PromoteToMaestroChannels -or $Env:PromoteToMaestroChannels.Trim() -eq '') {
$Content = Get-Content $(Build.StagingDirectory)/ReleaseConfigs/ReleaseConfigs.txt
$BarId = $Content | Select -Index 0
$Channels = $Content | Select -Index 1
$IsStableBuild = $Content | Select -Index 2
$AzureDevOpsProject = $Env:System_TeamProject
$AzureDevOpsBuildDefinitionId = $Env:System_DefinitionId
$AzureDevOpsBuildId = $Env:Build_BuildId
}
else {
$buildApiEndpoint = "${Env:MaestroApiEndPoint}/api/builds/${Env:BARBuildId}?api-version=${Env:MaestroApiVersion}"
$apiHeaders = New-Object 'System.Collections.Generic.Dictionary[[String],[String]]'
$apiHeaders.Add('Accept', 'application/json')
$apiHeaders.Add('Authorization',"Bearer ${Env:MAESTRO_API_TOKEN}")
$buildInfo = try { Invoke-WebRequest -Method Get -Uri $buildApiEndpoint -Headers $apiHeaders | ConvertFrom-Json } catch { Write-Host "Error: $_" }
$BarId = $Env:BARBuildId
$Channels = $Env:PromoteToMaestroChannels -split ","
$Channels = $Channels -join "]["
$Channels = "[$Channels]"
$IsStableBuild = $buildInfo.stable
$AzureDevOpsProject = $buildInfo.azureDevOpsProject
$AzureDevOpsBuildDefinitionId = $buildInfo.azureDevOpsBuildDefinitionId
$AzureDevOpsBuildId = $buildInfo.azureDevOpsBuildId
}
Write-Host "##vso[task.setvariable variable=BARBuildId]$BarId"
Write-Host "##vso[task.setvariable variable=TargetChannels]$Channels"
Write-Host "##vso[task.setvariable variable=IsStableBuild]$IsStableBuild"
Write-Host "##vso[task.setvariable variable=AzDOProjectName]$AzureDevOpsProject"
Write-Host "##vso[task.setvariable variable=AzDOPipelineId]$AzureDevOpsBuildDefinitionId"
Write-Host "##vso[task.setvariable variable=AzDOBuildId]$AzureDevOpsBuildId"
}
catch {
Write-Host $_
Write-Host $_.Exception
Write-Host $_.ScriptStackTrace
exit 1
}
env:
MAESTRO_API_TOKEN: $(MaestroApiAccessToken)
BARBuildId: ${{ parameters.BARBuildId }}
PromoteToMaestroChannels: ${{ parameters.PromoteToChannelIds }}

View file

@ -0,0 +1,13 @@
parameters:
ChannelId: 0
steps:
- task: PowerShell@2
displayName: Triggering subscriptions
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/post-build/trigger-subscriptions.ps1
arguments: -SourceRepo $(Build.Repository.Uri)
-ChannelId ${{ parameters.ChannelId }}
-MaestroApiAccessToken $(MaestroAccessToken)
-MaestroApiEndPoint $(MaestroApiEndPoint)
-MaestroApiVersion $(MaestroApiVersion)

View file

@ -0,0 +1,13 @@
parameters:
ChannelId: 0
steps:
- task: PowerShell@2
displayName: Add Build to Channel
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/post-build/add-build-to-channel.ps1
arguments: -BuildId $(BARBuildId)
-ChannelId ${{ parameters.ChannelId }}
-MaestroApiAccessToken $(MaestroApiAccessToken)
-MaestroApiEndPoint $(MaestroApiEndPoint)
-MaestroApiVersion $(MaestroApiVersion)

View file

@ -0,0 +1,13 @@
parameters:
disableComponentGovernance: false
componentGovernanceIgnoreDirectories: ''
steps:
- ${{ if eq(parameters.disableComponentGovernance, 'true') }}:
- script: "echo ##vso[task.setvariable variable=skipComponentGovernanceDetection]true"
displayName: Set skipComponentGovernanceDetection variable
- ${{ if ne(parameters.disableComponentGovernance, 'true') }}:
- task: ComponentGovernanceComponentDetection@0
continueOnError: true
inputs:
ignoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }}

View file

@ -0,0 +1,48 @@
# BuildDropPath - The root folder of the drop directory for which the manifest file will be generated.
# PackageName - The name of the package this SBOM represents.
# PackageVersion - The version of the package this SBOM represents.
# ManifestDirPath - The path of the directory where the generated manifest files will be placed
# IgnoreDirectories - Directories to ignore for SBOM generation. This will be passed through to the CG component detector.
parameters:
PackageVersion: 7.0.0
BuildDropPath: '$(Build.SourcesDirectory)/artifacts'
PackageName: '.NET'
ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom
IgnoreDirectories: ''
sbomContinueOnError: true
steps:
- task: PowerShell@2
displayName: Prep for SBOM generation in (Non-linux)
condition: or(eq(variables['Agent.Os'], 'Windows_NT'), eq(variables['Agent.Os'], 'Darwin'))
inputs:
filePath: ./eng/common/generate-sbom-prep.ps1
arguments: ${{parameters.manifestDirPath}}
# Chmodding is a workaround for https://github.com/dotnet/arcade/issues/8461
- script: |
chmod +x ./eng/common/generate-sbom-prep.sh
./eng/common/generate-sbom-prep.sh ${{parameters.manifestDirPath}}
displayName: Prep for SBOM generation in (Linux)
condition: eq(variables['Agent.Os'], 'Linux')
continueOnError: ${{ parameters.sbomContinueOnError }}
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
displayName: 'Generate SBOM manifest'
continueOnError: ${{ parameters.sbomContinueOnError }}
inputs:
PackageName: ${{ parameters.packageName }}
BuildDropPath: ${{ parameters.buildDropPath }}
PackageVersion: ${{ parameters.packageVersion }}
ManifestDirPath: ${{ parameters.manifestDirPath }}
${{ if ne(parameters.IgnoreDirectories, '') }}:
AdditionalComponentDetectorArgs: '--IgnoreDirectories ${{ parameters.IgnoreDirectories }}'
- task: 1ES.PublishPipelineArtifact@1
displayName: Publish SBOM manifest
continueOnError: ${{parameters.sbomContinueOnError}}
inputs:
targetPath: '${{parameters.manifestDirPath}}'
artifactName: $(ARTIFACT_NAME)

View file

@ -0,0 +1,49 @@
parameters:
StageLabel: ''
JobLabel: ''
CustomSensitiveDataList: ''
# A default - in case value from eng/common/templates-official/post-build/common-variables.yml is not passed
BinlogToolVersion: '1.0.11'
steps:
- task: Powershell@2
displayName: Prepare Binlogs to Upload
inputs:
targetType: inline
script: |
New-Item -ItemType Directory $(Build.SourcesDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/
Move-Item -Path $(Build.SourcesDirectory)/artifacts/log/Debug/* $(Build.SourcesDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/
continueOnError: true
condition: always()
- task: PowerShell@2
displayName: Redact Logs
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/post-build/redact-logs.ps1
# For now this needs to have explicit list of all sensitive data. Taken from eng/publishing/v3/publish.yml
# Sensitive data can as well be added to $(Build.SourcesDirectory)/eng/BinlogSecretsRedactionFile.txt'
# If the file exists - sensitive data for redaction will be sourced from it
# (single entry per line, lines starting with '# ' are considered comments and skipped)
arguments: -InputPath '$(Build.SourcesDirectory)/PostBuildLogs'
-BinlogToolVersion ${{parameters.BinlogToolVersion}}
-TokensFilePath '$(Build.SourcesDirectory)/eng/BinlogSecretsRedactionFile.txt'
'$(publishing-dnceng-devdiv-code-r-build-re)'
'$(MaestroAccessToken)'
'$(dn-bot-all-orgs-artifact-feeds-rw)'
'$(akams-client-id)'
'$(akams-client-secret)'
'$(microsoft-symbol-server-pat)'
'$(symweb-symbol-server-pat)'
'$(dn-bot-all-orgs-build-rw-code-rw)'
${{parameters.CustomSensitiveDataList}}
continueOnError: true
condition: always()
- task: 1ES.PublishBuildArtifacts@1
displayName: Publish Logs
inputs:
PathtoPublish: '$(Build.SourcesDirectory)/PostBuildLogs'
PublishLocation: Container
ArtifactName: PostBuildLogs
continueOnError: true
condition: always()

View file

@ -0,0 +1,28 @@
parameters:
# Optional azure devops PAT with build execute permissions for the build's organization,
# only needed if the build that should be retained ran on a different organization than
# the pipeline where this template is executing from
Token: ''
# Optional BuildId to retain, defaults to the current running build
BuildId: ''
# Azure devops Organization URI for the build in the https://dev.azure.com/<organization> format.
# Defaults to the organization the current pipeline is running on
AzdoOrgUri: '$(System.CollectionUri)'
# Azure devops project for the build. Defaults to the project the current pipeline is running on
AzdoProject: '$(System.TeamProject)'
steps:
- task: powershell@2
inputs:
targetType: 'filePath'
filePath: eng/common/retain-build.ps1
pwsh: true
arguments: >
-AzdoOrgUri: ${{parameters.AzdoOrgUri}}
-AzdoProject ${{parameters.AzdoProject}}
-Token ${{coalesce(parameters.Token, '$env:SYSTEM_ACCESSTOKEN') }}
-BuildId ${{coalesce(parameters.BuildId, '$env:BUILD_ID')}}
displayName: Enable permanent build retention
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
BUILD_ID: $(Build.BuildId)

View file

@ -0,0 +1,93 @@
# Please remember to update the documentation if you make changes to these parameters!
parameters:
HelixSource: 'pr/default' # required -- sources must start with pr/, official/, prodcon/, or agent/
HelixType: 'tests/default/' # required -- Helix telemetry which identifies what type of data this is; should include "test" for clarity and must end in '/'
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
WorkItemDirectory: '' # optional -- a payload directory to zip up and send to Helix; requires WorkItemCommand; incompatible with XUnitProjects
WorkItemCommand: '' # optional -- a command to execute on the payload; requires WorkItemDirectory; incompatible with XUnitProjects
WorkItemTimeout: '' # optional -- a timeout in TimeSpan.Parse-ready value (e.g. 00:02:00) for the work item command; requires WorkItemDirectory; incompatible with XUnitProjects
CorrelationPayloadDirectory: '' # optional -- a directory to zip up and send to Helix as a correlation payload
XUnitProjects: '' # optional -- semicolon-delimited list of XUnitProjects to parse and send to Helix; requires XUnitRuntimeTargetFramework, XUnitPublishTargetFramework, XUnitRunnerVersion, and IncludeDotNetCli=true
XUnitWorkItemTimeout: '' # optional -- the workitem timeout in seconds for all workitems created from the xUnit projects specified by XUnitProjects
XUnitPublishTargetFramework: '' # optional -- framework to use to publish your xUnit projects
XUnitRuntimeTargetFramework: '' # optional -- framework to use for the xUnit console runner
XUnitRunnerVersion: '' # optional -- version of the xUnit nuget package you wish to use on Helix; required for XUnitProjects
IncludeDotNetCli: false # optional -- true will download a version of the .NET CLI onto the Helix machine as a correlation payload; requires DotNetCliPackageType and DotNetCliVersion
DotNetCliPackageType: '' # optional -- either 'sdk', 'runtime' or 'aspnetcore-runtime'; determines whether the sdk or runtime will be sent to Helix; see https://raw.githubusercontent.com/dotnet/core/main/release-notes/releases-index.json
DotNetCliVersion: '' # optional -- version of the CLI to send to Helix; based on this: https://raw.githubusercontent.com/dotnet/core/main/release-notes/releases-index.json
WaitForWorkItemCompletion: true # optional -- true will make the task wait until work items have been completed and fail the build if work items fail. False is "fire and forget."
IsExternal: false # [DEPRECATED] -- doesn't do anything, jobs are external if HelixAccessToken is empty and Creator is set
HelixBaseUri: 'https://helix.dot.net/' # optional -- sets the Helix API base URI (allows targeting https://helix.int-dot.net )
Creator: '' # optional -- if the build is external, use this to specify who is sending the job
DisplayNamePrefix: 'Run Tests' # optional -- rename the beginning of the displayName of the steps in AzDO
condition: succeeded() # optional -- condition for step to execute; defaults to succeeded()
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/${{ 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)
HelixSource: ${{ parameters.HelixSource }}
HelixType: ${{ parameters.HelixType }}
HelixBuild: ${{ parameters.HelixBuild }}
HelixConfiguration: ${{ parameters.HelixConfiguration }}
HelixTargetQueues: ${{ parameters.HelixTargetQueues }}
HelixAccessToken: ${{ parameters.HelixAccessToken }}
HelixPreCommands: ${{ parameters.HelixPreCommands }}
HelixPostCommands: ${{ parameters.HelixPostCommands }}
WorkItemDirectory: ${{ parameters.WorkItemDirectory }}
WorkItemCommand: ${{ parameters.WorkItemCommand }}
WorkItemTimeout: ${{ parameters.WorkItemTimeout }}
CorrelationPayloadDirectory: ${{ parameters.CorrelationPayloadDirectory }}
XUnitProjects: ${{ parameters.XUnitProjects }}
XUnitWorkItemTimeout: ${{ parameters.XUnitWorkItemTimeout }}
XUnitPublishTargetFramework: ${{ parameters.XUnitPublishTargetFramework }}
XUnitRuntimeTargetFramework: ${{ parameters.XUnitRuntimeTargetFramework }}
XUnitRunnerVersion: ${{ parameters.XUnitRunnerVersion }}
IncludeDotNetCli: ${{ parameters.IncludeDotNetCli }}
DotNetCliPackageType: ${{ parameters.DotNetCliPackageType }}
DotNetCliVersion: ${{ parameters.DotNetCliVersion }}
WaitForWorkItemCompletion: ${{ parameters.WaitForWorkItemCompletion }}
HelixBaseUri: ${{ parameters.HelixBaseUri }}
Creator: ${{ parameters.Creator }}
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/${{ 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)
HelixSource: ${{ parameters.HelixSource }}
HelixType: ${{ parameters.HelixType }}
HelixBuild: ${{ parameters.HelixBuild }}
HelixConfiguration: ${{ parameters.HelixConfiguration }}
HelixTargetQueues: ${{ parameters.HelixTargetQueues }}
HelixAccessToken: ${{ parameters.HelixAccessToken }}
HelixPreCommands: ${{ parameters.HelixPreCommands }}
HelixPostCommands: ${{ parameters.HelixPostCommands }}
WorkItemDirectory: ${{ parameters.WorkItemDirectory }}
WorkItemCommand: ${{ parameters.WorkItemCommand }}
WorkItemTimeout: ${{ parameters.WorkItemTimeout }}
CorrelationPayloadDirectory: ${{ parameters.CorrelationPayloadDirectory }}
XUnitProjects: ${{ parameters.XUnitProjects }}
XUnitWorkItemTimeout: ${{ parameters.XUnitWorkItemTimeout }}
XUnitPublishTargetFramework: ${{ parameters.XUnitPublishTargetFramework }}
XUnitRuntimeTargetFramework: ${{ parameters.XUnitRuntimeTargetFramework }}
XUnitRunnerVersion: ${{ parameters.XUnitRunnerVersion }}
IncludeDotNetCli: ${{ parameters.IncludeDotNetCli }}
DotNetCliPackageType: ${{ parameters.DotNetCliPackageType }}
DotNetCliVersion: ${{ parameters.DotNetCliVersion }}
WaitForWorkItemCompletion: ${{ parameters.WaitForWorkItemCompletion }}
HelixBaseUri: ${{ parameters.HelixBaseUri }}
Creator: ${{ parameters.Creator }}
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
condition: and(${{ parameters.condition }}, ne(variables['Agent.Os'], 'Windows_NT'))
continueOnError: ${{ parameters.continueOnError }}

View file

@ -0,0 +1,131 @@
parameters:
# This template adds arcade-powered source-build to CI.
# This is a 'steps' template, and is intended for advanced scenarios where the existing build
# infra has a careful build methodology that must be followed. For example, a repo
# (dotnet/runtime) might choose to clone the GitHub repo only once and store it as a pipeline
# artifact for all subsequent jobs to use, to reduce dependence on a strong network connection to
# GitHub. Using this steps template leaves room for that infra to be included.
# Defines the platform on which to run the steps. See 'eng/common/templates-official/job/source-build.yml'
# for details. The entire object is described in the 'job' template for simplicity, even though
# the usage of the properties on this object is split between the 'job' and 'steps' templates.
platform: {}
steps:
# Build. Keep it self-contained for simple reusability. (No source-build-specific job variables.)
- script: |
set -x
df -h
# If building on the internal project, the artifact feeds variable may be available (usually only if needed)
# In that case, call the feed setup script to add internal feeds corresponding to public ones.
# In addition, add an msbuild argument to copy the WIP from the repo to the target build location.
# This is because SetupNuGetSources.sh will alter the current NuGet.config file, and we need to preserve those
# changes.
internalRestoreArgs=
if [ '$(dn-bot-dnceng-artifact-feeds-rw)' != '$''(dn-bot-dnceng-artifact-feeds-rw)' ]; then
# Temporarily work around https://github.com/dotnet/arcade/issues/7709
chmod +x $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh
$(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh $(Build.SourcesDirectory)/NuGet.config $(dn-bot-dnceng-artifact-feeds-rw)
internalRestoreArgs='/p:CopyWipIntoInnerSourceBuildRepo=true'
# The 'Copy WIP' feature of source build uses git stash to apply changes from the original repo.
# This only works if there is a username/email configured, which won't be the case in most CI runs.
git config --get user.email
if [ $? -ne 0 ]; then
git config user.email dn-bot@microsoft.com
git config user.name dn-bot
fi
fi
# If building on the internal project, the internal storage variable may be available (usually only if needed)
# In that case, add variables to allow the download of internal runtimes if the specified versions are not found
# in the default public locations.
internalRuntimeDownloadArgs=
if [ '$(dotnetbuilds-internal-container-read-token-base64)' != '$''(dotnetbuilds-internal-container-read-token-base64)' ]; then
internalRuntimeDownloadArgs='/p:DotNetRuntimeSourceFeed=https://dotnetbuilds.blob.core.windows.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) --runtimesourcefeed https://dotnetbuilds.blob.core.windows.net/internal --runtimesourcefeedkey $(dotnetbuilds-internal-container-read-token-base64)'
fi
buildConfig=Release
# Check if AzDO substitutes in a build config from a variable, and use it if so.
if [ '$(_BuildConfig)' != '$''(_BuildConfig)' ]; then
buildConfig='$(_BuildConfig)'
fi
officialBuildArgs=
if [ '${{ and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}' = 'True' ]; then
officialBuildArgs='/p:DotNetPublishUsingPipelines=true /p:OfficialBuildId=$(BUILD.BUILDNUMBER)'
fi
targetRidArgs=
if [ '${{ parameters.platform.targetRID }}' != '' ]; then
targetRidArgs='/p:TargetRid=${{ parameters.platform.targetRID }}'
fi
runtimeOsArgs=
if [ '${{ parameters.platform.runtimeOS }}' != '' ]; then
runtimeOsArgs='/p:RuntimeOS=${{ parameters.platform.runtimeOS }}'
fi
baseOsArgs=
if [ '${{ parameters.platform.baseOS }}' != '' ]; then
baseOsArgs='/p:BaseOS=${{ parameters.platform.baseOS }}'
fi
publishArgs=
if [ '${{ parameters.platform.skipPublishValidation }}' != 'true' ]; then
publishArgs='--publish'
fi
assetManifestFileName=SourceBuild_RidSpecific.xml
if [ '${{ parameters.platform.name }}' != '' ]; then
assetManifestFileName=SourceBuild_${{ parameters.platform.name }}.xml
fi
${{ coalesce(parameters.platform.buildScript, './build.sh') }} --ci \
--configuration $buildConfig \
--restore --build --pack $publishArgs -bl \
$officialBuildArgs \
$internalRuntimeDownloadArgs \
$internalRestoreArgs \
$targetRidArgs \
$runtimeOsArgs \
$baseOsArgs \
/p:SourceBuildNonPortable=${{ parameters.platform.nonPortable }} \
/p:ArcadeBuildFromSource=true \
/p:DotNetBuildSourceOnly=true \
/p:DotNetBuildRepo=true \
/p:AssetManifestFileName=$assetManifestFileName
displayName: Build
# Upload build logs for diagnosis.
- task: CopyFiles@2
displayName: Prepare BuildLogs staging directory
inputs:
SourceFolder: '$(Build.SourcesDirectory)'
Contents: |
**/*.log
**/*.binlog
artifacts/sb/prebuilt-report/**
TargetFolder: '$(Build.StagingDirectory)/BuildLogs'
CleanTargetFolder: true
continueOnError: true
condition: succeededOrFailed()
- task: 1ES.PublishPipelineArtifact@1
displayName: Publish BuildLogs
inputs:
targetPath: '$(Build.StagingDirectory)/BuildLogs'
artifactName: BuildLogs_SourceBuild_${{ parameters.platform.name }}_Attempt$(System.JobAttempt)
continueOnError: true
condition: succeededOrFailed()
# Manually inject component detection so that we can ignore the source build upstream cache, which contains
# a nupkg cache of input packages (a local feed).
# This path must match the upstream cache path in property 'CurrentRepoSourceBuiltNupkgCacheDir'
# in src\Microsoft.DotNet.Arcade.Sdk\tools\SourceBuild\SourceBuildArcade.targets
- task: ComponentGovernanceComponentDetection@0
displayName: Component Detection (Exclude upstream cache)
inputs:
ignoreDirectories: '$(Build.SourcesDirectory)/artifacts/sb/src/artifacts/obj/source-built-upstream-cache'

View file

@ -0,0 +1,45 @@
# Select a pool provider based off branch name. Anything with branch name containing 'release' must go into an -Svc pool,
# otherwise it should go into the "normal" pools. This separates out the queueing and billing of released branches.
# Motivation:
# Once a given branch of a repository's output has been officially "shipped" once, it is then considered to be COGS
# (Cost of goods sold) and should be moved to a servicing pool provider. This allows both separation of queueing
# (allowing release builds and main PR builds to not intefere with each other) and billing (required for COGS.
# Additionally, the pool provider name itself may be subject to change when the .NET Core Engineering Services
# team needs to move resources around and create new and potentially differently-named pools. Using this template
# file from an Arcade-ified repo helps guard against both having to update one's release/* branches and renaming.
# How to use:
# This yaml assumes your shipped product branches use the naming convention "release/..." (which many do).
# If we find alternate naming conventions in broad usage it can be added to the condition below.
#
# First, import the template in an arcade-ified repo to pick up the variables, e.g.:
#
# variables:
# - template: /eng/common/templates-official/variables/pool-providers.yml
#
# ... then anywhere specifying the pool provider use the runtime variables,
# $(DncEngInternalBuildPool)
#
# pool:
# name: $(DncEngInternalBuildPool)
# image: 1es-windows-2022
variables:
# Coalesce the target and source branches so we know when a PR targets a release branch
# If these variables are somehow missing, fall back to main (tends to have more capacity)
# Any new -Svc alternative pools should have variables added here to allow for splitting work
- name: DncEngInternalBuildPool
value: $[
replace(
replace(
eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'),
True,
'NetCore1ESPool-Svc-Internal'
),
False,
'NetCore1ESPool-Internal'
)
]

View file

@ -0,0 +1,7 @@
variables:
# The Guardian version specified in 'eng/common/sdl/packages.config'. This value must be kept in
# sync with the packages.config file.
- name: DefaultGuardianVersion
value: 0.109.0
- name: GuardianPackagesConfigFile
value: $(Build.SourcesDirectory)\eng\common\sdl\packages.config

View file

@ -15,6 +15,7 @@ parameters:
timeoutInMinutes: '' timeoutInMinutes: ''
variables: [] variables: []
workspace: '' workspace: ''
templateContext: ''
# Job base template specific parameters # Job base template specific parameters
# See schema documentation - https://github.com/dotnet/arcade/blob/master/Documentation/AzureDevOps/TemplateSchema.md # See schema documentation - https://github.com/dotnet/arcade/blob/master/Documentation/AzureDevOps/TemplateSchema.md
@ -68,6 +69,9 @@ jobs:
${{ if ne(parameters.timeoutInMinutes, '') }}: ${{ if ne(parameters.timeoutInMinutes, '') }}:
timeoutInMinutes: ${{ parameters.timeoutInMinutes }} timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
${{ if ne(parameters.templateContext, '') }}:
templateContext: ${{ parameters.templateContext }}
variables: variables:
- ${{ if ne(parameters.enableTelemetry, 'false') }}: - ${{ if ne(parameters.enableTelemetry, 'false') }}:
- name: DOTNET_CLI_TELEMETRY_PROFILE - name: DOTNET_CLI_TELEMETRY_PROFILE

View file

@ -65,6 +65,11 @@ $ErrorActionPreference = 'Stop'
# Base-64 encoded SAS token that has permission to storage container described by $runtimeSourceFeed # Base-64 encoded SAS token that has permission to storage container described by $runtimeSourceFeed
[string]$runtimeSourceFeedKey = if (Test-Path variable:runtimeSourceFeedKey) { $runtimeSourceFeedKey } else { $null } [string]$runtimeSourceFeedKey = if (Test-Path variable:runtimeSourceFeedKey) { $runtimeSourceFeedKey } else { $null }
# True if the build is a product build
[bool]$productBuild = if (Test-Path variable:productBuild) { $productBuild } else { $false }
[String[]]$properties = if (Test-Path variable:properties) { $properties } else { @() }
function Create-Directory ([string[]] $path) { function Create-Directory ([string[]] $path) {
New-Item -Path $path -Force -ItemType 'Directory' | Out-Null New-Item -Path $path -Force -ItemType 'Directory' | Out-Null
} }
@ -850,7 +855,8 @@ function MSBuild-Core() {
} }
# When running on Azure Pipelines, override the returned exit code to avoid double logging. # When running on Azure Pipelines, override the returned exit code to avoid double logging.
if ($ci -and $env:SYSTEM_TEAMPROJECT -ne $null) { # Skip this when the build is a child of the VMR orchestrator build.
if ($ci -and $env:SYSTEM_TEAMPROJECT -ne $null -and !$productBuild -and -not($properties -like "*DotNetBuildRepo=true*")) {
Write-PipelineSetResult -Result "Failed" -Message "msbuild execution failed." Write-PipelineSetResult -Result "Failed" -Message "msbuild execution failed."
# Exiting with an exit code causes the azure pipelines task to log yet another "noise" error # 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 # The above Write-PipelineSetResult will cause the task to be marked as failure without adding yet another error

View file

@ -68,6 +68,9 @@ fi
runtime_source_feed=${runtime_source_feed:-''} runtime_source_feed=${runtime_source_feed:-''}
runtime_source_feed_key=${runtime_source_feed_key:-''} runtime_source_feed_key=${runtime_source_feed_key:-''}
# True if the build is a product build
product_build=${product_build:-false}
# Resolve any symlinks in the given path. # Resolve any symlinks in the given path.
function ResolvePath { function ResolvePath {
local path=$1 local path=$1
@ -141,7 +144,7 @@ function InitializeDotNetCli {
if [[ $global_json_has_runtimes == false && -n "${DOTNET_INSTALL_DIR:-}" && -d "$DOTNET_INSTALL_DIR/sdk/$dotnet_sdk_version" ]]; then if [[ $global_json_has_runtimes == false && -n "${DOTNET_INSTALL_DIR:-}" && -d "$DOTNET_INSTALL_DIR/sdk/$dotnet_sdk_version" ]]; then
dotnet_root="$DOTNET_INSTALL_DIR" dotnet_root="$DOTNET_INSTALL_DIR"
else else
dotnet_root="$repo_root/.dotnet" dotnet_root="${repo_root}.dotnet"
export DOTNET_INSTALL_DIR="$dotnet_root" export DOTNET_INSTALL_DIR="$dotnet_root"
@ -503,7 +506,8 @@ function MSBuild-Core {
echo "Build failed with exit code $exit_code. Check errors above." echo "Build failed with exit code $exit_code. Check errors above."
# When running on Azure Pipelines, override the returned exit code to avoid double logging. # When running on Azure Pipelines, override the returned exit code to avoid double logging.
if [[ "$ci" == "true" && -n ${SYSTEM_TEAMPROJECT:-} ]]; then # Skip this when the build is a child of the VMR orchestrator build.
if [[ "$ci" == true && -n ${SYSTEM_TEAMPROJECT:-} && "$product_build" != true && "$properties" != *"DotNetBuildRepo=true"* ]]; then
Write-PipelineSetResult -result "Failed" -message "msbuild execution failed." Write-PipelineSetResult -result "Failed" -message "msbuild execution failed."
# Exiting with an exit code causes the azure pipelines task to log yet another "noise" error # 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 # The above Write-PipelineSetResult will cause the task to be marked as failure without adding yet another error

View file

@ -1,6 +1,3 @@
# SdkTests do not currently work with globally installed CLI as they use dotnet-install.ps1 to install more runtimes # SdkTests do not currently work with globally installed CLI as they use dotnet-install.ps1 to install more runtimes
$script:useInstalledDotNetCli = $false $script:useInstalledDotNetCli = $false
# Add CMake to the path.
$env:PATH = "$PSScriptRoot\..\.tools\bin;$env:PATH"

View file

@ -5,7 +5,7 @@ set -euo pipefail
# Install instructions: https://scancode-toolkit.readthedocs.io/en/latest/getting-started/install.html#installation-as-a-library-via-pip # Install instructions: https://scancode-toolkit.readthedocs.io/en/latest/getting-started/install.html#installation-as-a-library-via-pip
# See latest release at https://github.com/nexB/scancode-toolkit/releases # See latest release at https://github.com/nexB/scancode-toolkit/releases
SCANCODE_VERSION="32.0.8" SCANCODE_VERSION="32.1.0"
pyEnvPath="/tmp/scancode-env" pyEnvPath="/tmp/scancode-env"
python3 -m venv $pyEnvPath python3 -m venv $pyEnvPath

View file

@ -1,6 +1,4 @@
# # Pipeline: https://dnceng.visualstudio.com/internal/_build?definitionId=1224
# See https://learn.microsoft.com/en-us/azure/devops/pipelines/yaml-schema for details on this file.
#
schedules: schedules:
# Cron timezone is UTC. # Cron timezone is UTC.

View file

@ -38,7 +38,7 @@ jobs:
echo "Dotnet-dotnet build: https://dev.azure.com/dnceng/internal/_build/results?buildId=$dotnet_dotnet_build&view=results" echo "Dotnet-dotnet build: https://dev.azure.com/dnceng/internal/_build/results?buildId=$dotnet_dotnet_build&view=results"
installer_sha=$(az pipelines build tag list --organization '$(AZDO_ORG)' --project '$(AZDO_PROJECT)' --build-id $dotnet_dotnet_build --output tsv | sed "s,installer ,,g") installer_sha=$(az pipelines build tag list --organization '$(AZDO_ORG)' --project '$(AZDO_PROJECT)' --build-id $dotnet_dotnet_build --query "[?contains(@, 'installer')]" --output tsv | sed "s,installer ,,g")
installer_build=$(az pipelines runs list --organization '$(AZDO_ORG)' --project '$(AZDO_PROJECT)' --pipeline-ids '$(INSTALLER_OFFICIAL_CI_PIPELINE_ID)' --query "[?sourceVersion == '$installer_sha'].id" --output tsv) installer_build=$(az pipelines runs list --organization '$(AZDO_ORG)' --project '$(AZDO_PROJECT)' --pipeline-ids '$(INSTALLER_OFFICIAL_CI_PIPELINE_ID)' --query "[?sourceVersion == '$installer_sha'].id" --output tsv)
if [[ -z "$installer_build" ]]; then if [[ -z "$installer_build" ]]; then
echo "Could not find a build of installer for commit '$installer_sha'" echo "Could not find a build of installer for commit '$installer_sha'"
@ -74,6 +74,10 @@ jobs:
patterns: '**/Private.SourceBuilt.Artifacts.+([0-9]).+([0-9]).+([0-9])?(-@(alpha|preview|rc|rtm)*).${{ parameters.targetRid }}.tar.gz' patterns: '**/Private.SourceBuilt.Artifacts.+([0-9]).+([0-9]).+([0-9])?(-@(alpha|preview|rc|rtm)*).${{ parameters.targetRid }}.tar.gz'
displayName: Download Source Built Artifacts displayName: Download Source Built Artifacts
- script: |
find $(Pipeline.Workspace)/Artifacts -type f -exec mv {} $(Pipeline.Workspace)/Artifacts \;
displayName: Move Artifacts to root
- script: | - script: |
platform="linux" platform="linux"
if [[ ${{ parameters.targetRid }} =~ "alpine" ]]; then if [[ ${{ parameters.targetRid }} =~ "alpine" ]]; then

View file

@ -31,6 +31,11 @@ parameters:
type: string type: string
default: '' default: ''
- name: useMonoRuntime
displayName: True when build output uses the mono runtime
type: boolean
default: false
#### SOURCE-ONLY parameters #### #### SOURCE-ONLY parameters ####
# Instead of building the VMR directly, exports the sources into a tarball and builds from that # Instead of building the VMR directly, exports the sources into a tarball and builds from that
@ -66,11 +71,6 @@ parameters:
type: boolean type: boolean
default: false default: false
- name: useMonoRuntime
displayName: True when build output uses the mono runtime
type: boolean
default: false
# Freeform field for extra values to pass to build.sh for special build modes # Freeform field for extra values to pass to build.sh for special build modes
- name: extraProperties - name: extraProperties
type: string type: string
@ -93,18 +93,24 @@ parameters:
jobs: jobs:
- job: ${{ parameters.buildName }}_${{ parameters.architecture }} - job: ${{ parameters.buildName }}_${{ parameters.architecture }}
timeoutInMinutes: 150
pool: ${{ parameters.pool }} pool: ${{ parameters.pool }}
# Currently, CodeQL slows the build down too much
# https://github.com/dotnet/source-build/issues/4276
${{ if and(parameters.isBuiltFromVmr, startswith(parameters.buildName, 'Windows'), eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}:
timeoutInMinutes: 720
${{ else }}:
timeoutInMinutes: 150
${{ if ne(parameters.reuseBuildArtifactsFrom, '') }}: ${{ if ne(parameters.reuseBuildArtifactsFrom, '') }}:
# Always attempt to run the bootstrap leg (e.g. even when stage 1 tests fail) in order to get a complete accessment of the build status. # Always attempt to run the bootstrap leg (e.g. even when stage 1 tests fail) in order to get a complete accessment of the build status.
# The build shortcuts when stage 1 build fails and doesn't produce the SDK. # The build shortcuts when stage 1 build fails and doesn't produce the SDK.
condition: succeededOrFailed() condition: succeededOrFailed()
dependsOn: ${{ parameters.reuseBuildArtifactsFrom }}_${{ parameters.architecture }} dependsOn: ${{ parameters.reuseBuildArtifactsFrom }}_${{ parameters.architecture }}
variables: variables:
- template: /eng/common/templates/variables/pool-providers.yml
- ${{ if eq(variables['System.TeamProject'], 'internal') }}: - ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- group: AzureDevOps-Artifact-Feeds-Pats - group: AzureDevOps-Artifact-Feeds-Pats
- ${{ if and(not(parameters.isBuiltFromVmr), eq(variables['System.TeamProject'], 'internal'), not(startswith(parameters.vmrBranch, 'internal/release/')), not(eq(variables['Build.Reason'], 'PullRequest'))) }}: - ${{ if and(not(parameters.isBuiltFromVmr), eq(variables['System.TeamProject'], 'internal'), not(startswith(parameters.vmrBranch, 'internal/release/')), ne(variables['Build.Reason'], 'PullRequest')) }}:
- group: DotNetBot-GitHub - group: DotNetBot-GitHub
- ${{ else }}: - ${{ else }}:
- name: BotAccount-dotnet-bot-repo-PAT - name: BotAccount-dotnet-bot-repo-PAT
@ -128,9 +134,30 @@ jobs:
- name: sourcesPath - name: sourcesPath
value: $(vmrPath) value: $(vmrPath)
templateContext:
outputs:
- output: pipelineArtifact
displayName: Publish BuildLogs
condition: succeededOrFailed()
targetPath: $(Build.StagingDirectory)/BuildLogs
artifactName: $(Agent.JobName)_BuildLogs_Attempt$(System.JobAttempt)
- output: pipelineArtifact
path: $(Build.ArtifactStagingDirectory)/publishing
artifact: $(Agent.JobName)_Artifacts
displayName: Publish Artifacts
condition: always()
- ${{ if not(parameters.isBuiltFromVmr) }}:
- output: pipelineArtifact
displayName: Upload failed patches
condition: failed()
targetPath: $(Agent.TempDirectory)
artifactName: $(System.JobDisplayName)_FailedPatches
steps: steps:
- ${{ if not(parameters.isBuiltFromVmr) }}: - ${{ if not(parameters.isBuiltFromVmr) }}:
- template: ../steps/vmr-prepare.yml - template: ../steps/vmr-prepare.yml@self
parameters: parameters:
${{ if eq(variables['Build.Reason'], 'PullRequest') }}: ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
vmrBranch: $(System.PullRequest.TargetBranch) vmrBranch: $(System.PullRequest.TargetBranch)
@ -139,7 +166,7 @@ jobs:
# Synchronize new content in the VMR during PRs (we expect this to come # Synchronize new content in the VMR during PRs (we expect this to come
- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: - ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
- template: ../steps/vmr-pull-updates.yml - template: ../steps/vmr-pull-updates.yml@self
parameters: parameters:
vmrPath: $(vmrPath) vmrPath: $(vmrPath)
vmrBranch: ${{ parameters.vmrBranch }} vmrBranch: ${{ parameters.vmrBranch }}
@ -176,7 +203,7 @@ jobs:
- task: CopyFiles@2 - task: CopyFiles@2
displayName: Copy Previous Build displayName: Copy Previous Build
inputs: inputs:
SourceFolder: $(Pipeline.Workspace)/${{ parameters.reuseBuildArtifactsFrom }}_${{ parameters.architecture }}_Artifacts SourceFolder: $(Pipeline.Workspace)/${{ parameters.reuseBuildArtifactsFrom }}_${{ parameters.architecture }}_Artifacts/assets/Release
Contents: '*.tar.gz' Contents: '*.tar.gz'
TargetFolder: $(sourcesPath)/prereqs/packages/archive/ TargetFolder: $(sourcesPath)/prereqs/packages/archive/
@ -245,7 +272,7 @@ jobs:
echo "##vso[task.setvariable variable=additionalBuildArgs]--with-sdk /vmr/.dotnet" echo "##vso[task.setvariable variable=additionalBuildArgs]--with-sdk /vmr/.dotnet"
fi fi
docker run --rm -v "$(sourcesPath):/vmr" -w /vmr ${{ parameters.container }} ./prep.sh $customPrepArgs docker run --rm -v "$(sourcesPath):/vmr" -w /vmr ${{ parameters.container }} ./prep-source-build.sh $customPrepArgs
displayName: Prep the Build displayName: Prep the Build
- script: | - script: |
@ -278,7 +305,7 @@ jobs:
if [[ -n "${{ parameters.crossRootFs }}" ]]; then if [[ -n "${{ parameters.crossRootFs }}" ]]; then
customEnvVars="$customEnvVars ROOTFS_DIR=${{ parameters.crossRootFs}}" customEnvVars="$customEnvVars ROOTFS_DIR=${{ parameters.crossRootFs}}"
if [[ '${{ parameters.targetArchitecture }}' != 'wasm' ]]; then if [[ '${{ parameters.targetArchitecture }}' != 'wasm' ]]; then
customEnvVars="$customEnvVars CROSSCOMPILE=1" extraBuildProperties="$extraBuildProperties /p:CrossBuild=true"
fi fi
fi fi
@ -301,6 +328,8 @@ jobs:
# Allows Arcade to have access to the commit for the build, pass it through to the container # Allows Arcade to have access to the commit for the build, pass it through to the container
customEnvVars="$customEnvVars BUILD_SOURCEVERSION=$BUILD_SOURCEVERSION" customEnvVars="$customEnvVars BUILD_SOURCEVERSION=$BUILD_SOURCEVERSION"
customEnvVars="$customEnvVars BUILD_BUILDNUMBER=$(Build.BuildNumber)"
customDockerRunArgs="" customDockerRunArgs=""
for envVar in $customEnvVars; do for envVar in $customEnvVars; do
customDockerRunArgs="$customDockerRunArgs -e $envVar" customDockerRunArgs="$customDockerRunArgs -e $envVar"
@ -356,6 +385,7 @@ jobs:
CopyWithRelativeFolders "artifacts/" $targetFolder "*.binlog" CopyWithRelativeFolders "artifacts/" $targetFolder "*.binlog"
CopyWithRelativeFolders "artifacts/" $targetFolder "*.log" CopyWithRelativeFolders "artifacts/" $targetFolder "*.log"
CopyWithRelativeFolders "artifacts/" $targetFolder "*.diff"
CopyWithRelativeFolders "src/" $targetFolder "*.binlog" CopyWithRelativeFolders "src/" $targetFolder "*.binlog"
CopyWithRelativeFolders "src/" $targetFolder "*.log" CopyWithRelativeFolders "src/" $targetFolder "*.log"
CopyWithRelativeFolders "test/" $targetFolder "*.binlog" CopyWithRelativeFolders "test/" $targetFolder "*.binlog"
@ -382,8 +412,10 @@ jobs:
cd "$(sourcesPath)" cd "$(sourcesPath)"
find artifacts/ -type f -name "*.binlog" -exec rsync -R {} -t ${targetFolder} \; 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 "*.log" -exec rsync -R {} -t ${targetFolder} \;
find artifacts/ -type f -name "*.diff" -exec rsync -R {} -t ${targetFolder} \;
if [[ "${{ parameters.buildSourceOnly }}" == "True" ]]; then if [[ "${{ parameters.buildSourceOnly }}" == "True" ]]; then
find artifacts/prebuilt-report/ -exec rsync -R {} -t ${targetFolder} \; find artifacts/prebuilt-report/ -exec rsync -R {} -t ${targetFolder} \;
find artifacts/log/binary-report/ -exec rsync -R {} -t ${targetFolder} \;
fi fi
find src/ -type f -name "*.binlog" -exec rsync -R {} -t ${targetFolder} \; find src/ -type f -name "*.binlog" -exec rsync -R {} -t ${targetFolder} \;
find src/ -type f -name "*.log" -exec rsync -R {} -t ${targetFolder} \; find src/ -type f -name "*.log" -exec rsync -R {} -t ${targetFolder} \;
@ -399,11 +431,12 @@ jobs:
continueOnError: true continueOnError: true
condition: succeededOrFailed() condition: succeededOrFailed()
- publish: '$(Build.StagingDirectory)/BuildLogs' - ${{ if or(ne(variables['System.TeamProject'], 'internal'), eq(variables['Build.Reason'], 'PullRequest')) }}:
- publish: $(Build.StagingDirectory)/BuildLogs
artifact: $(Agent.JobName)_BuildLogs_Attempt$(System.JobAttempt) artifact: $(Agent.JobName)_BuildLogs_Attempt$(System.JobAttempt)
displayName: Publish BuildLogs displayName: Publish BuildLogs
continueOnError: true continueOnError: true
condition: succeededOrFailed() condition: always()
# Only upload test results if enabled # Only upload test results if enabled
- ${{ if eq(parameters.runTests, 'True') }}: - ${{ if eq(parameters.runTests, 'True') }}:
@ -419,14 +452,26 @@ jobs:
publishRunAttachments: true publishRunAttachments: true
testRunTitle: SourceBuild_SmokeTests_$(Agent.JobName) testRunTitle: SourceBuild_SmokeTests_$(Agent.JobName)
- publish: '$(sourcesPath)/artifacts/assets/Release/' - task: CopyFiles@2
artifact: $(Agent.JobName)_Artifacts inputs:
displayName: Publish Artifacts SourceFolder: $(sourcesPath)/artifacts
condition: and(succeededOrFailed(), eq(variables['hasAssets'], 'true')) Contents: |
continueOnError: true VerticalManifest.xml
assets/**
TargetFolder: $(Build.ArtifactStagingDirectory)/publishing
displayName: Copy artifacts to Artifact Staging Directory
# When building from source, the Private.SourceBuilt.Artifacts archive already contains the nuget packages # When building from source, the Private.SourceBuilt.Artifacts archive already contains the nuget packages
- ${{ if ne(parameters.buildSourceOnly, 'true') }}: - ${{ if ne(parameters.buildSourceOnly, 'true') }}:
- publish: '$(sourcesPath)/artifacts/packages/Release/' - task: CopyFiles@2
artifact: $(Agent.JobName)_Packages inputs:
displayName: Publish Packages SourceFolder: $(sourcesPath)/artifacts/packages
TargetFolder: $(Build.ArtifactStagingDirectory)/publishing/packages
displayName: Copy packages to Artifact Staging Directory
- ${{ if or(ne(variables['System.TeamProject'], 'internal'), eq(variables['Build.Reason'], 'PullRequest')) }}:
- publish: $(Build.ArtifactStagingDirectory)/publishing
artifact: $(Agent.JobName)_Artifacts
displayName: Publish Artifacts
condition: succeededOrFailed()
continueOnError: true

View file

@ -2,10 +2,6 @@
### It synchronizes the content of the VMR to this new commit and pushes the changes ### It synchronizes the content of the VMR to this new commit and pushes the changes
parameters: parameters:
- name: jobName
displayName: Name of the pipeline job
type: string
- name: targetRef - name: targetRef
displayName: Target revision of dotnet/installer to synchronize displayName: Target revision of dotnet/installer to synchronize
type: string type: string
@ -22,11 +18,14 @@ parameters:
default: false default: false
jobs: jobs:
- job: ${{ parameters.jobName }} - job: Synchronize_VMR
displayName: Synchronize VMR's ${{ parameters.vmrBranch }} displayName: Synchronize VMR's ${{ parameters.vmrBranch }}
timeoutInMinutes: 120 timeoutInMinutes: 120
variables: variables:
- ${{ if eq(variables['System.TeamProject'], 'public') }}:
- template: /eng/common/templates/variables/pool-providers.yml - template: /eng/common/templates/variables/pool-providers.yml
- ${{ else }}:
- template: /eng/common/templates-official/variables/pool-providers.yml
- name: vmrPath - name: vmrPath
value: $(Agent.BuildDirectory)/vmr value: $(Agent.BuildDirectory)/vmr
- ${{ if not(parameters.noPush) }}: - ${{ if not(parameters.noPush) }}:
@ -44,24 +43,18 @@ jobs:
pool: pool:
${{ if eq(variables['System.TeamProject'], 'public') }}: ${{ if eq(variables['System.TeamProject'], 'public') }}:
name: $(DncEngPublicBuildPool) name: $(DncEngPublicBuildPool)
demands: ImageOverride -equals Build.Ubuntu.2004.Amd64.Open image: 1es-ubuntu-2004-open
${{ if eq(variables['System.TeamProject'], 'internal') }}: os: linux
${{ else }}:
name: $(DncEngInternalBuildPool) name: $(DncEngInternalBuildPool)
demands: ImageOverride -equals Build.Ubuntu.2004.Amd64 demands: ImageOverride -equals 1es-ubuntu-2004
os: linux
steps: steps:
- template: ../steps/vmr-prepare.yml - template: ../steps/vmr-prepare.yml
parameters: parameters:
vmrBranch: ${{ parameters.vmrBranch }} vmrBranch: ${{ parameters.vmrBranch }}
# TODO (https://github.com/dotnet/arcade/issues/11332): Allow full CG?
# Currently, we ignore dirs of individual repos - they have been scanned before
- ${{ if and(ne(variables['Build.Reason'], 'PullRequest'), eq(variables['System.TeamProject'], 'internal')) }}:
- task: ComponentGovernanceComponentDetection@0
inputs:
sourceScanPath: $(Agent.BuildDirectory)/vmr
ignoreDirectories: $(Agent.BuildDirectory)/vmr/src
- template: ../steps/vmr-pull-updates.yml - template: ../steps/vmr-pull-updates.yml
parameters: parameters:
vmrPath: $(vmrPath) vmrPath: $(vmrPath)
@ -70,7 +63,7 @@ jobs:
- ${{ if and(not(parameters.noPush), not(in(variables['Build.Reason'], 'PullRequest')), eq(variables['System.TeamProject'], 'internal')) }}: - ${{ if and(not(parameters.noPush), not(in(variables['Build.Reason'], 'PullRequest')), eq(variables['System.TeamProject'], 'internal')) }}:
# Push main and release branches to the public VMR # Push main and release branches to the public VMR
- ${{ if or(eq(parameters.vmrBranch, 'main'), eq(parameters.vmrBranch, 'main-ub'), startsWith(parameters.vmrBranch, 'release/')) }}: - ${{ if or(eq(parameters.vmrBranch, 'main'), startsWith(parameters.vmrBranch, 'release/')) }}:
- script: > - script: >
./.dotnet/dotnet darc vmr push ./.dotnet/dotnet darc vmr push
--vmr '$(vmrPath)' --vmr '$(vmrPath)'

View file

@ -28,6 +28,39 @@ parameters:
type: boolean type: boolean
default: false default: false
# These are not expected to be passed it but rather just object variables reused below
- name: pool_Linux
type: object
default:
name: $(defaultPoolName)
image: $(poolImage_Linux)
demands: ImageOverride -equals $(poolImage_Linux)
os: linux
- name: pool_Windows
type: object
default:
name: $(defaultPoolName)
image: $(poolImage_Windows)
demands: ImageOverride -equals $(poolImage_Windows)
os: windows
- name: pool_LinuxArm64
type: object
default:
name: $(poolName_LinuxArm64)
image: $(poolImage_LinuxArm64)
demands: ImageOverride -equals $(poolImage_Linux)
hostArchitecture: Arm64
os: linux
- name: pool_Mac
type: object
default:
name: Azure Pipelines
vmImage: $(poolImage_Mac)
os: macOS
#### SOURCE-ONLY BUILD #### #### SOURCE-ONLY BUILD ####
stages: stages:
- ${{ if parameters.isSourceOnlyBuild }}: - ${{ if parameters.isSourceOnlyBuild }}:
@ -35,9 +68,10 @@ stages:
displayName: VMR Source-Only Build displayName: VMR Source-Only Build
dependsOn: [] dependsOn: []
variables: variables:
- template: ../variables/vmr-stage.yml - template: ../variables/vmr-build.yml
parameters: parameters:
vmrBranch: ${{ parameters.vmrBranch }} vmrBranch: ${{ parameters.vmrBranch }}
jobs: jobs:
### Jobs for ultralite builds ### ### Jobs for ultralite builds ###
@ -48,9 +82,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.centOSStream8Container }} container: ${{ variables.centOSStream8Container }}
buildFromArchive: false # 🚫 buildFromArchive: false # 🚫
buildSourceOnly: true # ✅ buildSourceOnly: true # ✅
@ -71,9 +103,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.centOSStream8Container }} container: ${{ variables.centOSStream8Container }}
buildFromArchive: false # 🚫 buildFromArchive: false # 🚫
buildSourceOnly: true # ✅ buildSourceOnly: true # ✅
@ -93,9 +123,7 @@ stages:
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
artifactsRid: alpine.3.19-x64 artifactsRid: alpine.3.19-x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.alpine319Container }} container: ${{ variables.alpine319Container }}
buildFromArchive: false # 🚫 buildFromArchive: false # 🚫
buildSourceOnly: true # ✅ buildSourceOnly: true # ✅
@ -116,9 +144,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.alpine319Container }} container: ${{ variables.alpine319Container }}
buildFromArchive: false # 🚫 buildFromArchive: false # 🚫
buildSourceOnly: true # ✅ buildSourceOnly: true # ✅
@ -136,9 +162,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.centOSStream8Container }} container: ${{ variables.centOSStream8Container }}
buildFromArchive: true # ✅ buildFromArchive: true # ✅
buildSourceOnly: true # ✅ buildSourceOnly: true # ✅
@ -157,9 +181,7 @@ stages:
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
artifactsRid: centos.8-x64 artifactsRid: centos.8-x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.centOSStream8Container }} container: ${{ variables.centOSStream8Container }}
buildFromArchive: false # 🚫 buildFromArchive: false # 🚫
buildSourceOnly: true # ✅ buildSourceOnly: true # ✅
@ -178,9 +200,7 @@ stages:
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
artifactsRid: centos.8-x64 artifactsRid: centos.8-x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.centOSStream8Container }} container: ${{ variables.centOSStream8Container }}
buildFromArchive: false # 🚫 buildFromArchive: false # 🚫
buildSourceOnly: true # ✅ buildSourceOnly: true # ✅
@ -198,9 +218,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.centOSStream8Container }} container: ${{ variables.centOSStream8Container }}
buildFromArchive: true # ✅ buildFromArchive: true # ✅
buildSourceOnly: true # ✅ buildSourceOnly: true # ✅
@ -218,9 +236,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.centOSStream9Container }} container: ${{ variables.centOSStream9Container }}
buildFromArchive: true # ✅ buildFromArchive: true # ✅
buildSourceOnly: true # ✅ buildSourceOnly: true # ✅
@ -238,9 +254,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.fedora39Container }} container: ${{ variables.fedora39Container }}
buildFromArchive: true # ✅ buildFromArchive: true # ✅
buildSourceOnly: true # ✅ buildSourceOnly: true # ✅
@ -258,9 +272,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.ubuntu2204Container }} container: ${{ variables.ubuntu2204Container }}
buildFromArchive: false # 🚫 buildFromArchive: false # 🚫
buildSourceOnly: true # ✅ buildSourceOnly: true # ✅
@ -278,7 +290,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: ${{ variables.defaultPoolNameLinuxArm64 }} pool: ${{ parameters.pool_LinuxArm64 }}
container: ${{ variables.ubuntu2204ArmContainer }} container: ${{ variables.ubuntu2204ArmContainer }}
buildFromArchive: false # 🚫 buildFromArchive: false # 🚫
buildSourceOnly: true # ✅ buildSourceOnly: true # ✅
@ -296,9 +308,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.fedora39Container }} container: ${{ variables.fedora39Container }}
buildFromArchive: false # 🚫 buildFromArchive: false # 🚫
buildSourceOnly: true # ✅ buildSourceOnly: true # ✅
@ -316,7 +326,7 @@ stages:
displayName: VMR Vertical Build displayName: VMR Vertical Build
dependsOn: [] dependsOn: []
variables: variables:
- template: ../variables/vmr-stage.yml - template: ../variables/vmr-build.yml
parameters: parameters:
vmrBranch: ${{ parameters.vmrBranch }} vmrBranch: ${{ parameters.vmrBranch }}
jobs: jobs:
@ -327,9 +337,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.ubuntu2204Container }} container: ${{ variables.ubuntu2204Container }}
targetOS: linux targetOS: linux
targetArchitecture: x64 targetArchitecture: x64
@ -340,9 +348,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Windows }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsWindows }}
targetOS: windows targetOS: windows
targetArchitecture: x64 targetArchitecture: x64
@ -352,9 +358,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.androidCrossContainer }} container: ${{ variables.androidCrossContainer }}
targetOS: android targetOS: android
targetArchitecture: arm64 targetArchitecture: arm64
@ -365,9 +369,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: wasm architecture: wasm
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.browserCrossContainer }} container: ${{ variables.browserCrossContainer }}
crossRootFs: '/crossrootfs/x64' crossRootFs: '/crossrootfs/x64'
targetOS: browser targetOS: browser
@ -379,8 +381,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: iossimulator targetOS: iossimulator
targetArchitecture: arm64 targetArchitecture: arm64
@ -393,9 +394,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm architecture: arm
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.androidCrossContainer }} container: ${{ variables.androidCrossContainer }}
targetOS: android targetOS: android
targetArchitecture: arm targetArchitecture: arm
@ -406,9 +405,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.androidCrossContainer }} container: ${{ variables.androidCrossContainer }}
targetOS: android targetOS: android
targetArchitecture: x64 targetArchitecture: x64
@ -419,9 +416,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x86 architecture: x86
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.androidCrossContainer }} container: ${{ variables.androidCrossContainer }}
targetOS: android targetOS: android
targetArchitecture: x86 targetArchitecture: x86
@ -432,9 +427,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: wasm architecture: wasm
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.browserCrossContainer }} container: ${{ variables.browserCrossContainer }}
crossRootFs: '/crossrootfs/x64' crossRootFs: '/crossrootfs/x64'
targetOS: browser targetOS: browser
@ -447,9 +440,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.androidCrossContainer }} container: ${{ variables.androidCrossContainer }}
crossRootFs: '/crossrootfs/x64' crossRootFs: '/crossrootfs/x64'
targetOS: linux-bionic targetOS: linux-bionic
@ -461,9 +452,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.androidCrossContainer }} container: ${{ variables.androidCrossContainer }}
crossRootFs: '/crossrootfs/x64' crossRootFs: '/crossrootfs/x64'
targetOS: linux-bionic targetOS: linux-bionic
@ -476,9 +465,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.androidCrossContainer }} container: ${{ variables.androidCrossContainer }}
crossRootFs: '/crossrootfs/x64' crossRootFs: '/crossrootfs/x64'
targetOS: linux-bionic targetOS: linux-bionic
@ -490,9 +477,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.androidCrossContainer }} container: ${{ variables.androidCrossContainer }}
crossRootFs: '/crossrootfs/x64' crossRootFs: '/crossrootfs/x64'
targetOS: linux-bionic targetOS: linux-bionic
@ -505,8 +490,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: ios targetOS: ios
targetArchitecture: arm64 targetArchitecture: arm64
@ -516,8 +500,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: ios targetOS: ios
targetArchitecture: arm64 targetArchitecture: arm64
extraProperties: /p:DotNetBuildRuntimeNativeAOTRuntimePack=true extraProperties: /p:DotNetBuildRuntimeNativeAOTRuntimePack=true
@ -528,8 +511,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: iossimulator targetOS: iossimulator
targetArchitecture: arm64 targetArchitecture: arm64
extraProperties: /p:DotNetBuildRuntimeNativeAOTRuntimePack=true extraProperties: /p:DotNetBuildRuntimeNativeAOTRuntimePack=true
@ -540,8 +522,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: iossimulator targetOS: iossimulator
targetArchitecture: x64 targetArchitecture: x64
@ -551,8 +532,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: iossimulator targetOS: iossimulator
targetArchitecture: x64 targetArchitecture: x64
extraProperties: /p:DotNetBuildRuntimeNativeAOTRuntimePack=true extraProperties: /p:DotNetBuildRuntimeNativeAOTRuntimePack=true
@ -563,8 +543,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: maccatalyst targetOS: maccatalyst
targetArchitecture: arm64 targetArchitecture: arm64
@ -574,8 +553,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: maccatalyst targetOS: maccatalyst
targetArchitecture: arm64 targetArchitecture: arm64
extraProperties: /p:DotNetBuildRuntimeNativeAOTRuntimePack=true extraProperties: /p:DotNetBuildRuntimeNativeAOTRuntimePack=true
@ -586,8 +564,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: maccatalyst targetOS: maccatalyst
targetArchitecture: x64 targetArchitecture: x64
@ -597,8 +574,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: maccatalyst targetOS: maccatalyst
targetArchitecture: x64 targetArchitecture: x64
extraProperties: /p:DotNetBuildRuntimeNativeAOTRuntimePack=true extraProperties: /p:DotNetBuildRuntimeNativeAOTRuntimePack=true
@ -609,8 +585,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: tvos targetOS: tvos
targetArchitecture: arm64 targetArchitecture: arm64
@ -620,8 +595,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: tvos targetOS: tvos
targetArchitecture: arm64 targetArchitecture: arm64
extraProperties: /p:DotNetBuildRuntimeNativeAOTRuntimePack=true extraProperties: /p:DotNetBuildRuntimeNativeAOTRuntimePack=true
@ -632,8 +606,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: tvossimulator targetOS: tvossimulator
targetArchitecture: arm64 targetArchitecture: arm64
@ -643,8 +616,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: tvossimulator targetOS: tvossimulator
targetArchitecture: arm64 targetArchitecture: arm64
extraProperties: /p:DotNetBuildRuntimeNativeAOTRuntimePack=true extraProperties: /p:DotNetBuildRuntimeNativeAOTRuntimePack=true
@ -655,8 +627,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: tvossimulator targetOS: tvossimulator
targetArchitecture: x64 targetArchitecture: x64
@ -666,8 +637,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: tvossimulator targetOS: tvossimulator
targetArchitecture: x64 targetArchitecture: x64
extraProperties: /p:DotNetBuildRuntimeNativeAOTRuntimePack=true extraProperties: /p:DotNetBuildRuntimeNativeAOTRuntimePack=true
@ -678,9 +648,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: wasm architecture: wasm
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.wasiCrossContainer }} container: ${{ variables.wasiCrossContainer }}
crossRootFs: '/crossrootfs/x64' crossRootFs: '/crossrootfs/x64'
targetOS: wasi targetOS: wasi
@ -692,8 +660,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: osx targetOS: osx
targetArchitecture: x64 targetArchitecture: x64
@ -703,8 +670,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
useMonoRuntime: true useMonoRuntime: true
targetOS: osx targetOS: osx
targetArchitecture: x64 targetArchitecture: x64
@ -715,9 +681,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.marinerX64CrossContainer }} container: ${{ variables.marinerX64CrossContainer }}
crossRootFs: '/crossrootfs/x64' crossRootFs: '/crossrootfs/x64'
targetOS: linux targetOS: linux
@ -729,9 +693,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Linux }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.marinerX64CrossContainer }} container: ${{ variables.marinerX64CrossContainer }}
crossRootFs: '/crossrootfs/x64' crossRootFs: '/crossrootfs/x64'
useMonoRuntime: true useMonoRuntime: true
@ -746,9 +708,7 @@ stages:
# isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} # isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
# vmrBranch: ${{ variables.VmrBranch }} # vmrBranch: ${{ variables.VmrBranch }}
# architecture: arm64 # architecture: arm64
# pool: # pool: ${{ parameters.pool_Linux }}
# name: ${{ variables.defaultPoolName }}
# demands: ${{ variables.defaultPoolDemandsLinux }}
# container: ${{ variables.marinerArm64CrossContainer }} # container: ${{ variables.marinerArm64CrossContainer }}
# crossRootFs: '/crossrootfs/arm64' # crossRootFs: '/crossrootfs/arm64'
# targetOS: linux # targetOS: linux
@ -760,8 +720,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
targetOS: osx targetOS: osx
targetArchitecture: arm64 targetArchitecture: arm64
@ -771,8 +730,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: pool: ${{ parameters.pool_Mac }}
vmImage: ${{ variables.defaultPoolNameMac }}
useMonoRuntime: true useMonoRuntime: true
targetOS: osx targetOS: osx
targetArchitecture: arm64 targetArchitecture: arm64
@ -783,9 +741,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64 architecture: arm64
pool: pool: ${{ parameters.pool_Windows }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsWindows }}
targetOS: windows targetOS: windows
targetArchitecture: arm64 targetArchitecture: arm64
@ -795,9 +751,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Windows }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsWindows }}
useMonoRuntime: true useMonoRuntime: true
targetOS: windows targetOS: windows
targetArchitecture: x64 targetArchitecture: x64
@ -808,9 +762,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x86 architecture: x86
pool: pool: ${{ parameters.pool_Windows }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsWindows }}
targetOS: windows targetOS: windows
targetArchitecture: x86 targetArchitecture: x86
@ -820,9 +772,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x86 architecture: x86
pool: pool: ${{ parameters.pool_Windows }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsWindows }}
useMonoRuntime: true useMonoRuntime: true
targetOS: windows targetOS: windows
targetArchitecture: x86 targetArchitecture: x86
@ -833,9 +783,7 @@ stages:
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}
architecture: x64 architecture: x64
pool: pool: ${{ parameters.pool_Windows }}
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsWindows }}
targetOS: windows targetOS: windows
targetArchitecture: x64 targetArchitecture: x64
extraProperties: /p:PgoInstrument=true extraProperties: /p:PgoInstrument=true

View file

@ -88,6 +88,7 @@ steps:
condition: eq(variables['Agent.OS'], 'Windows_NT') condition: eq(variables['Agent.OS'], 'Windows_NT')
workingDirectory: $(Agent.BuildDirectory)/installer workingDirectory: $(Agent.BuildDirectory)/installer
- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
- publish: $(Agent.TempDirectory) - publish: $(Agent.TempDirectory)
artifact: $(System.JobDisplayName)_FailedPatches artifact: $(System.JobDisplayName)_FailedPatches
displayName: Upload failed patches displayName: Upload failed patches

View file

@ -36,26 +36,30 @@ variables:
- ${{ if eq(variables['System.TeamProject'], 'public') }}: - ${{ if eq(variables['System.TeamProject'], 'public') }}:
- name: defaultPoolName - name: defaultPoolName
value: NetCore-Public-XL value: NetCore-Public-XL
- name: defaultPoolNameLinuxArm64 - name: poolImage_Linux
value: 1es-ubuntu-2004-open
- name: poolImage_LinuxArm64
value: Mariner-2-Docker-ARM64
- name: poolName_LinuxArm64
value: Docker-Linux-Arm-Public value: Docker-Linux-Arm-Public
- name: defaultPoolNameMac - name: poolImage_Mac
value: macos-12 value: macos-12
- name: defaultPoolDemandsLinux - name: poolImage_Windows
value: ImageOverride -equals Build.Ubuntu.2204.Amd64.Open value: windows.vs2022preview.amd64.open
- name: defaultPoolDemandsWindows - ${{ else }}:
value: ImageOverride -equals windows.vs2022.amd64.open
- ${{ elseif eq(variables['System.TeamProject'], 'internal') }}:
- ${{ if in(variables['Build.Reason'], 'PullRequest') }}: - ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
- name: defaultPoolName - name: defaultPoolName
value: NetCore1ESPool-Internal-XL value: NetCore1ESPool-Internal-XL
- ${{ else }}: - ${{ else }}:
- name: defaultPoolName - name: defaultPoolName
value: NetCore1ESPool-Svc-Internal value: $(DncEngInternalBuildPool)
- name: defaultPoolNameLinuxArm64 - name: poolImage_Linux
value: 1es-ubuntu-2204
- name: poolImage_LinuxArm64
value: Mariner-2-Docker-ARM64
- name: poolName_LinuxArm64
value: Docker-Linux-Arm-Internal value: Docker-Linux-Arm-Internal
- name: defaultPoolNameMac - name: poolImage_Mac
value: macos-13-arm64 value: macos-13-arm64
- name: defaultPoolDemandsLinux - name: poolImage_Windows
value: ImageOverride -equals Build.Ubuntu.2204.Amd64 value: windows.vs2022preview.amd64
- name: defaultPoolDemandsWindows
value: ImageOverride -equals windows.vs2022.amd64

View file

@ -1,9 +1,11 @@
# This yml is used by these pipelines and triggers: # This YAML is used by these PR pipelines:
# #
# - installer-source-build (public) # - installer-source-build
# - PR: release/* and main, ultralite build # https://dev.azure.com/dnceng-public/public/_build?definitionId=233
# - installer-unified-build (public) # - installer-unified-build
# - PR: main, lite build # https://dev.azure.com/dnceng-public/public/_build?definitionId=277
# - installer-unified-build-full
# https://dev.azure.com/dnceng-public/public/_build?definitionId=279
trigger: none trigger: none
pr: pr:
@ -28,6 +30,8 @@ parameters:
default: false default: false
variables: variables:
- template: /eng/common/templates/variables/pool-providers.yml@self
- ${{ if ne(parameters.vmrBranch, ' ') }}: - ${{ if ne(parameters.vmrBranch, ' ') }}:
- name: VmrBranch - name: VmrBranch
value: ${{ replace(parameters.vmrBranch, ' ', '') }} value: ${{ replace(parameters.vmrBranch, ' ', '') }}

View file

@ -68,8 +68,11 @@ jobs:
matrix: $[ dependencies.Setup.outputs['GetMatrix.matrix'] ] matrix: $[ dependencies.Setup.outputs['GetMatrix.matrix'] ]
steps: steps:
- script: $(Build.SourcesDirectory)/prep.sh --no-artifacts --no-bootstrap --no-prebuilts - script: |
displayName: 'Install .NET SDK' source ./eng/common/tools.sh
InitializeDotNetCli true
displayName: Install .NET SDK
workingDirectory: $(Build.SourcesDirectory)
- task: PipAuthenticate@1 - task: PipAuthenticate@1
displayName: 'Pip Authenticate' displayName: 'Pip Authenticate'
@ -106,6 +109,8 @@ jobs:
find artifacts/ -type f -name "BuildTests*.binlog" -exec cp {} --parents -t ${targetFolder} \; find artifacts/ -type f -name "BuildTests*.binlog" -exec cp {} --parents -t ${targetFolder} \;
find artifacts/ -type f -name "BuildTests*.log" -exec cp {} --parents -t ${targetFolder} \; find artifacts/ -type f -name "BuildTests*.log" -exec cp {} --parents -t ${targetFolder} \;
echo "Updated:" echo "Updated:"
find test/ -type f -name "UpdatedLicenseExclusions*.txt"
find test/ -type f -name "UpdatedLicenseExclusions*.txt" -exec cp {} --parents -t ${targetFolder} \;
find test/ -type f -name "Updated*.json" find test/ -type f -name "Updated*.json"
find test/ -type f -name "Updated*.json" -exec cp {} --parents -t ${targetFolder} \; find test/ -type f -name "Updated*.json" -exec cp {} --parents -t ${targetFolder} \;
echo "Results:" echo "Results:"

View file

@ -17,6 +17,11 @@ resources:
name: dotnet-dotnet name: dotnet-dotnet
ref: $(Build.SourceBranch) ref: $(Build.SourceBranch)
- repository: 1ESPipelineTemplates
type: git
name: 1ESPipelineTemplates/1ESPipelineTemplates
ref: refs/tags/release
parameters: parameters:
- name: vmrBranch - name: vmrBranch
displayName: dotnet-dotnet branch to push to displayName: dotnet-dotnet branch to push to
@ -24,6 +29,8 @@ parameters:
default: ' ' default: ' '
variables: variables:
- template: /eng/common/templates-official/variables/pool-providers.yml@self
- ${{ if ne(parameters.vmrBranch, ' ') }}: - ${{ if ne(parameters.vmrBranch, ' ') }}:
- name: VmrBranch - name: VmrBranch
value: ${{ replace(parameters.vmrBranch, ' ', '') }} value: ${{ replace(parameters.vmrBranch, ' ', '') }}
@ -31,7 +38,27 @@ variables:
- name: VmrBranch - name: VmrBranch
value: ${{ replace(replace(variables['Build.SourceBranch'], 'refs/heads/', ''), 'refs/pull/', '') }} value: ${{ replace(replace(variables['Build.SourceBranch'], 'refs/heads/', ''), 'refs/pull/', '') }}
extends:
template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates
parameters:
sdl:
sourceAnalysisPool:
name: $(DncEngInternalBuildPool)
image: 1es-windows-2022
os: windows
sourceRepositoriesToScan:
exclude:
- repository: vmr
componentgovernance:
sourceScanPath: $(Agent.BuildDirectory)/vmr
ignoreDirectories: $(Agent.BuildDirectory)/vmr/src
stages:
- stage: VMRSynchronization
displayName: VMR Synchronization
jobs: jobs:
- template: templates/jobs/vmr-synchronization.yml - template: /eng/pipelines/templates/jobs/vmr-synchronization.yml@self
parameters: parameters:
vmrBranch: ${{ variables.VmrBranch }} vmrBranch: ${{ variables.VmrBranch }}

View file

@ -19,6 +19,11 @@ resources:
endpoint: dotnet endpoint: dotnet
ref: $(Build.SourceBranch) ref: $(Build.SourceBranch)
- repository: 1ESPipelineTemplates
type: git
name: 1ESPipelineTemplates/1ESPipelineTemplates
ref: refs/tags/release
parameters: parameters:
- name: vmrBranch - name: vmrBranch
displayName: dotnet/dotnet branch to push to displayName: dotnet/dotnet branch to push to
@ -26,6 +31,8 @@ parameters:
default: ' ' default: ' '
variables: variables:
- template: /eng/common/templates-official/variables/pool-providers.yml@self
- ${{ if ne(parameters.vmrBranch, ' ') }}: - ${{ if ne(parameters.vmrBranch, ' ') }}:
- name: VmrBranch - name: VmrBranch
value: ${{ replace(parameters.vmrBranch, ' ', '') }} value: ${{ replace(parameters.vmrBranch, ' ', '') }}
@ -33,13 +40,27 @@ variables:
- name: VmrBranch - name: VmrBranch
value: ${{ replace(replace(variables['Build.SourceBranch'], 'refs/heads/', ''), 'refs/pull/', '') }} value: ${{ replace(replace(variables['Build.SourceBranch'], 'refs/heads/', ''), 'refs/pull/', '') }}
jobs: extends:
- template: /eng/pipelines/templates/jobs/vmr-synchronization.yml template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates
parameters: parameters:
jobName: Synchronize_VMR sdl:
vmrBranch: ${{ variables.VmrBranch }} sourceAnalysisPool:
name: $(DncEngInternalBuildPool)
image: 1es-windows-2022
os: windows
- template: /eng/pipelines/templates/jobs/vmr-synchronization.yml sourceRepositoriesToScan:
exclude:
- repository: vmr
componentgovernance:
sourceScanPath: $(Agent.BuildDirectory)/vmr
ignoreDirectories: $(Agent.BuildDirectory)/vmr/src
stages:
- stage: VMRSynchronization
displayName: VMR Synchronization
jobs:
- template: /eng/pipelines/templates/jobs/vmr-synchronization.yml@self
parameters: parameters:
jobName: Synchronize_VMR_uncloacked vmrBranch: ${{ variables.VmrBranch }}
vmrBranch: ${{ variables.VmrBranch }}-ub

View file

@ -1,6 +1,6 @@
{ {
"tools": { "tools": {
"dotnet": "9.0.100-alpha.1.23615.4", "dotnet": "9.0.100-preview.1.24101.2",
"runtimes": { "runtimes": {
"dotnet": [ "dotnet": [
"$(VSRedistCommonNetCoreSharedFrameworkx6490PackageVersion)" "$(VSRedistCommonNetCoreSharedFrameworkx6490PackageVersion)"
@ -11,8 +11,8 @@
"cmake": "latest" "cmake": "latest"
}, },
"msbuild-sdks": { "msbuild-sdks": {
"Microsoft.Build.NoTargets": "3.7.0", "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.24201.3",
"Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.24114.1", "Microsoft.DotNet.CMake.Sdk": "9.0.0-beta.24201.3",
"Microsoft.DotNet.CMake.Sdk": "9.0.0-beta.24114.1" "Microsoft.Build.NoTargets": "3.7.0"
} }
} }

View file

@ -0,0 +1,21 @@
## DO NOT MODIFY THIS FILE MANUALLY. This is part of auto-baselining from 1ES Pipeline Templates. Go to [https://aka.ms/1espt-autobaselining] for more details.
pipelines:
1330:
retail:
source:
credscan:
lastModifiedDate: 2024-03-25
eslint:
lastModifiedDate: 2024-03-25
psscriptanalyzer:
lastModifiedDate: 2024-03-25
armory:
lastModifiedDate: 2024-03-25
binary:
credscan:
lastModifiedDate: 2024-03-25
binskim:
lastModifiedDate: 2024-03-25
spotbugs:
lastModifiedDate: 2024-03-25

File diff suppressed because it is too large Load diff

View file

@ -24,7 +24,7 @@ or
```bash ```bash
# Building from source only # Building from source only
./prep.sh && ./build.sh -sb ./prep-source-build.sh && ./build.sh -sb
``` ```
> Please note that, at this time, the build modifies some of the checked-in sources so it might > Please note that, at this time, the build modifies some of the checked-in sources so it might

View file

@ -3,7 +3,7 @@
source="${BASH_SOURCE[0]}" source="${BASH_SOURCE[0]}"
script_root="$( cd -P "$( dirname "$source" )" && pwd )" script_root="$( cd -P "$( dirname "$source" )" && pwd )"
"$script_root"/../../prep.sh "$script_root"/../../prep-source-build.sh
cp "$script_root/../synchronize-vmr.sh" "/workspaces/" cp "$script_root/../synchronize-vmr.sh" "/workspaces/"
"$script_root"/../../build.sh --online --clean-while-building || exit 0 "$script_root"/../../build.sh --online --clean-while-building || exit 0

View file

@ -15,8 +15,8 @@
<BuildOS Condition="$([MSBuild]::IsOSPlatform('SOLARIS'))">solaris</BuildOS> <BuildOS Condition="$([MSBuild]::IsOSPlatform('SOLARIS'))">solaris</BuildOS>
<BuildOS Condition="$([MSBuild]::IsOSPlatform('HAIKU'))">haiku</BuildOS> <BuildOS Condition="$([MSBuild]::IsOSPlatform('HAIKU'))">haiku</BuildOS>
<BuildOS Condition="$([MSBuild]::IsOSPlatform('WINDOWS'))">windows</BuildOS> <BuildOS Condition="$([MSBuild]::IsOSPlatform('WINDOWS'))">windows</BuildOS>
<HostOS Condition="'$(HostOS)' == ''">$(BuildOS)</HostOS>
<TargetOS Condition="'$(TargetOS)' == ''">$(BuildOS)</TargetOS> <TargetOS Condition="'$(TargetOS)' == ''">$(BuildOS)</TargetOS>
<HostOS Condition="'$(HostOS)' == ''">$(TargetOS)</HostOS>
</PropertyGroup> </PropertyGroup>
<!-- This is a list of cases where we aren't producing a whole SDK, just a runtime. This list should be kept in sync with https://github.com/dotnet/runtime/blob/main/eng/SourceBuild.props#L26 --> <!-- This is a list of cases where we aren't producing a whole SDK, just a runtime. This list should be kept in sync with https://github.com/dotnet/runtime/blob/main/eng/SourceBuild.props#L26 -->
@ -50,14 +50,15 @@
<PropertyGroup Label="CalculateRID"> <PropertyGroup Label="CalculateRID">
<!-- Use current machine distro RID if set. Otherwise, fall back to RuntimeInformation.RuntimeIdentifier --> <!-- Use current machine distro RID if set. Otherwise, fall back to RuntimeInformation.RuntimeIdentifier -->
<BuildRid>$(__DistroRid)</BuildRid> <BuildRid>$(__DistroRid)</BuildRid>
<BuildRid Condition="'$(BuildRid)' == ''">$([System.Runtime.InteropServices.RuntimeInformation]::RuntimeIdentifier)</BuildRid> <BuildRid Condition="'$(BuildRid)' == '' and '$(MSBuildRuntimeType)' == 'core'">$([System.Runtime.InteropServices.RuntimeInformation]::RuntimeIdentifier)</BuildRid>
<BuildRid Condition="'$(BuildRid)' == '' and '$(MSBuildRuntimeType)' != 'core'">win-$([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture.ToString().ToLowerInvariant)</BuildRid>
<HostRid Condition="'$(HostRid)' == ''">$(BuildRid)</HostRid>
<TargetRid Condition="'$(TargetRid)' == ''">$(BuildRid.Substring(0, $(BuildRid.LastIndexOf('-'))))-$(TargetArchitecture)</TargetRid> <TargetRid Condition="'$(TargetRid)' == ''">$(BuildRid.Substring(0, $(BuildRid.LastIndexOf('-'))))-$(TargetArchitecture)</TargetRid>
<HostRid Condition="'$(HostRid)' == ''">$(TargetRid)</HostRid>
<!-- Source-only builds are non portable, except for cross-builds. <!-- Source-only builds are non portable, except for cross-builds.
Source-only cross-builds default to the portable configuration so the resulting SDK works on a wider range of distros. --> Source-only cross-builds default to the portable configuration so the resulting SDK works on a wider range of distros. -->
<PortableBuild Condition="'$(PortableBuild)' == '' and '$(DotNetBuildSourceOnly)' == 'true' and '$(HostArchitecture)' == '$(TargetArchitecture)'">false</PortableBuild> <PortableBuild Condition="'$(PortableBuild)' == '' and '$(DotNetBuildSourceOnly)' == 'true' and '$(BuildArchitecture)' == '$(TargetArchitecture)'">false</PortableBuild>
<PortableBuild Condition="'$(PortableBuild)' == ''">true</PortableBuild> <PortableBuild Condition="'$(PortableBuild)' == ''">true</PortableBuild>
<PortableRid Condition="'$(__PortableTargetOS)' != ''">$(__PortableTargetOS)-$(TargetArchitecture)</PortableRid> <PortableRid Condition="'$(__PortableTargetOS)' != ''">$(__PortableTargetOS)-$(TargetArchitecture)</PortableRid>
@ -136,6 +137,8 @@
<SuppressNETCoreSdkPreviewMessage>true</SuppressNETCoreSdkPreviewMessage> <SuppressNETCoreSdkPreviewMessage>true</SuppressNETCoreSdkPreviewMessage>
<!-- By default, the VMR builds with online sources when not building source-only. --> <!-- By default, the VMR builds with online sources when not building source-only. -->
<DotNetBuildWithOnlineFeeds Condition="'$(DotNetBuildWithOnlineFeeds)' == '' and '$(DotNetBuildSourceOnly)' != 'true'">true</DotNetBuildWithOnlineFeeds> <DotNetBuildWithOnlineFeeds Condition="'$(DotNetBuildWithOnlineFeeds)' == '' and '$(DotNetBuildSourceOnly)' != 'true'">true</DotNetBuildWithOnlineFeeds>
<DisableArcadeExcludeFromBuildSupport>true</DisableArcadeExcludeFromBuildSupport>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
@ -146,7 +149,6 @@
<EnableDefaultItems Condition="'$(MSBuildProjectExtension)' == '.proj'">false</EnableDefaultItems> <EnableDefaultItems Condition="'$(MSBuildProjectExtension)' == '.proj'">false</EnableDefaultItems>
<LogVerbosity Condition="'$(LogVerbosity)'==''">minimal</LogVerbosity> <LogVerbosity Condition="'$(LogVerbosity)'==''">minimal</LogVerbosity>
<BuildInParallel Condition="'$(BuildInParallel)'==''">false</BuildInParallel>
<ShellExtension Condition="'$(BuildOS)' == 'windows'">.cmd</ShellExtension> <ShellExtension Condition="'$(BuildOS)' == 'windows'">.cmd</ShellExtension>
<ShellExtension Condition="'$(BuildOS)' != 'windows'">.sh</ShellExtension> <ShellExtension Condition="'$(BuildOS)' != 'windows'">.sh</ShellExtension>
@ -174,7 +176,9 @@
<VSMSBuildSdkResolversDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'toolset', 'VSSdkResolvers'))</VSMSBuildSdkResolversDir> <VSMSBuildSdkResolversDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'toolset', 'VSSdkResolvers'))</VSMSBuildSdkResolversDir>
<IntermediateSymbolsRootDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsObjDir)', 'Symbols'))</IntermediateSymbolsRootDir> <IntermediateSymbolsRootDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsObjDir)', 'Symbols'))</IntermediateSymbolsRootDir>
<AssetManifestsIntermediateDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsObjDir)', 'AssetManifests'))</AssetManifestsIntermediateDir>
<ArtifactsAssetsDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'assets', '$(Configuration)'))</ArtifactsAssetsDir> <ArtifactsAssetsDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'assets', '$(Configuration)'))</ArtifactsAssetsDir>
<ArtifactsAssetsSymbolsDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsAssetsDir)', 'Symbols'))</ArtifactsAssetsSymbolsDir>
<PrebuiltPackagesPath>$([MSBuild]::NormalizeDirectory('$(PrereqsPackagesDir)', 'prebuilt'))</PrebuiltPackagesPath> <PrebuiltPackagesPath>$([MSBuild]::NormalizeDirectory('$(PrereqsPackagesDir)', 'prebuilt'))</PrebuiltPackagesPath>
<PreviouslyRestoredPackagesPath>$([MSBuild]::NormalizeDirectory('$(PrereqsPackagesDir)', 'previouslyRestored'))</PreviouslyRestoredPackagesPath> <PreviouslyRestoredPackagesPath>$([MSBuild]::NormalizeDirectory('$(PrereqsPackagesDir)', 'previouslyRestored'))</PreviouslyRestoredPackagesPath>
@ -201,8 +205,8 @@
<!-- Build task assembly paths --> <!-- Build task assembly paths -->
<PropertyGroup> <PropertyGroup>
<XPlatSourceBuildTasksAssembly>$([MSBuild]::NormalizePath('$(ArtifactsBinDir)', 'Microsoft.DotNet.SourceBuild.Tasks.XPlat', '$(Configuration)', 'Microsoft.DotNet.SourceBuild.Tasks.XPlat.dll'))</XPlatSourceBuildTasksAssembly> <MicrosoftDotNetUnifiedBuildTasksAssembly>$([MSBuild]::NormalizePath('$(ArtifactsBinDir)', 'Microsoft.DotNet.UnifiedBuild.Tasks', '$(Configuration)', 'Microsoft.DotNet.UnifiedBuild.Tasks.dll'))</MicrosoftDotNetUnifiedBuildTasksAssembly>
<LeakDetectionTasksAssembly>$([MSBuild]::NormalizePath('$(ArtifactsBinDir)', 'Microsoft.DotNet.SourceBuild.Tasks.LeakDetection', '$(Configuration)', 'Microsoft.DotNet.SourceBuild.Tasks.LeakDetection.dll'))</LeakDetectionTasksAssembly> <MicrosoftDotNetSourceBuildTasksLeakDetectionAssembly>$([MSBuild]::NormalizePath('$(ArtifactsBinDir)', 'Microsoft.DotNet.SourceBuild.Tasks.LeakDetection', '$(Configuration)', 'Microsoft.DotNet.SourceBuild.Tasks.LeakDetection.dll'))</MicrosoftDotNetSourceBuildTasksLeakDetectionAssembly>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(EnablePoison)' == 'true'"> <PropertyGroup Condition="'$(EnablePoison)' == 'true'">

View file

@ -7,7 +7,7 @@
<SdkFilenamePrefix>dotnet-sdk-</SdkFilenamePrefix> <SdkFilenamePrefix>dotnet-sdk-</SdkFilenamePrefix>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<SdkTarballItem Include="$(ArtifactsAssetsDir)$(SdkFilenamePrefix)*$(ArchiveExtension)" /> <SdkTarballItem Include="$(ArtifactsAssetsDir)Sdk/**/$(SdkFilenamePrefix)*$(ArchiveExtension)" />
</ItemGroup> </ItemGroup>
<!-- <!--
@ -19,6 +19,7 @@
--> -->
<PropertyGroup> <PropertyGroup>
<SdkFilename>%(SdkTarballItem.Filename)%(SdkTarballItem.Extension)</SdkFilename> <SdkFilename>%(SdkTarballItem.Filename)%(SdkTarballItem.Extension)</SdkFilename>
<SdkTarballPath>%(SdkTarballItem.Identity)</SdkTarballPath>
<SourceBuiltSdkVersion>$(SdkFilename.Replace('$(SdkFilenamePrefix)','').Replace('-$(TargetRid)$(ArchiveExtension)',''))</SourceBuiltSdkVersion> <SourceBuiltSdkVersion>$(SdkFilename.Replace('$(SdkFilenamePrefix)','').Replace('-$(TargetRid)$(ArchiveExtension)',''))</SourceBuiltSdkVersion>
</PropertyGroup> </PropertyGroup>
</Target> </Target>

View file

@ -0,0 +1,21 @@
<Project>
<PropertyGroup>
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
<!-- Using multiple feeds isn't supported by Maestro: https://github.com/dotnet/arcade/issues/14155. -->
<NoWarn>$(NoWarn);NU1507</NoWarn>
</PropertyGroup>
<ItemGroup>
<!-- Command-line-api dependencies -->
<PackageVersion Include="System.CommandLine" Version="$(SystemCommandLineVersion)" />
<!-- MSBuild dependencies -->
<PackageVersion Include="Microsoft.Build.Tasks.Core" Version="$(MicrosoftBuildVersion)" />
<PackageVersion Include="Microsoft.Build.Utilities.Core" Version="$(MicrosoftBuildVersion)" />
<!-- Runtime dependencies -->
<PackageVersion Include="Microsoft.Extensions.FileSystemGlobbing" Version="$(MicrosoftExtensionsFileSystemGlobbingVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="$(MicrosoftExtensionsLoggingConsoleVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="$(MicrosoftExtensionsLoggingVersion)" />
</ItemGroup>
</Project>

View file

@ -103,7 +103,7 @@ In case you don't want to / cannot prepare your environment per the requirements
```bash ```bash
# Prep the source to build on your distro. # Prep the source to build on your distro.
# This downloads a .NET SDK and a number of .NET packages needed to build .NET from source. # This downloads a .NET SDK and a number of .NET packages needed to build .NET from source.
./prep.sh ./prep-source-build.sh
# Build the .NET SDK # Build the .NET SDK
./build.sh -sb --clean-while-building ./build.sh -sb --clean-while-building
@ -149,7 +149,7 @@ git clone https://github.com/dotnet/dotnet .
./build.sh --clean-while-building ./build.sh --clean-while-building
# - Building from source # - Building from source
./prep.sh && ./build.sh -sb --clean-while-building ./prep-source-build.sh && ./build.sh -sb --clean-while-building
mkdir -p $HOME/.dotnet mkdir -p $HOME/.dotnet
tar -zxf artifacts/assets/Release/dotnet-sdk-9.0.100-centos.8-x64.tar.gz -C $HOME/.dotnet tar -zxf artifacts/assets/Release/dotnet-sdk-9.0.100-centos.8-x64.tar.gz -C $HOME/.dotnet

View file

@ -10,6 +10,12 @@
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" /> <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
<Target Name="Build"> <Target Name="Build">
<PropertyGroup>
<BuildModeInfoText Condition="'$(DotNetBuildSourceOnly)' == 'true'">source-build</BuildModeInfoText>
<BuildModeInfoText Condition="'$(DotNetBuildSourceOnly)' != 'true'">non-source-build</BuildModeInfoText>
</PropertyGroup>
<Message Text="Build Mode: $(BuildModeInfoText)" Importance="high" />
<Message Text="Build Environment: $(TargetArchitecture) $(Configuration) $(TargetOS) $(TargetRid)" Importance="high" /> <Message Text="Build Environment: $(TargetArchitecture) $(Configuration) $(TargetOS) $(TargetRid)" Importance="high" />
<MSBuild Projects="$(ToolsDir)init-build.proj; <MSBuild Projects="$(ToolsDir)init-build.proj;
@ -19,6 +25,31 @@
StopOnFirstFailure="true" /> StopOnFirstFailure="true" />
</Target> </Target>
<!-- Create a merge manifest from the individual repository manifest files. -->
<UsingTask TaskName="Microsoft.DotNet.UnifiedBuild.Tasks.MergeAssetManifests" AssemblyFile="$(MicrosoftDotNetUnifiedBuildTasksAssembly)" />
<Target Name="MergeAssetManifests" AfterTargets="Build">
<PropertyGroup>
<MergedAssetManifestOutputPath>$(ArtifactsDir)VerticalManifest.xml</MergedAssetManifestOutputPath>
</PropertyGroup>
<ItemGroup>
<RepoAssetManifest Include="$(AssetManifestsIntermediateDir)\**\*.xml" />
</ItemGroup>
<!-- It's OK for the VmrBuildNumber to be empty -->
<Microsoft.DotNet.UnifiedBuild.Tasks.MergeAssetManifests
AssetManifest="@(RepoAssetManifest)"
MergedAssetManifestOutputPath="$(MergedAssetManifestOutputPath)"
VmrBuildNumber="$(BUILD_BUILDNUMBER)" />
</Target>
<Import Project="$(RepositoryEngineeringDir)build.sourcebuild.targets" Condition="'$(DotNetBuildSourceOnly)' == 'true'" /> <Import Project="$(RepositoryEngineeringDir)build.sourcebuild.targets" Condition="'$(DotNetBuildSourceOnly)' == 'true'" />
<!-- Intentionally below the import to appear at the end. -->
<Target Name="LogBuildOutputFolders"
AfterTargets="Build">
<Message Importance="high" Text="Shipping packages are located in '$(ArtifactsShippingPackagesDir)'." />
<Message Importance="high" Text="Shipping assets are located in '$(ArtifactsAssetsDir)'." />
</Target>
</Project> </Project>

View file

@ -28,16 +28,17 @@ usage()
echo " --release-manifest <FILE> A JSON file, an alternative source of Source Link metadata" echo " --release-manifest <FILE> A JSON file, an alternative source of Source Link metadata"
echo " --source-repository <URL> Source Link repository URL, required when building from tarball" echo " --source-repository <URL> Source Link repository URL, required when building from tarball"
echo " --source-version <SHA> Source Link revision, required when building from tarball" echo " --source-version <SHA> Source Link revision, required when building from tarball"
echo " --use-mono-runtime Output uses the mono runtime"
echo " --with-packages <DIR> Use the specified directory of previously-built packages" echo " --with-packages <DIR> Use the specified directory of previously-built packages"
echo " --with-sdk <DIR> Use the SDK in the specified directory for bootstrapping" echo " --with-sdk <DIR> Use the SDK in the specified directory for bootstrapping"
echo "" echo ""
echo "Advanced settings:" echo "Advanced settings:"
echo " --build-tests Build repository tests. May not be supported with --source-only"
echo " --ci Set when running on CI server" echo " --ci Set when running on CI server"
echo " --clean-while-building Cleans each repo after building (reduces disk space usage, short: -cwb)" echo " --clean-while-building Cleans each repo after building (reduces disk space usage, short: -cwb)"
echo " --excludeCIBinarylog Don't output binary log (short: -nobl)" echo " --excludeCIBinarylog Don't output binary log (short: -nobl)"
echo " --prepareMachine Prepare machine for CI run, clean up processes after build" echo " --prepareMachine Prepare machine for CI run, clean up processes after build"
echo " --use-mono-runtime Output uses the mono runtime"
echo "" echo ""
echo "Command line arguments not listed above are passed thru to msbuild." echo "Command line arguments not listed above are passed thru to msbuild."
echo "Arguments can also be passed in with a single hyphen." echo "Arguments can also be passed in with a single hyphen."
@ -139,9 +140,6 @@ while [[ $# > 0 ]]; do
sourceVersion="$2" sourceVersion="$2"
shift shift
;; ;;
-use-mono-runtime)
properties="$properties /p:SourceBuildUseMonoRuntime=true"
;;
-with-packages) -with-packages)
CUSTOM_PACKAGES_DIR="$(cd -P "$2" && pwd)" CUSTOM_PACKAGES_DIR="$(cd -P "$2" && pwd)"
if [ ! -d "$CUSTOM_PACKAGES_DIR" ]; then if [ ! -d "$CUSTOM_PACKAGES_DIR" ]; then
@ -164,6 +162,9 @@ while [[ $# > 0 ]]; do
;; ;;
# Advanced settings # Advanced settings
-build-tests)
properties="$properties /p:DotNetBuildTests=true"
;;
-ci) -ci)
ci=true ci=true
;; ;;
@ -176,6 +177,9 @@ while [[ $# > 0 ]]; do
-preparemachine) -preparemachine)
prepare_machine=true prepare_machine=true
;; ;;
-use-mono-runtime)
properties="$properties /p:SourceBuildUseMonoRuntime=true"
;;
*) *)
properties="$properties $1" properties="$properties $1"
@ -305,7 +309,7 @@ if [[ "$sourceOnly" == "true" ]]; then
fi fi
if [ ! -d "$scriptroot/.git" ]; then if [ ! -d "$scriptroot/.git" ]; then
echo "ERROR: $scriptroot is not a git repository. Please run prep.sh add initialize Source Link metadata." echo "ERROR: $scriptroot is not a git repository."
exit 1 exit 1
fi fi

View file

@ -3,9 +3,9 @@
<ProductDependencies> <ProductDependencies>
</ProductDependencies> </ProductDependencies>
<ToolsetDependencies> <ToolsetDependencies>
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="9.0.0-beta.24102.4"> <Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="9.0.0-beta.24177.2">
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
<Sha>2fb543a45580400a559b5ae41c96a815ea14dac5</Sha> <Sha>689fb2d1b620a9df28c3384d9b208e3654a0f928</Sha>
</Dependency> </Dependency>
</ToolsetDependencies> </ToolsetDependencies>
</Dependencies> </Dependencies>

View file

@ -3,6 +3,7 @@
<PropertyGroup> <PropertyGroup>
<VersionPrefix>0.1.0</VersionPrefix> <VersionPrefix>0.1.0</VersionPrefix>
<PreReleaseVersionLabel>alpha.1</PreReleaseVersionLabel> <PreReleaseVersionLabel>alpha.1</PreReleaseVersionLabel>
<UseVSTestRunner>true</UseVSTestRunner>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<!-- <!--
@ -22,9 +23,15 @@
of a .NET major or minor release, prebuilts may be needed. When the release is mature, prebuilts 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. are not necessary, and this property is removed from the file.
--> -->
<PrivateSourceBuiltSdkVersion>9.0.100-preview.2.24104.1</PrivateSourceBuiltSdkVersion> <PrivateSourceBuiltSdkVersion>9.0.100-preview.4.24179.1</PrivateSourceBuiltSdkVersion>
<PrivateSourceBuiltArtifactsVersion>9.0.100-preview.2.24104.1</PrivateSourceBuiltArtifactsVersion> <PrivateSourceBuiltArtifactsVersion>9.0.100-preview.4.24179.1</PrivateSourceBuiltArtifactsVersion>
<!-- msbuild --> <!-- msbuild -->
<MicrosoftBuildVersion>15.7.179</MicrosoftBuildVersion> <MicrosoftBuildVersion>17.8.3</MicrosoftBuildVersion>
<!-- runtime -->
<MicrosoftExtensionsFileSystemGlobbingVersion>9.0.0-preview.2.24128.5</MicrosoftExtensionsFileSystemGlobbingVersion>
<MicrosoftExtensionsLoggingConsoleVersion>9.0.0-preview.2.24128.5</MicrosoftExtensionsLoggingConsoleVersion>
<MicrosoftExtensionsLoggingVersion>9.0.0-preview.2.24128.5</MicrosoftExtensionsLoggingVersion>
<!-- command-line-api -->
<SystemCommandLineVersion>2.0.0-beta4.24126.1</SystemCommandLineVersion>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View file

@ -0,0 +1,59 @@
# Contains the binaries that are allowed for source build
# This file is used by the Binary Tool to remove binaries from the VMR
# If importing a file, include the relative path to the file
**/*.bmp
**/*.doc
**/*.docx
**/*.gif
**/*.ico
**/*.jpg
**/*.JPG
**/*.pdf
**/*.png
**/*.PNG
**/*.rtf
**/*.snk
**/*.vsd
**/*.vsdx
**/*.xlsx
**/*.ttf
**/*.cur
**/*.icm
**/*.reg
# aspnetcore
src/aspnetcore/src/**/samples/**/*.eot
src/aspnetcore/src/**/samples/**/*.pfx
src/aspnetcore/src/**/samples/**/*.woff*
src/aspnetcore/src/**/Samples/**/*.woff*
src/aspnetcore/src/Components/benchmarkapps/BlazingPizza.Server/wwwroot/css/font/quicksand-v8-latin-*.woff*
src/aspnetcore/src/Components/Web.JS/dist/Release/blazor.*.js # JavaScript files with a null bytes
src/aspnetcore/src/ProjectTemplates/Web.ProjectTemplates/**/app.db
src/aspnetcore/src/submodules/Node-Externals/cache/**/* # https://github.com/dotnet/source-build/issues/4161
# fsharp
src/fsharp/src/fsi/fsi.res # Icon
# razor
src/razor/**/SampleApp/**/fonts/**/*.eot
src/razor/**/SampleApp/**/fonts/**/*.otf
src/razor/**/SampleApp/**/fonts/**/*.woff
# roslyn
src/roslyn/src/ExpressionEvaluator/Core/Source/ExpressionCompiler/Resources/WindowsProxy.winmd
# runtime
src/runtime/src/libraries/System.Diagnostics.EventLog/src/Messages/EventLogMessages.res # Icon
src/runtime/src/libraries/System.Speech/src/**/*.upsmap # https://github.com/dotnet/runtime/issues/81692
src/runtime/src/libraries/System.Text.Encoding.CodePages/src/Data/codepages.nlp # https://github.com/dotnet/runtime/issues/81693
src/runtime/src/native/external/brotli/common/dictionary.bin.br
# source-build-externals
src/source-build-externals/src/humanizer/src/Humanizer.Tests**/*.pfx
src/source-build-externals/src/newtonsoft-json/Src/Newtonsoft.Json.Tests/SpaceShipV2.bson
src/source-build-externals/src/azure-activedirectory-identitymodel-extensions-for-dotnet/build/strongNameBypass.reg # UTF16-LE text file
src/source-build-externals/src/azure-activedirectory-identitymodel-extensions-for-dotnet/build/strongNameBypass2.reg # UTF16-LE text file
src/source-build-externals/src/azure-activedirectory-identitymodel-extensions-for-dotnet/test/Certs/*.pfx
src/source-build-externals/src/azure-activedirectory-identitymodel-extensions-for-dotnet/test/Certs/*.cer

View file

@ -0,0 +1,143 @@
# Contains the binaries that are allowed in the VMR
# This file is used by the Binary Tool to detect new binaries that get added to the VMR
# Import the allowed souce-build binaries (a stricter set).
import:allowed-sb-binaries.txt
**/testCert*.pfx
**/TestCert*.pfx
# arcade
src/arcade/src/Microsoft.DotNet.*.Tests/**/*
src/arcade/src/Microsoft.DotNet.NuGetRepack/tests/Resources/*.nupkg
src/arcade/src/Microsoft.DotNet.NuGetRepack/tests/Resources/.signature.p7s
# aspnetcore
src/aspnetcore/src/submodules/MessagePack-CSharp/**/*.dll
src/aspnetcore/src/SignalR/clients/java/signalr/gradle/wrapper/gradle-wrapper.jar
src/aspnetcore/src/Components/**/testassets/**/*.woff*
src/aspnetcore/src/Security/Authentication/Negotiate/test/Negotiate.FunctionalTest/negotiateAuthCert.pfx
src/aspnetcore/src/**/test/**/*.cer
src/aspnetcore/src/Shared/TestCertificates/*.pfx
src/aspnetcore/src/Shared/TestCertificates/*.crt
# cecil
src/cecil/Test/Resources/assemblies/*.netmodule
src/cecil/Test/Resources/assemblies/*.winmd
src/cecil/Test/Resources/assemblies/*.exe
src/cecil/Test/Resources/assemblies/*.dll
src/cecil/Test/Resources/assemblies/*.pdb
src/cecil/Test/Resources/assemblies/*.mdb
src/cecil/rocks/Test/Resources/assemblies/*.dll
src/cecil/symbols/**/Test/Resources/assemblies/*.exe
src/cecil/symbols/**/Test/Resources/assemblies/*.pdb
src/cecil/symbols/**/Test/Resources/assemblies/*.dll
src/cecil/symbols/**/Test/Resources/assemblies/*.mdb
# fsharp
src/fsharp/tests/**/*.resources
src/fsharp/tests/**/*.dll
src/fsharp/tests/**/*.exe
src/fsharp/tests/fsharp/core/resources/chimes.wav
# msbuild
src/msbuild/src/Tasks.UnitTests/TestResources/*.pfx
src/msbuild/src/Tasks.UnitTests/AssemblyDependency/CacheFileSamples/Microsoft.VisualStudio.LanguageServices.Implementation.csprojAssemblyReference.cache
# nuget-client
src/nuget-client/test/EndToEnd/Packages/**/*.nupkg
src/nuget-client/test/EndToEnd/Packages/**/*.zip
src/nuget-client/test/EndToEnd/Packages/**/*.dll
src/nuget-client/test/NuGet.Clients.Tests/NuGet.CommandLine.Test/compiler/resources/*.nupkg
src/nuget-client/test/NuGet.Clients.Tests/NuGet.PackageManagement.UI.Test/Resources/customMetadata.jpeg
src/nuget-client/test/NuGet.Core.Tests/NuGet.Commands.Test/compiler/resources/EmptyCertificateStore.p7b
src/nuget-client/test/NuGet.Core.Tests/NuGet.Protocol.Tests/compiler/resources/*.dll
src/nuget-client/test/NuGet.Core.FuncTests/NuGet.Packaging.FuncTest/compiler/resources/*.nupkg
src/nuget-client/test/NuGet.Core.FuncTests/NuGet.Packaging.FuncTest/compiler/resources/*.zip
src/nuget-client/test/NuGet.Core.FuncTests/Dotnet.Integration.Test/compiler/resources/*.nupkg
src/nuget-client/test/TestUtilities/Test.Utility/compiler/resources/*.crt
src/nuget-client/test/TestUtilities/Test.Utility/compiler/resources/.signature.p7s
src/nuget-client/test/TestUtilities/Test.Utility/compiler/resources/*.nupkg
src/nuget-client/test/TestUtilities/Test.Utility/compiler/resources/*.zip
# razor
src/razor/src/Razor/test/Microsoft.VisualStudio.Razor.IntegrationTests/TestFiles/BlazorProject.zip
src/razor/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Resources/project.razor.bin
# roslyn
src/roslyn/src/Compilers/Test/Resources/Core/**/*.metadata
src/roslyn/src/Compilers/Test/Resources/Core/**/*.winmd
src/roslyn/src/Compilers/Test/Resources/Core/**/*.mod
src/roslyn/src/Compilers/Test/Resources/Core/**/*.netmodule
src/roslyn/src/Compilers/Test/Resources/Core/**/*.obj
src/roslyn/src/Compilers/Test/Resources/Core/**/*.dll
src/roslyn/src/Compilers/Test/Resources/Core/**/*.exe
src/roslyn/src/Compilers/Test/Resources/Core/**/*.Dll
src/roslyn/src/Workspaces/MSBuildTest/Resources/Dlls/*.dll
src/roslyn/**/CodeAnalysisTest/**/*.res
src/roslyn/**/CodeAnalysisTest/**/*.blah
src/roslyn/**/CodeAnalysisTest/**/*.RES
# runtime
src/runtime/src/mono/mono/eglib/test/*.txt
src/runtime/src/mono/mono/tests/exiting/*.out
src/runtime/src/**/tests/**/*.res
src/runtime/src/**/tests/**/*.resources
src/runtime/src/tests/FunctionalTests/Android/Device_Emulator/gRPC/grpc-dotnet/testassets/Certs/InteropTests/server1.pfx
src/runtime/src/tests/FunctionalTests/Android/Device_Emulator/AOT_PROFILED/*.mibc
src/runtime/src/tests/FunctionalTests/Android/Device_Emulator/AOT_PROFILED/*.nettrace
src/runtime/src/libraries/System.Runtime.Serialization.Xml/tests/Canonicalization/baselines/ReaderWriter_C14N_BaselineXML_Binary.xml
src/runtime/src/libraries/System.Reflection.Metadata/tests/Resources/NetModule/*.mod
src/runtime/src/libraries/System.Reflection.Metadata/tests/Resources/WinRT/Lib.winmd
src/runtime/src/libraries/System.Reflection.Metadata/tests/Resources/Misc/CPPClassLibrary2.obj
src/runtime/src/libraries/System.Console/tests/TestData/ncursesFormats/s/screen-256color
src/runtime/src/libraries/System.Console/tests/TestData/ncursesFormats/x/xterm
src/runtime/src/mono/wasm/testassets/**/*.dat
src/runtime/src/mono/wasm/testassets/**/*.o
src/runtime/src/libraries/**/tests/**/*.dll
src/runtime/src/libraries/**/tests/**/*.exe
src/runtime/src/libraries/**/tests/**/*.pdb
# sdk
src/sdk/src/Assets/TestProjects/**/*.dat
src/sdk/src/Assets/TestProjects/**/*.cache
src/sdk/src/Assets/TestProjects/**/*.tlb
src/sdk/src/Assets/TestPackages/dotnet-new/nupkg_templates/*
src/sdk/test/Microsoft.DotNet.ShellShim.Tests/WpfBinaryTestAsssets/*.dll
src/sdk/test/Microsoft.NET.Sdk.Publish.Tasks.Tests/Resources/*.zip
# source-build-externals
src/source-build-externals/src/application-insights*/WEB/Src/WindowsServer/WindowsServer.Tests/**/*.dll
# symreader
src/symreader/src/PdbTestResources/Resources/*
# templating
src/templating/test/Microsoft.TemplateEngine.TestTemplates/nupkg_templates/*.nupkg
# test-templates
src/test-templates/Templates/**/*.nupkg
# vstest
src/vstest/samples/Microsoft.TestPlatform.*/Adapter/Microsoft.VisualStudio.TestPlatform.*.dll
src/vstest/temp/cpp/**/*.dll
src/vstest/test/Microsoft.TestPlatform.CoreUtilities.UnitTests/TestAssets/*.exe
src/vstest/test/Microsoft.TestPlatform.CoreUtilities.UnitTests/TestAssets/dotnetMac*
src/vstest/test/Microsoft.TestPlatform.Utilities.UnitTests/TestFiles/fullcovered.coverage
src/vstest/test/TestAssets/LegacySettingsUnitTestProject/DependencyAssembly/DependencyAssemblyForTest.dll
# winforms
src/winforms/src/System.Windows.Forms/tests/IntegrationTests/MauiTests/lib/*.dll
src/winforms/src/System.Windows.Forms/tests/IntegrationTests/WinformsControlsTest/Resources/media.mpg
src/winforms/src/System.Windows.Forms/tests/UnitTests/bitmaps/milkmateya01.emf
src/winforms/src/System.Windows.Forms/tests/UnitTests/TestResources/VB6/SimpleControl.vb6
src/winforms/src/System.Windows.Forms*/**/*.wmf
src/winforms/src/System.Windows.Forms.Design/src/Resources/colordlg.data
# wpf
src/wpf/src/Microsoft.DotNet.Wpf/src/ReachFramework/Resources/generated/*.resources
src/wpf/src/Microsoft.DotNet.Wpf/src/PresentationFramework/Resources/Hyphenation/Hyphen_en.lex
src/wpf/src/Microsoft.DotNet.Wpf/src/PresentationFramework/Resources/Hyphenation/Hyphen_en.hdict
src/wpf/src/Microsoft.DotNet.Wpf/src/Shared/Tracing/resources/*.BIN
src/wpf/src/Microsoft.DotNet.Wpf/src/Shared/Tracing/resources/*.bin

View file

@ -10,6 +10,7 @@ Param(
[switch][Alias('h')]$help, [switch][Alias('h')]$help,
# Advanced settings # Advanced settings
[switch]$buildTests,
[switch]$ci, [switch]$ci,
[switch][Alias('cwb')]$cleanWhileBuilding, [switch][Alias('cwb')]$cleanWhileBuilding,
[switch][Alias('nobl')]$excludeCIBinarylog, [switch][Alias('nobl')]$excludeCIBinarylog,
@ -30,6 +31,7 @@ function Get-Usage() {
Write-Host "" Write-Host ""
Write-Host "Advanced settings:" Write-Host "Advanced settings:"
Write-Host " -build-tests Build repository tests"
Write-Host " -ci Set when running on CI server" 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 " -cleanWhileBuilding Cleans each repo after building (reduces disk space usage, short: -cwb)"
Write-Host " -excludeCIBinarylog Don't output binary log (short: -nobl)" 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 { '' } $bl = if ($binaryLog) { '/bl:' + (Join-Path $LogDir 'Build.binlog') } else { '' }
$cwb = if ($cleanWhileBuilding) { '/p:CleanWhileBuilding=true' } else { '' } $cwb = if ($cleanWhileBuilding) { '/p:CleanWhileBuilding=true' } else { '' }
$btst = if ($buildTests) { '/p:DotNetBuildTests=true' } else { '' }
$buildProj = Join-Path $RepoRoot 'build.proj' $buildProj = Join-Path $RepoRoot 'build.proj'
MSBuild $buildProj ` MSBuild $buildProj `
$bl ` $bl `
/p:Configuration=$configuration ` /p:Configuration=$configuration `
$cwb ` $cwb `
$btst `
@properties @properties
} }

View file

@ -31,24 +31,19 @@
</Target> </Target>
<!-- After building, create the sdk symbols tarball. --> <!-- After building, create the sdk symbols tarball. -->
<UsingTask AssemblyFile="$(XPlatSourceBuildTasksAssembly)" TaskName="CreateSdkSymbolsLayout" /> <UsingTask TaskName="Microsoft.DotNet.UnifiedBuild.Tasks.CreateSdkSymbolsLayout" AssemblyFile="$(MicrosoftDotNetUnifiedBuildTasksAssembly)" />
<Target Name="CreateSdkSymbolsTarball" <Target Name="CreateSdkSymbolsTarball"
AfterTargets="Build" AfterTargets="Build"
DependsOnTargets="RepackageSymbols"> DependsOnTargets="RepackageSymbols">
<ItemGroup>
<SdkTarballItem Include="$(ArtifactsAssetsDir)dotnet-sdk-*$(ArchiveExtension)" />
</ItemGroup>
<PropertyGroup> <PropertyGroup>
<SdkSymbolsTarball>$(ArtifactsAssetsDir)dotnet-symbols-sdk-$(SourceBuiltSdkVersion)-$(TargetRid)$(ArchiveExtension)</SdkSymbolsTarball> <SdkSymbolsTarball>$(ArtifactsAssetsDir)dotnet-symbols-sdk-$(SourceBuiltSdkVersion)-$(TargetRid)$(ArchiveExtension)</SdkSymbolsTarball>
<IntermediateSdkSymbolsLayout>$(BaseIntermediateOutputPath)SdkSymbols</IntermediateSdkSymbolsLayout> <IntermediateSdkSymbolsLayout>$(BaseIntermediateOutputPath)SdkSymbols</IntermediateSdkSymbolsLayout>
<IntermediateSdkLayout>$(BaseIntermediateOutputPath)Sdk</IntermediateSdkLayout> <IntermediateSdkLayout>$(BaseIntermediateOutputPath)Sdk</IntermediateSdkLayout>
<SdkTarball>%(SdkTarballItem.Identity)</SdkTarball>
</PropertyGroup> </PropertyGroup>
<MakeDir Directories="$(IntermediateSdkLayout)" /> <MakeDir Directories="$(IntermediateSdkLayout)" />
<Exec Command="tar -xzf $(SdkTarball) -C $(IntermediateSdkLayout)" /> <Exec Command="tar -xzf $(SdkTarballPath) -C $(IntermediateSdkLayout)" />
<CreateSdkSymbolsLayout SdkLayoutPath="$(IntermediateSdkLayout)" <CreateSdkSymbolsLayout SdkLayoutPath="$(IntermediateSdkLayout)"
AllSymbolsPath="$(IntermediateSymbolsRootDir)" AllSymbolsPath="$(IntermediateSymbolsRootDir)"
@ -76,7 +71,7 @@
Targets="ReportPrebuiltUsage" /> Targets="ReportPrebuiltUsage" />
</Target> </Target>
<UsingTask AssemblyFile="$(LeakDetectionTasksAssembly)" TaskName="CheckForPoison" Condition="'$(EnablePoison)' == 'true'" /> <UsingTask TaskName="Microsoft.DotNet.SourceBuild.Tasks.LeakDetection.CheckForPoison" AssemblyFile="$(MicrosoftDotNetSourceBuildTasksLeakDetectionAssembly)" Condition="'$(EnablePoison)' == 'true'" />
<Target Name="ReportPoisonUsage" <Target Name="ReportPoisonUsage"
AfterTargets="Build" AfterTargets="Build"
Condition="'$(EnablePoison)' == 'true'" Condition="'$(EnablePoison)' == 'true'"
@ -108,7 +103,7 @@
</Touch> </Touch>
</Target> </Target>
<UsingTask AssemblyFile="$(XPlatSourceBuildTasksAssembly)" TaskName="WriteUsageBurndownData" /> <UsingTask TaskName="Microsoft.DotNet.UnifiedBuild.Tasks.UsageReport.WriteUsageBurndownData" AssemblyFile="$(MicrosoftDotNetUnifiedBuildTasksAssembly)" />
<Target Name="GeneratePrebuiltBurndownData" <Target Name="GeneratePrebuiltBurndownData"
Inputs="$(MSBuildProjectFullPath)" Inputs="$(MSBuildProjectFullPath)"
Outputs="$(BaseIntermediateOutputPath)GeneratePrebuiltBurndownData.complete" > Outputs="$(BaseIntermediateOutputPath)GeneratePrebuiltBurndownData.complete" >

View file

@ -0,0 +1,139 @@
#!/usr/bin/env bash
### Usage: $0
###
### Prepares and runs the binary tooling to detect binaries in the VMR. Default behavior is to report any binaries
### not found in the allowed-binaries file. To remove binaries not specified in the allowed-binaries file, pass --clean.
###
### Options:
### --clean Clean the VMR of binaries not in the specified allowed-binaries file.
### --allowed-binaries-file Path to the file containing the list of binaries to be
### ignored for either cleaning or validating.
### Defaults to eng/allowed-vmr-binaries.txt.
### --log-level <level> Set the log level for the binary tooling. Defaults to Debug.
### --with-packages Use the specified directory as the packages source feed.
### Defaults to online dotnet-public and dotnet-libraries feeds.
### --with-sdk Use the specified directory as the dotnet SDK.
### Defaults to .dotnet.
set -euo pipefail
IFS=$'\n\t'
source="${BASH_SOURCE[0]}"
REPO_ROOT="$( cd -P "$( dirname "$0" )/../" && pwd )"
BINARY_TOOL="$REPO_ROOT/eng/tools/BinaryToolKit"
function print_help () {
sed -n '/^### /,/^$/p' "$source" | cut -b 5-
}
defaultDotnetSdk="$REPO_ROOT/.dotnet"
defaultAllowedBinariesFile="$REPO_ROOT/eng/allowed-vmr-binaries.txt"
# Set default values
allowedBinariesFile=$defaultAllowedBinariesFile
mode='validate'
logLevel='Debug'
propsDir=''
packagesDir=''
dotnetSdk=$defaultDotnetSdk
positional_args=()
while :; do
if [ $# -le 0 ]; then
break
fi
lowerI="$(echo "$1" | awk '{print tolower($0)}')"
case $lowerI in
"-?"|-h|--help)
print_help
exit 0
;;
--clean)
mode="clean"
;;
--allowed-binaries-file)
allowedBinariesFile=$2
shift
;;
--log-level)
logLevel=$2
shift
;;
--with-packages)
packagesDir=$2
if [ ! -d "$packagesDir" ]; then
echo "ERROR: The specified packages directory does not exist."
exit 1
elif [ ! -f "$packagesDir/PackageVersions.props" ]; then
echo "ERROR: The specified packages directory does not contain PackageVersions.props."
exit 1
fi
shift
;;
--with-sdk)
dotnetSdk=$2
if [ ! -d "$dotnetSdk" ]; then
echo "Custom SDK directory '$dotnetSdk' does not exist"
exit 1
fi
if [ ! -x "$dotnetSdk/dotnet" ]; then
echo "Custom SDK '$dotnetSdk/dotnet' does not exist or is not executable"
exit 1
fi
shift
;;
*)
positional_args+=("$1")
;;
esac
shift
done
function ParseBinaryArgs
{
# Check allowed binaries file
if [ ! -f "$allowedBinariesFile" ]; then
echo "ERROR: The specified allowed-binaries file does not exist."
exit 1
fi
# Check dotnet sdk
if [ "$dotnetSdk" == "$defaultDotnetSdk" ]; then
if [ ! -d "$dotnetSdk" ]; then
. "$REPO_ROOT/eng/common/tools.sh"
InitializeDotNetCli true
fi
else if [ ! -x "$dotnetSdk/dotnet" ]; then
echo "'$dotnetSdk/dotnet' does not exist or is not executable"
exit 1
fi
fi
# Check the packages directory
if [ -z "$packagesDir" ]; then
# Use dotnet-public and dotnet-libraries feeds as the default packages source feeds
export ARTIFACTS_PATH="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json;https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-libraries/nuget/v3/index.json"
else
packagesDir=$(realpath ${packagesDir})
export ARTIFACTS_PATH=$packagesDir
fi
}
function RunBinaryTool
{
targetDir="$REPO_ROOT"
outputDir="$REPO_ROOT/artifacts/log/binary-report"
BinaryToolCommand=""$dotnetSdk/dotnet" run --project "$BINARY_TOOL" -c Release "$mode" "$targetDir" -o "$outputDir" -ab "$allowedBinariesFile" -l "$logLevel""
if [ -n "$packagesDir" ]; then
BinaryToolCommand=""$BinaryToolCommand" -p CustomPackageVersionsProps="$packagesDir/PackageVersions.props""
fi
# Run the Binary Tool
eval "$BinaryToolCommand"
}
ParseBinaryArgs
RunBinaryTool

View file

@ -2,25 +2,30 @@
# NOTE: the triggers are defined in the Azure DevOps UI as they are too complex # NOTE: the triggers are defined in the Azure DevOps UI as they are too complex
# #
# - dotnet-source-build (public) # - dotnet-source-build (public)
# https://dev.azure.com/dnceng-public/public/_build?definitionId=240
# - PR: ultralite build # - PR: ultralite build
# - CI: release/* only, every batched commit, full build # - CI: release/* only, every batched commit, full build
# - Schedule: main only, full build # - Schedule: main only, full build
# #
# - dotnet-unified-build (public) # - dotnet-unified-build (public)
# https://dev.azure.com/dnceng-public/public/_build?definitionId=278
# - PR: lite build # - PR: lite build
# - CI: release/* only, every batched commit, full build # - CI: release/* only, every batched commit, full build
# - Schedule: main only, full build # - Schedule: main only, full build
# #
# - dotnet-source-build (internal) # - dotnet-source-build (internal)
# https://dev.azure.com/dnceng/internal/_build?definitionId=1219
# - PR: ultralite build # - PR: ultralite build
# - CI: release/* and internal/release/* only, every batched commit, full build # - CI: release/* and internal/release/* only, every batched commit, full build
# - Schedule: main only, full build # - Schedule: main only, full build
# #
# - dotnet-source-build-lite (internal) # - dotnet-source-build-lite (internal)
# https://dev.azure.com/dnceng/internal/_build?definitionId=1299
# - PR: release/* and main, lite build, on-demand trigger # - PR: release/* and main, lite build, on-demand trigger
# - CI: main only, every batched commit, lite build # - CI: main only, every batched commit, lite build
# #
# - dotnet-unified-build (internal) # - dotnet-unified-build (internal)
# https://dev.azure.com/dnceng/internal/_build?definitionId=1330
# - PR: lite build # - PR: lite build
# - CI: release/*, internal/release/* and main, every batched commit, full build # - CI: release/*, internal/release/* and main, every batched commit, full build
@ -38,11 +43,32 @@ variables:
- name: isPRTrigger - name: isPRTrigger
value: ${{ eq(variables['Build.Reason'], 'PullRequest') }} value: ${{ eq(variables['Build.Reason'], 'PullRequest') }}
- template: /eng/common/templates-official/variables/pool-providers.yml@self
resources:
repositories:
- repository: 1ESPipelineTemplates
type: git
name: 1ESPipelineTemplates/1ESPipelineTemplates
ref: refs/tags/release
extends:
template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates
parameters:
sdl:
sourceAnalysisPool:
name: $(DncEngInternalBuildPool)
image: 1es-windows-2022
os: windows
baseline:
baselineFile: $(Build.SourcesDirectory)\.config\guardian\.gdnbaselines
stages: stages:
- ${{ if and(ne(variables.isPRTrigger, 'true'), eq(variables['System.TeamProject'], 'internal')) }}: - ${{ if and(ne(variables.isPRTrigger, 'true'), eq(variables['System.TeamProject'], 'internal')) }}:
- template: templates/stages/vmr-scan.yml - template: /eng/pipelines/templates/stages/vmr-scan.yml@self
- template: /src/installer/eng/pipelines/templates/stages/vmr-build.yml - template: /src/installer/eng/pipelines/templates/stages/vmr-build.yml@self
parameters: parameters:
isBuiltFromVmr: true isBuiltFromVmr: true
isSourceOnlyBuild: ${{ variables.isSourceOnlyBuild }} isSourceOnlyBuild: ${{ variables.isSourceOnlyBuild }}

View file

@ -0,0 +1,53 @@
# This yml is used by these PR pipelines and triggers:
# NOTE: the triggers are defined in the Azure DevOps UI as they are too complex
#
# - dotnet-source-build (public)
# - PR: ultralite build
# - CI: release/* only, every batched commit, full build
# - Schedule: main only, full build
#
# - dotnet-unified-build (public)
# - PR: lite build
# - CI: release/* only, every batched commit, full build
# - Schedule: main only, full build
#
# - dotnet-source-build (internal)
# - PR: ultralite build
#
# - dotnet-source-build-lite (internal)
# - PR: release/* and main, lite build, on-demand trigger
#
# - dotnet-unified-build (internal)
# - PR: lite build
variables:
# enable source-only build for pipelines that contain the -source-build string
- name: isSourceOnlyBuild
value: ${{ contains(variables['Build.DefinitionName'], '-source-build') }}
- name: isSourceOnlyBuildLite
value: ${{ contains(variables['Build.DefinitionName'], '-source-build-lite') }}
- name: isScheduleTrigger
value: ${{ eq(variables['Build.Reason'], 'Schedule') }}
- name: isPRTrigger
value: ${{ eq(variables['Build.Reason'], 'PullRequest') }}
- template: /eng/common/templates/variables/pool-providers.yml@self
stages:
- template: /src/installer/eng/pipelines/templates/stages/vmr-build.yml
parameters:
isBuiltFromVmr: true
isSourceOnlyBuild: ${{ variables.isSourceOnlyBuild }}
${{ if eq(variables.isScheduleTrigger, 'true') }}:
scope: full
${{ elseif eq(variables.isSourceOnlyBuildLite, 'true') }}:
scope: lite
${{ elseif and(eq(variables.isPRTrigger, 'true'), eq(variables.isSourceOnlyBuild, 'true')) }}:
scope: ultralite
${{ elseif and(eq(variables.isPRTrigger, 'true'), ne(variables.isSourceOnlyBuild, 'true')) }}:
scope: lite
${{ else }}:
scope: full

View file

@ -2,18 +2,13 @@ stages:
- stage: Tag_n_Scan - stage: Tag_n_Scan
displayName: Tag & Scan displayName: Tag & Scan
dependsOn: [] dependsOn: []
variables:
- template: /eng/common/templates/variables/pool-providers.yml
jobs: jobs:
- job: Tag_n_Scan - job: Tag_n_Scan
displayName: Tag & Scan displayName: Tag & Scan
pool: pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
name: $(DncEngPublicBuildPool)
demands: ImageOverride -equals Build.Ubuntu.2004.Amd64.Open
${{ if eq(variables['System.TeamProject'], 'internal') }}:
name: $(DncEngInternalBuildPool) name: $(DncEngInternalBuildPool)
demands: ImageOverride -equals Build.Ubuntu.2004.Amd64 image: 1es-ubuntu-2004
os: linux
steps: steps:
- checkout: self - checkout: self
@ -32,14 +27,10 @@ stages:
displayName: Tag the build displayName: Tag the build
workingDirectory: $(Build.SourcesDirectory)/src/installer workingDirectory: $(Build.SourcesDirectory)/src/installer
- script: > - script: |
./.dotnet/dotnet darc vmr scan-binary-files ./eng/detect-binaries.sh
--vmr "$(Build.SourcesDirectory)"
--tmp "$(Agent.TempDirectory)"
--baseline-file "src/VirtualMonoRepo/allowed-binaries.txt"
|| (echo '##[error]Found binaries in the VMR' && exit 1)
displayName: Scan for binaries displayName: Scan for binaries
workingDirectory: $(Build.SourcesDirectory)/src/installer workingDirectory: $(Build.SourcesDirectory)
continueOnError: true continueOnError: true
- script: > - script: >

View file

@ -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
}

View file

@ -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 <path>] [-n]"
echo ""
echo "Options:"
echo " -h, --help Show this help message and exit"
echo " -p, --path <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

View file

@ -0,0 +1,123 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
namespace BinaryToolKit;
public class BinaryTool
{
public async Task<int> ExecuteAsync(
string targetDirectory,
string outputReportDirectory,
string? allowedBinariesFile,
Modes mode)
{
DateTime startTime = DateTime.Now;
Log.LogInformation($"Starting binary tool at {startTime} in {mode} mode");
// Parse args
targetDirectory = GetAndValidateFullPath(
"TargetDirectory",
targetDirectory,
isDirectory: true,
createIfNotExist: false,
isRequired: true)!;
outputReportDirectory = GetAndValidateFullPath(
"OutputReportDirectory",
outputReportDirectory,
isDirectory: true,
createIfNotExist: true,
isRequired: true)!;
allowedBinariesFile = GetAndValidateFullPath(
"AllowedBinariesFile",
allowedBinariesFile,
isDirectory: false,
createIfNotExist: false,
isRequired: false);
// Run the tooling
var detectedBinaries = await DetectBinaries.ExecuteAsync(targetDirectory, outputReportDirectory, allowedBinariesFile);
if (mode == Modes.Validate)
{
ValidateBinaries(detectedBinaries, outputReportDirectory);
}
else if (mode == Modes.Clean)
{
RemoveBinaries(detectedBinaries, targetDirectory);
}
Log.LogInformation("Finished all binary tasks. Took " + (DateTime.Now - startTime).TotalSeconds + " seconds.");
return Log.GetExitCode();
}
private string? GetAndValidateFullPath(
string parameterName,
string? path,
bool isDirectory,
bool createIfNotExist,
bool isRequired)
{
if (string.IsNullOrWhiteSpace(path))
{
if (isRequired)
{
Log.LogError($"Required path for '{parameterName}' is empty or contains whitespace.");
Environment.Exit(1);
}
return null;
}
string fullPath = Path.GetFullPath(path);
bool exists = isDirectory ? Directory.Exists(fullPath) : File.Exists(fullPath);
if (!exists)
{
if (createIfNotExist && isDirectory)
{
Log.LogInformation($"Creating directory '{fullPath}' for '{parameterName}'.");
Directory.CreateDirectory(fullPath);
}
else
{
Log.LogError($"{(isDirectory ? "Directory" : "File")} '{fullPath}' for '{parameterName}' does not exist.");
Environment.Exit(1);
}
}
return fullPath;
}
private static void ValidateBinaries(IEnumerable<string> newBinaries, string outputReportDirectory)
{
if (newBinaries.Any())
{
string newBinariesFile = Path.Combine(outputReportDirectory, "NewBinaries.txt");
Log.LogDebug("New binaries:");
File.WriteAllLines(newBinariesFile, newBinaries);
foreach (var binary in newBinaries)
{
Log.LogDebug($" {binary}");
}
Log.LogError($"ERROR: {newBinaries.Count()} new binaries. Check '{newBinariesFile}' for details.");
}
}
private static void RemoveBinaries(IEnumerable<string> binariesToRemove, string targetDirectory)
{
Log.LogInformation($"Removing binaries from '{targetDirectory}'...");
foreach (var binary in binariesToRemove)
{
File.Delete(Path.Combine(targetDirectory, binary));
Log.LogDebug($" {binary}");
}
Log.LogInformation($"Finished binary removal. Removed {binariesToRemove.Count()} binaries.");
}
}

View file

@ -0,0 +1,26 @@
<Project Sdk="Microsoft.NET.Sdk" InitialTargets="CheckCustomPackageVersionsProps">
<PropertyGroup>
<TargetFramework>$(NetCurrent)</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<CustomPackageVersionsProps></CustomPackageVersionsProps>
<OutputType>Exe</OutputType>
</PropertyGroup>
<Target Name="CheckCustomPackageVersionsProps">
<Error Condition="'$(CustomPackageVersionsProps)' != '' And !Exists('$(CustomPackageVersionsProps)')" Text="CustomPackageVersionsProps file '$(CustomPackageVersionsProps)' does not exist." />
</Target>
<!-- Need to condition this import because msbuild will complain about the project not being valid otherwise. -->
<!-- With the condition, the CheckCustomPackageVersionsProps will run as expected and show the respective errors. -->
<Import Project="$(CustomPackageVersionsProps)" Condition="'$(CustomPackageVersionsProps)' != ''" />
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileSystemGlobbing" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" />
<PackageReference Include="Microsoft.Extensions.Logging" />
<PackageReference Include="System.CommandLine" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,245 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Diagnostics;
using Microsoft.Extensions.FileSystemGlobbing;
using System.Text.RegularExpressions;
namespace BinaryToolKit;
public static class DetectBinaries
{
private const string Utf16Marker = "UTF-16";
private const int ChunkSize = 4096;
private static readonly Regex GitCleanRegex = new Regex(@"Would (remove|skip)( repository)? (.*)");
public static async Task<List<string>> ExecuteAsync(
string targetDirectory,
string outputReportDirectory,
string? allowedBinariesFile)
{
Log.LogInformation($"Detecting binaries in '{targetDirectory}' not listed in '{allowedBinariesFile}'...");
var matcher = new Matcher(StringComparison.Ordinal);
matcher.AddInclude("**/*");
matcher.AddExcludePatterns(await GetIgnoredPatternsAsync(targetDirectory));
IEnumerable<string> matchingFiles = matcher.GetResultsInFullPath(targetDirectory);
var tasks = matchingFiles
.Select(async file =>
{
return await IsBinaryAsync(file) ? file.Substring(targetDirectory.Length + 1) : null;
});
var binaryFiles = (await Task.WhenAll(tasks)).OfType<string>();
var unmatchedBinaryFiles = GetUnmatchedBinaries(
binaryFiles,
allowedBinariesFile,
outputReportDirectory,
targetDirectory).ToList();
Log.LogInformation($"Finished binary detection.");
return unmatchedBinaryFiles;
}
private static async Task<List<string>> GetIgnoredPatternsAsync(string targetDirectory)
{
string gitDirectory = Path.Combine(targetDirectory, ".git");
bool isGitRepo = Directory.Exists(gitDirectory);
try
{
if (!isGitRepo)
{
// Configure a fake git repo to use so that we can run git clean -ndx
await ExecuteProcessAsync("git", $"-C {targetDirectory} init -q");
}
await ExecuteProcessAsync("git", $"-C {targetDirectory} config --global safe.directory {targetDirectory}");
string output = await ExecuteProcessAsync("git", $"-C {targetDirectory} clean -ndx");
List<string> ignoredPaths = output.Split(Environment.NewLine)
.Select(line => GitCleanRegex.Match(line))
.Where(match => match.Success)
.Select(match => match.Groups[3].Value)
.ToList();
if (isGitRepo)
{
ignoredPaths.Add(".git");
}
return ignoredPaths;
}
finally
{
// Ensure .git directory is deleted if it wasn't originally a git repo
if (!isGitRepo && Directory.Exists(gitDirectory))
{
Directory.Delete(gitDirectory, true);
}
}
}
private static async Task<bool> IsBinaryAsync(string filePath)
{
// Using the GNU diff heuristic to determine if a file is binary or not.
// For more details, refer to the GNU diff manual:
// https://www.gnu.org/software/diffutils/manual/html_node/Binary.html
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
using (BinaryReader br = new BinaryReader(fs))
{
byte[] buffer = new byte[ChunkSize];
int bytesRead = br.Read(buffer, 0, ChunkSize);
for (int i = 0; i < bytesRead; i++)
{
if (buffer[i] == 0)
{
// Need to check that the file is not UTF-16 encoded
// because heuristic can return false positives
return await IsNotUTF16Async(filePath);
}
}
}
return false;
}
private static async Task<bool> IsNotUTF16Async(string file)
{
if (Environment.OSVersion.Platform == PlatformID.Unix)
{
string output = await ExecuteProcessAsync("file", $"\"{file}\"");
output = output.Split(":")[1].Trim();
if (output.Contains(Utf16Marker))
{
return false;
}
}
return true;
}
private static async Task<string> ExecuteProcessAsync(string executable, string arguments)
{
ProcessStartInfo psi = new ()
{
FileName = executable,
Arguments = arguments,
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true
};
var proc = Process.Start(psi)!;
string output = await proc.StandardOutput.ReadToEndAsync();
string error = await proc.StandardError.ReadToEndAsync();
await proc.WaitForExitAsync();
if (!string.IsNullOrEmpty(error))
{
Log.LogError(error);
}
return output;
}
private static IEnumerable<string> GetUnmatchedBinaries(
IEnumerable<string> searchFiles,
string? allowedBinariesFile,
string outputReportDirectory,
string targetDirectory)
{
HashSet<string> unmatchedFiles = new HashSet<string>(searchFiles);
var filesToPatterns = new Dictionary<string, HashSet<string>>();
ParseAllowedBinariesFile(allowedBinariesFile, ref filesToPatterns);
foreach (var fileToPatterns in filesToPatterns)
{
var patterns = fileToPatterns.Value;
HashSet<string> unusedPatterns = new HashSet<string>(patterns);
foreach (string pattern in patterns)
{
Matcher matcher = new Matcher(StringComparison.Ordinal);
matcher.AddInclude(pattern);
var matches = matcher.Match(targetDirectory, searchFiles);
if (matches.HasMatches)
{
unusedPatterns.Remove(pattern);
unmatchedFiles.ExceptWith(matches.Files.Select(file => file.Path));
}
}
UpdateAllowedBinariesFile(fileToPatterns.Key, outputReportDirectory, unusedPatterns);
}
return unmatchedFiles;
}
private static void ParseAllowedBinariesFile(string? file, ref Dictionary<string, HashSet<string>> result)
{
if (!File.Exists(file))
{
return;
}
if (!result.ContainsKey(file))
{
result[file] = new HashSet<string>();
}
foreach (var line in File.ReadLines(file))
{
var trimmedLine = line.Trim();
if (string.IsNullOrWhiteSpace(trimmedLine) || trimmedLine.StartsWith("#"))
{
continue;
}
if (trimmedLine.StartsWith("import:"))
{
var importFile = trimmedLine.Substring("import:".Length).Trim();
if (!Path.IsPathFullyQualified(importFile))
{
var currentDirectory = Path.GetDirectoryName(file)!;
importFile = Path.Combine(currentDirectory, importFile);
}
if (result.ContainsKey(importFile))
{
Log.LogWarning($" Duplicate import {importFile}. Skipping.");
continue;
}
ParseAllowedBinariesFile(importFile, ref result);
}
else
{
result[file].Add(trimmedLine.Split('#')[0].Trim());
}
}
}
private static void UpdateAllowedBinariesFile(string? file, string outputReportDirectory, HashSet<string> unusedPatterns)
{
if(File.Exists(file) && unusedPatterns.Any())
{
var lines = File.ReadAllLines(file);
var newLines = lines.Where(line => !unusedPatterns.Contains(line)).ToList();
string updatedFile = Path.Combine(outputReportDirectory, "Updated" + Path.GetFileName(file));
File.WriteAllLines(updatedFile, newLines);
Log.LogInformation($" Updated allowed binaries file '{Path.GetFileName(file)}' written to '{updatedFile}'");
}
}
}

View file

@ -0,0 +1,68 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using Microsoft.Extensions.Logging;
namespace BinaryToolKit;
public static class Log
{
public static LogLevel Level = LogLevel.Information;
private static bool WarningLogged = false;
private static bool ErrorLogged = false;
private static readonly Lazy<ILogger> _logger = new Lazy<ILogger>(ConfigureLogger);
public static void LogDebug(string message)
{
_logger.Value.LogDebug(message);
}
public static void LogInformation(string message)
{
_logger.Value.LogInformation(message);
}
public static void LogWarning(string message)
{
_logger.Value.LogWarning(message);
WarningLogged = true;
}
public static void LogError(string message)
{
_logger.Value.LogError(message);
ErrorLogged = true;
}
private static ILogger ConfigureLogger()
{
using ILoggerFactory loggerFactory =
LoggerFactory.Create(builder =>
builder.AddSimpleConsole(options =>
{
options.SingleLine = true;
options.TimestampFormat = "HH:mm:ss ";
options.UseUtcTimestamp = true;
})
.SetMinimumLevel(Level));
return loggerFactory.CreateLogger("BinaryTool");
}
public static int GetExitCode()
{
if (ErrorLogged)
{
return 1;
}
if (WarningLogged)
{
return 2;
}
return 0;
}
}

View file

@ -0,0 +1,10 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
namespace BinaryToolKit;
public enum Modes
{
Validate,
Clean
}

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<!-- %ARTIFACTS_PATH% must be set via an environment variable (export ARTIFACTS_PATH=<path-to-sources>). -->
<add key="artifactsPath" value="%ARTIFACTS_PATH%" />
</packageSources>
</configuration>

View file

@ -0,0 +1,86 @@
// 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.CommandLine;
using Microsoft.Extensions.Logging;
namespace BinaryToolKit;
public class Program
{
public static readonly CliArgument<string> TargetDirectory = new("target-directory")
{
Description = "The directory to run the binary tooling on.",
Arity = ArgumentArity.ExactlyOne
};
public static readonly CliOption<string> OutputReportDirectory = new("--output-directory", "-o")
{
Description = "The directory to output the report to.",
Arity = ArgumentArity.ZeroOrOne,
DefaultValueFactory = _ => Path.Combine(Directory.GetCurrentDirectory(), "binary-report")
};
public static readonly CliOption<LogLevel> Level = new("--log-level", "-l")
{
Description = "The log level to run the tool in.",
Arity = ArgumentArity.ZeroOrOne,
DefaultValueFactory = _ => LogLevel.Information,
Recursive = true
};
public static readonly CliOption<string> AllowedBinariesFile = new("--allowed-binaries-file", "-ab")
{
Description = "The file containing the list of allowed binaries that are ignored for cleaning or validating.\n",
Arity = ArgumentArity.ZeroOrOne
};
public static int ExitCode = 0;
public static async Task<int> Main(string[] args)
{
var cleanCommand = CreateCommand("clean", "Clean the binaries in the target directory.");
var validateCommand = CreateCommand("validate", "Detect new binaries in the target directory.");
var rootCommand = new CliRootCommand("Tool for detecting, validating, and cleaning binaries in the target directory.")
{
Level,
cleanCommand,
validateCommand
};
SetCommandAction(cleanCommand, Modes.Clean);
SetCommandAction(validateCommand, Modes.Validate);
await rootCommand.Parse(args).InvokeAsync();
return ExitCode;
}
private static CliCommand CreateCommand(string name, string description)
{
return new CliCommand(name, description)
{
TargetDirectory,
OutputReportDirectory,
AllowedBinariesFile
};
}
private static void SetCommandAction(CliCommand command, Modes mode)
{
command.SetAction(async (result, CancellationToken) =>
{
Log.Level = result.GetValue(Level);
var binaryTool = new BinaryTool();
ExitCode = await binaryTool.ExecuteAsync(
result.GetValue(TargetDirectory)!,
result.GetValue(OutputReportDirectory)!,
result.GetValue(AllowedBinariesFile),
mode);
});
}
}

View file

@ -13,8 +13,9 @@
<Target Name="Build" <Target Name="Build"
DependsOnTargets=" DependsOnTargets="
UnpackTarballs; UnpackTarballs;
BuildXPlatTasks; BuildUnifiedBuildTasks;
BuildMSBuildSdkResolver; BuildMSBuildSdkResolver;
RestoreUnifiedBuildValidationTests;
BuildLeakDetection; BuildLeakDetection;
ExtractToolPackage; ExtractToolPackage;
GenerateRootFs; GenerateRootFs;
@ -49,7 +50,7 @@
<UnpackedSourceBuildReferencePackages Include="$(PrebuiltSourceBuiltPackagesPath)SourceBuildReferencePackages/*"/> <UnpackedSourceBuildReferencePackages Include="$(PrebuiltSourceBuiltPackagesPath)SourceBuildReferencePackages/*"/>
</ItemGroup> </ItemGroup>
<Copy SourceFiles="@(UnpackedSourceBuildReferencePackages)" DestinationFiles="$(ReferencePackagesDir)%(Filename)%(Extension)" /> <Move SourceFiles="@(UnpackedSourceBuildReferencePackages)" DestinationFiles="$(ReferencePackagesDir)%(Filename)%(Extension)" />
<MakeDir Directories="$(BaseIntermediateOutputPath)" /> <MakeDir Directories="$(BaseIntermediateOutputPath)" />
<Touch Files="$(BaseIntermediateOutputPath)UnpackTarballs.complete" AlwaysCreate="true"> <Touch Files="$(BaseIntermediateOutputPath)UnpackTarballs.complete" AlwaysCreate="true">
@ -62,11 +63,11 @@
DependsOnTargets="UnpackTarballs" DependsOnTargets="UnpackTarballs"
Inputs="$(MSBuildProjectFullPath)" Inputs="$(MSBuildProjectFullPath)"
Outputs="$(BaseIntermediateOutputPath)BuildMSBuildSdkResolver.complete"> Outputs="$(BaseIntermediateOutputPath)BuildMSBuildSdkResolver.complete">
<MSBuild Projects="tasks\SourceBuild.MSBuildSdkResolver\SourceBuild.MSBuildSdkResolver.csproj" <MSBuild Projects="tasks\Microsoft.DotNet.UnifiedBuild.MSBuildSdkResolver\Microsoft.DotNet.UnifiedBuild.MSBuildSdkResolver.csproj"
Targets="Restore" Targets="Restore"
Properties="MSBuildRestoreSessionId=$([System.Guid]::NewGuid())" /> Properties="MSBuildRestoreSessionId=$([System.Guid]::NewGuid())" />
<MSBuild Projects="tasks\SourceBuild.MSBuildSdkResolver\SourceBuild.MSBuildSdkResolver.csproj" <MSBuild Projects="tasks\Microsoft.DotNet.UnifiedBuild.MSBuildSdkResolver\Microsoft.DotNet.UnifiedBuild.MSBuildSdkResolver.csproj"
Targets="Build" /> Targets="Build" />
<MakeDir Directories="$(BaseIntermediateOutputPath)" /> <MakeDir Directories="$(BaseIntermediateOutputPath)" />
@ -75,34 +76,30 @@
</Touch> </Touch>
</Target> </Target>
<PropertyGroup>
<SourceBuildMSBuildSdkResolverManifestPath>$([MSBuild]::NormalizePath('$(VSMSBuildSdkResolversDir)', 'SourceBuild.MSBuildSdkResolver', 'SourceBuild.MSBuildSdkResolver.xml'))</SourceBuildMSBuildSdkResolverManifestPath>
</PropertyGroup>
<!-- Build msbuild tasks. --> <!-- Build msbuild tasks. -->
<Target Name="BuildXPlatTasks" <Target Name="BuildUnifiedBuildTasks"
DependsOnTargets="UnpackTarballs;BuildMSBuildSdkResolver" DependsOnTargets="UnpackTarballs;BuildMSBuildSdkResolver"
Inputs="$(MSBuildProjectFullPath)" Inputs="$(MSBuildProjectFullPath)"
Outputs="$(BaseIntermediateOutputPath)BuildXPlatTasks.complete"> Outputs="$(BaseIntermediateOutputPath)BuildUnifiedBuildTasks.complete">
<MSBuild Projects="tasks\Microsoft.DotNet.SourceBuild.Tasks.XPlat\Microsoft.DotNet.SourceBuild.Tasks.XPlat.csproj" <MSBuild Projects="tasks\Microsoft.DotNet.UnifiedBuild.Tasks\Microsoft.DotNet.UnifiedBuild.Tasks.csproj"
Targets="Restore" Targets="Restore"
Properties="MSBuildRestoreSessionId=$([System.Guid]::NewGuid())" /> Properties="MSBuildRestoreSessionId=$([System.Guid]::NewGuid())" />
<MSBuild Projects="tasks\Microsoft.DotNet.SourceBuild.Tasks.XPlat\Microsoft.DotNet.SourceBuild.Tasks.XPlat.csproj" <MSBuild Projects="tasks\Microsoft.DotNet.UnifiedBuild.Tasks\Microsoft.DotNet.UnifiedBuild.Tasks.csproj"
Targets="Build" /> Targets="Build" />
<MakeDir Directories="$(BaseIntermediateOutputPath)" /> <MakeDir Directories="$(BaseIntermediateOutputPath)" />
<Touch Files="$(BaseIntermediateOutputPath)BuildXPlatTasks.complete" AlwaysCreate="true"> <Touch Files="$(BaseIntermediateOutputPath)BuildUnifiedBuildTasks.complete" AlwaysCreate="true">
<Output TaskParameter="TouchedFiles" ItemName="FileWrites" /> <Output TaskParameter="TouchedFiles" ItemName="FileWrites" />
</Touch> </Touch>
</Target> </Target>
<!-- Build msbuild tasks for the poisoning feature. --> <!-- Build msbuild tasks for the poisoning feature even when EnablePoison!=true to validate that the task project
builds as EnablePoison=true isn't exercised in PR validation. -->
<Target Name="BuildLeakDetection" <Target Name="BuildLeakDetection"
DependsOnTargets="ExtractToolPackage;BuildMSBuildSdkResolver" DependsOnTargets="ExtractToolPackage;BuildMSBuildSdkResolver"
Inputs="$(MSBuildProjectFullPath)" Inputs="$(MSBuildProjectFullPath)"
Outputs="$(BaseIntermediateOutputPath)BuildLeakDetection.complete" Outputs="$(BaseIntermediateOutputPath)BuildLeakDetection.complete">
Condition="'$(EnablePoison)' == 'true'">
<MSBuild Projects="tasks\Microsoft.DotNet.SourceBuild.Tasks.LeakDetection\Microsoft.DotNet.SourceBuild.Tasks.LeakDetection.csproj" <MSBuild Projects="tasks\Microsoft.DotNet.SourceBuild.Tasks.LeakDetection\Microsoft.DotNet.SourceBuild.Tasks.LeakDetection.csproj"
Targets="Restore" Targets="Restore"
Properties="MSBuildRestoreSessionId=$([System.Guid]::NewGuid())" /> Properties="MSBuildRestoreSessionId=$([System.Guid]::NewGuid())" />
@ -116,6 +113,13 @@
</Touch> </Touch>
</Target> </Target>
<Target Name="RestoreUnifiedBuildValidationTests"
Condition="'$(ShortStack)' != 'true' and '$(PortableBuild)' == 'true' and '$(PgoInstrument)' != 'true'" >
<MSBuild Projects="../../test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj"
Targets="Restore"
Properties="MSBuildRestoreSessionId=$([System.Guid]::NewGuid())" />
</Target>
<Target Name="GenerateRootFs" <Target Name="GenerateRootFs"
Condition="'$(BuildOS)' != 'windows' and '$(CrossBuild)' == 'true' and '$(ROOTFS_DIR)' == ''"> Condition="'$(BuildOS)' != 'windows' and '$(CrossBuild)' == 'true' and '$(ROOTFS_DIR)' == ''">
<PropertyGroup> <PropertyGroup>
@ -139,18 +143,13 @@
DestinationFolder="$(ArcadeBootstrapPackageDir)microsoft.dotnet.arcade.sdk/$(ARCADE_BOOTSTRAP_VERSION)/" DestinationFolder="$(ArcadeBootstrapPackageDir)microsoft.dotnet.arcade.sdk/$(ARCADE_BOOTSTRAP_VERSION)/"
SkipUnchangedFiles="true" /> SkipUnchangedFiles="true" />
<!-- When unpacking, this executable file has the wrong permissions on
non-windows systems: https://github.com/NuGet/Home/issues/13121. -->
<Exec Command="chmod 755 git-clone-to-dir.sh"
WorkingDirectory="$(ArcadeBootstrapPackageDir)microsoft.dotnet.arcade.sdk/$(ARCADE_BOOTSTRAP_VERSION)/tools/SourceBuild/" />
<MakeDir Directories="$(BaseIntermediateOutputPath)" /> <MakeDir Directories="$(BaseIntermediateOutputPath)" />
<Touch Files="$(BaseIntermediateOutputPath)ExtractToolPackage.complete" AlwaysCreate="true"> <Touch Files="$(BaseIntermediateOutputPath)ExtractToolPackage.complete" AlwaysCreate="true">
<Output TaskParameter="TouchedFiles" ItemName="FileWrites" /> <Output TaskParameter="TouchedFiles" ItemName="FileWrites" />
</Touch> </Touch>
</Target> </Target>
<UsingTask AssemblyFile="$(LeakDetectionTasksAssembly)" TaskName="MarkAndCatalogPackages" Condition="'$(EnablePoison)' == 'true'" /> <UsingTask TaskName="Microsoft.DotNet.SourceBuild.Tasks.LeakDetection.MarkAndCatalogPackages" AssemblyFile="$(MicrosoftDotNetSourceBuildTasksLeakDetectionAssembly)" Condition="'$(EnablePoison)' == 'true'" />
<Target Name="PoisonPrebuiltPackages" <Target Name="PoisonPrebuiltPackages"
Condition="'$(EnablePoison)' == 'true'" Condition="'$(EnablePoison)' == 'true'"
Inputs="$(MSBuildProjectFullPath)" Inputs="$(MSBuildProjectFullPath)"

View file

@ -4,6 +4,7 @@
using Microsoft.Build.Framework; using Microsoft.Build.Framework;
using Microsoft.Build.Utilities; using Microsoft.Build.Utilities;
using Microsoft.DotNet.UnifiedBuild.Tasks;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;

View file

@ -6,12 +6,11 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Build" Version="$(MicrosoftBuildVersion)" /> <PackageReference Include="Microsoft.Build.Utilities.Core" />
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="$(MicrosoftBuildVersion)" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="../Microsoft.DotNet.SourceBuild.Tasks.XPlat/Microsoft.DotNet.SourceBuild.Tasks.XPlat.csproj" /> <ProjectReference Include="../Microsoft.DotNet.UnifiedBuild.Tasks/Microsoft.DotNet.UnifiedBuild.Tasks.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View file

@ -1,18 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>$(NetCurrent)</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Build" Version="$(MicrosoftBuildVersion)" />
<PackageReference Include="Microsoft.Build.Framework" Version="$(MicrosoftBuildVersion)" />
<PackageReference Include="Microsoft.Build.Tasks.Core" Version="$(MicrosoftBuildVersion)" />
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="$(MicrosoftBuildVersion)" />
</ItemGroup>
<ItemGroup>
<ReferencePath Include="@(SdkAssembly)" />
</ItemGroup>
</Project>

View file

@ -1,89 +0,0 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
namespace Microsoft.DotNet.Build.Tasks
{
/*
* This task updates the package source mappings in the NuGet.Config.
* If package source mappings are used, source-build packages sources will be added with the cumulative package patterns
* for all of the existing package sources. When building offline, the existing package source mappings will be removed;
* otherwise they will be preserved after the source-build sources.
*/
public class UpdateNuGetConfigPackageSourcesMappings : Task
{
[Required]
public string NuGetConfigFile { get; set; }
/// <summary>
/// Whether to work in offline mode (remove all internet sources) or online mode (remove only authenticated sources)
/// </summary>
public bool BuildWithOnlineFeeds { get; set; }
/// <summary>
/// A list of all source-build specific NuGet sources.
/// </summary>
public string[] SourceBuildSources { get; set; }
public override bool Execute()
{
string xml = File.ReadAllText(NuGetConfigFile);
string newLineChars = FileUtilities.DetectNewLineChars(xml);
XDocument document = XDocument.Parse(xml);
XElement pkgSrcMappingElement = document.Root.Descendants().FirstOrDefault(e => e.Name == "packageSourceMapping");
if (pkgSrcMappingElement == null)
{
return true;
}
// Union all package sources to get the distinct list. These will get added to the source-build sources.
string[] packagePatterns = pkgSrcMappingElement.Descendants()
.Where(e => e.Name == "packageSource")
.SelectMany(e => e.Descendants().Where(e => e.Name == "package"))
.Select(e => e.Attribute("pattern").Value)
.Distinct()
.ToArray();
if (!BuildWithOnlineFeeds)
{
// When building offline remove all packageSourceMappings.
pkgSrcMappingElement?.ReplaceNodes(new XElement("clear"));
}
XElement pkgSrcMappingClearElement = pkgSrcMappingElement.Descendants().FirstOrDefault(e => e.Name == "clear");
if (pkgSrcMappingClearElement == null)
{
pkgSrcMappingClearElement = new XElement("clear");
pkgSrcMappingElement.AddFirst(pkgSrcMappingClearElement);
}
foreach (string packageSource in SourceBuildSources)
{
XElement pkgSrc = new XElement("packageSource", new XAttribute("key", packageSource));
foreach (string packagePattern in packagePatterns)
{
pkgSrc.Add(new XElement("package", new XAttribute("pattern", packagePattern)));
}
pkgSrcMappingClearElement.AddAfterSelf(pkgSrc);
}
using (var writer = XmlWriter.Create(NuGetConfigFile, new XmlWriterSettings { NewLineChars = newLineChars, Indent = true }))
{
document.Save(writer);
}
return true;
}
}
}

View file

@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Build.Tasks.Core" ExcludeAssets="runtime" />
<PackageReference Include="Microsoft.Build.Utilities.Core" ExcludeAssets="runtime" />
</ItemGroup>
<Target Name="InstallResolver" BeforeTargets="PrepareForRun">
<PropertyGroup>
<UnifiedBuildMSBuildSdkResolverManifestPath>$([MSBuild]::NormalizePath('$(VSMSBuildSdkResolversDir)', '$(MSBuildProjectName)', '$(MSBuildProjectName).xml'))</UnifiedBuildMSBuildSdkResolverManifestPath>
</PropertyGroup>
<WriteLinesToFile
File="$(UnifiedBuildMSBuildSdkResolverManifestPath)"
Lines="&lt;SdkResolver&gt;&lt;Path&gt;$(TargetPath)&lt;/Path&gt;&lt;/SdkResolver&gt;"
Overwrite="true"
WriteOnlyWhenDifferent="true" />
</Target>
</Project>

View file

@ -9,7 +9,7 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
namespace Microsoft.DotNet.SourceBuild.Tasks namespace Microsoft.DotNet.UnifiedBuild.Tasks
{ {
/// <summary> /// <summary>
/// Extends the SDK to handle "SOURCE_BUILT_SDK_*" override environment variables. Each override /// Extends the SDK to handle "SOURCE_BUILT_SDK_*" override environment variables. Each override
@ -25,9 +25,9 @@ namespace Microsoft.DotNet.SourceBuild.Tasks
/// SOURCE_BUILT_SDK_VERSION_EXAMPLE=1.0.0-source-built /// SOURCE_BUILT_SDK_VERSION_EXAMPLE=1.0.0-source-built
/// (Optional) Version of the SDK package to use. This is informational. /// (Optional) Version of the SDK package to use. This is informational.
/// </summary> /// </summary>
public class SourceBuiltSdkResolver : SdkResolver public class UnifiedBuildSdkResolver : SdkResolver
{ {
public override string Name => nameof(SourceBuiltSdkResolver); public override string Name => nameof(UnifiedBuildSdkResolver);
public override int Priority => 0; public override int Priority => 0;

View file

@ -10,8 +10,7 @@ using System.Xml.Linq;
using Microsoft.Build.Framework; using Microsoft.Build.Framework;
using Microsoft.Build.Utilities; using Microsoft.Build.Utilities;
namespace Microsoft.DotNet.UnifiedBuild.Tasks
namespace Microsoft.DotNet.Build.Tasks
{ {
/* /*
* This task adds a source to a well-formed NuGet.Config file. If a source with `SourceName` is already present, then * This task adds a source to a well-formed NuGet.Config file. If a source with `SourceName` is already present, then

View file

@ -5,7 +5,7 @@
using Microsoft.Build.Framework; using Microsoft.Build.Framework;
using Microsoft.Build.Utilities; using Microsoft.Build.Utilities;
namespace Microsoft.DotNet.Build.Tasks namespace Microsoft.DotNet.UnifiedBuild.Tasks
{ {
public abstract partial class BuildTask : ITask public abstract partial class BuildTask : ITask
{ {

View file

@ -12,7 +12,7 @@ using System.Reflection.PortableExecutable;
using Microsoft.Build.Framework; using Microsoft.Build.Framework;
using Microsoft.Build.Utilities; using Microsoft.Build.Utilities;
namespace Microsoft.DotNet.Build.Tasks namespace Microsoft.DotNet.UnifiedBuild.Tasks
{ {
// Creates a symbols layout that matches the SDK layout // Creates a symbols layout that matches the SDK layout
public class CreateSdkSymbolsLayout : Task public class CreateSdkSymbolsLayout : Task

View file

@ -5,7 +5,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
namespace Microsoft.DotNet.SourceBuild.Tasks namespace Microsoft.DotNet.UnifiedBuild.Tasks
{ {
internal static class EnumerableExtensions internal static class EnumerableExtensions
{ {

View file

@ -4,7 +4,7 @@
using System; using System;
namespace Microsoft.DotNet.Build.Tasks namespace Microsoft.DotNet.UnifiedBuild.Tasks
{ {
public static class FileUtilities public static class FileUtilities
{ {

Some files were not shown because too many files have changed in this diff Show more