Merge branch 'main' into shortstack

This commit is contained in:
Jo Shields 2024-02-06 09:20:29 -05:00 committed by GitHub
commit 30138aab29
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
21 changed files with 1043 additions and 811 deletions

View file

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

View file

@ -24,7 +24,6 @@
<Dependency Name="VS.Redist.Common.NetCore.SharedFramework.x64.9.0" Version="9.0.0-preview.2.24080.1" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d40c654c274fe4f4afe66328f0599130f3eb2ea6</Sha>
<SourceBuild RepoName="runtime" ManagedOnly="false" />
</Dependency>
<Dependency Name="Microsoft.NETCore.App.Ref" Version="9.0.0-preview.2.24080.1" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/runtime</Uri>
@ -52,6 +51,12 @@
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d40c654c274fe4f4afe66328f0599130f3eb2ea6</Sha>
</Dependency>
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.runtime" Version="9.0.0-preview.2.24080.1" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d40c654c274fe4f4afe66328f0599130f3eb2ea6</Sha>
<SourceBuild RepoName="runtime" ManagedOnly="false" />
</Dependency>
<Dependency Name="Microsoft.AspNetCore.App.Ref" Version="9.0.0-preview.2.24079.10" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>70abdab0a5969fd7746479c1fae4697bce2dbc92</Sha>
@ -59,7 +64,6 @@
<Dependency Name="Microsoft.AspNetCore.App.Ref.Internal" Version="9.0.0-preview.2.24079.10" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>70abdab0a5969fd7746479c1fae4697bce2dbc92</Sha>
<SourceBuild RepoName="aspnetcore" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.AspNetCore.App.Runtime.win-x64" Version="9.0.0-preview.2.24079.10" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/aspnetcore</Uri>
@ -81,6 +85,12 @@
<Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>70abdab0a5969fd7746479c1fae4697bce2dbc92</Sha>
</Dependency>
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.aspnetcore" Version="9.0.0-preview.2.24079.10" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>70abdab0a5969fd7746479c1fae4697bce2dbc92</Sha>
<SourceBuild RepoName="aspnetcore" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.DotNet.Common.ItemTemplates" Version="9.0.100-preview.2.24080.4">
<Uri>https://github.com/dotnet/sdk</Uri>
<Sha>aea4e42aff076545d4709fd6071dda62fe0ae332</Sha>
@ -92,12 +102,17 @@
<Dependency Name="Microsoft.NET.Sdk" Version="9.0.100-preview.2.24080.4">
<Uri>https://github.com/dotnet/sdk</Uri>
<Sha>aea4e42aff076545d4709fd6071dda62fe0ae332</Sha>
<SourceBuild RepoName="sdk" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.DotNet.MSBuildSdkResolver" Version="9.0.100-preview.2.24080.4">
<Uri>https://github.com/dotnet/sdk</Uri>
<Sha>aea4e42aff076545d4709fd6071dda62fe0ae332</Sha>
</Dependency>
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.sdk" Version="9.0.100-preview.2.24080.4">
<Uri>https://github.com/dotnet/sdk</Uri>
<Sha>aea4e42aff076545d4709fd6071dda62fe0ae332</Sha>
<SourceBuild RepoName="sdk" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.2.1" Version="1.0.2-beta4.22406.1">
<Uri>https://github.com/dotnet/test-templates</Uri>
<Sha>0385265f4d0b6413d64aea0223172366a9b9858c</Sha>
@ -117,12 +132,17 @@
<Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.8.0" Version="1.1.0-rc.24081.1">
<Uri>https://github.com/dotnet/test-templates</Uri>
<Sha>4486ff28949aa10726517ddf7ecabedc2a7e1ceb</Sha>
<SourceBuild RepoName="test-templates" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.9.0" Version="1.1.0-rc.24081.1">
<Uri>https://github.com/dotnet/test-templates</Uri>
<Sha>4486ff28949aa10726517ddf7ecabedc2a7e1ceb</Sha>
</Dependency>
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.test-templates" Version="1.1.0-rc.24081.1">
<Uri>https://github.com/dotnet/test-templates</Uri>
<Sha>4486ff28949aa10726517ddf7ecabedc2a7e1ceb</Sha>
<SourceBuild RepoName="test-templates" ManagedOnly="true" />
</Dependency>
<!-- 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.24078.1" CoherentParentDependency="Microsoft.WindowsDesktop.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/winforms</Uri>
@ -136,6 +156,7 @@
<Uri>https://github.com/dotnet/fsharp</Uri>
<Sha>7c217c487c6e2b7d824f3d40666b3cbad412cad4</Sha>
</Dependency>
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.fsharp" Version="8.0.300-beta.24079.8" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/fsharp</Uri>
<Sha>7c217c487c6e2b7d824f3d40666b3cbad412cad4</Sha>
@ -144,6 +165,11 @@
<Dependency Name="Microsoft.NET.Test.Sdk" Version="17.10.0-preview-24078-03" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/microsoft/vstest</Uri>
<Sha>a09e17e9efd7f85abab5a83d627d15aef5b6a954</Sha>
</Dependency>
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.vstest" Version="17.10.0-preview-24078-03" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/microsoft/vstest</Uri>
<Sha>a09e17e9efd7f85abab5a83d627d15aef5b6a954</Sha>
<SourceBuild RepoName="vstest" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.NET.ILLink.Tasks" Version="9.0.0-preview.2.24080.1" CoherentParentDependency="Microsoft.NET.Sdk">
@ -153,11 +179,21 @@
<Dependency Name="Microsoft.Net.Compilers.Toolset" Version="4.10.0-1.24067.21" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/roslyn</Uri>
<Sha>3cd939f76803da435c20b082a5cfcc844386fcfb</Sha>
</Dependency>
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.roslyn" Version="4.10.0-1.24067.21" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/roslyn</Uri>
<Sha>3cd939f76803da435c20b082a5cfcc844386fcfb</Sha>
<SourceBuild RepoName="roslyn" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.Build" Version="17.10.0-preview-24076-03" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/msbuild</Uri>
<Sha>0d8d09e5c582526daeb4af0b52956c3290e424d1</Sha>
</Dependency>
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.msbuild" Version="17.10.0-preview-24076-03" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/msbuild</Uri>
<Sha>0d8d09e5c582526daeb4af0b52956c3290e424d1</Sha>
<SourceBuild RepoName="msbuild" ManagedOnly="true" />
</Dependency>
<Dependency Name="NuGet.Build.Tasks" Version="6.9.0-rc.86" CoherentParentDependency="Microsoft.NET.Sdk">
@ -172,19 +208,24 @@
<Dependency Name="Microsoft.NET.Workload.Emscripten.Current.Manifest-9.0.100.Transport" Version="9.0.0-preview.2.24076.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/emsdk</Uri>
<Sha>687be2a32a302aaade82380c0eaafa5af85fb4da</Sha>
</Dependency>
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.emsdk" Version="9.0.0-preview.2.24076.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/emsdk</Uri>
<Sha>687be2a32a302aaade82380c0eaafa5af85fb4da</Sha>
<SourceBuild RepoName="emsdk" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.Deployment.DotNet.Releases" Version="2.0.0-preview.1.24075.2" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/deployment-tools</Uri>
<Sha>643a0cb2966b097763158082a138189e22205d3b</Sha>
</Dependency>
<!-- Explicit dependency because Microsoft.Deployment.DotNet.Releases has different versioning
than the SB intermediate -->
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.deployment-tools" Version="9.0.0-preview.1.24075.2" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/deployment-tools</Uri>
<Sha>643a0cb2966b097763158082a138189e22205d3b</Sha>
<SourceBuild RepoName="deployment-tools" ManagedOnly="true" />
</Dependency>
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-externals" Version="9.0.0-alpha.1.24101.1">
<Uri>https://github.com/dotnet/source-build-externals</Uri>
<Sha>949db2fd23b687c0d545e954943feada8b361ed6</Sha>
@ -194,6 +235,7 @@
<Uri>https://github.com/dotnet/command-line-api</Uri>
<Sha>ecd2ce5eafbba3008a7d4f5d04b025d30928c812</Sha>
</Dependency>
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.command-line-api" Version="0.1.506801" CoherentParentDependency="Microsoft.NET.Sdk">
<Uri>https://github.com/dotnet/command-line-api</Uri>
<Sha>ecd2ce5eafbba3008a7d4f5d04b025d30928c812</Sha>
@ -204,7 +246,6 @@
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="9.0.0-beta.24102.4">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>2fb543a45580400a559b5ae41c96a815ea14dac5</Sha>
<SourceBuild RepoName="arcade" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.DotNet.CMake.Sdk" Version="9.0.0-beta.24102.4">
<Uri>https://github.com/dotnet/arcade</Uri>
@ -214,30 +255,41 @@
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>2fb543a45580400a559b5ae41c96a815ea14dac5</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Darc" Version="1.1.0-beta.24076.2">
<Dependency Name="Microsoft.DotNet.Darc" Version="1.1.0-beta.24080.1">
<Uri>https://github.com/dotnet/arcade-services</Uri>
<Sha>e9cac5ab2b545c66de5414b330d2187286d17194</Sha>
<Sha>749beebfd890571ce6f3fe8f557cb3cad070c946</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.DarcLib" Version="1.1.0-beta.24076.2">
<Dependency Name="Microsoft.DotNet.DarcLib" Version="1.1.0-beta.24080.1">
<Uri>https://github.com/dotnet/arcade-services</Uri>
<Sha>e9cac5ab2b545c66de5414b330d2187286d17194</Sha>
<Sha>749beebfd890571ce6f3fe8f557cb3cad070c946</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.XliffTasks" Version="9.0.0-beta.24102.4">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>2fb543a45580400a559b5ae41c96a815ea14dac5</Sha>
</Dependency>
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.arcade" Version="9.0.0-beta.24102.4">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>2fb543a45580400a559b5ae41c96a815ea14dac5</Sha>
<SourceBuild RepoName="arcade" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="9.0.0-alpha.1.23612.13">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>ab1a8224cdf115b65e0db5dc88d11f205068f444</Sha>
</Dependency>
<Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-reference-packages" Version="9.0.0-alpha.1.24101.2">
<Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-reference-packages" Version="9.0.0-alpha.1.24105.3">
<Uri>https://github.com/dotnet/source-build-reference-packages</Uri>
<Sha>69b60d2af1775f374c91b3e52da02de6b7de1943</Sha>
<Sha>ffac2194c39660f03761ba81bdd6026202942184</Sha>
<SourceBuild RepoName="source-build-reference-packages" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.DotNet.ScenarioTests.SdkTemplateTests" Version="9.0.0-preview.24057.2">
<Uri>https://github.com/dotnet/scenario-tests</Uri>
<Sha>bfde902a10d7b672f4fc7e844198ede405dbb9c6</Sha>
</Dependency>
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.scenario-tests" Version="9.0.0-preview.24057.2">
<Uri>https://github.com/dotnet/scenario-tests</Uri>
<Sha>bfde902a10d7b672f4fc7e844198ede405dbb9c6</Sha>
<SourceBuild RepoName="scenario-tests" ManagedOnly="true" />
</Dependency>
<!-- Aspire isn't really a toolset dependency. However, it only inserts a baseline manifest in installer,
@ -250,6 +302,11 @@
<Dependency Name="Microsoft.NET.Sdk.Aspire.Manifest-9.0.100-preview.1" Version="9.0.0-preview.1.24079.2">
<Uri>https://github.com/dotnet/aspire</Uri>
<Sha>87d5246ddfc1fb9b07fcdf7b4b42830f67427ab9</Sha>
</Dependency>
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.aspire" Version="9.0.0-preview.1.24079.2">
<Uri>https://github.com/dotnet/aspire</Uri>
<Sha>87d5246ddfc1fb9b07fcdf7b4b42830f67427ab9</Sha>
<SourceBuild RepoName="aspire" ManagedOnly="true" />
</Dependency>
</ToolsetDependencies>

