diff --git a/.azure/pipelines/azure-pipelines-mirror-within-azdo.yml b/.azure/pipelines/azure-pipelines-mirror-within-azdo.yml
index 818114af0250..4725ab9fba1c 100644
--- a/.azure/pipelines/azure-pipelines-mirror-within-azdo.yml
+++ b/.azure/pipelines/azure-pipelines-mirror-within-azdo.yml
@@ -3,7 +3,7 @@ trigger:
batch: true
branches:
include:
- - internal/release/6.0
+ - internal/release/8.0
parameters:
# Run the pipeline manually (usually disallowed)
diff --git a/.azure/pipelines/blazor-daily-tests.yml b/.azure/pipelines/blazor-daily-tests.yml
index c22f30db60dd..df3d335489d2 100644
--- a/.azure/pipelines/blazor-daily-tests.yml
+++ b/.azure/pipelines/blazor-daily-tests.yml
@@ -7,7 +7,6 @@
# We just need one Windows machine because all it does is trigger SauceLabs.
variables:
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
- - group: DotNet-MSRC-Storage
- group: AzureDevOps-Artifact-Feeds-Pats
- name: SAUCE_CONNECT_DOWNLOAD_ON_INSTALL
value: true
diff --git a/.azure/pipelines/ci-public.yml b/.azure/pipelines/ci-public.yml
new file mode 100644
index 000000000000..f7d33e8e4c09
--- /dev/null
+++ b/.azure/pipelines/ci-public.yml
@@ -0,0 +1,622 @@
+#
+# See https://learn.microsoft.com/en-us/azure/devops/pipelines/yaml-schema for details on this file.
+#
+
+# Configure which branches trigger builds
+trigger:
+ batch: true
+ branches:
+ include:
+ - main
+ - release/*
+
+# Run PR validation on all branches
+# This doesn't have any path exclusions, even for things like docs, because
+# we have it configured in GitHub as a required check, and for it to pass
+# it must actually run, even if it's not relevant to a particular change.
+pr:
+ autoCancel: true
+ branches:
+ include:
+ - '*'
+
+parameters:
+# Choose whether to skip tests when running pipeline manually.
+- name: skipTests
+ default: false
+ displayName: Skip tests?
+ type: boolean
+# Parameters below are ignored in public builds.
+#
+# Choose whether to enable binlogs when running pipeline manually.
+# Binary logs are enabled by default in public builds and aren't designed to be disabled there.
+- name: produceBinlogs
+ default: false
+ displayName: Produce binlogs?
+ type: boolean
+
+variables:
+- name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE
+ value: true
+- name: _TeamName
+ value: AspNetCore
+- name: _PublishUsingPipelines
+ value: true
+- ${{ if or(startswith(variables['Build.SourceBranch'], 'refs/heads/release/'), startswith(variables['Build.SourceBranch'], 'refs/heads/internal/release/'), eq(variables['Build.Reason'], 'Manual')) }}:
+ - name: PostBuildSign
+ value: false
+- ${{ else }}:
+ - name: PostBuildSign
+ value: true
+- name: _UseHelixOpenQueues
+ value: 'true'
+- name: _BuildArgs
+ value: '/p:SkipTestBuild=true /p:PostBuildSign=$(PostBuildSign)'
+- name: _PublishArgs
+ value: ''
+# Write binary logs for all main Windows build steps except the x86 one in public and PR builds.
+- name: WindowsArm64LogArgs
+ value: /bl:artifacts/log/Release/Build.arm64.binlog
+- name: Windows64LogArgs
+ value: /bl:artifacts/log/Release/Build.x64.binlog
+- name: Windows86LogArgs
+ value: -ExcludeCIBinaryLog
+- name: WindowsSignLogArgs
+ value: /bl:artifacts/log/Release/Build.CodeSign.binlog
+- name: WindowsInstallersLogArgs
+ value: /bl:artifacts/log/Release/Build.Installers.binlog
+- name: WindowsArm64InstallersLogArgs
+ value: /bl:artifacts/log/Release/Build.Installers.Arm64.binlog
+- name: _SignType
+ value: ''
+- name: _InternalRuntimeDownloadArgs
+ value: ''
+- name: _InternalRuntimeDownloadCodeSignArgs
+ value: ''
+- name: Codeql.Enabled
+ value: false
+- name: Codeql.SkipTaskAutoInjection
+ value: true
+- template: /eng/common/templates/variables/pool-providers.yml
+
+stages:
+- stage: build
+ displayName: Build
+ jobs:
+ # Code check
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Code_check
+ jobDisplayName: Code check
+ agentOs: Windows
+ steps:
+ - powershell: ./eng/scripts/CodeCheck.ps1 -ci $(_InternalRuntimeDownloadArgs)
+ displayName: Run eng/scripts/CodeCheck.ps1
+ artifacts:
+ - name: Code_Check_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+
+ # Build Windows (x64/x86/arm64)
+ - template: jobs/default-build.yml
+ parameters:
+ codeSign: true
+ jobName: Windows_build
+ jobDisplayName: "Build: Windows x64/x86/arm64"
+ agentOs: Windows
+ steps:
+ - ${{ if notIn(variables['Build.Reason'], 'PullRequest') }}:
+ - script: "echo ##vso[build.addbuildtag]daily-build"
+ displayName: 'Set CI daily-build tag'
+
+ # !!! NOTE !!! Some of these steps have disabled code signing.
+ # This is intentional to workaround https://github.com/dotnet/arcade/issues/1957 which always re-submits for code-signing, even
+ # if they have already been signed. This results in slower builds due to re-submitting the same .nupkg many times for signing.
+ # The sign settings have been configured to
+ - script: ./eng/build.cmd
+ -ci
+ -nativeToolsOnMachine
+ -arch x64
+ -pack
+ -all
+ $(_BuildArgs)
+ $(_InternalRuntimeDownloadArgs)
+ $(Windows64LogArgs)
+ displayName: Build x64
+
+ # Build the x86 shared framework
+ # This is going to actually build x86 native assets.
+ - script: ./eng/build.cmd
+ -ci
+ -noBuildRepoTasks
+ -arch x86
+ -pack
+ -all
+ -noBuildJava
+ -noBuildNative
+ /p:OnlyPackPlatformSpecificPackages=true
+ $(_BuildArgs)
+ $(_InternalRuntimeDownloadArgs)
+ $(Windows86LogArgs)
+ displayName: Build x86
+
+ # Build the arm64 shared framework
+ - script: ./eng/build.cmd
+ -ci
+ -noBuildRepoTasks
+ -arch arm64
+ -sign
+ -pack
+ -noBuildJava
+ -noBuildNative
+ /p:DotNetSignType=$(_SignType)
+ /p:OnlyPackPlatformSpecificPackages=true
+ $(_BuildArgs)
+ $(_InternalRuntimeDownloadArgs)
+ $(WindowsArm64LogArgs)
+ displayName: Build ARM64
+
+ # Submit a manual build (in public or internal project) to validate changes to site extensions.
+ - ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
+ - script: .\src\SiteExtensions\build.cmd
+ -ci
+ -noBuildRepoTasks
+ -pack
+ -noBuildDeps
+ -noBuildNative
+ $(_BuildArgs)
+ $(_InternalRuntimeDownloadArgs)
+ displayName: Build SiteExtension
+
+ # This runs code-signing on all packages, zips, and jar files as defined in build/CodeSign.targets. If
+ # https://github.com/dotnet/arcade/issues/1957 is resolved, consider running code-signing inline with the other
+ # previous steps. Sign check is disabled because it is run in a separate step below, after installers are built.
+ - script: ./eng/build.cmd
+ -ci
+ -noBuildRepoTasks
+ -noBuildNative
+ -noBuild
+ -sign
+ /p:DotNetSignType=$(_SignType)
+ $(_BuildArgs)
+ $(WindowsSignLogArgs)
+ displayName: Code sign packages
+
+ # Windows installers bundle x86/x64/arm64 assets
+ - script: ./eng/build.cmd
+ -ci
+ -noBuildRepoTasks
+ -sign
+ -buildInstallers
+ -noBuildNative
+ /p:DotNetSignType=$(_SignType)
+ $(_BuildArgs)
+ $(_InternalRuntimeDownloadArgs)
+ $(WindowsInstallersLogArgs)
+ displayName: Build Installers
+
+ # Windows installers bundle and sharedfx msi for arm64
+ - script: ./eng/build.cmd
+ -ci
+ -noBuildRepoTasks
+ -arch arm64
+ -sign
+ -buildInstallers
+ -noBuildNative
+ /p:DotNetSignType=$(_SignType)
+ /p:AssetManifestFileName=aspnetcore-win.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ /p:PublishInstallerBaseVersion=true
+ $(_InternalRuntimeDownloadArgs)
+ $(WindowsArm64InstallersLogArgs)
+ displayName: Build ARM64 Installers
+
+ artifacts:
+ - name: Windows_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: Windows_Packages
+ path: artifacts/packages/
+ - name: Windows_HostingBundle
+ path: artifacts/bin/WindowsHostingBundle
+ - name: Windows_ANCM_Msi
+ path: artifacts/bin/ANCMv2
+ - name: Windows_ANCMIISExpress_Msi
+ path: artifacts/bin/AncmIISExpressV2
+
+ # Build MacOS arm64
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: MacOs_arm64_build
+ jobDisplayName: "Build: macOS arm64"
+ agentOs: macOs
+ timeoutInMinutes: 90
+ buildArgs:
+ --arch arm64
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -p:AssetManifestFileName=aspnetcore-MacOS_arm64.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ $(_InternalRuntimeDownloadArgs)
+ installNodeJs: false
+ artifacts:
+ - name: MacOS_arm64_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: MacOS_arm64_Packages
+ path: artifacts/packages/
+
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - template: jobs/codesign-xplat.yml
+ parameters:
+ inputName: MacOS_arm64
+
+ # Build MacOS x64
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: MacOs_x64_build
+ jobDisplayName: "Build: macOS x64"
+ agentOs: macOs
+ timeoutInMinutes: 90
+ buildArgs:
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -p:AssetManifestFileName=aspnetcore-MacOS_x64.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ $(_InternalRuntimeDownloadArgs)
+ installNodeJs: false
+ artifacts:
+ - name: MacOS_x64_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: MacOS_x64_Packages
+ path: artifacts/packages/
+
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - template: jobs/codesign-xplat.yml
+ parameters:
+ inputName: MacOS_x64
+
+ # Build Linux x64
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Linux_x64_build
+ jobDisplayName: "Build: Linux x64"
+ agentOs: Linux
+ useHostedUbuntu: false
+ steps:
+ - script: ./eng/build.sh
+ --ci
+ --arch x64
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ $(_BuildArgs)
+ $(_InternalRuntimeDownloadArgs)
+ displayName: Run build.sh
+ - script: git clean -xfd src/**/obj/;
+ ./dockerbuild.sh bionic --ci --nobl --arch x64 --build-installers --no-build-deps --no-build-nodejs
+ -p:OnlyPackPlatformSpecificPackages=true -p:BuildRuntimeArchive=false -p:LinuxInstallerType=deb
+ $(_BuildArgs)
+ $(_InternalRuntimeDownloadArgs)
+ displayName: Build Debian installers
+ - script: git clean -xfd src/**/obj/;
+ ./dockerbuild.sh rhel --ci --nobl --arch x64 --build-installers --no-build-deps --no-build-nodejs
+ -p:OnlyPackPlatformSpecificPackages=true -p:BuildRuntimeArchive=false -p:LinuxInstallerType=rpm
+ -p:AssetManifestFileName=aspnetcore-Linux_x64.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ $(_InternalRuntimeDownloadArgs)
+ displayName: Build RPM installers
+ installNodeJs: false
+ artifacts:
+ - name: Linux_x64_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: Linux_x64_Packages
+ path: artifacts/packages/
+
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - template: jobs/codesign-xplat.yml
+ parameters:
+ inputName: Linux_x64
+
+ # Build Linux ARM
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Linux_arm_build
+ jobDisplayName: "Build: Linux ARM"
+ agentOs: Linux
+ buildArgs:
+ --arch arm
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -p:AssetManifestFileName=aspnetcore-Linux_arm.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ $(_InternalRuntimeDownloadArgs)
+ installNodeJs: false
+ artifacts:
+ - name: Linux_arm_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: Linux_arm_Packages
+ path: artifacts/packages/
+
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - template: jobs/codesign-xplat.yml
+ parameters:
+ inputName: Linux_arm
+
+ # Build Linux ARM64
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Linux_arm64_build
+ jobDisplayName: "Build: Linux ARM64"
+ agentOs: Linux
+ steps:
+ - script: ./eng/build.sh
+ --ci
+ --arch arm64
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ $(_BuildArgs)
+ $(_InternalRuntimeDownloadArgs)
+ displayName: Run build.sh
+ - script: git clean -xfd src/**/obj/;
+ ./dockerbuild.sh rhel --ci --nobl --arch arm64 --build-installers --no-build-deps --no-build-nodejs
+ -p:OnlyPackPlatformSpecificPackages=true -p:BuildRuntimeArchive=false -p:LinuxInstallerType=rpm
+ -p:AssetManifestFileName=aspnetcore-Linux_arm64.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ $(_InternalRuntimeDownloadArgs)
+ displayName: Build RPM installers
+ installNodeJs: false
+ artifacts:
+ - name: Linux_arm64_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: Linux_arm64_Packages
+ path: artifacts/packages/
+
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - template: jobs/codesign-xplat.yml
+ parameters:
+ inputName: Linux_arm64
+
+ # Build Linux Musl x64
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Linux_musl_x64_build
+ jobDisplayName: "Build: Linux Musl x64"
+ agentOs: Linux
+ container: mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net8.0-build-amd64
+ buildArgs:
+ --arch x64
+ --os-name linux-musl
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -p:AssetManifestFileName=aspnetcore-Linux_musl_x64.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ $(_InternalRuntimeDownloadArgs)
+ installNodeJs: false
+ disableComponentGovernance: true
+ artifacts:
+ - name: Linux_musl_x64_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: Linux_musl_x64_Packages
+ path: artifacts/packages/
+
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - template: jobs/codesign-xplat.yml
+ parameters:
+ inputName: Linux_musl_x64
+
+ # Build Linux Musl ARM
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Linux_musl_arm_build
+ jobDisplayName: "Build: Linux Musl ARM"
+ agentOs: Linux
+ useHostedUbuntu: false
+ container: mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net8.0-build-amd64
+ buildArgs:
+ --arch arm
+ --os-name linux-musl
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -p:AssetManifestFileName=aspnetcore-Linux_musl_arm.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ $(_InternalRuntimeDownloadArgs)
+ installNodeJs: false
+ artifacts:
+ - name: Linux_musl_arm_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: Linux_musl_arm_Packages
+ path: artifacts/packages/
+
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - template: jobs/codesign-xplat.yml
+ parameters:
+ inputName: Linux_musl_arm
+
+ # Build Linux Musl ARM64
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Linux_musl_arm64_build
+ jobDisplayName: "Build: Linux Musl ARM64"
+ agentOs: Linux
+ useHostedUbuntu: false
+ container: mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net8.0-build-amd64
+ buildArgs:
+ --arch arm64
+ --os-name linux-musl
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -p:AssetManifestFileName=aspnetcore-Linux_musl_arm64.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ $(_InternalRuntimeDownloadArgs)
+ installNodeJs: false
+ artifacts:
+ - name: Linux_musl_arm64_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: Linux_musl_arm64_Packages
+ path: artifacts/packages/
+
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - template: jobs/codesign-xplat.yml
+ parameters:
+ inputName: Linux_musl_arm64
+
+ - ${{ if ne(parameters.skipTests, 'true') }}:
+ # Test jobs
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Windows_Test
+ jobDisplayName: "Test: Windows Server x64"
+ agentOs: Windows
+ isAzDOTestingJob: true
+ # Just uploading artifacts/logs/ files can take 15 minutes. Doubling the cancel timeout for this job.
+ cancelTimeoutInMinutes: 30
+ buildArgs: -all -pack -test -binaryLog /p:SkipHelixReadyTests=true /p:SkipIISNewHandlerTests=true /p:SkipIISTests=true
+ /p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunTemplateTests=false /p:RunBlazorPlaywrightTemplateTests=true
+ $(_InternalRuntimeDownloadArgs)
+ beforeBuild:
+ - powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1"
+ displayName: Setup IISExpress test certificates and schema
+ artifacts:
+ - name: Windows_Test_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: Windows_Test_Results_Attempt_$(System.JobAttempt)
+ path: artifacts/TestResults/
+ publishOnError: true
+ includeForks: true
+
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: MacOS_Test
+ jobDisplayName: "Test: macOS"
+ agentOs: macOS
+ timeoutInMinutes: 90
+ isAzDOTestingJob: true
+ buildArgs: --all --test --binaryLog "/p:RunTemplateTests=false /p:SkipHelixReadyTests=true" $(_InternalRuntimeDownloadArgs)
+ beforeBuild:
+ - bash: "./eng/scripts/install-nginx-mac.sh"
+ displayName: Installing Nginx
+ artifacts:
+ - name: MacOS_Test_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: MacOS_Test_Results_Attempt_$(System.JobAttempt)
+ path: artifacts/TestResults/
+ publishOnError: true
+ includeForks: true
+
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Linux_Test
+ jobDisplayName: "Test: Ubuntu x64"
+ agentOs: Linux
+ isAzDOTestingJob: true
+ useHostedUbuntu: false
+ buildArgs: --all --test --binaryLog "/p:RunTemplateTests=false /p:SkipHelixReadyTests=true" $(_InternalRuntimeDownloadArgs)
+ beforeBuild:
+ - bash: "./eng/scripts/install-nginx-linux.sh"
+ displayName: Installing Nginx
+ - bash: "echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p"
+ displayName: Increase inotify limit
+ artifacts:
+ - name: Linux_Test_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: Linux_Test_Results_Attempt_$(System.JobAttempt)
+ path: artifacts/TestResults/
+ publishOnError: true
+ includeForks: true
+
+ # Helix x64
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Helix_x64
+ jobDisplayName: 'Tests: Helix x64'
+ agentOs: Windows
+ timeoutInMinutes: 240
+ steps:
+ # Build the shared framework
+ - script: ./eng/build.cmd -ci -nativeToolsOnMachine -nobl -all -pack -arch x64
+ /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs)
+ displayName: Build shared fx
+ # -noBuildRepoTasks -noBuildNative -noBuild to avoid repeating work done in the previous step.
+ - script: ./eng/build.cmd -ci -nativeToolsOnMachine -nobl -all -noBuildRepoTasks -noBuildNative -noBuild -test
+ -projects eng\helix\helix.proj /p:IsHelixPRCheck=true /p:IsHelixJob=true
+ /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs)
+ displayName: Run build.cmd helix target
+ env:
+ HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues
+ SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops
+
+ artifacts:
+ - name: Helix_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+
+ # Source build
+ - template: /eng/common/templates/job/source-build.yml
+ parameters:
+ platform:
+ name: 'Managed'
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net8.0-build-amd64'
+ buildScript: './eng/build.sh $(_PublishArgs) --no-build-nodejs --no-build-repo-tasks $(_InternalRuntimeDownloadArgs)'
+ skipPublishValidation: true
+ jobProperties:
+ timeoutInMinutes: 120
+ variables:
+ # Log environment variables in binary logs to ease debugging
+ MSBUILDLOGALLENVIRONMENTVARIABLES: true
diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml
index b6f74001a1a7..5e4e2e533b16 100644
--- a/.azure/pipelines/ci.yml
+++ b/.azure/pipelines/ci.yml
@@ -21,17 +21,6 @@ pr:
include:
- '*'
-schedules:
-- cron: 0 9 * * 1
- displayName: "Run CodeQL3000 weekly, Monday at 2:00 AM PDT"
- branches:
- include:
- - release/2.1
- - release/6.0
- - release/7.0
- - main
- always: true
-
parameters:
# Choose whether to skip tests when running pipeline manually.
- name: skipTests
@@ -40,12 +29,6 @@ parameters:
type: boolean
# Parameters below are ignored in public builds.
#
-# Choose whether to run the CodeQL3000 tasks.
-# Manual builds align w/ official builds unless this parameter is true.
-- name: runCodeQL3000
- default: false
- displayName: Run CodeQL3000 tasks
- type: boolean
# Choose whether to enable binlogs when running pipeline manually.
# Binary logs are enabled by default in public builds and aren't designed to be disabled there.
- name: produceBinlogs
@@ -68,10 +51,10 @@ variables:
value: true
- name: _UseHelixOpenQueues
value: ${{ ne(variables['System.TeamProject'], 'internal') }}
-- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.SourceBranch'], 'refs/heads/main')) }}:
+- ${{ if and(notin(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.SourceBranch'], 'refs/heads/main')) }}:
- name: enableSourceIndex
value: true
-- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
+- ${{ if notin(variables['Build.Reason'], 'PullRequest') }}:
- name: _BuildArgs
value: /p:TeamName=$(_TeamName)
/p:OfficialBuildId=$(Build.BuildNumber)
@@ -99,12 +82,12 @@ variables:
value: -ExcludeCIBinaryLog
- name: WindowsArm64InstallersLogArgs
value: -ExcludeCIBinaryLog
-- ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
+- ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
- name: _BuildArgs
value: '/p:SkipTestBuild=true /p:PostBuildSign=$(PostBuildSign)'
- name: _PublishArgs
value: ''
-- ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest'), eq(parameters.produceBinlogs, 'true')) }}:
+- ${{ if or(in(variables['Build.Reason'], 'PullRequest'), eq(parameters.produceBinlogs, 'true')) }}:
# Write binary logs for all main Windows build steps except the x86 one in public and PR builds.
- name: WindowsArm64LogArgs
value: /bl:artifacts/log/Release/Build.arm64.binlog
@@ -118,689 +101,654 @@ variables:
value: /bl:artifacts/log/Release/Build.Installers.binlog
- name: WindowsArm64InstallersLogArgs
value: /bl:artifacts/log/Release/Build.Installers.Arm64.binlog
-- ${{ if ne(variables['System.TeamProject'], 'internal') }}:
+- name: _InternalRuntimeDownloadArgs
+ value: -RuntimeSourceFeed https://ci.dot.net/internal
+ -RuntimeSourceFeedKey $(dotnetbuilds-internal-container-read-token-base64)
+ /p:DotNetAssetRootAccessTokenSuffix='$(dotnetbuilds-internal-container-read-token-base64)'
+# The code signing doesn't use the aspnet build scripts, so the msbuild parameters have to be passed directly. This
+# is awkward but necessary because the eng/common/ build scripts don't add the msbuild properties automatically.
+- name: _InternalRuntimeDownloadCodeSignArgs
+ value: $(_InternalRuntimeDownloadArgs)
+ /p:DotNetRuntimeSourceFeed=https://ci.dot.net/internal
+ /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64)
+- group: DotNet-HelixApi-Access
+- ${{ if notin(variables['Build.Reason'], 'PullRequest') }}:
- name: _SignType
- value: ''
- - name: _InternalRuntimeDownloadArgs
- value: ''
- - name: _InternalRuntimeDownloadCodeSignArgs
- value: ''
-- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- - group: DotNetBuilds storage account read tokens
- - name: _InternalRuntimeDownloadArgs
- value: -RuntimeSourceFeed https://dotnetbuilds.blob.core.windows.net/internal
- -RuntimeSourceFeedKey $(dotnetbuilds-internal-container-read-token-base64)
- /p:DotNetAssetRootAccessTokenSuffix='$(dotnetbuilds-internal-container-read-token-base64)'
- # The code signing doesn't use the aspnet build scripts, so the msbuild parameters have to be passed directly. This
- # is awkward but necessary because the eng/common/ build scripts don't add the msbuild properties automatically.
- - name: _InternalRuntimeDownloadCodeSignArgs
- value: $(_InternalRuntimeDownloadArgs)
- /p:DotNetRuntimeSourceFeed=https://dotnetbuilds.blob.core.windows.net/internal
- /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64)
- - group: DotNet-HelixApi-Access
- - ${{ if notin(variables['Build.Reason'], 'PullRequest') }}:
- - name: _SignType
- value: real
- - ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
- - name: _SignType
- value: test
-- name: runCodeQL3000
- value: ${{ or(eq(variables['Build.Reason'], 'Schedule'), and(eq(variables['Build.Reason'], 'Manual'), eq(parameters.runCodeQL3000, 'true'))) }}
-- template: /eng/common/templates/variables/pool-providers.yml
-
-stages:
-- stage: build
- displayName: Build
- jobs:
- - ${{ if and(ne(variables['System.TeamProject'], 'public'), eq(variables.runCodeQL3000, 'true')) }}:
- - template: jobs/default-build.yml
- parameters:
- jobName: build
- jobDisplayName: Build and run CodeQL3000
- agentOs: Windows
- codeSign: false
- # Component governance and SBOM creation are not needed here. Disable what Arcade would inject.
- disableComponentGovernance: true
- enableSbom: false
- variables:
- # Security analysis is included in normal runs. Disable its auto-injection.
- - skipNugetSecurityAnalysis: true
- # Do not let CodeQL3000 Extension gate scan frequency.
- - Codeql.Cadence: 0
- # Enable CodeQL3000 unconditionally so it may be run on any branch.
- - Codeql.Enabled: true
- # Ignore the small amount of infrastructure Python code in this repo.
- - Codeql.Language: cpp,csharp,java,javascript
- - Codeql.ExcludePathPatterns: submodules
- # Ignore test and infrastructure code.
- - Codeql.SourceRoot: src
- # CodeQL3000 needs this plumbed along as a variable to enable TSA.
- - Codeql.TSAEnabled: ${{ eq(variables['Build.Reason'], 'Schedule') }}
- # Default expects tsaoptions.json under SourceRoot.
- - Codeql.TSAOptionsPath: '$(Build.SourcesDirectory)/.config/tsaoptions.json'
- beforeBuild:
- - task: CodeQL3000Init@0
- displayName: CodeQL Initialize
- - script: "echo ##vso[build.addbuildtag]CodeQL3000"
- displayName: 'Set CI CodeQL3000 tag'
- condition: ne(variables.CODEQL_DIST,'')
- steps:
- - script: ./eng/build.cmd
- -ci
- -arch x64
- -all
- $(_BuildArgs)
- $(_InternalRuntimeDownloadArgs)
- /p:UseSharedCompilation=false
- displayName: Build x64
- afterBuild:
- - task: CodeQL3000Finalize@0
- displayName: CodeQL Finalize
- artifacts:
- - name: Build_Logs
- path: artifacts/log/
- publishOnError: true
- includeForks: true
-
- - ${{ else }}: # regular build
- # Code check
- - ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest', 'Manual')) }}:
- - template: jobs/default-build.yml
+ value: real
+- ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
+ - name: _SignType
+ value: test
+- template: /eng/common/templates-official/variables/pool-providers.yml@self
+
+resources:
+ repositories:
+ # Repo: 1ESPipelineTemplates/1ESPipelineTemplates
+ - repository: 1esPipelines
+ type: git
+ name: 1ESPipelineTemplates/1ESPipelineTemplates
+ ref: refs/tags/release
+
+extends:
+ template: v1/1ES.Official.PipelineTemplate.yml@1esPipelines
+ parameters:
+ sdl:
+ sourceAnalysisPool:
+ name: NetCore1ESPool-Svc-Internal
+ image: 1es-windows-2022
+ os: windows
+ spotBugs:
+ enabled: false
+ policheck:
+ enabled: true
+ tsa:
+ enabled: true
+ containers:
+ azureLinux30Net8BuildAmd64:
+ image: mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net8.0-build-amd64
+ stages:
+ - stage: build
+ displayName: Build
+ jobs:
+ # Code check
+ - ${{ if in(variables['Build.Reason'], 'PullRequest', 'Manual') }}:
+ - template: .azure/pipelines/jobs/default-build.yml@self
+ parameters:
+ jobName: Code_check
+ jobDisplayName: Code check
+ agentOs: Windows
+ steps:
+ - powershell: ./eng/scripts/CodeCheck.ps1 -ci $(_InternalRuntimeDownloadArgs)
+ displayName: Run eng/scripts/CodeCheck.ps1
+ artifacts:
+ - name: Code_Check_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+
+ # Build Windows (x64/x86/arm64)
+ - template: .azure/pipelines/jobs/default-build.yml@self
parameters:
- jobName: Code_check
- jobDisplayName: Code check
+ codeSign: true
+ jobName: Windows_build
+ jobDisplayName: "Build: Windows x64/x86/arm64"
agentOs: Windows
steps:
- - powershell: ./eng/scripts/CodeCheck.ps1 -ci $(_InternalRuntimeDownloadArgs)
- displayName: Run eng/scripts/CodeCheck.ps1
- artifacts:
- - name: Code_Check_Logs
- path: artifacts/log/
- publishOnError: true
- includeForks: true
+ - ${{ if notIn(variables['Build.Reason'], 'PullRequest') }}:
+ - script: "echo ##vso[build.addbuildtag]daily-build"
+ displayName: 'Set CI daily-build tag'
+
+ # !!! NOTE !!! Some of these steps have disabled code signing.
+ # This is intentional to workaround https://github.com/dotnet/arcade/issues/1957 which always re-submits for code-signing, even
+ # if they have already been signed. This results in slower builds due to re-submitting the same .nupkg many times for signing.
+ # The sign settings have been configured to
+ - script: ./eng/build.cmd
+ -ci
+ -nativeToolsOnMachine
+ -arch x64
+ -pack
+ -all
+ $(_BuildArgs)
+ $(_InternalRuntimeDownloadArgs)
+ $(Windows64LogArgs)
+ displayName: Build x64
- # Build Windows (x64/x86/arm64)
- - template: jobs/default-build.yml
- parameters:
- codeSign: true
- jobName: Windows_build
- jobDisplayName: "Build: Windows x64/x86/arm64"
- agentOs: Windows
- steps:
- - ${{ if notIn(variables['Build.Reason'], 'PullRequest') }}:
- - script: "echo ##vso[build.addbuildtag]daily-build"
- displayName: 'Set CI daily-build tag'
-
- # !!! NOTE !!! Some of these steps have disabled code signing.
- # This is intentional to workaround https://github.com/dotnet/arcade/issues/1957 which always re-submits for code-signing, even
- # if they have already been signed. This results in slower builds due to re-submitting the same .nupkg many times for signing.
- # The sign settings have been configured to
- - script: ./eng/build.cmd
- -ci
- -arch x64
- -pack
- -all
- $(_BuildArgs)
- $(_InternalRuntimeDownloadArgs)
- $(Windows64LogArgs)
- displayName: Build x64
-
- # Build the x86 shared framework
- # This is going to actually build x86 native assets.
- - script: ./eng/build.cmd
- -ci
- -noBuildRepoTasks
- -arch x86
- -pack
- -all
- -noBuildJava
- -noBuildNative
- /p:OnlyPackPlatformSpecificPackages=true
- $(_BuildArgs)
- $(_InternalRuntimeDownloadArgs)
- $(Windows86LogArgs)
- displayName: Build x86
-
- # Build the arm64 shared framework
- - script: ./eng/build.cmd
- -ci
- -noBuildRepoTasks
- -arch arm64
- -sign
- -pack
- -noBuildJava
- -noBuildNative
- /p:DotNetSignType=$(_SignType)
- /p:OnlyPackPlatformSpecificPackages=true
- $(_BuildArgs)
- $(_InternalRuntimeDownloadArgs)
- $(WindowsArm64LogArgs)
- displayName: Build ARM64
-
- # Submit a manual build (in public or internal project) to validate changes to site extensions.
- - ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
- - script: .\src\SiteExtensions\build.cmd
+ # Build the x86 shared framework
+ # This is going to actually build x86 native assets.
+ - script: ./eng/build.cmd
-ci
-noBuildRepoTasks
+ -arch x86
-pack
- -noBuildDeps
+ -all
+ -noBuildJava
-noBuildNative
+ /p:OnlyPackPlatformSpecificPackages=true
$(_BuildArgs)
$(_InternalRuntimeDownloadArgs)
- displayName: Build SiteExtension
-
- # This runs code-signing on all packages, zips, and jar files as defined in build/CodeSign.targets. If
- # https://github.com/dotnet/arcade/issues/1957 is resolved, consider running code-signing inline with the other
- # previous steps. Sign check is disabled because it is run in a separate step below, after installers are built.
- - script: ./eng/build.cmd
- -ci
- -noBuildRepoTasks
- -noBuildNative
- -noBuild
- -sign
- /p:DotNetSignType=$(_SignType)
- $(_BuildArgs)
- $(WindowsSignLogArgs)
- displayName: Code sign packages
-
- # Windows installers bundle x86/x64/arm64 assets
- - script: ./eng/build.cmd
- -ci
- -noBuildRepoTasks
- -sign
- -buildInstallers
- -noBuildNative
- /p:DotNetSignType=$(_SignType)
- $(_BuildArgs)
- $(_InternalRuntimeDownloadArgs)
- $(WindowsInstallersLogArgs)
- displayName: Build Installers
-
- # Windows installers bundle and sharedfx msi for arm64
- - script: ./eng/build.cmd
- -ci
- -noBuildRepoTasks
- -arch arm64
- -sign
- -buildInstallers
- -noBuildNative
- /p:DotNetSignType=$(_SignType)
- /p:AssetManifestFileName=aspnetcore-win.xml
- $(_BuildArgs)
- $(_PublishArgs)
- /p:PublishInstallerBaseVersion=true
- $(_InternalRuntimeDownloadArgs)
- $(WindowsArm64InstallersLogArgs)
- displayName: Build ARM64 Installers
-
- artifacts:
- - name: Windows_Logs
- path: artifacts/log/
- publishOnError: true
- includeForks: true
- - name: Windows_Packages
- path: artifacts/packages/
- - name: Windows_HostingBundle
- path: artifacts/bin/WindowsHostingBundle
- - name: Windows_ANCM_Msi
- path: artifacts/bin/ANCMv2
- - name: Windows_ANCMIISExpress_Msi
- path: artifacts/bin/AncmIISExpressV2
-
- # Build MacOS arm64
- - template: jobs/default-build.yml
- parameters:
- jobName: MacOs_arm64_build
- jobDisplayName: "Build: macOS arm64"
- agentOs: macOs
- buildArgs:
- --arch arm64
- --pack
- --all
- --no-build-nodejs
- --no-build-java
- -p:OnlyPackPlatformSpecificPackages=true
- -p:AssetManifestFileName=aspnetcore-MacOS_arm64.xml
- $(_BuildArgs)
- $(_PublishArgs)
- $(_InternalRuntimeDownloadArgs)
- installNodeJs: false
- artifacts:
- - name: MacOS_arm64_Logs
- path: artifacts/log/
- publishOnError: true
- includeForks: true
- - name: MacOS_arm64_Packages
- path: artifacts/packages/
-
- - ${{ if ne(variables.PostBuildSign, 'true') }}:
- - template: jobs/codesign-xplat.yml
- parameters:
- inputName: MacOS_arm64
-
- # Build MacOS x64
- - template: jobs/default-build.yml
- parameters:
- jobName: MacOs_x64_build
- jobDisplayName: "Build: macOS x64"
- agentOs: macOs
- buildArgs:
- --pack
- --all
- --no-build-nodejs
- --no-build-java
- -p:OnlyPackPlatformSpecificPackages=true
- -p:AssetManifestFileName=aspnetcore-MacOS_x64.xml
- $(_BuildArgs)
- $(_PublishArgs)
- $(_InternalRuntimeDownloadArgs)
- installNodeJs: false
- artifacts:
- - name: MacOS_x64_Logs
- path: artifacts/log/
- publishOnError: true
- includeForks: true
- - name: MacOS_x64_Packages
- path: artifacts/packages/
-
- - ${{ if ne(variables.PostBuildSign, 'true') }}:
- - template: jobs/codesign-xplat.yml
+ $(Windows86LogArgs)
+ displayName: Build x86
+
+ # Build the arm64 shared framework
+ - script: ./eng/build.cmd
+ -ci
+ -noBuildRepoTasks
+ -arch arm64
+ -sign
+ -pack
+ -noBuildJava
+ -noBuildNative
+ /p:DotNetSignType=$(_SignType)
+ /p:OnlyPackPlatformSpecificPackages=true
+ $(_BuildArgs)
+ $(_InternalRuntimeDownloadArgs)
+ $(WindowsArm64LogArgs)
+ displayName: Build ARM64
+
+ # Submit a manual build (in public or internal project) to validate changes to site extensions.
+ - ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
+ - script: .\src\SiteExtensions\build.cmd
+ -ci
+ -noBuildRepoTasks
+ -pack
+ -noBuildDeps
+ -noBuildNative
+ $(_BuildArgs)
+ $(_InternalRuntimeDownloadArgs)
+ displayName: Build SiteExtension
+
+ # This runs code-signing on all packages, zips, and jar files as defined in build/CodeSign.targets. If
+ # https://github.com/dotnet/arcade/issues/1957 is resolved, consider running code-signing inline with the other
+ # previous steps. Sign check is disabled because it is run in a separate step below, after installers are built.
+ - script: ./eng/build.cmd
+ -ci
+ -noBuildRepoTasks
+ -noBuildNative
+ -noBuild
+ -sign
+ /p:DotNetSignType=$(_SignType)
+ $(_BuildArgs)
+ $(WindowsSignLogArgs)
+ displayName: Code sign packages
+
+ # Windows installers bundle x86/x64/arm64 assets
+ - script: ./eng/build.cmd
+ -ci
+ -noBuildRepoTasks
+ -sign
+ -buildInstallers
+ -noBuildNative
+ /p:DotNetSignType=$(_SignType)
+ $(_BuildArgs)
+ $(_InternalRuntimeDownloadArgs)
+ $(WindowsInstallersLogArgs)
+ displayName: Build Installers
+
+ # Windows installers bundle and sharedfx msi for arm64
+ - script: ./eng/build.cmd
+ -ci
+ -noBuildRepoTasks
+ -arch arm64
+ -sign
+ -buildInstallers
+ -noBuildNative
+ /p:DotNetSignType=$(_SignType)
+ /p:AssetManifestFileName=aspnetcore-win.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ /p:PublishInstallerBaseVersion=true
+ $(_InternalRuntimeDownloadArgs)
+ $(WindowsArm64InstallersLogArgs)
+ displayName: Build ARM64 Installers
+
+ artifacts:
+ - name: Windows_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: Windows_Packages
+ path: artifacts/packages/
+ - name: Windows_HostingBundle
+ path: artifacts/bin/WindowsHostingBundle
+ - name: Windows_ANCM_Msi
+ path: artifacts/bin/ANCMv2
+ - name: Windows_ANCMIISExpress_Msi
+ path: artifacts/bin/AncmIISExpressV2
+
+ # Build MacOS arm64
+ - template: .azure/pipelines/jobs/default-build.yml@self
parameters:
- inputName: MacOS_x64
-
- # Build Linux x64
- - template: jobs/default-build.yml
- parameters:
- jobName: Linux_x64_build
- jobDisplayName: "Build: Linux x64"
- agentOs: Linux
- useHostedUbuntu: false
- steps:
- - script: ./eng/build.sh
- --ci
- --arch x64
- --pack
- --all
- --no-build-nodejs
- --no-build-java
- -p:OnlyPackPlatformSpecificPackages=true
- $(_BuildArgs)
- $(_InternalRuntimeDownloadArgs)
- displayName: Run build.sh
- - script: git clean -xfd src/**/obj/;
- ./dockerbuild.sh bionic --ci --nobl --arch x64 --build-installers --no-build-deps --no-build-nodejs
- -p:OnlyPackPlatformSpecificPackages=true -p:BuildRuntimeArchive=false -p:LinuxInstallerType=deb
- $(_BuildArgs)
- $(_InternalRuntimeDownloadArgs)
- displayName: Build Debian installers
- - script: git clean -xfd src/**/obj/;
- ./dockerbuild.sh rhel --ci --nobl --arch x64 --build-installers --no-build-deps --no-build-nodejs
- -p:OnlyPackPlatformSpecificPackages=true -p:BuildRuntimeArchive=false -p:LinuxInstallerType=rpm
- -p:AssetManifestFileName=aspnetcore-Linux_x64.xml
+ jobName: MacOs_arm64_build
+ jobDisplayName: "Build: macOS arm64"
+ agentOs: macOs
+ buildArgs:
+ --arch arm64
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -p:AssetManifestFileName=aspnetcore-MacOS_arm64.xml
$(_BuildArgs)
$(_PublishArgs)
$(_InternalRuntimeDownloadArgs)
- displayName: Build RPM installers
- installNodeJs: false
- artifacts:
- - name: Linux_x64_Logs
- path: artifacts/log/
- publishOnError: true
- includeForks: true
- - name: Linux_x64_Packages
- path: artifacts/packages/
-
- - ${{ if ne(variables.PostBuildSign, 'true') }}:
- - template: jobs/codesign-xplat.yml
- parameters:
- inputName: Linux_x64
-
- # Build Linux ARM
- - template: jobs/default-build.yml
- parameters:
- jobName: Linux_arm_build
- jobDisplayName: "Build: Linux ARM"
- agentOs: Linux
- buildArgs:
- --arch arm
- --pack
- --all
- --no-build-nodejs
- --no-build-java
- -p:OnlyPackPlatformSpecificPackages=true
- -p:AssetManifestFileName=aspnetcore-Linux_arm.xml
- $(_BuildArgs)
- $(_PublishArgs)
- $(_InternalRuntimeDownloadArgs)
- installNodeJs: false
- artifacts:
- - name: Linux_arm_Logs
- path: artifacts/log/
- publishOnError: true
- includeForks: true
- - name: Linux_arm_Packages
- path: artifacts/packages/
-
- - ${{ if ne(variables.PostBuildSign, 'true') }}:
- - template: jobs/codesign-xplat.yml
+ installNodeJs: false
+ artifacts:
+ - name: MacOS_arm64_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: MacOS_arm64_Packages
+ path: artifacts/packages/
+
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - template: .azure/pipelines/jobs/codesign-xplat.yml@self
+ parameters:
+ inputName: MacOS_arm64
+
+ # Build MacOS x64
+ - template: .azure/pipelines/jobs/default-build.yml@self
parameters:
- inputName: Linux_arm
-
- # Build Linux ARM64
- - template: jobs/default-build.yml
- parameters:
- jobName: Linux_arm64_build
- jobDisplayName: "Build: Linux ARM64"
- agentOs: Linux
- steps:
- - script: ./eng/build.sh
- --ci
- --arch arm64
- --pack
- --all
- --no-build-nodejs
- --no-build-java
- -p:OnlyPackPlatformSpecificPackages=true
- $(_BuildArgs)
- $(_InternalRuntimeDownloadArgs)
- displayName: Run build.sh
- - script: git clean -xfd src/**/obj/;
- ./dockerbuild.sh rhel --ci --nobl --arch arm64 --build-installers --no-build-deps --no-build-nodejs
- -p:OnlyPackPlatformSpecificPackages=true -p:BuildRuntimeArchive=false -p:LinuxInstallerType=rpm
- -p:AssetManifestFileName=aspnetcore-Linux_arm64.xml
+ jobName: MacOs_x64_build
+ jobDisplayName: "Build: macOS x64"
+ agentOs: macOs
+ buildArgs:
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -p:AssetManifestFileName=aspnetcore-MacOS_x64.xml
$(_BuildArgs)
$(_PublishArgs)
$(_InternalRuntimeDownloadArgs)
- displayName: Build RPM installers
- installNodeJs: false
- artifacts:
- - name: Linux_arm64_Logs
- path: artifacts/log/
- publishOnError: true
- includeForks: true
- - name: Linux_arm64_Packages
- path: artifacts/packages/
-
- - ${{ if ne(variables.PostBuildSign, 'true') }}:
- - template: jobs/codesign-xplat.yml
- parameters:
- inputName: Linux_arm64
-
- # Build Linux Musl x64
- - template: jobs/default-build.yml
- parameters:
- jobName: Linux_musl_x64_build
- jobDisplayName: "Build: Linux Musl x64"
- agentOs: Linux
- container: mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.14-WithNode
- buildArgs:
- --arch x64
- --os-name linux-musl
- --pack
- --all
- --no-build-nodejs
- --no-build-java
- -p:OnlyPackPlatformSpecificPackages=true
- -p:AssetManifestFileName=aspnetcore-Linux_musl_x64.xml
- $(_BuildArgs)
- $(_PublishArgs)
- $(_InternalRuntimeDownloadArgs)
- installNodeJs: false
- disableComponentGovernance: true
- artifacts:
- - name: Linux_musl_x64_Logs
- path: artifacts/log/
- publishOnError: true
- includeForks: true
- - name: Linux_musl_x64_Packages
- path: artifacts/packages/
-
- - ${{ if ne(variables.PostBuildSign, 'true') }}:
- - template: jobs/codesign-xplat.yml
- parameters:
- inputName: Linux_musl_x64
-
- # Build Linux Musl ARM
- - template: jobs/default-build.yml
- parameters:
- jobName: Linux_musl_arm_build
- jobDisplayName: "Build: Linux Musl ARM"
- agentOs: Linux
- useHostedUbuntu: false
- container: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-cross-arm-alpine
- buildArgs:
- --arch arm
- --os-name linux-musl
- --pack
- --all
- --no-build-nodejs
- --no-build-java
- -p:OnlyPackPlatformSpecificPackages=true
- -p:AssetManifestFileName=aspnetcore-Linux_musl_arm.xml
- $(_BuildArgs)
- $(_PublishArgs)
- $(_InternalRuntimeDownloadArgs)
- installNodeJs: false
- artifacts:
- - name: Linux_musl_arm_Logs
- path: artifacts/log/
- publishOnError: true
- includeForks: true
- - name: Linux_musl_arm_Packages
- path: artifacts/packages/
-
- - ${{ if ne(variables.PostBuildSign, 'true') }}:
- - template: jobs/codesign-xplat.yml
- parameters:
- inputName: Linux_musl_arm
-
- # Build Linux Musl ARM64
- - template: jobs/default-build.yml
- parameters:
- jobName: Linux_musl_arm64_build
- jobDisplayName: "Build: Linux Musl ARM64"
- agentOs: Linux
- useHostedUbuntu: false
- container: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-cross-arm64-alpine
- buildArgs:
- --arch arm64
- --os-name linux-musl
- --pack
- --all
- --no-build-nodejs
- --no-build-java
- -p:OnlyPackPlatformSpecificPackages=true
- -p:AssetManifestFileName=aspnetcore-Linux_musl_arm64.xml
- $(_BuildArgs)
- $(_PublishArgs)
- $(_InternalRuntimeDownloadArgs)
- installNodeJs: false
- artifacts:
- - name: Linux_musl_arm64_Logs
- path: artifacts/log/
- publishOnError: true
- includeForks: true
- - name: Linux_musl_arm64_Packages
- path: artifacts/packages/
-
- - ${{ if ne(variables.PostBuildSign, 'true') }}:
- - template: jobs/codesign-xplat.yml
- parameters:
- inputName: Linux_musl_arm64
+ installNodeJs: false
+ artifacts:
+ - name: MacOS_x64_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: MacOS_x64_Packages
+ path: artifacts/packages/
- - ${{ if and(ne(parameters.skipTests, 'true'), or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest', 'Manual'))) }}:
- # Test jobs
- - template: jobs/default-build.yml
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - template: .azure/pipelines/jobs/codesign-xplat.yml@self
+ parameters:
+ inputName: MacOS_x64
+
+ # Build Linux x64
+ - template: .azure/pipelines/jobs/default-build.yml@self
parameters:
- jobName: Windows_Test
- jobDisplayName: "Test: Windows Server x64"
- agentOs: Windows
- isAzDOTestingJob: true
- # Just uploading artifacts/logs/ files can take 15 minutes. Doubling the cancel timeout for this job.
- cancelTimeoutInMinutes: 30
- buildArgs: -all -pack -test -binaryLog /p:SkipHelixReadyTests=true /p:SkipIISNewHandlerTests=true /p:SkipIISTests=true
- /p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunTemplateTests=false /p:RunBlazorPlaywrightTemplateTests=true
- $(_InternalRuntimeDownloadArgs)
- beforeBuild:
- - powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1"
- displayName: Setup IISExpress test certificates and schema
+ jobName: Linux_x64_build
+ jobDisplayName: "Build: Linux x64"
+ agentOs: Linux
+ useHostedUbuntu: false
+ steps:
+ - script: ./eng/build.sh
+ --ci
+ --arch x64
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ $(_BuildArgs)
+ $(_InternalRuntimeDownloadArgs)
+ displayName: Run build.sh
+ - script: git clean -xfd src/**/obj/;
+ ./dockerbuild.sh bionic --ci --nobl --arch x64 --build-installers --no-build-deps --no-build-nodejs
+ -p:OnlyPackPlatformSpecificPackages=true -p:BuildRuntimeArchive=false -p:LinuxInstallerType=deb
+ $(_BuildArgs)
+ $(_InternalRuntimeDownloadArgs)
+ displayName: Build Debian installers
+ - script: git clean -xfd src/**/obj/;
+ ./dockerbuild.sh rhel --ci --nobl --arch x64 --build-installers --no-build-deps --no-build-nodejs
+ -p:OnlyPackPlatformSpecificPackages=true -p:BuildRuntimeArchive=false -p:LinuxInstallerType=rpm
+ -p:AssetManifestFileName=aspnetcore-Linux_x64.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ $(_InternalRuntimeDownloadArgs)
+ displayName: Build RPM installers
+ installNodeJs: false
artifacts:
- - name: Windows_Test_Logs
+ - name: Linux_x64_Logs_Attempt_$(System.JobAttempt)
path: artifacts/log/
publishOnError: true
includeForks: true
- - name: Windows_Test_Results
- path: artifacts/TestResults/
+ - name: Linux_x64_Packages
+ path: artifacts/packages/
+
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - template: .azure/pipelines/jobs/codesign-xplat.yml@self
+ parameters:
+ inputName: Linux_x64
+
+ # Build Linux ARM
+ - template: .azure/pipelines/jobs/default-build.yml@self
+ parameters:
+ jobName: Linux_arm_build
+ jobDisplayName: "Build: Linux ARM"
+ agentOs: Linux
+ buildArgs:
+ --arch arm
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -p:AssetManifestFileName=aspnetcore-Linux_arm.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ $(_InternalRuntimeDownloadArgs)
+ installNodeJs: false
+ artifacts:
+ - name: Linux_arm_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
publishOnError: true
includeForks: true
+ - name: Linux_arm_Packages
+ path: artifacts/packages/
+
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - template: .azure/pipelines/jobs/codesign-xplat.yml@self
+ parameters:
+ inputName: Linux_arm
- - template: jobs/default-build.yml
+ # Build Linux ARM64
+ - template: .azure/pipelines/jobs/default-build.yml@self
parameters:
- jobName: MacOS_Test
- jobDisplayName: "Test: macOS"
- agentOs: macOS
- timeoutInMinutes: 240
- isAzDOTestingJob: true
- buildArgs: --all --test --binaryLog "/p:RunTemplateTests=false /p:SkipHelixReadyTests=true" $(_InternalRuntimeDownloadArgs)
- beforeBuild:
- - bash: "./eng/scripts/install-nginx-mac.sh"
- displayName: Installing Nginx
+ jobName: Linux_arm64_build
+ jobDisplayName: "Build: Linux ARM64"
+ agentOs: Linux
+ steps:
+ - script: ./eng/build.sh
+ --ci
+ --arch arm64
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ $(_BuildArgs)
+ $(_InternalRuntimeDownloadArgs)
+ displayName: Run build.sh
+ - script: git clean -xfd src/**/obj/;
+ ./dockerbuild.sh rhel --ci --nobl --arch arm64 --build-installers --no-build-deps --no-build-nodejs
+ -p:OnlyPackPlatformSpecificPackages=true -p:BuildRuntimeArchive=false -p:LinuxInstallerType=rpm
+ -p:AssetManifestFileName=aspnetcore-Linux_arm64.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ $(_InternalRuntimeDownloadArgs)
+ displayName: Build RPM installers
+ installNodeJs: false
artifacts:
- - name: MacOS_Test_Logs
+ - name: Linux_arm64_Logs_Attempt_$(System.JobAttempt)
path: artifacts/log/
publishOnError: true
includeForks: true
- - name: MacOS_Test_Results
- path: artifacts/TestResults/
+ - name: Linux_arm64_Packages
+ path: artifacts/packages/
+
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - template: .azure/pipelines/jobs/codesign-xplat.yml@self
+ parameters:
+ inputName: Linux_arm64
+
+ # Build Linux Musl x64
+ - template: .azure/pipelines/jobs/default-build.yml@self
+ parameters:
+ jobName: Linux_musl_x64_build
+ jobDisplayName: "Build: Linux Musl x64"
+ agentOs: Linux
+ container: azureLinux30Net8BuildAmd64
+ buildArgs:
+ --arch x64
+ --os-name linux-musl
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -p:AssetManifestFileName=aspnetcore-Linux_musl_x64.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ $(_InternalRuntimeDownloadArgs)
+ installNodeJs: false
+ disableComponentGovernance: true
+ artifacts:
+ - name: Linux_musl_x64_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
publishOnError: true
includeForks: true
+ - name: Linux_musl_x64_Packages
+ path: artifacts/packages/
+
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - template: .azure/pipelines/jobs/codesign-xplat.yml@self
+ parameters:
+ inputName: Linux_musl_x64
- - template: jobs/default-build.yml
+ # Build Linux Musl ARM
+ - template: .azure/pipelines/jobs/default-build.yml@self
parameters:
- jobName: Linux_Test
- jobDisplayName: "Test: Ubuntu x64"
+ jobName: Linux_musl_arm_build
+ jobDisplayName: "Build: Linux Musl ARM"
agentOs: Linux
- isAzDOTestingJob: true
useHostedUbuntu: false
- buildArgs: --all --test --binaryLog "/p:RunTemplateTests=false /p:SkipHelixReadyTests=true" $(_InternalRuntimeDownloadArgs)
- beforeBuild:
- - bash: "./eng/scripts/install-nginx-linux.sh"
- displayName: Installing Nginx
- - bash: "echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p"
- displayName: Increase inotify limit
+ container: azureLinux30Net8BuildAmd64
+ buildArgs:
+ --arch arm
+ --os-name linux-musl
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -p:AssetManifestFileName=aspnetcore-Linux_musl_arm.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ $(_InternalRuntimeDownloadArgs)
+ installNodeJs: false
artifacts:
- - name: Linux_Test_Logs
+ - name: Linux_musl_arm_Logs_Attempt_$(System.JobAttempt)
path: artifacts/log/
publishOnError: true
includeForks: true
- - name: Linux_Test_Results
- path: artifacts/TestResults/
- publishOnError: true
- includeForks: true
+ - name: Linux_musl_arm_Packages
+ path: artifacts/packages/
- # Helix x64
- - template: jobs/default-build.yml
- parameters:
- jobName: Helix_x64
- jobDisplayName: 'Tests: Helix x64'
- agentOs: Windows
- timeoutInMinutes: 240
- steps:
- # Build the shared framework
- - script: ./eng/build.cmd -ci -nobl -all -pack -arch x64
- /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs)
- displayName: Build shared fx
- # -noBuildRepoTasks -noBuildNative -noBuild to avoid repeating work done in the previous step.
- - script: ./eng/build.cmd -ci -nobl -all -noBuildRepoTasks -noBuildNative -noBuild -test
- -projects eng\helix\helix.proj /p:IsHelixPRCheck=true /p:IsHelixJob=true
- /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs)
- displayName: Run build.cmd helix target
- env:
- HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues
- SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - template: .azure/pipelines/jobs/codesign-xplat.yml@self
+ parameters:
+ inputName: Linux_musl_arm
+ # Build Linux Musl ARM64
+ - template: .azure/pipelines/jobs/default-build.yml@self
+ parameters:
+ jobName: Linux_musl_arm64_build
+ jobDisplayName: "Build: Linux Musl ARM64"
+ agentOs: Linux
+ useHostedUbuntu: false
+ container: azureLinux30Net8BuildAmd64
+ buildArgs:
+ --arch arm64
+ --os-name linux-musl
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -p:AssetManifestFileName=aspnetcore-Linux_musl_arm64.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ $(_InternalRuntimeDownloadArgs)
+ installNodeJs: false
artifacts:
- - name: Helix_logs
+ - name: Linux_musl_arm64_Logs_Attempt_$(System.JobAttempt)
path: artifacts/log/
publishOnError: true
includeForks: true
-
- # Source build
- - template: /eng/common/templates/job/source-build.yml
- parameters:
- platform:
- name: 'Managed'
- container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8'
- buildScript: './eng/build.sh $(_PublishArgs) --no-build-repo-tasks $(_InternalRuntimeDownloadArgs)'
- skipPublishValidation: true
- jobProperties:
- timeoutInMinutes: 120
- variables:
- # Log environment variables in binary logs to ease debugging
- MSBUILDLOGALLENVIRONMENTVARIABLES: true
-
- - ${{ if eq(variables.enableSourceIndex, 'true') }}:
- - template: /eng/common/templates/job/source-index-stage1.yml
+ - name: Linux_musl_arm64_Packages
+ path: artifacts/packages/
+
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - template: .azure/pipelines/jobs/codesign-xplat.yml@self
+ parameters:
+ inputName: Linux_musl_arm64
+
+ - ${{ if and(ne(parameters.skipTests, 'true'), in(variables['Build.Reason'], 'PullRequest', 'Manual')) }}:
+ # Test jobs
+ - template: .azure/pipelines/jobs/default-build.yml@self
+ parameters:
+ jobName: Windows_Test
+ jobDisplayName: "Test: Windows Server x64"
+ agentOs: Windows
+ isAzDOTestingJob: true
+ # Just uploading artifacts/logs/ files can take 15 minutes. Doubling the cancel timeout for this job.
+ cancelTimeoutInMinutes: 30
+ buildArgs: -all -pack -test -binaryLog /p:SkipHelixReadyTests=true /p:SkipIISNewHandlerTests=true /p:SkipIISTests=true
+ /p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunTemplateTests=false /p:RunBlazorPlaywrightTemplateTests=true
+ $(_InternalRuntimeDownloadArgs)
+ beforeBuild:
+ - powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1"
+ displayName: Setup IISExpress test certificates and schema
+ artifacts:
+ - name: Windows_Test_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: Windows_Test_Results_Attempt_$(System.JobAttempt)
+ path: artifacts/TestResults/
+ publishOnError: true
+ includeForks: true
+
+ - template: .azure/pipelines/jobs/default-build.yml@self
+ parameters:
+ jobName: MacOS_Test
+ jobDisplayName: "Test: macOS"
+ agentOs: macOS
+ timeoutInMinutes: 240
+ isAzDOTestingJob: true
+ buildArgs: --all --test --binaryLog "/p:RunTemplateTests=false /p:SkipHelixReadyTests=true" $(_InternalRuntimeDownloadArgs)
+ beforeBuild:
+ - bash: "./eng/scripts/install-nginx-mac.sh"
+ displayName: Installing Nginx
+ artifacts:
+ - name: MacOS_Test_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: MacOS_Test_Results_Attempt_$(System.JobAttempt)
+ path: artifacts/TestResults/
+ publishOnError: true
+ includeForks: true
+
+ - template: .azure/pipelines/jobs/default-build.yml@self
+ parameters:
+ jobName: Linux_Test
+ jobDisplayName: "Test: Ubuntu x64"
+ agentOs: Linux
+ isAzDOTestingJob: true
+ useHostedUbuntu: false
+ buildArgs: --all --test --binaryLog "/p:RunTemplateTests=false /p:SkipHelixReadyTests=true" $(_InternalRuntimeDownloadArgs)
+ beforeBuild:
+ - bash: "./eng/scripts/install-nginx-linux.sh"
+ displayName: Installing Nginx
+ - bash: "echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p"
+ displayName: Increase inotify limit
+ artifacts:
+ - name: Linux_Test_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: Linux_Test_Results_Attempt_$(System.JobAttempt)
+ path: artifacts/TestResults/
+ publishOnError: true
+ includeForks: true
+
+ # Helix x64
+ - template: .azure/pipelines/jobs/default-build.yml@self
+ parameters:
+ jobName: Helix_x64
+ jobDisplayName: 'Tests: Helix x64'
+ agentOs: Windows
+ timeoutInMinutes: 240
+ steps:
+ # Build the shared framework
+ - script: ./eng/build.cmd -ci -nativeToolsOnMachine -nobl -all -pack -arch x64
+ /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs)
+ displayName: Build shared fx
+ # -noBuildRepoTasks -noBuildNative -noBuild to avoid repeating work done in the previous step.
+ - script: ./eng/build.cmd -ci -nativeToolsOnMachine -nobl -all -noBuildRepoTasks -noBuildNative -noBuild -test
+ -projects eng\helix\helix.proj /p:IsHelixPRCheck=true /p:IsHelixJob=true
+ /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs)
+ displayName: Run build.cmd helix target
+ env:
+ HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues
+ SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops
+
+ artifacts:
+ - name: Helix_Logs_Attempt_$(System.JobAttempt)
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+
+ # Source build
+ - template: /eng/common/templates-official/job/source-build.yml@self
parameters:
- sourceIndexBuildCommand: ./eng/build.cmd -Configuration Release -ci -noBuildJava -binaryLog /p:OnlyPackPlatformSpecificPackages=true
- binlogPath: artifacts/log/Release/Build.binlog
- presteps:
- - task: NodeTool@0
- displayName: Install Node 18.x
- inputs:
- versionSpec: 18.x
- pool:
- name: $(DncEngInternalBuildPool)
- demands: ImageOverride -equals 1es-windows-2022
-
- # Publish to the BAR and perform source indexing. Wait until everything else is done.
- - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- - template: /eng/common/templates/job/publish-build-assets.yml
+ enableInternalSources: true
+ platform:
+ name: 'Managed'
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8'
+ buildScript: './eng/build.sh $(_PublishArgs) --no-build-nodejs --no-build-repo-tasks $(_InternalRuntimeDownloadArgs)'
+ skipPublishValidation: true
+ jobProperties:
+ timeoutInMinutes: 120
+ variables:
+ # Log environment variables in binary logs to ease debugging
+ MSBUILDLOGALLENVIRONMENTVARIABLES: true
+
+ - ${{ if eq(variables.enableSourceIndex, 'true') }}:
+ - template: /eng/common/templates-official/job/source-index-stage1.yml@self
+ parameters:
+ sourceIndexBuildCommand: ./eng/build.cmd -Configuration Release -ci -noBuildJava -binaryLog /p:OnlyPackPlatformSpecificPackages=true
+ binlogPath: artifacts/log/Release/Build.binlog
+ presteps:
+ - task: NodeTool@0
+ displayName: Install Node 18.x
+ inputs:
+ versionSpec: 18.x
+ pool:
+ name: $(DncEngInternalBuildPool)
+ demands: ImageOverride -equals 1es-windows-2022
+
+ # Publish to the BAR and perform source indexing. Wait until everything else is done.
+ - ${{ if notin(variables['Build.Reason'], 'PullRequest') }}:
+ - template: /eng/common/templates-official/job/publish-build-assets.yml@self
+ parameters:
+ dependsOn:
+ - Windows_build
+ - ${{ if ne(variables.PostBuildSign, 'true') }}:
+ - CodeSign_Xplat_MacOS_arm64
+ - CodeSign_Xplat_MacOS_x64
+ - CodeSign_Xplat_Linux_x64
+ - CodeSign_Xplat_Linux_arm
+ - CodeSign_Xplat_Linux_arm64
+ - CodeSign_Xplat_Linux_musl_x64
+ - CodeSign_Xplat_Linux_musl_arm
+ - CodeSign_Xplat_Linux_musl_arm64
+ - ${{ if eq(variables.PostBuildSign, 'true') }}:
+ - MacOs_arm64_build
+ - MacOs_x64_build
+ - Linux_x64_build
+ - Linux_arm_build
+ - Linux_arm64_build
+ - Linux_musl_x64_build
+ - Linux_musl_arm_build
+ - Linux_musl_arm64_build
+ # In addition to the dependencies above that provide assets, ensure the build was successful overall.
+ - ${{ if in(variables['Build.Reason'], 'Manual') }}:
+ - Code_check
+ - ${{ if ne(parameters.skipTests, 'true') }}:
+ - Windows_Test
+ - MacOS_Test
+ - Linux_Test
+ - Helix_x64
+ - ${{ if eq(variables.enableSourceIndex, 'true') }}:
+ - SourceIndexStage1
+ - Source_Build_Managed
+ pool:
+ name: $(DncEngInternalBuildPool)
+ demands: ImageOverride -equals 1es-windows-2019
+ publishUsingPipelines: ${{ variables._PublishUsingPipelines }}
+ enablePublishBuildArtifacts: true # publish artifacts/log files
+ publishAssetsImmediately: true # Don't use a separate stage for darc publishing.
+
+ - ${{ if notin(variables['Build.Reason'], 'PullRequest') }}:
+ - template: /eng/common/templates-official/post-build/post-build.yml@self
parameters:
- dependsOn:
- - Windows_build
- - ${{ if ne(variables.PostBuildSign, 'true') }}:
- - CodeSign_Xplat_MacOS_arm64
- - CodeSign_Xplat_MacOS_x64
- - CodeSign_Xplat_Linux_x64
- - CodeSign_Xplat_Linux_arm
- - CodeSign_Xplat_Linux_arm64
- - CodeSign_Xplat_Linux_musl_x64
- - CodeSign_Xplat_Linux_musl_arm
- - CodeSign_Xplat_Linux_musl_arm64
- - ${{ if eq(variables.PostBuildSign, 'true') }}:
- - MacOs_arm64_build
- - MacOs_x64_build
- - Linux_x64_build
- - Linux_arm_build
- - Linux_arm64_build
- - Linux_musl_x64_build
- - Linux_musl_arm_build
- - Linux_musl_arm64_build
- # In addition to the dependencies above that provide assets, ensure the build was successful overall.
- - ${{ if in(variables['Build.Reason'], 'Manual') }}:
- - Code_check
- - ${{ if ne(parameters.skipTests, 'true') }}:
- - Windows_Test
- - MacOS_Test
- - Linux_Test
- - Helix_x64
- - ${{ if eq(variables.enableSourceIndex, 'true') }}:
- - SourceIndexStage1
- - Source_Build_Managed
- pool:
- name: $(DncEngInternalBuildPool)
- demands: ImageOverride -equals 1es-windows-2019
- publishUsingPipelines: ${{ variables._PublishUsingPipelines }}
- enablePublishBuildArtifacts: true # publish artifacts/log files
- publishAssetsImmediately: true # Don't use a separate stage for darc publishing.
-
-- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), ne(variables.runCodeQL3000, 'true')) }}:
- - template: /eng/common/templates/post-build/post-build.yml
- parameters:
- publishingInfraVersion: 3
- enableSymbolValidation: false
- enableSigningValidation: false
- enableNugetValidation: false
- publishInstallersAndChecksums: true
- publishAssetsImmediately: true
+ publishingInfraVersion: 3
+ enableSymbolValidation: false
+ enableSigningValidation: false
+ enableNugetValidation: false
+ publishInstallersAndChecksums: true
+ publishAssetsImmediately: true
diff --git a/.azure/pipelines/helix-matrix.yml b/.azure/pipelines/helix-matrix.yml
index 97b16c666094..7318a774b918 100644
--- a/.azure/pipelines/helix-matrix.yml
+++ b/.azure/pipelines/helix-matrix.yml
@@ -12,7 +12,7 @@ schedules:
branches:
include:
- release/6.0
- - release/7.0
+ - release/8.0
always: false
variables:
@@ -28,10 +28,10 @@ jobs:
jobName: Helix_matrix_x64
jobDisplayName: 'Tests: Helix full matrix x64'
agentOs: Windows
- timeoutInMinutes: 480
+ timeoutInMinutes: 300
steps:
# Build the shared framework
- - script: ./eng/build.cmd -ci -nobl -all -pack -arch x64
+ - script: ./eng/build.cmd -ci -nativeToolsOnMachine -nobl -all -pack -arch x64
/p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
displayName: Build shared fx
# -noBuildRepoTasks -noBuildNative -noBuild to avoid repeating work done in the previous step.
diff --git a/.azure/pipelines/identitymodel-helix-matrix.yml b/.azure/pipelines/identitymodel-helix-matrix.yml
new file mode 100644
index 000000000000..91be7f22c42f
--- /dev/null
+++ b/.azure/pipelines/identitymodel-helix-matrix.yml
@@ -0,0 +1,101 @@
+# We only want to run IdentityModel matrix on main
+pr: none
+trigger: none
+schedules:
+# Cron timezone is UTC.
+- cron: "0 */12 * * *"
+ branches:
+ include:
+ - release/8.0
+ always: true
+
+variables:
+- name: _UseHelixOpenQueues
+ value: false
+- group: DotNet-HelixApi-Access
+- template: /eng/common/templates-official/variables/pool-providers.yml@self
+
+resources:
+ repositories:
+ # Repo: 1ESPipelineTemplates/1ESPipelineTemplates
+ - repository: 1esPipelines
+ type: git
+ name: 1ESPipelineTemplates/1ESPipelineTemplates
+ ref: refs/tags/release
+
+extends:
+ template: v1/1ES.Official.PipelineTemplate.yml@1esPipelines
+ parameters:
+ sdl:
+ sourceAnalysisPool:
+ name: NetCore1ESPool-Svc-Internal
+ image: 1es-windows-2022
+ os: windows
+ codeql:
+ compiled:
+ enabled: false
+ justificationForDisabling: 'This is a test-only pipeline. The same product code is already scanned in the main pipeline (aspnetcore-ci)'
+
+ stages:
+ - stage: build
+ displayName: Build
+ jobs:
+ - template: .azure/pipelines/jobs/default-build.yml@self
+ parameters:
+ jobName: IdentityModel_helix_matrix_x64
+ jobDisplayName: 'Tests: IdentityModel nightlies helix full matrix x64'
+ agentOs: Windows
+ timeoutInMinutes: 300
+ steps:
+ - task: NuGetAuthenticate@1
+ inputs:
+ forceReinstallCredentialProvider: true
+ - task: NuGetCommand@2
+ displayName: Install Microsoft.IdentityModel.Logging
+ inputs:
+ command: 'custom'
+ arguments: 'install Microsoft.IdentityModel.Logging
+ -Source https://pkgs.dev.azure.com/dnceng/internal/_packaging/identitymodel-nightlies/nuget/v3/index.json
+ -DependencyVersion Highest -OutputDirectory $(Build.StagingDirectory) -PreRelease'
+ - task: NuGetCommand@2
+ displayName: Install Microsoft.IdentityModel.Protocols.OpenIdConnect
+ inputs:
+ command: 'custom'
+ arguments: 'install Microsoft.IdentityModel.Protocols.OpenIdConnect
+ -Source https://pkgs.dev.azure.com/dnceng/internal/_packaging/identitymodel-nightlies/nuget/v3/index.json
+ -DependencyVersion Highest -OutputDirectory $(Build.StagingDirectory) -PreRelease'
+ - task: NuGetCommand@2
+ displayName: Install Microsoft.IdentityModel.Protocols.WsFederation
+ inputs:
+ command: 'custom'
+ arguments: 'install Microsoft.IdentityModel.Protocols.WsFederation
+ -Source https://pkgs.dev.azure.com/dnceng/internal/_packaging/identitymodel-nightlies/nuget/v3/index.json
+ -DependencyVersion Highest -OutputDirectory $(Build.StagingDirectory) -PreRelease'
+ - task: NuGetCommand@2
+ displayName: System.IdentityModel.Tokens.Jwt
+ inputs:
+ command: 'custom'
+ arguments: 'install System.IdentityModel.Tokens.Jwt
+ -Source https://pkgs.dev.azure.com/dnceng/internal/_packaging/identitymodel-nightlies/nuget/v3/index.json
+ -DependencyVersion Highest -OutputDirectory $(Build.StagingDirectory) -PreRelease'
+ - task: PowerShell@2
+ displayName: Add IdentityModel feel to NuGet.config
+ inputs:
+ filePath: $(Build.SourcesDirectory)/eng/scripts/SetupIdentitySources.ps1
+ arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -IdentityModelPackageSource $(Build.StagingDirectory)
+ # Build the shared framework
+ - script: ./eng/build.cmd -ci -nativeToolsOnMachine -nobl -all -pack -arch x64
+ /p:CrossgenOutput=false /p:IsIdentityModelTestJob=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
+ displayName: Build shared fx
+ # -noBuildRepoTasks -noBuildNative -noBuild to avoid repeating work done in the previous step.
+ - script: .\eng\build.cmd -ci -nobl -all -noBuildRepoTasks -noBuildNative -noBuild -test
+ -projects eng\helix\helix.proj /p:IsHelixJob=true /p:RunTemplateTests=false
+ /p:CrossgenOutput=false /p:IsIdentityModelTestJob=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
+ displayName: Run build.cmd helix target
+ env:
+ HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues
+ SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops
+ artifacts:
+ - name: Helix_logs
+ path: artifacts/log/
+ publishOnError: true
diff --git a/.azure/pipelines/jobs/codesign-xplat.yml b/.azure/pipelines/jobs/codesign-xplat.yml
index c96dc12f93ad..5b585d4a62fe 100644
--- a/.azure/pipelines/jobs/codesign-xplat.yml
+++ b/.azure/pipelines/jobs/codesign-xplat.yml
@@ -3,7 +3,7 @@ parameters:
inputName: ''
jobs:
-- template: default-build.yml
+- template: default-build.yml@self
parameters:
codeSign: true
dependsOn:
@@ -13,9 +13,8 @@ jobs:
jobDisplayName: "Code-sign ${{ parameters.inputName }} packages"
agentOs: Windows
installNodeJs: false
- installJdk: false
steps:
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@2
displayName: Download ${{ parameters.inputName }} artifacts
inputs:
artifactName: ${{ parameters.inputName }}_Packages
diff --git a/.azure/pipelines/jobs/default-build.yml b/.azure/pipelines/jobs/default-build.yml
index 9c9b41d2415e..eee89df3733a 100644
--- a/.azure/pipelines/jobs/default-build.yml
+++ b/.azure/pipelines/jobs/default-build.yml
@@ -68,7 +68,6 @@ parameters:
container: ''
enableRichCodeNavigation: ''
installNodeJs: true
- installJdk: true # Ignored unless agentOs == Windows.
timeoutInMinutes: 180
testRunTitle: $(AgentOsName)-$(BuildConfiguration)
useHostedUbuntu: true
@@ -79,156 +78,346 @@ parameters:
cancelTimeoutInMinutes: 15
jobs:
-- template: /eng/common/templates/job/job.yml
- parameters:
- name: ${{ coalesce(parameters.jobName, parameters.agentOs) }}
- displayName: ${{ coalesce(parameters.jobDisplayName, parameters.agentOs) }}
- dependsOn: ${{ parameters.dependsOn }}
- ${{ if ne(parameters.condition, '') }}:
- condition: ${{ parameters.condition }}
- ${{ if ne(parameters.enableRichCodeNavigation, '') }}:
- enableRichCodeNavigation: true
- richCodeNavigationLanguage: 'csharp,typescript,java'
- timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
- cancelTimeoutInMinutes: ${{ parameters.cancelTimeoutInMinutes }}
- ${{ if and(eq(variables['System.TeamProject'], 'internal'), eq(parameters.agentOs, 'Windows'), eq(parameters.codeSign, 'true')) }}:
- enableMicrobuild: true
- enablePublishBuildAssets: true
- enablePublishUsingPipelines: ${{ variables._PublishUsingPipelines }}
- ${{ if and(eq(parameters.isAzDOTestingJob, true), ne(parameters.enablePublishTestResults, false)) }}:
- enablePublishTestResults: true
- testResultsFormat: xUnit # Have no vsTest results in any job.
- mergeTestResults: true
- testRunTitle: ${{ parameters.testRunTitle }}
- enableSbom: ${{ parameters.enableSbom }}
- enableTelemetry: true
- helixRepo: dotnet/aspnetcore
- helixType: build.product/
- workspace:
- clean: all
- # Map friendly OS names to the right queue
- # See https://github.com/dotnet/arcade/blob/master/Documentation/ChoosingAMachinePool.md
- pool:
- ${{ if eq(parameters.agentOs, 'macOS') }}:
- vmImage: macOS-11
- ${{ if eq(parameters.agentOs, 'Linux') }}:
- ${{ if and(eq(parameters.useHostedUbuntu, true), or(ne(variables['System.TeamProject'], 'internal'), in(variables['Build.Reason'], 'Manual', 'PullRequest', 'Schedule'))) }}:
- vmImage: ubuntu-20.04
- ${{ if or(eq(parameters.useHostedUbuntu, false), and(eq(variables['System.TeamProject'], 'internal'), notin(variables['Build.Reason'], 'Manual', 'PullRequest', 'Schedule'))) }}:
- ${{ if eq(variables['System.TeamProject'], 'public') }}:
+- ${{ if ne(variables['System.TeamProject'], 'internal') }}:
+ - template: /eng/common/templates/job/job.yml@self
+ parameters:
+ name: ${{ coalesce(parameters.jobName, parameters.agentOs) }}
+ displayName: ${{ coalesce(parameters.jobDisplayName, parameters.agentOs) }}
+ dependsOn: ${{ parameters.dependsOn }}
+ ${{ if ne(parameters.condition, '') }}:
+ condition: ${{ parameters.condition }}
+ ${{ if ne(parameters.enableRichCodeNavigation, '') }}:
+ enableRichCodeNavigation: true
+ richCodeNavigationLanguage: 'csharp,typescript,java'
+ timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
+ cancelTimeoutInMinutes: ${{ parameters.cancelTimeoutInMinutes }}
+ ${{ if and(eq(parameters.isAzDOTestingJob, true), ne(parameters.enablePublishTestResults, false)) }}:
+ enablePublishTestResults: true
+ testResultsFormat: xUnit # Have no vsTest results in any job.
+ mergeTestResults: true
+ testRunTitle: ${{ parameters.testRunTitle }}
+ enableSbom: ${{ parameters.enableSbom }}
+ enableTelemetry: true
+ helixRepo: dotnet/aspnetcore
+ helixType: build.product/
+ workspace:
+ clean: all
+ # Map friendly OS names to the right queue
+ # See https://github.com/dotnet/arcade/blob/master/Documentation/ChoosingAMachinePool.md
+ pool:
+ ${{ if eq(parameters.agentOs, 'macOS') }}:
+ vmImage: macOS-13
+ ${{ if eq(parameters.agentOs, 'Linux') }}:
+ ${{ if eq(parameters.useHostedUbuntu, true) }}:
+ vmImage: ubuntu-22.04
+ ${{ if eq(parameters.useHostedUbuntu, false) }}:
name: $(DncEngPublicBuildPool)
- demands: ImageOverride -equals Build.Ubuntu.2004.Amd64.Open
- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- name: $(DncEngInternalBuildPool)
- demands: ImageOverride -equals Build.Ubuntu.2004.Amd64
- ${{ if eq(parameters.agentOs, 'Windows') }}:
- ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ demands: ImageOverride -equals Build.Ubuntu.2204.Amd64.Open
+ ${{ if eq(parameters.agentOs, 'Windows') }}:
name: $(DncEngPublicBuildPool)
- demands: ImageOverride -equals 1es-windows-2022-open
- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ demands: ImageOverride -equals windows.vs2022preview.amd64.open
+ ${{ if ne(parameters.container, '') }}:
+ container: ${{ parameters.container }}
+ ${{ if ne(parameters.disableComponentGovernance, '') }}:
+ disableComponentGovernance: ${{ parameters.disableComponentGovernance }}
+ variables:
+ - AgentOsName: ${{ parameters.agentOs }}
+ - ASPNETCORE_TEST_LOG_MAXPATH: "200" # Keep test log file name length low enough for artifact zipping
+ - BuildScriptArgs: ${{ parameters.buildArgs }}
+ - _BuildConfig: ${{ parameters.configuration }}
+ - BuildConfiguration: ${{ parameters.configuration }}
+ - BuildDirectory: ${{ parameters.buildDirectory }}
+ - DOTNET_CLI_HOME: $(System.DefaultWorkingDirectory)
+ - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
+ - TeamName: AspNetCore
+ - ${{ if ne(parameters.codeSign, true) }}:
+ - _SignType: ''
+ - LC_ALL: 'en_US.UTF-8'
+ - LANG: 'en_US.UTF-8'
+ - LANGUAGE: 'en_US.UTF-8'
+ # Log environment variables in binary logs to ease debugging
+ - MSBUILDLOGALLENVIRONMENTVARIABLES: true
+ # Rely on task Arcade injects, not auto-injected build step.
+ - skipComponentGovernanceDetection: true
+ - ${{ each variable in parameters.variables }}:
+ # handle a variable list using "name" and "value" properties
+ # 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 name/value pairs (converting them into variable list entries)
+ # example:
+ # - [name]: [value]
+ - ${{ if and(eq(variable.name, ''), eq(variable.group, '')) }}:
+ - ${{ each pair in variable }}:
+ - name: ${{ pair.key }}
+ value: ${{ pair.value }}
+ steps:
+ - ${{ if ne(parameters.agentOs, 'Windows') }}:
+ - script: df -h
+ displayName: Disk size
+ - ${{ if eq(parameters.agentOs, 'macOS') }}:
+ - script: sudo xcode-select -s /Applications/Xcode_15.2.0.app/Contents/Developer
+ displayName: Use XCode 15.2.0
+ - checkout: self
+ clean: true
+ - ${{ if and(eq(parameters.agentOs, 'Windows'), eq(parameters.isAzDOTestingJob, true)) }}:
+ - powershell: ./eng/scripts/InstallProcDump.ps1
+ displayName: Install ProcDump
+ - powershell: ./eng/scripts/StartDumpCollectionForHangingBuilds.ps1 $(ProcDumpPath)procdump.exe artifacts/dumps/ (Get-Date).AddMinutes(160) dotnet
+ displayName: Start background dump collection
+ - ${{ if eq(parameters.installNodeJs, 'true') }}:
+ - task: NodeTool@0
+ displayName: Install Node 18.x
+ inputs:
+ versionSpec: 18.x
+ - ${{ if and(eq(parameters.agentOs, 'Windows'), eq(parameters.isAzDOTestingJob, true)) }}:
+ - powershell: |
+ Write-Host "##vso[task.setvariable variable=SeleniumProcessTrackingFolder]$(Build.SourcesDirectory)\artifacts\tmp\selenium\"
+ ./eng/scripts/InstallGoogleChrome.ps1
+ displayName: Install Chrome
+ - ${{ if eq(parameters.agentOs, 'Windows') }}:
+ - powershell: Write-Host "##vso[task.prependpath]$(DOTNET_CLI_HOME)\.dotnet\tools"
+ displayName: Add dotnet tools to path
+ - ${{ if ne(parameters.agentOs, 'Windows') }}:
+ - script: echo "##vso[task.prependpath]$(DOTNET_CLI_HOME)/.dotnet/tools"
+ displayName: Add dotnet tools to path
+
+ - ${{ parameters.beforeBuild }}
+
+ # Add COMPlus_* environment variables to build steps.
+ - ${{ if ne(parameters.steps, '')}}:
+ - ${{ each step in parameters.steps }}:
+ # Include all properties e.g. `task: CmdLine@2` or `displayName: Build x64` _except_ a provided `env:`.
+ # Aim here is to avoid having two `env:` properties in the expanded YAML.
+ - ${{ each pair in step }}:
+ ${{ if ne(pair.key, 'env') }}:
+ ${{ pair.key }}: ${{ pair.value }}
+ env:
+ # Include the variables we always want.
+ COMPlus_DbgEnableMiniDump: 1
+ COMPlus_DbgMiniDumpName: "$(System.DefaultWorkingDirectory)/dotnet-%d.%t.core"
+ # Expand provided `env:` properties, if any.
+ ${{ if step.env }}:
+ ${{ step.env }}
+ - ${{ if eq(parameters.steps, '')}}:
+ - ${{ if eq(parameters.agentOs, 'Windows') }}:
+ - script: $(BuildDirectory)\build.cmd -ci -nativeToolsOnMachine -nobl -Configuration $(BuildConfiguration) $(BuildScriptArgs)
+ /p:DotNetSignType=$(_SignType)
+ displayName: Run build.cmd
+ env:
+ COMPlus_DbgEnableMiniDump: 1
+ COMPlus_DbgMiniDumpName: "$(System.DefaultWorkingDirectory)/dotnet-%d.%t.core"
+ - ${{ if ne(parameters.agentOs, 'Windows') }}:
+ - script: $(BuildDirectory)/build.sh --ci --nobl --configuration $(BuildConfiguration) $(BuildScriptArgs)
+ displayName: Run build.sh
+ env:
+ COMPlus_DbgEnableMiniDump: 1
+ COMPlus_DbgMiniDumpName: "$(System.DefaultWorkingDirectory)/dotnet-%d.%t.core"
+
+ - ${{ parameters.afterBuild }}
+
+ - ${{ if eq(parameters.agentOs, 'Linux') }}:
+ - script: df -h && du -h --threshold=50MB ..
+ displayName: Disk utilization
+ - ${{ if eq(parameters.agentOs, 'macOS') }}:
+ - script: df -h && du -h -d 3 ..
+ displayName: Disk utilization
+
+ - ${{ if and(eq(parameters.agentOs, 'Windows'), eq(parameters.isAzDOTestingJob, true)) }}:
+ - powershell: ./eng/scripts/FinishDumpCollectionForHangingBuilds.ps1 artifacts/dumps/
+ displayName: Finish background dump collection
+ continueOnError: true
+ condition: always()
+
+ - ${{ if eq(parameters.agentOs, 'Windows') }}:
+ - powershell: eng\scripts\KillProcesses.ps1
+ displayName: Kill processes
+ continueOnError: true
+ condition: always()
+ - ${{ if ne(parameters.agentOs, 'Windows') }}:
+ - script: eng/scripts/KillProcesses.sh
+ displayName: Kill processes
+ continueOnError: true
+ condition: always()
+
+ - ${{ each artifact in parameters.artifacts }}:
+ - task: PublishBuildArtifacts@1
+ displayName: Upload artifacts from ${{ artifact.path }}
+ condition: and(or(succeeded(), eq('${{ artifact.publishOnError }}', 'true')), or(eq(variables['system.pullrequest.isfork'], false), eq('${{ artifact.includeForks }}', 'true')))
+ continueOnError: true
+ inputs:
+ # Assume runtime variable values are absolute paths already.
+ ${{ if startsWith(artifact.path, '$(') }}:
+ pathToPublish: ${{ artifact.path }}
+ ${{ if not(startsWith(artifact.path, '$(')) }}:
+ pathToPublish: $(Build.SourcesDirectory)/${{ artifact.path }}
+ ${{ if eq(artifact.name, '') }}:
+ artifactName: artifacts-$(AgentOsName)-$(BuildConfiguration)
+ ${{ if ne(artifact.name, '') }}:
+ artifactName: ${{ artifact.name }}
+ artifactType: Container
+ parallel: true
+
+ - ${{ if eq(parameters.agentOs, 'Windows') }}:
+ - powershell: $(Build.SourcesDirectory)/eng/scripts/UploadCores.ps1 -ProcDumpOutputPath artifacts/dumps/
+ condition: failed()
+ displayName: Upload cores
+ - ${{ if ne(parameters.agentOs, 'Windows') }}:
+ - script: $(Build.SourcesDirectory)/eng/scripts/upload-cores.sh
+ condition: failed()
+ displayName: Upload cores
+
+ - ${{ if and(eq(parameters.isAzDOTestingJob, true), ne(parameters.enablePublishTestResults, false)) }}:
+ - task: PublishTestResults@2
+ displayName: Publish js test results
+ condition: always()
+ inputs:
+ testResultsFormat: JUnit
+ testResultsFiles: '**/artifacts/log/**/*.junit.xml'
+ testRunTitle: $(AgentOsName)-$(BuildConfiguration)-js
+ mergeTestResults: true
+ buildConfiguration: $(BuildConfiguration)
+ buildPlatform: $(AgentOsName)
+
+- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ - template: /eng/common/templates-official/job/job.yml@self
+ parameters:
+ name: ${{ coalesce(parameters.jobName, parameters.agentOs) }}
+ displayName: ${{ coalesce(parameters.jobDisplayName, parameters.agentOs) }}
+ dependsOn: ${{ parameters.dependsOn }}
+ ${{ if ne(parameters.condition, '') }}:
+ condition: ${{ parameters.condition }}
+ ${{ if ne(parameters.enableRichCodeNavigation, '') }}:
+ enableRichCodeNavigation: true
+ richCodeNavigationLanguage: 'csharp,typescript,java'
+ timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
+ cancelTimeoutInMinutes: ${{ parameters.cancelTimeoutInMinutes }}
+ ${{ if and(eq(parameters.agentOs, 'Windows'), eq(parameters.codeSign, 'true')) }}:
+ enableMicrobuild: true
+ enablePublishBuildAssets: true
+ enablePublishUsingPipelines: ${{ variables._PublishUsingPipelines }}
+ ${{ if and(eq(parameters.isAzDOTestingJob, true), ne(parameters.enablePublishTestResults, false)) }}:
+ enablePublishTestResults: true
+ testResultsFormat: xUnit # Have no vsTest results in any job.
+ mergeTestResults: true
+ testRunTitle: ${{ parameters.testRunTitle }}
+ enableSbom: ${{ parameters.enableSbom }}
+ enableTelemetry: true
+ helixRepo: dotnet/aspnetcore
+ helixType: build.product/
+ workspace:
+ clean: all
+ # Map friendly OS names to the right queue
+ # See https://github.com/dotnet/arcade/blob/master/Documentation/ChoosingAMachinePool.md
+ pool:
+ ${{ if eq(parameters.agentOs, 'macOS') }}:
+ name: Azure Pipelines
+ image: macOS-13
+ os: macOS
+ ${{ if eq(parameters.agentOs, 'Linux') }}:
+ name: $(DncEngInternalBuildPool)
+ image: 1es-ubuntu-2204
+ os: linux
+ ${{ if eq(parameters.agentOs, 'Windows') }}:
name: $(DncEngInternalBuildPool)
# Visual Studio Enterprise - contains some stuff, like SQL Server and IIS Express, that we use for testing
- demands: ImageOverride -equals 1es-windows-2022
- ${{ if ne(parameters.container, '') }}:
- container: ${{ parameters.container }}
- ${{ if ne(parameters.disableComponentGovernance, '') }}:
- disableComponentGovernance: ${{ parameters.disableComponentGovernance }}
- variables:
- - AgentOsName: ${{ parameters.agentOs }}
- - ASPNETCORE_TEST_LOG_MAXPATH: "200" # Keep test log file name length low enough for artifact zipping
- - BuildScriptArgs: ${{ parameters.buildArgs }}
- - _BuildConfig: ${{ parameters.configuration }}
- - BuildConfiguration: ${{ parameters.configuration }}
- - BuildDirectory: ${{ parameters.buildDirectory }}
- - DOTNET_CLI_HOME: $(System.DefaultWorkingDirectory)
- - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
- - TeamName: AspNetCore
- - ${{ if eq(parameters.agentOs, 'Linux') }}:
+ image: windows.vs2022preview.amd64
+ os: windows
+ ${{ if ne(parameters.container, '') }}:
+ container: ${{ parameters.container }}
+ ${{ if ne(parameters.disableComponentGovernance, '') }}:
+ disableComponentGovernance: ${{ parameters.disableComponentGovernance }}
+ variables:
+ - AgentOsName: ${{ parameters.agentOs }}
+ - ASPNETCORE_TEST_LOG_MAXPATH: "200" # Keep test log file name length low enough for artifact zipping
+ - BuildScriptArgs: ${{ parameters.buildArgs }}
+ - _BuildConfig: ${{ parameters.configuration }}
+ - BuildConfiguration: ${{ parameters.configuration }}
+ - BuildDirectory: ${{ parameters.buildDirectory }}
+ - DOTNET_CLI_HOME: $(System.DefaultWorkingDirectory)
+ - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
+ - TeamName: AspNetCore
+ - ${{ if eq(parameters.codeSign, true) }}:
+ - ${{ if notin(variables['Build.Reason'], 'PullRequest') }}:
+ - _SignType: real
+ - ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
+ - _SignType: test
- LC_ALL: 'en_US.UTF-8'
- LANG: 'en_US.UTF-8'
- LANGUAGE: 'en_US.UTF-8'
- - ${{ if and(eq(parameters.installJdk, 'true'), eq(parameters.agentOs, 'Windows')) }}:
- - JAVA_HOME: $(Agent.BuildDirectory)\.tools\jdk\win-x64
- - ${{ if or(ne(parameters.codeSign, true), ne(variables['System.TeamProject'], 'internal')) }}:
- - _SignType: ''
- - ${{ if and(eq(parameters.codeSign, true), eq(variables['System.TeamProject'], 'internal')) }}:
- - ${{ if notin(variables['Build.Reason'], 'PullRequest') }}:
- - _SignType: real
- - ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
- - _SignType: test
- - LC_ALL: 'en_US.UTF-8'
- - LANG: 'en_US.UTF-8'
- - LANGUAGE: 'en_US.UTF-8'
- # Log environment variables in binary logs to ease debugging
- - MSBUILDLOGALLENVIRONMENTVARIABLES: true
- # Rely on task Arcade injects, not auto-injected build step.
- - skipComponentGovernanceDetection: true
- - ${{ each variable in parameters.variables }}:
- # handle a variable list using "name" and "value" properties
- # example:
- # - name: [key]
- # value: [value]
- - ${{ if ne(variable.name, '') }}:
- - name: ${{ variable.name }}
- value: ${{ variable.value }}
+ # Log environment variables in binary logs to ease debugging
+ - MSBUILDLOGALLENVIRONMENTVARIABLES: true
+ # Rely on task Arcade injects, not auto-injected build step.
+ - skipComponentGovernanceDetection: true
+ - ${{ each variable in parameters.variables }}:
+ # handle a variable list using "name" and "value" properties
+ # 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 variable groups
+ - ${{ if ne(variable.group, '') }}:
+ - group: ${{ variable.group }}
- # handle name/value pairs (converting them into variable list entries)
- # example:
- # - [name]: [value]
- - ${{ if and(eq(variable.name, ''), eq(variable.group, '')) }}:
- - ${{ each pair in variable }}:
- - name: ${{ pair.key }}
- value: ${{ pair.value }}
- steps:
- - ${{ if ne(parameters.agentOs, 'Windows') }}:
- - script: df -h
- displayName: Disk size
- - ${{ if eq(parameters.agentOs, 'macOS') }}:
- - script: sudo xcode-select -s /Applications/Xcode_12.5.1.app/Contents/Developer
- displayName: Use XCode 12.5.1
- - checkout: self
- clean: true
- - ${{ if and(eq(parameters.agentOs, 'Windows'), eq(parameters.isAzDOTestingJob, true)) }}:
- - powershell: ./eng/scripts/InstallProcDump.ps1
- displayName: Install ProcDump
- - powershell: ./eng/scripts/StartDumpCollectionForHangingBuilds.ps1 $(ProcDumpPath)procdump.exe artifacts/dumps/ (Get-Date).AddMinutes(160) dotnet
- displayName: Start background dump collection
- - ${{ if eq(parameters.installNodeJs, 'true') }}:
- - task: NodeTool@0
- displayName: Install Node 18.x
- inputs:
- versionSpec: 18.x
- - ${{ if and(eq(parameters.installJdk, 'true'), eq(parameters.agentOs, 'Windows')) }}:
- - powershell: ./eng/scripts/InstallJdk.ps1
- displayName: Install JDK 11
- - ${{ if eq(parameters.isAzDOTestingJob, true) }}:
+ # handle name/value pairs (converting them into variable list entries)
+ # example:
+ # - [name]: [value]
+ - ${{ if and(eq(variable.name, ''), eq(variable.group, '')) }}:
+ - ${{ each pair in variable }}:
+ - name: ${{ pair.key }}
+ value: ${{ pair.value }}
+ steps:
+ - ${{ if ne(parameters.agentOs, 'Windows') }}:
+ - script: df -h
+ displayName: Disk size
+ - ${{ if eq(parameters.agentOs, 'macOS') }}:
+ - script: sudo xcode-select -s /Applications/Xcode_15.2.0.app/Contents/Developer
+ displayName: Use XCode 15.2.0
+ - checkout: self
+ clean: true
+ - ${{ if and(eq(parameters.agentOs, 'Windows'), eq(parameters.isAzDOTestingJob, true)) }}:
+ - powershell: ./eng/scripts/InstallProcDump.ps1
+ displayName: Install ProcDump
+ - powershell: ./eng/scripts/StartDumpCollectionForHangingBuilds.ps1 $(ProcDumpPath)procdump.exe artifacts/dumps/ (Get-Date).AddMinutes(160) dotnet
+ displayName: Start background dump collection
+ - ${{ if eq(parameters.installNodeJs, 'true') }}:
+ - task: NodeTool@0
+ displayName: Install Node 18.x
+ inputs:
+ versionSpec: 18.x
+ - ${{ if and(eq(parameters.agentOs, 'Windows'), eq(parameters.isAzDOTestingJob, true)) }}:
- powershell: |
Write-Host "##vso[task.setvariable variable=SeleniumProcessTrackingFolder]$(Build.SourcesDirectory)\artifacts\tmp\selenium\"
./eng/scripts/InstallGoogleChrome.ps1
displayName: Install Chrome
- - ${{ if eq(parameters.agentOs, 'Windows') }}:
- - powershell: Write-Host "##vso[task.prependpath]$(DOTNET_CLI_HOME)\.dotnet\tools"
- displayName: Add dotnet tools to path
- - ${{ if ne(parameters.agentOs, 'Windows') }}:
- - script: echo "##vso[task.prependpath]$(DOTNET_CLI_HOME)/.dotnet/tools"
- displayName: Add dotnet tools to path
+ - ${{ if eq(parameters.agentOs, 'Windows') }}:
+ - powershell: Write-Host "##vso[task.prependpath]$(DOTNET_CLI_HOME)\.dotnet\tools"
+ displayName: Add dotnet tools to path
+ - ${{ if ne(parameters.agentOs, 'Windows') }}:
+ - script: echo "##vso[task.prependpath]$(DOTNET_CLI_HOME)/.dotnet/tools"
+ displayName: Add dotnet tools to path
- - ${{ parameters.beforeBuild }}
+ - ${{ parameters.beforeBuild }}
- - ${{ if ne(variables['System.TeamProject'], 'public') }}:
- ${{ if eq(parameters.agentOs, 'Windows') }}:
- - ${{ if ne(variables['System.TeamProject'], 'public') }}:
- - task: PowerShell@2
- displayName: Setup Private Feeds Credentials
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
- arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
- env:
- Token: $(dn-bot-dnceng-artifact-feeds-rw)
+ - task: PowerShell@2
+ displayName: Setup Private Feeds Credentials
+ inputs:
+ filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
+ arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
+ env:
+ Token: $(dn-bot-dnceng-artifact-feeds-rw)
- ${{ if ne(parameters.agentOs, 'Windows') }}:
- task: Bash@3
displayName: Setup Private Feeds Credentials
@@ -238,100 +427,116 @@ jobs:
env:
Token: $(dn-bot-dnceng-artifact-feeds-rw)
- # Add COMPlus_* environment variables to build steps.
- - ${{ if ne(parameters.steps, '')}}:
- - ${{ each step in parameters.steps }}:
- # Include all properties e.g. `task: CmdLine@2` or `displayName: Build x64` _except_ a provided `env:`.
- # Aim here is to avoid having two `env:` properties in the expanded YAML.
- - ${{ each pair in step }}:
- ${{ if ne(pair.key, 'env') }}:
- ${{ pair.key }}: ${{ pair.value }}
+ # Populates internal runtime SAS tokens.
+ - template: /eng/common/templates-official/steps/enable-internal-runtimes.yml
+ parameters:
+ expiryInHours: 2
+
+ # Populate dotnetbuilds-internal base64 sas tokens.
+ - template: /eng/common/templates-official/steps/get-delegation-sas.yml
+ parameters:
+ federatedServiceConnection: 'dotnetbuilds-internal-read'
+ outputVariableName: 'dotnetbuilds-internal-container-read-token'
+ expiryInHours: 2
+ base64Encode: false
+ storageAccount: dotnetbuilds
+ container: internal
+ permissions: rl
+
+ # Add COMPlus_* environment variables to build steps.
+ - ${{ if ne(parameters.steps, '')}}:
+ - ${{ each step in parameters.steps }}:
+ # Include all properties e.g. `task: CmdLine@2` or `displayName: Build x64` _except_ a provided `env:`.
+ # Aim here is to avoid having two `env:` properties in the expanded YAML.
+ - ${{ each pair in step }}:
+ ${{ if ne(pair.key, 'env') }}:
+ ${{ pair.key }}: ${{ pair.value }}
+ env:
+ # Include the variables we always want.
+ COMPlus_DbgEnableMiniDump: 1
+ COMPlus_DbgMiniDumpName: "$(System.DefaultWorkingDirectory)/dotnet-%d.%t.core"
+ DotNetBuildsInternalReadSasToken: $(dotnetbuilds-internal-container-read-token)
+ # Expand provided `env:` properties, if any.
+ ${{ if step.env }}:
+ ${{ step.env }}
+ - ${{ if eq(parameters.steps, '')}}:
+ - ${{ if eq(parameters.agentOs, 'Windows') }}:
+ - script: $(BuildDirectory)\build.cmd -ci -nativeToolsOnMachine -nobl -Configuration $(BuildConfiguration) $(BuildScriptArgs)
+ /p:DotNetSignType=$(_SignType)
+ displayName: Run build.cmd
+ env:
+ COMPlus_DbgEnableMiniDump: 1
+ COMPlus_DbgMiniDumpName: "$(System.DefaultWorkingDirectory)/dotnet-%d.%t.core"
+ DotNetBuildsInternalReadSasToken: $(dotnetbuilds-internal-container-read-token)
+ - ${{ if ne(parameters.agentOs, 'Windows') }}:
+ - script: $(BuildDirectory)/build.sh --ci --nobl --configuration $(BuildConfiguration) $(BuildScriptArgs)
+ displayName: Run build.sh
env:
- # Include the variables we always want.
COMPlus_DbgEnableMiniDump: 1
COMPlus_DbgMiniDumpName: "$(System.DefaultWorkingDirectory)/dotnet-%d.%t.core"
DotNetBuildsInternalReadSasToken: $(dotnetbuilds-internal-container-read-token)
- # Expand provided `env:` properties, if any.
- ${{ if step.env }}:
- ${{ step.env }}
- - ${{ if eq(parameters.steps, '')}}:
- - ${{ if eq(parameters.agentOs, 'Windows') }}:
- - script: $(BuildDirectory)\build.cmd -ci -nobl -Configuration $(BuildConfiguration) $(BuildScriptArgs)
- /p:DotNetSignType=$(_SignType)
- displayName: Run build.cmd
- env:
- COMPlus_DbgEnableMiniDump: 1
- COMPlus_DbgMiniDumpName: "$(System.DefaultWorkingDirectory)/dotnet-%d.%t.core"
- DotNetBuildsInternalReadSasToken: $(dotnetbuilds-internal-container-read-token)
- - ${{ if ne(parameters.agentOs, 'Windows') }}:
- - script: $(BuildDirectory)/build.sh --ci --nobl --configuration $(BuildConfiguration) $(BuildScriptArgs)
- displayName: Run build.sh
- env:
- COMPlus_DbgEnableMiniDump: 1
- COMPlus_DbgMiniDumpName: "$(System.DefaultWorkingDirectory)/dotnet-%d.%t.core"
- DotNetBuildsInternalReadSasToken: $(dotnetbuilds-internal-container-read-token)
- - ${{ parameters.afterBuild }}
+ - ${{ parameters.afterBuild }}
- - ${{ if eq(parameters.agentOs, 'Linux') }}:
- - script: df -h && du -h --threshold=50MB ..
- displayName: Disk utilization
- - ${{ if eq(parameters.agentOs, 'macOS') }}:
- - script: df -h && du -h -d 3 ..
- displayName: Disk utilization
+ - ${{ if eq(parameters.agentOs, 'Linux') }}:
+ - script: df -h && du -h --threshold=50MB ..
+ displayName: Disk utilization
+ - ${{ if eq(parameters.agentOs, 'macOS') }}:
+ - script: df -h && du -h -d 3 ..
+ displayName: Disk utilization
- - ${{ if and(eq(parameters.agentOs, 'Windows'), eq(parameters.isAzDOTestingJob, true)) }}:
- - powershell: ./eng/scripts/FinishDumpCollectionForHangingBuilds.ps1 artifacts/dumps/
- displayName: Finish background dump collection
- continueOnError: true
- condition: always()
+ - ${{ if and(eq(parameters.agentOs, 'Windows'), eq(parameters.isAzDOTestingJob, true)) }}:
+ - powershell: ./eng/scripts/FinishDumpCollectionForHangingBuilds.ps1 artifacts/dumps/
+ displayName: Finish background dump collection
+ continueOnError: true
+ condition: always()
- - ${{ if eq(parameters.agentOs, 'Windows') }}:
- - powershell: eng\scripts\KillProcesses.ps1
- displayName: Kill processes
- continueOnError: true
- condition: always()
- - ${{ if ne(parameters.agentOs, 'Windows') }}:
- - script: eng/scripts/KillProcesses.sh
- displayName: Kill processes
- continueOnError: true
- condition: always()
+ - ${{ if eq(parameters.agentOs, 'Windows') }}:
+ - powershell: eng\scripts\KillProcesses.ps1
+ displayName: Kill processes
+ continueOnError: true
+ condition: always()
+ - ${{ if ne(parameters.agentOs, 'Windows') }}:
+ - script: eng/scripts/KillProcesses.sh
+ displayName: Kill processes
+ continueOnError: true
+ condition: always()
- - ${{ each artifact in parameters.artifacts }}:
- - task: PublishBuildArtifacts@1
- displayName: Upload artifacts from ${{ artifact.path }}
- condition: and(or(succeeded(), eq('${{ artifact.publishOnError }}', 'true')), or(eq(variables['system.pullrequest.isfork'], false), eq('${{ artifact.includeForks }}', 'true')))
- continueOnError: true
- inputs:
- # Assume runtime variable values are absolute paths already.
- ${{ if startsWith(artifact.path, '$(') }}:
- pathToPublish: ${{ artifact.path }}
- ${{ if not(startsWith(artifact.path, '$(')) }}:
- pathToPublish: $(Build.SourcesDirectory)/${{ artifact.path }}
- ${{ if eq(artifact.name, '') }}:
- artifactName: artifacts-$(AgentOsName)-$(BuildConfiguration)
- ${{ if ne(artifact.name, '') }}:
- artifactName: ${{ artifact.name }}
- artifactType: Container
- parallel: true
+ - ${{ each artifact in parameters.artifacts }}:
+ - task: 1ES.PublishPipelineArtifact@1
+ displayName: Upload artifacts from ${{ artifact.path }}
+ condition: and(or(succeeded(), eq('${{ artifact.publishOnError }}', 'true')), or(eq(variables['system.pullrequest.isfork'], false), eq('${{ artifact.includeForks }}', 'true')))
+ continueOnError: true
+ inputs:
+ # Assume runtime variable values are absolute paths already.
+ ${{ if startsWith(artifact.path, '$(') }}:
+ path: ${{ artifact.path }}
+ ${{ if not(startsWith(artifact.path, '$(')) }}:
+ path: $(Build.SourcesDirectory)/${{ artifact.path }}
+ ${{ if eq(artifact.name, '') }}:
+ artifactName: artifacts-$(AgentOsName)-$(BuildConfiguration)
+ ${{ if ne(artifact.name, '') }}:
+ artifactName: ${{ artifact.name }}
+ artifactType: Container
+ parallel: true
- - ${{ if eq(parameters.agentOs, 'Windows') }}:
- - powershell: $(Build.SourcesDirectory)/eng/scripts/UploadCores.ps1 -ProcDumpOutputPath artifacts/dumps/
- condition: failed()
- displayName: Upload cores
- - ${{ if ne(parameters.agentOs, 'Windows') }}:
- - script: $(Build.SourcesDirectory)/eng/scripts/upload-cores.sh
- condition: failed()
- displayName: Upload cores
+ - ${{ if eq(parameters.agentOs, 'Windows') }}:
+ - powershell: $(Build.SourcesDirectory)/eng/scripts/UploadCores.ps1 -ProcDumpOutputPath artifacts/dumps/
+ condition: failed()
+ displayName: Upload cores
+ - ${{ if ne(parameters.agentOs, 'Windows') }}:
+ - script: $(Build.SourcesDirectory)/eng/scripts/upload-cores.sh
+ condition: failed()
+ displayName: Upload cores
- - ${{ if and(eq(parameters.isAzDOTestingJob, true), ne(parameters.enablePublishTestResults, false)) }}:
- - task: PublishTestResults@2
- displayName: Publish js test results
- condition: always()
- inputs:
- testResultsFormat: JUnit
- testResultsFiles: '**/artifacts/log/**/*.junit.xml'
- testRunTitle: $(AgentOsName)-$(BuildConfiguration)-js
- mergeTestResults: true
- buildConfiguration: $(BuildConfiguration)
- buildPlatform: $(AgentOsName)
+ - ${{ if and(eq(parameters.isAzDOTestingJob, true), ne(parameters.enablePublishTestResults, false)) }}:
+ - task: PublishTestResults@2
+ displayName: Publish js test results
+ condition: always()
+ inputs:
+ testResultsFormat: JUnit
+ testResultsFiles: '**/artifacts/log/**/*.junit.xml'
+ testRunTitle: $(AgentOsName)-$(BuildConfiguration)-js
+ mergeTestResults: true
+ buildConfiguration: $(BuildConfiguration)
+ buildPlatform: $(AgentOsName)
diff --git a/.azure/pipelines/signalr-daily-tests.yml b/.azure/pipelines/signalr-daily-tests.yml
index 5bedd10fc3f4..ad33363fad91 100644
--- a/.azure/pipelines/signalr-daily-tests.yml
+++ b/.azure/pipelines/signalr-daily-tests.yml
@@ -6,7 +6,6 @@
variables:
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
- - group: DotNet-MSRC-Storage
- group: AzureDevOps-Artifact-Feeds-Pats
- template: /eng/common/templates/variables/pool-providers.yml
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 42da92f402f0..9da9605f0cc3 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -10,7 +10,7 @@
/.vscode/ @captainsafia
/.github/ @dotnet/aspnet-build @wtgodbe
/.github/*_TEMPLATE/ @dotnet/aspnet-build @wtgodbe @mkArtakMSFT
-/.github/workflows/ @dotnet/aspnet-build @wtgodbe @tratcher
+/.github/workflows/ @dotnet/aspnet-build @wtgodbe
/docs/ @captainsafia @mkArtakMSFT
/eng/ @dotnet/aspnet-build @wtgodbe
/eng/common/ @dotnet-maestro-bot
@@ -21,34 +21,31 @@
/src/Caching/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @captainsafia @halter73 @mgravell
/src/Components/ @dotnet/aspnet-blazor-eng
/src/Components/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @dotnet/aspnet-blazor-eng
-/src/DefaultBuilder/ @tratcher @halter73
-/src/DefaultBuilder/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @tratcher
+/src/DefaultBuilder/ @halter73
+/src/DefaultBuilder/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review
/src/Grpc/ @JamesNK @captainsafia @mgravell
/src/Grpc/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @JamesNK @captainsafia @mgravell
-/src/Hosting/ @tratcher @halter73
-/src/Hosting/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @tratcher
-/src/Http/ @tratcher @BrennanConroy @halter73 @captainsafia
-/src/Http/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @tratcher @BrennanConroy
+/src/Hosting/ @halter73
+/src/Hosting/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review
+/src/Http/ @BrennanConroy @halter73 @captainsafia
+/src/Http/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @BrennanConroy
/src/Http/Routing/ @javiercn
/src/Http/Routing/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @javiercn
/src/HttpClientFactory/ @captainsafia @halter73
/src/HttpClientFactory/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @captainsafia @halter73
/src/Installers/ @dotnet/aspnet-build @wtgodbe
/src/JSInterop/ @dotnet/aspnet-blazor-eng
-/src/Middleware/ @tratcher @BrennanConroy
-/src/Middleware/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @tratcher @BrennanConroy
+/src/Middleware/ @BrennanConroy
+/src/Middleware/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @BrennanConroy
/src/Mvc/ @dotnet/minimal-apis
/src/Mvc/Mvc.ApiExplorer @captainsafia @halter73 @brunolins16
/src/Mvc/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @dotnet/aspnet-blazor-eng
/src/OpenApi @captainsafia @dotnet/minimal-apis
/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/ @dotnet/aspnet-blazor-eng
/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/ @dotnet/aspnet-blazor-eng
-/src/Security/ @tratcher
-/src/Security/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @tratcher
-/src/Servers/ @tratcher @halter73 @BrennanConroy @JamesNK @mgravell
-/src/Servers/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @tratcher @halter73 @BrennanConroy @JamesNK @mgravell
-/src/Shared/runtime/ @tratcher
-/src/Shared/test/Shared.Tests/runtime/ @tratcher
+/src/Security/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review
+/src/Servers/ @halter73 @BrennanConroy @JamesNK @mgravell
+/src/Servers/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @halter73 @BrennanConroy @JamesNK @mgravell
/src/SignalR/ @BrennanConroy @halter73
/src/SignalR/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @BrennanConroy @halter73
/src/submodules @dotnet/aspnet-build @wtgodbe
diff --git a/.github/workflows/markdownlint-problem-matcher.json b/.github/workflows/markdownlint-problem-matcher.json
deleted file mode 100644
index f0741f6b9062..000000000000
--- a/.github/workflows/markdownlint-problem-matcher.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "problemMatcher": [
- {
- "owner": "markdownlint",
- "pattern": [
- {
- "regexp": "^([^:]*):(\\d+):?(\\d+)?\\s([\\w-\\/]*)\\s(.*)$",
- "file": 1,
- "line": 2,
- "column": 3,
- "code": 4,
- "message": 5
- }
- ]
- }
- ]
-}
diff --git a/.github/workflows/markdownlint.yml b/.github/workflows/markdownlint.yml
deleted file mode 100644
index e508140dfc95..000000000000
--- a/.github/workflows/markdownlint.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Markdownlint
-
-permissions:
- contents: read
-
-# run even on changes without markdown changes, so that we can
-# make it in GitHub a required check for PR's
-on:
- pull_request:
-
-jobs:
- lint:
-
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v3
- - name: Use Node.js
- uses: actions/setup-node@v3
- with:
- node-version: 16.x
- - name: Run Markdownlint
- run: |
- echo "::add-matcher::.github/workflows/markdownlint-problem-matcher.json"
- npm i -g markdownlint-cli
- markdownlint "docs/**/*.md"
diff --git a/AspNetCore.sln b/AspNetCore.sln
index 500f31ff370c..a16a5c63a6e9 100644
--- a/AspNetCore.sln
+++ b/AspNetCore.sln
@@ -1780,6 +1780,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Output
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.OutputCaching.StackExchangeRedis", "src\Middleware\Microsoft.AspNetCore.OutputCaching.StackExchangeRedis\src\Microsoft.AspNetCore.OutputCaching.StackExchangeRedis.csproj", "{F232B503-D412-45EE-8B31-EFD46B9FA302}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotReferencedInWasmCodePackage", "src\Components\test\testassets\NotReferencedInWasmCodePackage\NotReferencedInWasmCodePackage.csproj", "{433F91E4-E39D-4EB0-B798-2998B3969A2C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Components.WasmRemoteAuthentication", "src\Components\test\testassets\Components.WasmRemoteAuthentication\Components.WasmRemoteAuthentication.csproj", "{8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TlsFeaturesObserve", "src\Servers\HttpSys\samples\TlsFeaturesObserve\TlsFeaturesObserve.csproj", "{98C71EC8-1303-F55D-4032-E6728971770E}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -10717,6 +10723,54 @@ Global
{F232B503-D412-45EE-8B31-EFD46B9FA302}.Release|x64.Build.0 = Release|Any CPU
{F232B503-D412-45EE-8B31-EFD46B9FA302}.Release|x86.ActiveCfg = Release|Any CPU
{F232B503-D412-45EE-8B31-EFD46B9FA302}.Release|x86.Build.0 = Release|Any CPU
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Debug|arm64.ActiveCfg = Debug|Any CPU
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Debug|arm64.Build.0 = Debug|Any CPU
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Debug|x64.Build.0 = Debug|Any CPU
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Debug|x86.Build.0 = Debug|Any CPU
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Release|arm64.ActiveCfg = Release|Any CPU
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Release|arm64.Build.0 = Release|Any CPU
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Release|x64.ActiveCfg = Release|Any CPU
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Release|x64.Build.0 = Release|Any CPU
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Release|x86.ActiveCfg = Release|Any CPU
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Release|x86.Build.0 = Release|Any CPU
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Debug|arm64.ActiveCfg = Debug|Any CPU
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Debug|arm64.Build.0 = Debug|Any CPU
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Debug|x64.Build.0 = Debug|Any CPU
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Debug|x86.Build.0 = Debug|Any CPU
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Release|arm64.ActiveCfg = Release|Any CPU
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Release|arm64.Build.0 = Release|Any CPU
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Release|x64.ActiveCfg = Release|Any CPU
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Release|x64.Build.0 = Release|Any CPU
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Release|x86.ActiveCfg = Release|Any CPU
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Release|x86.Build.0 = Release|Any CPU
+ {98C71EC8-1303-F55D-4032-E6728971770E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {98C71EC8-1303-F55D-4032-E6728971770E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {98C71EC8-1303-F55D-4032-E6728971770E}.Debug|arm64.ActiveCfg = Debug|Any CPU
+ {98C71EC8-1303-F55D-4032-E6728971770E}.Debug|arm64.Build.0 = Debug|Any CPU
+ {98C71EC8-1303-F55D-4032-E6728971770E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {98C71EC8-1303-F55D-4032-E6728971770E}.Debug|x64.Build.0 = Debug|Any CPU
+ {98C71EC8-1303-F55D-4032-E6728971770E}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {98C71EC8-1303-F55D-4032-E6728971770E}.Debug|x86.Build.0 = Debug|Any CPU
+ {98C71EC8-1303-F55D-4032-E6728971770E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {98C71EC8-1303-F55D-4032-E6728971770E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {98C71EC8-1303-F55D-4032-E6728971770E}.Release|arm64.ActiveCfg = Release|Any CPU
+ {98C71EC8-1303-F55D-4032-E6728971770E}.Release|arm64.Build.0 = Release|Any CPU
+ {98C71EC8-1303-F55D-4032-E6728971770E}.Release|x64.ActiveCfg = Release|Any CPU
+ {98C71EC8-1303-F55D-4032-E6728971770E}.Release|x64.Build.0 = Release|Any CPU
+ {98C71EC8-1303-F55D-4032-E6728971770E}.Release|x86.ActiveCfg = Release|Any CPU
+ {98C71EC8-1303-F55D-4032-E6728971770E}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -11596,6 +11650,9 @@ Global
{CAEB7F57-28A8-451C-95D0-45FCAA3C726C} = {C445B129-0A4D-41F5-8347-6534B6B12303}
{A939893A-B3CD-48F6-80D3-340C8A6E275B} = {AA5ABFBC-177C-421E-B743-005E0FD1248B}
{F232B503-D412-45EE-8B31-EFD46B9FA302} = {AA5ABFBC-177C-421E-B743-005E0FD1248B}
+ {433F91E4-E39D-4EB0-B798-2998B3969A2C} = {6126DCE4-9692-4EE2-B240-C65743572995}
+ {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13} = {6126DCE4-9692-4EE2-B240-C65743572995}
+ {98C71EC8-1303-F55D-4032-E6728971770E} = {49016328-4D32-46E4-A4D2-94686ED38EA2}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {3E8720B3-DBDD-498C-B383-2CC32A054E8F}
diff --git a/Directory.Build.props b/Directory.Build.props
index 9ae6760c645e..d080a9e0fb8e 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -117,6 +117,8 @@
$(NoWarn.Replace('1591', ''))
$(NoWarn);0105
+
+ $(NoWarn);NU5104
$(WarningsNotAsErrors);CS1591
diff --git a/NuGet.config b/NuGet.config
index cb5f021c3c4a..aa5c279af136 100644
--- a/NuGet.config
+++ b/NuGet.config
@@ -3,11 +3,13 @@
+
+
-
+
-
+
@@ -26,5 +28,13 @@
+
+
+
+
+
+
+
+
diff --git a/eng/Baseline.Designer.props b/eng/Baseline.Designer.props
index c9d8dfddfc08..3769c18a21cb 100644
--- a/eng/Baseline.Designer.props
+++ b/eng/Baseline.Designer.props
@@ -2,963 +2,997 @@
$(MSBuildAllProjects);$(MSBuildThisFileFullPath)
- 7.0.0
+ 8.0.16
-
-
- 7.0.0
+
+
+ 8.0.16
-
-
- 7.0.0
+
+
+ 8.0.16
- 7.0.0
-
-
-
- 7.0.0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ 8.0.16
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
- 7.0.0
-
-
-
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
+
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
+
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
-
-
+
+
+
+
- 7.0.0
+ 8.0.16
-
-
+
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
+
+
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
-
-
- 7.0.0
+
+
+ 8.0.16
-
-
+
+
- 7.0.0
+ 8.0.16
+
+
+
+
+
+
+ 8.0.16
-
-
+
+
+
+
+
+ 8.0.16
+
+
+
+
- 7.0.0
+ 8.0.16
-
-
-
-
-
-
+
+
+
+
+
+
+
- 7.0.0
+ 8.0.16
-
-
-
-
-
-
+
+
+
+
+
+
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
-
-
-
-
-
+
+
+
+
+
+
+
- 7.0.0
+ 8.0.16
-
-
-
-
+
+
+
+
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
+
-
-
+
+
-
+
- 7.0.0
+ 8.0.16
-
-
-
-
-
-
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
- 7.0.0
+ 8.0.16
-
-
+
+
-
-
-
+
+
+
-
-
+
+
- 7.0.0
+ 8.0.16
-
-
+
+
-
-
-
+
+
+
-
-
+
+
- 7.0.0
+ 8.0.16
+
+
+
+
+
+
+ 8.0.16
-
-
+
+
+
+
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
- 7.0.0
+ 8.0.16
-
-
+
+
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
- 7.0.0
+ 8.0.16
-
-
+
+
-
-
+
+
-
-
+
+
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
- 7.0.0
+ 8.0.16
-
+
-
+
-
+
-
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
+
+
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
- 7.0.0
+ 8.0.16
-
+
-
+
- 7.0.0
+ 8.0.16
-
-
-
-
+
+
+
+
- 7.0.0
+ 8.0.16
-
+
+
+
+ 8.0.16
+
+
+
+
+
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
+
+
-
-
-
+
+
+
-
-
+
+
- 7.0.0
+ 8.0.16
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
- 7.0.0
+ 8.0.16
-
-
+
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
- 7.0.0
+ 8.0.16
-
+
-
-
+
+
-
+
- 7.0.0
+ 8.0.16
-
-
+
+
-
-
-
+
+
+
-
-
+
+
- 7.0.0
+ 8.0.16
-
-
+
+
-
-
-
+
+
+
-
-
+
+
- 7.0.0
+ 8.0.16
-
-
-
-
-
+
+
+
+
+
- 7.0.0
+ 8.0.16
-
-
-
-
+
+
+
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
+
+
- 7.0.0
+ 8.0.16
+
+
+
+
+
+
+ 8.0.16
-
-
+
+
+
- 7.0.0
+ 8.0.16
-
-
+
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
- 7.0.0
+
+
+ 8.0.16
-
-
- 7.0.0
-
-
-
- 7.0.0
+
+
+ 8.0.16
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
+
- 7.0.0
+ 8.0.16
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
- 7.0.0
+ 8.0.16
-
-
+
+
-
-
-
+
+
+
-
-
+
+
- 7.0.0
+ 8.0.16
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
-
-
+
+
+
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
+
+
-
+
- 7.0.0
+ 8.0.16
-
-
+
+
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
- 7.0.0
+ 8.0.16
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
- 7.0.0
+ 8.0.16
- 7.0.0
+ 8.0.16
+
+
+
+
+
+
+ 8.0.16
-
-
+
+
\ No newline at end of file
diff --git a/eng/Baseline.xml b/eng/Baseline.xml
index c015a9264686..a1df454eacdf 100644
--- a/eng/Baseline.xml
+++ b/eng/Baseline.xml
@@ -1,110 +1,113 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/eng/Dependencies.props b/eng/Dependencies.props
index 703fe442e132..24a51f35c23d 100644
--- a/eng/Dependencies.props
+++ b/eng/Dependencies.props
@@ -186,6 +186,7 @@ and are generated based on the last package release.
+
diff --git a/eng/PackageOverrides.txt b/eng/PackageOverrides.txt
index 73fcb5d8f8e2..c775d67fd627 100644
--- a/eng/PackageOverrides.txt
+++ b/eng/PackageOverrides.txt
@@ -1,133 +1,138 @@
-Microsoft.Extensions.Caching.Abstractions|7.0.0
-Microsoft.Extensions.Caching.Memory|7.0.0
-Microsoft.Extensions.Configuration.Abstractions|7.0.0
-Microsoft.Extensions.Configuration.Binder|7.0.0
-Microsoft.Extensions.Configuration.CommandLine|7.0.0
-Microsoft.Extensions.Configuration|7.0.0
-Microsoft.Extensions.Configuration.EnvironmentVariables|7.0.0
-Microsoft.Extensions.Configuration.FileExtensions|7.0.0
-Microsoft.Extensions.Configuration.Ini|7.0.0
-Microsoft.Extensions.Configuration.Json|7.0.0
-Microsoft.Extensions.Configuration.UserSecrets|7.0.0
-Microsoft.Extensions.Configuration.Xml|7.0.0
-Microsoft.Extensions.DependencyInjection.Abstractions|7.0.0
-Microsoft.Extensions.DependencyInjection|7.0.0
-Microsoft.Extensions.FileProviders.Abstractions|7.0.0
-Microsoft.Extensions.FileProviders.Composite|7.0.0
-Microsoft.Extensions.FileProviders.Physical|7.0.0
-Microsoft.Extensions.FileSystemGlobbing|7.0.0
-Microsoft.Extensions.Hosting.Abstractions|7.0.0
-Microsoft.Extensions.Hosting|7.0.0
-Microsoft.Extensions.Http|7.0.0
-Microsoft.Extensions.Logging.Abstractions|7.0.0
-Microsoft.Extensions.Logging.Configuration|7.0.0
-Microsoft.Extensions.Logging.Console|7.0.0
-Microsoft.Extensions.Logging.Debug|7.0.0
-Microsoft.Extensions.Logging|7.0.0
-Microsoft.Extensions.Logging.EventLog|7.0.0
-Microsoft.Extensions.Logging.EventSource|7.0.0
-Microsoft.Extensions.Logging.TraceSource|7.0.0
-Microsoft.Extensions.Options.ConfigurationExtensions|7.0.0
-Microsoft.Extensions.Options.DataAnnotations|7.0.0
-Microsoft.Extensions.Options|7.0.0
-Microsoft.Extensions.Primitives|7.0.0
-System.Diagnostics.EventLog|7.0.0
-System.IO.Pipelines|7.0.0
-System.Security.Cryptography.Xml|7.0.0
-System.Threading.RateLimiting|7.0.0
-Microsoft.AspNetCore.Antiforgery|7.0.0
-Microsoft.AspNetCore.Authentication.Abstractions|7.0.0
-Microsoft.AspNetCore.Authentication.Cookies|7.0.0
-Microsoft.AspNetCore.Authentication.Core|7.0.0
-Microsoft.AspNetCore.Authentication|7.0.0
-Microsoft.AspNetCore.Authentication.OAuth|7.0.0
-Microsoft.AspNetCore.Authorization|7.0.0
-Microsoft.AspNetCore.Authorization.Policy|7.0.0
-Microsoft.AspNetCore.Components.Authorization|7.0.0
-Microsoft.AspNetCore.Components|7.0.0
-Microsoft.AspNetCore.Components.Forms|7.0.0
-Microsoft.AspNetCore.Components.Server|7.0.0
-Microsoft.AspNetCore.Components.Web|7.0.0
-Microsoft.AspNetCore.Connections.Abstractions|7.0.0
-Microsoft.AspNetCore.CookiePolicy|7.0.0
-Microsoft.AspNetCore.Cors|7.0.0
-Microsoft.AspNetCore.Cryptography.Internal|7.0.0
-Microsoft.AspNetCore.Cryptography.KeyDerivation|7.0.0
-Microsoft.AspNetCore.DataProtection.Abstractions|7.0.0
-Microsoft.AspNetCore.DataProtection|7.0.0
-Microsoft.AspNetCore.DataProtection.Extensions|7.0.0
-Microsoft.AspNetCore.Diagnostics.Abstractions|7.0.0
-Microsoft.AspNetCore.Diagnostics|7.0.0
-Microsoft.AspNetCore.Diagnostics.HealthChecks|7.0.0
-Microsoft.AspNetCore|7.0.0
-Microsoft.AspNetCore.HostFiltering|7.0.0
-Microsoft.AspNetCore.Hosting.Abstractions|7.0.0
-Microsoft.AspNetCore.Hosting|7.0.0
-Microsoft.AspNetCore.Hosting.Server.Abstractions|7.0.0
-Microsoft.AspNetCore.Html.Abstractions|7.0.0
-Microsoft.AspNetCore.Http.Abstractions|7.0.0
-Microsoft.AspNetCore.Http.Connections.Common|7.0.0
-Microsoft.AspNetCore.Http.Connections|7.0.0
-Microsoft.AspNetCore.Http|7.0.0
-Microsoft.AspNetCore.Http.Extensions|7.0.0
-Microsoft.AspNetCore.Http.Features|7.0.0
-Microsoft.AspNetCore.Http.Results|7.0.0
-Microsoft.AspNetCore.HttpLogging|7.0.0
-Microsoft.AspNetCore.HttpOverrides|7.0.0
-Microsoft.AspNetCore.HttpsPolicy|7.0.0
-Microsoft.AspNetCore.Identity|7.0.0
-Microsoft.AspNetCore.Localization|7.0.0
-Microsoft.AspNetCore.Localization.Routing|7.0.0
-Microsoft.AspNetCore.Metadata|7.0.0
-Microsoft.AspNetCore.Mvc.Abstractions|7.0.0
-Microsoft.AspNetCore.Mvc.ApiExplorer|7.0.0
-Microsoft.AspNetCore.Mvc.Core|7.0.0
-Microsoft.AspNetCore.Mvc.Cors|7.0.0
-Microsoft.AspNetCore.Mvc.DataAnnotations|7.0.0
-Microsoft.AspNetCore.Mvc|7.0.0
-Microsoft.AspNetCore.Mvc.Formatters.Json|7.0.0
-Microsoft.AspNetCore.Mvc.Formatters.Xml|7.0.0
-Microsoft.AspNetCore.Mvc.Localization|7.0.0
-Microsoft.AspNetCore.Mvc.Razor|7.0.0
-Microsoft.AspNetCore.Mvc.RazorPages|7.0.0
-Microsoft.AspNetCore.Mvc.TagHelpers|7.0.0
-Microsoft.AspNetCore.Mvc.ViewFeatures|7.0.0
-Microsoft.AspNetCore.OutputCaching|7.0.0
-Microsoft.AspNetCore.RateLimiting|7.0.0
-Microsoft.AspNetCore.Razor|7.0.0
-Microsoft.AspNetCore.Razor.Runtime|7.0.0
-Microsoft.AspNetCore.RequestDecompression|7.0.0
-Microsoft.AspNetCore.ResponseCaching.Abstractions|7.0.0
-Microsoft.AspNetCore.ResponseCaching|7.0.0
-Microsoft.AspNetCore.ResponseCompression|7.0.0
-Microsoft.AspNetCore.Rewrite|7.0.0
-Microsoft.AspNetCore.Routing.Abstractions|7.0.0
-Microsoft.AspNetCore.Routing|7.0.0
-Microsoft.AspNetCore.Server.HttpSys|7.0.0
-Microsoft.AspNetCore.Server.IIS|7.0.0
-Microsoft.AspNetCore.Server.IISIntegration|7.0.0
-Microsoft.AspNetCore.Server.Kestrel.Core|7.0.0
-Microsoft.AspNetCore.Server.Kestrel|7.0.0
-Microsoft.AspNetCore.Server.Kestrel.Transport.Quic|7.0.0
-Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets|7.0.0
-Microsoft.AspNetCore.Session|7.0.0
-Microsoft.AspNetCore.SignalR.Common|7.0.0
-Microsoft.AspNetCore.SignalR.Core|7.0.0
-Microsoft.AspNetCore.SignalR|7.0.0
-Microsoft.AspNetCore.SignalR.Protocols.Json|7.0.0
-Microsoft.AspNetCore.StaticFiles|7.0.0
-Microsoft.AspNetCore.WebSockets|7.0.0
-Microsoft.AspNetCore.WebUtilities|7.0.0
-Microsoft.Extensions.Configuration.KeyPerFile|7.0.0
-Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions|7.0.0
-Microsoft.Extensions.Diagnostics.HealthChecks|7.0.0
-Microsoft.Extensions.Features|7.0.0
-Microsoft.Extensions.FileProviders.Embedded|7.0.0
-Microsoft.Extensions.Identity.Core|7.0.0
-Microsoft.Extensions.Identity.Stores|7.0.0
-Microsoft.Extensions.Localization.Abstractions|7.0.0
-Microsoft.Extensions.Localization|7.0.0
-Microsoft.Extensions.ObjectPool|7.0.0
-Microsoft.Extensions.WebEncoders|7.0.0
-Microsoft.JSInterop|7.0.0
-Microsoft.Net.Http.Headers|7.0.0
+Microsoft.Extensions.Caching.Abstractions|8.0.0
+Microsoft.Extensions.Caching.Memory|8.0.0
+Microsoft.Extensions.Configuration.Abstractions|8.0.0
+Microsoft.Extensions.Configuration.Binder|8.0.0
+Microsoft.Extensions.Configuration.CommandLine|8.0.0
+Microsoft.Extensions.Configuration|8.0.0
+Microsoft.Extensions.Configuration.EnvironmentVariables|8.0.0
+Microsoft.Extensions.Configuration.FileExtensions|8.0.0
+Microsoft.Extensions.Configuration.Ini|8.0.0
+Microsoft.Extensions.Configuration.Json|8.0.0
+Microsoft.Extensions.Configuration.UserSecrets|8.0.0
+Microsoft.Extensions.Configuration.Xml|8.0.0
+Microsoft.Extensions.DependencyInjection.Abstractions|8.0.0
+Microsoft.Extensions.DependencyInjection|8.0.0
+Microsoft.Extensions.Diagnostics.Abstractions|8.0.0
+Microsoft.Extensions.Diagnostics|8.0.0
+Microsoft.Extensions.FileProviders.Abstractions|8.0.0
+Microsoft.Extensions.FileProviders.Composite|8.0.0
+Microsoft.Extensions.FileProviders.Physical|8.0.0
+Microsoft.Extensions.FileSystemGlobbing|8.0.0
+Microsoft.Extensions.Hosting.Abstractions|8.0.0
+Microsoft.Extensions.Hosting|8.0.0
+Microsoft.Extensions.Http|8.0.0
+Microsoft.Extensions.Logging.Abstractions|8.0.0
+Microsoft.Extensions.Logging.Configuration|8.0.0
+Microsoft.Extensions.Logging.Console|8.0.0
+Microsoft.Extensions.Logging.Debug|8.0.0
+Microsoft.Extensions.Logging|8.0.0
+Microsoft.Extensions.Logging.EventLog|8.0.0
+Microsoft.Extensions.Logging.EventSource|8.0.0
+Microsoft.Extensions.Logging.TraceSource|8.0.0
+Microsoft.Extensions.Options.ConfigurationExtensions|8.0.0
+Microsoft.Extensions.Options.DataAnnotations|8.0.0
+Microsoft.Extensions.Options|8.0.0
+Microsoft.Extensions.Primitives|8.0.0
+System.Diagnostics.EventLog|8.0.0
+System.IO.Pipelines|8.0.0
+System.Security.Cryptography.Xml|8.0.0
+System.Threading.RateLimiting|8.0.0
+Microsoft.AspNetCore.Antiforgery|8.0.0
+Microsoft.AspNetCore.Authentication.Abstractions|8.0.0
+Microsoft.AspNetCore.Authentication.BearerToken|8.0.0
+Microsoft.AspNetCore.Authentication.Cookies|8.0.0
+Microsoft.AspNetCore.Authentication.Core|8.0.0
+Microsoft.AspNetCore.Authentication|8.0.0
+Microsoft.AspNetCore.Authentication.OAuth|8.0.0
+Microsoft.AspNetCore.Authorization|8.0.0
+Microsoft.AspNetCore.Authorization.Policy|8.0.0
+Microsoft.AspNetCore.Components.Authorization|8.0.0
+Microsoft.AspNetCore.Components|8.0.0
+Microsoft.AspNetCore.Components.Endpoints|8.0.0
+Microsoft.AspNetCore.Components.Forms|8.0.0
+Microsoft.AspNetCore.Components.Server|8.0.0
+Microsoft.AspNetCore.Components.Web|8.0.0
+Microsoft.AspNetCore.Connections.Abstractions|8.0.0
+Microsoft.AspNetCore.CookiePolicy|8.0.0
+Microsoft.AspNetCore.Cors|8.0.0
+Microsoft.AspNetCore.Cryptography.Internal|8.0.0
+Microsoft.AspNetCore.Cryptography.KeyDerivation|8.0.0
+Microsoft.AspNetCore.DataProtection.Abstractions|8.0.0
+Microsoft.AspNetCore.DataProtection|8.0.0
+Microsoft.AspNetCore.DataProtection.Extensions|8.0.0
+Microsoft.AspNetCore.Diagnostics.Abstractions|8.0.0
+Microsoft.AspNetCore.Diagnostics|8.0.0
+Microsoft.AspNetCore.Diagnostics.HealthChecks|8.0.0
+Microsoft.AspNetCore|8.0.0
+Microsoft.AspNetCore.HostFiltering|8.0.0
+Microsoft.AspNetCore.Hosting.Abstractions|8.0.0
+Microsoft.AspNetCore.Hosting|8.0.0
+Microsoft.AspNetCore.Hosting.Server.Abstractions|8.0.0
+Microsoft.AspNetCore.Html.Abstractions|8.0.0
+Microsoft.AspNetCore.Http.Abstractions|8.0.0
+Microsoft.AspNetCore.Http.Connections.Common|8.0.0
+Microsoft.AspNetCore.Http.Connections|8.0.0
+Microsoft.AspNetCore.Http|8.0.0
+Microsoft.AspNetCore.Http.Extensions|8.0.0
+Microsoft.AspNetCore.Http.Features|8.0.0
+Microsoft.AspNetCore.Http.Results|8.0.0
+Microsoft.AspNetCore.HttpLogging|8.0.0
+Microsoft.AspNetCore.HttpOverrides|8.0.0
+Microsoft.AspNetCore.HttpsPolicy|8.0.0
+Microsoft.AspNetCore.Identity|8.0.0
+Microsoft.AspNetCore.Localization|8.0.0
+Microsoft.AspNetCore.Localization.Routing|8.0.0
+Microsoft.AspNetCore.Metadata|8.0.0
+Microsoft.AspNetCore.Mvc.Abstractions|8.0.0
+Microsoft.AspNetCore.Mvc.ApiExplorer|8.0.0
+Microsoft.AspNetCore.Mvc.Core|8.0.0
+Microsoft.AspNetCore.Mvc.Cors|8.0.0
+Microsoft.AspNetCore.Mvc.DataAnnotations|8.0.0
+Microsoft.AspNetCore.Mvc|8.0.0
+Microsoft.AspNetCore.Mvc.Formatters.Json|8.0.0
+Microsoft.AspNetCore.Mvc.Formatters.Xml|8.0.0
+Microsoft.AspNetCore.Mvc.Localization|8.0.0
+Microsoft.AspNetCore.Mvc.Razor|8.0.0
+Microsoft.AspNetCore.Mvc.RazorPages|8.0.0
+Microsoft.AspNetCore.Mvc.TagHelpers|8.0.0
+Microsoft.AspNetCore.Mvc.ViewFeatures|8.0.0
+Microsoft.AspNetCore.OutputCaching|8.0.0
+Microsoft.AspNetCore.RateLimiting|8.0.0
+Microsoft.AspNetCore.Razor|8.0.0
+Microsoft.AspNetCore.Razor.Runtime|8.0.0
+Microsoft.AspNetCore.RequestDecompression|8.0.0
+Microsoft.AspNetCore.ResponseCaching.Abstractions|8.0.0
+Microsoft.AspNetCore.ResponseCaching|8.0.0
+Microsoft.AspNetCore.ResponseCompression|8.0.0
+Microsoft.AspNetCore.Rewrite|8.0.0
+Microsoft.AspNetCore.Routing.Abstractions|8.0.0
+Microsoft.AspNetCore.Routing|8.0.0
+Microsoft.AspNetCore.Server.HttpSys|8.0.0
+Microsoft.AspNetCore.Server.IIS|8.0.0
+Microsoft.AspNetCore.Server.IISIntegration|8.0.0
+Microsoft.AspNetCore.Server.Kestrel.Core|8.0.0
+Microsoft.AspNetCore.Server.Kestrel|8.0.0
+Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes|8.0.0
+Microsoft.AspNetCore.Server.Kestrel.Transport.Quic|8.0.0
+Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets|8.0.0
+Microsoft.AspNetCore.Session|8.0.0
+Microsoft.AspNetCore.SignalR.Common|8.0.0
+Microsoft.AspNetCore.SignalR.Core|8.0.0
+Microsoft.AspNetCore.SignalR|8.0.0
+Microsoft.AspNetCore.SignalR.Protocols.Json|8.0.0
+Microsoft.AspNetCore.StaticFiles|8.0.0
+Microsoft.AspNetCore.WebSockets|8.0.0
+Microsoft.AspNetCore.WebUtilities|8.0.0
+Microsoft.Extensions.Configuration.KeyPerFile|8.0.0
+Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions|8.0.0
+Microsoft.Extensions.Diagnostics.HealthChecks|8.0.0
+Microsoft.Extensions.Features|8.0.0
+Microsoft.Extensions.FileProviders.Embedded|8.0.0
+Microsoft.Extensions.Identity.Core|8.0.0
+Microsoft.Extensions.Identity.Stores|8.0.0
+Microsoft.Extensions.Localization.Abstractions|8.0.0
+Microsoft.Extensions.Localization|8.0.0
+Microsoft.Extensions.ObjectPool|8.0.0
+Microsoft.Extensions.WebEncoders|8.0.0
+Microsoft.JSInterop|8.0.0
+Microsoft.Net.Http.Headers|8.0.0
diff --git a/eng/PlatformManifest.txt b/eng/PlatformManifest.txt
index a527f554d3e2..29153e1bface 100644
--- a/eng/PlatformManifest.txt
+++ b/eng/PlatformManifest.txt
@@ -1,136 +1,141 @@
-aspnetcorev2_inprocess.dll|Microsoft.AspNetCore.App.Ref||17.0.22292.0
-Microsoft.AspNetCore.Antiforgery.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Authentication.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Authentication.Cookies.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Authentication.Core.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Authentication.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Authentication.OAuth.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Authorization.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Authorization.Policy.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Components.Authorization.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Components.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Components.Forms.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Components.Server.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Components.Web.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Connections.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.CookiePolicy.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Cors.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Cryptography.Internal.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Cryptography.KeyDerivation.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.DataProtection.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.DataProtection.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.DataProtection.Extensions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Diagnostics.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Diagnostics.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Diagnostics.HealthChecks.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.HostFiltering.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Hosting.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Hosting.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Hosting.Server.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Html.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Http.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Http.Connections.Common.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Http.Connections.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Http.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Http.Extensions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Http.Features.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Http.Results.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.HttpLogging.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.HttpOverrides.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.HttpsPolicy.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Identity.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Localization.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Localization.Routing.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Metadata.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Mvc.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Mvc.ApiExplorer.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Mvc.Core.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Mvc.Cors.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Mvc.DataAnnotations.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Mvc.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Mvc.Formatters.Json.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Mvc.Formatters.Xml.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Mvc.Localization.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Mvc.Razor.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Mvc.RazorPages.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Mvc.TagHelpers.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Mvc.ViewFeatures.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.OutputCaching.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.RateLimiting.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Razor.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Razor.Runtime.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.RequestDecompression.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.ResponseCaching.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.ResponseCaching.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.ResponseCompression.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Rewrite.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Routing.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Routing.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Server.HttpSys.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Server.IIS.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Server.IISIntegration.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Server.Kestrel.Core.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Server.Kestrel.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.Session.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.SignalR.Common.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.SignalR.Core.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.SignalR.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.SignalR.Protocols.Json.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.StaticFiles.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.WebSockets.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.AspNetCore.WebUtilities.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.Extensions.Caching.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Caching.Memory.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Configuration.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Configuration.Binder.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Configuration.CommandLine.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Configuration.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Configuration.EnvironmentVariables.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Configuration.FileExtensions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Configuration.Ini.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Configuration.Json.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Configuration.KeyPerFile.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.Extensions.Configuration.UserSecrets.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Configuration.Xml.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.DependencyInjection.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.DependencyInjection.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.Extensions.Diagnostics.HealthChecks.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.Extensions.Features.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.Extensions.FileProviders.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.FileProviders.Composite.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.FileProviders.Embedded.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.Extensions.FileProviders.Physical.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.FileSystemGlobbing.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Hosting.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Hosting.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Http.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Identity.Core.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.Extensions.Identity.Stores.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.Extensions.Localization.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.Extensions.Localization.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.Extensions.Logging.Abstractions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Logging.Configuration.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Logging.Console.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Logging.Debug.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Logging.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Logging.EventLog.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Logging.EventSource.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Logging.TraceSource.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.ObjectPool.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.Extensions.Options.ConfigurationExtensions.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Options.DataAnnotations.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Options.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.Primitives.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-Microsoft.Extensions.WebEncoders.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.JSInterop.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-Microsoft.Net.Http.Headers.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51819
-System.Diagnostics.EventLog.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-System.Diagnostics.EventLog.Messages.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|0.0.0.0
-System.IO.Pipelines.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-System.Security.Cryptography.Pkcs.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-System.Security.Cryptography.Xml.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
-System.Threading.RateLimiting.dll|Microsoft.AspNetCore.App.Ref|7.0.0.0|7.0.22.51805
\ No newline at end of file
+aspnetcorev2_inprocess.dll|Microsoft.AspNetCore.App.Ref||18.0.23305.0
+Microsoft.AspNetCore.Antiforgery.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Authentication.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Authentication.BearerToken.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Authentication.Cookies.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Authentication.Core.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Authentication.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Authentication.OAuth.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Authorization.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Authorization.Policy.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Components.Authorization.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Components.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Components.Endpoints.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Components.Forms.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Components.Server.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Components.Web.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Connections.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.CookiePolicy.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Cors.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Cryptography.Internal.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Cryptography.KeyDerivation.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.DataProtection.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.DataProtection.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.DataProtection.Extensions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Diagnostics.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Diagnostics.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Diagnostics.HealthChecks.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.HostFiltering.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Hosting.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Hosting.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Hosting.Server.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Html.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Http.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Http.Connections.Common.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Http.Connections.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Http.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Http.Extensions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Http.Features.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Http.Results.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.HttpLogging.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.HttpOverrides.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.HttpsPolicy.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Identity.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Localization.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Localization.Routing.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Metadata.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Mvc.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Mvc.ApiExplorer.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Mvc.Core.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Mvc.Cors.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Mvc.DataAnnotations.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Mvc.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Mvc.Formatters.Json.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Mvc.Formatters.Xml.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Mvc.Localization.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Mvc.Razor.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Mvc.RazorPages.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Mvc.TagHelpers.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Mvc.ViewFeatures.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.OutputCaching.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.RateLimiting.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Razor.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Razor.Runtime.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.RequestDecompression.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.ResponseCaching.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.ResponseCaching.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.ResponseCompression.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Rewrite.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Routing.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Routing.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Server.HttpSys.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Server.IIS.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Server.IISIntegration.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Server.Kestrel.Core.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Server.Kestrel.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.Session.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.SignalR.Common.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.SignalR.Core.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.SignalR.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.SignalR.Protocols.Json.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.StaticFiles.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.WebSockets.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.AspNetCore.WebUtilities.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.Extensions.Caching.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Caching.Memory.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Configuration.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Configuration.Binder.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Configuration.CommandLine.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Configuration.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Configuration.EnvironmentVariables.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Configuration.FileExtensions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Configuration.Ini.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Configuration.Json.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Configuration.KeyPerFile.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.Extensions.Configuration.UserSecrets.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Configuration.Xml.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.DependencyInjection.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.DependencyInjection.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Diagnostics.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Diagnostics.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.Extensions.Diagnostics.HealthChecks.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.Extensions.Features.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.Extensions.FileProviders.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.FileProviders.Composite.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.FileProviders.Embedded.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.Extensions.FileProviders.Physical.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.FileSystemGlobbing.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Hosting.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Hosting.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Http.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Identity.Core.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.Extensions.Identity.Stores.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.Extensions.Localization.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.Extensions.Localization.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.Extensions.Logging.Abstractions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Logging.Configuration.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Logging.Console.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Logging.Debug.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Logging.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Logging.EventLog.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Logging.EventSource.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Logging.TraceSource.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.ObjectPool.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.Extensions.Options.ConfigurationExtensions.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Options.DataAnnotations.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Options.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.Primitives.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+Microsoft.Extensions.WebEncoders.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.JSInterop.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+Microsoft.Net.Http.Headers.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53112
+System.Diagnostics.EventLog.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+System.Diagnostics.EventLog.Messages.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|0.0.0.0
+System.IO.Pipelines.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+System.Security.Cryptography.Pkcs.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+System.Security.Cryptography.Xml.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
+System.Threading.RateLimiting.dll|Microsoft.AspNetCore.App.Ref|8.0.0.0|8.0.23.53103
diff --git a/eng/Publishing.props b/eng/Publishing.props
index 943018d2a694..8765a8714c20 100644
--- a/eng/Publishing.props
+++ b/eng/Publishing.props
@@ -1,6 +1,7 @@
3
+ true
diff --git a/eng/SourceBuildPrebuiltBaseline.xml b/eng/SourceBuildPrebuiltBaseline.xml
index d3b5eb60ec3f..dda41055550d 100644
--- a/eng/SourceBuildPrebuiltBaseline.xml
+++ b/eng/SourceBuildPrebuiltBaseline.xml
@@ -39,5 +39,8 @@
+
+
+
diff --git a/eng/Tools.props b/eng/Tools.props
index a38257f7704f..b52f10ed643d 100644
--- a/eng/Tools.props
+++ b/eng/Tools.props
@@ -7,7 +7,7 @@
Since this project is evaluated before .npmproj files are loaded, this should cause the package to end up in
the NuGet cache ahead of time. This is not needed in source build.
-->
-
+
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index abefdce669ab..259dd66fe21d 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -9,189 +9,189 @@
-->
-
- https://github.com/dotnet/efcore
- e8d92476f307c5385fef08f44aa92a545d2b2a8e
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
+ c755c4a6f3df392ac86ce9985f27a8c3e851b3b3
-
- https://github.com/dotnet/efcore
- e8d92476f307c5385fef08f44aa92a545d2b2a8e
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
+ c755c4a6f3df392ac86ce9985f27a8c3e851b3b3
-
- https://github.com/dotnet/efcore
- e8d92476f307c5385fef08f44aa92a545d2b2a8e
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
+ c755c4a6f3df392ac86ce9985f27a8c3e851b3b3
-
- https://github.com/dotnet/efcore
- e8d92476f307c5385fef08f44aa92a545d2b2a8e
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
+ c755c4a6f3df392ac86ce9985f27a8c3e851b3b3
-
- https://github.com/dotnet/efcore
- e8d92476f307c5385fef08f44aa92a545d2b2a8e
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
+ c755c4a6f3df392ac86ce9985f27a8c3e851b3b3
-
- https://github.com/dotnet/efcore
- e8d92476f307c5385fef08f44aa92a545d2b2a8e
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
+ c755c4a6f3df392ac86ce9985f27a8c3e851b3b3
-
- https://github.com/dotnet/efcore
- e8d92476f307c5385fef08f44aa92a545d2b2a8e
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
+ c755c4a6f3df392ac86ce9985f27a8c3e851b3b3
-
- https://github.com/dotnet/efcore
- e8d92476f307c5385fef08f44aa92a545d2b2a8e
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
+ c755c4a6f3df392ac86ce9985f27a8c3e851b3b3
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 2aade6beb02ea367fd97c4070a4198802fe61c03
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 2aade6beb02ea367fd97c4070a4198802fe61c03
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ efd5742bb5dd1677fbbbeb277bcfb5c9025548e5
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 50c4cb9fc31c47f03eac865d7bc518af173b74b7
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 9f4b1f5d664afdfc80e1508ab7ed099dff210fbd
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ efd5742bb5dd1677fbbbeb277bcfb5c9025548e5
-
+
https://github.com/dotnet/source-build-externals
- 3dc05150cf234f76f6936dcb2853d31a0da1f60e
+ 16bcad1c13be082bd52ce178896d1119a73081a9
@@ -199,211 +199,211 @@
27e584661980ee6d82c419a2a471ae505b7d122e
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 2d7eea252964e69be94cb9c847b371b23e4dd470
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 50c4cb9fc31c47f03eac865d7bc518af173b74b7
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 50c4cb9fc31c47f03eac865d7bc518af173b74b7
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ efd5742bb5dd1677fbbbeb277bcfb5c9025548e5
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ efd5742bb5dd1677fbbbeb277bcfb5c9025548e5
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ efd5742bb5dd1677fbbbeb277bcfb5c9025548e5
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ efd5742bb5dd1677fbbbeb277bcfb5c9025548e5
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ bf5e279d9239bfef5bb1b8d6212f1b971c434606
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 81cabf2857a01351e5ab578947c7403a5b128ad1
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ efd5742bb5dd1677fbbbeb277bcfb5c9025548e5
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ efd5742bb5dd1677fbbbeb277bcfb5c9025548e5
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ efd5742bb5dd1677fbbbeb277bcfb5c9025548e5
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ efd5742bb5dd1677fbbbeb277bcfb5c9025548e5
https://github.com/dotnet/xdt
9a1c3e1b7f0c8763d4c96e593961a61a72679a7b
-
+
https://github.com/dotnet/source-build-reference-packages
- b4fa7f2e1e65ef49881be2ab2df27624280a8c55
+ cee2d057118e3ad3c58a72a23271ad88b87d4d4d
-
+
https://github.com/dotnet/roslyn
- 1aa759af23d2a29043ea44fcef5bd6823dafa5d0
+ 4ff64493649bd045ced204661958393dc5575e96
-
+
https://github.com/dotnet/roslyn
- 1aa759af23d2a29043ea44fcef5bd6823dafa5d0
+ 4ff64493649bd045ced204661958393dc5575e96
-
+
https://github.com/dotnet/roslyn
- 1aa759af23d2a29043ea44fcef5bd6823dafa5d0
+ 4ff64493649bd045ced204661958393dc5575e96
-
+
https://github.com/dotnet/roslyn
- 1aa759af23d2a29043ea44fcef5bd6823dafa5d0
+ 4ff64493649bd045ced204661958393dc5575e96
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 5535e31a712343a63f5d7d796cd874e563e5ac14
-
- https://github.com/dotnet/runtime
- 488a8a3521610422e8fbe22d5cc66127f3dce3dc
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ efd5742bb5dd1677fbbbeb277bcfb5c9025548e5
https://github.com/dotnet/winforms
abda8e3bfa78319363526b5a5f86863ec979940e
-
+
https://github.com/dotnet/arcade
- 39042b4048580366d35a7c1c4f4ce8fc0dbea4b4
+ 20ab70a74d52b68f4271bd946884e24049b14f83
-
+
https://github.com/dotnet/arcade
- 39042b4048580366d35a7c1c4f4ce8fc0dbea4b4
+ 20ab70a74d52b68f4271bd946884e24049b14f83
-
+
https://github.com/dotnet/arcade
- 39042b4048580366d35a7c1c4f4ce8fc0dbea4b4
+ 20ab70a74d52b68f4271bd946884e24049b14f83
-
+
https://github.com/dotnet/arcade
- 39042b4048580366d35a7c1c4f4ce8fc0dbea4b4
+ 20ab70a74d52b68f4271bd946884e24049b14f83
-
+
https://github.com/dotnet/arcade
- 39042b4048580366d35a7c1c4f4ce8fc0dbea4b4
+ 20ab70a74d52b68f4271bd946884e24049b14f83
-
+
https://github.com/dotnet/extensions
- a677e540fab8791daf2f6c21c64e804903ea31cd
+ ca03b0c72858567f9b668d90fee32ef2d5d8dd74
-
+
https://github.com/dotnet/extensions
- a677e540fab8791daf2f6c21c64e804903ea31cd
+ ca03b0c72858567f9b668d90fee32ef2d5d8dd74
https://github.com/nuget/nuget.client
diff --git a/eng/Versions.props b/eng/Versions.props
index 659b72a9313d..f817b14d06a2 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -8,18 +8,19 @@
8
0
- 0
+ 18
- true
- 7.0.3
+ false
+ 7.1.2
+ 7.*
true
release
- rtm
- RTM
+ servicing
+ Servicing
true
false
$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion)
@@ -65,109 +66,109 @@
-->
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0-rtm.23523.12
+ 8.0.2
+ 8.0.16
+ 8.0.16
+ 8.0.16
+ 8.0.16
+ 8.0.16
+ 8.0.16-servicing.25215.6
8.0.0
- 8.0.0
+ 8.0.1
8.0.0
- 8.0.0
+ 8.0.2
8.0.0
8.0.0
- 8.0.0
+ 8.0.1
8.0.0
- 8.0.0
+ 8.0.1
8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
+ 8.0.1
+ 8.0.1
+ 8.0.2
+ 8.0.1
+ 8.0.1
+ 8.0.1
8.0.0
8.0.0
8.0.0
8.0.0
- 8.0.0-rtm.23523.12
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
+ 8.0.16-servicing.25215.6
+ 8.0.1
+ 8.0.1
+ 8.0.1
+ 8.0.3
+ 8.0.1
+ 8.0.1
+ 8.0.1
+ 8.0.1
+ 8.0.1
+ 8.0.1
+ 8.0.1
8.0.0
8.0.0
- 8.0.0
+ 8.0.2
8.0.0
- 8.0.0-rtm.23523.12
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
+ 8.0.16-servicing.25215.6
+ 8.0.1
+ 8.0.1
+ 8.0.2
+ 8.0.1
8.0.0-rtm.23520.14
8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
+ 8.0.1
+ 8.0.3
+ 8.0.1
8.0.0
- 8.0.0
- 8.0.0
+ 8.0.1
+ 8.0.2
8.0.0
- 8.0.0
+ 8.0.1
8.0.0
- 8.0.0
+ 8.0.5
8.0.0
8.0.0
8.0.0
- 8.0.0-rtm.23523.12
+ 8.0.16-servicing.25215.6
- 8.0.0-rtm.23523.12
+ 8.0.16-servicing.25215.6
8.0.0
- 8.0.0
+ 8.0.1
8.0.0
- 8.0.0
+ 8.0.1
8.0.0
- 8.0.0
+ 8.0.1
- 8.0.0-rtm.23523.7
- 8.0.0-rtm.23523.7
+ 8.1.0-preview.23604.1
+ 8.1.0-preview.23604.1
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
- 8.0.0
+ 8.0.16
+ 8.0.16
+ 8.0.16
+ 8.0.16
+ 8.0.16
+ 8.0.16
+ 8.0.16
+ 8.0.16
- 4.8.0-3.23518.7
- 4.8.0-3.23518.7
- 4.8.0-3.23518.7
- 4.8.0-3.23518.7
+ 4.8.0-7.24574.2
+ 4.8.0-7.24574.2
+ 4.8.0-7.24574.2
+ 4.8.0-7.24574.2
6.2.4
6.2.4
6.2.4
- 8.0.0-beta.23516.4
- 8.0.0-beta.23516.4
- 8.0.0-beta.23516.4
+ 8.0.0-beta.25263.4
+ 8.0.0-beta.25263.4
+ 8.0.0-beta.25263.4
- 8.0.0-alpha.1.23518.1
+ 8.0.0-alpha.1.25202.2
- 8.0.0-alpha.1.23516.4
+ 8.0.0-alpha.1.25269.2
2.0.0-beta-23228-03
@@ -199,6 +200,7 @@
15.9.3032
6.0.1
+ 8.0.5
4.7.0
5.0.0
@@ -248,11 +250,11 @@
3.3.1
- 4.8.0-3.23518.7
- 4.8.0-3.23518.7
- 4.8.0-3.23518.7
- 4.8.0-3.23518.7
- 4.8.0-3.23518.7
+ 4.8.0-7.24574.2
+ 4.8.0-7.24574.2
+ 4.8.0-7.24574.2
+ 4.8.0-7.24574.2
+ 4.8.0-7.24574.2
3.3.3
1.1.2-beta1.23371.1
1.1.2-beta1.23371.1
@@ -278,13 +280,14 @@
5.0.17-servicing-22215-7
$(MicrosoftAspNetCoreAzureAppServicesSiteExtension50Version)
$(MicrosoftAspNetCoreAzureAppServicesSiteExtension50Version)
- 6.0.20-servicing-23321-6
+ 6.0.25-servicing-23523-15
$(MicrosoftAspNetCoreAzureAppServicesSiteExtension60Version)
$(MicrosoftAspNetCoreAzureAppServicesSiteExtension60Version)
- 7.0.9-servicing-23321-10
+ 7.0.14-servicing-23523-16
$(MicrosoftAspNetCoreAzureAppServicesSiteExtension70Version)
$(MicrosoftAspNetCoreAzureAppServicesSiteExtension70Version)
+ 1.10.2
0.9.9
0.13.0
4.2.1
@@ -297,11 +300,12 @@
2.57.0
2.57.0
2.57.0
- 2.5.108
- 2.15.2
- 2.15.2
- 2.15.2
- 2.15.2
+ 2.5.187
+ 3.2.0
+ 3.2.0
+ 3.2.0
+ 3.2.0
+ 6.0.1
$(MessagePackVersion)
4.10.0
0.11.2
@@ -309,17 +313,17 @@
1.0.2
13.0.3
13.0.4
- 2.4.0
+ 2.5.2
1.28.0
3.0.0
7.2.4
- 4.14.1
- 4.14.1
+ 4.17.0
+ 4.17.0
1.4.0
4.0.0
- 2.6.122
+ 2.7.27
5.0.0
- 6.4.0
+ 6.6.2
2.0.3
1.0.0
2.4.2
@@ -327,7 +331,7 @@
$(XunitVersion)
$(XunitVersion)
2.4.3
- 4.0.1
+ 4.0.5
6.0.0-preview.3.21167.1
1.4.3
diff --git a/eng/build.ps1 b/eng/build.ps1
index 9eca32052315..b553b5cb8072 100644
--- a/eng/build.ps1
+++ b/eng/build.ps1
@@ -12,6 +12,9 @@ build projects, run tests, and generate code.
.PARAMETER CI
Sets up CI specific settings and variables.
+.PARAMETER NativeToolsOnMachine
+Turns on native tooling handling. On CI machines, promotes native tools listed in global.json to the path.
+
.PARAMETER Restore
Run restore.
@@ -121,6 +124,7 @@ Online version: https://github.com/dotnet/aspnetcore/blob/main/docs/BuildFromSou
[CmdletBinding(PositionalBinding = $false, DefaultParameterSetName='Groups')]
param(
[switch]$CI,
+ [switch]$NativeToolsOnMachine,
# Build lifecycle options
[switch]$Restore,
@@ -304,58 +308,6 @@ $performDesktopBuild = ($BuildInstallers -and $Architecture -ne "arm") -or `
$performDotnetBuild = $BuildJava -or $BuildManaged -or $BuildNodeJS -or `
($All -and -not ($NoBuildJava -and $NoBuildManaged -and $NoBuildNodeJS)) -or `
($Projects -and -not ($BuildInstallers -or $specifiedBuildNative))
-$foundJdk = $false
-$javac = Get-Command javac -ErrorAction Ignore -CommandType Application
-$localJdkPath = "$PSScriptRoot\..\.tools\jdk\win-x64\"
-if (Test-Path "$localJdkPath\bin\javac.exe") {
- $foundJdk = $true
- Write-Host -f Magenta "Detected JDK in $localJdkPath (via local repo convention)"
- $env:JAVA_HOME = $localJdkPath
-}
-elseif ($env:JAVA_HOME) {
- if (-not (Test-Path "${env:JAVA_HOME}\bin\javac.exe")) {
- Write-Error "The environment variable JAVA_HOME was set, but ${env:JAVA_HOME}\bin\javac.exe does not exist. Remove JAVA_HOME or update it to the correct location for the JDK. See https://www.bing.com/search?q=java_home for details."
- }
- else {
- Write-Host -f Magenta "Detected JDK in ${env:JAVA_HOME} (via JAVA_HOME)"
- $foundJdk = $true
- }
-}
-elseif ($javac) {
- $foundJdk = $true
- $javaHome = Split-Path -Parent (Split-Path -Parent $javac.Path)
- $env:JAVA_HOME = $javaHome
- Write-Host -f Magenta "Detected JDK in $javaHome (via PATH)"
-}
-else {
- try {
- $jdkRegistryKeys = @(
- "HKLM:\SOFTWARE\JavaSoft\JDK", # for JDK 10+
- "HKLM:\SOFTWARE\JavaSoft\Java Development Kit" # fallback for JDK 8
- )
- $jdkRegistryKey = $jdkRegistryKeys | Where-Object { Test-Path $_ } | Select-Object -First 1
- if ($jdkRegistryKey) {
- $jdkVersion = (Get-Item $jdkRegistryKey | Get-ItemProperty -name CurrentVersion).CurrentVersion
- $javaHome = (Get-Item $jdkRegistryKey\$jdkVersion | Get-ItemProperty -Name JavaHome).JavaHome
- if (Test-Path "${javaHome}\bin\javac.exe") {
- $env:JAVA_HOME = $javaHome
- Write-Host -f Magenta "Detected JDK $jdkVersion in $env:JAVA_HOME (via registry)"
- $foundJdk = $true
- }
- }
- }
- catch {
- Write-Verbose "Failed to detect Java: $_"
- }
-}
-
-if ($env:PATH -notlike "*${env:JAVA_HOME}*") {
- $env:PATH = "$(Join-Path $env:JAVA_HOME bin);${env:PATH}"
-}
-
-if (-not $foundJdk -and $RunBuild -and ($All -or $BuildJava) -and -not $NoBuildJava) {
- Write-Error "Could not find the JDK. Either run $PSScriptRoot\scripts\InstallJdk.ps1 to install for this repo, or install the JDK globally on your machine (see $PSScriptRoot\..\docs\BuildFromSource.md for details)."
-}
# Initialize global variables need to be set before the import of Arcade is imported
$restore = $RunRestore
@@ -384,6 +336,61 @@ Remove-Item variable:global:_MSBuildExe -ea Ignore
# Import Arcade
. "$PSScriptRoot/common/tools.ps1"
+function LocateJava {
+ $foundJdk = $false
+ $javac = Get-Command javac -ErrorAction Ignore -CommandType Application
+ $localJdkPath = "$PSScriptRoot\..\.tools\jdk\win-x64\"
+ if (Test-Path "$localJdkPath\bin\javac.exe") {
+ $foundJdk = $true
+ Write-Host -f Magenta "Detected JDK in $localJdkPath (via local repo convention)"
+ $env:JAVA_HOME = $localJdkPath
+ }
+ elseif ($env:JAVA_HOME) {
+ if (-not (Test-Path "${env:JAVA_HOME}\bin\javac.exe")) {
+ Write-Error "The environment variable JAVA_HOME was set, but ${env:JAVA_HOME}\bin\javac.exe does not exist. Remove JAVA_HOME or update it to the correct location for the JDK. See https://www.bing.com/search?q=java_home for details."
+ }
+ else {
+ Write-Host -f Magenta "Detected JDK in ${env:JAVA_HOME} (via JAVA_HOME)"
+ $foundJdk = $true
+ }
+ }
+ elseif ($javac) {
+ $foundJdk = $true
+ $javaHome = Split-Path -Parent (Split-Path -Parent $javac.Path)
+ $env:JAVA_HOME = $javaHome
+ Write-Host -f Magenta "Detected JDK in $javaHome (via PATH)"
+ }
+ else {
+ try {
+ $jdkRegistryKeys = @(
+ "HKLM:\SOFTWARE\JavaSoft\JDK", # for JDK 10+
+ "HKLM:\SOFTWARE\JavaSoft\Java Development Kit" # fallback for JDK 8
+ )
+ $jdkRegistryKey = $jdkRegistryKeys | Where-Object { Test-Path $_ } | Select-Object -First 1
+ if ($jdkRegistryKey) {
+ $jdkVersion = (Get-Item $jdkRegistryKey | Get-ItemProperty -name CurrentVersion).CurrentVersion
+ $javaHome = (Get-Item $jdkRegistryKey\$jdkVersion | Get-ItemProperty -Name JavaHome).JavaHome
+ if (Test-Path "${javaHome}\bin\javac.exe") {
+ $env:JAVA_HOME = $javaHome
+ Write-Host -f Magenta "Detected JDK $jdkVersion in $env:JAVA_HOME (via registry)"
+ $foundJdk = $true
+ }
+ }
+ }
+ catch {
+ Write-Verbose "Failed to detect Java: $_"
+ }
+ }
+
+ if ($env:PATH -notlike "*${env:JAVA_HOME}*") {
+ $env:PATH = "$(Join-Path $env:JAVA_HOME bin);${env:PATH}"
+ }
+
+ if (-not $foundJdk -and $RunBuild -and ($All -or $BuildJava) -and -not $NoBuildJava) {
+ Write-Error "Could not find the JDK. Either run $PSScriptRoot\scripts\InstallJdk.ps1 to install for this repo, or install the JDK globally on your machine (see $PSScriptRoot\..\docs\BuildFromSource.md for details)."
+ }
+}
+
# Add default .binlog location if not already on the command line. tools.ps1 does not handle this; it just checks
# $BinaryLog, $CI and $ExcludeCIBinarylog values for an error case. But tools.ps1 provides a nice function to help.
if ($BinaryLog) {
@@ -416,6 +423,17 @@ try {
$tmpRestore = $restore
$restore = $true
+ # Initialize the native tools before locating java.
+ if ($NativeToolsOnMachine) {
+ $env:NativeToolsOnMachine=$true
+ # Do not promote native tools except in cases where -NativeToolsOnMachine is passed.
+ # Currently the JDK is laid out in an incorrect pattern: https://github.com/dotnet/dnceng/issues/2185
+ InitializeNativeTools
+ }
+
+ # Locate java, now that we may have java available after initializing native tools.
+ LocateJava
+
$toolsetBuildProj = InitializeToolset
$restore = $tmpRestore
diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1
index 6c65e81925f2..efa2fd72bfaa 100644
--- a/eng/common/SetupNugetSources.ps1
+++ b/eng/common/SetupNugetSources.ps1
@@ -35,7 +35,7 @@ Set-StrictMode -Version 2.0
. $PSScriptRoot\tools.ps1
# Add source entry to PackageSources
-function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $Password) {
+function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) {
$packageSource = $sources.SelectSingleNode("add[@key='$SourceName']")
if ($packageSource -eq $null)
@@ -48,12 +48,11 @@ function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Usern
else {
Write-Host "Package source $SourceName already present."
}
-
- AddCredential -Creds $creds -Source $SourceName -Username $Username -Password $Password
+ AddCredential -Creds $creds -Source $SourceName -Username $Username -pwd $pwd
}
# Add a credential node for the specified source
-function AddCredential($creds, $source, $username, $password) {
+function AddCredential($creds, $source, $username, $pwd) {
# Looks for credential configuration for the given SourceName. Create it if none is found.
$sourceElement = $creds.SelectSingleNode($Source)
if ($sourceElement -eq $null)
@@ -82,17 +81,18 @@ function AddCredential($creds, $source, $username, $password) {
$passwordElement.SetAttribute("key", "ClearTextPassword")
$sourceElement.AppendChild($passwordElement) | Out-Null
}
- $passwordElement.SetAttribute("value", $Password)
+
+ $passwordElement.SetAttribute("value", $pwd)
}
-function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $Password) {
+function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $pwd) {
$maestroPrivateSources = $Sources.SelectNodes("add[contains(@key,'darc-int')]")
Write-Host "Inserting credentials for $($maestroPrivateSources.Count) Maestro's private feeds."
ForEach ($PackageSource in $maestroPrivateSources) {
Write-Host "`tInserting credential for Maestro's feed:" $PackageSource.Key
- AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -Password $Password
+ AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -pwd $pwd
}
}
@@ -144,13 +144,13 @@ if ($disabledSources -ne $null) {
$userName = "dn-bot"
# Insert credential nodes for Maestro's private feeds
-InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Username $userName -Password $Password
+InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Username $userName -pwd $Password
# 3.1 uses a different feed url format so it's handled differently here
$dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']")
if ($dotnet31Source -ne $null) {
- AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username $userName -Password $Password
- AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -Password $Password
+ AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password
+ AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password
}
$dotnetVersions = @('5','6','7','8')
@@ -159,9 +159,9 @@ foreach ($dotnetVersion in $dotnetVersions) {
$feedPrefix = "dotnet" + $dotnetVersion;
$dotnetSource = $sources.SelectSingleNode("add[@key='$feedPrefix']")
if ($dotnetSource -ne $null) {
- AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/v2" -Creds $creds -Username $userName -Password $Password
- AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/v2" -Creds $creds -Username $userName -Password $Password
+ AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password
+ AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password
}
}
-$doc.Save($filename)
+$doc.Save($filename)
\ No newline at end of file
diff --git a/eng/common/cross/toolchain.cmake b/eng/common/cross/toolchain.cmake
index 0998e875e5f7..f93dc440df0e 100644
--- a/eng/common/cross/toolchain.cmake
+++ b/eng/common/cross/toolchain.cmake
@@ -40,7 +40,7 @@ if(TARGET_ARCH_NAME STREQUAL "arm")
set(TOOLCHAIN "arm-linux-gnueabihf")
endif()
if(TIZEN)
- set(TIZEN_TOOLCHAIN "armv7hl-tizen-linux-gnueabihf/9.2.0")
+ set(TIZEN_TOOLCHAIN "armv7hl-tizen-linux-gnueabihf")
endif()
elseif(TARGET_ARCH_NAME STREQUAL "arm64")
set(CMAKE_SYSTEM_PROCESSOR aarch64)
@@ -49,7 +49,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "arm64")
elseif(LINUX)
set(TOOLCHAIN "aarch64-linux-gnu")
if(TIZEN)
- set(TIZEN_TOOLCHAIN "aarch64-tizen-linux-gnu/9.2.0")
+ set(TIZEN_TOOLCHAIN "aarch64-tizen-linux-gnu")
endif()
elseif(FREEBSD)
set(triple "aarch64-unknown-freebsd12")
@@ -58,7 +58,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "armel")
set(CMAKE_SYSTEM_PROCESSOR armv7l)
set(TOOLCHAIN "arm-linux-gnueabi")
if(TIZEN)
- set(TIZEN_TOOLCHAIN "armv7l-tizen-linux-gnueabi/9.2.0")
+ set(TIZEN_TOOLCHAIN "armv7l-tizen-linux-gnueabi")
endif()
elseif(TARGET_ARCH_NAME STREQUAL "armv6")
set(CMAKE_SYSTEM_PROCESSOR armv6l)
@@ -95,7 +95,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "x64")
elseif(LINUX)
set(TOOLCHAIN "x86_64-linux-gnu")
if(TIZEN)
- set(TIZEN_TOOLCHAIN "x86_64-tizen-linux-gnu/9.2.0")
+ set(TIZEN_TOOLCHAIN "x86_64-tizen-linux-gnu")
endif()
elseif(FREEBSD)
set(triple "x86_64-unknown-freebsd12")
@@ -112,7 +112,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "x86")
set(TOOLCHAIN "i686-linux-gnu")
endif()
if(TIZEN)
- set(TIZEN_TOOLCHAIN "i586-tizen-linux-gnu/9.2.0")
+ set(TIZEN_TOOLCHAIN "i586-tizen-linux-gnu")
endif()
else()
message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm, arm64, armel, armv6, ppc64le, riscv64, s390x, x64 and x86 are supported!")
@@ -124,26 +124,25 @@ endif()
# Specify include paths
if(TIZEN)
- if(TARGET_ARCH_NAME STREQUAL "arm")
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/)
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/armv7hl-tizen-linux-gnueabihf)
- endif()
- if(TARGET_ARCH_NAME STREQUAL "armel")
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/)
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/armv7l-tizen-linux-gnueabi)
- endif()
- if(TARGET_ARCH_NAME STREQUAL "arm64")
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/)
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/aarch64-tizen-linux-gnu)
- endif()
- if(TARGET_ARCH_NAME STREQUAL "x86")
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/)
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/i586-tizen-linux-gnu)
- endif()
- if(TARGET_ARCH_NAME STREQUAL "x64")
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/)
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/x86_64-tizen-linux-gnu)
+ function(find_toolchain_dir prefix)
+ # Dynamically find the version subdirectory
+ file(GLOB DIRECTORIES "${prefix}/*")
+ list(GET DIRECTORIES 0 FIRST_MATCH)
+ get_filename_component(TOOLCHAIN_VERSION ${FIRST_MATCH} NAME)
+
+ set(TIZEN_TOOLCHAIN_PATH "${prefix}/${TOOLCHAIN_VERSION}" PARENT_SCOPE)
+ endfunction()
+
+ if(TARGET_ARCH_NAME MATCHES "^(arm|armel|x86)$")
+ find_toolchain_dir("${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
+ else()
+ find_toolchain_dir("${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}")
endif()
+
+ message(STATUS "TIZEN_TOOLCHAIN_PATH set to: ${TIZEN_TOOLCHAIN_PATH}")
+
+ include_directories(SYSTEM ${TIZEN_TOOLCHAIN_PATH}/include/c++)
+ include_directories(SYSTEM ${TIZEN_TOOLCHAIN_PATH}/include/c++/${TIZEN_TOOLCHAIN})
endif()
if(ANDROID)
@@ -265,22 +264,24 @@ endif()
if(TARGET_ARCH_NAME MATCHES "^(arm|armel)$")
if(TIZEN)
- add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
+ add_toolchain_linker_flag("-B${TIZEN_TOOLCHAIN_PATH}")
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib")
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib")
- add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
+ add_toolchain_linker_flag("-L${TIZEN_TOOLCHAIN_PATH}")
endif()
elseif(TARGET_ARCH_NAME MATCHES "^(arm64|x64)$")
if(TIZEN)
- add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}")
+ add_toolchain_linker_flag("-B${TIZEN_TOOLCHAIN_PATH}")
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib64")
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib64")
- add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}")
+ add_toolchain_linker_flag("-L${TIZEN_TOOLCHAIN_PATH}")
add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/lib64")
add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64")
- add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}")
+ add_toolchain_linker_flag("-Wl,--rpath-link=${TIZEN_TOOLCHAIN_PATH}")
endif()
+elseif(TARGET_ARCH_NAME STREQUAL "s390x")
+ add_toolchain_linker_flag("--target=${TOOLCHAIN}")
elseif(TARGET_ARCH_NAME STREQUAL "x86")
if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl)
add_toolchain_linker_flag("--target=${TOOLCHAIN}")
@@ -288,10 +289,10 @@ elseif(TARGET_ARCH_NAME STREQUAL "x86")
endif()
add_toolchain_linker_flag(-m32)
if(TIZEN)
- add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
+ add_toolchain_linker_flag("-B${TIZEN_TOOLCHAIN_PATH}")
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib")
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib")
- add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
+ add_toolchain_linker_flag("-L${TIZEN_TOOLCHAIN_PATH}")
endif()
elseif(ILLUMOS)
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib/amd64")
@@ -328,6 +329,8 @@ if(TARGET_ARCH_NAME MATCHES "^(arm|armel)$")
if(TARGET_ARCH_NAME STREQUAL "armel")
add_compile_options(-mfloat-abi=softfp)
endif()
+elseif(TARGET_ARCH_NAME STREQUAL "s390x")
+ add_compile_options("--target=${TOOLCHAIN}")
elseif(TARGET_ARCH_NAME STREQUAL "x86")
if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl)
add_compile_options(--target=${TOOLCHAIN})
diff --git a/eng/common/darc-init.ps1 b/eng/common/darc-init.ps1
index 435e7641341b..8fda30bdce2b 100644
--- a/eng/common/darc-init.ps1
+++ b/eng/common/darc-init.ps1
@@ -1,6 +1,6 @@
param (
$darcVersion = $null,
- $versionEndpoint = 'https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16',
+ $versionEndpoint = 'https://maestro.dot.net/api/assets/darc-version?api-version=2019-01-16',
$verbosity = 'minimal',
$toolpath = $null
)
diff --git a/eng/common/darc-init.sh b/eng/common/darc-init.sh
index 84c1d0cc2e75..c305ae6bd771 100755
--- a/eng/common/darc-init.sh
+++ b/eng/common/darc-init.sh
@@ -2,7 +2,7 @@
source="${BASH_SOURCE[0]}"
darcVersion=''
-versionEndpoint='https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16'
+versionEndpoint='https://maestro.dot.net/api/assets/darc-version?api-version=2019-01-16'
verbosity='minimal'
while [[ $# > 0 ]]; do
diff --git a/eng/common/generate-sbom-prep.ps1 b/eng/common/generate-sbom-prep.ps1
index 3e5c1c74a1c5..a0c7d792a76f 100644
--- a/eng/common/generate-sbom-prep.ps1
+++ b/eng/common/generate-sbom-prep.ps1
@@ -4,18 +4,26 @@ Param(
. $PSScriptRoot\pipeline-logging-functions.ps1
+# Normally - we'd listen to the manifest path given, but 1ES templates will overwrite if this level gets uploaded directly
+# with their own overwriting ours. So we create it as a sub directory of the requested manifest path.
+$ArtifactName = "${env:SYSTEM_STAGENAME}_${env:AGENT_JOBNAME}_SBOM"
+$SafeArtifactName = $ArtifactName -replace '["/:<>\\|?@*"() ]', '_'
+$SbomGenerationDir = Join-Path $ManifestDirPath $SafeArtifactName
+
+Write-Host "Artifact name before : $ArtifactName"
+Write-Host "Artifact name after : $SafeArtifactName"
+
Write-Host "Creating dir $ManifestDirPath"
+
# create directory for sbom manifest to be placed
-if (!(Test-Path -path $ManifestDirPath))
+if (!(Test-Path -path $SbomGenerationDir))
{
- New-Item -ItemType Directory -path $ManifestDirPath
- Write-Host "Successfully created directory $ManifestDirPath"
+ New-Item -ItemType Directory -path $SbomGenerationDir
+ Write-Host "Successfully created directory $SbomGenerationDir"
}
else{
Write-PipelineTelemetryError -category 'Build' "Unable to create sbom folder."
}
Write-Host "Updating artifact name"
-$artifact_name = "${env:SYSTEM_STAGENAME}_${env:AGENT_JOBNAME}_SBOM" -replace '["/:<>\\|?@*"() ]', '_'
-Write-Host "Artifact name $artifact_name"
-Write-Host "##vso[task.setvariable variable=ARTIFACT_NAME]$artifact_name"
+Write-Host "##vso[task.setvariable variable=ARTIFACT_NAME]$SafeArtifactName"
diff --git a/eng/common/generate-sbom-prep.sh b/eng/common/generate-sbom-prep.sh
index d5c76dc827b4..bbb4922151e6 100644
--- a/eng/common/generate-sbom-prep.sh
+++ b/eng/common/generate-sbom-prep.sh
@@ -14,19 +14,24 @@ done
scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
. $scriptroot/pipeline-logging-functions.sh
+# replace all special characters with _, some builds use special characters like : in Agent.Jobname, that is not a permissible name while uploading artifacts.
+artifact_name=$SYSTEM_STAGENAME"_"$AGENT_JOBNAME"_SBOM"
+safe_artifact_name="${artifact_name//["/:<>\\|?@*$" ]/_}"
+
manifest_dir=$1
-if [ ! -d "$manifest_dir" ] ; then
- mkdir -p "$manifest_dir"
- echo "Sbom directory created." $manifest_dir
+# Normally - we'd listen to the manifest path given, but 1ES templates will overwrite if this level gets uploaded directly
+# with their own overwriting ours. So we create it as a sub directory of the requested manifest path.
+sbom_generation_dir="$manifest_dir/$safe_artifact_name"
+
+if [ ! -d "$sbom_generation_dir" ] ; then
+ mkdir -p "$sbom_generation_dir"
+ echo "Sbom directory created." $sbom_generation_dir
else
Write-PipelineTelemetryError -category 'Build' "Unable to create sbom folder."
fi
-artifact_name=$SYSTEM_STAGENAME"_"$AGENT_JOBNAME"_SBOM"
echo "Artifact name before : "$artifact_name
-# replace all special characters with _, some builds use special characters like : in Agent.Jobname, that is not a permissible name while uploading artifacts.
-safe_artifact_name="${artifact_name//["/:<>\\|?@*$" ]/_}"
echo "Artifact name after : "$safe_artifact_name
export ARTIFACT_NAME=$safe_artifact_name
echo "##vso[task.setvariable variable=ARTIFACT_NAME]$safe_artifact_name"
diff --git a/eng/common/native/init-compiler.sh b/eng/common/native/init-compiler.sh
index f5c1ec7eafeb..2d5660642b8d 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/post-build/add-build-to-channel.ps1 b/eng/common/post-build/add-build-to-channel.ps1
index de2d957922a6..49938f0c89f7 100644
--- a/eng/common/post-build/add-build-to-channel.ps1
+++ b/eng/common/post-build/add-build-to-channel.ps1
@@ -2,7 +2,7 @@ param(
[Parameter(Mandatory=$true)][int] $BuildId,
[Parameter(Mandatory=$true)][int] $ChannelId,
[Parameter(Mandatory=$true)][string] $MaestroApiAccessToken,
- [Parameter(Mandatory=$false)][string] $MaestroApiEndPoint = 'https://maestro-prod.westus2.cloudapp.azure.com/',
+ [Parameter(Mandatory=$false)][string] $MaestroApiEndPoint = 'https://maestro.dot.net/',
[Parameter(Mandatory=$false)][string] $MaestroApiVersion = '2019-01-16'
)
diff --git a/eng/common/post-build/publish-using-darc.ps1 b/eng/common/post-build/publish-using-darc.ps1
index 8508397d7764..238945cb5ab4 100644
--- a/eng/common/post-build/publish-using-darc.ps1
+++ b/eng/common/post-build/publish-using-darc.ps1
@@ -2,8 +2,7 @@ param(
[Parameter(Mandatory=$true)][int] $BuildId,
[Parameter(Mandatory=$true)][int] $PublishingInfraVersion,
[Parameter(Mandatory=$true)][string] $AzdoToken,
- [Parameter(Mandatory=$true)][string] $MaestroToken,
- [Parameter(Mandatory=$false)][string] $MaestroApiEndPoint = 'https://maestro-prod.westus2.cloudapp.azure.com/',
+ [Parameter(Mandatory=$false)][string] $MaestroApiEndPoint = 'https://maestro.dot.net/',
[Parameter(Mandatory=$true)][string] $WaitPublishingFinish,
[Parameter(Mandatory=$false)][string] $ArtifactsPublishingAdditionalParameters,
[Parameter(Mandatory=$false)][string] $SymbolPublishingAdditionalParameters
@@ -12,7 +11,7 @@ param(
try {
. $PSScriptRoot\post-build-utils.ps1
- $darc = Get-Darc
+ $darc = Get-Darc
$optionalParams = [System.Collections.ArrayList]::new()
@@ -31,13 +30,13 @@ try {
}
& $darc add-build-to-channel `
- --id $buildId `
- --publishing-infra-version $PublishingInfraVersion `
- --default-channels `
- --source-branch main `
- --azdev-pat $AzdoToken `
- --bar-uri $MaestroApiEndPoint `
- --password $MaestroToken `
+ --id $buildId `
+ --publishing-infra-version $PublishingInfraVersion `
+ --default-channels `
+ --source-branch main `
+ --azdev-pat "$AzdoToken" `
+ --bar-uri "$MaestroApiEndPoint" `
+ --ci `
@optionalParams
if ($LastExitCode -ne 0) {
@@ -46,7 +45,7 @@ try {
}
Write-Host 'done.'
-}
+}
catch {
Write-Host $_
Write-PipelineTelemetryError -Category 'PromoteBuild' -Message "There was an error while trying to publish build '$BuildId' to default channels."
diff --git a/eng/common/post-build/trigger-subscriptions.ps1 b/eng/common/post-build/trigger-subscriptions.ps1
index 55dea518ac58..ac9a95778fcd 100644
--- a/eng/common/post-build/trigger-subscriptions.ps1
+++ b/eng/common/post-build/trigger-subscriptions.ps1
@@ -2,7 +2,7 @@ param(
[Parameter(Mandatory=$true)][string] $SourceRepo,
[Parameter(Mandatory=$true)][int] $ChannelId,
[Parameter(Mandatory=$true)][string] $MaestroApiAccessToken,
- [Parameter(Mandatory=$false)][string] $MaestroApiEndPoint = 'https://maestro-prod.westus2.cloudapp.azure.com/',
+ [Parameter(Mandatory=$false)][string] $MaestroApiEndPoint = 'https://maestro.dot.net/',
[Parameter(Mandatory=$false)][string] $MaestroApiVersion = '2019-01-16'
)
diff --git a/eng/common/sdk-task.ps1 b/eng/common/sdk-task.ps1
index 73828dd30d31..4f0546dce120 100644
--- a/eng/common/sdk-task.ps1
+++ b/eng/common/sdk-task.ps1
@@ -64,7 +64,7 @@ try {
$GlobalJson.tools | Add-Member -Name "vs" -Value (ConvertFrom-Json "{ `"version`": `"16.5`" }") -MemberType NoteProperty
}
if( -not ($GlobalJson.tools.PSObject.Properties.Name -match "xcopy-msbuild" )) {
- $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "17.8.1-2" -MemberType NoteProperty
+ $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "17.12.0" -MemberType NoteProperty
}
if ($GlobalJson.tools."xcopy-msbuild".Trim() -ine "none") {
$xcopyMSBuildToolsFolder = InitializeXCopyMSBuild $GlobalJson.tools."xcopy-msbuild" -install $true
diff --git a/eng/common/sdl/NuGet.config b/eng/common/sdl/NuGet.config
index 3849bdb3cf51..5bfbb02ef043 100644
--- a/eng/common/sdl/NuGet.config
+++ b/eng/common/sdl/NuGet.config
@@ -5,11 +5,11 @@
-
+
-
+
diff --git a/eng/common/sdl/execute-all-sdl-tools.ps1 b/eng/common/sdl/execute-all-sdl-tools.ps1
index 4715d75e974d..81ded5b7f477 100644
--- a/eng/common/sdl/execute-all-sdl-tools.ps1
+++ b/eng/common/sdl/execute-all-sdl-tools.ps1
@@ -6,7 +6,6 @@ Param(
[string] $BranchName=$env:BUILD_SOURCEBRANCH, # Optional: name of branch or version of gdn settings; defaults to master
[string] $SourceDirectory=$env:BUILD_SOURCESDIRECTORY, # Required: the directory where source files are located
[string] $ArtifactsDirectory = (Join-Path $env:BUILD_ARTIFACTSTAGINGDIRECTORY ('artifacts')), # Required: the directory where build artifacts are located
- [string] $AzureDevOpsAccessToken, # Required: access token for dnceng; should be provided via KeyVault
# Optional: list of SDL tools to run on source code. See 'configure-sdl-tool.ps1' for tools list
# format.
@@ -75,7 +74,7 @@ try {
}
Exec-BlockVerbosely {
- & $(Join-Path $PSScriptRoot 'init-sdl.ps1') -GuardianCliLocation $guardianCliLocation -Repository $RepoName -BranchName $BranchName -WorkingDirectory $workingDirectory -AzureDevOpsAccessToken $AzureDevOpsAccessToken -GuardianLoggerLevel $GuardianLoggerLevel
+ & $(Join-Path $PSScriptRoot 'init-sdl.ps1') -GuardianCliLocation $guardianCliLocation -Repository $RepoName -BranchName $BranchName -WorkingDirectory $workingDirectory -GuardianLoggerLevel $GuardianLoggerLevel
}
$gdnFolder = Join-Path $workingDirectory '.gdn'
@@ -104,7 +103,6 @@ try {
-TargetDirectory $targetDirectory `
-GdnFolder $gdnFolder `
-ToolsList $tools `
- -AzureDevOpsAccessToken $AzureDevOpsAccessToken `
-GuardianLoggerLevel $GuardianLoggerLevel `
-CrScanAdditionalRunConfigParams $CrScanAdditionalRunConfigParams `
-PoliCheckAdditionalRunConfigParams $PoliCheckAdditionalRunConfigParams `
diff --git a/eng/common/sdl/init-sdl.ps1 b/eng/common/sdl/init-sdl.ps1
index 3ac1d92b3700..588ff8e22fbe 100644
--- a/eng/common/sdl/init-sdl.ps1
+++ b/eng/common/sdl/init-sdl.ps1
@@ -3,7 +3,6 @@ Param(
[string] $Repository,
[string] $BranchName='master',
[string] $WorkingDirectory,
- [string] $AzureDevOpsAccessToken,
[string] $GuardianLoggerLevel='Standard'
)
@@ -21,14 +20,7 @@ $ci = $true
# Don't display the console progress UI - it's a huge perf hit
$ProgressPreference = 'SilentlyContinue'
-# Construct basic auth from AzDO access token; construct URI to the repository's gdn folder stored in that repository; construct location of zip file
-$encodedPat = [Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$AzureDevOpsAccessToken"))
-$escapedRepository = [Uri]::EscapeDataString("/$Repository/$BranchName/.gdn")
-$uri = "https://dev.azure.com/dnceng/internal/_apis/git/repositories/sdl-tool-cfg/Items?path=$escapedRepository&versionDescriptor[versionOptions]=0&`$format=zip&api-version=5.0"
-$zipFile = "$WorkingDirectory/gdn.zip"
-
Add-Type -AssemblyName System.IO.Compression.FileSystem
-$gdnFolder = (Join-Path $WorkingDirectory '.gdn')
try {
# if the folder does not exist, we'll do a guardian init and push it to the remote repository
diff --git a/eng/common/sdl/packages.config b/eng/common/sdl/packages.config
index 4585cfd6bba1..e5f543ea68c2 100644
--- a/eng/common/sdl/packages.config
+++ b/eng/common/sdl/packages.config
@@ -1,4 +1,4 @@
-
+
diff --git a/eng/common/sdl/sdl.ps1 b/eng/common/sdl/sdl.ps1
index 648c5068d7d6..7fe603fe995d 100644
--- a/eng/common/sdl/sdl.ps1
+++ b/eng/common/sdl/sdl.ps1
@@ -4,6 +4,8 @@ function Install-Gdn {
[Parameter(Mandatory=$true)]
[string]$Path,
+ [string]$Source = "https://pkgs.dev.azure.com/dnceng/_packaging/Guardian1ESPTUpstreamOrgFeed/nuget/v3/index.json",
+
# If omitted, install the latest version of Guardian, otherwise install that specific version.
[string]$Version
)
@@ -19,7 +21,7 @@ function Install-Gdn {
$ci = $true
. $PSScriptRoot\..\tools.ps1
- $argumentList = @("install", "Microsoft.Guardian.Cli", "-Source https://securitytools.pkgs.visualstudio.com/_packaging/Guardian/nuget/v3/index.json", "-OutputDirectory $Path", "-NonInteractive", "-NoCache")
+ $argumentList = @("install", "Microsoft.Guardian.Cli.win-x64", "-Source $Source", "-OutputDirectory $Path", "-NonInteractive", "-NoCache")
if ($Version) {
$argumentList += "-Version $Version"
diff --git a/eng/common/templates-official/job/job.yml b/eng/common/templates-official/job/job.yml
new file mode 100644
index 000000000000..98ccbd7a9c16
--- /dev/null
+++ b/eng/common/templates-official/job/job.yml
@@ -0,0 +1,265 @@
+# 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'
+ ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom
+
+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
diff --git a/eng/common/templates-official/job/onelocbuild.yml b/eng/common/templates-official/job/onelocbuild.yml
new file mode 100644
index 000000000000..52b4d05d3f8d
--- /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 000000000000..b2ccd9df6801
--- /dev/null
+++ b/eng/common/templates-official/job/publish-build-assets.yml
@@ -0,0 +1,160 @@
+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: AzureCLI@2
+ displayName: Publish Build Assets
+ inputs:
+ azureSubscription: "Darc: Maestro Production"
+ scriptType: ps
+ scriptLocation: scriptPath
+ scriptPath: $(Build.SourcesDirectory)/eng/common/sdk-task.ps1
+ arguments: >
+ -task PublishBuildAssets -restore -msbuildEngine dotnet
+ /p:ManifestsPath='$(Build.StagingDirectory)/Download/AssetManifests'
+ /p:MaestroApiEndpoint=https://maestro.dot.net
+ /p:PublishUsingPipelines=${{ parameters.publishUsingPipelines }}
+ /p:OfficialBuildId=$(Build.BuildNumber)
+ condition: ${{ parameters.condition }}
+ continueOnError: ${{ parameters.continueOnError }}
+
+ - task: powershell@2
+ displayName: Create ReleaseConfigs Artifact
+ inputs:
+ targetType: inline
+ script: |
+ New-Item -Path "$(Build.StagingDirectory)/ReleaseConfigs" -ItemType Directory -Force
+ $filePath = "$(Build.StagingDirectory)/ReleaseConfigs/ReleaseConfigs.txt"
+ Add-Content -Path $filePath -Value $(BARBuildId)
+ Add-Content -Path $filePath -Value "$(DefaultChannels)"
+ Add-Content -Path $filePath -Value $(IsStableBuild)
+
+ - task: 1ES.PublishBuildArtifacts@1
+ displayName: Publish ReleaseConfigs Artifact
+ inputs:
+ PathtoPublish: '$(Build.StagingDirectory)/ReleaseConfigs'
+ PublishLocation: Container
+ ArtifactName: ReleaseConfigs
+
+ - task: powershell@2
+ displayName: Check if SymbolPublishingExclusionsFile.txt exists
+ inputs:
+ targetType: inline
+ script: |
+ $symbolExclusionfile = "$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt"
+ if(Test-Path -Path $symbolExclusionfile)
+ {
+ Write-Host "SymbolExclusionFile exists"
+ Write-Host "##vso[task.setvariable variable=SymbolExclusionFile]true"
+ }
+ else{
+ Write-Host "Symbols Exclusion file does not exists"
+ Write-Host "##vso[task.setvariable variable=SymbolExclusionFile]false"
+ }
+
+ - task: 1ES.PublishBuildArtifacts@1
+ displayName: Publish SymbolPublishingExclusionsFile Artifact
+ condition: eq(variables['SymbolExclusionFile'], 'true')
+ inputs:
+ PathtoPublish: '$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt'
+ PublishLocation: Container
+ ArtifactName: ReleaseConfigs
+
+ - ${{ if eq(parameters.publishAssetsImmediately, 'true') }}:
+ - template: /eng/common/templates-official/post-build/setup-maestro-vars.yml
+ parameters:
+ BARBuildId: ${{ parameters.BARBuildId }}
+ PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }}
+
+ - task: AzureCLI@2
+ displayName: Publish Using Darc
+ inputs:
+ azureSubscription: "Darc: Maestro Production"
+ scriptType: ps
+ scriptLocation: scriptPath
+ scriptPath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1
+ arguments: -BuildId $(BARBuildId)
+ -PublishingInfraVersion 3
+ -AzdoToken '$(System.AccessToken)'
+ -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 000000000000..4217d6d8b148
--- /dev/null
+++ b/eng/common/templates-official/job/source-build.yml
@@ -0,0 +1,75 @@
+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: {}
+
+ # If set to true and running on a non-public project,
+ # Internal blob storage locations will be enabled.
+ # This is not enabled by default because many repositories do not need internal sources
+ # and do not need to have the required service connections approved in the pipeline.
+ enableInternalSources: false
+
+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.2204.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:
+ - ${{ if eq(parameters.enableInternalSources, true) }}:
+ - template: /eng/common/templates-official/steps/enable-internal-runtimes.yml
+ - 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 000000000000..fb632b71a250
--- /dev/null
+++ b/eng/common/templates-official/job/source-index-stage1.yml
@@ -0,0 +1,83 @@
+parameters:
+ runAsPublic: false
+ sourceIndexUploadPackageVersion: 2.0.0-20250425.2
+ sourceIndexProcessBinlogPackageVersion: 1.0.1-20250425.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-official/variables/pool-providers.yml
+
+ ${{ if ne(parameters.pool, '') }}:
+ pool: ${{ parameters.pool }}
+ ${{ if eq(parameters.pool, '') }}:
+ pool:
+ ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ name: $(DncEngPublicBuildPool)
+ demands: ImageOverride -equals windows.vs2019.amd64.open
+ ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ name: $(DncEngInternalBuildPool)
+ image: windows.vs2022.amd64
+ os: windows
+
+ 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;issecret=true]$env:servicePrincipalId"
+ echo "##vso[task.setvariable variable=ARM_ID_TOKEN;issecret=true]$env:idToken"
+ echo "##vso[task.setvariable variable=ARM_TENANT_ID;issecret=true]$env:tenantId"
+
+ - script: |
+ 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
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 000000000000..b68d3c2f3199
--- /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 000000000000..857a0f8ba43e
--- /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 000000000000..b9247be1547b
--- /dev/null
+++ b/eng/common/templates-official/jobs/source-build.yml
@@ -0,0 +1,54 @@
+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-stream-9-amd64'
+
+ # 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: []
+
+ # If set to true and running on a non-public project,
+ # Internal nuget and blob storage locations will be enabled.
+ # This is not enabled by default because many repositories do not need internal sources
+ # and do not need to have the required service connections approved in the pipeline.
+ enableInternalSources: false
+
+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 }}
+ enableInternalSources: ${{ parameters.enableInternalSources }}
+
+- ${{ if eq(length(parameters.platforms), 0) }}:
+ - template: /eng/common/templates-official/job/source-build.yml
+ parameters:
+ jobNamePrefix: ${{ parameters.jobNamePrefix }}
+ platform: ${{ parameters.defaultManagedPlatform }}
+ enableInternalSources: ${{ parameters.enableInternalSources }}
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 000000000000..173914f2364a
--- /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.dot.net/"
+ - name: MaestroApiAccessToken
+ value: $(MaestroAccessToken)
+ - name: MaestroApiVersion
+ value: "2020-02-20"
+
+ - name: SourceLinkCLIVersion
+ value: 3.0.0
+ - name: SymbolToolVersion
+ value: 1.0.1
+
+ - name: 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 000000000000..b81b8770b346
--- /dev/null
+++ b/eng/common/templates-official/post-build/post-build.yml
@@ -0,0 +1,287 @@
+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: AzureCLI@2
+ displayName: Publish Using Darc
+ inputs:
+ azureSubscription: "Darc: Maestro Production"
+ scriptType: ps
+ scriptLocation: scriptPath
+ scriptPath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1
+ arguments: -BuildId $(BARBuildId)
+ -PublishingInfraVersion ${{ parameters.publishingInfraVersion }}
+ -AzdoToken '$(System.AccessToken)'
+ -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 000000000000..0c87f149a4ad
--- /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 000000000000..da669030daf6
--- /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 000000000000..f67a210d62f3
--- /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 000000000000..eba58109b52c
--- /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 000000000000..cbba0596709d
--- /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/enable-internal-runtimes.yml b/eng/common/templates-official/steps/enable-internal-runtimes.yml
new file mode 100644
index 000000000000..93a8394a666b
--- /dev/null
+++ b/eng/common/templates-official/steps/enable-internal-runtimes.yml
@@ -0,0 +1,28 @@
+# Obtains internal runtime download credentials and populates the 'dotnetbuilds-internal-container-read-token-base64'
+# variable with the base64-encoded SAS token, by default
+
+parameters:
+- name: federatedServiceConnection
+ type: string
+ default: 'dotnetbuilds-internal-read'
+- name: outputVariableName
+ type: string
+ default: 'dotnetbuilds-internal-container-read-token-base64'
+- name: expiryInHours
+ type: number
+ default: 1
+- name: base64Encode
+ type: boolean
+ default: true
+
+steps:
+- ${{ if ne(variables['System.TeamProject'], 'public') }}:
+ - template: /eng/common/templates-official/steps/get-delegation-sas.yml
+ parameters:
+ federatedServiceConnection: ${{ parameters.federatedServiceConnection }}
+ outputVariableName: ${{ parameters.outputVariableName }}
+ expiryInHours: ${{ parameters.expiryInHours }}
+ base64Encode: ${{ parameters.base64Encode }}
+ storageAccount: dotnetbuilds
+ container: internal
+ permissions: rl
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 000000000000..9b4a5ffa30a7
--- /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 000000000000..301d5c591ebd
--- /dev/null
+++ b/eng/common/templates-official/steps/execute-sdl.yml
@@ -0,0 +1,86 @@
+parameters:
+ overrideGuardianVersion: ''
+ executeAllSdlToolsScript: ''
+ overrideParameters: ''
+ additionalParameters: ''
+ publishGuardianDirectoryToPipeline: false
+ sdlContinueOnError: false
+ condition: ''
+
+steps:
+- task: NuGetAuthenticate@1
+
+- 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 000000000000..daf0957b68d7
--- /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 }}/$(ARTIFACT_NAME)
+ ${{ 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/get-delegation-sas.yml b/eng/common/templates-official/steps/get-delegation-sas.yml
new file mode 100644
index 000000000000..c690cc0a070c
--- /dev/null
+++ b/eng/common/templates-official/steps/get-delegation-sas.yml
@@ -0,0 +1,52 @@
+parameters:
+- name: federatedServiceConnection
+ type: string
+- name: outputVariableName
+ type: string
+- name: expiryInHours
+ type: number
+ default: 1
+- name: base64Encode
+ type: boolean
+ default: false
+- name: storageAccount
+ type: string
+- name: container
+ type: string
+- name: permissions
+ type: string
+ default: 'rl'
+
+steps:
+- task: AzureCLI@2
+ displayName: 'Generate delegation SAS Token for ${{ parameters.storageAccount }}/${{ parameters.container }}'
+ inputs:
+ azureSubscription: ${{ parameters.federatedServiceConnection }}
+ scriptType: 'pscore'
+ scriptLocation: 'inlineScript'
+ inlineScript: |
+ # Calculate the expiration of the SAS token and convert to UTC
+ $expiry = (Get-Date).AddHours(${{ parameters.expiryInHours }}).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
+
+ # Temporarily work around a helix issue where SAS tokens with / in them will cause incorrect downloads
+ # of correlation payloads. https://github.com/dotnet/dnceng/issues/3484
+ $sas = ""
+ do {
+ $sas = az storage container generate-sas --account-name ${{ parameters.storageAccount }} --name ${{ parameters.container }} --permissions ${{ parameters.permissions }} --expiry $expiry --auth-mode login --as-user -o tsv
+ if ($LASTEXITCODE -ne 0) {
+ Write-Error "Failed to generate SAS token."
+ exit 1
+ }
+ } while($sas.IndexOf('/') -ne -1)
+
+ if ($LASTEXITCODE -ne 0) {
+ Write-Error "Failed to generate SAS token."
+ exit 1
+ }
+
+ if ('${{ parameters.base64Encode }}' -eq 'true') {
+ $sas = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($sas))
+ }
+
+ Write-Host "Setting '${{ parameters.outputVariableName }}' with the access token value"
+ Write-Host "##vso[task.setvariable variable=${{ parameters.outputVariableName }};issecret=true]$sas"
diff --git a/eng/common/templates-official/steps/get-federated-access-token.yml b/eng/common/templates-official/steps/get-federated-access-token.yml
new file mode 100644
index 000000000000..55e33bd38f71
--- /dev/null
+++ b/eng/common/templates-official/steps/get-federated-access-token.yml
@@ -0,0 +1,40 @@
+parameters:
+- name: federatedServiceConnection
+ type: string
+- name: outputVariableName
+ type: string
+- name: stepName
+ type: string
+ default: 'getFederatedAccessToken'
+- name: condition
+ type: string
+ default: ''
+# Resource to get a token for. Common values include:
+# - '499b84ac-1321-427f-aa17-267ca6975798' for Azure DevOps
+# - 'https://storage.azure.com/' for storage
+# Defaults to Azure DevOps
+- name: resource
+ type: string
+ default: '499b84ac-1321-427f-aa17-267ca6975798'
+- name: isStepOutputVariable
+ type: boolean
+ default: false
+
+steps:
+- task: AzureCLI@2
+ displayName: 'Getting federated access token for feeds'
+ name: ${{ parameters.stepName }}
+ ${{ if ne(parameters.condition, '') }}:
+ condition: ${{ parameters.condition }}
+ inputs:
+ azureSubscription: ${{ parameters.federatedServiceConnection }}
+ scriptType: 'pscore'
+ scriptLocation: 'inlineScript'
+ inlineScript: |
+ $accessToken = az account get-access-token --query accessToken --resource ${{ parameters.resource }} --output tsv
+ if ($LASTEXITCODE -ne 0) {
+ Write-Error "Failed to get access token for resource '${{ parameters.resource }}'"
+ exit 1
+ }
+ Write-Host "Setting '${{ parameters.outputVariableName }}' with the access token value"
+ Write-Host "##vso[task.setvariable variable=${{ parameters.outputVariableName }};issecret=true;isOutput=${{ parameters.isStepOutputVariable }}]$accessToken"
\ No newline at end of file
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 000000000000..04012fed182a
--- /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 000000000000..83d97a26a01f
--- /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 000000000000..22f2501307d4
--- /dev/null
+++ b/eng/common/templates-official/steps/send-to-helix.yml
@@ -0,0 +1,92 @@
+# 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
+ HelixProjectArguments: '' # optional -- arguments passed to the build command for helixpublish.proj
+ 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 ${{ parameters.HelixProjectArguments }} /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 ${{ parameters.HelixProjectArguments }} /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 000000000000..829f17c34d11
--- /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 000000000000..1f308b24efc4
--- /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 000000000000..dbdd66d4a4b3
--- /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 e20ee3a983cb..e295031c0985 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
@@ -124,7 +128,7 @@ jobs:
- ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- ${{ if eq(parameters.enableMicrobuild, 'true') }}:
- - task: MicroBuildSigningPlugin@3
+ - task: MicroBuildSigningPlugin@4
displayName: Install MicroBuild plugin
inputs:
signType: $(_SignType)
@@ -136,7 +140,7 @@ jobs:
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@0
+ - task: NuGetAuthenticate@1
- ${{ if and(ne(parameters.artifacts.download, 'false'), ne(parameters.artifacts.download, '')) }}:
- task: DownloadPipelineArtifact@2
diff --git a/eng/common/templates/job/publish-build-assets.yml b/eng/common/templates/job/publish-build-assets.yml
index 42017109f374..cc2b346ba8ba 100644
--- a/eng/common/templates/job/publish-build-assets.yml
+++ b/eng/common/templates/job/publish-build-assets.yml
@@ -58,7 +58,7 @@ jobs:
demands: Cmd
# If it's not devdiv, it's dnceng
${{ if ne(variables['System.TeamProject'], 'DevDiv') }}:
- name: $(DncEngInternalBuildPool)
+ name: NetCore1ESPool-Publishing-Internal
demands: ImageOverride -equals windows.vs2019.amd64
steps:
@@ -71,22 +71,25 @@ jobs:
checkDownloadedFiles: true
condition: ${{ parameters.condition }}
continueOnError: ${{ parameters.continueOnError }}
-
- - task: NuGetAuthenticate@0
- - task: PowerShell@2
+ - task: NuGetAuthenticate@1
+
+ - task: AzureCLI@2
displayName: Publish Build Assets
inputs:
- filePath: eng\common\sdk-task.ps1
- arguments: -task PublishBuildAssets -restore -msbuildEngine dotnet
+ azureSubscription: "Darc: Maestro Production"
+ scriptType: ps
+ scriptLocation: scriptPath
+ scriptPath: $(Build.SourcesDirectory)/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:MaestroApiEndpoint=https://maestro.dot.net
/p:PublishUsingPipelines=${{ parameters.publishUsingPipelines }}
/p:OfficialBuildId=$(Build.BuildNumber)
condition: ${{ parameters.condition }}
continueOnError: ${{ parameters.continueOnError }}
-
+
- task: powershell@2
displayName: Create ReleaseConfigs Artifact
inputs:
@@ -95,7 +98,7 @@ jobs:
Add-Content -Path "$(Build.StagingDirectory)/ReleaseConfigs.txt" -Value $(BARBuildId)
Add-Content -Path "$(Build.StagingDirectory)/ReleaseConfigs.txt" -Value "$(DefaultChannels)"
Add-Content -Path "$(Build.StagingDirectory)/ReleaseConfigs.txt" -Value $(IsStableBuild)
-
+
- task: PublishBuildArtifacts@1
displayName: Publish ReleaseConfigs Artifact
inputs:
@@ -121,7 +124,7 @@ jobs:
- task: PublishBuildArtifacts@1
displayName: Publish SymbolPublishingExclusionsFile Artifact
- condition: eq(variables['SymbolExclusionFile'], 'true')
+ condition: eq(variables['SymbolExclusionFile'], 'true')
inputs:
PathtoPublish: '$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt'
PublishLocation: Container
@@ -133,14 +136,16 @@ jobs:
BARBuildId: ${{ parameters.BARBuildId }}
PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }}
- - task: PowerShell@2
+ - task: AzureCLI@2
displayName: Publish Using Darc
inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1
+ azureSubscription: "Darc: Maestro Production"
+ scriptType: ps
+ scriptLocation: scriptPath
+ scriptPath: $(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)'
+ -AzdoToken '$(System.AccessToken)'
-WaitPublishingFinish true
-ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}'
-SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}'
@@ -148,4 +153,4 @@ jobs:
- ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}:
- template: /eng/common/templates/steps/publish-logs.yml
parameters:
- JobLabel: 'Publish_Artifacts_Logs'
+ JobLabel: 'Publish_Artifacts_Logs'
diff --git a/eng/common/templates/job/source-build.yml b/eng/common/templates/job/source-build.yml
index 8a3deef2b727..c48f95d93d91 100644
--- a/eng/common/templates/job/source-build.yml
+++ b/eng/common/templates/job/source-build.yml
@@ -31,6 +31,12 @@ parameters:
# container and pool.
platform: {}
+ # If set to true and running on a non-public project,
+ # Internal blob storage locations will be enabled.
+ # This is not enabled by default because many repositories do not need internal sources
+ # and do not need to have the required service connections approved in the pipeline.
+ enableInternalSources: false
+
jobs:
- job: ${{ parameters.jobNamePrefix }}_${{ parameters.platform.name }}
displayName: Source-Build (${{ parameters.platform.name }})
@@ -48,11 +54,11 @@ jobs:
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
+ demands: ImageOverride -equals Build.Ubuntu.2204.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')]
- demands: ImageOverride -equals Build.Ubuntu.1804.Amd64
+ demands: ImageOverride -equals Build.Ubuntu.2204.Amd64
${{ if ne(parameters.platform.pool, '') }}:
pool: ${{ parameters.platform.pool }}
@@ -61,6 +67,8 @@ jobs:
clean: all
steps:
+ - ${{ if eq(parameters.enableInternalSources, true) }}:
+ - template: /eng/common/templates/steps/enable-internal-runtimes.yml
- template: /eng/common/templates/steps/source-build.yml
parameters:
platform: ${{ parameters.platform }}
diff --git a/eng/common/templates/job/source-index-stage1.yml b/eng/common/templates/job/source-index-stage1.yml
index b98202aa02d8..8538f44bab28 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-20250425.2
+ sourceIndexProcessBinlogPackageVersion: 1.0.1-20250425.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,21 @@ 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)
+ - 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;issecret=true]$env:servicePrincipalId"
+ echo "##vso[task.setvariable variable=ARM_ID_TOKEN;issecret=true]$env:idToken"
+ echo "##vso[task.setvariable variable=ARM_TENANT_ID;issecret=true]$env:tenantId"
+
+ - script: |
+ 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
- env:
- BLOB_CONTAINER_URL: $(source-dot-net-stage1-blob-container-url)
diff --git a/eng/common/templates/jobs/source-build.yml b/eng/common/templates/jobs/source-build.yml
index a15b07eb51d9..3ec997108107 100644
--- a/eng/common/templates/jobs/source-build.yml
+++ b/eng/common/templates/jobs/source-build.yml
@@ -14,13 +14,19 @@ parameters:
# 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'
+ container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream-9-amd64'
# 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: []
+ # If set to true and running on a non-public project,
+ # Internal nuget and blob storage locations will be enabled.
+ # This is not enabled by default because many repositories do not need internal sources
+ # and do not need to have the required service connections approved in the pipeline.
+ enableInternalSources: false
+
jobs:
- ${{ if ne(parameters.allCompletedJobId, '') }}:
@@ -38,9 +44,11 @@ jobs:
parameters:
jobNamePrefix: ${{ parameters.jobNamePrefix }}
platform: ${{ platform }}
+ enableInternalSources: ${{ parameters.enableInternalSources }}
- ${{ if eq(length(parameters.platforms), 0) }}:
- template: /eng/common/templates/job/source-build.yml
parameters:
jobNamePrefix: ${{ parameters.jobNamePrefix }}
platform: ${{ parameters.defaultManagedPlatform }}
+ enableInternalSources: ${{ parameters.enableInternalSources }}
diff --git a/eng/common/templates/post-build/common-variables.yml b/eng/common/templates/post-build/common-variables.yml
index c24193acfc98..173914f2364a 100644
--- a/eng/common/templates/post-build/common-variables.yml
+++ b/eng/common/templates/post-build/common-variables.yml
@@ -7,7 +7,7 @@ variables:
# Default Maestro++ API Endpoint and API Version
- name: MaestroApiEndPoint
- value: "https://maestro-prod.westus2.cloudapp.azure.com/"
+ value: "https://maestro.dot.net/"
- name: MaestroApiAccessToken
value: $(MaestroAccessToken)
- name: MaestroApiVersion
diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml
index ef720f9d7819..c3b6a3012fee 100644
--- a/eng/common/templates/post-build/post-build.yml
+++ b/eng/common/templates/post-build/post-build.yml
@@ -39,7 +39,7 @@ parameters:
displayName: Enable NuGet validation
type: boolean
default: true
-
+
- name: publishInstallersAndChecksums
displayName: Publish installers and checksums
type: boolean
@@ -131,8 +131,8 @@ stages:
displayName: Validate
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/post-build/nuget-validation.ps1
- arguments: -PackagesPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/
- -ToolDestinationPath $(Agent.BuildDirectory)/Extract/
+ arguments: -PackagesPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/
+ -ToolDestinationPath $(Agent.BuildDirectory)/Extract/
- job:
displayName: Signing Validation
@@ -169,7 +169,7 @@ stages:
# 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@0
+ - task: NuGetAuthenticate@1
displayName: 'Authenticate to AzDO Feeds'
# Signing validation will optionally work with the buildmanifest file which is downloaded from
@@ -221,9 +221,9 @@ stages:
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)
+ arguments: -InputPath $(Build.ArtifactStagingDirectory)/BlobArtifacts/
+ -ExtractPath $(Agent.BuildDirectory)/Extract/
+ -GHRepoName $(Build.Repository.Name)
-GHCommit $(Build.SourceVersion)
-SourcelinkCliVersion $(SourceLinkCLIVersion)
continueOnError: true
@@ -258,7 +258,7 @@ stages:
demands: Cmd
# If it's not devdiv, it's dnceng
${{ else }}:
- name: $(DncEngInternalBuildPool)
+ name: NetCore1ESPool-Publishing-Internal
demands: ImageOverride -equals windows.vs2019.amd64
steps:
- template: setup-maestro-vars.yml
@@ -266,16 +266,18 @@ stages:
BARBuildId: ${{ parameters.BARBuildId }}
PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }}
- - task: NuGetAuthenticate@0
+ - task: NuGetAuthenticate@1
- - task: PowerShell@2
+ - task: AzureCLI@2
displayName: Publish Using Darc
inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1
- arguments: -BuildId $(BARBuildId)
+ azureSubscription: "Darc: Maestro Production"
+ scriptType: ps
+ scriptLocation: scriptPath
+ scriptPath: $(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)'
+ -AzdoToken '$(System.AccessToken)'
-WaitPublishingFinish true
-ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}'
-SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}'
diff --git a/eng/common/templates/post-build/setup-maestro-vars.yml b/eng/common/templates/post-build/setup-maestro-vars.yml
index 0c87f149a4ad..64b9abc68504 100644
--- a/eng/common/templates/post-build/setup-maestro-vars.yml
+++ b/eng/common/templates/post-build/setup-maestro-vars.yml
@@ -11,13 +11,14 @@ steps:
artifactName: ReleaseConfigs
checkDownloadedFiles: true
- - task: PowerShell@2
+ - task: AzureCLI@2
name: setReleaseVars
displayName: Set Release Configs Vars
inputs:
- targetType: inline
- pwsh: true
- script: |
+ azureSubscription: "Darc: Maestro Production"
+ scriptType: pscore
+ scriptLocation: inlineScript
+ inlineScript: |
try {
if (!$Env:PromoteToMaestroChannels -or $Env:PromoteToMaestroChannels.Trim() -eq '') {
$Content = Get-Content $(Build.StagingDirectory)/ReleaseConfigs/ReleaseConfigs.txt
@@ -31,15 +32,16 @@ steps:
$AzureDevOpsBuildId = $Env:Build_BuildId
}
else {
- $buildApiEndpoint = "${Env:MaestroApiEndPoint}/api/builds/${Env:BARBuildId}?api-version=${Env:MaestroApiVersion}"
+ . $(Build.SourcesDirectory)\eng\common\tools.ps1
+ $darc = Get-Darc
+ $buildInfo = & $darc get-build `
+ --id ${{ parameters.BARBuildId }} `
+ --extended `
+ --output-format json `
+ --ci `
+ | convertFrom-Json
- $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
+ $BarId = ${{ parameters.BARBuildId }}
$Channels = $Env:PromoteToMaestroChannels -split ","
$Channels = $Channels -join "]["
$Channels = "[$Channels]"
@@ -65,6 +67,4 @@ steps:
exit 1
}
env:
- MAESTRO_API_TOKEN: $(MaestroApiAccessToken)
- BARBuildId: ${{ parameters.BARBuildId }}
PromoteToMaestroChannels: ${{ parameters.PromoteToChannelIds }}
diff --git a/eng/common/templates/steps/component-governance.yml b/eng/common/templates/steps/component-governance.yml
index 0ecec47b0c91..cbba0596709d 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/enable-internal-runtimes.yml b/eng/common/templates/steps/enable-internal-runtimes.yml
new file mode 100644
index 000000000000..54dc9416c519
--- /dev/null
+++ b/eng/common/templates/steps/enable-internal-runtimes.yml
@@ -0,0 +1,28 @@
+# Obtains internal runtime download credentials and populates the 'dotnetbuilds-internal-container-read-token-base64'
+# variable with the base64-encoded SAS token, by default
+
+parameters:
+- name: federatedServiceConnection
+ type: string
+ default: 'dotnetbuilds-internal-read'
+- name: outputVariableName
+ type: string
+ default: 'dotnetbuilds-internal-container-read-token-base64'
+- name: expiryInHours
+ type: number
+ default: 1
+- name: base64Encode
+ type: boolean
+ default: true
+
+steps:
+- ${{ if ne(variables['System.TeamProject'], 'public') }}:
+ - template: /eng/common/templates/steps/get-delegation-sas.yml
+ parameters:
+ federatedServiceConnection: ${{ parameters.federatedServiceConnection }}
+ outputVariableName: ${{ parameters.outputVariableName }}
+ expiryInHours: ${{ parameters.expiryInHours }}
+ base64Encode: ${{ parameters.base64Encode }}
+ storageAccount: dotnetbuilds
+ container: internal
+ permissions: rl
diff --git a/eng/common/templates/steps/execute-sdl.yml b/eng/common/templates/steps/execute-sdl.yml
index 07426fde05d8..fe0ebf8c904e 100644
--- a/eng/common/templates/steps/execute-sdl.yml
+++ b/eng/common/templates/steps/execute-sdl.yml
@@ -9,8 +9,6 @@ parameters:
steps:
- task: NuGetAuthenticate@1
- inputs:
- nuGetServiceConnections: GuardianConnect
- task: NuGetToolInstaller@1
displayName: 'Install NuGet.exe'
@@ -36,16 +34,19 @@ steps:
displayName: Execute SDL (Overridden)
continueOnError: ${{ parameters.sdlContinueOnError }}
condition: ${{ parameters.condition }}
+ env:
+ GUARDIAN_DEFAULT_PACKAGE_SOURCE_SECRET: $(System.AccessToken)
- ${{ 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 }}
+ env:
+ GUARDIAN_DEFAULT_PACKAGE_SOURCE_SECRET: $(System.AccessToken)
- ${{ if ne(parameters.publishGuardianDirectoryToPipeline, 'false') }}:
# We want to publish the Guardian results and configuration for easy diagnosis. However, the
diff --git a/eng/common/templates/steps/generate-sbom.yml b/eng/common/templates/steps/generate-sbom.yml
index a06373f38fa5..2b21eae42732 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/common/templates/steps/get-delegation-sas.yml b/eng/common/templates/steps/get-delegation-sas.yml
new file mode 100644
index 000000000000..c690cc0a070c
--- /dev/null
+++ b/eng/common/templates/steps/get-delegation-sas.yml
@@ -0,0 +1,52 @@
+parameters:
+- name: federatedServiceConnection
+ type: string
+- name: outputVariableName
+ type: string
+- name: expiryInHours
+ type: number
+ default: 1
+- name: base64Encode
+ type: boolean
+ default: false
+- name: storageAccount
+ type: string
+- name: container
+ type: string
+- name: permissions
+ type: string
+ default: 'rl'
+
+steps:
+- task: AzureCLI@2
+ displayName: 'Generate delegation SAS Token for ${{ parameters.storageAccount }}/${{ parameters.container }}'
+ inputs:
+ azureSubscription: ${{ parameters.federatedServiceConnection }}
+ scriptType: 'pscore'
+ scriptLocation: 'inlineScript'
+ inlineScript: |
+ # Calculate the expiration of the SAS token and convert to UTC
+ $expiry = (Get-Date).AddHours(${{ parameters.expiryInHours }}).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
+
+ # Temporarily work around a helix issue where SAS tokens with / in them will cause incorrect downloads
+ # of correlation payloads. https://github.com/dotnet/dnceng/issues/3484
+ $sas = ""
+ do {
+ $sas = az storage container generate-sas --account-name ${{ parameters.storageAccount }} --name ${{ parameters.container }} --permissions ${{ parameters.permissions }} --expiry $expiry --auth-mode login --as-user -o tsv
+ if ($LASTEXITCODE -ne 0) {
+ Write-Error "Failed to generate SAS token."
+ exit 1
+ }
+ } while($sas.IndexOf('/') -ne -1)
+
+ if ($LASTEXITCODE -ne 0) {
+ Write-Error "Failed to generate SAS token."
+ exit 1
+ }
+
+ if ('${{ parameters.base64Encode }}' -eq 'true') {
+ $sas = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($sas))
+ }
+
+ Write-Host "Setting '${{ parameters.outputVariableName }}' with the access token value"
+ Write-Host "##vso[task.setvariable variable=${{ parameters.outputVariableName }};issecret=true]$sas"
diff --git a/eng/common/templates/steps/get-federated-access-token.yml b/eng/common/templates/steps/get-federated-access-token.yml
new file mode 100644
index 000000000000..55e33bd38f71
--- /dev/null
+++ b/eng/common/templates/steps/get-federated-access-token.yml
@@ -0,0 +1,40 @@
+parameters:
+- name: federatedServiceConnection
+ type: string
+- name: outputVariableName
+ type: string
+- name: stepName
+ type: string
+ default: 'getFederatedAccessToken'
+- name: condition
+ type: string
+ default: ''
+# Resource to get a token for. Common values include:
+# - '499b84ac-1321-427f-aa17-267ca6975798' for Azure DevOps
+# - 'https://storage.azure.com/' for storage
+# Defaults to Azure DevOps
+- name: resource
+ type: string
+ default: '499b84ac-1321-427f-aa17-267ca6975798'
+- name: isStepOutputVariable
+ type: boolean
+ default: false
+
+steps:
+- task: AzureCLI@2
+ displayName: 'Getting federated access token for feeds'
+ name: ${{ parameters.stepName }}
+ ${{ if ne(parameters.condition, '') }}:
+ condition: ${{ parameters.condition }}
+ inputs:
+ azureSubscription: ${{ parameters.federatedServiceConnection }}
+ scriptType: 'pscore'
+ scriptLocation: 'inlineScript'
+ inlineScript: |
+ $accessToken = az account get-access-token --query accessToken --resource ${{ parameters.resource }} --output tsv
+ if ($LASTEXITCODE -ne 0) {
+ Write-Error "Failed to get access token for resource '${{ parameters.resource }}'"
+ exit 1
+ }
+ Write-Host "Setting '${{ parameters.outputVariableName }}' with the access token value"
+ Write-Host "##vso[task.setvariable variable=${{ parameters.outputVariableName }};issecret=true;isOutput=${{ parameters.isStepOutputVariable }}]$accessToken"
\ No newline at end of file
diff --git a/eng/common/templates/steps/send-to-helix.yml b/eng/common/templates/steps/send-to-helix.yml
index 3eb7e2d5f840..22f2501307d4 100644
--- a/eng/common/templates/steps/send-to-helix.yml
+++ b/eng/common/templates/steps/send-to-helix.yml
@@ -8,6 +8,7 @@ parameters:
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
+ HelixProjectArguments: '' # optional -- arguments passed to the build command for helixpublish.proj
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
@@ -24,12 +25,12 @@ parameters:
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
+ 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"'
+ - powershell: 'powershell "$env:BUILD_SOURCESDIRECTORY\eng\common\msbuild.ps1 $env:BUILD_SOURCESDIRECTORY\eng\common\helixpublish.proj ${{ parameters.HelixProjectArguments }} /restore /p:TreatWarningsAsErrors=false /t:Test /bl:$env:BUILD_SOURCESDIRECTORY\artifacts\log\$env:BuildConfig\SendToHelix.binlog"'
displayName: ${{ parameters.DisplayNamePrefix }} (Windows)
env:
BuildConfig: $(_BuildConfig)
@@ -59,7 +60,7 @@ steps:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
condition: and(${{ parameters.condition }}, eq(variables['Agent.Os'], 'Windows_NT'))
continueOnError: ${{ parameters.continueOnError }}
- - script: $BUILD_SOURCESDIRECTORY/eng/common/msbuild.sh $BUILD_SOURCESDIRECTORY/eng/common/helixpublish.proj /restore /p:TreatWarningsAsErrors=false /t:Test /bl:$BUILD_SOURCESDIRECTORY/artifacts/log/$BuildConfig/SendToHelix.binlog
+ - script: $BUILD_SOURCESDIRECTORY/eng/common/msbuild.sh $BUILD_SOURCESDIRECTORY/eng/common/helixpublish.proj ${{ parameters.HelixProjectArguments }} /restore /p:TreatWarningsAsErrors=false /t:Test /bl:$BUILD_SOURCESDIRECTORY/artifacts/log/$BuildConfig/SendToHelix.binlog
displayName: ${{ parameters.DisplayNamePrefix }} (Unix)
env:
BuildConfig: $(_BuildConfig)
diff --git a/eng/common/templates/steps/telemetry-start.yml b/eng/common/templates/steps/telemetry-start.yml
index 32c01ef0b553..6abbcb33a671 100644
--- a/eng/common/templates/steps/telemetry-start.yml
+++ b/eng/common/templates/steps/telemetry-start.yml
@@ -8,7 +8,7 @@ parameters:
steps:
- ${{ if and(eq(parameters.runAsPublic, 'false'), not(eq(variables['System.TeamProject'], 'public'))) }}:
- - task: AzureKeyVault@1
+ - task: AzureKeyVault@2
inputs:
azureSubscription: 'HelixProd_KeyVault'
KeyVaultName: HelixProdKV
diff --git a/eng/common/templates/variables/pool-providers.yml b/eng/common/templates/variables/pool-providers.yml
index 9cc5c550d3b3..d236f9fdbb15 100644
--- a/eng/common/templates/variables/pool-providers.yml
+++ b/eng/common/templates/variables/pool-providers.yml
@@ -1,15 +1,15 @@
-# Select a pool provider based off branch name. Anything with branch name containing 'release' must go into an -Svc pool,
+# 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:
+# 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
+# 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:
+# 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.
#
@@ -54,4 +54,4 @@ variables:
False,
'NetCore1ESPool-Internal'
)
- ]
\ No newline at end of file
+ ]
diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1
index fdd0cbb91f85..82b2798ba307 100644
--- a/eng/common/tools.ps1
+++ b/eng/common/tools.ps1
@@ -42,7 +42,7 @@
[bool]$useInstalledDotNetCli = if (Test-Path variable:useInstalledDotNetCli) { $useInstalledDotNetCli } else { $true }
# Enable repos to use a particular version of the on-line dotnet-install scripts.
-# default URL: https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.ps1
+# default URL: https://builds.dotnet.microsoft.com/dotnet/scripts/v1/dotnet-install.ps1
[string]$dotnetInstallScriptVersion = if (Test-Path variable:dotnetInstallScriptVersion) { $dotnetInstallScriptVersion } else { 'v1' }
# True to use global NuGet cache instead of restoring packages to repository-local directory.
@@ -263,7 +263,7 @@ function GetDotNetInstallScript([string] $dotnetRoot) {
if (!(Test-Path $installScript)) {
Create-Directory $dotnetRoot
$ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit
- $uri = "https://dotnet.microsoft.com/download/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.ps1"
+ $uri = "https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.ps1"
Retry({
Write-Host "GET $uri"
@@ -321,7 +321,7 @@ function InstallDotNet([string] $dotnetRoot,
$variations += @($installParameters)
$dotnetBuilds = $installParameters.Clone()
- $dotnetbuilds.AzureFeed = "https://dotnetbuilds.azureedge.net/public"
+ $dotnetbuilds.AzureFeed = "https://ci.dot.net/public"
$variations += @($dotnetBuilds)
if ($runtimeSourceFeed) {
@@ -384,8 +384,8 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements =
# If the version of msbuild is going to be xcopied,
# use this version. Version matches a package here:
- # https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/RoslynTools.MSBuild/versions/17.8.1-2
- $defaultXCopyMSBuildVersion = '17.8.1-2'
+ # https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/RoslynTools.MSBuild/versions/17.12.0
+ $defaultXCopyMSBuildVersion = '17.12.0'
if (!$vsRequirements) {
if (Get-Member -InputObject $GlobalJson.tools -Name 'vs') {
@@ -601,7 +601,15 @@ function InitializeBuildTool() {
ExitWithExitCode 1
}
$dotnetPath = Join-Path $dotnetRoot (GetExecutableFileName 'dotnet')
- $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = 'net8.0' }
+
+ # Use override if it exists - commonly set by source-build
+ if ($null -eq $env:_OverrideArcadeInitializeBuildToolFramework) {
+ $initializeBuildToolFramework="net8.0"
+ } else {
+ $initializeBuildToolFramework=$env:_OverrideArcadeInitializeBuildToolFramework
+ }
+
+ $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = $initializeBuildToolFramework }
} elseif ($msbuildEngine -eq "vs") {
try {
$msbuildPath = InitializeVisualStudioMSBuild -install:$restore
@@ -884,7 +892,7 @@ function IsWindowsPlatform() {
}
function Get-Darc($version) {
- $darcPath = "$TempDir\darc\$(New-Guid)"
+ $darcPath = "$TempDir\darc\$([guid]::NewGuid())"
if ($version -ne $null) {
& $PSScriptRoot\darc-init.ps1 -toolpath $darcPath -darcVersion $version | Out-Host
} else {
diff --git a/eng/common/tools.sh b/eng/common/tools.sh
index e8d478943341..68db15430230 100755
--- a/eng/common/tools.sh
+++ b/eng/common/tools.sh
@@ -54,7 +54,7 @@ warn_as_error=${warn_as_error:-true}
use_installed_dotnet_cli=${use_installed_dotnet_cli:-true}
# Enable repos to use a particular version of the on-line dotnet-install scripts.
-# default URL: https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.sh
+# default URL: https://builds.dotnet.microsoft.com/dotnet/scripts/v1/dotnet-install.sh
dotnetInstallScriptVersion=${dotnetInstallScriptVersion:-'v1'}
# True to use global NuGet cache instead of restoring packages to repository-local directory.
@@ -234,7 +234,7 @@ function InstallDotNet {
local public_location=("${installParameters[@]}")
variations+=(public_location)
- local dotnetbuilds=("${installParameters[@]}" --azure-feed "https://dotnetbuilds.azureedge.net/public")
+ local dotnetbuilds=("${installParameters[@]}" --azure-feed "https://ci.dot.net/public")
variations+=(dotnetbuilds)
if [[ -n "${6:-}" ]]; then
@@ -297,7 +297,7 @@ function with_retries {
function GetDotNetInstallScript {
local root=$1
local install_script="$root/dotnet-install.sh"
- local install_script_url="https://dotnet.microsoft.com/download/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.sh"
+ local install_script_url="https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.sh"
if [[ ! -a "$install_script" ]]; then
mkdir -p "$root"
@@ -341,7 +341,12 @@ function InitializeBuildTool {
# return values
_InitializeBuildTool="$_InitializeDotNetCli/dotnet"
_InitializeBuildToolCommand="msbuild"
- _InitializeBuildToolFramework="net8.0"
+ # use override if it exists - commonly set by source-build
+ if [[ "${_OverrideArcadeInitializeBuildToolFramework:-x}" == "x" ]]; then
+ _InitializeBuildToolFramework="net8.0"
+ else
+ _InitializeBuildToolFramework="${_OverrideArcadeInitializeBuildToolFramework}"
+ fi
}
# Set RestoreNoCache as a workaround for https://github.com/NuGet/Home/issues/3116
diff --git a/eng/configure-toolset.sh b/eng/configure-toolset.sh
index ea92acd6a37b..029466fc2442 100755
--- a/eng/configure-toolset.sh
+++ b/eng/configure-toolset.sh
@@ -5,3 +5,6 @@
if [ "${DotNetBuildFromSource:-false}" = false ]; then
use_installed_dotnet_cli="false"
fi
+
+# Working around issue https://github.com/dotnet/arcade/issues/2673
+DisableNativeToolsetInstalls=true
\ No newline at end of file
diff --git a/eng/helix/helix.proj b/eng/helix/helix.proj
index 73ed73a32068..9535e87a6042 100644
--- a/eng/helix/helix.proj
+++ b/eng/helix/helix.proj
@@ -21,7 +21,7 @@
-
+
@@ -57,13 +57,13 @@
runtime
-
-
$([System.Environment]::GetEnvironmentVariable('DotNetBuildsInternalReadSasToken'))
-
$([System.Environment]::GetEnvironmentVariable('DotNetBuildsInternalReadSasToken'))
diff --git a/eng/scripts/InstallJdk.ps1 b/eng/scripts/InstallJdk.ps1
index 6440cb1c2812..1ba711b5eaa4 100644
--- a/eng/scripts/InstallJdk.ps1
+++ b/eng/scripts/InstallJdk.ps1
@@ -22,8 +22,7 @@ $installDir = "$repoRoot\.tools\jdk\win-x64\"
$javacExe = "$installDir\bin\javac.exe"
$tempDir = "$repoRoot\obj"
if (-not $JdkVersion) {
- $globalJson = Get-Content "$repoRoot\global.json" | ConvertFrom-Json
- $JdkVersion = $globalJson.tools.jdk
+ $JdkVersion = "11.0.24"
}
if (Test-Path $javacExe) {
@@ -40,12 +39,13 @@ Remove-Item -Force -Recurse $tempDir -ErrorAction Ignore | out-null
mkdir $tempDir -ea Ignore | out-null
mkdir $installDir -ea Ignore | out-null
Write-Host "Starting download of JDK ${JdkVersion}"
-& $PSScriptRoot\Download.ps1 "https://netcorenativeassets.blob.core.windows.net/resource-packages/external/windows/java/jdk-$%7BJdkVersion%7D_windows-x64_bin.zip" "$tempDir/jdk.zip"
+& $PSScriptRoot\Download.ps1 "https://netcorenativeassets.blob.core.windows.net/resource-packages/external/windows/java/microsoft-jdk-$%7BJdkVersion%7D-windows-x64.zip" "$tempDir/jdk.zip"
Write-Host "Done downloading JDK ${JdkVersion}"
Expand-Archive "$tempDir/jdk.zip" -d "$tempDir/jdk/"
Write-Host "Expanded JDK to $tempDir"
Write-Host "Installing JDK to $installDir"
-Move-Item "$tempDir/jdk/jdk-${JdkVersion}/*" $installDir
+# The name of the file directory within the zip is based on the version, but may contain a +N for build number.
+Move-Item "$(Get-ChildItem -Path "$tempDir/jdk" | Select-Object -First 1)/*" $installDir
Write-Host "Done installing JDK to $installDir"
if ($env:TF_BUILD) {
diff --git a/eng/scripts/SetupIdentitySources.ps1 b/eng/scripts/SetupIdentitySources.ps1
new file mode 100644
index 000000000000..58a4e690d7b1
--- /dev/null
+++ b/eng/scripts/SetupIdentitySources.ps1
@@ -0,0 +1,46 @@
+[CmdletBinding()]
+param (
+ [Parameter(Mandatory = $true)][string]$ConfigFile,
+ [Parameter(Mandatory = $true)][string]$IdentityModelPackageSource
+)
+
+$ErrorActionPreference = "Stop"
+Set-StrictMode -Version 2.0
+[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+
+# Add source entry to PackageSources
+function AddPackageSource($sources, $SourceName, $SourceEndPoint) {
+ $packageSource = $sources.SelectSingleNode("add[@key='$SourceName']")
+
+ if ($packageSource -eq $null)
+ {
+ $packageSource = $doc.CreateElement("add")
+ $packageSource.SetAttribute("key", $SourceName)
+ $packageSource.SetAttribute("value", $SourceEndPoint)
+ $sources.AppendChild($packageSource) | Out-Null
+ }
+ else {
+ Write-Host "Package source $SourceName already present."
+ }
+}
+
+if (!(Test-Path $ConfigFile -PathType Leaf)) {
+ Write-PipelineTelemetryError -Category 'Build' -Message "eng/scripts/SetupIdentitySources.ps1 returned a non-zero exit code. Couldn't find the NuGet config file: $ConfigFile"
+ ExitWithExitCode 1
+}
+
+# Load NuGet.config
+$doc = New-Object System.Xml.XmlDocument
+$filename = (Get-Item $ConfigFile).FullName
+$doc.Load($filename)
+
+# Get reference to or create one if none exist already
+$sources = $doc.DocumentElement.SelectSingleNode("packageSources")
+if ($sources -eq $null) {
+ $sources = $doc.CreateElement("packageSources")
+ $doc.DocumentElement.AppendChild($sources) | Out-Null
+}
+
+AddPackageSource -Sources $sources -SourceName "identitymodel-nightlies" -SourceEndPoint $IdentityModelPackageSource
+
+$doc.Save($filename)
\ No newline at end of file
diff --git a/eng/scripts/install-nginx-linux.sh b/eng/scripts/install-nginx-linux.sh
index bbfb79c48203..f075a899d1cf 100755
--- a/eng/scripts/install-nginx-linux.sh
+++ b/eng/scripts/install-nginx-linux.sh
@@ -6,7 +6,7 @@ scriptroot="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
reporoot="$(dirname "$(dirname "$scriptroot")")"
nginxinstall="$reporoot/.tools/nginx"
-curl -sSL http://nginx.org/download/nginx-1.14.2.tar.gz --retry 5 | tar zxfv - -C /tmp && cd /tmp/nginx-1.14.2/
+curl -sSL http://nginx.org/download/nginx-1.26.3.tar.gz --retry 5 | tar zxfv - -C /tmp && cd /tmp/nginx-1.26.3/
./configure --prefix=$nginxinstall --with-http_ssl_module --without-http_rewrite_module
make
make install
diff --git a/eng/targets/Helix.Common.props b/eng/targets/Helix.Common.props
index e586fa5efc16..1ba8ba99dbe3 100644
--- a/eng/targets/Helix.Common.props
+++ b/eng/targets/Helix.Common.props
@@ -1,12 +1,12 @@
- (AlmaLinux.8.Amd64.Open)Ubuntu.2004.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:almalinux-8-helix-amd64
- (Alpine.316.Amd64.Open)Ubuntu.2004.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.16-helix-amd64
- (Debian.11.Amd64.Open)Ubuntu.2004.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-helix-amd64
- (Fedora.34.Amd64.Open)Ubuntu.2004.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-34-helix
- (Mariner)Ubuntu.2004.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-1.0-helix
- (Debian.12.Arm64.Open)ubuntu.2004.armarch.open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-12-helix-arm64v8
+ (AlmaLinux.8.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:almalinux-8-helix-amd64
+ (Alpine.321.Amd64.Open)azurelinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.21-helix-amd64
+ (Debian.12.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-12-helix-amd64
+ (Fedora.41.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-41-helix
+ (Mariner)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-helix-amd64
+ (Debian.12.Arm64.Open)ubuntu.2204.armarch.open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-12-helix-arm64v8
false
@@ -29,7 +29,7 @@
-
+
@@ -42,14 +42,14 @@
-
-
-
+
+
+
-
+
diff --git a/eng/targets/Helix.targets b/eng/targets/Helix.targets
index 35c116026c62..0aab28ef20cc 100644
--- a/eng/targets/Helix.targets
+++ b/eng/targets/Helix.targets
@@ -17,9 +17,9 @@
$(HelixQueueAlmaLinux8);
- $(HelixQueueAlpine316);
- $(HelixQueueDebian11);
- $(HelixQueueFedora34);
+ $(HelixQueueAlpine);
+ $(HelixQueueDebian12);
+ $(HelixQueueFedora40);
$(HelixQueueMariner);
Ubuntu.2004.Amd64.Open;
@@ -141,7 +141,7 @@
<_Temp Include="@(HelixAvailableTargetQueue)" />
-
+
diff --git a/eng/targets/Java.Common.targets b/eng/targets/Java.Common.targets
index c8905b10c4b6..81c643e60c27 100644
--- a/eng/targets/Java.Common.targets
+++ b/eng/targets/Java.Common.targets
@@ -64,8 +64,8 @@
-
-
+
+
diff --git a/eng/targets/Wix.Common.props b/eng/targets/Wix.Common.props
index 730df3c1c8dd..d8fcb93ea39a 100644
--- a/eng/targets/Wix.Common.props
+++ b/eng/targets/Wix.Common.props
@@ -4,7 +4,7 @@
2.0
3.14
- 1.0.0-v3.14.0.5722
+ $(MicrosoftSignedWixVersion)
diff --git a/eng/tools/RepoTasks/RepoTasks.csproj b/eng/tools/RepoTasks/RepoTasks.csproj
index 42c3c13fbc24..001b709fffae 100644
--- a/eng/tools/RepoTasks/RepoTasks.csproj
+++ b/eng/tools/RepoTasks/RepoTasks.csproj
@@ -19,6 +19,9 @@
from the dependency on NuGet.Packaging which would cause a source-built prebuilt. -->
+
+
@@ -31,7 +34,8 @@
-
+
+
diff --git a/global.json b/global.json
index b1b03835278a..57e6e337a5e4 100644
--- a/global.json
+++ b/global.json
@@ -1,9 +1,9 @@
{
"sdk": {
- "version": "8.0.100-rtm.23506.1"
+ "version": "8.0.116"
},
"tools": {
- "dotnet": "8.0.100-rtm.23506.1",
+ "dotnet": "8.0.116",
"runtimes": {
"dotnet/x86": [
"$(MicrosoftNETCoreBrowserDebugHostTransportVersion)"
@@ -12,8 +12,6 @@
"$(MicrosoftNETCoreBrowserDebugHostTransportVersion)"
]
},
- "Git": "2.22.0",
- "jdk": "11.0.3",
"vs": {
"version": "17.2",
"components": [
@@ -26,8 +24,11 @@
"xcopy-msbuild": "17.1.0"
},
"msbuild-sdks": {
- "Yarn.MSBuild": "1.22.10",
- "Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.23516.4",
- "Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.23516.4"
+ "Yarn.MSBuild": "1.22.19",
+ "Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.25263.4",
+ "Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.25263.4"
+ },
+ "native-tools": {
+ "jdk": "latest"
}
}
diff --git a/src/Antiforgery/src/PublicAPI.Shipped.txt b/src/Antiforgery/src/PublicAPI.Shipped.txt
index 575a0a0b8605..fe55066bc165 100644
--- a/src/Antiforgery/src/PublicAPI.Shipped.txt
+++ b/src/Antiforgery/src/PublicAPI.Shipped.txt
@@ -27,7 +27,12 @@ Microsoft.AspNetCore.Antiforgery.IAntiforgery.ValidateRequestAsync(Microsoft.Asp
Microsoft.AspNetCore.Antiforgery.IAntiforgeryAdditionalDataProvider
Microsoft.AspNetCore.Antiforgery.IAntiforgeryAdditionalDataProvider.GetAdditionalData(Microsoft.AspNetCore.Http.HttpContext! context) -> string!
Microsoft.AspNetCore.Antiforgery.IAntiforgeryAdditionalDataProvider.ValidateAdditionalData(Microsoft.AspNetCore.Http.HttpContext! context, string! additionalData) -> bool
+Microsoft.AspNetCore.Antiforgery.RequireAntiforgeryTokenAttribute
+Microsoft.AspNetCore.Antiforgery.RequireAntiforgeryTokenAttribute.RequireAntiforgeryTokenAttribute(bool required = true) -> void
+Microsoft.AspNetCore.Antiforgery.RequireAntiforgeryTokenAttribute.RequiresValidation.get -> bool
+Microsoft.AspNetCore.Builder.AntiforgeryApplicationBuilderExtensions
Microsoft.Extensions.DependencyInjection.AntiforgeryServiceCollectionExtensions
+static Microsoft.AspNetCore.Builder.AntiforgeryApplicationBuilderExtensions.UseAntiforgery(this Microsoft.AspNetCore.Builder.IApplicationBuilder! builder) -> Microsoft.AspNetCore.Builder.IApplicationBuilder!
static Microsoft.Extensions.DependencyInjection.AntiforgeryServiceCollectionExtensions.AddAntiforgery(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
static Microsoft.Extensions.DependencyInjection.AntiforgeryServiceCollectionExtensions.AddAntiforgery(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action! setupAction) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
static readonly Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.DefaultCookiePrefix -> string!
diff --git a/src/Antiforgery/src/PublicAPI.Unshipped.txt b/src/Antiforgery/src/PublicAPI.Unshipped.txt
index 8ad52b909e30..7dc5c58110bf 100644
--- a/src/Antiforgery/src/PublicAPI.Unshipped.txt
+++ b/src/Antiforgery/src/PublicAPI.Unshipped.txt
@@ -1,6 +1 @@
#nullable enable
-Microsoft.AspNetCore.Antiforgery.RequireAntiforgeryTokenAttribute
-Microsoft.AspNetCore.Antiforgery.RequireAntiforgeryTokenAttribute.RequireAntiforgeryTokenAttribute(bool required = true) -> void
-Microsoft.AspNetCore.Antiforgery.RequireAntiforgeryTokenAttribute.RequiresValidation.get -> bool
-Microsoft.AspNetCore.Builder.AntiforgeryApplicationBuilderExtensions
-static Microsoft.AspNetCore.Builder.AntiforgeryApplicationBuilderExtensions.UseAntiforgery(this Microsoft.AspNetCore.Builder.IApplicationBuilder! builder) -> Microsoft.AspNetCore.Builder.IApplicationBuilder!
diff --git a/src/Azure/AzureAppServices.HostingStartup/src/Microsoft.AspNetCore.AzureAppServices.HostingStartup.csproj b/src/Azure/AzureAppServices.HostingStartup/src/Microsoft.AspNetCore.AzureAppServices.HostingStartup.csproj
index dbc464028962..fe1c0f19275e 100644
--- a/src/Azure/AzureAppServices.HostingStartup/src/Microsoft.AspNetCore.AzureAppServices.HostingStartup.csproj
+++ b/src/Azure/AzureAppServices.HostingStartup/src/Microsoft.AspNetCore.AzureAppServices.HostingStartup.csproj
@@ -13,6 +13,7 @@
+
diff --git a/src/Caching/SqlServer/src/Microsoft.Extensions.Caching.SqlServer.csproj b/src/Caching/SqlServer/src/Microsoft.Extensions.Caching.SqlServer.csproj
index 4be0de35b382..4c9ccf3a112e 100644
--- a/src/Caching/SqlServer/src/Microsoft.Extensions.Caching.SqlServer.csproj
+++ b/src/Caching/SqlServer/src/Microsoft.Extensions.Caching.SqlServer.csproj
@@ -19,6 +19,7 @@
+
diff --git a/src/Caching/StackExchangeRedis/src/RedisCache.Log.cs b/src/Caching/StackExchangeRedis/src/RedisCache.Log.cs
index c20e93f52cef..5569613a2eb7 100644
--- a/src/Caching/StackExchangeRedis/src/RedisCache.Log.cs
+++ b/src/Caching/StackExchangeRedis/src/RedisCache.Log.cs
@@ -12,5 +12,8 @@ private static partial class Log
{
[LoggerMessage(1, LogLevel.Warning, "Could not determine the Redis server version. Falling back to use HMSET command instead of HSET.", EventName = "CouldNotDetermineServerVersion")]
public static partial void CouldNotDetermineServerVersion(ILogger logger, Exception exception);
+
+ [LoggerMessage(2, LogLevel.Debug, "Unable to add library name suffix.", EventName = "UnableToAddLibraryNameSuffix")]
+ internal static partial void UnableToAddLibraryNameSuffix(ILogger logger, Exception exception);
}
}
diff --git a/src/Caching/StackExchangeRedis/src/RedisCache.cs b/src/Caching/StackExchangeRedis/src/RedisCache.cs
index 9a896e0e5a7c..b346bbd24b4d 100644
--- a/src/Caching/StackExchangeRedis/src/RedisCache.cs
+++ b/src/Caching/StackExchangeRedis/src/RedisCache.cs
@@ -257,14 +257,7 @@ private IDatabase Connect()
IConnectionMultiplexer connection;
if (_options.ConnectionMultiplexerFactory is null)
{
- if (_options.ConfigurationOptions is not null)
- {
- connection = ConnectionMultiplexer.Connect(_options.ConfigurationOptions);
- }
- else
- {
- connection = ConnectionMultiplexer.Connect(_options.Configuration!);
- }
+ connection = ConnectionMultiplexer.Connect(_options.GetConfiguredOptions());
}
else
{
@@ -308,7 +301,7 @@ private async ValueTask ConnectSlowAsync(CancellationToken token)
IConnectionMultiplexer connection;
if (_options.ConnectionMultiplexerFactory is null)
{
- connection = await ConnectionMultiplexer.ConnectAsync(_options.GetConfiguredOptions("asp.net DC")).ConfigureAwait(false);
+ connection = await ConnectionMultiplexer.ConnectAsync(_options.GetConfiguredOptions()).ConfigureAwait(false);
}
else
{
@@ -332,6 +325,7 @@ private void PrepareConnection(IConnectionMultiplexer connection)
WriteTimeTicks(ref _lastConnectTicks, DateTimeOffset.UtcNow);
ValidateServerFeatures(connection);
TryRegisterProfiler(connection);
+ TryAddSuffix(connection);
}
private void ValidateServerFeatures(IConnectionMultiplexer connection)
@@ -369,6 +363,19 @@ private void TryRegisterProfiler(IConnectionMultiplexer connection)
}
}
+ private void TryAddSuffix(IConnectionMultiplexer connection)
+ {
+ try
+ {
+ connection.AddLibraryNameSuffix("aspnet");
+ connection.AddLibraryNameSuffix("DC");
+ }
+ catch (Exception ex)
+ {
+ Log.UnableToAddLibraryNameSuffix(_logger, ex);
+ }
+ }
+
private byte[]? GetAndRefresh(string key, bool getData)
{
ArgumentNullThrowHelper.ThrowIfNull(key);
diff --git a/src/Caching/StackExchangeRedis/src/RedisCacheOptions.cs b/src/Caching/StackExchangeRedis/src/RedisCacheOptions.cs
index f6386dc7b00a..23aad4f9e642 100644
--- a/src/Caching/StackExchangeRedis/src/RedisCacheOptions.cs
+++ b/src/Caching/StackExchangeRedis/src/RedisCacheOptions.cs
@@ -59,18 +59,13 @@ static bool GetDefaultValue() =>
set => _useForceReconnect = value;
}
- internal ConfigurationOptions GetConfiguredOptions(string libSuffix)
+ internal ConfigurationOptions GetConfiguredOptions()
{
- var options = ConfigurationOptions?.Clone() ?? ConfigurationOptions.Parse(Configuration!);
+ var options = ConfigurationOptions ?? ConfigurationOptions.Parse(Configuration!);
// we don't want an initially unavailable server to prevent DI creating the service itself
options.AbortOnConnectFail = false;
- if (!string.IsNullOrWhiteSpace(libSuffix))
- {
- var provider = DefaultOptionsProvider.GetProvider(options.EndPoints);
- options.LibraryName = $"{provider.LibraryName} {libSuffix}";
- }
return options;
}
}
diff --git a/src/Components/Authorization/src/PublicAPI.Shipped.txt b/src/Components/Authorization/src/PublicAPI.Shipped.txt
index 1c94fc90e9b4..247a98915bb8 100644
--- a/src/Components/Authorization/src/PublicAPI.Shipped.txt
+++ b/src/Components/Authorization/src/PublicAPI.Shipped.txt
@@ -42,7 +42,9 @@ Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.Child
Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.ChildContent.set -> void
Microsoft.AspNetCore.Components.Authorization.IHostEnvironmentAuthenticationStateProvider
Microsoft.AspNetCore.Components.Authorization.IHostEnvironmentAuthenticationStateProvider.SetAuthenticationState(System.Threading.Tasks.Task! authenticationStateTask) -> void
+Microsoft.Extensions.DependencyInjection.CascadingAuthenticationStateServiceCollectionExtensions
override Microsoft.AspNetCore.Components.Authorization.AuthorizeView.GetAuthorizeData() -> Microsoft.AspNetCore.Authorization.IAuthorizeData![]!
override Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder! builder) -> void
override Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.OnParametersSetAsync() -> System.Threading.Tasks.Task!
override Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.OnInitialized() -> void
+static Microsoft.Extensions.DependencyInjection.CascadingAuthenticationStateServiceCollectionExtensions.AddCascadingAuthenticationState(this Microsoft.Extensions.DependencyInjection.IServiceCollection! serviceCollection) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
diff --git a/src/Components/Authorization/src/PublicAPI.Unshipped.txt b/src/Components/Authorization/src/PublicAPI.Unshipped.txt
index d26ce6553158..7dc5c58110bf 100644
--- a/src/Components/Authorization/src/PublicAPI.Unshipped.txt
+++ b/src/Components/Authorization/src/PublicAPI.Unshipped.txt
@@ -1,3 +1 @@
#nullable enable
-Microsoft.Extensions.DependencyInjection.CascadingAuthenticationStateServiceCollectionExtensions
-static Microsoft.Extensions.DependencyInjection.CascadingAuthenticationStateServiceCollectionExtensions.AddCascadingAuthenticationState(this Microsoft.Extensions.DependencyInjection.IServiceCollection! serviceCollection) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
diff --git a/src/Components/Components.slnf b/src/Components/Components.slnf
index 4ea1556f741f..a35d7e8e8686 100644
--- a/src/Components/Components.slnf
+++ b/src/Components/Components.slnf
@@ -52,6 +52,7 @@
"src\\Components\\test\\testassets\\BasicTestApp\\BasicTestApp.csproj",
"src\\Components\\test\\testassets\\Components.TestServer\\Components.TestServer.csproj",
"src\\Components\\test\\testassets\\Components.WasmMinimal\\Components.WasmMinimal.csproj",
+ "src\\Components\\test\\testassets\\Components.WasmRemoteAuthentication\\Components.WasmRemoteAuthentication.csproj",
"src\\Components\\test\\testassets\\ComponentsApp.App\\ComponentsApp.App.csproj",
"src\\Components\\test\\testassets\\ComponentsApp.Server\\ComponentsApp.Server.csproj",
"src\\Components\\test\\testassets\\GlobalizationWasmApp\\GlobalizationWasmApp.csproj",
diff --git a/src/Components/Components/src/CascadingValueSource.cs b/src/Components/Components/src/CascadingValueSource.cs
index dbf9a4662265..3645b17bed39 100644
--- a/src/Components/Components/src/CascadingValueSource.cs
+++ b/src/Components/Components/src/CascadingValueSource.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System.Collections.Concurrent;
+using System.Runtime.CompilerServices;
using Microsoft.AspNetCore.Components.Rendering;
namespace Microsoft.AspNetCore.Components;
@@ -96,7 +97,16 @@ public Task NotifyChangedAsync()
{
tasks.Add(dispatcher.InvokeAsync(() =>
{
- foreach (var subscriber in subscribers)
+ var subscribersBuffer = new ComponentStateBuffer();
+ var subscribersCount = subscribers.Count;
+ var subscribersCopy = subscribersCount <= ComponentStateBuffer.Capacity
+ ? subscribersBuffer[..subscribersCount]
+ : new ComponentState[subscribersCount];
+ subscribers.CopyTo(subscribersCopy);
+
+ // We iterate over a copy of the list because new subscribers might get
+ // added or removed during change notification
+ foreach (var subscriber in subscribersCopy)
{
subscriber.NotifyCascadingValueChanged(ParameterViewLifetime.Unbound);
}
@@ -174,4 +184,15 @@ void ICascadingValueSupplier.Unsubscribe(ComponentState subscriber, in Cascading
}
}
}
+
+ [InlineArray(Capacity)]
+ internal struct ComponentStateBuffer
+ {
+ public const int Capacity = 64;
+#pragma warning disable IDE0051 // Remove unused private members
+#pragma warning disable IDE0044 // Add readonly modifier
+ private ComponentState _values;
+#pragma warning restore IDE0044 // Add readonly modifier
+#pragma warning restore IDE0051 // Remove unused private members
+ }
}
diff --git a/src/Components/Components/src/Microsoft.AspNetCore.Components.csproj b/src/Components/Components/src/Microsoft.AspNetCore.Components.csproj
index 2d13b0ccb7fc..9c4ab4216a93 100644
--- a/src/Components/Components/src/Microsoft.AspNetCore.Components.csproj
+++ b/src/Components/Components/src/Microsoft.AspNetCore.Components.csproj
@@ -19,10 +19,11 @@
+
-
+
diff --git a/src/Components/Components/src/PublicAPI.Shipped.txt b/src/Components/Components/src/PublicAPI.Shipped.txt
index 859bce795398..0aabe63f06c2 100644
--- a/src/Components/Components/src/PublicAPI.Shipped.txt
+++ b/src/Components/Components/src/PublicAPI.Shipped.txt
@@ -5,12 +5,15 @@
~Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrame.Component.get -> Microsoft.AspNetCore.Components.IComponent
~Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrame.ComponentKey.get -> object
~Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrame.ComponentReferenceCaptureAction.get -> System.Action