diff --git a/.vsts-ci.yml b/.vsts-ci.yml
index d14d1293e..8f0fa0df6 100644
--- a/.vsts-ci.yml
+++ b/.vsts-ci.yml
@@ -1,3 +1,5 @@
+# Pipeline: https://dnceng.visualstudio.com/internal/_build?definitionId=286
+
trigger:
batch: true
branches:
@@ -23,339 +25,323 @@ variables:
- 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
+# Set the MicroBuild plugin installation directory to the agent temp directory to avoid SDL tool scanning.
+- name: MicroBuildOutputFolderOverride
+ value: $(Agent.TempDirectory)
-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') }}:
+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
+ debian11:
+ image: mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-amd64
+ fedora36:
+ image: mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-36
+ ubuntu2204:
+ image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04
+ mariner20CrossArm:
+ image: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-cross-arm-alpine
+ ubuntu2204DebPkg:
+ image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-debpkg
+ sdl:
+ sourceAnalysisPool:
name: $(DncEngInternalBuildPool)
- demands: ImageOverride -equals windows.vs2022preview.amd64
- steps:
- - publish: $(Build.SourcesDirectory)\eng\buildConfiguration
- artifact: buildConfiguration
- displayName: Publish Build Config
-
- ## PR-only jobs
-
- - ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
-
- ## Windows
-
- - template: eng/build.yml
- parameters:
- agentOs: Windows_NT
- jobName: Build_Debug_x64
- buildConfiguration: Debug
- buildArchitecture: x64
- additionalBuildParameters: '/p:PublishInternalAsset=true'
- runTests: true
-
- ## Linux
-
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- jobName: Build_Ubuntu_22_04_Debug_x64
- container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04'
- buildConfiguration: Debug
- buildArchitecture: x64
- linuxPortable: true
- runTests: true
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- jobName: Build_Fedora_36_Debug_x64
- container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-36'
- buildConfiguration: Debug
- buildArchitecture: x64
- linuxPortable: true
- runTests: true
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- jobName: Build_CentOS_8_Stream_Debug_x64
- container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8'
- buildConfiguration: Debug
- buildArchitecture: x64
- linuxPortable: false
- runTests: true
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- jobName: Build_Debian_Stretch_Debug_x64
- container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:debian-stretch'
- buildConfiguration: Debug
- buildArchitecture: x64
- additionalBuildParameters: '/p:BuildSdkDeb=true'
- linuxPortable: false
- runTests: true
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- jobName: Build_Arm64_Debug
- buildConfiguration: Debug
- buildArchitecture: arm64
- runtimeIdentifier: 'linux-arm64'
- linuxPortable: true
- # Never run tests on arm64
- runTests: false
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- jobName: Build_Linux_musl_Debug_x64
- container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.15-WithNode'
- buildConfiguration: Debug
- buildArchitecture: x64
- runtimeIdentifier: 'linux-musl-x64'
- # Pass in HostOSName when running on alpine
- additionalBuildParameters: '/p:HostOSName="linux-musl"'
- linuxPortable: false
- runTests: true
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- jobName: Build_LinuxPortable_Release_x64
- buildConfiguration: Release
- buildArchitecture: x64
- linuxPortable: true
- runTests: true
-
- # MacOS
-
- - template: eng/build.yml
- parameters:
- agentOs: Darwin
- jobName: Build_Release_x64
- buildConfiguration: Release
- buildArchitecture: x64
- runTests: true
-
- ## Official/PGO instrumentation Builds
-
- - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
-
- ## Windows
-
- - template: eng/build.yml
- parameters:
- agentOs: Windows_NT
- jobName: Build_Release_x64
- buildConfiguration: Release
- buildArchitecture: x64
- additionalBuildParameters: '/p:PublishInternalAsset=true'
- runTests: false
- - template: eng/build.yml
- parameters:
- agentOs: Windows_NT
- jobName: Build_Release_x86
- buildConfiguration: Release
- buildArchitecture: x86
- runTests: false
- - template: eng/build.yml
- parameters:
- agentOs: Windows_NT
- jobName: Build_Release_arm64
- buildConfiguration: Release
- buildArchitecture: arm64
- runTests: false
-
- ## Linux
-
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- jobName: Build_Arm_Release
- buildConfiguration: Release
- buildArchitecture: arm
- runtimeIdentifier: 'linux-arm'
- linuxPortable: true
- runTests: false
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- jobName: Build_Arm64_Release
- buildConfiguration: Release
- buildArchitecture: arm64
- runtimeIdentifier: 'linux-arm64'
- linuxPortable: true
- runTests: false
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- jobName: Build_Linux_musl_Release_arm
- container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-cross'
- buildConfiguration: Release
- buildArchitecture: arm
- runtimeIdentifier: 'linux-musl-arm'
- additionalBuildParameters: '/p:OSName="linux-musl"'
- linuxPortable: false
- runTests: false
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- jobName: Build_Linux_musl_Release_arm64
- buildConfiguration: Release
- buildArchitecture: arm64
- runtimeIdentifier: 'linux-musl-arm64'
- additionalBuildParameters: '/p:OSName="linux-musl"'
- linuxPortable: false
- runTests: false
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- jobName: Build_Linux_musl_Release_x64
- container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.15-WithNode'
- buildConfiguration: Release
- buildArchitecture: x64
- runtimeIdentifier: 'linux-musl-x64'
- # Pass in HostOSName when running on alpine
- additionalBuildParameters: '/p:HostOSName="linux-musl"'
- linuxPortable: false
- runTests: false
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- jobName: Build_Linux_Portable_Deb_Release_x64
- container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-debpkg'
- buildConfiguration: Release
- buildArchitecture: x64
- # Do not publish zips and tarballs. The linux-x64 binaries are
- # already published by Build_LinuxPortable_Release_x64
- additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:BuildSdkDeb=true'
- linuxPortable: true
- runTests: false
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- jobName: Build_Linux_Portable_Rpm_Release_x64
- container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-fpm'
- buildConfiguration: Release
- buildArchitecture: x64
- # Do not publish zips and tarballs. The linux-x64 binaries are
- # already published by Build_LinuxPortable_Release_x64
- additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:IsRPMBasedDistro=true'
- linuxPortable: true
- runTests: false
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- jobName: Build_Linux_Portable_Rpm_Release_Arm64
- container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-fpm'
- buildConfiguration: Release
- buildArchitecture: arm64
- runtimeIdentifier: 'linux-arm64'
- # Do not publish zips and tarballs. The linux-x64 binaries are
- # already published by Build_LinuxPortable_Release_x64
- additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:CLIBUILD_SKIP_TESTS=true /p:IsRPMBasedDistro=true'
- linuxPortable: true
- runTests: false
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- jobName: Build_LinuxPortable_Release_x64
- buildConfiguration: Release
- buildArchitecture: x64
- linuxPortable: true
- runTests: false
-
- # MacOS
-
- - template: eng/build.yml
- parameters:
- agentOs: Darwin
- jobName: Build_Release_x64
- buildConfiguration: Release
- buildArchitecture: x64
- runTests: false
- - template: eng/build.yml
- parameters:
- agentOs: Darwin
- jobName: Build_Release_arm64
- runtimeIdentifier: 'osx-arm64'
- buildConfiguration: Release
- buildArchitecture: arm64
- runTests: false
-
- ## Windows PGO Instrumentation builds
-
- - template: eng/build.yml
- parameters:
- agentOs: Windows_NT
- pgoInstrument: true
- jobName: Build_Release_x64
- buildConfiguration: Release
- buildArchitecture: x64
- additionalBuildParameters: '/p:PublishInternalAsset=true'
- runTests: false
- - template: eng/build.yml
- parameters:
- agentOs: Windows_NT
- pgoInstrument: true
- jobName: Build_Release_x86
- buildConfiguration: Release
- buildArchitecture: x86
- runTests: false
- - template: eng/build.yml
- parameters:
- agentOs: Windows_NT
- pgoInstrument: true
- jobName: Build_Release_arm64
- buildConfiguration: Release
- buildArchitecture: arm64
- runTests: false
-
- ## Linux PGO Instrumentation builds
-
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- pgoInstrument: true
- jobName: Build_LinuxPortable_Release_x64
- buildConfiguration: Release
- buildArchitecture: x64
- linuxPortable: true
- runTests: false
-
- - template: eng/build.yml
- parameters:
- agentOs: Linux
- pgoInstrument: true
- jobName: Build_Release_arm64
- buildConfiguration: Release
- buildArchitecture: arm64
- linuxPortable: true
- runTests: false
-
- - template: /eng/common/templates/jobs/source-build.yml
-
-- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- - stage: Publish
- dependsOn:
- - Build
- jobs:
- - template: /eng/common/templates/job/publish-build-assets.yml
- parameters:
- publishUsingPipelines: true
- publishAssetsImmediately: true
+ image: 1es-windows-2022
+ os: windows
+ # Temporary to workaround MicroBuild issues.
+ credscan:
+ enabled: false
+ justificationForDisabling: 'CredScan is failing on the MicroBuild signing plugin. "MicroBuild/Plugins/nuget.config" has changing content and thus cannot be baselined.'
+ stages:
+ - stage: Build
+ jobs:
+ # Build Retry Configuration
+ - job: Publish_Build_Configuration
pool:
+ ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ name: $(DncEngPublicBuildPool)
+ image: 1es-windows-2022-open
+ os: windows
${{ if eq(variables['System.TeamProject'], 'internal') }}:
name: $(DncEngInternalBuildPool)
- demands: ImageOverride -equals windows.vs2022.amd64
+ image: 1es-windows-2022
+ os: windows
+ steps:
+ - task: 1ES.PublishPipelineArtifact@1
+ displayName: Publish Build Config
+ inputs:
+ targetPath: $(Build.SourcesDirectory)\eng\buildConfiguration
+ artifactName: buildConfiguration
+
+ # PR-only jobs
+ - ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
+ # Windows
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Windows_NT
+ jobName: Build_Debug_x64
+ buildConfiguration: Debug
+ buildArchitecture: x64
+ additionalBuildParameters: '/p:PublishInternalAsset=true'
+ runTests: true
+
+ # Linux
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Linux
+ jobName: Build_Ubuntu_22_04_Debug_x64
+ container: ubuntu2204
+ buildConfiguration: Debug
+ buildArchitecture: x64
+ linuxPortable: true
+ runTests: true
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Linux
+ jobName: Build_Fedora_36_Debug_x64
+ container: fedora36
+ buildConfiguration: Debug
+ buildArchitecture: x64
+ linuxPortable: true
+ runTests: true
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Linux
+ jobName: Build_CentOS_8_Stream_Debug_x64
+ container: centosStream8
+ buildConfiguration: Debug
+ buildArchitecture: x64
+ linuxPortable: false
+ runTests: true
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Linux
+ jobName: Build_Debian_11_Debug_x64
+ container: debian11
+ buildConfiguration: Debug
+ buildArchitecture: x64
+ additionalBuildParameters: '/p:BuildSdkDeb=true'
+ linuxPortable: false
+ runTests: true
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Linux
+ jobName: Build_Arm64_Debug
+ buildConfiguration: Debug
+ buildArchitecture: arm64
+ runtimeIdentifier: 'linux-arm64'
+ linuxPortable: true
+ # Never run tests on arm64
+ runTests: false
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Linux
+ jobName: Build_Linux_musl_Debug_x64
+ container: alpine319WithNode
+ buildConfiguration: Debug
+ buildArchitecture: x64
+ runtimeIdentifier: 'linux-musl-x64'
+ # Pass in HostOSName when running on alpine
+ additionalBuildParameters: '/p:HostOSName="linux-musl"'
+ linuxPortable: false
+ runTests: true
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Linux
+ jobName: Build_LinuxPortable_Release_x64
+ buildConfiguration: Release
+ buildArchitecture: x64
+ linuxPortable: true
+ runTests: true
+
+ # MacOS
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Darwin
+ jobName: Build_Release_x64
+ buildConfiguration: Release
+ buildArchitecture: x64
+ runTests: true
+
+ # Official/PGO instrumentation Builds
+ - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
+ # Windows
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Windows_NT
+ jobName: Build_Release_x64
+ buildConfiguration: Release
+ buildArchitecture: x64
+ additionalBuildParameters: '/p:PublishInternalAsset=true'
+ runTests: false
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Windows_NT
+ jobName: Build_Release_x86
+ buildConfiguration: Release
+ buildArchitecture: x86
+ runTests: false
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Windows_NT
+ jobName: Build_Release_arm64
+ buildConfiguration: Release
+ buildArchitecture: arm64
+ runTests: false
+
+ # Linux
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Linux
+ jobName: Build_Arm_Release
+ buildConfiguration: Release
+ buildArchitecture: arm
+ runtimeIdentifier: 'linux-arm'
+ linuxPortable: true
+ runTests: false
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Linux
+ jobName: Build_Arm64_Release
+ buildConfiguration: Release
+ buildArchitecture: arm64
+ runtimeIdentifier: 'linux-arm64'
+ linuxPortable: true
+ runTests: false
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Linux
+ jobName: Build_Linux_musl_Release_arm
+ container: mariner20CrossArm
+ buildConfiguration: Release
+ buildArchitecture: arm
+ runtimeIdentifier: 'linux-musl-arm'
+ additionalBuildParameters: '/p:OSName="linux-musl"'
+ linuxPortable: false
+ runTests: false
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Linux
+ jobName: Build_Linux_musl_Release_arm64
+ buildConfiguration: Release
+ buildArchitecture: arm64
+ runtimeIdentifier: 'linux-musl-arm64'
+ additionalBuildParameters: '/p:OSName="linux-musl"'
+ linuxPortable: false
+ runTests: false
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Linux
+ jobName: Build_Linux_musl_Release_x64
+ container: alpine319WithNode
+ buildConfiguration: Release
+ buildArchitecture: x64
+ runtimeIdentifier: 'linux-musl-x64'
+ # Pass in HostOSName when running on alpine
+ additionalBuildParameters: '/p:HostOSName="linux-musl"'
+ linuxPortable: false
+ runTests: false
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Linux
+ jobName: Build_Linux_Portable_Deb_Release_x64
+ container: ubuntu2204DebPkg
+ buildConfiguration: Release
+ buildArchitecture: x64
+ # Do not publish zips and tarballs. The linux-x64 binaries are
+ # already published by Build_LinuxPortable_Release_x64
+ additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:BuildSdkDeb=true'
+ linuxPortable: true
+ runTests: false
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Linux
+ jobName: Build_Linux_Portable_Rpm_Release_x64
+ container: cblMariner20Fpm
+ buildConfiguration: Release
+ buildArchitecture: x64
+ # Do not publish zips and tarballs. The linux-x64 binaries are
+ # already published by Build_LinuxPortable_Release_x64
+ additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:IsRPMBasedDistro=true'
+ linuxPortable: true
+ runTests: false
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Linux
+ jobName: Build_Linux_Portable_Rpm_Release_Arm64
+ container: cblMariner20Fpm
+ buildConfiguration: Release
+ buildArchitecture: arm64
+ runtimeIdentifier: 'linux-arm64'
+ # Do not publish zips and tarballs. The linux-x64 binaries are
+ # already published by Build_LinuxPortable_Release_x64
+ additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:CLIBUILD_SKIP_TESTS=true /p:IsRPMBasedDistro=true'
+ linuxPortable: true
+ runTests: false
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Linux
+ jobName: Build_LinuxPortable_Release_x64
+ buildConfiguration: Release
+ buildArchitecture: x64
+ linuxPortable: true
+ runTests: false
+
+ # MacOS
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Darwin
+ jobName: Build_Release_x64
+ buildConfiguration: Release
+ buildArchitecture: x64
+ runTests: false
+ - template: eng/build.yml@self
+ parameters:
+ agentOs: Darwin
+ jobName: Build_Release_arm64
+ runtimeIdentifier: 'osx-arm64'
+ buildConfiguration: Release
+ buildArchitecture: arm64
+ runTests: false
+
+ # Source Build
+ - template: /eng/common/templates-official/jobs/source-build.yml@self
+
+ - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
+ - stage: Publish
+ dependsOn:
+ - Build
+ jobs:
+ - template: /eng/common/templates-official/job/publish-build-assets.yml@self
+ parameters:
+ publishUsingPipelines: true
+ publishAssetsImmediately: true
+ pool:
+ name: $(DncEngInternalBuildPool)
+ image: 1es-windows-2022
+ os: windows
diff --git a/.vsts-pr.yml b/.vsts-pr.yml
index d14d1293e..ad4c89795 100644
--- a/.vsts-pr.yml
+++ b/.vsts-pr.yml
@@ -59,7 +59,7 @@ stages:
## Windows
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Windows_NT
jobName: Build_Debug_x64
@@ -70,7 +70,7 @@ stages:
## Linux
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_Ubuntu_22_04_Debug_x64
@@ -79,7 +79,7 @@ stages:
buildArchitecture: x64
linuxPortable: true
runTests: true
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_Fedora_36_Debug_x64
@@ -88,7 +88,7 @@ stages:
buildArchitecture: x64
linuxPortable: true
runTests: true
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_CentOS_8_Stream_Debug_x64
@@ -97,17 +97,17 @@ stages:
buildArchitecture: x64
linuxPortable: false
runTests: true
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
- jobName: Build_Debian_Stretch_Debug_x64
- container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:debian-stretch'
+ jobName: Build_Debian_11_Debug_x64
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-amd64'
buildConfiguration: Debug
buildArchitecture: x64
additionalBuildParameters: '/p:BuildSdkDeb=true'
linuxPortable: false
runTests: true
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_Arm64_Debug
@@ -117,11 +117,11 @@ stages:
linuxPortable: true
# Never run tests on arm64
runTests: false
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_Linux_musl_Debug_x64
- container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.15-WithNode'
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.19-WithNode'
buildConfiguration: Debug
buildArchitecture: x64
runtimeIdentifier: 'linux-musl-x64'
@@ -129,7 +129,7 @@ stages:
additionalBuildParameters: '/p:HostOSName="linux-musl"'
linuxPortable: false
runTests: true
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_LinuxPortable_Release_x64
@@ -140,7 +140,7 @@ stages:
# MacOS
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Darwin
jobName: Build_Release_x64
@@ -154,7 +154,7 @@ stages:
## Windows
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Windows_NT
jobName: Build_Release_x64
@@ -162,14 +162,14 @@ stages:
buildArchitecture: x64
additionalBuildParameters: '/p:PublishInternalAsset=true'
runTests: false
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Windows_NT
jobName: Build_Release_x86
buildConfiguration: Release
buildArchitecture: x86
runTests: false
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Windows_NT
jobName: Build_Release_arm64
@@ -179,7 +179,7 @@ stages:
## Linux
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_Arm_Release
@@ -188,7 +188,7 @@ stages:
runtimeIdentifier: 'linux-arm'
linuxPortable: true
runTests: false
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_Arm64_Release
@@ -197,18 +197,18 @@ stages:
runtimeIdentifier: 'linux-arm64'
linuxPortable: true
runTests: false
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_Linux_musl_Release_arm
- container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-cross'
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-cross-arm-alpine'
buildConfiguration: Release
buildArchitecture: arm
runtimeIdentifier: 'linux-musl-arm'
additionalBuildParameters: '/p:OSName="linux-musl"'
linuxPortable: false
runTests: false
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_Linux_musl_Release_arm64
@@ -218,11 +218,11 @@ stages:
additionalBuildParameters: '/p:OSName="linux-musl"'
linuxPortable: false
runTests: false
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_Linux_musl_Release_x64
- container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.15-WithNode'
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.19-WithNode'
buildConfiguration: Release
buildArchitecture: x64
runtimeIdentifier: 'linux-musl-x64'
@@ -230,7 +230,7 @@ stages:
additionalBuildParameters: '/p:HostOSName="linux-musl"'
linuxPortable: false
runTests: false
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_Linux_Portable_Deb_Release_x64
@@ -242,7 +242,7 @@ stages:
additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:BuildSdkDeb=true'
linuxPortable: true
runTests: false
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_Linux_Portable_Rpm_Release_x64
@@ -254,7 +254,7 @@ stages:
additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:IsRPMBasedDistro=true'
linuxPortable: true
runTests: false
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_Linux_Portable_Rpm_Release_Arm64
@@ -267,7 +267,7 @@ stages:
additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:CLIBUILD_SKIP_TESTS=true /p:IsRPMBasedDistro=true'
linuxPortable: true
runTests: false
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
jobName: Build_LinuxPortable_Release_x64
@@ -278,14 +278,14 @@ stages:
# MacOS
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Darwin
jobName: Build_Release_x64
buildConfiguration: Release
buildArchitecture: x64
runTests: false
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Darwin
jobName: Build_Release_arm64
@@ -296,7 +296,7 @@ stages:
## Windows PGO Instrumentation builds
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Windows_NT
pgoInstrument: true
@@ -305,7 +305,7 @@ stages:
buildArchitecture: x64
additionalBuildParameters: '/p:PublishInternalAsset=true'
runTests: false
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Windows_NT
pgoInstrument: true
@@ -313,7 +313,7 @@ stages:
buildConfiguration: Release
buildArchitecture: x86
runTests: false
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Windows_NT
pgoInstrument: true
@@ -324,7 +324,7 @@ stages:
## Linux PGO Instrumentation builds
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
pgoInstrument: true
@@ -334,7 +334,7 @@ stages:
linuxPortable: true
runTests: false
- - template: eng/build.yml
+ - template: eng/build-pr.yml
parameters:
agentOs: Linux
pgoInstrument: true
diff --git a/NuGet.config b/NuGet.config
index 959b7d1df..c8bd4d7c7 100644
--- a/NuGet.config
+++ b/NuGet.config
@@ -23,7 +23,6 @@
-
diff --git a/eng/Signing.props b/eng/Signing.props
index 0d49f78d1..852eea4b0 100644
--- a/eng/Signing.props
+++ b/eng/Signing.props
@@ -39,12 +39,6 @@
-
-
-
-
-
-
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop
- 593444ad8328a5a933c006c6564469666f45ad2e
+ dda23bbe00c4a4bfdd3732783f0cce37c11a4f40
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop
- 593444ad8328a5a933c006c6564469666f45ad2e
+ dda23bbe00c4a4bfdd3732783f0cce37c11a4f40
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop
- 593444ad8328a5a933c006c6564469666f45ad2e
+ dda23bbe00c4a4bfdd3732783f0cce37c11a4f40
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop
- 593444ad8328a5a933c006c6564469666f45ad2e
+ dda23bbe00c4a4bfdd3732783f0cce37c11a4f40
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 1381d5ebd2ab1f292848d5b19b80cf71ac332508
+ 087e15321bb712ef6fe8b0ba6f8bd12facf92629
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 1381d5ebd2ab1f292848d5b19b80cf71ac332508
+ 087e15321bb712ef6fe8b0ba6f8bd12facf92629
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 1381d5ebd2ab1f292848d5b19b80cf71ac332508
+ 087e15321bb712ef6fe8b0ba6f8bd12facf92629
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 1381d5ebd2ab1f292848d5b19b80cf71ac332508
+ 087e15321bb712ef6fe8b0ba6f8bd12facf92629
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 1381d5ebd2ab1f292848d5b19b80cf71ac332508
+ 087e15321bb712ef6fe8b0ba6f8bd12facf92629
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 1381d5ebd2ab1f292848d5b19b80cf71ac332508
+ 087e15321bb712ef6fe8b0ba6f8bd12facf92629
@@ -52,55 +52,55 @@
https://github.com/dotnet/core-setup
7d57652f33493fa022125b7f63aad0d70c52d810
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 1381d5ebd2ab1f292848d5b19b80cf71ac332508
+ 087e15321bb712ef6fe8b0ba6f8bd12facf92629
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore
- da7e9894ce22ef8cc02e5acc56e95a6f8cf8f644
+ c9e3996173cec136bc2e9f3b4ec45f2a323b1d63
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore
- da7e9894ce22ef8cc02e5acc56e95a6f8cf8f644
+ c9e3996173cec136bc2e9f3b4ec45f2a323b1d63
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore
- da7e9894ce22ef8cc02e5acc56e95a6f8cf8f644
+ c9e3996173cec136bc2e9f3b4ec45f2a323b1d63
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore
- da7e9894ce22ef8cc02e5acc56e95a6f8cf8f644
+ c9e3996173cec136bc2e9f3b4ec45f2a323b1d63
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore
- da7e9894ce22ef8cc02e5acc56e95a6f8cf8f644
+ c9e3996173cec136bc2e9f3b4ec45f2a323b1d63
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore
- da7e9894ce22ef8cc02e5acc56e95a6f8cf8f644
+ c9e3996173cec136bc2e9f3b4ec45f2a323b1d63
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore
- da7e9894ce22ef8cc02e5acc56e95a6f8cf8f644
+ c9e3996173cec136bc2e9f3b4ec45f2a323b1d63
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-sdk
- 4dc36050406554319d333a791a3e1dd8262cfd1b
+ ecfb8a05aeaa93057ae0003d406280239b2c4c7b
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-sdk
- 4dc36050406554319d333a791a3e1dd8262cfd1b
+ ecfb8a05aeaa93057ae0003d406280239b2c4c7b
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-sdk
- 4dc36050406554319d333a791a3e1dd8262cfd1b
+ ecfb8a05aeaa93057ae0003d406280239b2c4c7b
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-sdk
- 4dc36050406554319d333a791a3e1dd8262cfd1b
+ ecfb8a05aeaa93057ae0003d406280239b2c4c7b
https://github.com/dotnet/test-templates
@@ -124,21 +124,21 @@
1e5f3603af2277910aad946736ee23283e7f3e16
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-winforms
- c58fa00bd16b92aab1d7fb2b93e71af6a7768139
+ 6c37c986b6c8fc0669b38a03a03445a75b8227a6
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-wpf
- 472140dd926227876848e48f41cfc9acb9275492
+ b5af29a8f41f880f38fd015c6bcb7aeb816fcef6
-
+
https://github.com/dotnet/fsharp
- 424e4b7cffb7656efd63f7a905a2498e39011104
+ fc5e9eda234e2b69aa479f4f83faddc31fdd4da7
-
+
https://github.com/dotnet/fsharp
- 424e4b7cffb7656efd63f7a905a2498e39011104
+ fc5e9eda234e2b69aa479f4f83faddc31fdd4da7
@@ -146,9 +146,9 @@
aa59400b11e1aeee2e8af48928dbd48748a8bef9
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 1381d5ebd2ab1f292848d5b19b80cf71ac332508
+ 087e15321bb712ef6fe8b0ba6f8bd12facf92629
https://github.com/dotnet/roslyn
@@ -159,7 +159,7 @@
https://github.com/dotnet/msbuild
b5265ef370a651f8c3458110b804e5cbf869eeb5
-
+
https://github.com/dotnet/msbuild
b5265ef370a651f8c3458110b804e5cbf869eeb5
@@ -173,18 +173,18 @@
https://github.com/Microsoft/ApplicationInsights-dotnet
53b80940842204f78708a538628288ff5d741a1d
-
+
https://github.com/dotnet/emsdk
- 2fc2ffd960930318f33fcaa690cbdbc55d72f52d
+ 71359b18c2d83c01a68bf155244a65962a7e8c8e
https://dev.azure.com/dnceng/internal/_git/dotnet-aspire
48e42f59d64d84b404e904996a9ed61f2a17a569
-
+
https://github.com/dotnet/emsdk
- 2fc2ffd960930318f33fcaa690cbdbc55d72f52d
+ 71359b18c2d83c01a68bf155244a65962a7e8c8e
@@ -198,9 +198,9 @@
5957c5c5f85f17c145e7fab4ece37ad6aafcded9
-
+
https://github.com/dotnet/source-build-externals
- 00fb7841c80b44262646e57bcfbe90a1b7bc3151
+ 4f2151df120194f0268944f1b723c14820738fc8
@@ -219,18 +219,18 @@
-
+
https://github.com/dotnet/arcade
- da98edc4c3ea539f109ea320672136ceb32591a7
+ e6f70c7dd528f05cd28cec2a179d58c22e91d9ac
-
+
https://github.com/dotnet/arcade
- da98edc4c3ea539f109ea320672136ceb32591a7
+ e6f70c7dd528f05cd28cec2a179d58c22e91d9ac
-
+
https://github.com/dotnet/arcade
- da98edc4c3ea539f109ea320672136ceb32591a7
+ e6f70c7dd528f05cd28cec2a179d58c22e91d9ac
https://github.com/dotnet/arcade-services
diff --git a/eng/Versions.props b/eng/Versions.props
index 9477bfda1..7692190fa 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -8,7 +8,7 @@
8
0
1
- 04
+ 07
$(VersionMajor).$(VersionMinor).$(VersionSDKMinor)$(VersionFeature)
$(VersionMajor).$(VersionMinor)
$(MajorMinorVersion).$(VersionSDKMinor)
@@ -27,7 +27,7 @@
32
17
$([MSBuild]::Add($(VersionFeature), 25))
- $([MSBuild]::Add($(VersionFeature), 14))
+ 19
<_NET70ILLinkPackVersion>7.0.100-1.23211.1
@@ -40,7 +40,7 @@
- 8.0.0-beta.24113.2
+ 8.0.0-beta.24266.3
@@ -48,22 +48,15 @@
- 8.0.2-servicing.24068.3
+ 8.0.5-servicing.24217.4
- 8.0.2-servicing.24068.6
+ 8.0.5-servicing.24217.2
-
-
- 1.0.2-beta4.22406.1
- 1.0.2-beta4.22406.1
- 1.1.0-rc.22558.1
- 1.1.0-rc.23410.2
1.1.0-rc.23410.2
- 1.1.0-rc.23410.2
1.1.0-rc.23410.2
@@ -72,22 +65,22 @@
- 8.0.2
- 8.0.2
- 8.0.2-servicing.24068.4
- 8.0.2-servicing.24068.4
- 8.0.2-servicing.24068.4
- 8.0.2-servicing.24068.4
- 8.0.2-servicing.24068.4
+ 8.0.5
+ 8.0.5
+ 8.0.5-servicing.24224.4
+ 8.0.5-servicing.24224.4
+ 8.0.5-servicing.24224.4
+ 8.0.5-servicing.24224.4
+ 8.0.5-servicing.24224.4
0.2.0
- 8.0.102
- 8.0.102-servicing.24069.16
- 8.0.102-servicing.24069.16
+ 8.0.105
+ 8.0.105-servicing.24224.15
+ 8.0.105-servicing.24224.15
$(MicrosoftNETSdkPackageVersion)
$(MicrosoftNETSdkPackageVersion)
$(MicrosoftNETSdkPackageVersion)
@@ -98,24 +91,24 @@
- 8.0.2-servicing.24067.11
+ 8.0.5-servicing.24216.15
- 8.0.2-servicing.24067.11
- 8.0.2-servicing.24067.11
- 8.0.2
- 8.0.2
- 8.0.2
- 8.0.2
+ 8.0.5-servicing.24216.15
+ 8.0.5-servicing.24216.15
+ 8.0.5
+ 8.0.5
+ 8.0.5
+ 8.0.5
2.1.0
- 8.0.2-servicing.24068.6
- 8.0.2-servicing.24068.6
- 8.0.2
- 8.0.2
+ 8.0.5-servicing.24217.5
+ 8.0.5-servicing.24217.5
+ 8.0.5
+ 8.0.5
@@ -156,26 +149,15 @@
true
true
$([MSBuild]::Subtract($(VersionFeature60), 1))
- $([MSBuild]::Subtract($(VersionFeature70), 1))
$(VersionFeature60)
- $(VersionFeature70)
$([MSBuild]::Subtract($(AspNetCoreTemplateFeature60), 1))
- $([MSBuild]::Subtract($(AspNetCoreTemplateFeature70), 1))
- 5.0.403
6.0.302
- 7.0.100
- 5.0.17
6.0.14
- 7.0.3
- 5.0.17-servicing.22215.4
- 5.0.17-servicing.22218.2
6.0.7-servicing.22322.3
6.0.7-servicing.22322.2
- 7.0.0-rtm.22518.7
- 7.0.0-rtm.22518.2
$(MicrosoftNETCoreAppRuntimePackageVersion)
@@ -183,7 +165,7 @@
- 3.14.0.8606
+ 3.14.1.8722
@@ -193,13 +175,6 @@
$(MicrosoftDotNetCommonItemTemplatesPackageVersion)
$(MicrosoftDotNetCommonItemTemplatesPackageVersion)
$(MicrosoftAspNetCoreAppRuntimePackageVersion)
-
- $(MicrosoftWinFormsProjectTemplates70PackageVersion)
- $(MicrosoftWPFProjectTemplates70PackageVersion)
- $(NUnit3DotNetNewTemplatePackageVersion)
- $(MicrosoftDotNetCommonItemTemplates70PackageVersion)
- $(MicrosoftDotNetCommonItemTemplates70PackageVersion)
- 7.0.$(AspNetCoreTemplateFeature70)
$(MicrosoftWinFormsProjectTemplates60PackageVersion)
$(MicrosoftWPFProjectTemplates60PackageVersion)
@@ -207,33 +182,6 @@
$(MicrosoftDotNetCommonItemTemplates60PackageVersion)
$(MicrosoftDotNetCommonItemTemplates60PackageVersion)
6.0.$(AspNetCoreTemplateFeature60)
-
- $(MicrosoftWinFormsProjectTemplates50PackageVersion)
- $(MicrosoftWPFProjectTemplates50PackageVersion)
- $(NUnit3DotNetNewTemplatePackageVersion)
- $(MicrosoftDotNetCommonItemTemplates50PackageVersion)
- $(MicrosoftDotNetCommonItemTemplates50PackageVersion)
- 5.0.17
-
- 4.8.1-servicing.19605.5
- 3.1.2-servicing.20066.4
- 1.7.2
- 3.1.27
- $(MicrosoftDotNetCommonItemTemplates31PackageVersion)
- 3.1.32
- 3.2.1
-
- 4.8.0-rc2.19462.10
- 3.0.0
- 1.6.5
- 2.0.0-preview8.19373.1
- $(MicrosoftDotNetCommonItemTemplates30PackageVersion)
- 3.0.3
-
- 1.5.3
- 1.0.2-beta3
- $(MicrosoftDotNetCommonItemTemplates21PackageVersion)
- 2.1.34
@@ -254,7 +202,7 @@
14.0.8478
17.0.8478
- 8.0.2
+ 8.0.5
$(MicrosoftNETWorkloadEmscriptenCurrentManifest80100PackageVersion)
8.0.100$([System.Text.RegularExpressions.Regex]::Match($(EmscriptenWorkloadManifestVersion), `-rtm|-[A-z]*\.*\d*`))
diff --git a/eng/build-pr.yml b/eng/build-pr.yml
new file mode 100644
index 000000000..831d96781
--- /dev/null
+++ b/eng/build-pr.yml
@@ -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.vs2019.amd64.open
+ ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ name: $(DncEngInternalBuildPool)
+ demands: ImageOverride -equals windows.vs2019.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
+
+ variables:
+ # Test 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()
diff --git a/eng/build.yml b/eng/build.yml
index ea389797c..4f947ea8f 100644
--- a/eng/build.yml
+++ b/eng/build.yml
@@ -1,9 +1,9 @@
parameters:
- # Agent OS identifier and used as job name
+# Agent OS identifier and used as job name
- name: agentOs
type: string
- # Job name
+# Job name
- name: jobName
type: string
@@ -12,7 +12,7 @@ parameters:
type: string
default: ''
- # Job timeout
+# Job timeout
- name: timeoutInMinutes
type: number
default: 180
@@ -69,36 +69,42 @@ parameters:
default: false
jobs:
-- template: common/templates/job/job.yml
+- template: common/templates-official/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
+
+ # 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.vs2019.amd64.open
+ image: 1es-windows-2019-open
+ os: windows
${{ if eq(variables['System.TeamProject'], 'internal') }}:
name: $(DncEngInternalBuildPool)
- demands: ImageOverride -equals windows.vs2019.amd64
+ image: 1es-windows-2019
+ os: windows
${{ if eq(parameters.agentOs, 'Linux') }}:
pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
name: $(DncEngPublicBuildPool)
- demands: ImageOverride -equals Build.Ubuntu.1804.Amd64.Open
+ image: 1es-ubuntu-2004-open
+ os: linux
${{ if eq(variables['System.TeamProject'], 'internal') }}:
name: $(DncEngInternalBuildPool)
- demands: ImageOverride -equals Build.Ubuntu.1804.Amd64
+ image: 1es-ubuntu-2004
+ os: linux
container: ${{ parameters.container }}
${{ if eq(parameters.agentOs, 'Darwin') }}:
pool:
- vmImage: 'macOS-latest'
+ name: Azure Pipelines
+ image: macOS-latest
+ os: macOS
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
${{ if parameters.isBuiltFromVmr }}:
@@ -111,8 +117,8 @@ jobs:
workspace:
clean: all
-# Test parameters
variables:
+ # Test variables
- ${{ if eq(parameters.agentOs, 'Windows_NT') }}:
- _PackArg: '-pack'
- ${{ if parameters.runTests }}:
@@ -168,7 +174,7 @@ jobs:
/p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines)
$(_PgoInstrument)
- - template: /eng/common/templates/variables/pool-providers.yml
+ - template: /eng/common/templates-official/variables/pool-providers.yml
steps:
- checkout: self
@@ -245,13 +251,13 @@ jobs:
inputs:
SourceFolder: '$(installerRoot)/artifacts'
Contents: |
- log/${{ parameters.buildConfiguration }}/**/*
- TestResults/${{ parameters.buildConfiguration }}/**/*
+ log/${{ parameters.buildConfiguration }}/**/*
+ TestResults/${{ parameters.buildConfiguration }}/**/*
TargetFolder: '$(Build.ArtifactStagingDirectory)'
continueOnError: true
condition: always()
- - task: PublishBuildArtifacts@1
+ - task: 1ES.PublishBuildArtifacts@1
displayName: Publish Logs to VSTS
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1
index 6c65e8192..efa2fd72b 100644
--- a/eng/common/SetupNugetSources.ps1
+++ b/eng/common/SetupNugetSources.ps1
@@ -35,7 +35,7 @@ Set-StrictMode -Version 2.0
. $PSScriptRoot\tools.ps1
# Add source entry to PackageSources
-function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $Password) {
+function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) {
$packageSource = $sources.SelectSingleNode("add[@key='$SourceName']")
if ($packageSource -eq $null)
@@ -48,12 +48,11 @@ function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Usern
else {
Write-Host "Package source $SourceName already present."
}
-
- AddCredential -Creds $creds -Source $SourceName -Username $Username -Password $Password
+ AddCredential -Creds $creds -Source $SourceName -Username $Username -pwd $pwd
}
# Add a credential node for the specified source
-function AddCredential($creds, $source, $username, $password) {
+function AddCredential($creds, $source, $username, $pwd) {
# Looks for credential configuration for the given SourceName. Create it if none is found.
$sourceElement = $creds.SelectSingleNode($Source)
if ($sourceElement -eq $null)
@@ -82,17 +81,18 @@ function AddCredential($creds, $source, $username, $password) {
$passwordElement.SetAttribute("key", "ClearTextPassword")
$sourceElement.AppendChild($passwordElement) | Out-Null
}
- $passwordElement.SetAttribute("value", $Password)
+
+ $passwordElement.SetAttribute("value", $pwd)
}
-function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $Password) {
+function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $pwd) {
$maestroPrivateSources = $Sources.SelectNodes("add[contains(@key,'darc-int')]")
Write-Host "Inserting credentials for $($maestroPrivateSources.Count) Maestro's private feeds."
ForEach ($PackageSource in $maestroPrivateSources) {
Write-Host "`tInserting credential for Maestro's feed:" $PackageSource.Key
- AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -Password $Password
+ AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -pwd $pwd
}
}
@@ -144,13 +144,13 @@ if ($disabledSources -ne $null) {
$userName = "dn-bot"
# Insert credential nodes for Maestro's private feeds
-InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Username $userName -Password $Password
+InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Username $userName -pwd $Password
# 3.1 uses a different feed url format so it's handled differently here
$dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']")
if ($dotnet31Source -ne $null) {
- AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username $userName -Password $Password
- AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -Password $Password
+ AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password
+ AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password
}
$dotnetVersions = @('5','6','7','8')
@@ -159,9 +159,9 @@ foreach ($dotnetVersion in $dotnetVersions) {
$feedPrefix = "dotnet" + $dotnetVersion;
$dotnetSource = $sources.SelectSingleNode("add[@key='$feedPrefix']")
if ($dotnetSource -ne $null) {
- AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/v2" -Creds $creds -Username $userName -Password $Password
- AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/v2" -Creds $creds -Username $userName -Password $Password
+ AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password
+ AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password
}
}
-$doc.Save($filename)
+$doc.Save($filename)
\ No newline at end of file
diff --git a/eng/common/native/init-compiler.sh b/eng/common/native/init-compiler.sh
index f5c1ec7ea..2d5660642 100644
--- a/eng/common/native/init-compiler.sh
+++ b/eng/common/native/init-compiler.sh
@@ -63,7 +63,7 @@ if [ -z "$CLR_CC" ]; then
# Set default versions
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.
- 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
for version in $versions; do
diff --git a/eng/common/templates-official/job/job.yml b/eng/common/templates-official/job/job.yml
new file mode 100644
index 000000000..1f035fee7
--- /dev/null
+++ b/eng/common/templates-official/job/job.yml
@@ -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, 'production') }}
+ 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
\ No newline at end of file
diff --git a/eng/common/templates-official/job/onelocbuild.yml b/eng/common/templates-official/job/onelocbuild.yml
new file mode 100644
index 000000000..52b4d05d3
--- /dev/null
+++ b/eng/common/templates-official/job/onelocbuild.yml
@@ -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 }}
\ No newline at end of file
diff --git a/eng/common/templates-official/job/publish-build-assets.yml b/eng/common/templates-official/job/publish-build-assets.yml
new file mode 100644
index 000000000..589ac80a1
--- /dev/null
+++ b/eng/common/templates-official/job/publish-build-assets.yml
@@ -0,0 +1,155 @@
+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
+ - ${{ if eq(parameters.publishAssetsImmediately, 'true') }}:
+ - 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')) }}:
+ - 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-prod.westus2.cloudapp.azure.com
+ /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'
diff --git a/eng/common/templates-official/job/source-build.yml b/eng/common/templates-official/job/source-build.yml
new file mode 100644
index 000000000..f193dfbe2
--- /dev/null
+++ b/eng/common/templates-official/job/source-build.yml
@@ -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.Open
+
+ ${{ 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 }}
diff --git a/eng/common/templates-official/job/source-index-stage1.yml b/eng/common/templates-official/job/source-index-stage1.yml
new file mode 100644
index 000000000..43ee0c202
--- /dev/null
+++ b/eng/common/templates-official/job/source-index-stage1.yml
@@ -0,0 +1,85 @@
+parameters:
+ runAsPublic: false
+ sourceIndexUploadPackageVersion: 2.0.0-20240502.12
+ sourceIndexProcessBinlogPackageVersion: 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: SourceIndexUploadPackageVersion
+ value: ${{ parameters.sourceIndexUploadPackageVersion }}
+ - name: SourceIndexProcessBinlogPackageVersion
+ value: ${{ parameters.sourceIndexProcessBinlogPackageVersion }}
+ - name: SourceIndexPackageSource
+ value: ${{ parameters.sourceIndexPackageSource }}
+ - name: BinlogPath
+ value: ${{ parameters.binlogPath }}
+ - template: /eng/common/templates/variables/pool-providers.yml
+
+ ${{ if ne(parameters.pool, '') }}:
+ pool: ${{ parameters.pool }}
+ ${{ if eq(parameters.pool, '') }}:
+ pool:
+ ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ name: $(DncEngPublicBuildPool)
+ demands: ImageOverride -equals windows.vs2019.amd64.open
+ ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ name: $(DncEngInternalBuildPool)
+ demands: ImageOverride -equals windows.vs2019.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 $(sourceIndexProcessBinlogPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools
+ $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version $(sourceIndexUploadPackageVersion) --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')) }}:
+ - task: AzureCLI@2
+ displayName: Get stage 1 auth token
+ inputs:
+ azureSubscription: 'SourceDotNet Stage1 Publish'
+ addSpnToEnvironment: true
+ scriptType: 'ps'
+ scriptLocation: 'inlineScript'
+ inlineScript: |
+ echo "##vso[task.setvariable variable=ARM_CLIENT_ID]$env:servicePrincipalId"
+ echo "##vso[task.setvariable variable=ARM_ID_TOKEN]$env:idToken"
+ echo "##vso[task.setvariable variable=ARM_TENANT_ID]$env:tenantId"
+
+ - script: |
+ echo "Client ID: $(ARM_CLIENT_ID)"
+ echo "ID Token: $(ARM_ID_TOKEN)"
+ echo "Tenant ID: $(ARM_TENANT_ID)"
+ az login --service-principal -u $(ARM_CLIENT_ID) --tenant $(ARM_TENANT_ID) --allow-no-subscriptions --federated-token $(ARM_ID_TOKEN)
+ displayName: "Login to Azure"
+
+ - script: $(Agent.TempDirectory)/.source-index/tools/UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) -s netsourceindexstage1 -b stage1
+ displayName: Upload stage1 artifacts to source index
\ No newline at end of file
diff --git a/eng/common/templates-official/jobs/codeql-build.yml b/eng/common/templates-official/jobs/codeql-build.yml
new file mode 100644
index 000000000..b68d3c2f3
--- /dev/null
+++ b/eng/common/templates-official/jobs/codeql-build.yml
@@ -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 }}
+
diff --git a/eng/common/templates-official/jobs/jobs.yml b/eng/common/templates-official/jobs/jobs.yml
new file mode 100644
index 000000000..857a0f8ba
--- /dev/null
+++ b/eng/common/templates-official/jobs/jobs.yml
@@ -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 }}
diff --git a/eng/common/templates-official/jobs/source-build.yml b/eng/common/templates-official/jobs/source-build.yml
new file mode 100644
index 000000000..08e5db9bb
--- /dev/null
+++ b/eng/common/templates-official/jobs/source-build.yml
@@ -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 }}
diff --git a/eng/common/templates-official/post-build/common-variables.yml b/eng/common/templates-official/post-build/common-variables.yml
new file mode 100644
index 000000000..c24193acf
--- /dev/null
+++ b/eng/common/templates-official/post-build/common-variables.yml
@@ -0,0 +1,22 @@
+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-prod.westus2.cloudapp.azure.com"
+ - name: MaestroApiAccessToken
+ value: $(MaestroAccessToken)
+ - name: MaestroApiVersion
+ value: "2020-02-20"
+
+ - name: SourceLinkCLIVersion
+ value: 3.0.0
+ - name: SymbolToolVersion
+ value: 1.0.1
+
+ - name: runCodesignValidationInjection
+ value: false
diff --git a/eng/common/templates-official/post-build/post-build.yml b/eng/common/templates-official/post-build/post-build.yml
new file mode 100644
index 000000000..da1f40958
--- /dev/null
+++ b/eng/common/templates-official/post-build/post-build.yml
@@ -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 }}'
diff --git a/eng/common/templates-official/post-build/setup-maestro-vars.yml b/eng/common/templates-official/post-build/setup-maestro-vars.yml
new file mode 100644
index 000000000..0c87f149a
--- /dev/null
+++ b/eng/common/templates-official/post-build/setup-maestro-vars.yml
@@ -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 }}
diff --git a/eng/common/templates-official/post-build/trigger-subscription.yml b/eng/common/templates-official/post-build/trigger-subscription.yml
new file mode 100644
index 000000000..da669030d
--- /dev/null
+++ b/eng/common/templates-official/post-build/trigger-subscription.yml
@@ -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)
diff --git a/eng/common/templates-official/steps/add-build-to-channel.yml b/eng/common/templates-official/steps/add-build-to-channel.yml
new file mode 100644
index 000000000..f67a210d6
--- /dev/null
+++ b/eng/common/templates-official/steps/add-build-to-channel.yml
@@ -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)
diff --git a/eng/common/templates-official/steps/build-reason.yml b/eng/common/templates-official/steps/build-reason.yml
new file mode 100644
index 000000000..eba58109b
--- /dev/null
+++ b/eng/common/templates-official/steps/build-reason.yml
@@ -0,0 +1,12 @@
+# build-reason.yml
+# Description: runs steps if build.reason condition is valid. conditions is a string of valid build reasons
+# to include steps (',' separated).
+parameters:
+ conditions: ''
+ steps: []
+
+steps:
+ - ${{ if and( not(startsWith(parameters.conditions, 'not')), contains(parameters.conditions, variables['build.reason'])) }}:
+ - ${{ parameters.steps }}
+ - ${{ if and( startsWith(parameters.conditions, 'not'), not(contains(parameters.conditions, variables['build.reason']))) }}:
+ - ${{ parameters.steps }}
diff --git a/eng/common/templates-official/steps/component-governance.yml b/eng/common/templates-official/steps/component-governance.yml
new file mode 100644
index 000000000..cbba05967
--- /dev/null
+++ b/eng/common/templates-official/steps/component-governance.yml
@@ -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 }}
\ No newline at end of file
diff --git a/eng/common/templates-official/steps/execute-codeql.yml b/eng/common/templates-official/steps/execute-codeql.yml
new file mode 100644
index 000000000..9b4a5ffa3
--- /dev/null
+++ b/eng/common/templates-official/steps/execute-codeql.yml
@@ -0,0 +1,32 @@
+parameters:
+ # Language that should be analyzed. Defaults to csharp
+ language: csharp
+ # Build Commands
+ buildCommands: ''
+ overrideParameters: '' # Optional: to override values for parameters.
+ additionalParameters: '' # Optional: parameters that need user specific values eg: '-SourceToolsList @("abc","def") -ArtifactToolsList @("ghi","jkl")'
+ # Optional: if specified, restore and use this version of Guardian instead of the default.
+ overrideGuardianVersion: ''
+ # Optional: if true, publish the '.gdn' folder as a pipeline artifact. This can help with in-depth
+ # diagnosis of problems with specific tool configurations.
+ publishGuardianDirectoryToPipeline: false
+ # The script to run to execute all SDL tools. Use this if you want to use a script to define SDL
+ # parameters rather than relying on YAML. It may be better to use a local script, because you can
+ # reproduce results locally without piecing together a command based on the YAML.
+ executeAllSdlToolsScript: 'eng/common/sdl/execute-all-sdl-tools.ps1'
+ # There is some sort of bug (has been reported) in Azure DevOps where if this parameter is named
+ # 'continueOnError', the parameter value is not correctly picked up.
+ # This can also be remedied by the caller (post-build.yml) if it does not use a nested parameter
+ # optional: determines whether to continue the build if the step errors;
+ sdlContinueOnError: false
+
+steps:
+- template: /eng/common/templates-official/steps/execute-sdl.yml
+ parameters:
+ overrideGuardianVersion: ${{ parameters.overrideGuardianVersion }}
+ executeAllSdlToolsScript: ${{ parameters.executeAllSdlToolsScript }}
+ overrideParameters: ${{ parameters.overrideParameters }}
+ additionalParameters: '${{ parameters.additionalParameters }}
+ -CodeQLAdditionalRunConfigParams @("BuildCommands < ${{ parameters.buildCommands }}", "Language < ${{ parameters.language }}")'
+ publishGuardianDirectoryToPipeline: ${{ parameters.publishGuardianDirectoryToPipeline }}
+ sdlContinueOnError: ${{ parameters.sdlContinueOnError }}
\ No newline at end of file
diff --git a/eng/common/templates-official/steps/execute-sdl.yml b/eng/common/templates-official/steps/execute-sdl.yml
new file mode 100644
index 000000000..07426fde0
--- /dev/null
+++ b/eng/common/templates-official/steps/execute-sdl.yml
@@ -0,0 +1,88 @@
+parameters:
+ overrideGuardianVersion: ''
+ executeAllSdlToolsScript: ''
+ overrideParameters: ''
+ additionalParameters: ''
+ publishGuardianDirectoryToPipeline: false
+ sdlContinueOnError: false
+ condition: ''
+
+steps:
+- task: NuGetAuthenticate@1
+ inputs:
+ nuGetServiceConnections: GuardianConnect
+
+- task: NuGetToolInstaller@1
+ displayName: 'Install NuGet.exe'
+
+- ${{ if ne(parameters.overrideGuardianVersion, '') }}:
+ - pwsh: |
+ Set-Location -Path $(Build.SourcesDirectory)\eng\common\sdl
+ . .\sdl.ps1
+ $guardianCliLocation = Install-Gdn -Path $(Build.SourcesDirectory)\.artifacts -Version ${{ parameters.overrideGuardianVersion }}
+ Write-Host "##vso[task.setvariable variable=GuardianCliLocation]$guardianCliLocation"
+ displayName: Install Guardian (Overridden)
+
+- ${{ if eq(parameters.overrideGuardianVersion, '') }}:
+ - pwsh: |
+ Set-Location -Path $(Build.SourcesDirectory)\eng\common\sdl
+ . .\sdl.ps1
+ $guardianCliLocation = Install-Gdn -Path $(Build.SourcesDirectory)\.artifacts
+ Write-Host "##vso[task.setvariable variable=GuardianCliLocation]$guardianCliLocation"
+ displayName: Install Guardian
+
+- ${{ if ne(parameters.overrideParameters, '') }}:
+ - powershell: ${{ parameters.executeAllSdlToolsScript }} ${{ parameters.overrideParameters }}
+ displayName: Execute SDL (Overridden)
+ continueOnError: ${{ parameters.sdlContinueOnError }}
+ condition: ${{ parameters.condition }}
+
+- ${{ if eq(parameters.overrideParameters, '') }}:
+ - powershell: ${{ parameters.executeAllSdlToolsScript }}
+ -GuardianCliLocation $(GuardianCliLocation)
+ -NugetPackageDirectory $(Build.SourcesDirectory)\.packages
+ -AzureDevOpsAccessToken $(dn-bot-dotnet-build-rw-code-rw)
+ ${{ parameters.additionalParameters }}
+ displayName: Execute SDL
+ continueOnError: ${{ parameters.sdlContinueOnError }}
+ condition: ${{ parameters.condition }}
+
+- ${{ if ne(parameters.publishGuardianDirectoryToPipeline, 'false') }}:
+ # We want to publish the Guardian results and configuration for easy diagnosis. However, the
+ # '.gdn' dir is a mix of configuration, results, extracted dependencies, and Guardian default
+ # tooling files. Some of these files are large and aren't useful during an investigation, so
+ # exclude them by simply deleting them before publishing. (As of writing, there is no documented
+ # way to selectively exclude a dir from the pipeline artifact publish task.)
+ - task: DeleteFiles@1
+ displayName: Delete Guardian dependencies to avoid uploading
+ inputs:
+ SourceFolder: $(Agent.BuildDirectory)/.gdn
+ Contents: |
+ c
+ i
+ condition: succeededOrFailed()
+
+ - publish: $(Agent.BuildDirectory)/.gdn
+ artifact: GuardianConfiguration
+ displayName: Publish GuardianConfiguration
+ condition: succeededOrFailed()
+
+ # Publish the SARIF files in a container named CodeAnalysisLogs to enable integration
+ # with the "SARIF SAST Scans Tab" Azure DevOps extension
+ - task: CopyFiles@2
+ displayName: Copy SARIF files
+ inputs:
+ flattenFolders: true
+ sourceFolder: $(Agent.BuildDirectory)/.gdn/rc/
+ contents: '**/*.sarif'
+ targetFolder: $(Build.SourcesDirectory)/CodeAnalysisLogs
+ condition: succeededOrFailed()
+
+ # Use PublishBuildArtifacts because the SARIF extension only checks this case
+ # see microsoft/sarif-azuredevops-extension#4
+ - task: PublishBuildArtifacts@1
+ displayName: Publish SARIF files to CodeAnalysisLogs container
+ inputs:
+ pathToPublish: $(Build.SourcesDirectory)/CodeAnalysisLogs
+ artifactName: CodeAnalysisLogs
+ condition: succeededOrFailed()
\ No newline at end of file
diff --git a/eng/common/templates-official/steps/generate-sbom.yml b/eng/common/templates-official/steps/generate-sbom.yml
new file mode 100644
index 000000000..1bf43bf80
--- /dev/null
+++ b/eng/common/templates-official/steps/generate-sbom.yml
@@ -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: 8.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)
+
diff --git a/eng/common/templates-official/steps/publish-logs.yml b/eng/common/templates-official/steps/publish-logs.yml
new file mode 100644
index 000000000..04012fed1
--- /dev/null
+++ b/eng/common/templates-official/steps/publish-logs.yml
@@ -0,0 +1,23 @@
+parameters:
+ StageLabel: ''
+ JobLabel: ''
+
+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: 1ES.PublishBuildArtifacts@1
+ displayName: Publish Logs
+ inputs:
+ PathtoPublish: '$(Build.SourcesDirectory)/PostBuildLogs'
+ PublishLocation: Container
+ ArtifactName: PostBuildLogs
+ continueOnError: true
+ condition: always()
diff --git a/eng/common/templates-official/steps/retain-build.yml b/eng/common/templates-official/steps/retain-build.yml
new file mode 100644
index 000000000..83d97a26a
--- /dev/null
+++ b/eng/common/templates-official/steps/retain-build.yml
@@ -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/ 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)
\ No newline at end of file
diff --git a/eng/common/templates-official/steps/send-to-helix.yml b/eng/common/templates-official/steps/send-to-helix.yml
new file mode 100644
index 000000000..3eb7e2d5f
--- /dev/null
+++ b/eng/common/templates-official/steps/send-to-helix.yml
@@ -0,0 +1,91 @@
+# 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
+ 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\eng\common\helixpublish.proj /restore /p:TreatWarningsAsErrors=false /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/eng/common/helixpublish.proj /restore /p:TreatWarningsAsErrors=false /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 }}
diff --git a/eng/common/templates-official/steps/source-build.yml b/eng/common/templates-official/steps/source-build.yml
new file mode 100644
index 000000000..829f17c34
--- /dev/null
+++ b/eng/common/templates-official/steps/source-build.yml
@@ -0,0 +1,129 @@
+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: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/source-build/self/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/source-build/self/src/artifacts/obj/source-built-upstream-cache'
diff --git a/eng/common/templates-official/variables/pool-providers.yml b/eng/common/templates-official/variables/pool-providers.yml
new file mode 100644
index 000000000..1f308b24e
--- /dev/null
+++ b/eng/common/templates-official/variables/pool-providers.yml
@@ -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'
+ )
+ ]
\ No newline at end of file
diff --git a/eng/common/templates-official/variables/sdl-variables.yml b/eng/common/templates-official/variables/sdl-variables.yml
new file mode 100644
index 000000000..dbdd66d4a
--- /dev/null
+++ b/eng/common/templates-official/variables/sdl-variables.yml
@@ -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
\ No newline at end of file
diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml
index e24ca2f46..8ec5c4f2d 100644
--- a/eng/common/templates/job/job.yml
+++ b/eng/common/templates/job/job.yml
@@ -15,6 +15,7 @@ parameters:
timeoutInMinutes: ''
variables: []
workspace: ''
+ templateContext: ''
# Job base template specific parameters
# See schema documentation - https://github.com/dotnet/arcade/blob/master/Documentation/AzureDevOps/TemplateSchema.md
@@ -68,6 +69,9 @@ jobs:
${{ if ne(parameters.timeoutInMinutes, '') }}:
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
+ ${{ if ne(parameters.templateContext, '') }}:
+ templateContext: ${{ parameters.templateContext }}
+
variables:
- ${{ if ne(parameters.enableTelemetry, 'false') }}:
- name: DOTNET_CLI_TELEMETRY_PROFILE
diff --git a/eng/common/templates/job/source-index-stage1.yml b/eng/common/templates/job/source-index-stage1.yml
index b98202aa0..43ee0c202 100644
--- a/eng/common/templates/job/source-index-stage1.yml
+++ b/eng/common/templates/job/source-index-stage1.yml
@@ -1,6 +1,7 @@
parameters:
runAsPublic: false
- sourceIndexPackageVersion: 1.0.1-20230228.2
+ sourceIndexUploadPackageVersion: 2.0.0-20240502.12
+ sourceIndexProcessBinlogPackageVersion: 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: []
@@ -14,14 +15,14 @@ jobs:
dependsOn: ${{ parameters.dependsOn }}
condition: ${{ parameters.condition }}
variables:
- - name: SourceIndexPackageVersion
- value: ${{ parameters.sourceIndexPackageVersion }}
+ - name: SourceIndexUploadPackageVersion
+ value: ${{ parameters.sourceIndexUploadPackageVersion }}
+ - name: SourceIndexProcessBinlogPackageVersion
+ value: ${{ parameters.sourceIndexProcessBinlogPackageVersion }}
- 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/variables/pool-providers.yml
${{ if ne(parameters.pool, '') }}:
@@ -40,16 +41,16 @@ jobs:
- ${{ preStep }}
- task: UseDotNet@2
- displayName: Use .NET Core SDK 6
+ displayName: Use .NET 8 SDK
inputs:
packageType: sdk
- version: 6.0.x
+ 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
+ $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version $(sourceIndexProcessBinlogPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools
+ $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version $(sourceIndexUploadPackageVersion) --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)
@@ -61,7 +62,24 @@ jobs:
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)
+ - task: AzureCLI@2
+ displayName: Get stage 1 auth token
+ inputs:
+ azureSubscription: 'SourceDotNet Stage1 Publish'
+ addSpnToEnvironment: true
+ scriptType: 'ps'
+ scriptLocation: 'inlineScript'
+ inlineScript: |
+ echo "##vso[task.setvariable variable=ARM_CLIENT_ID]$env:servicePrincipalId"
+ echo "##vso[task.setvariable variable=ARM_ID_TOKEN]$env:idToken"
+ echo "##vso[task.setvariable variable=ARM_TENANT_ID]$env:tenantId"
+
+ - script: |
+ echo "Client ID: $(ARM_CLIENT_ID)"
+ echo "ID Token: $(ARM_ID_TOKEN)"
+ echo "Tenant ID: $(ARM_TENANT_ID)"
+ az login --service-principal -u $(ARM_CLIENT_ID) --tenant $(ARM_TENANT_ID) --allow-no-subscriptions --federated-token $(ARM_ID_TOKEN)
+ displayName: "Login to Azure"
+
+ - script: $(Agent.TempDirectory)/.source-index/tools/UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) -s netsourceindexstage1 -b stage1
+ displayName: Upload stage1 artifacts to source index
\ No newline at end of file
diff --git a/eng/common/templates/steps/component-governance.yml b/eng/common/templates/steps/component-governance.yml
index 0ecec47b0..cbba05967 100644
--- a/eng/common/templates/steps/component-governance.yml
+++ b/eng/common/templates/steps/component-governance.yml
@@ -4,7 +4,7 @@ parameters:
steps:
- ${{ if eq(parameters.disableComponentGovernance, 'true') }}:
- - script: "echo ##vso[task.setvariable variable=skipComponentGovernanceDetection]true"
+ - script: echo "##vso[task.setvariable variable=skipComponentGovernanceDetection]true"
displayName: Set skipComponentGovernanceDetection variable
- ${{ if ne(parameters.disableComponentGovernance, 'true') }}:
- task: ComponentGovernanceComponentDetection@0
diff --git a/eng/common/templates/steps/generate-sbom.yml b/eng/common/templates/steps/generate-sbom.yml
index a06373f38..2b21eae42 100644
--- a/eng/common/templates/steps/generate-sbom.yml
+++ b/eng/common/templates/steps/generate-sbom.yml
@@ -5,7 +5,7 @@
# IgnoreDirectories - Directories to ignore for SBOM generation. This will be passed through to the CG component detector.
parameters:
- PackageVersion: 7.0.0
+ PackageVersion: 8.0.0
BuildDropPath: '$(Build.SourcesDirectory)/artifacts'
PackageName: '.NET'
ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom
diff --git a/eng/install-scancode.sh b/eng/install-scancode.sh
index cec368af9..049b749c2 100755
--- a/eng/install-scancode.sh
+++ b/eng/install-scancode.sh
@@ -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
# 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"
python3 -m venv $pyEnvPath
diff --git a/eng/pipelines/source-build-sdk-diff-tests.yml b/eng/pipelines/source-build-sdk-diff-tests.yml
deleted file mode 100644
index 47d1c4c89..000000000
--- a/eng/pipelines/source-build-sdk-diff-tests.yml
+++ /dev/null
@@ -1,64 +0,0 @@
-schedules:
-- cron: "0 11 * * 1-5"
- displayName: Run on weekdays at 11am UTC
- branches:
- include:
- - main
- - release/*.0.1xx*
- - internal/release/*.0.1xx*
-
-pr: none
-trigger: none
-
-pool:
- name: NetCore1ESPool-Svc-Internal
- demands: ImageOverride -equals 1es-ubuntu-2004
-
-parameters:
-- name: dotnetDotnetRunId
- displayName: 'Specific dotnet-dotnet run ID number (e.g `2108850`)'
- type: string
- default: ' '
-
-jobs:
-- template: templates/jobs/sdk-diff-tests.yml
- parameters:
- buildName: CentOSStream8_Offline_MsftSdk
- targetRid: centos.8-x64
- architecture: x64
- dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }}
-
-- template: templates/jobs/sdk-diff-tests.yml
- parameters:
- buildName: CentOSStream9_Offline_MsftSdk
- targetRid: centos.9-x64
- architecture: x64
- dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }}
-
-- template: templates/jobs/sdk-diff-tests.yml
- parameters:
- buildName: Alpine317_Offline_MsftSdk
- targetRid: alpine.3.17-x64
- architecture: x64
- dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }}
-
-- template: templates/jobs/sdk-diff-tests.yml
- parameters:
- buildName: Fedora38_Offline_MsftSdk
- targetRid: fedora.38-x64
- architecture: x64
- dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }}
-
-- template: templates/jobs/sdk-diff-tests.yml
- parameters:
- buildName: Ubuntu2204_Offline_MsftSdk
- targetRid: ubuntu.22.04-x64
- architecture: x64
- dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }}
-
-- template: templates/jobs/sdk-diff-tests.yml
- parameters:
- buildName: Ubuntu2204Arm64_Offline_MsftSdk
- targetRid: ubuntu.22.04-arm64
- architecture: arm64
- dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }}
diff --git a/eng/pipelines/templates/jobs/vmr-build.yml b/eng/pipelines/templates/jobs/vmr-build.yml
index 9c5e58dbe..542320fd7 100644
--- a/eng/pipelines/templates/jobs/vmr-build.yml
+++ b/eng/pipelines/templates/jobs/vmr-build.yml
@@ -67,7 +67,10 @@ jobs:
condition: succeededOrFailed()
dependsOn: ${{ parameters.reuseBuildArtifactsFrom }}_${{ parameters.architecture }}
variables:
- - template: /eng/common/templates/variables/pool-providers.yml
+ - ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ - template: /eng/common/templates/variables/pool-providers.yml
+ - ${{ else }}:
+ - template: /eng/common/templates-official/variables/pool-providers.yml
- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- 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'))) }}:
@@ -87,8 +90,21 @@ jobs:
- name: sourcesPath
value: ${{ parameters.vmrPath }}
+ templateContext:
+ outputs:
+ - output: pipelineArtifact
+ displayName: 'Publish BuildLogs'
+ condition: succeededOrFailed()
+ targetPath: '$(Build.StagingDirectory)/BuildLogs'
+ artifactName: $(Agent.JobName)_BuildLogs_Attempt$(System.JobAttempt)
+ - output: pipelineArtifact
+ displayName: 'Publish Artifacts'
+ condition: succeededOrFailed()
+ targetPath: '${{ variables.sourcesPath }}/artifacts/${{ parameters.architecture }}/Release/'
+ artifactName: $(Agent.JobName)_Artifacts
+
steps:
- - template: ../steps/vmr-prepare.yml
+ - template: ../steps/vmr-prepare.yml@self
parameters:
${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
vmrBranch: $(System.PullRequest.TargetBranch)
@@ -99,7 +115,7 @@ jobs:
# Synchronize new content in the VMR during PRs (we expect this to come
- ${{ if and(not(parameters.isBuiltFromVmr), eq(variables['Build.Reason'], 'PullRequest')) }}:
- - template: ../steps/vmr-pull-updates.yml
+ - template: ../steps/vmr-pull-updates.yml@self
parameters:
vmrPath: ${{ parameters.vmrPath }}
vmrBranch: ${{ parameters.vmrBranch }}
@@ -148,8 +164,8 @@ jobs:
notFoundMessage="No source-built SDK found to download..."
echo "Looking for source-built SDK to download..."
- archiveUrlLine=`grep -m 1 "" "$packageVersionsPath" || :`
- urlPattern="(.*)"
+ archiveUrlLine=`grep -m 1 "" "$packageVersionsPath" || :`
+ urlPattern="(.*)"
if [[ $archiveUrlLine =~ $urlPattern ]]; then
archiveUrl="${BASH_REMATCH[1]}"
@@ -251,11 +267,18 @@ jobs:
continueOnError: true
condition: succeededOrFailed()
- - publish: '$(Build.StagingDirectory)/BuildLogs'
- artifact: $(Agent.JobName)_BuildLogs_Attempt$(System.JobAttempt)
- displayName: Publish BuildLogs
- continueOnError: true
- condition: succeededOrFailed()
+ - ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ - publish: '$(Build.StagingDirectory)/BuildLogs'
+ artifact: $(Agent.JobName)_BuildLogs_Attempt$(System.JobAttempt)
+ displayName: Publish BuildLogs
+ continueOnError: true
+ condition: succeededOrFailed()
+
+ - publish: '${{ variables.sourcesPath }}/artifacts/${{ parameters.architecture }}/Release/'
+ artifact: $(Agent.JobName)_Artifacts
+ displayName: Publish Artifacts
+ condition: succeededOrFailed()
+ continueOnError: true
- task: PublishTestResults@2
displayName: Publish Test Results
@@ -268,9 +291,3 @@ jobs:
mergeTestResults: true
publishRunAttachments: true
testRunTitle: SourceBuild_SmokeTests_$(Agent.JobName)
-
- - publish: '${{ variables.sourcesPath }}/artifacts/${{ parameters.architecture }}/Release/'
- artifact: $(Agent.JobName)_Artifacts
- displayName: Publish Artifacts
- condition: succeededOrFailed()
- continueOnError: true
diff --git a/eng/pipelines/templates/jobs/vmr-synchronization.yml b/eng/pipelines/templates/jobs/vmr-synchronization.yml
index 713deea20..e3f20ce7b 100644
--- a/eng/pipelines/templates/jobs/vmr-synchronization.yml
+++ b/eng/pipelines/templates/jobs/vmr-synchronization.yml
@@ -19,10 +19,13 @@ parameters:
jobs:
- job: Synchronize_VMR
- displayName: Synchronize dotnet/dotnet
+ displayName: Synchronize VMR's ${{ parameters.vmrBranch }}
timeoutInMinutes: 120
variables:
- - template: /eng/common/templates/variables/pool-providers.yml
+ - ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ - template: /eng/common/templates/variables/pool-providers.yml
+ - ${{ else }}:
+ - template: /eng/common/templates-official/variables/pool-providers.yml
- name: vmrPath
value: $(Agent.BuildDirectory)/vmr
- ${{ if not(parameters.noPush) }}:
@@ -36,14 +39,16 @@ jobs:
- group: DotNetBot-AzDO-PAT
- name: vmrInternalUrl
value: https://dnceng@dev.azure.com/dnceng/internal/_git/dotnet-dotnet
-
+
pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
name: $(DncEngPublicBuildPool)
- demands: ImageOverride -equals Build.Ubuntu.2004.Amd64.Open
- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ image: 1es-ubuntu-2004-open
+ os: linux
+ ${{ else }}:
name: $(DncEngInternalBuildPool)
- demands: ImageOverride -equals Build.Ubuntu.2004.Amd64
+ demands: ImageOverride -equals 1es-ubuntu-2004
+ os: linux
steps:
- template: ../steps/vmr-prepare.yml
@@ -57,7 +62,6 @@ jobs:
vmrBranch: ${{ parameters.vmrBranch }}
targetRef: ${{ parameters.targetRef }}
-
- ${{ 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
- ${{ if or(eq(parameters.vmrBranch, 'main'), startsWith(parameters.vmrBranch, 'release/')) }}:
@@ -83,4 +87,4 @@ jobs:
--azdev-pat '$(dn-bot-dnceng-build-rw-code-rw)'
--verbose
displayName: Push changes to dotnet-dotnet (internal)
- workingDirectory: $(Agent.BuildDirectory)/installer
\ No newline at end of file
+ workingDirectory: $(Agent.BuildDirectory)/installer
diff --git a/eng/pipelines/templates/stages/vmr-build.yml b/eng/pipelines/templates/stages/vmr-build.yml
index 43f0c8633..04d06cda7 100644
--- a/eng/pipelines/templates/stages/vmr-build.yml
+++ b/eng/pipelines/templates/stages/vmr-build.yml
@@ -2,38 +2,40 @@
### 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()
+- name: dependsOn
+ type: object
+ default: []
+- name: condition
+ type: string
+ default: always()
# Branch of the VMR to use (to push to for internal builds)
- vmrBranch: $(Build.SourceBranch)
+- name: vmrBranch
+ type: string
+ default: $(Build.SourceBranch)
# True when build is running from dotnet/dotnet directly
- isBuiltFromVmr:
+- name: isBuiltFromVmr
+ type: boolean
+ default: false
- # The following parameters aren't expected to be passed in rather they are used for encapsulation
- # -----------------------------------------------------------------------------------------------
- alpine317Container: mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.17
- centOSStream8Container: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8
- centOSStream9Container: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9
- fedora38Container: mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-38
- ubuntu2204Container: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04
- ubuntu2204ArmContainer: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-arm64
+# 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
- # 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
+- name: pool_LinuxArm64
+ type: object
+ default:
+ name: $(poolName_LinuxArm64)
+ image: $(poolImage_LinuxArm64)
+ demands: ImageOverride -equals $(poolImage_LinuxArm64)
+ hostArchitecture: Arm64
+ os: linux
stages:
- stage: VMR_Source_Build
@@ -41,23 +43,7 @@ stages:
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 }}
-
+ - template: ../variables/vmr-build.yml@self
- ${{ if ne(parameters.vmrBranch, '') }}:
- name: VmrBranch
value: ${{ parameters.vmrBranch }}
@@ -69,17 +55,15 @@ stages:
# PR and CI legs ------------------------------------
- - template: ../jobs/vmr-build.yml
+ - template: ../jobs/vmr-build.yml@self
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
- buildName: CentOSStream8_Online_MsftSdk
+ buildName: ${{ format('{0}_Online_MsftSdk', variables.centOSStreamName) }}
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
- pool:
- name: ${{ variables.defaultPoolName }}
- demands: ${{ variables.defaultPoolDemands }}
- container: ${{ parameters.centOSStream8Container }}
+ pool: ${{ parameters.pool_Linux }}
+ container: ${{ variables.centOSStreamContainer }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
@@ -87,17 +71,15 @@ stages:
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
- - template: ../jobs/vmr-build.yml
+ - template: ../jobs/vmr-build.yml@self
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
- buildName: CentOSStream8_Offline_MsftSdk
+ buildName: ${{ format('{0}_Offline_MsftSdk', variables.centOSStreamName) }}
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
- pool:
- name: ${{ variables.defaultPoolName }}
- demands: ${{ variables.defaultPoolDemands }}
- container: ${{ parameters.centOSStream8Container }}
+ pool: ${{ parameters.pool_Linux }}
+ container: ${{ variables.centOSStreamContainer }}
buildFromArchive: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
@@ -109,17 +91,15 @@ stages:
# CI - Stage 1 x64 legs ------------------------------------
- - template: ../jobs/vmr-build.yml
+ - template: ../jobs/vmr-build.yml@self
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
- buildName: Alpine317_Offline_MsftSdk
+ buildName: ${{ format('{0}_Offline_MsftSdk', variables.alpineName) }}
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
- pool:
- name: ${{ variables.defaultPoolName }}
- demands: ${{ variables.defaultPoolDemands }}
- container: ${{ parameters.alpine317Container }}
+ pool: ${{ parameters.pool_Linux }}
+ container: ${{ variables.alpineContainer }}
buildFromArchive: false # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
@@ -127,17 +107,15 @@ stages:
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
- - template: ../jobs/vmr-build.yml
+ - template: ../jobs/vmr-build.yml@self
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
- buildName: CentOSStream8_Online_PreviousSourceBuiltSdk
+ buildName: ${{ format('{0}_Online_PreviousSourceBuiltSdk', variables.centOSStreamName) }}
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
- pool:
- name: ${{ variables.defaultPoolName }}
- demands: ${{ variables.defaultPoolDemands }}
- container: ${{ parameters.centOSStream8Container }}
+ pool: ${{ parameters.pool_Linux }}
+ container: ${{ variables.centOSStreamContainer }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
@@ -145,17 +123,15 @@ stages:
useMonoRuntime: false # 🚫
withPreviousSDK: true # ✅
- - template: ../jobs/vmr-build.yml
+ - template: ../jobs/vmr-build.yml@self
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
- buildName: CentOSStream8_Offline_PreviousSourceBuiltSdk
+ buildName: ${{ format('{0}_Offline_PreviousSourceBuiltSdk', variables.centOSStreamName) }}
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
- pool:
- name: ${{ variables.defaultPoolName }}
- demands: ${{ variables.defaultPoolDemands }}
- container: ${{ parameters.centOSStream8Container }}
+ pool: ${{ parameters.pool_Linux }}
+ container: ${{ variables.centOSStreamContainer }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
@@ -163,17 +139,15 @@ stages:
useMonoRuntime: false # 🚫
withPreviousSDK: true # ✅
- - template: ../jobs/vmr-build.yml
+ - template: ../jobs/vmr-build.yml@self
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: ${{ format('{0}_Mono_Offline_MsftSdk', variables.centOSStreamName) }}
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
- pool:
- name: ${{ variables.defaultPoolName }}
- demands: ${{ variables.defaultPoolDemands }}
- container: ${{ parameters.centOSStream8Container }}
+ pool: ${{ parameters.pool_Linux }}
+ container: ${{ variables.centOSStreamContainer }}
buildFromArchive: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
@@ -181,35 +155,15 @@ stages:
useMonoRuntime: true # ✅
withPreviousSDK: false # 🚫
- - template: ../jobs/vmr-build.yml
+ - template: ../jobs/vmr-build.yml@self
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
- buildName: CentOSStream9_Offline_MsftSdk
+ buildName: ${{ format('{0}_Offline_MsftSdk', variables.fedoraName) }}
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 # 🚫
- 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: Fedora38_Offline_MsftSdk
- isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
- vmrBranch: ${{ variables.VmrBranch }}
- architecture: x64
- pool:
- name: ${{ variables.defaultPoolName }}
- demands: ${{ variables.defaultPoolDemands }}
- container: ${{ parameters.fedora38Container }}
+ pool: ${{ parameters.pool_Linux }}
+ container: ${{ variables.fedoraContainer }}
buildFromArchive: true # ✅
enablePoison: true # ✅
excludeOmniSharpTests: false # 🚫
@@ -217,17 +171,15 @@ stages:
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
- - template: ../jobs/vmr-build.yml
+ - template: ../jobs/vmr-build.yml@self
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
- buildName: Ubuntu2204_Offline_MsftSdk
+ buildName: ${{ format('{0}_Offline_MsftSdk', variables.ubuntuName) }}
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
- pool:
- name: ${{ variables.defaultPoolName }}
- demands: ${{ variables.defaultPoolDemands }}
- container: ${{ parameters.ubuntu2204Container }}
+ pool: ${{ parameters.pool_Linux }}
+ container: ${{ variables.ubuntuContainer }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: false # 🚫
@@ -237,15 +189,15 @@ stages:
# CI - Stage 1 arm64 Legs ------------------------------------
- - template: ../jobs/vmr-build.yml
+ - template: ../jobs/vmr-build.yml@self
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
- buildName: Ubuntu2204Arm64_Offline_MsftSdk
+ buildName: ${{ format('{0}Arm64_Offline_MsftSdk', variables.ubuntuName) }}
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: arm64
- pool: ${{ parameters.poolInternalArm64 }}
- container: ${{ parameters.ubuntu2204ArmContainer }}
+ pool: ${{ parameters.pool_LinuxArm64 }}
+ container: ${{ variables.ubuntuArmContainer }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: false # 🚫
@@ -255,40 +207,36 @@ stages:
# CI - Stage 2 x64 Legs ------------------------------------
- - template: ../jobs/vmr-build.yml
+ - template: ../jobs/vmr-build.yml@self
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
- buildName: CentOSStream8_Online_CurrentSourceBuiltSdk
+ buildName: ${{ format('{0}_Online_CurrentSourceBuiltSdk', variables.centOSStreamName) }}
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
- pool:
- name: ${{ variables.defaultPoolName }}
- demands: ${{ variables.defaultPoolDemands }}
- container: ${{ parameters.centOSStream8Container }}
+ pool: ${{ parameters.pool_Linux }}
+ container: ${{ variables.centOSStreamContainer }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: false # 🚫
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
- reuseBuildArtifactsFrom: CentOSStream8_Online_MsftSdk
+ reuseBuildArtifactsFrom: ${{ format('{0}_Online_MsftSdk', variables.centOSStreamName) }}
- - template: ../jobs/vmr-build.yml
+ - template: ../jobs/vmr-build.yml@self
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
- buildName: Fedora38_Offline_CurrentSourceBuiltSdk
+ buildName: ${{ format('{0}_Offline_CurrentSourceBuiltSdk', variables.fedoraName) }}
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
- pool:
- name: ${{ variables.defaultPoolName }}
- demands: ${{ variables.defaultPoolDemands }}
- container: ${{ parameters.fedora38Container }}
+ pool: ${{ parameters.pool_Linux }}
+ container: ${{ variables.fedoraContainer }}
buildFromArchive: false # 🚫
enablePoison: false # 🚫
excludeOmniSharpTests: false # 🚫
runOnline: false # 🚫
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
- reuseBuildArtifactsFrom: Fedora38_Offline_MsftSdk
+ reuseBuildArtifactsFrom: ${{ format('{0}_Offline_MsftSdk', variables.fedoraName) }}
diff --git a/eng/pipelines/templates/variables/vmr-build.yml b/eng/pipelines/templates/variables/vmr-build.yml
new file mode 100644
index 000000000..2d8db1587
--- /dev/null
+++ b/eng/pipelines/templates/variables/vmr-build.yml
@@ -0,0 +1,54 @@
+variables:
+- name: alpineContainer
+ value: mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.19-WithNode
+- name: centOSStreamContainer
+ value: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9
+- name: fedoraContainer
+ value: mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-40
+- name: ubuntuContainer
+ value: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04
+- name: ubuntuArmContainer
+ value: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-arm64
+
+- name: alpineName
+ value: Alpine319
+- name: centOSStreamName
+ value: CentOSStream9
+- name: fedoraName
+ value: Fedora40
+- name: ubuntuName
+ value: Ubuntu2204
+
+- name: alpineX64Rid
+ value: alpine.3.19-x64
+- name: centOSStreamX64Rid
+ value: centos.9-x64
+- name: fedoraX64Rid
+ value: fedora.40-x64
+- name: ubuntux64Rid
+ value: ubuntu.22.04-x64
+- name: ubuntuArm64Rid
+ value: ubuntu.22.04-arm64
+
+- ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ - name: defaultPoolName
+ value: NetCore-Public-XL
+ - name: poolImage_Linux
+ value: 1es-ubuntu-2004-open
+ - name: poolImage_LinuxArm64
+ value: Mariner-2-Docker-ARM64
+ - name: poolName_LinuxArm64
+ value: Docker-Linux-Arm-Public
+- ${{ else }}:
+ - ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
+ - name: defaultPoolName
+ value: NetCore1ESPool-Internal-XL
+ - ${{ else }}:
+ - name: defaultPoolName
+ value: $(DncEngInternalBuildPool)
+ - name: poolImage_Linux
+ value: 1es-ubuntu-2204
+ - name: poolImage_LinuxArm64
+ value: Mariner-2-Docker-ARM64
+ - name: poolName_LinuxArm64
+ value: Docker-Linux-Arm-Internal
diff --git a/eng/pipelines/vmr-build-internal.yml b/eng/pipelines/vmr-build-internal.yml
index 85e8fe313..a28dd253f 100644
--- a/eng/pipelines/vmr-build-internal.yml
+++ b/eng/pipelines/vmr-build-internal.yml
@@ -23,7 +23,7 @@ variables:
value: ${{ replace(parameters.vmrBranch, ' ', '') }}
- ${{ else }}:
- name: VmrBranch
- value: release/8.0.1xx
+ value: internal/release/8.0.1xx
resources:
repositories:
diff --git a/eng/pipelines/vmr-build-pr.yml b/eng/pipelines/vmr-build-pr.yml
new file mode 100644
index 000000000..3c51dfe6e
--- /dev/null
+++ b/eng/pipelines/vmr-build-pr.yml
@@ -0,0 +1,56 @@
+# This is the non-1ES PR pipeline source-building the VMR used in installer PRs
+# https://dev.azure.com/dnceng-public/public/_build?definitionId=233
+
+trigger: none
+pr:
+ branches:
+ include:
+ - main
+ - release/*
+
+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: release/8.0.1xx
+
+resources:
+ repositories:
+ - repository: vmr
+ type: github
+ name: dotnet/dotnet
+ endpoint: dotnet
+ ref: $(VmrBranch)
+
+stages:
+# You can temporarily disable the VMR Build stage by setting the disableVmrBuild variable
+- ${{ 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
diff --git a/eng/pipelines/vmr-sync-internal.yml b/eng/pipelines/vmr-sync-internal.yml
index 0a10a518e..cb0877ea2 100644
--- a/eng/pipelines/vmr-sync-internal.yml
+++ b/eng/pipelines/vmr-sync-internal.yml
@@ -17,21 +17,48 @@ resources:
name: dotnet-dotnet
ref: $(Build.SourceBranch)
+ - repository: 1ESPipelineTemplates
+ type: git
+ name: 1ESPipelineTemplates/1ESPipelineTemplates
+ ref: refs/tags/release
+
parameters:
- name: vmrBranch
displayName: dotnet-dotnet branch to push to
type: string
default: ' '
-variables:
+variables:
+- template: /eng/common/templates-official/variables/pool-providers.yml@self
+
- ${{ if ne(parameters.vmrBranch, ' ') }}:
- name: VmrBranch
value: ${{ replace(parameters.vmrBranch, ' ', '') }}
- ${{ else }}:
- name: VmrBranch
value: ${{ replace(replace(variables['Build.SourceBranch'], 'refs/heads/', ''), 'refs/pull/', '') }}
-
-jobs:
- - template: templates/jobs/vmr-synchronization.yml
- parameters:
- vmrBranch: ${{ variables.VmrBranch }}
\ No newline at end of file
+
+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:
+ - template: /eng/pipelines/templates/jobs/vmr-synchronization.yml@self
+ parameters:
+ vmrBranch: ${{ variables.VmrBranch }}
\ No newline at end of file
diff --git a/eng/pipelines/vmr-sync.yml b/eng/pipelines/vmr-sync.yml
index 6659887f1..7de3ef614 100644
--- a/eng/pipelines/vmr-sync.yml
+++ b/eng/pipelines/vmr-sync.yml
@@ -19,23 +19,48 @@ resources:
endpoint: dotnet
ref: $(Build.SourceBranch)
+ - repository: 1ESPipelineTemplates
+ type: git
+ name: 1ESPipelineTemplates/1ESPipelineTemplates
+ ref: refs/tags/release
+
parameters:
- name: vmrBranch
displayName: dotnet/dotnet branch to push to
type: string
default: ' '
-variables:
+variables:
+- template: /eng/common/templates-official/variables/pool-providers.yml@self
+
- ${{ if ne(parameters.vmrBranch, ' ') }}:
- name: VmrBranch
value: ${{ replace(parameters.vmrBranch, ' ', '') }}
- ${{ else }}:
- name: VmrBranch
value: ${{ replace(replace(variables['Build.SourceBranch'], 'refs/heads/', ''), 'refs/pull/', '') }}
-
-jobs:
- - template: /eng/pipelines/templates/jobs/vmr-synchronization.yml
- parameters:
- vmrBranch: ${{ variables.VmrBranch }}
-
-
\ No newline at end of file
+
+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:
+ - template: /eng/pipelines/templates/jobs/vmr-synchronization.yml@self
+ parameters:
+ vmrBranch: ${{ variables.VmrBranch }}
diff --git a/global.json b/global.json
index e46bfeda9..50fd7a407 100644
--- a/global.json
+++ b/global.json
@@ -11,7 +11,7 @@
"cmake": "3.21.0"
},
"msbuild-sdks": {
- "Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.24113.2",
- "Microsoft.DotNet.CMake.Sdk": "8.0.0-beta.24113.2"
+ "Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.24266.3",
+ "Microsoft.DotNet.CMake.Sdk": "8.0.0-beta.24266.3"
}
}
diff --git a/src/SourceBuild/content/.config/guardian/.gdnbaselines b/src/SourceBuild/content/.config/guardian/.gdnbaselines
new file mode 100644
index 000000000..ce7a029cc
--- /dev/null
+++ b/src/SourceBuild/content/.config/guardian/.gdnbaselines
@@ -0,0 +1,1315 @@
+{
+ "hydrated": false,
+ "properties": {
+ "helpUri": "https://eng.ms/docs/microsoft-security/security/azure-security/cloudai-security-fundamentals-engineering/security-integration/guardian-wiki/microsoft-guardian/general/baselines",
+ "hydrationStatus": "This file does not contain identifying data. It is safe to check into your repo. To hydrate this file with identifying data, run `guardian hydrate --help` and follow the guidance."
+ },
+ "version": "1.0.0",
+ "baselines": {
+ "default": {
+ "name": "default",
+ "createdDate": "2024-04-03 14:41:43Z",
+ "lastUpdatedDate": "2024-04-03 14:41:43Z"
+ }
+ },
+ "results": {
+ "5f3b52e23f96eb01bcfd73ead3cbaa2e1430de0006e5103109dd39bf9f292165": {
+ "signature": "5f3b52e23f96eb01bcfd73ead3cbaa2e1430de0006e5103109dd39bf9f292165",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "72b28f655eadc78b21ab36a7f572708315d8d909d1b460162511e37086288e30": {
+ "signature": "72b28f655eadc78b21ab36a7f572708315d8d909d1b460162511e37086288e30",
+ "alternativeSignatures": [
+ "60efb04c6e0431e477e792a96d32b30b3a309b4ee19fad084a015e2946985459"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "08dcdf31a316917a50c97d16d8d4eca5dbd7528b8cfe8c9bd8b29fdd4dc3eb85": {
+ "signature": "08dcdf31a316917a50c97d16d8d4eca5dbd7528b8cfe8c9bd8b29fdd4dc3eb85",
+ "alternativeSignatures": [
+ "c6b795bd087762188cd476b81ccdb474a25495b86b8080e1ab15c5592628b8af"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "62e5fe288e1e21307317edab5d08f047ecdd01eac5c19660bab6c9ae96f8c8b5": {
+ "signature": "62e5fe288e1e21307317edab5d08f047ecdd01eac5c19660bab6c9ae96f8c8b5",
+ "alternativeSignatures": [
+ "631ff94fe085c9754b83bd9fc2a15dccccccd067392cea1f520398874266248a"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "6d4429751838adeb1f1b097b6b974a6a47d744871980ee54faeb7a4536183597": {
+ "signature": "6d4429751838adeb1f1b097b6b974a6a47d744871980ee54faeb7a4536183597",
+ "alternativeSignatures": [
+ "c4538b540d00c41b9828ade572431cfd476ae40ebd4c6cfc635d06ac185972e3"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "93735e0dba704ad832d7b3fdabfcda2875dee9adb24e3cd676fce3b612d116c3": {
+ "signature": "93735e0dba704ad832d7b3fdabfcda2875dee9adb24e3cd676fce3b612d116c3",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "a5142e7bafbf664fdcb2d4d7071ca8427c7da0c8ba66cc7706c9c07b816f1201": {
+ "signature": "a5142e7bafbf664fdcb2d4d7071ca8427c7da0c8ba66cc7706c9c07b816f1201",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "1ee555192f99f2751398509614249023216a98d148e57de41317ec60715374b0": {
+ "signature": "1ee555192f99f2751398509614249023216a98d148e57de41317ec60715374b0",
+ "alternativeSignatures": [
+ "5d82fd3437c708ec3bfe674016099e5465194ebc53f7dd72061b98d7257a951f"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "be4c5e062093fa08fe93f0753c3090b63af74dc4af4c04d781fddf9ec41db0d4": {
+ "signature": "be4c5e062093fa08fe93f0753c3090b63af74dc4af4c04d781fddf9ec41db0d4",
+ "alternativeSignatures": [
+ "bafe4e1a197b7af8b8cfda4cafd8250a4a66a0ca18b82817e12d5a4d17350589"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "c704b27a3590a23b240e9c261dc93c8f3c7871e4d471b5688c3609880396f672": {
+ "signature": "c704b27a3590a23b240e9c261dc93c8f3c7871e4d471b5688c3609880396f672",
+ "alternativeSignatures": [
+ "0880869d43948d2f7050955aeb76733bc12ab82839563cbabff0dd36d0880a39"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "b6aecc1d8697beab291f9925633b5ec3e37a088033efc7e93928fd9cac96cda4": {
+ "signature": "b6aecc1d8697beab291f9925633b5ec3e37a088033efc7e93928fd9cac96cda4",
+ "alternativeSignatures": [
+ "985838b2d1518f507c85ae0f635951bad92dde58eb24c252d7e56fb6ccda6191"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "ed7c9f876d0784c23991b9ce1abc7c0df6229e7eed8cda08e56315b5fdeb5fa0": {
+ "signature": "ed7c9f876d0784c23991b9ce1abc7c0df6229e7eed8cda08e56315b5fdeb5fa0",
+ "alternativeSignatures": [
+ "d2f6b006ae6b54ff39886db273b9ffc9ba23f0a84861bbe028aa54343fb5c55b"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "ae448b96e62d898485a9df57a24a920740c5504d4854e85e8060a1ba94752dbb": {
+ "signature": "ae448b96e62d898485a9df57a24a920740c5504d4854e85e8060a1ba94752dbb",
+ "alternativeSignatures": [
+ "6590282ea3895180725cbb97a9e565571bb27b596bb6a6d1087b62078ed1d683"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "2e86a1d345364972a25bfe0a38237afa382766115808bb86bac8ca03e4cca304": {
+ "signature": "2e86a1d345364972a25bfe0a38237afa382766115808bb86bac8ca03e4cca304",
+ "alternativeSignatures": [
+ "c079fd753fcba1568d79c4bef9fd6200b494f1552bedc1e91902ec8f01081fd7"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "5c349e8f183364d99cde545c6da7549c9d6227957c820fcde8e8beb2b40de39c": {
+ "signature": "5c349e8f183364d99cde545c6da7549c9d6227957c820fcde8e8beb2b40de39c",
+ "alternativeSignatures": [
+ "8546393d391f4010c04ed43788c36626f870b02028937cf390014c660f657f7b"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "a9e7b46f71cc21fd96e3bbb1c30a7beb36470f0a4c857794b4444856e54ffc2b": {
+ "signature": "a9e7b46f71cc21fd96e3bbb1c30a7beb36470f0a4c857794b4444856e54ffc2b",
+ "alternativeSignatures": [
+ "34597b8dc5d2e482d7178a50440f3b8815c44e510906dd92a4d31d434c87053b"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "3df69ea15defeb820ba0823dc80513e75a79b049dee023b51dee4419cd1d2276": {
+ "signature": "3df69ea15defeb820ba0823dc80513e75a79b049dee023b51dee4419cd1d2276",
+ "alternativeSignatures": [
+ "deb5cfe250ae8f9c1bbcdf230c425dc071067ee26cc7b3d41b9fc078782febfc"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "c2b86ae10a9ad117f56bf792ae0a8a99bfbe1945254d156dd685e41dc74dd5ed": {
+ "signature": "c2b86ae10a9ad117f56bf792ae0a8a99bfbe1945254d156dd685e41dc74dd5ed",
+ "alternativeSignatures": [
+ "7c13381c5c5bf98666c53e6497f0d6c8b2463fd2d7e0a0084edce348edb2a98b"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "7ec5369cb17143314826ef4e433320ab257e00485568fed9ca59d6ddf1ad166a": {
+ "signature": "7ec5369cb17143314826ef4e433320ab257e00485568fed9ca59d6ddf1ad166a",
+ "alternativeSignatures": [
+ "7e1528556c5286830d73b23164ea8c99103c6344228bb91390c9943cb6090ff3"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "e71596904ef990bac717b0973b8fd3e36d52b3a45713bf8babb88f1ab0493360": {
+ "signature": "e71596904ef990bac717b0973b8fd3e36d52b3a45713bf8babb88f1ab0493360",
+ "alternativeSignatures": [
+ "ff25e34637fb05921a126d3143eef03b8006f580e993ef5a7d2e27ec5178ee9a"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "32eb952e8561b331092ec83b626102388202071d192f9eb22c233b06ea90d2a1": {
+ "signature": "32eb952e8561b331092ec83b626102388202071d192f9eb22c233b06ea90d2a1",
+ "alternativeSignatures": [
+ "cce04b0a7c54b775c1464a32d85804de7d1777ac2a6d21da8b080c29ac46162c"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "7d3c27b6bd42f58e624890a1669c188c6afee080e6330673942d364641876d52": {
+ "signature": "7d3c27b6bd42f58e624890a1669c188c6afee080e6330673942d364641876d52",
+ "alternativeSignatures": [
+ "29d9fec9e2b10d721512bb68a68759baa33b6bbc0683a2d3d5cdcb74894917ee"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "42c9ee2033a50a53e2fcc83cb08b3a8c38a5c9e2230414ae0590d3c8f45a9a8d": {
+ "signature": "42c9ee2033a50a53e2fcc83cb08b3a8c38a5c9e2230414ae0590d3c8f45a9a8d",
+ "alternativeSignatures": [
+ "44e2cd3b2773d63b155f2093202415744b74f8b5c47612ad92f2ffee3939cb2f"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "ea00dd596b6f25ad7fb56f8433aa4889808c48a9d753eeb896438d871f1bbadf": {
+ "signature": "ea00dd596b6f25ad7fb56f8433aa4889808c48a9d753eeb896438d871f1bbadf",
+ "alternativeSignatures": [
+ "e6e7be75b6234262188b18265bdef3aca61e7ad4b9e0712b34ad9af2605ff5bf"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "b4e3d369cd32329e640bc7984528cdda54a9bdea2b52a5c3ed026fc57be64afd": {
+ "signature": "b4e3d369cd32329e640bc7984528cdda54a9bdea2b52a5c3ed026fc57be64afd",
+ "alternativeSignatures": [
+ "8f19b3c3b99054f4c34e62dbb042d4505190bae61f7c815659e825e1e3f6585d"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "869eabde635eff83abaf3ceae639a4dfe5b6e1fc2be56bde177999b341ee7fa7": {
+ "signature": "869eabde635eff83abaf3ceae639a4dfe5b6e1fc2be56bde177999b341ee7fa7",
+ "alternativeSignatures": [
+ "879cee54b1ce34bf674d7bea56317d5e606a8a6d1909e28831a801c3c760547c"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "c30ea658de240cc77f43da72a2ae66a8300716df1a36e5aad2ccf0041405512b": {
+ "signature": "c30ea658de240cc77f43da72a2ae66a8300716df1a36e5aad2ccf0041405512b",
+ "alternativeSignatures": [
+ "f9010fdbf887fec3fb12dc784714ae4993cfbb0c279ceb32de179be14113851c"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "29a080743f4448e5fb1c2556f824a2f4950ec05ae1d5baa76157bc6425e08a1e": {
+ "signature": "29a080743f4448e5fb1c2556f824a2f4950ec05ae1d5baa76157bc6425e08a1e",
+ "alternativeSignatures": [
+ "f6f78c526c85382e749badcc83d5d3e81976879e727417fef1b81b83faec67f0"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "5c1de06651f26dcbfaa7256b674dc725934d1892a58ab1655fed98c7d062c84c": {
+ "signature": "5c1de06651f26dcbfaa7256b674dc725934d1892a58ab1655fed98c7d062c84c",
+ "alternativeSignatures": [
+ "6435a356edc13cd3ae7609656ff1920116c1f944e1d63b2ceec921d4e3f6464d"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "dd15f0a91faa86197e2bc286d99e9b0e5e625930ad53a5fae4e0a8c2b80b91ee": {
+ "signature": "dd15f0a91faa86197e2bc286d99e9b0e5e625930ad53a5fae4e0a8c2b80b91ee",
+ "alternativeSignatures": [
+ "6252f589ff1cb3d68f758c8f081fd3e59d8cc56bfaa29441b9e26b1cd5726faa"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "3db9957bb879335816149b88a3fed78468210e7480dd31db37845b97d28078ad": {
+ "signature": "3db9957bb879335816149b88a3fed78468210e7480dd31db37845b97d28078ad",
+ "alternativeSignatures": [
+ "4c6e2de131da98d97f9f4ab9a07fb90f6ca478f578d0bd4da7a7551683c886d7"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "cda6b64f47374712a1488b1ca527f54310e135ceb7e4611e75f28aed7f4edd43": {
+ "signature": "cda6b64f47374712a1488b1ca527f54310e135ceb7e4611e75f28aed7f4edd43",
+ "alternativeSignatures": [
+ "c7c9b966693a21385b7c2f4a36c5c3c6a410cda29716d1c10537f6463cb852af"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "61eab78163233a43bc21bf8a2a762496cd63758852ed1afcfe73d4ebd90532e9": {
+ "signature": "61eab78163233a43bc21bf8a2a762496cd63758852ed1afcfe73d4ebd90532e9",
+ "alternativeSignatures": [
+ "2584c057a56958edc47e8f9ed26ed2e4b2fbee706d4a5fe6793d42044754f016"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "201a1737b9cd0a61c986dc37678141a290fe56e518c4d7401443d83f89635758": {
+ "signature": "201a1737b9cd0a61c986dc37678141a290fe56e518c4d7401443d83f89635758",
+ "alternativeSignatures": [
+ "3b2032f4ca90c12c9b5ea35ac6e85ba10a32f7d018b39369e044ae4d039e000b"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "bcb0788172282f0f5ab22907ec5070573092309654c8eb07dc92fb4e676ded80": {
+ "signature": "bcb0788172282f0f5ab22907ec5070573092309654c8eb07dc92fb4e676ded80",
+ "alternativeSignatures": [
+ "8c37a63c016612477d48726a77b74eb798e45c09e6c2212fbd57ca10aa88dd59"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "5dc266c64bff96e86a1a3907386531e16f0dcf38f5b1bcdba22f45e7965c6bf7": {
+ "signature": "5dc266c64bff96e86a1a3907386531e16f0dcf38f5b1bcdba22f45e7965c6bf7",
+ "alternativeSignatures": [
+ "ad996650f8e2b17aeddcea222c0861f9cb257aee49f31e01a4de573d23e1b0fb"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "845ca607828540eafa4053b4f9368b97c23258b9b47ceecbcec8bd7e5aa59302": {
+ "signature": "845ca607828540eafa4053b4f9368b97c23258b9b47ceecbcec8bd7e5aa59302",
+ "alternativeSignatures": [
+ "c2cb1a24bf7f267ad949c325feaf69f29f60dd019f1b3879391f85f7d5316800"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "89bed4bb6776c3155318e4ff38e5062f655834cebcdf6f65b08cbd2312ac75f8": {
+ "signature": "89bed4bb6776c3155318e4ff38e5062f655834cebcdf6f65b08cbd2312ac75f8",
+ "alternativeSignatures": [
+ "c805484f8267753ac6867fe334b6ecfa42d2430b21488501a926b9d49a679bb1"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "c2496232c1468a250e567517e0a7a71632e3ed60330784450511cef2a1164af0": {
+ "signature": "c2496232c1468a250e567517e0a7a71632e3ed60330784450511cef2a1164af0",
+ "alternativeSignatures": [
+ "723a97522d855b779b011a0a6f84ea1ee7cf77d05f2b4808ffdbd521e655e6e3"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "e75c5f821dc59179ed407ca3da917756cd0cff7aac1755df7ef0ef6bf087f80c": {
+ "signature": "e75c5f821dc59179ed407ca3da917756cd0cff7aac1755df7ef0ef6bf087f80c",
+ "alternativeSignatures": [
+ "420deccac3e08a232a59caa2178b503d310d2645f847150b564dc8e02b28fbee"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "ad85fce8c033defdd63db5aa4ec2b2197bbf9310b506241e88bcd48b5a3b41da": {
+ "signature": "ad85fce8c033defdd63db5aa4ec2b2197bbf9310b506241e88bcd48b5a3b41da",
+ "alternativeSignatures": [
+ "784f946934a1f42d820c8a61ac865a094d735d0cfcca4c88fe10482306abf958"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "316329783213340b7da3052b8177bd48e10a05bf242da08dc6f9785361be2389": {
+ "signature": "316329783213340b7da3052b8177bd48e10a05bf242da08dc6f9785361be2389",
+ "alternativeSignatures": [
+ "2f83c91b8c20ef743240ee45997e2af37d73a0dd99d2ea345794960d775b567d"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "2db32a47c814adc0ee80e257e1cb878a9054b92e6809cd9231690856066bcb33": {
+ "signature": "2db32a47c814adc0ee80e257e1cb878a9054b92e6809cd9231690856066bcb33",
+ "alternativeSignatures": [
+ "249d66492a4d48df01ea2c04aa25e302ad17daf74d130194bec5a90405111da4"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "d2e9bf6a7e357eb1b1d594a06ed00bdf9fa193110f08e45f8e748427a370bfba": {
+ "signature": "d2e9bf6a7e357eb1b1d594a06ed00bdf9fa193110f08e45f8e748427a370bfba",
+ "alternativeSignatures": [
+ "41a0e4c2bbd23190b2ebaf6163c0a9471f126cd6c2144e8377d9cb1bf0a391ef"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "c1e109d2139e82ef8545bb12a0431f4d25f2a805c9b5f71523515dbbb0be9fc3": {
+ "signature": "c1e109d2139e82ef8545bb12a0431f4d25f2a805c9b5f71523515dbbb0be9fc3",
+ "alternativeSignatures": [
+ "69b330936de5c13b57fd7f0f7590a7e66efa3dba98715b5f07d8953662df5025"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "ec60cc4e84b44896c9f5a516e705340feebdaa61be024c82b07b546d3ad0c276": {
+ "signature": "ec60cc4e84b44896c9f5a516e705340feebdaa61be024c82b07b546d3ad0c276",
+ "alternativeSignatures": [
+ "f9c44b75edceaeaae9611fd772b6774ce086227bb3b758dd3844c57511fb2e7a"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "5184980ee9ace427259fcaa3ee796a48efb25a7141fc16426c08dbc8903dbca9": {
+ "signature": "5184980ee9ace427259fcaa3ee796a48efb25a7141fc16426c08dbc8903dbca9",
+ "alternativeSignatures": [
+ "0610a76e8ba9f8fef499d2364bac7db02436cc8f89cee26eac4c6c2c6cab952c"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "148a534bb099170811f8dcc0d51c1caa399488739a5ee98fb12bee51c7a9244d": {
+ "signature": "148a534bb099170811f8dcc0d51c1caa399488739a5ee98fb12bee51c7a9244d",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "1d9de8cd0e3cf1749dc40ad234b9d84e263f241dbcd8b35320808c8381840c3a": {
+ "signature": "1d9de8cd0e3cf1749dc40ad234b9d84e263f241dbcd8b35320808c8381840c3a",
+ "alternativeSignatures": [
+ "8af561a51ebf9394b93708f512784edbbaa8c13872c2f56da4c5b418f71ad34d"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "d71d8881e3ad39939ff9894639cdc0012d968b48038b872ca7eba15ba93cbfe9": {
+ "signature": "d71d8881e3ad39939ff9894639cdc0012d968b48038b872ca7eba15ba93cbfe9",
+ "alternativeSignatures": [
+ "bea919b0d9a2e6c38a6de6300616becf31809eaa49616e63ab90118b5ec331eb"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "4dbb69e7a5bbcaf97ee14aa268f0cc4b375111db79d91bc48b438f15e7f29859": {
+ "signature": "4dbb69e7a5bbcaf97ee14aa268f0cc4b375111db79d91bc48b438f15e7f29859",
+ "alternativeSignatures": [
+ "52e95c355d30e2e33b6ad0cf11af5c31db038107a89dd120854c94857aa2298b"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "2960b8fc6b1f6665b5988544f1d44a05dfe83b9b39a14efef5e042d7a78e4e19": {
+ "signature": "2960b8fc6b1f6665b5988544f1d44a05dfe83b9b39a14efef5e042d7a78e4e19",
+ "alternativeSignatures": [
+ "b4177488d7a45f4a54472adf8bb97026f0799e61e10f580ea52fbbd74cf08f10"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "c1c411bf7b80d684d2c444ed611f333f08f1073fbaaf4c6bd0238c16ffccbe4d": {
+ "signature": "c1c411bf7b80d684d2c444ed611f333f08f1073fbaaf4c6bd0238c16ffccbe4d",
+ "alternativeSignatures": [
+ "8ca9e6612eb3802d5c1fd93ce0f1de61c2559512966fc97dcbeb017d1942c0fe"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "a0437af80b26a79fc6c7e101114a0a455bd0bc7a4e9ccea1fa3b355aaac07390": {
+ "signature": "a0437af80b26a79fc6c7e101114a0a455bd0bc7a4e9ccea1fa3b355aaac07390",
+ "alternativeSignatures": [
+ "495012003aa9faede4c4ad115a12784f6a8f549e1ebe976537b021d6e5296da9"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "0df8574205ace03dd154be3c3a221b36feae675ac237c8fea3b994f48df75fb8": {
+ "signature": "0df8574205ace03dd154be3c3a221b36feae675ac237c8fea3b994f48df75fb8",
+ "alternativeSignatures": [
+ "15f5632806a855b11f25dc0c899f5f3982b9f92340841b85b35f9f5666c36921"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "851935ee9fe368011d0d65b595a839000849d57904224cd947664078ba46874d": {
+ "signature": "851935ee9fe368011d0d65b595a839000849d57904224cd947664078ba46874d",
+ "alternativeSignatures": [
+ "c8aefc4c57da1e828bfa02df6e1abc444cc98f2e9ba3f1b0bb4a4f0c04d1fab0"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "ba2a917a447947c7e8598dc49f18f6a918548051ed56fb0f38d801f52ebdaef0": {
+ "signature": "ba2a917a447947c7e8598dc49f18f6a918548051ed56fb0f38d801f52ebdaef0",
+ "alternativeSignatures": [
+ "0460e5c64d667a95521ca05da96915a79178a361764141acf4bf7c4a75c3e47e"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "91b70c20fca1cd70bc4d7a34ba446f9a79d78c3c73ed708750062fe49a55324e": {
+ "signature": "91b70c20fca1cd70bc4d7a34ba446f9a79d78c3c73ed708750062fe49a55324e",
+ "alternativeSignatures": [
+ "c884dc16288b0bfa8d5e7f06638c7c61a16bc42328f5a32c43f1d39c38da31f8"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "519f950c7bea3463674233b674b3093990f25167389e2d1ea82cfdf5b0ad0abf": {
+ "signature": "519f950c7bea3463674233b674b3093990f25167389e2d1ea82cfdf5b0ad0abf",
+ "alternativeSignatures": [
+ "e3af28a3737f3eda0c96f52925a36770b7ccc6f3238b4ea855ce4b1d0e6e8f4b"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "192073ddefc720c7b9af682598676a54d54492be32707bf4bef8b3233e8aa1bb": {
+ "signature": "192073ddefc720c7b9af682598676a54d54492be32707bf4bef8b3233e8aa1bb",
+ "alternativeSignatures": [
+ "795fa0e8fdbd60d899b1372eb853ec5b0b9b32c2f9117364c2f63856b7b17763"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "85c9f67cf21f805e1e507792f3b78c20703a374e04a7a50a071250d75a3a34c5": {
+ "signature": "85c9f67cf21f805e1e507792f3b78c20703a374e04a7a50a071250d75a3a34c5",
+ "alternativeSignatures": [
+ "e387a1c8ec270a1be5c6048f2759118f30d2f43efceec3fae2aa37c892352391"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "000bea6b6816c3cf71200ceeccd187ac5d43172eb225d70b53f27cf94e4e0091": {
+ "signature": "000bea6b6816c3cf71200ceeccd187ac5d43172eb225d70b53f27cf94e4e0091",
+ "alternativeSignatures": [
+ "977df07ec18dc533ce706b09124ec76a13719ca51a7e101762a0fb49c99b6985"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "cc40ef86620baaad1faea5a6f3f6b19268b9e8f2fe7169c37dd9d1b1216225b5": {
+ "signature": "cc40ef86620baaad1faea5a6f3f6b19268b9e8f2fe7169c37dd9d1b1216225b5",
+ "alternativeSignatures": [
+ "154f374516f141697b001546e7871a8f6377f3da5d8a42565fc035fcacbc9d22"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "f4c4a77a4a11940d05fa6484e202593866f3cc943f0679506a6dfbf3e2e3f254": {
+ "signature": "f4c4a77a4a11940d05fa6484e202593866f3cc943f0679506a6dfbf3e2e3f254",
+ "alternativeSignatures": [
+ "70e7d79088b1beda828977ecbbfd908e56848a3f7b0963dcbabb087c49ad650c"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "7918a138214555e83a85a32519dd6fc31971b28aa956f66583194530de8b009c": {
+ "signature": "7918a138214555e83a85a32519dd6fc31971b28aa956f66583194530de8b009c",
+ "alternativeSignatures": [
+ "479b344b41e42fb75f1205d3643792af4211d89a7881dfac007fd6c7c5358e09"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "fa7347c7f64562b9d7e0be884bcc9d60232f6995b2139a052bf4b8cfcc3d424a": {
+ "signature": "fa7347c7f64562b9d7e0be884bcc9d60232f6995b2139a052bf4b8cfcc3d424a",
+ "alternativeSignatures": [
+ "8926b16a96043571d926ccc99741a5844bb54b1215ccc929568d2dc528da9e40"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "3c494c3cdc3d2ab897a96f5b498fbf1731ba2c6dcc73e49399083635bc084e8a": {
+ "signature": "3c494c3cdc3d2ab897a96f5b498fbf1731ba2c6dcc73e49399083635bc084e8a",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "8bb20ad2a210dc906e39ceb48b0a6a39b240878688ad6854161240ae3a597c87": {
+ "signature": "8bb20ad2a210dc906e39ceb48b0a6a39b240878688ad6854161240ae3a597c87",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "486f45a6c6f00cc927a87f4b7b122829bee893d6f523fed279e7e2deda450aff": {
+ "signature": "486f45a6c6f00cc927a87f4b7b122829bee893d6f523fed279e7e2deda450aff",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "643ded93447723ad1faad1de45b19108d986db08e488174a5422f3f1f7f0f7a3": {
+ "signature": "643ded93447723ad1faad1de45b19108d986db08e488174a5422f3f1f7f0f7a3",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "51d877cdee6cab498e1a0fd4c4dd2702b3e5da9eb308e0a631d2104e2d3d2a8c": {
+ "signature": "51d877cdee6cab498e1a0fd4c4dd2702b3e5da9eb308e0a631d2104e2d3d2a8c",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "849b1bea0ba2f8d1c24a58896b9d230ca317e8cff7e9540f73d578dd1aba12cb": {
+ "signature": "849b1bea0ba2f8d1c24a58896b9d230ca317e8cff7e9540f73d578dd1aba12cb",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "c535332f090c89ae22a79aac4b9d344333c5479b891b79d72d252611c9364450": {
+ "signature": "c535332f090c89ae22a79aac4b9d344333c5479b891b79d72d252611c9364450",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "bc8ce9f1fd92dd123db1b6f8c33d15123bc8f3c4cb4fd42c54b4a2c5210bb158": {
+ "signature": "bc8ce9f1fd92dd123db1b6f8c33d15123bc8f3c4cb4fd42c54b4a2c5210bb158",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "9507f913c4445bebb9bdd471960011afa198c1e42d19c45d44aea58af61a137d": {
+ "signature": "9507f913c4445bebb9bdd471960011afa198c1e42d19c45d44aea58af61a137d",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "9ac9e0a5efc7c0d1e6d89422ca8e70e913eaba647ef42650f0bbc50da080a556": {
+ "signature": "9ac9e0a5efc7c0d1e6d89422ca8e70e913eaba647ef42650f0bbc50da080a556",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "5d49433b67f4a2f1b6b323c498722d16aeda2d8781dafe9fcb9faaf9db4ee3e1": {
+ "signature": "5d49433b67f4a2f1b6b323c498722d16aeda2d8781dafe9fcb9faaf9db4ee3e1",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "71ee57f56c77339e4a0cb3f5bdfd05d15191136fc8ad887cef26fe1488522529": {
+ "signature": "71ee57f56c77339e4a0cb3f5bdfd05d15191136fc8ad887cef26fe1488522529",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "74b8ab85959da39f4da6710c6375080c44c8929d6b68f59a06dede355aeffacc": {
+ "signature": "74b8ab85959da39f4da6710c6375080c44c8929d6b68f59a06dede355aeffacc",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "ca37e6fb6eb26bdec92893b3f6b08f8f41e6241f573a1b8e14d4e4d4ff1d2c7a": {
+ "signature": "ca37e6fb6eb26bdec92893b3f6b08f8f41e6241f573a1b8e14d4e4d4ff1d2c7a",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "d7657bb2e0603e7b353f7b1e1d884306fe44f116c7665192fd6b33003333ef7a": {
+ "signature": "d7657bb2e0603e7b353f7b1e1d884306fe44f116c7665192fd6b33003333ef7a",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "90b7e7a132c8df4864a9ee49670cbaec9cbc5f5c53bf009eba5a583e0934a24f": {
+ "signature": "90b7e7a132c8df4864a9ee49670cbaec9cbc5f5c53bf009eba5a583e0934a24f",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "8a5003e2db05146eaba3a7fc7aba715f51a5506b741a6ac2662e47e39c6165aa": {
+ "signature": "8a5003e2db05146eaba3a7fc7aba715f51a5506b741a6ac2662e47e39c6165aa",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "02590eb0efbb241f09bae58f60907c6dee5b33507519a4be87e168a458c2b9cb": {
+ "signature": "02590eb0efbb241f09bae58f60907c6dee5b33507519a4be87e168a458c2b9cb",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "df250772236d85876a9d789cca90b48e5eb79ad6cb13782465c8c88366c5d845": {
+ "signature": "df250772236d85876a9d789cca90b48e5eb79ad6cb13782465c8c88366c5d845",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "3cd8e3eb9b94b01c93591c685406ea91d9d31b16aace0f109734e4bacb3838f2": {
+ "signature": "3cd8e3eb9b94b01c93591c685406ea91d9d31b16aace0f109734e4bacb3838f2",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "e91e45a96bf36327f551eadf27d9598b3d058fc051b0f9f0f1da9420410dc79a": {
+ "signature": "e91e45a96bf36327f551eadf27d9598b3d058fc051b0f9f0f1da9420410dc79a",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "1c8a3d52bb83c1fbd1208b94663769b6452e73988540113dff20bfb4df4ca010": {
+ "signature": "1c8a3d52bb83c1fbd1208b94663769b6452e73988540113dff20bfb4df4ca010",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "8839c1c5ab6e962faf123ad7b79a584170d6491855f69555664986a425984a36": {
+ "signature": "8839c1c5ab6e962faf123ad7b79a584170d6491855f69555664986a425984a36",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "d2df996be35f179b45a3bdc28fcd9d5254a924ab52d2ca14b068bfea35e65284": {
+ "signature": "d2df996be35f179b45a3bdc28fcd9d5254a924ab52d2ca14b068bfea35e65284",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "7a20b01096651f581c51904be7cd1281150c40efc61352b70aabbca3c40ea177": {
+ "signature": "7a20b01096651f581c51904be7cd1281150c40efc61352b70aabbca3c40ea177",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "ef394eaa05e6eb5af1f5e523fd01f4e970f36cb2c7eacb3d363b47c9f70b0fec": {
+ "signature": "ef394eaa05e6eb5af1f5e523fd01f4e970f36cb2c7eacb3d363b47c9f70b0fec",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "cb83a69b59f2de3fa1d049750ddeb855030d5662c43a1c5fea6b95f01e21547f": {
+ "signature": "cb83a69b59f2de3fa1d049750ddeb855030d5662c43a1c5fea6b95f01e21547f",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "d08376cdfec80b5c0884a8b85f18c8b34ffee19f1395d12aef1ffc2821120f03": {
+ "signature": "d08376cdfec80b5c0884a8b85f18c8b34ffee19f1395d12aef1ffc2821120f03",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "ef471993ee9839701feba16b5b56a926545a165bf95224130d6c8a2bdafdd451": {
+ "signature": "ef471993ee9839701feba16b5b56a926545a165bf95224130d6c8a2bdafdd451",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "d742600df5b4b6b71f65cf0079b09ec36a5d58bb4b8b07923b13ab8458f68a15": {
+ "signature": "d742600df5b4b6b71f65cf0079b09ec36a5d58bb4b8b07923b13ab8458f68a15",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "fd9536ec348269dbb12b813270403b7410fc13575d1cbb7770604dcf54ee776b": {
+ "signature": "fd9536ec348269dbb12b813270403b7410fc13575d1cbb7770604dcf54ee776b",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "1614f1f0821f8900c7c8d2cb3a784272518ef6b86fb82070bda88b4bac9dbda8": {
+ "signature": "1614f1f0821f8900c7c8d2cb3a784272518ef6b86fb82070bda88b4bac9dbda8",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "3479973e9ab00c84264e70c5d7290a5bfda506aafdb08c3277cb1df5db688ab9": {
+ "signature": "3479973e9ab00c84264e70c5d7290a5bfda506aafdb08c3277cb1df5db688ab9",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "e5bd231f55be121ed2579da9651c4ec0e661a386991ef8463facf3588c306a06": {
+ "signature": "e5bd231f55be121ed2579da9651c4ec0e661a386991ef8463facf3588c306a06",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "19661fe89c5e1f59089cdec06cbdf6bdda2439b52731dfd630b50ff5885d6223": {
+ "signature": "19661fe89c5e1f59089cdec06cbdf6bdda2439b52731dfd630b50ff5885d6223",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "3bf81d57b0872ef6c8ac7878513cb8f58044e07238883f71f24b09542a8d1a07": {
+ "signature": "3bf81d57b0872ef6c8ac7878513cb8f58044e07238883f71f24b09542a8d1a07",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "2e07fdf491a04fc8a6cc50ae299f8345a81798499bda961a118e974970bb71a8": {
+ "signature": "2e07fdf491a04fc8a6cc50ae299f8345a81798499bda961a118e974970bb71a8",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "560fdab2979120fa3cfd2d9865d1ce2c0ba164982cc086cdc871b7e16fd12466": {
+ "signature": "560fdab2979120fa3cfd2d9865d1ce2c0ba164982cc086cdc871b7e16fd12466",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "489c5d92c47b3c961db0d5c32426a4d5fb48311e46ae49791be0f6ef03ddfc6e": {
+ "signature": "489c5d92c47b3c961db0d5c32426a4d5fb48311e46ae49791be0f6ef03ddfc6e",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "5890ec8b0f533c8186a824f1b46b2d99c2d54e7ed09917e5fedcdaea19b34706": {
+ "signature": "5890ec8b0f533c8186a824f1b46b2d99c2d54e7ed09917e5fedcdaea19b34706",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "70a8cd9f176fa02a78470ae78c285f56b617060ec339f0c8dfda095a5b0fc6c9": {
+ "signature": "70a8cd9f176fa02a78470ae78c285f56b617060ec339f0c8dfda095a5b0fc6c9",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "7afd296a74705d2e561497c0ab8c3750179c1eff425f496297d3b877ff718526": {
+ "signature": "7afd296a74705d2e561497c0ab8c3750179c1eff425f496297d3b877ff718526",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "6ffd69e0724ed3b57e926224932b0aeeed7a834ee5dc1ad24c3262deb49172d7": {
+ "signature": "6ffd69e0724ed3b57e926224932b0aeeed7a834ee5dc1ad24c3262deb49172d7",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "ca298b6b96ebfae8f14e29993264310b89fd738b365c2e7ca04e7af1a5cd67b7": {
+ "signature": "ca298b6b96ebfae8f14e29993264310b89fd738b365c2e7ca04e7af1a5cd67b7",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "8764975fced41745e1a9c844144b2aacd30d3fcd77a8c4b1067adc5f2cd8b990": {
+ "signature": "8764975fced41745e1a9c844144b2aacd30d3fcd77a8c4b1067adc5f2cd8b990",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "7cc3b3782554547d94e0f2e8817dbf823a84de8a95b6b358bdd29067bcff64c3": {
+ "signature": "7cc3b3782554547d94e0f2e8817dbf823a84de8a95b6b358bdd29067bcff64c3",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "db15b8200219494e427c3943404a81e931bf17af175823bc51da9b85b63a6831": {
+ "signature": "db15b8200219494e427c3943404a81e931bf17af175823bc51da9b85b63a6831",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "979582e68b87ec6e4cd7d90df4e05f01a6f9150ed07a0abc205112a241f0c16f": {
+ "signature": "979582e68b87ec6e4cd7d90df4e05f01a6f9150ed07a0abc205112a241f0c16f",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "56b251ecea166720fac682142922d79e01699a8cc576683b6d8944dfd3158de2": {
+ "signature": "56b251ecea166720fac682142922d79e01699a8cc576683b6d8944dfd3158de2",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "cbcd76cbd2a6b0a8028fd6c3d1d11ee2e211519af2420396399c3c111a4da667": {
+ "signature": "cbcd76cbd2a6b0a8028fd6c3d1d11ee2e211519af2420396399c3c111a4da667",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "8060e90601237ded928ae57570ef982dd3a57e7bffbec010fcd37e0bda518f10": {
+ "signature": "8060e90601237ded928ae57570ef982dd3a57e7bffbec010fcd37e0bda518f10",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "bc4b0a2231b13e5472e1548250ef4d7174d130daf559bca81f5d3c2c0c169690": {
+ "signature": "bc4b0a2231b13e5472e1548250ef4d7174d130daf559bca81f5d3c2c0c169690",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "91f0752674a19d0db604c50e23950746ff4d231cc76e40a7fa0f53dd5e855f4d": {
+ "signature": "91f0752674a19d0db604c50e23950746ff4d231cc76e40a7fa0f53dd5e855f4d",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "889e33f8e52ecb1d2b98d28772c572c2a10f0dc0c22fcc03b1da03df008d5f91": {
+ "signature": "889e33f8e52ecb1d2b98d28772c572c2a10f0dc0c22fcc03b1da03df008d5f91",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "6969ae787ed7e1caef670545de569929814479666e60a227abcb36395c3d3f60": {
+ "signature": "6969ae787ed7e1caef670545de569929814479666e60a227abcb36395c3d3f60",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "81adfccafd8eb134b75b59de6d4d0d8198c4639a3972d8072b61c67c9e1a104d": {
+ "signature": "81adfccafd8eb134b75b59de6d4d0d8198c4639a3972d8072b61c67c9e1a104d",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "cf0223227addcd8b17bc89e4e5f0ee9174bca83c9ffc5b5493ef74940b33b58c": {
+ "signature": "cf0223227addcd8b17bc89e4e5f0ee9174bca83c9ffc5b5493ef74940b33b58c",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "fc000248c70e613f381ee770fb96dfd28e26766fa9627d28e5b9eb5fb314a3c8": {
+ "signature": "fc000248c70e613f381ee770fb96dfd28e26766fa9627d28e5b9eb5fb314a3c8",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "2987ea627ea4f2effb417244c4aac8f554bf42136d6ebe0fef1df440410be09c": {
+ "signature": "2987ea627ea4f2effb417244c4aac8f554bf42136d6ebe0fef1df440410be09c",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "4c2880cbace8da677942b80be039a982e356c18c827ebeddab265175c9640427": {
+ "signature": "4c2880cbace8da677942b80be039a982e356c18c827ebeddab265175c9640427",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "849ea2c1bdff1b36df8848a7f8898f11e981c3ba8f9b033abd9d1e8b1a03c8ca": {
+ "signature": "849ea2c1bdff1b36df8848a7f8898f11e981c3ba8f9b033abd9d1e8b1a03c8ca",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "1706aea6ec9bfbbe540cfab3713db9b1a9ebc7f475b49f2348860e3ee6d8e682": {
+ "signature": "1706aea6ec9bfbbe540cfab3713db9b1a9ebc7f475b49f2348860e3ee6d8e682",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "8369054f43a96d4f463976b23773b2d22f8081d95f715161f019ceb58296d64a": {
+ "signature": "8369054f43a96d4f463976b23773b2d22f8081d95f715161f019ceb58296d64a",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "4ab520e2ed77b36c88f9eeeb5473205fd7f8f0a761eacee4cbbff389368dad8f": {
+ "signature": "4ab520e2ed77b36c88f9eeeb5473205fd7f8f0a761eacee4cbbff389368dad8f",
+ "alternativeSignatures": [
+ "7ad51ffeb7d5438f15781162de5183c58d5db2d195f96e8c3527451adeb4e02c"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "96ab8bbaf30065be77880d679174d028a151c0fc888fca38a79038d341710563": {
+ "signature": "96ab8bbaf30065be77880d679174d028a151c0fc888fca38a79038d341710563",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "7bda7ae4037698bbdf188b4d3fb8a82e99063a8df2dcfe5f66ef747e3bd3f1a0": {
+ "signature": "7bda7ae4037698bbdf188b4d3fb8a82e99063a8df2dcfe5f66ef747e3bd3f1a0",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "a2dcb4a5d7e266049f9f865b27e69af19447e94f63ec9de8290763ddf901c756": {
+ "signature": "a2dcb4a5d7e266049f9f865b27e69af19447e94f63ec9de8290763ddf901c756",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "3aaf66a9a1f5bfba3b78eb7964ce8bf4dcabf7132465a31e219c6961f53dec56": {
+ "signature": "3aaf66a9a1f5bfba3b78eb7964ce8bf4dcabf7132465a31e219c6961f53dec56",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "c6ed8bf76382b72621892d895d0659eb8ed66ef400f5d38506a3b62129b0f60e": {
+ "signature": "c6ed8bf76382b72621892d895d0659eb8ed66ef400f5d38506a3b62129b0f60e",
+ "alternativeSignatures": [
+ "07873a6bbdd04caf121ed279cd4c24e55fb79ae3e86083c413b839d8d5e81cba"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "c511a0f0c15b79748a62ee0198689e7a0c8c2af102730c337823f6cd52b3ec66": {
+ "signature": "c511a0f0c15b79748a62ee0198689e7a0c8c2af102730c337823f6cd52b3ec66",
+ "alternativeSignatures": [
+ "7142b2e2126a0c0e5bf2ad08e9e56d405620fbb9f12dfcd3f90a9dfcc30f8bf5"
+ ],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "bfe258b52e19062b9009a68549bff3b2c99a6105f493cbf14332b3366691d446": {
+ "signature": "bfe258b52e19062b9009a68549bff3b2c99a6105f493cbf14332b3366691d446",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "52364f6839cf4bc824f1c82a31f3c7ee1cfb228383b3bee476ef7442526c0de8": {
+ "signature": "52364f6839cf4bc824f1c82a31f3c7ee1cfb228383b3bee476ef7442526c0de8",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "cef12040ed2c91d3bd7eba717e6c4bff8e547cb6d2b40363f1d859b02c873276": {
+ "signature": "cef12040ed2c91d3bd7eba717e6c4bff8e547cb6d2b40363f1d859b02c873276",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "ab290d190fa6582f2826c9b8524a4013ea67380f65328bc39c31dbcba59ec63c": {
+ "signature": "ab290d190fa6582f2826c9b8524a4013ea67380f65328bc39c31dbcba59ec63c",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "710963884a4d1e73d1ff4da0db7e1c8e1eeae25fe4a9e3c1de8b5019bb5d9d74": {
+ "signature": "710963884a4d1e73d1ff4da0db7e1c8e1eeae25fe4a9e3c1de8b5019bb5d9d74",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "db276fb1ea2a8e74e7ab80522362b8f402d361652ca823d7cab59465d038eb82": {
+ "signature": "db276fb1ea2a8e74e7ab80522362b8f402d361652ca823d7cab59465d038eb82",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "807277ed6647bcdc3eab2e24d8fbcaca0a6506d2ed455248b0497ceb42831e30": {
+ "signature": "807277ed6647bcdc3eab2e24d8fbcaca0a6506d2ed455248b0497ceb42831e30",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "685288ad132baddbcdf7a2201960f6d48805151f1aef2e094c4dbc16841b3e54": {
+ "signature": "685288ad132baddbcdf7a2201960f6d48805151f1aef2e094c4dbc16841b3e54",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "e972eb97ea7ea4a9524820036a42557f13a48240b6083c7baa0d465c00adfdee": {
+ "signature": "e972eb97ea7ea4a9524820036a42557f13a48240b6083c7baa0d465c00adfdee",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ },
+ "1b2c907630acaff5b6e62eb4895043c82e93d885331f1f46296812634fd30abe": {
+ "signature": "1b2c907630acaff5b6e62eb4895043c82e93d885331f1f46296812634fd30abe",
+ "alternativeSignatures": [],
+ "memberOf": [
+ "default"
+ ],
+ "createdDate": "2024-04-03 14:41:43Z"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/SourceBuild/content/eng/Versions.props b/src/SourceBuild/content/eng/Versions.props
index 54b507d2d..a78403a54 100644
--- a/src/SourceBuild/content/eng/Versions.props
+++ b/src/SourceBuild/content/eng/Versions.props
@@ -30,7 +30,7 @@
These URLs can't be composed from their base URL and version as we read them from the
prep.sh and pipeline scripts, outside of MSBuild.
-->
- https://dotnetcli.azureedge.net/source-built-artifacts/assets/Private.SourceBuilt.Artifacts.8.0.102-servicing.24073.1.centos.8-x64.tar.gz
- https://dotnetcli.azureedge.net/source-built-artifacts/sdks/dotnet-sdk-8.0.102-centos.8-x64.tar.gz
+ https://dotnetcli.azureedge.net/source-built-artifacts/assets/Private.SourceBuilt.Artifacts.8.0.105-servicing.24224.1.centos.9-x64.tar.gz
+ https://dotnetcli.azureedge.net/source-built-artifacts/sdks/dotnet-sdk-8.0.105-centos.9-x64.tar.gz
diff --git a/src/SourceBuild/content/eng/pipelines/ci.yml b/src/SourceBuild/content/eng/pipelines/ci.yml
index 55b6a212d..0bf7fda81 100644
--- a/src/SourceBuild/content/eng/pipelines/ci.yml
+++ b/src/SourceBuild/content/eng/pipelines/ci.yml
@@ -15,10 +15,31 @@ pr:
- release/*
- internal/release/*
-stages:
-- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- - template: templates/stages/vmr-scan.yml
+resources:
+ repositories:
+ - repository: 1ESPipelineTemplates
+ type: git
+ name: 1ESPipelineTemplates/1ESPipelineTemplates
+ ref: refs/tags/release
-- template: /src/installer/eng/pipelines/templates/stages/vmr-build.yml
+extends:
+ template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates
parameters:
- isBuiltFromVmr: true
+ sdl:
+ sourceAnalysisPool:
+ name: NetCore1ESPool-Internal
+ image: 1es-windows-2022
+ os: windows
+
+ baseline:
+ baselineFile: $(Build.SourcesDirectory)\.config\guardian\.gdnbaselines
+
+ customBuildTags:
+ - ES365AIMigrationTooling
+
+ stages:
+ - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
+ - template: /eng/pipelines/templates/stages/vmr-scan.yml@self
+ - template: /src/installer/eng/pipelines/templates/stages/vmr-build.yml@self
+ parameters:
+ isBuiltFromVmr: true
diff --git a/src/SourceBuild/content/eng/pipelines/pr.yml b/src/SourceBuild/content/eng/pipelines/pr.yml
new file mode 100644
index 000000000..dcebbcf54
--- /dev/null
+++ b/src/SourceBuild/content/eng/pipelines/pr.yml
@@ -0,0 +1,18 @@
+# This is the non-1ES PR pipeline for dotnet/dotnet
+# https://dev.azure.com/dnceng-public/public/_build?definitionId=240
+
+trigger: none
+pr:
+ branches:
+ include:
+ - main
+ - release/*
+ - internal/release/*
+
+stages:
+- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
+ - template: templates/stages/vmr-scan.yml
+
+- template: /src/installer/eng/pipelines/templates/stages/vmr-build.yml
+ parameters:
+ isBuiltFromVmr: true
diff --git a/src/SourceBuild/content/eng/pipelines/source-build-sdk-diff-tests.yml b/src/SourceBuild/content/eng/pipelines/source-build-sdk-diff-tests.yml
new file mode 100644
index 000000000..6704e6a0b
--- /dev/null
+++ b/src/SourceBuild/content/eng/pipelines/source-build-sdk-diff-tests.yml
@@ -0,0 +1,70 @@
+schedules:
+- cron: "0 11 * * 1-5"
+ displayName: Run on weekdays at 11am UTC
+ branches:
+ include:
+ - main
+
+# Relies on dotnet-source-build being in the same repo as this pipeline
+# https://learn.microsoft.com/en-us/azure/devops/pipelines/process/pipeline-triggers?view=azure-devops#branch-considerations
+resources:
+ pipelines:
+ - pipeline: dotnet-source-build
+ source: dotnet-source-build
+ trigger:
+ branches:
+ include:
+ - release/*.0.1xx*
+ - internal/release/*.0.1xx*
+
+pr: none
+trigger: none
+
+pool:
+ name: NetCore1ESPool-Svc-Internal
+ demands: ImageOverride -equals 1es-ubuntu-2004
+
+parameters:
+- name: dotnetDotnetRunId
+ displayName: 'Specific dotnet-dotnet run ID number (e.g `2108850`)'
+ type: string
+ default: ' '
+
+variables:
+- template: /src/installer/eng/pipelines/templates/variables/vmr-build.yml@self
+
+jobs:
+- template: templates/jobs/sdk-diff-tests.yml
+ parameters:
+ buildName: ${{ format('{0}_Offline_MsftSdk', variables.centOSStreamName) }}
+ targetRid: ${{ variables.centOSStreamX64Rid }}
+ architecture: x64
+ dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }}
+
+- template: templates/jobs/sdk-diff-tests.yml
+ parameters:
+ buildName: ${{ format('{0}_Offline_MsftSdk', variables.alpineName) }}
+ targetRid: ${{ variables.alpineX64Rid }}
+ architecture: x64
+ dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }}
+
+- template: templates/jobs/sdk-diff-tests.yml
+ parameters:
+ buildName: ${{ format('{0}_Offline_MsftSdk', variables.fedoraName) }}
+ targetRid: ${{ variables.fedoraX64Rid }}
+ architecture: x64
+ dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }}
+
+- template: templates/jobs/sdk-diff-tests.yml
+ parameters:
+ buildName: ${{ format('{0}_Offline_MsftSdk', variables.ubuntuName) }}
+ targetRid: ${{ variables.ubuntuX64Rid }}
+ architecture: x64
+ dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }}
+
+- template: templates/jobs/sdk-diff-tests.yml
+ parameters:
+ buildName: ${{ format('{0}Arm64_Offline_MsftSdk', variables.ubuntuName) }}
+ targetRid: ${{ variables.ubuntuArm64Rid }}
+ architecture: arm64
+ dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }}
diff --git a/eng/pipelines/templates/jobs/sdk-diff-tests.yml b/src/SourceBuild/content/eng/pipelines/templates/jobs/sdk-diff-tests.yml
similarity index 91%
rename from eng/pipelines/templates/jobs/sdk-diff-tests.yml
rename to src/SourceBuild/content/eng/pipelines/templates/jobs/sdk-diff-tests.yml
index d7ed9a81a..52435dbc0 100644
--- a/eng/pipelines/templates/jobs/sdk-diff-tests.yml
+++ b/src/SourceBuild/content/eng/pipelines/templates/jobs/sdk-diff-tests.yml
@@ -34,7 +34,7 @@ jobs:
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)
if [[ -z "$installer_build" ]]; then
echo "Could not find a build of installer for commit '$installer_sha'"
@@ -100,7 +100,7 @@ jobs:
exit 1
fi
- eng/common/build.sh -bl --projects $(Build.SourcesDirectory)/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/Microsoft.DotNet.SourceBuild.SmokeTests.csproj --restore
+ eng/common/build.sh -bl --projects $(Build.SourcesDirectory)/test/Microsoft.DotNet.SourceBuild.SmokeTests/Microsoft.DotNet.SourceBuild.SmokeTests.csproj --restore
echo "##vso[task.setvariable variable=Platform]$platform"
echo "##vso[task.setvariable variable=MsftSdkTarballPath]$(Pipeline.Workspace)/Artifacts/$msft_sdk_tarball_name"
@@ -110,7 +110,7 @@ jobs:
- script: >
.dotnet/dotnet test
- $(Build.SourcesDirectory)/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/Microsoft.DotNet.SourceBuild.SmokeTests.csproj
+ $(Build.SourcesDirectory)/test/Microsoft.DotNet.SourceBuild.SmokeTests/Microsoft.DotNet.SourceBuild.SmokeTests.csproj
--filter "Category=SdkContent"
--logger:'trx;LogFileName=$(Agent.JobName)_SDKDiffTests.trx'
--logger:'console;verbosity=detailed'
@@ -137,7 +137,6 @@ jobs:
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 "Build.binlog" -exec cp {} --parents -t ${targetFolder} \;
- cd "$(Build.SourcesDirectory)/src/SourceBuild/content"
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} \;
@@ -158,7 +157,7 @@ jobs:
inputs:
testRunner: vSTest
testResultsFiles: '*.trx'
- searchFolder: $(Build.SourcesDirectory)/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/TestResults
+ searchFolder: $(Build.SourcesDirectory)/test/Microsoft.DotNet.SourceBuild.SmokeTests/TestResults
mergeTestResults: true
publishRunAttachments: true
testRunTitle: $(Agent.JobName)
diff --git a/src/SourceBuild/content/eng/pipelines/templates/stages/vmr-scan.yml b/src/SourceBuild/content/eng/pipelines/templates/stages/vmr-scan.yml
index 6024ce182..28541d572 100644
--- a/src/SourceBuild/content/eng/pipelines/templates/stages/vmr-scan.yml
+++ b/src/SourceBuild/content/eng/pipelines/templates/stages/vmr-scan.yml
@@ -3,17 +3,22 @@ stages:
displayName: Tag & Scan
dependsOn: []
variables:
- - template: /eng/common/templates/variables/pool-providers.yml
+ - ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ - template: /eng/common/templates/variables/pool-providers.yml
+ - ${{ else }}:
+ - template: /eng/common/templates-official/variables/pool-providers.yml
jobs:
- job: Tag_n_Scan
displayName: Tag & Scan
pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
name: $(DncEngPublicBuildPool)
- demands: ImageOverride -equals Build.Ubuntu.2004.Amd64.Open
+ image: 1es-ubuntu-2004-open
+ os: linux
${{ if eq(variables['System.TeamProject'], 'internal') }}:
name: $(DncEngInternalBuildPool)
- demands: ImageOverride -equals Build.Ubuntu.2004.Amd64
+ image: 1es-ubuntu-2004
+ os: linux
steps:
- checkout: self
diff --git a/eng/pipelines/templates/variables/pipelines.yml b/src/SourceBuild/content/eng/pipelines/templates/variables/pipelines.yml
similarity index 100%
rename from eng/pipelines/templates/variables/pipelines.yml
rename to src/SourceBuild/content/eng/pipelines/templates/variables/pipelines.yml
diff --git a/eng/pipelines/source-build-license-scan.yml b/src/SourceBuild/content/eng/pipelines/vmr-license-scan.yml
similarity index 100%
rename from eng/pipelines/source-build-license-scan.yml
rename to src/SourceBuild/content/eng/pipelines/vmr-license-scan.yml
diff --git a/src/SourceBuild/content/global.json b/src/SourceBuild/content/global.json
index bda4e743d..c598d7514 100644
--- a/src/SourceBuild/content/global.json
+++ b/src/SourceBuild/content/global.json
@@ -1,6 +1,6 @@
{
"tools": {
- "dotnet": "8.0.102"
+ "dotnet": "8.0.105"
},
"msbuild-sdks": {
"Microsoft.Build.CentralPackageVersions": "2.0.1",
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/LicenseScanTests.cs b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/LicenseScanTests.cs
index 8a088ba4d..72d71ef07 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/LicenseScanTests.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/LicenseScanTests.cs
@@ -61,6 +61,7 @@ public class LicenseScanTests : TestBase
"cc-by-sa-3.0", // https://creativecommons.org/licenses/by-sa/3.0/legalcode
"cc-by-sa-4.0", // https://creativecommons.org/licenses/by-sa/4.0/legalcode
"cc-pd", // https://creativecommons.org/publicdomain/mark/1.0/
+ "cc-sa-1.0", // https://github.com/nexB/scancode-toolkit/blob/develop/src/licensedcode/data/licenses/cc-sa-1.0.LICENSE
"epl-1.0", // https://opensource.org/license/epl-1-0/
"generic-cla", // https://github.com/nexB/scancode-toolkit/blob/develop/src/licensedcode/data/licenses/generic-cla.LICENSE
"gpl-1.0-plus", // https://opensource.org/license/gpl-1-0/
@@ -76,6 +77,7 @@ public class LicenseScanTests : TestBase
"lzma-sdk-9.22", // https://github.com/nexB/scancode-toolkit/blob/develop/src/licensedcode/data/licenses/lzma-sdk-9.22.LICENSE
"mit", // https://opensource.org/license/mit/
"mit-addition", // https://github.com/nexB/scancode-toolkit/blob/develop/src/licensedcode/data/licenses/mit-addition.LICENSE
+ "mit-testregex", // https://github.com/nexB/scancode-toolkit/blob/develop/src/licensedcode/data/licenses/mit-testregex.LICENSE
"ms-patent-promise", // https://github.com/nexB/scancode-toolkit/blob/develop/src/licensedcode/data/licenses/ms-patent-promise.LICENSE
"ms-lpl", // https://github.com/nexB/scancode-toolkit/blob/develop/src/licensedcode/data/licenses/ms-lpl.LICENSE
"ms-pl", // https://opensource.org/license/ms-pl-html/
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/LicenseExclusions.txt b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/LicenseExclusions.txt
index 9bcfbafc2..4c044d907 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/LicenseExclusions.txt
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/LicenseExclusions.txt
@@ -222,11 +222,11 @@ src/source-build-externals/patches/application-insights/0002-Remove-WebGrease-fr
# False positive
src/source-build-reference-packages/src/targetPacks/ILsrc/microsoft.netcore.app.ref/3.*/THIRD-PARTY-NOTICES.TXT|codesourcery-2004
-src/source-build-reference-packages/src/targetPacks/ILsrc/netstandard.library/1.6.1/ThirdPartyNotices.txt|unknown
-src/source-build-reference-packages/src/targetPacks/ILsrc/netstandard.library/2.0.*/THIRD-PARTY-NOTICES.TXT|unknown
+src/source-build-reference-packages/src/targetPacks/ILsrc/netstandard.library/1.6.1/ThirdPartyNotices.txt|unknown-license-reference
+src/source-build-reference-packages/src/targetPacks/ILsrc/netstandard.library/2.0.*/THIRD-PARTY-NOTICES.TXT|unknown-license-reference
src/source-build-reference-packages/src/targetPacks/ILsrc/netstandard.library.ref/2.1.0/THIRD-PARTY-NOTICES.TXT|codesourcery-2004
src/source-build-reference-packages/src/textOnlyPackages/src/microsoft.codeanalysis.collections/4.2.0-1.22102.8/ThirdPartyNotices.rtf|json
-src/source-build-reference-packages/src/textOnlyPackages/src/microsoft.netcore.*/1.*/ThirdPartyNotices.txt|unknown
+src/source-build-reference-packages/src/textOnlyPackages/src/microsoft.netcore.*/1.*/ThirdPartyNotices.txt|unknown-license-reference
src/source-build-reference-packages/src/textOnlyPackages/src/microsoft.private.intellisense/8.0.*/IntellisenseFiles/*/1033/System.Security.Permissions.xml|unknown-license-reference
# Contains references to licenses which are not applicable to the source
diff --git a/src/SourceBuild/patches/runtime/0001-crashinfo-use-off_t-instead-of-off64_t.patch b/src/SourceBuild/patches/runtime/0001-crashinfo-use-off_t-instead-of-off64_t.patch
new file mode 100644
index 000000000..6569164b8
--- /dev/null
+++ b/src/SourceBuild/patches/runtime/0001-crashinfo-use-off_t-instead-of-off64_t.patch
@@ -0,0 +1,38 @@
+From 05ad51a9be428012328a1ee199a4edaff20b5efe Mon Sep 17 00:00:00 2001
+From: Antoine Martin
+Date: Tue, 12 Sep 2023 18:55:46 -0400
+Subject: [PATCH] crashinfo.cpp/crasinfounix.cpp: use off_t instead of off64_t
+
+Backport: https://github.com/dotnet/runtime/pull/101272
+
+---
+ src/coreclr/debug/createdump/crashinfo.cpp | 2 +-
+ src/coreclr/debug/createdump/crashinfounix.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/coreclr/debug/createdump/crashinfo.cpp b/src/coreclr/debug/createdump/crashinfo.cpp
+index 996f3a81935d..d1d1b0ea0218 100644
+--- a/src/coreclr/debug/createdump/crashinfo.cpp
++++ b/src/coreclr/debug/createdump/crashinfo.cpp
+@@ -803,7 +803,7 @@ CrashInfo::PageMappedToPhysicalMemory(uint64_t start)
+ }
+
+ uint64_t pagemapOffset = (start / PAGE_SIZE) * sizeof(uint64_t);
+- uint64_t seekResult = lseek64(m_fdPagemap, (off64_t) pagemapOffset, SEEK_SET);
++ uint64_t seekResult = lseek(m_fdPagemap, (off_t) pagemapOffset, SEEK_SET);
+ if (seekResult != pagemapOffset)
+ {
+ int seekErrno = errno;
+diff --git a/src/coreclr/debug/createdump/crashinfounix.cpp b/src/coreclr/debug/createdump/crashinfounix.cpp
+index 24b975e3d655..2f4ea079de3b 100644
+--- a/src/coreclr/debug/createdump/crashinfounix.cpp
++++ b/src/coreclr/debug/createdump/crashinfounix.cpp
+@@ -516,7 +516,7 @@ CrashInfo::ReadProcessMemory(void* address, void* buffer, size_t size, size_t* r
+ // performance optimization.
+ m_canUseProcVmReadSyscall = false;
+ assert(m_fdMem != -1);
+- *read = pread64(m_fdMem, buffer, size, (off64_t)address);
++ *read = pread(m_fdMem, buffer, size, (off_t)address);
+ }
+
+ if (*read == (size_t)-1)
diff --git a/src/SourceBuild/patches/runtime/0002-Update-MSBuild-dependencies.patch b/src/SourceBuild/patches/runtime/0002-Update-MSBuild-dependencies.patch
new file mode 100644
index 000000000..267e45546
--- /dev/null
+++ b/src/SourceBuild/patches/runtime/0002-Update-MSBuild-dependencies.patch
@@ -0,0 +1,79 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Nikola Milosavljevic
+Date: Tue, 23 Apr 2024 01:55:17 +0000
+Subject: [PATCH] Update MSBuild dependencies
+
+Backport: https://github.com/dotnet/runtime/issues/101395
+---
+ eng/Version.Details.xml | 12 ++++++++++++
+ eng/Versions.props | 6 +++---
+ src/tasks/AotCompilerTask/MonoAOTCompiler.csproj | 1 -
+ src/tasks/WasmAppBuilder/WasmAppBuilder.csproj | 3 ---
+ 4 files changed, 15 insertions(+), 7 deletions(-)
+
+diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
+index fe35dc0997e..b90337395f6 100644
+--- a/eng/Version.Details.xml
++++ b/eng/Version.Details.xml
+@@ -414,6 +414,18 @@
+ https://github.com/dotnet/msbuild
+ 195e7f5a3a8e51c37d83cd9e54cb99dc3fc69c22
+
++
++ https://github.com/dotnet/msbuild
++ 195e7f5a3a8e51c37d83cd9e54cb99dc3fc69c22
++
++
++ https://github.com/dotnet/msbuild
++ 195e7f5a3a8e51c37d83cd9e54cb99dc3fc69c22
++
++
++ https://github.com/dotnet/msbuild
++ 195e7f5a3a8e51c37d83cd9e54cb99dc3fc69c22
++
+
+ https://github.com/dotnet/msbuild
+ 195e7f5a3a8e51c37d83cd9e54cb99dc3fc69c22
+diff --git a/eng/Versions.props b/eng/Versions.props
+index f012e409095..bf16c6ee71f 100644
+--- a/eng/Versions.props
++++ b/eng/Versions.props
+@@ -173,9 +173,9 @@
+ 1.0.4-preview6.19326.1
+ 2.0.5
+ 17.8.3
+- $(MicrosoftBuildVersion)
+- $(MicrosoftBuildVersion)
+- $(MicrosoftBuildVersion)
++ 17.8.3
++ 17.8.3
++ 17.8.3
+ 6.2.4
+ 6.2.4
+ 7.0.412701
+diff --git a/src/tasks/AotCompilerTask/MonoAOTCompiler.csproj b/src/tasks/AotCompilerTask/MonoAOTCompiler.csproj
+index e76730b5aec..88ae0fb136c 100644
+--- a/src/tasks/AotCompilerTask/MonoAOTCompiler.csproj
++++ b/src/tasks/AotCompilerTask/MonoAOTCompiler.csproj
+@@ -14,7 +14,6 @@
+
+
+
+-
+
+
+
+diff --git a/src/tasks/WasmAppBuilder/WasmAppBuilder.csproj b/src/tasks/WasmAppBuilder/WasmAppBuilder.csproj
+index 34a51095986..d8c95954dd8 100644
+--- a/src/tasks/WasmAppBuilder/WasmAppBuilder.csproj
++++ b/src/tasks/WasmAppBuilder/WasmAppBuilder.csproj
+@@ -24,9 +24,6 @@
+
+
+
+-
+-
+-
+
+
+
diff --git a/src/redist/targets/BundledTemplates.targets b/src/redist/targets/BundledTemplates.targets
index 4ab2c37a7..d6e428bb3 100644
--- a/src/redist/targets/BundledTemplates.targets
+++ b/src/redist/targets/BundledTemplates.targets
@@ -32,19 +32,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -58,63 +45,12 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-