View file

@ -44,7 +44,7 @@
</PropertyGroup>
<PropertyGroup>
<!-- Dependency from https://github.com/dotnet/arcade-services -->
<MicrosoftDotNetDarcLibVersion>1.1.0-beta.24076.2</MicrosoftDotNetDarcLibVersion>
<MicrosoftDotNetDarcLibVersion>1.1.0-beta.24080.1</MicrosoftDotNetDarcLibVersion>
</PropertyGroup>
<PropertyGroup>
<!-- Dependency from https://github.com/dotnet/winforms -->

View file

@ -1,11 +1,39 @@
### This job source-builds https://github.com/dotnet/dotnet with given parameters
### If run in a PR, new changes are applied to a local copy of the VMR, then it is source-built and tested
### This job builds https://github.com/dotnet/dotnet with given parameters
### If run in a PR, new changes are applied to a local copy of the VMR, then it is built and tested
parameters:
- name: architecture
type: string
- name: artifactsRid
type: string
default: ''
- name: buildName
type: string
- name: container
type: string
- name: crossRootFs
type: string
default: ''
- name: isBuiltFromVmr
displayName: True when build is running from dotnet/dotnet directly
type: boolean
- name: pool
type: object
- name: targetOS
type: string
default: ''
- name: targetArchitecture
type: string
default: ''
- name: vmrPath
type: string
default: $(Agent.BuildDirectory)/vmr
@ -15,25 +43,25 @@ parameters:
type: string
default: $(Build.SourceBranch)
- name: buildName
type: string
#### SOURCE-ONLY parameters ####
- name: architecture
type: string
- name: artifactsRid
type: string
default: ''
- name: container
type: string
- name: pool
type: object
# Allow downloading artifacts from the internet during the build
- name: runOnline
# Instead of building the VMR directly, exports the sources into a tarball and builds from that
- name: buildFromArchive
type: boolean
default: false
# Enable for source-building the VMR
- name: buildSourceOnly
type: boolean
default: false
- name: enablePoison
type: boolean
default: false
- name: excludeOmniSharpTests
type: boolean
default: false
# Name of a previous job (from the same template as this) whose output will be used to build this job
# The SDK from its artifacts is copied to vmr/.dotnet
@ -41,18 +69,12 @@ parameters:
type: string
default: ''
- name: excludeOmniSharpTests
# Allow downloading artifacts from the internet during the build
- name: runOnline
type: boolean
default: true
- name: enablePoison
type: boolean
# Instead of building the VMR directly, exports the sources into a tarball and builds from that
- name: buildFromArchive
type: boolean
# Use the previous version's SDK to build the current one
- name: withPreviousSDK
- name: runTests
type: boolean
default: false
@ -61,22 +83,11 @@ parameters:
type: boolean
default: false
- name: crossRootFS
type: string
default: ''
- name: runTests
# Use the previous version's SDK to build the current one
- name: withPreviousSDK
type: boolean
default: false
- name: targetOS
type: string
default: ''
- name: targetArchitecture
type: string
default: ''
jobs:
- job: ${{ parameters.buildName }}_${{ parameters.architecture }}
timeoutInMinutes: 150
@ -133,7 +144,7 @@ jobs:
displayName: Export VMR sources
workingDirectory: $(Build.StagingDirectory)
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
- ${{ if and(ne(variables['System.TeamProject'], 'public'), eq(parameters.runTests, 'True')) }}:
- script: cp "$(sourcesPath)/src/installer/NuGet.config" "$(sourcesPath)/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/online.NuGet.Config"
displayName: Copy Test NuGet Config
@ -188,112 +199,113 @@ jobs:
exit 1
fi
displayName: Setup Previously Source-Built SDK
- ${{ if eq(parameters.targetOS, 'windows') }}:
- script: |
call $(sourcesPath)\build.cmd -ci -cleanWhileBuilding -prepareMachine
displayName: Build
- script: |
set -x
- ${{ else }}:
- ${{ if eq(parameters.buildSourceOnly, 'true') }}:
- script: |
set -x
customPrepArgs=""
prepSdk=true
customPrepArgs=""
prepSdk=true
if [[ -n '${{ parameters.artifactsRid }}' ]]; then
customPrepArgs="${customPrepArgs} --artifacts-rid ${{ parameters.artifactsRid }}"
fi
if [[ -n '${{ parameters.artifactsRid }}' ]]; then
customPrepArgs="${customPrepArgs} --artifacts-rid ${{ parameters.artifactsRid }}"
fi
if [[ '${{ parameters.withPreviousSDK }}' == 'True' ]]; then
# Source-built artifacts are from CentOS 8 Stream or Alpine 3.19. We want to download them without
# downloading portable versions from the internet.
customPrepArgs="${customPrepArgs} --no-sdk --no-bootstrap"
prepSdk=false
elif [[ -n '${{ parameters.reuseBuildArtifactsFrom }}' ]]; then
customPrepArgs="${customPrepArgs} --no-sdk --no-artifacts"
prepSdk=false
fi
if [[ '${{ parameters.withPreviousSDK }}' == 'True' ]]; then
# Source-built artifacts are from CentOS 8 Stream or Alpine 3.19. We want to download them without
# downloading portable versions from the internet.
customPrepArgs="${customPrepArgs} --no-sdk --no-bootstrap"
prepSdk=false
elif [[ -n '${{ parameters.reuseBuildArtifactsFrom }}' ]]; then
customPrepArgs="${customPrepArgs} --no-sdk --no-artifacts"
prepSdk=false
fi
if [[ "$prepSdk" == "false" ]]; then
mkdir $(sourcesPath)/.dotnet
previousSdkPath="$(sourcesPath)/prereqs/packages/archive/dotnet-sdk-*.tar.gz"
eval tar -ozxf "$previousSdkPath" -C "$(sourcesPath)/.dotnet"
eval rm -f "$previousSdkPath"
if [[ "$prepSdk" == "false" ]]; then
mkdir $(sourcesPath)/.dotnet
previousSdkPath="$(sourcesPath)/prereqs/packages/archive/dotnet-sdk-*.tar.gz"
eval tar -ozxf "$previousSdkPath" -C "$(sourcesPath)/.dotnet"
eval rm -f "$previousSdkPath"
echo "##vso[task.setvariable variable=additionalBuildArgs]--with-sdk /vmr/.dotnet"
fi
echo "##vso[task.setvariable variable=additionalBuildArgs]--with-sdk /vmr/.dotnet"
fi
# Only use Docker stuff on Linux
if [[ -n "${{ parameters.container }}" ]]; then
docker run --rm -v "$(sourcesPath):/vmr" -w /vmr ${{ parameters.container }} ./prep.sh $customPrepArgs
else
cd $(sourcesPath)
./prep.sh $customPrepArgs
fi
displayName: Prep the Build
docker run --rm -v "$(sourcesPath):/vmr" -w /vmr ${{ parameters.container }} ./prep.sh $customPrepArgs
displayName: Prep the Build
- script: |
set -x
df -h
- script: |
set -x
df -h
# Allows Arcade to have access to the commit for the build
customEnvVars="BUILD_SOURCEVERSION=$BUILD_SOURCEVERSION"
customBuildArgs="--ci --prepareMachine"
if [[ '${{ parameters.runOnline }}' == 'True' ]]; then
customBuildArgs="$customBuildArgs --online"
fi
if [[ '${{ parameters.enablePoison }}' == 'True' ]]; then
customBuildArgs="$customBuildArgs --poison"
fi
if [[ '${{ parameters.buildFromArchive }}' == 'True' ]]; then
customBuildArgs="$customBuildArgs --source-repository https://github.com/dotnet/dotnet"
customBuildArgs="$customBuildArgs --source-version $(git -C "${{ parameters.vmrPath }}" rev-parse HEAD)"
fi
if [[ '${{ parameters.useMonoRuntime }}' == 'True' ]]; then
customBuildArgs="$customBuildArgs --use-mono-runtime"
fi
if [[ -n "${{ parameters.container }}" ]]; then
useDocker=true
fi
if [[ '${{ parameters.useMonoRuntime }}' == 'True' ]]; then
customEnvVars="$customEnvVars CROSSCOMPILE=1"
fi
if [[ ! -z '${{ parameters.crossRootFs }}' ]]; then
customEnvVars="$customEnvVars ROOTFS_DIR=${{ parameters.crossRootFs}}"
fi
if [[ ! -z '${{ parameters.targetOS }}' ]]; then
extraBuildProperties="$extraBuildProperties /p:TargetOS=${{ parameters.targetOS }}"
fi
if [[ ! -z '${{ parameters.targetArchitecture }}' ]]; then
extraBuildProperties="$extraBuildProperties /p:TargetArchitecture=${{ parameters.targetArchitecture }}"
fi
# Only use Docker stuff on Linux
if [[ "$useDocker" == "true" ]]; then
customDockerRunArgs=""
for envVar in $customEnvVars; do
customDockerRunArgs="$customDockerRunArgs -e $envVar"
done
if [[ '${{ parameters.runOnline }}' == 'False' ]]; then
customDockerRunArgs="$customDockerRunArgs --network none"
customEnvVars=""
customBuildArgs="--ci --clean-while-building --prepareMachine"
if [[ '${{ parameters.runOnline }}' == 'True' ]]; then
customBuildArgs="$customBuildArgs --online"
fi
docker run --rm -v "$(sourcesPath):/vmr" -w /vmr $customDockerRunArgs ${{ parameters.container }} ./build.sh --source-only --clean-while-building $(additionalBuildArgs) $customBuildArgs $extraBuildProperties
else
for envVar in $customEnvVars; do
customEnvVarsWithBashSyntax="$customEnvVarsWithBashSyntax export $envVar;"
done
cd $(sourcesPath)
eval $customEnvVarsWithBashSyntax
./build.sh --source-only --clean-while-building $(additionalBuildArgs) $customBuildArgs $extraBuildProperties
fi
displayName: Build
if [[ '${{ parameters.enablePoison }}' == 'True' ]]; then
customBuildArgs="$customBuildArgs --poison"
fi
# Don't run tests if overriding RID, we don't support that for now
if [[ '${{ parameters.buildFromArchive }}' == 'True' ]]; then
customBuildArgs="$customBuildArgs --source-repository https://github.com/dotnet/dotnet"
customBuildArgs="$customBuildArgs --source-version $(git -C "${{ parameters.vmrPath }}" rev-parse HEAD)"
fi
if [[ '${{ parameters.buildSourceOnly }}' == 'True' ]]; then
customBuildArgs="$customBuildArgs --source-only"
fi
if [[ '${{ parameters.useMonoRuntime }}' == 'True' ]]; then
customBuildArgs="$customBuildArgs --use-mono-runtime"
fi
if [[ -n "${{ parameters.crossRootFs }}" ]]; then
customEnvVars="$customEnvVars ROOTFS_DIR=${{ parameters.crossRootFs}} CROSSCOMPILE=1"
fi
if [[ ! -z '${{ parameters.targetOS }}' ]]; then
extraBuildProperties="$extraBuildProperties /p:TargetOS=${{ parameters.targetOS }}"
fi
if [[ ! -z '${{ parameters.targetArchitecture }}' ]]; then
extraBuildProperties="$extraBuildProperties /p:TargetArchitecture=${{ parameters.targetArchitecture }}"
fi
buildArgs="$(additionalBuildArgs) $customBuildArgs $extraBuildProperties"
# Only use Docker when a container is specified
if [[ -n "${{ parameters.container }}" ]]; then
# Allows Arcade to have access to the commit for the build, pass it through to the container
customEnvVars="$customEnvVars BUILD_SOURCEVERSION=$BUILD_SOURCEVERSION"
customDockerRunArgs=""
for envVar in $customEnvVars; do
customDockerRunArgs="$customDockerRunArgs -e $envVar"
done
if [[ '${{ parameters.runOnline }}' == 'False' ]]; then
customDockerRunArgs="$customDockerRunArgs --network none"
fi
docker run --rm -v "$(sourcesPath):/vmr" -w /vmr $customDockerRunArgs ${{ parameters.container }} ./build.sh $buildArgs
else
for envVar in $customEnvVars; do
customEnvVarsWithBashSyntax="$customEnvVarsWithBashSyntax export $envVar;"
done
cd $(sourcesPath)
eval $customEnvVarsWithBashSyntax
./build.sh $buildArgs
fi
displayName: Build
# Only run tests if enabled
- ${{ if eq(parameters.runTests, 'True') }}:
- script: |
set -x
@ -309,25 +321,56 @@ jobs:
docker run --rm $dockerVolumeArgs -w /vmr $dockerEnvArgs ${{ parameters.container }} ./build.sh --source-only $poisonArg --test $(additionalBuildArgs) /p:SmokeTestConsoleVerbosity=detailed
displayName: Run Tests
# Don't use CopyFiles@2 as it encounters permissions issues because it indexes all files in the source directory graph.
- script: |
set -x
- ${{ if eq(parameters.targetOS, 'windows') }}:
targetFolder=$(Build.StagingDirectory)/BuildLogs/
mkdir -p ${targetFolder}
# Don't use CopyFiles@2 as it encounters permissions issues because it indexes all files in the source directory graph.
- powershell: |
function CopyWithRelativeFolders($sourcePath, $targetFolder, $filter) {
Get-ChildItem -Path $sourcePath -Filter $filter -Recurse | ForEach-Object {
$targetPath = Join-Path $targetFolder (Resolve-Path -Relative $_.FullName)
New-Item -ItemType Directory -Path (Split-Path -Parent $targetPath) -Force | Out-Null
Copy-Item $_.FullName -Destination $targetPath -Force
}
}
cd "$(sourcesPath)"
find artifacts/ -type f -name "*.binlog" -exec cp {} --parents -t ${targetFolder} \;
find artifacts/ -type f -name "*.log" -exec cp {} --parents -t ${targetFolder} \;
find artifacts/prebuilt-report/ -exec cp {} --parents -t ${targetFolder} \;
find src/ -type f -name "*.binlog" -exec cp {} --parents -t ${targetFolder} \;
find src/ -type f -name "*.log" -exec cp {} --parents -t ${targetFolder} \;
find test/ -type f -name "*.binlog" -exec cp {} --parents -t ${targetFolder} \;
find test/ -type f -name "Updated*.diff" -exec cp {} --parents -t ${targetFolder} \;
find test/ -type f -name "Updated*.txt" -exec cp {} --parents -t ${targetFolder} \;
displayName: Prepare BuildLogs staging directory
continueOnError: true
condition: succeededOrFailed()
$targetFolder = "$(Build.StagingDirectory)/BuildLogs/"
New-Item -ItemType Directory -Path $targetFolder -Force | Out-Null
cd "$(sourcesPath)"
CopyWithRelativeFolders "artifacts/" $targetFolder "*.binlog"
CopyWithRelativeFolders "artifacts/" $targetFolder "*.log"
CopyWithRelativeFolders "artifacts/prebuilt-report/" $targetFolder
CopyWithRelativeFolders "src/" $targetFolder "*.binlog"
CopyWithRelativeFolders "src/" $targetFolder "*.log"
CopyWithRelativeFolders "test/" $targetFolder "*.binlog"
CopyWithRelativeFolders "test/" $targetFolder "Updated*.diff"
CopyWithRelativeFolders "test/" $targetFolder "Updated*.txt"
displayName: Prepare BuildLogs staging directory
continueOnError: true
condition: succeededOrFailed()
- ${{ else }}:
# Don't use CopyFiles@2 as it encounters permissions issues because it indexes all files in the source directory graph.
- script: |
set -x
targetFolder=$(Build.StagingDirectory)/BuildLogs/
mkdir -p ${targetFolder}
cd "$(sourcesPath)"
find artifacts/ -type f -name "*.binlog" -exec rsync -R {} -t ${targetFolder} \;
find artifacts/ -type f -name "*.log" -exec rsync -R {} -t ${targetFolder} \;
find artifacts/prebuilt-report/ -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 test/ -type f -name "*.binlog" -exec rsync -R {} -t ${targetFolder} \;
find test/ -type f -name "Updated*.diff" -exec rsync -R {} -t ${targetFolder} \;
find test/ -type f -name "Updated*.txt" -exec rsync -R {} -t ${targetFolder} \;
displayName: Prepare BuildLogs staging directory
continueOnError: true
condition: succeededOrFailed()
- publish: '$(Build.StagingDirectory)/BuildLogs'
artifact: $(Agent.JobName)_BuildLogs_Attempt$(System.JobAttempt)
@ -335,17 +378,19 @@ jobs:
continueOnError: true
condition: succeededOrFailed()
- task: PublishTestResults@2
displayName: Publish Test Results
condition: succeededOrFailed()
continueOnError: true
inputs:
testRunner: vSTest
testResultsFiles: 'test/**/*.trx'
searchFolder: ${{ variables.sourcesPath }}
mergeTestResults: true
publishRunAttachments: true
testRunTitle: SourceBuild_SmokeTests_$(Agent.JobName)
# Only upload test results if enabled
- ${{ if eq(parameters.runTests, 'True') }}:
- task: PublishTestResults@2
displayName: Publish Test Results
condition: succeededOrFailed()
continueOnError: true
inputs:
testRunner: vSTest
testResultsFiles: 'test/**/*.trx'
searchFolder: ${{ variables.sourcesPath }}
mergeTestResults: true
publishRunAttachments: true
testRunTitle: SourceBuild_SmokeTests_$(Agent.JobName)
- publish: '${{ variables.sourcesPath }}/artifacts/${{ parameters.architecture }}/Release/'
artifact: $(Agent.JobName)_Artifacts

View file

@ -1,150 +1,58 @@
### This stage source-builds https://github.com/dotnet/dotnet with varying parameters
### If run in a PR, new changes are applied to a local copy of the VMR, then it is source-built and tested
### This stage builds https://github.com/dotnet/dotnet with varying parameters
### If run in a PR, new changes are applied to a local copy of the VMR, then it is built and tested
parameters:
dependsOn: []
condition: always()
# Branch of the VMR to use (to push to for internal builds)
- name: vmrBranch
type: string
default: $(Build.SourceBranch)
# Branch of the VMR to use (to push to for internal builds)
vmrBranch: $(Build.SourceBranch)
# Scope of jobs which are executed
- name: scope
type: string
values:
# run 1 leg for smoke tests
- ultralite
# run several legs e.g. win/linux/mac for basic testing
- lite
# run everything
- full
# True when the build is a lite build
isLiteBuild:
# True when build is running from dotnet/dotnet directly
- name: isBuiltFromVmr
type: boolean
default: false
# True when build is running from dotnet/dotnet directly
isBuiltFromVmr:
# The following parameters aren't expected to be passed in rather they are used for encapsulation
# -----------------------------------------------------------------------------------------------
alpine319Container: mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.19-WithNode
centOSStream8Container: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8
centOSStream9Container: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9
fedora39Container: mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-39
ubuntu2204Container: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04
ubuntu2204ArmContainer: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-arm64
# Internal builds
poolInternalAmd64:
name: NetCore1ESPool-Svc-Internal
demands: ImageOverride -equals Build.Ubuntu.1804.Amd64
poolInternalAmd64PR:
name: NetCore1ESPool-Internal-XL
demands: ImageOverride -equals Build.Ubuntu.1804.Amd64
poolInternalArm64:
name: Docker-Linux-Arm-Internal
# Public builds / PRs
poolPublicAmd64:
name: NetCore-Public-XL
demands: ImageOverride -equals Build.Ubuntu.1804.Amd64.Open
# True when building the VMR in source-only mode
- name: isSourceOnlyBuild
type: boolean
default: false
#### SOURCE-ONLY BUILD ####
stages:
- stage: VMR_Source_Build
displayName: VMR Source-Build
dependsOn: ${{ parameters.dependsOn }}
condition: ${{ parameters.condition }}
variables:
- ${{ if eq(variables['System.TeamProject'], 'public') }}:
- name: defaultPoolName
value: ${{ parameters.poolPublicAmd64.name }}
- name: defaultPoolDemands
value: ${{ parameters.poolPublicAmd64.demands }}
- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
- name: defaultPoolName
value: ${{ parameters.poolInternalAmd64PR.name }}
- name: defaultPoolDemands
value: ${{ parameters.poolInternalAmd64PR.demands }}
- ${{ else }}:
- name: defaultPoolName
value: ${{ parameters.poolInternalAmd64.name }}
- name: defaultPoolDemands
value: ${{ parameters.poolInternalAmd64.demands }}
- ${{ if ne(parameters.vmrBranch, '') }}:
- name: VmrBranch
value: ${{ parameters.vmrBranch }}
- ${{ else }}:
- name: VmrBranch
value: ${{ replace(replace(variables['Build.SourceBranch'], 'refs/heads/', ''), 'refs/pull/', '') }}
jobs:
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: CentOSStream8_Online_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.centOSStream8Container }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: true # ✅
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
- ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
- ${{ if parameters.isSourceOnlyBuild }}:
- stage: VMR_SourceOnly_Build
displayName: VMR Source-Only Build
variables:
- template: ../variables/vmr-stage.yml
parameters:
vmrBranch: ${{ parameters.vmrBranch }}
jobs:
### Jobs for ultralite builds ###
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: CentOSStream8_Online_CurrentSourceBuiltSdk
buildName: CentOSStream8_Online_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.centOSStream8Container }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: true # ✅
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
reuseBuildArtifactsFrom: CentOSStream8_Online_MsftSdk
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: Alpine319_Offline_PreviousSourceBuiltSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
artifactsRid: alpine.3.19-x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.alpine319Container }}
buildFromArchive: false # 🚫
enablePoison: true # ✅
excludeOmniSharpTests: true # ✅
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: true # ✅
- ${{ if eq(parameters.isLiteBuild, false) }}:
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: Alpine319_Online_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.alpine319Container }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.centOSStream8Container }}
buildFromArchive: false # 🚫
buildSourceOnly: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: true # ✅
@ -152,174 +60,344 @@ stages:
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
### Additional jobs for lite/full builds ###
- ${{ if in(parameters.scope, 'lite', 'full') }}:
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: CentOSStream8_Online_CurrentSourceBuiltSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.centOSStream8Container }}
buildFromArchive: false # 🚫
buildSourceOnly: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: true # ✅
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
reuseBuildArtifactsFrom: CentOSStream8_Online_MsftSdk
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: Alpine319_Offline_PreviousSourceBuiltSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
artifactsRid: alpine.3.19-x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.alpine319Container }}
buildFromArchive: false # 🚫
buildSourceOnly: true # ✅
enablePoison: true # ✅
excludeOmniSharpTests: true # ✅
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: true # ✅
### Additional jobs for full build ###
- ${{ if in(parameters.scope, 'full') }}:
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: Alpine319_Online_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.alpine319Container }}
buildFromArchive: false # 🚫
buildSourceOnly: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: true # ✅
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: CentOSStream8_Offline_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.centOSStream8Container }}
buildFromArchive: true # ✅
buildSourceOnly: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: CentOSStream8_Online_PreviousSourceBuiltSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
artifactsRid: centos.8-x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.centOSStream8Container }}
buildFromArchive: false # 🚫
buildSourceOnly: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: true # ✅
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: true # ✅
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: CentOSStream8_Offline_PreviousSourceBuiltSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
artifactsRid: centos.8-x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.centOSStream8Container }}
buildFromArchive: false # 🚫
buildSourceOnly: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: true # ✅
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: CentOSStream8_Mono_Offline_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.centOSStream8Container }}
buildFromArchive: true # ✅
buildSourceOnly: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: true # ✅
withPreviousSDK: false # 🚫
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: CentOSStream9_Offline_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.centOSStream9Container }}
buildFromArchive: true # ✅
buildSourceOnly: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: false # 🚫
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: Fedora39_Offline_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.fedora39Container }}
buildFromArchive: true # ✅
buildSourceOnly: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: false # 🚫
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: Ubuntu2204_Offline_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.ubuntu2204Container }}
buildFromArchive: false # 🚫
buildSourceOnly: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: false # 🚫
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: Ubuntu2204Arm64_Offline_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64
pool: ${{ variables.defaultPoolNameLinuxArm64 }}
container: ${{ variables.ubuntu2204ArmContainer }}
buildFromArchive: false # 🚫
buildSourceOnly: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: false # 🚫
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: Fedora39_Offline_CurrentSourceBuiltSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.fedora39Container }}
buildFromArchive: false # 🚫
buildSourceOnly: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: false # 🚫
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
reuseBuildArtifactsFrom: Fedora39_Offline_MsftSdk
#### VERTICAL BUILD ####
- ${{ if not(parameters.isSourceOnlyBuild) }}:
- stage: VMR_Vertical_Build
displayName: VMR Vertical Build
variables:
- template: ../variables/vmr-stage.yml
parameters:
vmrBranch: ${{ parameters.vmrBranch }}
jobs:
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: CentOSStream8_Offline_MsftSdk
buildName: Ubuntu2204
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.centOSStream8Container }}
buildFromArchive: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
demands: ${{ variables.defaultPoolDemandsLinux }}
container: ${{ variables.ubuntu2204Container }}
targetOS: linux
targetArchitecture: x64
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: CentOSStream8_Online_PreviousSourceBuiltSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
artifactsRid: centos.8-x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.centOSStream8Container }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: true # ✅
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: true # ✅
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: CentOSStream8_Offline_PreviousSourceBuiltSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
artifactsRid: centos.8-x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.centOSStream8Container }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: true # ✅
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: CentOSStream8_Mono_Offline_MsftSdk
buildName: Windows
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.centOSStream8Container }}
buildFromArchive: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: true # ✅
withPreviousSDK: false # 🚫
demands: ${{ variables.defaultPoolDemandsWindows }}
container: ''
targetOS: windows
targetArchitecture: x64
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: CentOSStream9_Offline_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.centOSStream9Container }}
buildFromArchive: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: false # 🚫
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
### Additional jobs for full build ###
- ${{ if in(parameters.scope, 'full') }}:
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: Fedora39_Offline_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.fedora39Container }}
buildFromArchive: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: false # 🚫
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
- template: ../jobs/vmr-build.yml
parameters:
buildName: OSX
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
vmImage: ${{ variables.defaultPoolNameMac }}
container: ''
targetOS: osx
targetArchitecture: x64
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: Ubuntu2204_Offline_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.ubuntu2204Container }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: false # 🚫
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
# Cross builds are currently failing
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: Ubuntu2204Arm64_Offline_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64
pool: ${{ parameters.poolInternalArm64 }}
container: ${{ parameters.ubuntu2204ArmContainer }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: false # 🚫
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
# - template: ../jobs/vmr-build.yml
# parameters:
# buildName: MarinerCross
# isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
# vmrBranch: ${{ variables.VmrBranch }}
# architecture: x64
# pool:
# name: ${{ variables.defaultPoolName }}
# demands: ${{ variables.defaultPoolDemandsLinux }}
# container: ${{ variables.marinerX64CrossContainer }}
# crossRootFs: '/crossrootfs/x64'
# targetOS: linux
# targetArchitecture: x64
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: Fedora39_Offline_CurrentSourceBuiltSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.fedora39Container }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: false # 🚫
runOnline: false # 🚫
runTests: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
reuseBuildArtifactsFrom: Fedora39_Offline_MsftSdk
# - template: ../jobs/vmr-build.yml
# parameters:
# buildName: MarinerCross
# isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
# vmrBranch: ${{ variables.VmrBranch }}
# architecture: arm64
# pool:
# name: ${{ variables.defaultPoolName }}
# demands: ${{ variables.defaultPoolDemandsLinux }}
# container: ${{ variables.marinerArm64CrossContainer }}
# crossRootFs: '/crossrootfs/arm64'
# targetOS: linux
# targetArchitecture: arm64
# - template: ../jobs/vmr-build.yml
# parameters:
# buildName: OSXCross
# isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
# vmrBranch: ${{ variables.VmrBranch }}
# architecture: arm64
# pool:
# vmImage: ${{ variables.defaultPoolNameMac }}
# container: ''
# targetOS: osx
# targetArchitecture: arm64

View file

@ -1,177 +0,0 @@
### This stage source-builds https://github.com/dotnet/dotnet with varying parameters
### If run in a PR, new changes are applied to a local copy of the VMR, then it is source-built and tested
parameters:
dependsOn: []
condition: always()
# Branch of the VMR to use (to push to for internal builds)
vmrBranch: $(Build.SourceBranch)
# True when the build is a lite build
isLiteBuild:
# True when build is running from dotnet/dotnet directly
isBuiltFromVmr:
# The following parameters aren't expected to be passed in rather they are used for encapsulation
# -----------------------------------------------------------------------------------------------
marinerX64CrossContainer: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-cross-amd64
marinerArm64CrossContainer: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-cross-arm64
# Internal builds
poolInternalAmd64:
name: NetCore1ESPool-Svc-Internal
demands: ImageOverride -equals Build.Ubuntu.1804.Amd64
poolInternalAmd64PR:
name: NetCore1ESPool-Internal-XL
demands: ImageOverride -equals Build.Ubuntu.1804.Amd64
poolInternalArm64:
name: Docker-Linux-Arm-Internal
# Public builds / PRs
poolPublicAmd64:
name: NetCore-Public-XL
demands: ImageOverride -equals Build.Ubuntu.1804.Amd64.Open
# Mac
poolMac:
vmImage: 'macos-12'
stages:
- stage: VMR_PoC_Build
displayName: VMR PoC-Build
dependsOn: ${{ parameters.dependsOn }}
condition: ${{ parameters.condition }}
variables:
- ${{ if eq(variables['System.TeamProject'], 'public') }}:
- name: defaultPoolName
value: ${{ parameters.poolPublicAmd64.name }}
- name: defaultPoolDemands
value: ${{ parameters.poolPublicAmd64.demands }}
- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
- name: defaultPoolName
value: ${{ parameters.poolInternalAmd64PR.name }}
- name: defaultPoolDemands
value: ${{ parameters.poolInternalAmd64PR.demands }}
- ${{ else }}:
- name: defaultPoolName
value: ${{ parameters.poolInternalAmd64.name }}
- name: defaultPoolDemands
value: ${{ parameters.poolInternalAmd64.demands }}
- ${{ if ne(parameters.vmrBranch, '') }}:
- name: VmrBranch
value: ${{ parameters.vmrBranch }}
- ${{ else }}:
- name: VmrBranch
value: ${{ replace(replace(variables['Build.SourceBranch'], 'refs/heads/', ''), 'refs/pull/', '') }}
jobs:
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: MarinerCrossX64_Online_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.marinerx64CrossContainer }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: true # ✅
useMonoRuntime: true # ✅
withPreviousSDK: false # 🚫
crossRootFs: '/crossrootfs/x64' # 📝
runTests: false # 🚫
targetOS: 'linux' # 📝
targetArchitecture: 'x64' # 📝
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: MarinerCrossArm64_Online_MsftSdk_Mono
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.marinerArm64CrossContainer }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: true # ✅
useMonoRuntime: true # ✅
withPreviousSDK: false # 🚫
crossRootFs: '/crossrootfs/arm64' # 📝
runTests: false # 🚫
targetOS: 'linux' # 📝
targetArchitecture: 'arm64' # 📝
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: OSXCrossX64_Online_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
vmImage: ${{ parameters.poolMac.vmImage }}
container: ''
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: true # ✅
useMonoRuntime: true # ✅
withPreviousSDK: false # 🚫
runTests: false # 🚫
targetOS: 'osx' # 📝
targetArchitecture: 'x64' # 📝
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: OSXCrossArm64_Online_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64
pool:
vmImage: ${{ parameters.poolMac.vmImage }}
container: ''
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: true # ✅
useMonoRuntime: true # ✅
withPreviousSDK: false # 🚫
runTests: false # 🚫
targetOS: 'osx' # 📝
targetArchitecture: 'arm64' # 📝
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: MarinerCrossArm64_Online_MsftSdk_CoreCLR
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.marinerArm64CrossContainer }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: true # ✅
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
crossRootFs: '/crossrootfs/arm64' # 📝
runTests: false # 🚫
targetOS: 'linux' # 📝
targetArchitecture: 'arm64' # 📝

View file

@ -33,10 +33,19 @@ steps:
- script: |
git checkout -B ${{ parameters.vmrBranch }}
echo "##vso[task.setvariable variable=vmrBranch]${{ parameters.vmrBranch }}"
mkdir -p ${{ parameters.vmrPath }}/artifacts/x64/Release
displayName: Prepare branch ${{ parameters.vmrBranch }}
workingDirectory: ${{ parameters.vmrPath }}
- script: |
mkdir -p ${{ parameters.vmrPath }}/artifacts/x64/Release
displayName: Create artifacts folder (Unix)
condition: ne(variables['Agent.OS'], 'Windows_NT')
- powershell: |
New-Item -ItemType Directory -Path ${{ parameters.vmrPath }}/artifacts/x64/Release
displayName: Create artifacts folder (Windows)
condition: eq(variables['Agent.OS'], 'Windows_NT')
- script: |
git config --global user.name "dotnet-maestro[bot]"
git config --global user.email "dotnet-maestro[bot]@users.noreply.github.com"
@ -57,13 +66,36 @@ steps:
--branch ${{ parameters.vmrBranch }}
--repository "installer:${{ parameters.targetRef }}"
--recursive
--remote "installer:$(pwd)"
--remote "installer:$(Agent.BuildDirectory)/installer"
--component-template $(Agent.BuildDirectory)/installer/src/VirtualMonoRepo/Component.template.md
--tpn-template $(Agent.BuildDirectory)/installer/src/VirtualMonoRepo/THIRD-PARTY-NOTICES.template.txt
--debug
||
(echo "##vso[task.logissue type=error]Failed to synchronize the VMR" && exit 1)
displayName: Synchronize dotnet/dotnet
displayName: Synchronize dotnet/dotnet (Unix)
condition: ne(variables['Agent.OS'], 'Windows_NT')
workingDirectory: $(Agent.BuildDirectory)/installer
- powershell: >
./eng/vmr-sync.ps1 `
-vmr ${{ parameters.vmrPath }} `
-tmp $(Agent.TempDirectory) `
-azdevPat '$(dn-bot-all-orgs-code-r)' `
-branch ${{ parameters.vmrBranch }} `
-repository "installer:${{ parameters.targetRef }}" `
-recursive `
# passing remote fails for some reason, but it is the default anyway
# -remote "installer:$(Agent.BuildDirectory)/installer"
-componentTemplate $(Agent.BuildDirectory)/installer/src/VirtualMonoRepo/Component.template.md `
-tpnTemplate $(Agent.BuildDirectory)/installer/src/VirtualMonoRepo/THIRD-PARTY-NOTICES.template.txt `
-debugOutput
if ($LASTEXITCODE -ne 0) {
echo "##vso[task.logissue type=error]Failed to synchronize the VMR"
exit 1
}
displayName: Synchronize dotnet/dotnet (Windows)
condition: eq(variables['Agent.OS'], 'Windows_NT')
workingDirectory: $(Agent.BuildDirectory)/installer
- publish: $(Agent.TempDirectory)

View file

@ -0,0 +1,53 @@
parameters:
- name: vmrBranch
type: string
variables:
- ${{ if ne(parameters.vmrBranch, '') }}:
- name: VmrBranch
value: ${{ parameters.vmrBranch }}
- ${{ else }}:
- name: VmrBranch
value: ${{ replace(replace(variables['Build.SourceBranch'], 'refs/heads/', ''), 'refs/pull/', '') }}
- name: alpine319Container
value: mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.19-WithNode
- name: centOSStream8Container
value: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8
- name: centOSStream9Container
value: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9
- name: fedora39Container
value: mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-39
- name: ubuntu2204Container
value: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04
- name: ubuntu2204ArmContainer
value: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-arm64
- name: marinerX64CrossContainer
value: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-cross-amd64
- name: marinerArm64CrossContainer
value: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-cross-arm64
- ${{ if eq(variables['System.TeamProject'], 'public') }}:
- name: defaultPoolName
value: NetCore-Public-XL
- name: defaultPoolDemandsLinux
value: ImageOverride -equals Build.Ubuntu.1804.Amd64.Open
- name: defaultPoolDemandsWindows
value: ImageOverride -equals windows.vs2022.amd64.open
- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
- name: defaultPoolName
value: NetCore1ESPool-Internal-XL
- ${{ else }}:
- name: defaultPoolName
value: NetCore1ESPool-Svc-Internal
- name: defaultPoolDemandsLinux
value: ImageOverride -equals Build.Ubuntu.1804.Amd64
- name: defaultPoolDemandsWindows
value: ImageOverride -equals windows.vs2022.amd64
- name: defaultPoolNameLinuxArm64
value: Docker-Linux-Arm-Internal
- name: defaultPoolNameMac
value: macos-12

View file

@ -1,53 +0,0 @@
trigger: none
pr:
branches:
include:
- main
- release/*
- internal/release/*
parameters:
- name: vmrBranch
displayName: dotnet/dotnet branch to use
type: string
default: ' '
- name: disableVmrBuild
displayName: Skip source-building the VMR
type: boolean
default: false
variables:
- ${{ if ne(parameters.vmrBranch, ' ') }}:
- name: VmrBranch
value: ${{ replace(parameters.vmrBranch, ' ', '') }}
- ${{ else }}:
- name: VmrBranch
value: ${{ replace(replace(variables['System.PullRequest.TargetBranch'], 'refs/heads/', ''), 'refs/pull/', '') }}
resources:
repositories:
- repository: vmr
type: git
name: dotnet-dotnet
ref: ${{ variables.VmrBranch }}
stages:
# You can temporarily disable the VMR Build stage by changing the default of disableVmrBuild
- ${{ if not(parameters.disableVmrBuild) }}:
- template: templates/stages/vmr-build.yml
parameters:
vmrBranch: ${{ variables.VmrBranch }}
isBuiltFromVmr: false
# In case the VMR Build stage is temporarily disabled, the VMR synchronization step is run to validate
# that the PR can be merged and later synchronized into the VMR without problems.
- ${{ else }}:
- stage: Synchronize_VMR
displayName: Synchronize VMR
dependsOn: []
jobs:
- template: templates/jobs/vmr-synchronization.yml
parameters:
vmrBranch: ${{ variables.VmrBranch }}
noPush: true

View file

@ -1,3 +1,10 @@
# This yml is used by these pipelines and triggers:
#
# - installer-source-build (public)
# - PR: release/* and main, ultralite build
# - installer-unified-build (public)
# - PR: release/* and main, lite build
trigger: none
pr:
branches:
@ -15,8 +22,8 @@ parameters:
type: string
default: ' '
- name: disableVmrBuild
displayName: Skip source-building the VMR
- name: disableBuild
displayName: Skip the VMR Build stage
type: boolean
default: false
@ -28,6 +35,10 @@ variables:
- name: VmrBranch
value: ${{ replace(replace(variables['System.PullRequest.TargetBranch'], 'refs/heads/', ''), 'refs/pull/', '') }}
# enable source-only build for pipelines with the -source-build suffix
- name: isSourceOnlyBuild
value: ${{ contains(variables['Build.DefinitionName'], '-source-build') }}
resources:
repositories:
- repository: vmr
@ -37,12 +48,17 @@ resources:
ref: ${{ variables.VmrBranch }}
stages:
# You can temporarily disable the VMR Build stage by setting the disableVmrBuild variable
- ${{ if not(parameters.disableVmrBuild) }}:
# You can temporarily disable the VMR Build stage by setting the disableBuild variable
- ${{ if not(parameters.disableBuild) }}:
- template: templates/stages/vmr-build.yml
parameters:
vmrBranch: ${{ variables.VmrBranch }}
isBuiltFromVmr: false
isSourceOnlyBuild: ${{ variables.isSourceOnlyBuild }}
${{ if eq(variables.isSourceOnlyBuild, 'true') }}:
scope: ultralite
${{ else }}:
scope: lite
# In case the VMR Build stage is temporarily disabled, the VMR synchronization step is run to validate
# that the PR can be merged and later synchronized into the VMR without problems.

View file

@ -1,52 +0,0 @@
trigger: none
pr:
branches:
include:
- main
parameters:
- name: vmrBranch
displayName: dotnet/dotnet branch to push to
type: string
default: ' '
- name: disableVmrBuild
displayName: Skip source-building the VMR
type: boolean
default: false
variables:
- ${{ if ne(parameters.vmrBranch, ' ') }}:
- name: VmrBranch
value: ${{ replace(parameters.vmrBranch, ' ', '') }}
- ${{ else }}:
- name: VmrBranch
value: ${{ replace(replace(variables['System.PullRequest.TargetBranch'], 'refs/heads/', ''), 'refs/pull/', '') }}
resources:
repositories:
- repository: vmr
type: github
name: dotnet/dotnet
endpoint: dotnet
ref: ${{ variables.VmrBranch }}
stages:
- ${{ if not(parameters.disableVmrBuild) }}:
- template: templates/stages/vmr-cross-build.yml
parameters:
vmrBranch: ${{ variables.VmrBranch }}
isBuiltFromVmr: false
isLiteBuild: true
# In case the VMR Build stage is temporarily disabled, the VMR synchronization step is run to validate
# that the PR can be merged and later synchronized into the VMR without problems.
- ${{ else }}:
- stage: Synchronize_VMR
displayName: Synchronize VMR
dependsOn: []
jobs:
- template: templates/jobs/vmr-synchronization.yml
parameters:
vmrBranch: ${{ variables.VmrBranch }}
noPush: true

216
eng/vmr-sync.ps1 Normal file
View file

@ -0,0 +1,216 @@
<#
.SYNOPSIS
This script is used for synchronizing the dotnet/dotnet VMR locally. This means pulling new
code from various repositories into the 'dotnet/dotnet' repository.
.DESCRIPTION
The script is used during CI to ingest new code based on dotnet/installer but it can also help
for reproducing potential failures during installer's PRs, namely to fix the Source-Build.
Another usecase is to try manually synchronizing a given commit of some repo into the VMR and
trying to Source-Build the VMR. This can help when fixing the Source-Build but using a commit
from a not-yet merged branch (or fork) to test the fix will help.
The tooling that synchronizes the VMR will need to clone the various repositories into a temporary
folder. These clones can be re-used in future synchronizations so it is advised you dedicate a
folder to this to speed up your re-runs.
.EXAMPLE
Synchronize current installer and all dependencies into a local VMR:
./vmr-sync.ps1 -vmrDir "$HOME/repos/dotnet" -tmpDir "$HOME/repos/tmp"
Synchronize the VMR to a specific commit of dotnet/runtime using custom fork:
./vmr-sync.ps1 `
-repository runtime:e7e71da303af8dc97df99b098f21f526398c3943 `
-remote runtime:https://github.com/yourfork/runtime `
-tmpDir "$HOME/repos/tmp"
.PARAMETER tmpDir
Required. Path to the temporary folder where repositories will be cloned
.PARAMETER vmrBranch
Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch
.PARAMETER component-template
Optional. Template for VMRs Component.md used for regenerating the file to list the newest versions of
components.
Defaults to src/VirtualMonoRepo/Component.template.md
.PARAMETER recursive
Optional. Recursively synchronize all the source build dependencies (declared in Version.Details.xml)
This is used when performing the full synchronization during installer's CI and the final VMR sync.
Defaults to false unless no repository is supplied in which case a recursive sync of installer is performed.
.PARAMETER remote
Optional. Additional remote to use during the synchronization
This can be used to synchronize to a commit from a fork of the repository
Example: 'runtime:https://github.com/yourfork/runtime'
.PARAMETER repository
Optional. Repository + git ref separated by colon to synchronize to.
This can be a specific commit, branch, tag.
If not supplied, the revision of the parent installer repository of this script will be used (recursively).
Example: 'runtime:my-branch-name'
.PARAMETER tpnTemplate
Optional. Template for the header of VMRs THIRD-PARTY-NOTICES file.
Defaults to src/VirtualMonoRepo/THIRD-PARTY-NOTICES.template.txt
.PARAMETER azdevPat
Optional. Azure DevOps PAT to use for cloning private repositories.
.PARAMETER vmrDir
Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder
.PARAMETER debugOutput
Optional. Enables debug logging in the darc vmr command.
#>
param (
[Parameter(Mandatory=$true, HelpMessage="Path to the temporary folder where repositories will be cloned")]
[string][Alias('t', 'tmp')]$tmpDir,
[string][Alias('b', 'branch')]$vmrBranch,
[string]$componentTemplate = "src/VirtualMonoRepo/Component.template.md",
[switch]$recursive,
[string]$remote,
[string][Alias('r')]$repository,
[string]$tpnTemplate = "src/VirtualMonoRepo/THIRD-PARTY-NOTICES.template.txt",
[string]$azdevPat,
[string][Alias('v', 'vmr')]$vmrDir,
[switch]$debugOutput
)
$scriptRoot = $PSScriptRoot
function Fail {
Write-Host "> $($args[0])" -ForegroundColor 'Red'
}
function Highlight {
Write-Host "> $($args[0])" -ForegroundColor 'Cyan'
}
$installerDir = (Split-Path -Parent $scriptRoot)
# If installer is a repo, we're in an installer and not in the dotnet/dotnet repo
if (Test-Path -Path "$installerDir/.git" -PathType Container) {
$additionalRemotes = "installer:$installerDir"
}
if ($remote) {
$additionalRemotes = "$additionalRemotes $remote"
}
$verbosity = 'verbose'
if ($debugOutput) {
$verbosity = 'debug'
}
# Validation
if (-not (Test-Path -Path $installerDir -PathType Container)) {
Fail "Directory '$installerDir' does not exist. Please specify the path to the dotnet/installer repo"
exit 1
}
if (-not $tmpDir) {
Fail "Missing -tmpDir argument. Please specify the path to the temporary folder where the repositories will be cloned"
exit 1
}
if (-not (Test-Path -Path $componentTemplate -PathType Leaf)) {
Fail "File '$componentTemplate' does not exist. Please specify a valid path to the component template"
exit 1
}
if (-not (Test-Path -Path $tpnTemplate -PathType Leaf)) {
Fail "File '$tpnTemplate' does not exist. Please specify a valid path to the THIRD-PARTY-NOTICES template"
exit 1
}
# Sanitize the input
# Default when no repository is provided
if (-not $repository) {
$repository = "installer:$(git -C $installerDir rev-parse HEAD)"
$recursive = $true
}
if (-not $vmrDir) {
$vmrDir = Join-Path $tmpDir 'dotnet'
}
if (-not (Test-Path -Path $tmpDir -PathType Container)) {
New-Item -ItemType Directory -Path $tmpDir | Out-Null
}
# Prepare the VMR
if (-not (Test-Path -Path $vmrDir -PathType Container)) {
Highlight "Cloning 'dotnet/dotnet' into $vmrDir.."
git clone https://github.com/dotnet/dotnet $vmrDir
if ($vmrBranch) {
git -C $vmrDir switch -c $vmrBranch
}
}
else {
if ((git -C $vmrDir diff --quiet) -eq $false) {
Fail "There are changes in the working tree of $vmrDir. Please commit or stash your changes"
exit 1
}
if ($vmrBranch) {
Highlight "Preparing $vmrDir"
git -C $vmrDir checkout $vmrBranch
git -C $vmrDir pull
}
}
Set-StrictMode -Version Latest
# Prepare darc
Highlight 'Installing .NET, preparing the tooling..'
. $scriptRoot\common\tools.ps1
$dotnetRoot = InitializeDotNetCli -install:$true
$dotnet = "$dotnetRoot\dotnet.exe"
& "$dotnet" tool restore
Highlight "Starting the synchronization of '$repository'.."
# Synchronize the VMR
$darcArgs = (
"darc", "vmr", "update",
"--vmr", $vmrDir,
"--tmp", $tmpDir,
"--$verbosity",
"--component-template", $componentTemplate,
"--tpn-template", $tpnTemplate,
"--discard-patches",
$repository
)
if ($recursive) {
$darcArgs += ("--recursive")
}
if ($additionalRemotes) {
$darcArgs += ("--additional-remotes", $additionalRemotes)
}
if ($azdevPat) {
$darcArgs += ("--azdev-pat", $azdevPat)
}
& "$dotnet" $darcArgs
if ($LASTEXITCODE -eq 0) {
Highlight "Synchronization succeeded"
}
else {
Fail "Synchronization of dotnet/dotnet to '$repository' failed!"
Fail "'$vmrDir' is left in its last state (re-run of this script will reset it)."
Fail "Please inspect the logs which contain path to the failing patch file (use -debugOutput to get all the details)."
Fail "Once you make changes to the conflicting VMR patch, commit it locally and re-run this script."
exit 1
}

View file

@ -104,7 +104,7 @@ repository=''
additional_remotes=''
recursive=false
verbosity=verbose
readme_template="$installer_dir/src/VirtualMonoRepo/Component.template.md"
component_template="$installer_dir/src/VirtualMonoRepo/Component.template.md"
tpn_template="$installer_dir/src/VirtualMonoRepo/THIRD-PARTY-NOTICES.template.txt"
azdev_pat=''
@ -180,8 +180,8 @@ if [[ -z "$tmp_dir" ]]; then
exit 1
fi
if [[ ! -f "$readme_template" ]]; then
fail "File '$readme_template' does not exist. Please specify a valid path to the README template"
if [[ ! -f "$component_template" ]]; then
fail "File '$component_template' does not exist. Please specify a valid path to the Component.md template"
exit 1
fi

View file

@ -185,6 +185,12 @@ while [[ $# > 0 ]]; do
shift
done
if [[ "$ci" == true ]]; then
if [[ "$exclude_ci_binary_log" == false ]]; then
binary_log=true
fi
fi
. "$scriptroot/eng/common/tools.sh"
function Build {

View file

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

View file

@ -22,8 +22,8 @@
of a .NET major or minor release, prebuilts may be needed. When the release is mature, prebuilts
are not necessary, and this property is removed from the file.
-->
<PrivateSourceBuiltSdkVersion>9.0.100-alpha.1.24067.1</PrivateSourceBuiltSdkVersion>
<PrivateSourceBuiltArtifactsVersion>9.0.100-alpha.1.24067.1</PrivateSourceBuiltArtifactsVersion>
<PrivateSourceBuiltSdkVersion>9.0.100-preview.2.24104.1</PrivateSourceBuiltSdkVersion>
<PrivateSourceBuiltArtifactsVersion>9.0.100-preview.2.24104.1</PrivateSourceBuiltArtifactsVersion>
<PrivateSourceBuiltPrebuiltsVersion>0.1.0-9.0.100-9</PrivateSourceBuiltPrebuiltsVersion>
<!-- msbuild -->
<MicrosoftBuildVersion>15.7.179</MicrosoftBuildVersion>

View file

@ -48,21 +48,17 @@ if ($help) {
exit 0
}
$arguments=""
if ($cleanWhileBuilding) {
$arguments += " /p:CleanWhileBuilding=true"
}
function Build {
InitializeToolset
$bl = if ($binaryLog) { '/bl:' + (Join-Path $LogDir 'Build.binlog') } else { '' }
$cwb = if ($cleanWhileBuilding) { '/p:CleanWhileBuilding=true' } else { '' }
$buildProj = Join-Path $RepoRoot 'build.proj'
MSBuild $buildProj `
$bl `
/p:Configuration=$configuration `
$arguments `
$cwb `
@properties
}
@ -75,6 +71,11 @@ try {
exit 0
}
if ($ci) {
if (-not $excludeCIBinarylog) {
$binaryLog = $true
}
}
Build
}

View file

@ -1,27 +0,0 @@
# This is the dotnet/dotnet pipeline that is triggered every weekday at midnight PST (08:00 UTC) for "main" and when changes are pushed to release/* and internal/release/* branches.
schedules:
- cron: '0 8 * * Mon-Fri'
displayName: Weekday midnight build
branches:
include:
- main
batch: true
trigger:
batch: true
branches:
include:
- release/*
- internal/release/*
pr: none
stages:
- ${{ if ne(variables['Build.Reason'], 'Schedule') }}:
- template: templates/stages/vmr-scan.yml
- template: /src/installer/eng/pipelines/templates/stages/vmr-cross-build.yml
parameters:
isBuiltFromVmr: true
isLiteBuild: false

View file

@ -1,4 +1,8 @@
# This is the dotnet/dotnet-lite pipeline that is triggered by pushes to main and PRs targetting main and release/*.
# This yml is used by these pipelines and triggers:
#
# - dotnet-source-build-lite (internal)
# - PR: release/* and main, lite build
# - CI: main only, every batched commit, lite build
trigger:
batch: true
@ -13,10 +17,11 @@ pr:
- release/*
stages:
- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
- template: templates/stages/vmr-scan.yml
- template: /src/installer/eng/pipelines/templates/stages/vmr-build.yml
parameters:
isBuiltFromVmr: true
isLiteBuild: true
isSourceOnlyBuild: true
scope: lite

View file

@ -1,26 +1,58 @@
# This is the dotnet/dotnet pipeline that is triggered every weekday at midnight PST (08:00 UTC) for "main" and when changes are pushed to release/* and internal/release/* branches.
# This yml is used by these 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
# - CI: release/* and internal/release/* only, every batched commit, full build
# - CI: main only, every batched commit, lite build
# - Schedule: main only, full build
#
# - dotnet-unified-build (internal)
# - PR: lite build
# - CI: release/*, internal/release/* and main, every batched commit, full build
schedules:
- cron: '0 8 * * Mon-Fri'
displayName: Weekday midnight build
branches:
include:
- main
batch: true
variables:
# enable source-only build for pipelines that contain the -source-build string
- name: isSourceOnlyBuild
value: ${{ contains(variables['Build.DefinitionName'], '-source-build') }}
trigger:
batch: true
branches:
include:
- release/*
- internal/release/*
- name: isInternalBuild
value: ${{ eq(variables['System.TeamProject'], 'internal') }}
pr: none
- name: isMainBranch
value: ${{ in(variables['Build.SourceBranch'], 'refs/heads/main', 'refs/heads/main-ub') }}
- name: isScheduleTrigger
value: ${{ eq(variables['Build.Reason'], 'Schedule') }}
- name: isPRTrigger
value: ${{ eq(variables['Build.Reason'], 'PullRequest') }}
stages:
- template: templates/stages/vmr-scan.yml
- ${{ if not(eq(variables.isPRTrigger, 'true')) }}:
- template: templates/stages/vmr-scan.yml
- template: /src/installer/eng/pipelines/templates/stages/vmr-build.yml
parameters:
isBuiltFromVmr: true
isLiteBuild: false
isSourceOnlyBuild: ${{ variables.isSourceOnlyBuild }}
${{ if eq(variables.isScheduleTrigger, 'true') }}:
scope: full
${{ elseif and(eq(variables.isPRTrigger, 'true'), eq(variables.isSourceOnlyBuild, 'true')) }}:
scope: ultralite
${{ elseif and(eq(variables.isPRTrigger, 'true'), not(eq(variables.isSourceOnlyBuild, 'true'))) }}:
scope: lite
${{ elseif and(not(eq(variables.isPRTrigger, 'true')), eq(variables.isSourceOnlyBuild, 'true'), eq(variables.isInternalBuild, 'true'), eq(variables.isMainBranch, 'true')) }}:
scope: lite
${{ else }}:
scope: full

View file

@ -1,6 +1,6 @@
{
"tools": {
"dotnet": "9.0.100-alpha.1.24067.4"
"dotnet": "9.0.100-preview.2.24103.2"
},
"msbuild-sdks": {
"Microsoft.Build.NoTargets": "3.7.0",