diff --git a/.vsts-ci.yml b/.vsts-ci.yml index d14d1293e..8f0fa0df6 100644 --- a/.vsts-ci.yml +++ b/.vsts-ci.yml @@ -1,3 +1,5 @@ +# Pipeline: https://dnceng.visualstudio.com/internal/_build?definitionId=286 + trigger: batch: true branches: @@ -23,339 +25,323 @@ variables: - group: DotNet-Installer-SDLValidation-Params - name: _PublishUsingPipelines value: true - - name: _InternalRuntimeDownloadArgs value: '' - - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - group: DotNetBuilds storage account read tokens - name: _InternalRuntimeDownloadArgs value: /p:DotNetRuntimeSourceFeed=https://dotnetbuilds.blob.core.windows.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) /p:dotnetbuilds-internal-container-read-token-base64=$(dotnetbuilds-internal-container-read-token-base64) - - template: /eng/common/templates/variables/pool-providers.yml +# Set the MicroBuild plugin installation directory to the agent temp directory to avoid SDL tool scanning. +- name: MicroBuildOutputFolderOverride + value: $(Agent.TempDirectory) -stages: -- stage: Build - jobs: - # This job is for build retry configuration. - - job: Publish_Build_Configuration - pool: - ${{ if eq(variables['System.TeamProject'], 'public') }}: - name: $(DncEngPublicBuildPool) - demands: ImageOverride -equals windows.vs2022preview.amd64.open - ${{ if eq(variables['System.TeamProject'], 'internal') }}: +resources: + repositories: + - repository: 1esPipelines + type: git + name: 1ESPipelineTemplates/1ESPipelineTemplates + ref: refs/tags/release + +extends: + ${{ if notin(variables['Build.Reason'], 'PullRequest') }}: + template: v1/1ES.Official.PipelineTemplate.yml@1esPipelines + ${{ else }}: + template: v1/1ES.Unofficial.PipelineTemplate.yml@1esPipelines + parameters: + containers: + alpine319WithNode: + image: mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.19-WithNode + cblMariner20Fpm: + image: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-fpm + centosStream8: + image: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8 + debian11: + image: mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-amd64 + fedora36: + image: mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-36 + ubuntu2204: + image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04 + mariner20CrossArm: + image: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-cross-arm-alpine + ubuntu2204DebPkg: + image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-debpkg + sdl: + sourceAnalysisPool: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022preview.amd64 - steps: - - publish: $(Build.SourcesDirectory)\eng\buildConfiguration - artifact: buildConfiguration - displayName: Publish Build Config - - ## PR-only jobs - - - ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}: - - ## Windows - - - template: eng/build.yml - parameters: - agentOs: Windows_NT - jobName: Build_Debug_x64 - buildConfiguration: Debug - buildArchitecture: x64 - additionalBuildParameters: '/p:PublishInternalAsset=true' - runTests: true - - ## Linux - - - template: eng/build.yml - parameters: - agentOs: Linux - jobName: Build_Ubuntu_22_04_Debug_x64 - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04' - buildConfiguration: Debug - buildArchitecture: x64 - linuxPortable: true - runTests: true - - template: eng/build.yml - parameters: - agentOs: Linux - jobName: Build_Fedora_36_Debug_x64 - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-36' - buildConfiguration: Debug - buildArchitecture: x64 - linuxPortable: true - runTests: true - - template: eng/build.yml - parameters: - agentOs: Linux - jobName: Build_CentOS_8_Stream_Debug_x64 - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8' - buildConfiguration: Debug - buildArchitecture: x64 - linuxPortable: false - runTests: true - - template: eng/build.yml - parameters: - agentOs: Linux - jobName: Build_Debian_Stretch_Debug_x64 - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:debian-stretch' - buildConfiguration: Debug - buildArchitecture: x64 - additionalBuildParameters: '/p:BuildSdkDeb=true' - linuxPortable: false - runTests: true - - template: eng/build.yml - parameters: - agentOs: Linux - jobName: Build_Arm64_Debug - buildConfiguration: Debug - buildArchitecture: arm64 - runtimeIdentifier: 'linux-arm64' - linuxPortable: true - # Never run tests on arm64 - runTests: false - - template: eng/build.yml - parameters: - agentOs: Linux - jobName: Build_Linux_musl_Debug_x64 - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.15-WithNode' - buildConfiguration: Debug - buildArchitecture: x64 - runtimeIdentifier: 'linux-musl-x64' - # Pass in HostOSName when running on alpine - additionalBuildParameters: '/p:HostOSName="linux-musl"' - linuxPortable: false - runTests: true - - template: eng/build.yml - parameters: - agentOs: Linux - jobName: Build_LinuxPortable_Release_x64 - buildConfiguration: Release - buildArchitecture: x64 - linuxPortable: true - runTests: true - - # MacOS - - - template: eng/build.yml - parameters: - agentOs: Darwin - jobName: Build_Release_x64 - buildConfiguration: Release - buildArchitecture: x64 - runTests: true - - ## Official/PGO instrumentation Builds - - - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ## Windows - - - template: eng/build.yml - parameters: - agentOs: Windows_NT - jobName: Build_Release_x64 - buildConfiguration: Release - buildArchitecture: x64 - additionalBuildParameters: '/p:PublishInternalAsset=true' - runTests: false - - template: eng/build.yml - parameters: - agentOs: Windows_NT - jobName: Build_Release_x86 - buildConfiguration: Release - buildArchitecture: x86 - runTests: false - - template: eng/build.yml - parameters: - agentOs: Windows_NT - jobName: Build_Release_arm64 - buildConfiguration: Release - buildArchitecture: arm64 - runTests: false - - ## Linux - - - template: eng/build.yml - parameters: - agentOs: Linux - jobName: Build_Arm_Release - buildConfiguration: Release - buildArchitecture: arm - runtimeIdentifier: 'linux-arm' - linuxPortable: true - runTests: false - - template: eng/build.yml - parameters: - agentOs: Linux - jobName: Build_Arm64_Release - buildConfiguration: Release - buildArchitecture: arm64 - runtimeIdentifier: 'linux-arm64' - linuxPortable: true - runTests: false - - template: eng/build.yml - parameters: - agentOs: Linux - jobName: Build_Linux_musl_Release_arm - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-cross' - buildConfiguration: Release - buildArchitecture: arm - runtimeIdentifier: 'linux-musl-arm' - additionalBuildParameters: '/p:OSName="linux-musl"' - linuxPortable: false - runTests: false - - template: eng/build.yml - parameters: - agentOs: Linux - jobName: Build_Linux_musl_Release_arm64 - buildConfiguration: Release - buildArchitecture: arm64 - runtimeIdentifier: 'linux-musl-arm64' - additionalBuildParameters: '/p:OSName="linux-musl"' - linuxPortable: false - runTests: false - - template: eng/build.yml - parameters: - agentOs: Linux - jobName: Build_Linux_musl_Release_x64 - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.15-WithNode' - buildConfiguration: Release - buildArchitecture: x64 - runtimeIdentifier: 'linux-musl-x64' - # Pass in HostOSName when running on alpine - additionalBuildParameters: '/p:HostOSName="linux-musl"' - linuxPortable: false - runTests: false - - template: eng/build.yml - parameters: - agentOs: Linux - jobName: Build_Linux_Portable_Deb_Release_x64 - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-debpkg' - buildConfiguration: Release - buildArchitecture: x64 - # Do not publish zips and tarballs. The linux-x64 binaries are - # already published by Build_LinuxPortable_Release_x64 - additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:BuildSdkDeb=true' - linuxPortable: true - runTests: false - - template: eng/build.yml - parameters: - agentOs: Linux - jobName: Build_Linux_Portable_Rpm_Release_x64 - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-fpm' - buildConfiguration: Release - buildArchitecture: x64 - # Do not publish zips and tarballs. The linux-x64 binaries are - # already published by Build_LinuxPortable_Release_x64 - additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:IsRPMBasedDistro=true' - linuxPortable: true - runTests: false - - template: eng/build.yml - parameters: - agentOs: Linux - jobName: Build_Linux_Portable_Rpm_Release_Arm64 - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-fpm' - buildConfiguration: Release - buildArchitecture: arm64 - runtimeIdentifier: 'linux-arm64' - # Do not publish zips and tarballs. The linux-x64 binaries are - # already published by Build_LinuxPortable_Release_x64 - additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:CLIBUILD_SKIP_TESTS=true /p:IsRPMBasedDistro=true' - linuxPortable: true - runTests: false - - template: eng/build.yml - parameters: - agentOs: Linux - jobName: Build_LinuxPortable_Release_x64 - buildConfiguration: Release - buildArchitecture: x64 - linuxPortable: true - runTests: false - - # MacOS - - - template: eng/build.yml - parameters: - agentOs: Darwin - jobName: Build_Release_x64 - buildConfiguration: Release - buildArchitecture: x64 - runTests: false - - template: eng/build.yml - parameters: - agentOs: Darwin - jobName: Build_Release_arm64 - runtimeIdentifier: 'osx-arm64' - buildConfiguration: Release - buildArchitecture: arm64 - runTests: false - - ## Windows PGO Instrumentation builds - - - template: eng/build.yml - parameters: - agentOs: Windows_NT - pgoInstrument: true - jobName: Build_Release_x64 - buildConfiguration: Release - buildArchitecture: x64 - additionalBuildParameters: '/p:PublishInternalAsset=true' - runTests: false - - template: eng/build.yml - parameters: - agentOs: Windows_NT - pgoInstrument: true - jobName: Build_Release_x86 - buildConfiguration: Release - buildArchitecture: x86 - runTests: false - - template: eng/build.yml - parameters: - agentOs: Windows_NT - pgoInstrument: true - jobName: Build_Release_arm64 - buildConfiguration: Release - buildArchitecture: arm64 - runTests: false - - ## Linux PGO Instrumentation builds - - - template: eng/build.yml - parameters: - agentOs: Linux - pgoInstrument: true - jobName: Build_LinuxPortable_Release_x64 - buildConfiguration: Release - buildArchitecture: x64 - linuxPortable: true - runTests: false - - - template: eng/build.yml - parameters: - agentOs: Linux - pgoInstrument: true - jobName: Build_Release_arm64 - buildConfiguration: Release - buildArchitecture: arm64 - linuxPortable: true - runTests: false - - - template: /eng/common/templates/jobs/source-build.yml - -- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - stage: Publish - dependsOn: - - Build - jobs: - - template: /eng/common/templates/job/publish-build-assets.yml - parameters: - publishUsingPipelines: true - publishAssetsImmediately: true + image: 1es-windows-2022 + os: windows + # Temporary to workaround MicroBuild issues. + credscan: + enabled: false + justificationForDisabling: 'CredScan is failing on the MicroBuild signing plugin. "MicroBuild/Plugins/nuget.config" has changing content and thus cannot be baselined.' + stages: + - stage: Build + jobs: + # Build Retry Configuration + - job: Publish_Build_Configuration pool: + ${{ if eq(variables['System.TeamProject'], 'public') }}: + name: $(DncEngPublicBuildPool) + image: 1es-windows-2022-open + os: windows ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022.amd64 + image: 1es-windows-2022 + os: windows + steps: + - task: 1ES.PublishPipelineArtifact@1 + displayName: Publish Build Config + inputs: + targetPath: $(Build.SourcesDirectory)\eng\buildConfiguration + artifactName: buildConfiguration + + # PR-only jobs + - ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}: + # Windows + - template: eng/build.yml@self + parameters: + agentOs: Windows_NT + jobName: Build_Debug_x64 + buildConfiguration: Debug + buildArchitecture: x64 + additionalBuildParameters: '/p:PublishInternalAsset=true' + runTests: true + + # Linux + - template: eng/build.yml@self + parameters: + agentOs: Linux + jobName: Build_Ubuntu_22_04_Debug_x64 + container: ubuntu2204 + buildConfiguration: Debug + buildArchitecture: x64 + linuxPortable: true + runTests: true + - template: eng/build.yml@self + parameters: + agentOs: Linux + jobName: Build_Fedora_36_Debug_x64 + container: fedora36 + buildConfiguration: Debug + buildArchitecture: x64 + linuxPortable: true + runTests: true + - template: eng/build.yml@self + parameters: + agentOs: Linux + jobName: Build_CentOS_8_Stream_Debug_x64 + container: centosStream8 + buildConfiguration: Debug + buildArchitecture: x64 + linuxPortable: false + runTests: true + - template: eng/build.yml@self + parameters: + agentOs: Linux + jobName: Build_Debian_11_Debug_x64 + container: debian11 + buildConfiguration: Debug + buildArchitecture: x64 + additionalBuildParameters: '/p:BuildSdkDeb=true' + linuxPortable: false + runTests: true + - template: eng/build.yml@self + parameters: + agentOs: Linux + jobName: Build_Arm64_Debug + buildConfiguration: Debug + buildArchitecture: arm64 + runtimeIdentifier: 'linux-arm64' + linuxPortable: true + # Never run tests on arm64 + runTests: false + - template: eng/build.yml@self + parameters: + agentOs: Linux + jobName: Build_Linux_musl_Debug_x64 + container: alpine319WithNode + buildConfiguration: Debug + buildArchitecture: x64 + runtimeIdentifier: 'linux-musl-x64' + # Pass in HostOSName when running on alpine + additionalBuildParameters: '/p:HostOSName="linux-musl"' + linuxPortable: false + runTests: true + - template: eng/build.yml@self + parameters: + agentOs: Linux + jobName: Build_LinuxPortable_Release_x64 + buildConfiguration: Release + buildArchitecture: x64 + linuxPortable: true + runTests: true + + # MacOS + - template: eng/build.yml@self + parameters: + agentOs: Darwin + jobName: Build_Release_x64 + buildConfiguration: Release + buildArchitecture: x64 + runTests: true + + # Official/PGO instrumentation Builds + - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + # Windows + - template: eng/build.yml@self + parameters: + agentOs: Windows_NT + jobName: Build_Release_x64 + buildConfiguration: Release + buildArchitecture: x64 + additionalBuildParameters: '/p:PublishInternalAsset=true' + runTests: false + - template: eng/build.yml@self + parameters: + agentOs: Windows_NT + jobName: Build_Release_x86 + buildConfiguration: Release + buildArchitecture: x86 + runTests: false + - template: eng/build.yml@self + parameters: + agentOs: Windows_NT + jobName: Build_Release_arm64 + buildConfiguration: Release + buildArchitecture: arm64 + runTests: false + + # Linux + - template: eng/build.yml@self + parameters: + agentOs: Linux + jobName: Build_Arm_Release + buildConfiguration: Release + buildArchitecture: arm + runtimeIdentifier: 'linux-arm' + linuxPortable: true + runTests: false + - template: eng/build.yml@self + parameters: + agentOs: Linux + jobName: Build_Arm64_Release + buildConfiguration: Release + buildArchitecture: arm64 + runtimeIdentifier: 'linux-arm64' + linuxPortable: true + runTests: false + - template: eng/build.yml@self + parameters: + agentOs: Linux + jobName: Build_Linux_musl_Release_arm + container: mariner20CrossArm + buildConfiguration: Release + buildArchitecture: arm + runtimeIdentifier: 'linux-musl-arm' + additionalBuildParameters: '/p:OSName="linux-musl"' + linuxPortable: false + runTests: false + - template: eng/build.yml@self + parameters: + agentOs: Linux + jobName: Build_Linux_musl_Release_arm64 + buildConfiguration: Release + buildArchitecture: arm64 + runtimeIdentifier: 'linux-musl-arm64' + additionalBuildParameters: '/p:OSName="linux-musl"' + linuxPortable: false + runTests: false + - template: eng/build.yml@self + parameters: + agentOs: Linux + jobName: Build_Linux_musl_Release_x64 + container: alpine319WithNode + buildConfiguration: Release + buildArchitecture: x64 + runtimeIdentifier: 'linux-musl-x64' + # Pass in HostOSName when running on alpine + additionalBuildParameters: '/p:HostOSName="linux-musl"' + linuxPortable: false + runTests: false + - template: eng/build.yml@self + parameters: + agentOs: Linux + jobName: Build_Linux_Portable_Deb_Release_x64 + container: ubuntu2204DebPkg + buildConfiguration: Release + buildArchitecture: x64 + # Do not publish zips and tarballs. The linux-x64 binaries are + # already published by Build_LinuxPortable_Release_x64 + additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:BuildSdkDeb=true' + linuxPortable: true + runTests: false + - template: eng/build.yml@self + parameters: + agentOs: Linux + jobName: Build_Linux_Portable_Rpm_Release_x64 + container: cblMariner20Fpm + buildConfiguration: Release + buildArchitecture: x64 + # Do not publish zips and tarballs. The linux-x64 binaries are + # already published by Build_LinuxPortable_Release_x64 + additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:IsRPMBasedDistro=true' + linuxPortable: true + runTests: false + - template: eng/build.yml@self + parameters: + agentOs: Linux + jobName: Build_Linux_Portable_Rpm_Release_Arm64 + container: cblMariner20Fpm + buildConfiguration: Release + buildArchitecture: arm64 + runtimeIdentifier: 'linux-arm64' + # Do not publish zips and tarballs. The linux-x64 binaries are + # already published by Build_LinuxPortable_Release_x64 + additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:CLIBUILD_SKIP_TESTS=true /p:IsRPMBasedDistro=true' + linuxPortable: true + runTests: false + - template: eng/build.yml@self + parameters: + agentOs: Linux + jobName: Build_LinuxPortable_Release_x64 + buildConfiguration: Release + buildArchitecture: x64 + linuxPortable: true + runTests: false + + # MacOS + - template: eng/build.yml@self + parameters: + agentOs: Darwin + jobName: Build_Release_x64 + buildConfiguration: Release + buildArchitecture: x64 + runTests: false + - template: eng/build.yml@self + parameters: + agentOs: Darwin + jobName: Build_Release_arm64 + runtimeIdentifier: 'osx-arm64' + buildConfiguration: Release + buildArchitecture: arm64 + runTests: false + + # Source Build + - template: /eng/common/templates-official/jobs/source-build.yml@self + + - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - stage: Publish + dependsOn: + - Build + jobs: + - template: /eng/common/templates-official/job/publish-build-assets.yml@self + parameters: + publishUsingPipelines: true + publishAssetsImmediately: true + pool: + name: $(DncEngInternalBuildPool) + image: 1es-windows-2022 + os: windows diff --git a/.vsts-pr.yml b/.vsts-pr.yml index d14d1293e..ad4c89795 100644 --- a/.vsts-pr.yml +++ b/.vsts-pr.yml @@ -59,7 +59,7 @@ stages: ## Windows - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Windows_NT jobName: Build_Debug_x64 @@ -70,7 +70,7 @@ stages: ## Linux - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux jobName: Build_Ubuntu_22_04_Debug_x64 @@ -79,7 +79,7 @@ stages: buildArchitecture: x64 linuxPortable: true runTests: true - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux jobName: Build_Fedora_36_Debug_x64 @@ -88,7 +88,7 @@ stages: buildArchitecture: x64 linuxPortable: true runTests: true - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux jobName: Build_CentOS_8_Stream_Debug_x64 @@ -97,17 +97,17 @@ stages: buildArchitecture: x64 linuxPortable: false runTests: true - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux - jobName: Build_Debian_Stretch_Debug_x64 - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:debian-stretch' + jobName: Build_Debian_11_Debug_x64 + container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-amd64' buildConfiguration: Debug buildArchitecture: x64 additionalBuildParameters: '/p:BuildSdkDeb=true' linuxPortable: false runTests: true - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux jobName: Build_Arm64_Debug @@ -117,11 +117,11 @@ stages: linuxPortable: true # Never run tests on arm64 runTests: false - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux jobName: Build_Linux_musl_Debug_x64 - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.15-WithNode' + container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.19-WithNode' buildConfiguration: Debug buildArchitecture: x64 runtimeIdentifier: 'linux-musl-x64' @@ -129,7 +129,7 @@ stages: additionalBuildParameters: '/p:HostOSName="linux-musl"' linuxPortable: false runTests: true - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux jobName: Build_LinuxPortable_Release_x64 @@ -140,7 +140,7 @@ stages: # MacOS - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Darwin jobName: Build_Release_x64 @@ -154,7 +154,7 @@ stages: ## Windows - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Windows_NT jobName: Build_Release_x64 @@ -162,14 +162,14 @@ stages: buildArchitecture: x64 additionalBuildParameters: '/p:PublishInternalAsset=true' runTests: false - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Windows_NT jobName: Build_Release_x86 buildConfiguration: Release buildArchitecture: x86 runTests: false - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Windows_NT jobName: Build_Release_arm64 @@ -179,7 +179,7 @@ stages: ## Linux - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux jobName: Build_Arm_Release @@ -188,7 +188,7 @@ stages: runtimeIdentifier: 'linux-arm' linuxPortable: true runTests: false - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux jobName: Build_Arm64_Release @@ -197,18 +197,18 @@ stages: runtimeIdentifier: 'linux-arm64' linuxPortable: true runTests: false - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux jobName: Build_Linux_musl_Release_arm - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-cross' + container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-cross-arm-alpine' buildConfiguration: Release buildArchitecture: arm runtimeIdentifier: 'linux-musl-arm' additionalBuildParameters: '/p:OSName="linux-musl"' linuxPortable: false runTests: false - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux jobName: Build_Linux_musl_Release_arm64 @@ -218,11 +218,11 @@ stages: additionalBuildParameters: '/p:OSName="linux-musl"' linuxPortable: false runTests: false - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux jobName: Build_Linux_musl_Release_x64 - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.15-WithNode' + container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.19-WithNode' buildConfiguration: Release buildArchitecture: x64 runtimeIdentifier: 'linux-musl-x64' @@ -230,7 +230,7 @@ stages: additionalBuildParameters: '/p:HostOSName="linux-musl"' linuxPortable: false runTests: false - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux jobName: Build_Linux_Portable_Deb_Release_x64 @@ -242,7 +242,7 @@ stages: additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:BuildSdkDeb=true' linuxPortable: true runTests: false - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux jobName: Build_Linux_Portable_Rpm_Release_x64 @@ -254,7 +254,7 @@ stages: additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:IsRPMBasedDistro=true' linuxPortable: true runTests: false - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux jobName: Build_Linux_Portable_Rpm_Release_Arm64 @@ -267,7 +267,7 @@ stages: additionalBuildParameters: '/p:PublishBinariesAndBadge=false /p:CLIBUILD_SKIP_TESTS=true /p:IsRPMBasedDistro=true' linuxPortable: true runTests: false - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux jobName: Build_LinuxPortable_Release_x64 @@ -278,14 +278,14 @@ stages: # MacOS - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Darwin jobName: Build_Release_x64 buildConfiguration: Release buildArchitecture: x64 runTests: false - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Darwin jobName: Build_Release_arm64 @@ -296,7 +296,7 @@ stages: ## Windows PGO Instrumentation builds - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Windows_NT pgoInstrument: true @@ -305,7 +305,7 @@ stages: buildArchitecture: x64 additionalBuildParameters: '/p:PublishInternalAsset=true' runTests: false - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Windows_NT pgoInstrument: true @@ -313,7 +313,7 @@ stages: buildConfiguration: Release buildArchitecture: x86 runTests: false - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Windows_NT pgoInstrument: true @@ -324,7 +324,7 @@ stages: ## Linux PGO Instrumentation builds - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux pgoInstrument: true @@ -334,7 +334,7 @@ stages: linuxPortable: true runTests: false - - template: eng/build.yml + - template: eng/build-pr.yml parameters: agentOs: Linux pgoInstrument: true diff --git a/NuGet.config b/NuGet.config index 959b7d1df..c8bd4d7c7 100644 --- a/NuGet.config +++ b/NuGet.config @@ -23,7 +23,6 @@ - diff --git a/eng/Signing.props b/eng/Signing.props index 0d49f78d1..852eea4b0 100644 --- a/eng/Signing.props +++ b/eng/Signing.props @@ -39,12 +39,6 @@ - - - - - - - + https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 593444ad8328a5a933c006c6564469666f45ad2e + dda23bbe00c4a4bfdd3732783f0cce37c11a4f40 - + https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 593444ad8328a5a933c006c6564469666f45ad2e + dda23bbe00c4a4bfdd3732783f0cce37c11a4f40 - + https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 593444ad8328a5a933c006c6564469666f45ad2e + dda23bbe00c4a4bfdd3732783f0cce37c11a4f40 - + https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 593444ad8328a5a933c006c6564469666f45ad2e + dda23bbe00c4a4bfdd3732783f0cce37c11a4f40 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 1381d5ebd2ab1f292848d5b19b80cf71ac332508 + 087e15321bb712ef6fe8b0ba6f8bd12facf92629 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 1381d5ebd2ab1f292848d5b19b80cf71ac332508 + 087e15321bb712ef6fe8b0ba6f8bd12facf92629 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 1381d5ebd2ab1f292848d5b19b80cf71ac332508 + 087e15321bb712ef6fe8b0ba6f8bd12facf92629 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 1381d5ebd2ab1f292848d5b19b80cf71ac332508 + 087e15321bb712ef6fe8b0ba6f8bd12facf92629 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 1381d5ebd2ab1f292848d5b19b80cf71ac332508 + 087e15321bb712ef6fe8b0ba6f8bd12facf92629 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 1381d5ebd2ab1f292848d5b19b80cf71ac332508 + 087e15321bb712ef6fe8b0ba6f8bd12facf92629 @@ -52,55 +52,55 @@ https://github.com/dotnet/core-setup 7d57652f33493fa022125b7f63aad0d70c52d810 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 1381d5ebd2ab1f292848d5b19b80cf71ac332508 + 087e15321bb712ef6fe8b0ba6f8bd12facf92629 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - da7e9894ce22ef8cc02e5acc56e95a6f8cf8f644 + c9e3996173cec136bc2e9f3b4ec45f2a323b1d63 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - da7e9894ce22ef8cc02e5acc56e95a6f8cf8f644 + c9e3996173cec136bc2e9f3b4ec45f2a323b1d63 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - da7e9894ce22ef8cc02e5acc56e95a6f8cf8f644 + c9e3996173cec136bc2e9f3b4ec45f2a323b1d63 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - da7e9894ce22ef8cc02e5acc56e95a6f8cf8f644 + c9e3996173cec136bc2e9f3b4ec45f2a323b1d63 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - da7e9894ce22ef8cc02e5acc56e95a6f8cf8f644 + c9e3996173cec136bc2e9f3b4ec45f2a323b1d63 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - da7e9894ce22ef8cc02e5acc56e95a6f8cf8f644 + c9e3996173cec136bc2e9f3b4ec45f2a323b1d63 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - da7e9894ce22ef8cc02e5acc56e95a6f8cf8f644 + c9e3996173cec136bc2e9f3b4ec45f2a323b1d63 - + https://dev.azure.com/dnceng/internal/_git/dotnet-sdk - 4dc36050406554319d333a791a3e1dd8262cfd1b + ecfb8a05aeaa93057ae0003d406280239b2c4c7b - + https://dev.azure.com/dnceng/internal/_git/dotnet-sdk - 4dc36050406554319d333a791a3e1dd8262cfd1b + ecfb8a05aeaa93057ae0003d406280239b2c4c7b - + https://dev.azure.com/dnceng/internal/_git/dotnet-sdk - 4dc36050406554319d333a791a3e1dd8262cfd1b + ecfb8a05aeaa93057ae0003d406280239b2c4c7b - + https://dev.azure.com/dnceng/internal/_git/dotnet-sdk - 4dc36050406554319d333a791a3e1dd8262cfd1b + ecfb8a05aeaa93057ae0003d406280239b2c4c7b https://github.com/dotnet/test-templates @@ -124,21 +124,21 @@ 1e5f3603af2277910aad946736ee23283e7f3e16 - + https://dev.azure.com/dnceng/internal/_git/dotnet-winforms - c58fa00bd16b92aab1d7fb2b93e71af6a7768139 + 6c37c986b6c8fc0669b38a03a03445a75b8227a6 - + https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - 472140dd926227876848e48f41cfc9acb9275492 + b5af29a8f41f880f38fd015c6bcb7aeb816fcef6 - + https://github.com/dotnet/fsharp - 424e4b7cffb7656efd63f7a905a2498e39011104 + fc5e9eda234e2b69aa479f4f83faddc31fdd4da7 - + https://github.com/dotnet/fsharp - 424e4b7cffb7656efd63f7a905a2498e39011104 + fc5e9eda234e2b69aa479f4f83faddc31fdd4da7 @@ -146,9 +146,9 @@ aa59400b11e1aeee2e8af48928dbd48748a8bef9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 1381d5ebd2ab1f292848d5b19b80cf71ac332508 + 087e15321bb712ef6fe8b0ba6f8bd12facf92629 https://github.com/dotnet/roslyn @@ -159,7 +159,7 @@ https://github.com/dotnet/msbuild b5265ef370a651f8c3458110b804e5cbf869eeb5 - + https://github.com/dotnet/msbuild b5265ef370a651f8c3458110b804e5cbf869eeb5 @@ -173,18 +173,18 @@ https://github.com/Microsoft/ApplicationInsights-dotnet 53b80940842204f78708a538628288ff5d741a1d - + https://github.com/dotnet/emsdk - 2fc2ffd960930318f33fcaa690cbdbc55d72f52d + 71359b18c2d83c01a68bf155244a65962a7e8c8e https://dev.azure.com/dnceng/internal/_git/dotnet-aspire 48e42f59d64d84b404e904996a9ed61f2a17a569 - + https://github.com/dotnet/emsdk - 2fc2ffd960930318f33fcaa690cbdbc55d72f52d + 71359b18c2d83c01a68bf155244a65962a7e8c8e @@ -198,9 +198,9 @@ 5957c5c5f85f17c145e7fab4ece37ad6aafcded9 - + https://github.com/dotnet/source-build-externals - 00fb7841c80b44262646e57bcfbe90a1b7bc3151 + 4f2151df120194f0268944f1b723c14820738fc8 @@ -219,18 +219,18 @@ - + https://github.com/dotnet/arcade - da98edc4c3ea539f109ea320672136ceb32591a7 + e6f70c7dd528f05cd28cec2a179d58c22e91d9ac - + https://github.com/dotnet/arcade - da98edc4c3ea539f109ea320672136ceb32591a7 + e6f70c7dd528f05cd28cec2a179d58c22e91d9ac - + https://github.com/dotnet/arcade - da98edc4c3ea539f109ea320672136ceb32591a7 + e6f70c7dd528f05cd28cec2a179d58c22e91d9ac https://github.com/dotnet/arcade-services diff --git a/eng/Versions.props b/eng/Versions.props index 9477bfda1..7692190fa 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -8,7 +8,7 @@ 8 0 1 - 04 + 07 $(VersionMajor).$(VersionMinor).$(VersionSDKMinor)$(VersionFeature) $(VersionMajor).$(VersionMinor) $(MajorMinorVersion).$(VersionSDKMinor) @@ -27,7 +27,7 @@ 32 17 $([MSBuild]::Add($(VersionFeature), 25)) - $([MSBuild]::Add($(VersionFeature), 14)) + 19 <_NET70ILLinkPackVersion>7.0.100-1.23211.1 @@ -40,7 +40,7 @@ - 8.0.0-beta.24113.2 + 8.0.0-beta.24266.3 @@ -48,22 +48,15 @@ - 8.0.2-servicing.24068.3 + 8.0.5-servicing.24217.4 - 8.0.2-servicing.24068.6 + 8.0.5-servicing.24217.2 - - - 1.0.2-beta4.22406.1 - 1.0.2-beta4.22406.1 - 1.1.0-rc.22558.1 - 1.1.0-rc.23410.2 1.1.0-rc.23410.2 - 1.1.0-rc.23410.2 1.1.0-rc.23410.2 @@ -72,22 +65,22 @@ - 8.0.2 - 8.0.2 - 8.0.2-servicing.24068.4 - 8.0.2-servicing.24068.4 - 8.0.2-servicing.24068.4 - 8.0.2-servicing.24068.4 - 8.0.2-servicing.24068.4 + 8.0.5 + 8.0.5 + 8.0.5-servicing.24224.4 + 8.0.5-servicing.24224.4 + 8.0.5-servicing.24224.4 + 8.0.5-servicing.24224.4 + 8.0.5-servicing.24224.4 0.2.0 - 8.0.102 - 8.0.102-servicing.24069.16 - 8.0.102-servicing.24069.16 + 8.0.105 + 8.0.105-servicing.24224.15 + 8.0.105-servicing.24224.15 $(MicrosoftNETSdkPackageVersion) $(MicrosoftNETSdkPackageVersion) $(MicrosoftNETSdkPackageVersion) @@ -98,24 +91,24 @@ - 8.0.2-servicing.24067.11 + 8.0.5-servicing.24216.15 - 8.0.2-servicing.24067.11 - 8.0.2-servicing.24067.11 - 8.0.2 - 8.0.2 - 8.0.2 - 8.0.2 + 8.0.5-servicing.24216.15 + 8.0.5-servicing.24216.15 + 8.0.5 + 8.0.5 + 8.0.5 + 8.0.5 2.1.0 - 8.0.2-servicing.24068.6 - 8.0.2-servicing.24068.6 - 8.0.2 - 8.0.2 + 8.0.5-servicing.24217.5 + 8.0.5-servicing.24217.5 + 8.0.5 + 8.0.5 @@ -156,26 +149,15 @@ true true $([MSBuild]::Subtract($(VersionFeature60), 1)) - $([MSBuild]::Subtract($(VersionFeature70), 1)) $(VersionFeature60) - $(VersionFeature70) $([MSBuild]::Subtract($(AspNetCoreTemplateFeature60), 1)) - $([MSBuild]::Subtract($(AspNetCoreTemplateFeature70), 1)) - 5.0.403 6.0.302 - 7.0.100 - 5.0.17 6.0.14 - 7.0.3 - 5.0.17-servicing.22215.4 - 5.0.17-servicing.22218.2 6.0.7-servicing.22322.3 6.0.7-servicing.22322.2 - 7.0.0-rtm.22518.7 - 7.0.0-rtm.22518.2 $(MicrosoftNETCoreAppRuntimePackageVersion) @@ -183,7 +165,7 @@ - 3.14.0.8606 + 3.14.1.8722 @@ -193,13 +175,6 @@ $(MicrosoftDotNetCommonItemTemplatesPackageVersion) $(MicrosoftDotNetCommonItemTemplatesPackageVersion) $(MicrosoftAspNetCoreAppRuntimePackageVersion) - - $(MicrosoftWinFormsProjectTemplates70PackageVersion) - $(MicrosoftWPFProjectTemplates70PackageVersion) - $(NUnit3DotNetNewTemplatePackageVersion) - $(MicrosoftDotNetCommonItemTemplates70PackageVersion) - $(MicrosoftDotNetCommonItemTemplates70PackageVersion) - 7.0.$(AspNetCoreTemplateFeature70) $(MicrosoftWinFormsProjectTemplates60PackageVersion) $(MicrosoftWPFProjectTemplates60PackageVersion) @@ -207,33 +182,6 @@ $(MicrosoftDotNetCommonItemTemplates60PackageVersion) $(MicrosoftDotNetCommonItemTemplates60PackageVersion) 6.0.$(AspNetCoreTemplateFeature60) - - $(MicrosoftWinFormsProjectTemplates50PackageVersion) - $(MicrosoftWPFProjectTemplates50PackageVersion) - $(NUnit3DotNetNewTemplatePackageVersion) - $(MicrosoftDotNetCommonItemTemplates50PackageVersion) - $(MicrosoftDotNetCommonItemTemplates50PackageVersion) - 5.0.17 - - 4.8.1-servicing.19605.5 - 3.1.2-servicing.20066.4 - 1.7.2 - 3.1.27 - $(MicrosoftDotNetCommonItemTemplates31PackageVersion) - 3.1.32 - 3.2.1 - - 4.8.0-rc2.19462.10 - 3.0.0 - 1.6.5 - 2.0.0-preview8.19373.1 - $(MicrosoftDotNetCommonItemTemplates30PackageVersion) - 3.0.3 - - 1.5.3 - 1.0.2-beta3 - $(MicrosoftDotNetCommonItemTemplates21PackageVersion) - 2.1.34 @@ -254,7 +202,7 @@ 14.0.8478 17.0.8478 - 8.0.2 + 8.0.5 $(MicrosoftNETWorkloadEmscriptenCurrentManifest80100PackageVersion) 8.0.100$([System.Text.RegularExpressions.Regex]::Match($(EmscriptenWorkloadManifestVersion), `-rtm|-[A-z]*\.*\d*`)) diff --git a/eng/build-pr.yml b/eng/build-pr.yml new file mode 100644 index 000000000..831d96781 --- /dev/null +++ b/eng/build-pr.yml @@ -0,0 +1,261 @@ +parameters: +# Agent OS identifier and used as job name +- name: agentOs + type: string + +# Job name +- name: jobName + type: string + +# Container to run the build in, if any +- name: container + type: string + default: '' + +# Job timeout +- name: timeoutInMinutes + type: number + default: 180 + +# Build configuration (Debug, Release) +- name: buildConfiguration + type: string + values: + - Debug + - Release + +# Build architecture +- name: buildArchitecture + type: string + values: + - arm + - arm64 + - x64 + - x86 + +# Linux portable. If true, passes portable switch to build +- name: linuxPortable + type: boolean + default: false + +# Runtime Identifier +- name: runtimeIdentifier + type: string + default: '' + +# UI lang +- name: dotnetCLIUILanguage + type: string + default: '' + +# Additional parameters +- name: additionalBuildParameters + type: string + default: '' + +# Run tests +- name: runTests + type: boolean + default: true + +# PGO instrumentation jobs +- name: pgoInstrument + type: boolean + default: false + +- name: isBuiltFromVmr + displayName: True when build is running from dotnet/dotnet + type: boolean + default: false + +jobs: +- template: common/templates/job/job.yml + parameters: + # Set up the name of the job. + ${{ if parameters.pgoInstrument }}: + name: PGO_${{ parameters.agentOs }}_${{ parameters.jobName }} + ${{ if not(parameters.pgoInstrument) }}: + name: ${{ parameters.agentOs }}_${{ parameters.jobName }} + + # Set up the pool/machine info to be used based on the Agent OS + ${{ if eq(parameters.agentOs, 'Windows_NT') }}: + enableMicrobuild: true + pool: + ${{ if eq(variables['System.TeamProject'], 'public') }}: + name: $(DncEngPublicBuildPool) + demands: ImageOverride -equals windows.vs2019.amd64.open + ${{ if eq(variables['System.TeamProject'], 'internal') }}: + name: $(DncEngInternalBuildPool) + demands: ImageOverride -equals windows.vs2019.amd64 + ${{ if eq(parameters.agentOs, 'Linux') }}: + pool: + ${{ if eq(variables['System.TeamProject'], 'public') }}: + name: $(DncEngPublicBuildPool) + demands: ImageOverride -equals Build.Ubuntu.1804.Amd64.Open + ${{ if eq(variables['System.TeamProject'], 'internal') }}: + name: $(DncEngInternalBuildPool) + demands: ImageOverride -equals Build.Ubuntu.1804.Amd64 + container: ${{ parameters.container }} + ${{ if eq(parameters.agentOs, 'Darwin') }}: + pool: + vmImage: 'macOS-latest' + + timeoutInMinutes: ${{ parameters.timeoutInMinutes }} + ${{ if parameters.isBuiltFromVmr }}: + enableSbom: false + ${{ else }}: + enablePublishBuildAssets: true + enablePublishUsingPipelines: true + enableTelemetry: true + helixRepo: dotnet/installer + workspace: + clean: all + + variables: + # Test variables + - ${{ if eq(parameters.agentOs, 'Windows_NT') }}: + - _PackArg: '-pack' + - ${{ if parameters.runTests }}: + - _TestArg: '-test' + - ${{ else }}: + - _TestArg: '' + - ${{ if ne(parameters.agentOs, 'Windows_NT') }}: + - _PackArg: '--pack' + - ${{ if parameters.runTests }}: + - _TestArg: '--test' + - ${{ else }}: + - _TestArg: '' + + - ${{ if parameters.pgoInstrument }}: + - _PgoInstrument: '/p:PgoInstrument=true' + - _PackArg: '' + - ${{ else }}: + - _PgoInstrument: '' + + - ${{ if parameters.linuxPortable }}: + - _LinuxPortable: '--linux-portable' + - ${{ else }}: + - _LinuxPortable: '' + + - ${{ if ne(parameters.runtimeIdentifier, '') }}: + - _RuntimeIdentifier: '--runtime-id ${{ parameters.runtimeIdentifier }}' + - ${{ else }}: + - _RuntimeIdentifier: '' + + - _AgentOSName: ${{ parameters.agentOs }} + - _TeamName: Roslyn-Project-System + - _SignType: test + - _BuildArgs: '/p:DotNetSignType=$(_SignType) $(_PgoInstrument)' + + - ${{ if parameters.isBuiltFromVmr }}: + - installerRoot: '$(Build.SourcesDirectory)/src/installer' + - _SignType: test + - _PushToVSFeed: false + - _BuildArgs: /p:OfficialBuildId=$(BUILD.BUILDNUMBER) + /p:TeamName=$(_TeamName) + /p:DotNetPublishUsingPipelines=true + /p:PublishToSymbolServer=false + $(_PgoInstrument) + - ${{ else }}: + - installerRoot: '$(Build.SourcesDirectory)' + - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - group: DotNet-HelixApi-Access + - _PushToVSFeed: true + - _SignType: real + - _BuildArgs: /p:OfficialBuildId=$(BUILD.BUILDNUMBER) + /p:DotNetSignType=$(_SignType) + /p:TeamName=$(_TeamName) + /p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines) + $(_PgoInstrument) + + - template: /eng/common/templates/variables/pool-providers.yml + + steps: + - checkout: self + clean: true + - ${{ if eq(parameters.agentOs, 'Windows_NT') }}: + - ${{ if and(not(parameters.isBuiltFromVmr), ne(variables['System.TeamProject'], 'public')) }}: + - task: PowerShell@2 + displayName: Setup Private Feeds Credentials + inputs: + filePath: $(installerRoot)/eng/common/SetupNugetSources.ps1 + arguments: -ConfigFile $(installerRoot)/NuGet.config -Password $Env:Token + env: + Token: $(dn-bot-dnceng-artifact-feeds-rw) + - script: $(installerRoot)/build.cmd + $(_TestArg) $(_PackArg) + -publish -ci -sign + -Configuration ${{ parameters.buildConfiguration }} + -Architecture ${{ parameters.buildArchitecture }} + $(_BuildArgs) + ${{ parameters.additionalBuildParameters }} + $(_InternalRuntimeDownloadArgs) + displayName: Build + env: + DOTNET_CLI_UI_LANGUAGE: ${{ parameters.dotnetCLIUILanguage }} + + - ${{ if ne(parameters.agentOs, 'Windows_NT') }}: + - ${{ if and(not(parameters.isBuiltFromVmr), ne(variables['System.TeamProject'], 'public')) }}: + - task: Bash@3 + displayName: Setup Private Feeds Credentials + inputs: + filePath: $(installerRoot)/eng/common/SetupNugetSources.sh + arguments: $(installerRoot)/NuGet.config $Token + env: + Token: $(dn-bot-dnceng-artifact-feeds-rw) + - ${{ if eq(parameters.agentOs, 'Linux') }}: + - script: $(installerRoot)/build.sh + $(_TestArg) $(_PackArg) + --publish --ci + --noprettyprint + --configuration ${{ parameters.buildConfiguration }} + --architecture ${{ parameters.buildArchitecture }} + $(_LinuxPortable) + $(_RuntimeIdentifier) + $(_BuildArgs) + ${{ parameters.additionalBuildParameters }} + $(_InternalRuntimeDownloadArgs) + displayName: Build + + - ${{ if or(eq(parameters.agentOs, 'Darwin'), eq(parameters.agentOs, 'FreeBSD')) }}: + - script: $(installerRoot)/build.sh + $(_TestArg) + --pack --publish --ci + --noprettyprint + --configuration ${{ parameters.buildConfiguration }} + --architecture ${{ parameters.buildArchitecture }} + $(_RuntimeIdentifier) + $(_BuildArgs) + ${{ parameters.additionalBuildParameters }} + $(_InternalRuntimeDownloadArgs) + displayName: Build + + - task: PublishTestResults@2 + displayName: Publish Test Results + inputs: + testRunner: XUnit + testResultsFiles: 'artifacts/TestResults/${{ parameters.buildConfiguration }}/*.xml' + testRunTitle: '$(_AgentOSName)_$(Agent.JobName)' + platform: '$(BuildPlatform)' + configuration: '${{ parameters.buildConfiguration }}' + condition: ne(variables['_TestArg'], '') + + - task: CopyFiles@2 + displayName: Gather Logs + inputs: + SourceFolder: '$(installerRoot)/artifacts' + Contents: | + log/${{ parameters.buildConfiguration }}/**/* + TestResults/${{ parameters.buildConfiguration }}/**/* + TargetFolder: '$(Build.ArtifactStagingDirectory)' + continueOnError: true + condition: always() + + - task: PublishBuildArtifacts@1 + displayName: Publish Logs to VSTS + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)' + ArtifactName: '$(_AgentOSName)_$(Agent.JobName)_$(Build.BuildNumber)' + publishLocation: Container + continueOnError: true + condition: always() diff --git a/eng/build.yml b/eng/build.yml index ea389797c..4f947ea8f 100644 --- a/eng/build.yml +++ b/eng/build.yml @@ -1,9 +1,9 @@ parameters: - # Agent OS identifier and used as job name +# Agent OS identifier and used as job name - name: agentOs type: string - # Job name +# Job name - name: jobName type: string @@ -12,7 +12,7 @@ parameters: type: string default: '' - # Job timeout +# Job timeout - name: timeoutInMinutes type: number default: 180 @@ -69,36 +69,42 @@ parameters: default: false jobs: -- template: common/templates/job/job.yml +- template: common/templates-official/job/job.yml parameters: # Set up the name of the job. ${{ if parameters.pgoInstrument }}: name: PGO_${{ parameters.agentOs }}_${{ parameters.jobName }} ${{ if not(parameters.pgoInstrument) }}: name: ${{ parameters.agentOs }}_${{ parameters.jobName }} - - ## Set up the pool/machine info to be used based on the Agent OS + + # Set up the pool/machine info to be used based on the Agent OS ${{ if eq(parameters.agentOs, 'Windows_NT') }}: enableMicrobuild: true pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $(DncEngPublicBuildPool) - demands: ImageOverride -equals windows.vs2019.amd64.open + image: 1es-windows-2019-open + os: windows ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2019.amd64 + image: 1es-windows-2019 + os: windows ${{ if eq(parameters.agentOs, 'Linux') }}: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $(DncEngPublicBuildPool) - demands: ImageOverride -equals Build.Ubuntu.1804.Amd64.Open + image: 1es-ubuntu-2004-open + os: linux ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals Build.Ubuntu.1804.Amd64 + image: 1es-ubuntu-2004 + os: linux container: ${{ parameters.container }} ${{ if eq(parameters.agentOs, 'Darwin') }}: pool: - vmImage: 'macOS-latest' + name: Azure Pipelines + image: macOS-latest + os: macOS timeoutInMinutes: ${{ parameters.timeoutInMinutes }} ${{ if parameters.isBuiltFromVmr }}: @@ -111,8 +117,8 @@ jobs: workspace: clean: all -# Test parameters variables: + # Test variables - ${{ if eq(parameters.agentOs, 'Windows_NT') }}: - _PackArg: '-pack' - ${{ if parameters.runTests }}: @@ -168,7 +174,7 @@ jobs: /p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines) $(_PgoInstrument) - - template: /eng/common/templates/variables/pool-providers.yml + - template: /eng/common/templates-official/variables/pool-providers.yml steps: - checkout: self @@ -245,13 +251,13 @@ jobs: inputs: SourceFolder: '$(installerRoot)/artifacts' Contents: | - log/${{ parameters.buildConfiguration }}/**/* - TestResults/${{ parameters.buildConfiguration }}/**/* + log/${{ parameters.buildConfiguration }}/**/* + TestResults/${{ parameters.buildConfiguration }}/**/* TargetFolder: '$(Build.ArtifactStagingDirectory)' continueOnError: true condition: always() - - task: PublishBuildArtifacts@1 + - task: 1ES.PublishBuildArtifacts@1 displayName: Publish Logs to VSTS inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1 index 6c65e8192..efa2fd72b 100644 --- a/eng/common/SetupNugetSources.ps1 +++ b/eng/common/SetupNugetSources.ps1 @@ -35,7 +35,7 @@ Set-StrictMode -Version 2.0 . $PSScriptRoot\tools.ps1 # Add source entry to PackageSources -function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $Password) { +function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) { $packageSource = $sources.SelectSingleNode("add[@key='$SourceName']") if ($packageSource -eq $null) @@ -48,12 +48,11 @@ function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Usern else { Write-Host "Package source $SourceName already present." } - - AddCredential -Creds $creds -Source $SourceName -Username $Username -Password $Password + AddCredential -Creds $creds -Source $SourceName -Username $Username -pwd $pwd } # Add a credential node for the specified source -function AddCredential($creds, $source, $username, $password) { +function AddCredential($creds, $source, $username, $pwd) { # Looks for credential configuration for the given SourceName. Create it if none is found. $sourceElement = $creds.SelectSingleNode($Source) if ($sourceElement -eq $null) @@ -82,17 +81,18 @@ function AddCredential($creds, $source, $username, $password) { $passwordElement.SetAttribute("key", "ClearTextPassword") $sourceElement.AppendChild($passwordElement) | Out-Null } - $passwordElement.SetAttribute("value", $Password) + + $passwordElement.SetAttribute("value", $pwd) } -function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $Password) { +function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $pwd) { $maestroPrivateSources = $Sources.SelectNodes("add[contains(@key,'darc-int')]") Write-Host "Inserting credentials for $($maestroPrivateSources.Count) Maestro's private feeds." ForEach ($PackageSource in $maestroPrivateSources) { Write-Host "`tInserting credential for Maestro's feed:" $PackageSource.Key - AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -Password $Password + AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -pwd $pwd } } @@ -144,13 +144,13 @@ if ($disabledSources -ne $null) { $userName = "dn-bot" # Insert credential nodes for Maestro's private feeds -InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Username $userName -Password $Password +InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Username $userName -pwd $Password # 3.1 uses a different feed url format so it's handled differently here $dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']") if ($dotnet31Source -ne $null) { - AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username $userName -Password $Password - AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -Password $Password + AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password + AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password } $dotnetVersions = @('5','6','7','8') @@ -159,9 +159,9 @@ foreach ($dotnetVersion in $dotnetVersions) { $feedPrefix = "dotnet" + $dotnetVersion; $dotnetSource = $sources.SelectSingleNode("add[@key='$feedPrefix']") if ($dotnetSource -ne $null) { - AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/v2" -Creds $creds -Username $userName -Password $Password - AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/v2" -Creds $creds -Username $userName -Password $Password + AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password + AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password } } -$doc.Save($filename) +$doc.Save($filename) \ No newline at end of file diff --git a/eng/common/native/init-compiler.sh b/eng/common/native/init-compiler.sh index f5c1ec7ea..2d5660642 100644 --- a/eng/common/native/init-compiler.sh +++ b/eng/common/native/init-compiler.sh @@ -63,7 +63,7 @@ if [ -z "$CLR_CC" ]; then # Set default versions if [ -z "$majorVersion" ]; then # note: gcc (all versions) and clang versions higher than 6 do not have minor version in file name, if it is zero. - if [ "$compiler" = "clang" ]; then versions="17 16 15 14 13 12 11 10 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5" + if [ "$compiler" = "clang" ]; then versions="18 17 16 15 14 13 12 11 10 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5" elif [ "$compiler" = "gcc" ]; then versions="13 12 11 10 9 8 7 6 5 4.9"; fi for version in $versions; do diff --git a/eng/common/templates-official/job/job.yml b/eng/common/templates-official/job/job.yml new file mode 100644 index 000000000..1f035fee7 --- /dev/null +++ b/eng/common/templates-official/job/job.yml @@ -0,0 +1,264 @@ +# Internal resources (telemetry, microbuild) can only be accessed from non-public projects, +# and some (Microbuild) should only be applied to non-PR cases for internal builds. + +parameters: +# Job schema parameters - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#job + cancelTimeoutInMinutes: '' + condition: '' + container: '' + continueOnError: false + dependsOn: '' + displayName: '' + pool: '' + steps: [] + strategy: '' + timeoutInMinutes: '' + variables: [] + workspace: '' + templateContext: '' + +# Job base template specific parameters + # See schema documentation - https://github.com/dotnet/arcade/blob/master/Documentation/AzureDevOps/TemplateSchema.md + artifacts: '' + enableMicrobuild: false + enablePublishBuildArtifacts: false + enablePublishBuildAssets: false + enablePublishTestResults: false + enablePublishUsingPipelines: false + enableBuildRetry: false + disableComponentGovernance: '' + componentGovernanceIgnoreDirectories: '' + mergeTestResults: false + testRunTitle: '' + testResultsFormat: '' + name: '' + preSteps: [] + runAsPublic: false +# Sbom related params + enableSbom: true + PackageVersion: 7.0.0 + BuildDropPath: '$(Build.SourcesDirectory)/artifacts' + +jobs: +- job: ${{ parameters.name }} + + ${{ if ne(parameters.cancelTimeoutInMinutes, '') }}: + cancelTimeoutInMinutes: ${{ parameters.cancelTimeoutInMinutes }} + + ${{ if ne(parameters.condition, '') }}: + condition: ${{ parameters.condition }} + + ${{ if ne(parameters.container, '') }}: + container: ${{ parameters.container }} + + ${{ if ne(parameters.continueOnError, '') }}: + continueOnError: ${{ parameters.continueOnError }} + + ${{ if ne(parameters.dependsOn, '') }}: + dependsOn: ${{ parameters.dependsOn }} + + ${{ if ne(parameters.displayName, '') }}: + displayName: ${{ parameters.displayName }} + + ${{ if ne(parameters.pool, '') }}: + pool: ${{ parameters.pool }} + + ${{ if ne(parameters.strategy, '') }}: + strategy: ${{ parameters.strategy }} + + ${{ if ne(parameters.timeoutInMinutes, '') }}: + timeoutInMinutes: ${{ parameters.timeoutInMinutes }} + + ${{ if ne(parameters.templateContext, '') }}: + templateContext: ${{ parameters.templateContext }} + + variables: + - ${{ if ne(parameters.enableTelemetry, 'false') }}: + - name: DOTNET_CLI_TELEMETRY_PROFILE + value: '$(Build.Repository.Uri)' + - ${{ if eq(parameters.enableRichCodeNavigation, 'true') }}: + - name: EnableRichCodeNavigation + value: 'true' + # Retry signature validation up to three times, waiting 2 seconds between attempts. + # See https://learn.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu3028#retry-untrusted-root-failures + - name: NUGET_EXPERIMENTAL_CHAIN_BUILD_RETRY_POLICY + value: 3,2000 + - ${{ each variable in parameters.variables }}: + # handle name-value variable syntax + # example: + # - name: [key] + # value: [value] + - ${{ if ne(variable.name, '') }}: + - name: ${{ variable.name }} + value: ${{ variable.value }} + + # handle variable groups + - ${{ if ne(variable.group, '') }}: + - group: ${{ variable.group }} + + # handle template variable syntax + # example: + # - template: path/to/template.yml + # parameters: + # [key]: [value] + - ${{ if ne(variable.template, '') }}: + - template: ${{ variable.template }} + ${{ if ne(variable.parameters, '') }}: + parameters: ${{ variable.parameters }} + + # handle key-value variable syntax. + # example: + # - [key]: [value] + - ${{ if and(eq(variable.name, ''), eq(variable.group, ''), eq(variable.template, '')) }}: + - ${{ each pair in variable }}: + - name: ${{ pair.key }} + value: ${{ pair.value }} + + # DotNet-HelixApi-Access provides 'HelixApiAccessToken' for internal builds + - ${{ if and(eq(parameters.enableTelemetry, 'true'), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - group: DotNet-HelixApi-Access + + ${{ if ne(parameters.workspace, '') }}: + workspace: ${{ parameters.workspace }} + + steps: + - ${{ if ne(parameters.preSteps, '') }}: + - ${{ each preStep in parameters.preSteps }}: + - ${{ preStep }} + + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - ${{ if eq(parameters.enableMicrobuild, 'true') }}: + - task: MicroBuildSigningPlugin@4 + displayName: Install MicroBuild plugin + inputs: + signType: $(_SignType) + zipSources: false + feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json + env: + TeamName: $(_TeamName) + MicroBuildOutputFolderOverride: '$(Agent.TempDirectory)' + continueOnError: ${{ parameters.continueOnError }} + condition: and(succeeded(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) + + - ${{ if and(eq(parameters.runAsPublic, 'false'), eq(variables['System.TeamProject'], 'internal')) }}: + - task: NuGetAuthenticate@1 + + - ${{ if and(ne(parameters.artifacts.download, 'false'), ne(parameters.artifacts.download, '')) }}: + - task: DownloadPipelineArtifact@2 + inputs: + buildType: current + artifactName: ${{ coalesce(parameters.artifacts.download.name, 'Artifacts_$(Agent.OS)_$(_BuildConfig)') }} + targetPath: ${{ coalesce(parameters.artifacts.download.path, 'artifacts') }} + itemPattern: ${{ coalesce(parameters.artifacts.download.pattern, '**') }} + + - ${{ each step in parameters.steps }}: + - ${{ step }} + + - ${{ if eq(parameters.enableRichCodeNavigation, true) }}: + - task: RichCodeNavIndexer@0 + displayName: RichCodeNav Upload + inputs: + languages: ${{ coalesce(parameters.richCodeNavigationLanguage, 'csharp') }} + environment: ${{ coalesce(parameters.richCodeNavigationEnvironment, 'production') }} + richNavLogOutputDirectory: $(Build.SourcesDirectory)/artifacts/bin + uploadRichNavArtifacts: ${{ coalesce(parameters.richCodeNavigationUploadArtifacts, false) }} + continueOnError: true + + - template: /eng/common/templates-official/steps/component-governance.yml + parameters: + ${{ if eq(parameters.disableComponentGovernance, '') }}: + ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(parameters.runAsPublic, 'false'), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/dotnet/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/microsoft/'), eq(variables['Build.SourceBranch'], 'refs/heads/main'))) }}: + disableComponentGovernance: false + ${{ else }}: + disableComponentGovernance: true + ${{ else }}: + disableComponentGovernance: ${{ parameters.disableComponentGovernance }} + componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} + + - ${{ if eq(parameters.enableMicrobuild, 'true') }}: + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - task: MicroBuildCleanup@1 + displayName: Execute Microbuild cleanup tasks + condition: and(always(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) + continueOnError: ${{ parameters.continueOnError }} + env: + TeamName: $(_TeamName) + + - ${{ if ne(parameters.artifacts.publish, '') }}: + - ${{ if and(ne(parameters.artifacts.publish.artifacts, 'false'), ne(parameters.artifacts.publish.artifacts, '')) }}: + - task: CopyFiles@2 + displayName: Gather binaries for publish to artifacts + inputs: + SourceFolder: 'artifacts/bin' + Contents: '**' + TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/bin' + - task: CopyFiles@2 + displayName: Gather packages for publish to artifacts + inputs: + SourceFolder: 'artifacts/packages' + Contents: '**' + TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/packages' + - task: 1ES.PublishBuildArtifacts@1 + displayName: Publish pipeline artifacts + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts' + PublishLocation: Container + ArtifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} + continueOnError: true + condition: always() + - ${{ if and(ne(parameters.artifacts.publish.logs, 'false'), ne(parameters.artifacts.publish.logs, '')) }}: + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: 'artifacts/log' + artifactName: ${{ coalesce(parameters.artifacts.publish.logs.name, 'Logs_Build_$(Agent.Os)_$(_BuildConfig)') }} + displayName: 'Publish logs' + continueOnError: true + condition: always() + + - ${{ if ne(parameters.enablePublishBuildArtifacts, 'false') }}: + - task: 1ES.PublishBuildArtifacts@1 + displayName: Publish Logs + inputs: + PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)' + PublishLocation: Container + ArtifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)' ) }} + continueOnError: true + condition: always() + + - ${{ if or(and(eq(parameters.enablePublishTestResults, 'true'), eq(parameters.testResultsFormat, '')), eq(parameters.testResultsFormat, 'xunit')) }}: + - task: PublishTestResults@2 + displayName: Publish XUnit Test Results + inputs: + testResultsFormat: 'xUnit' + testResultsFiles: '*.xml' + searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' + testRunTitle: ${{ coalesce(parameters.testRunTitle, parameters.name, '$(System.JobName)') }}-xunit + mergeTestResults: ${{ parameters.mergeTestResults }} + continueOnError: true + condition: always() + - ${{ if or(and(eq(parameters.enablePublishTestResults, 'true'), eq(parameters.testResultsFormat, '')), eq(parameters.testResultsFormat, 'vstest')) }}: + - task: PublishTestResults@2 + displayName: Publish TRX Test Results + inputs: + testResultsFormat: 'VSTest' + testResultsFiles: '*.trx' + searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' + testRunTitle: ${{ coalesce(parameters.testRunTitle, parameters.name, '$(System.JobName)') }}-trx + mergeTestResults: ${{ parameters.mergeTestResults }} + continueOnError: true + condition: always() + + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(parameters.enableSbom, 'true')) }}: + - template: /eng/common/templates-official/steps/generate-sbom.yml + parameters: + PackageVersion: ${{ parameters.packageVersion}} + BuildDropPath: ${{ parameters.buildDropPath }} + IgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} + + - ${{ if eq(parameters.enableBuildRetry, 'true') }}: + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: '$(Build.SourcesDirectory)\eng\common\BuildConfiguration' + artifactName: 'BuildConfiguration' + displayName: 'Publish build retry configuration' + continueOnError: true \ No newline at end of file diff --git a/eng/common/templates-official/job/onelocbuild.yml b/eng/common/templates-official/job/onelocbuild.yml new file mode 100644 index 000000000..52b4d05d3 --- /dev/null +++ b/eng/common/templates-official/job/onelocbuild.yml @@ -0,0 +1,112 @@ +parameters: + # Optional: dependencies of the job + dependsOn: '' + + # Optional: A defined YAML pool - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#pool + pool: '' + + CeapexPat: $(dn-bot-ceapex-package-r) # PAT for the loc AzDO instance https://dev.azure.com/ceapex + GithubPat: $(BotAccount-dotnet-bot-repo-PAT) + + SourcesDirectory: $(Build.SourcesDirectory) + CreatePr: true + AutoCompletePr: false + ReusePr: true + UseLfLineEndings: true + UseCheckedInLocProjectJson: false + SkipLocProjectJsonGeneration: false + LanguageSet: VS_Main_Languages + LclSource: lclFilesInRepo + LclPackageId: '' + RepoType: gitHub + GitHubOrg: dotnet + MirrorRepo: '' + MirrorBranch: main + condition: '' + JobNameSuffix: '' + +jobs: +- job: OneLocBuild${{ parameters.JobNameSuffix }} + + dependsOn: ${{ parameters.dependsOn }} + + displayName: OneLocBuild${{ parameters.JobNameSuffix }} + + variables: + - group: OneLocBuildVariables # Contains the CeapexPat and GithubPat + - name: _GenerateLocProjectArguments + value: -SourcesDirectory ${{ parameters.SourcesDirectory }} + -LanguageSet "${{ parameters.LanguageSet }}" + -CreateNeutralXlfs + - ${{ if eq(parameters.UseCheckedInLocProjectJson, 'true') }}: + - name: _GenerateLocProjectArguments + value: ${{ variables._GenerateLocProjectArguments }} -UseCheckedInLocProjectJson + - template: /eng/common/templates-official/variables/pool-providers.yml + + ${{ if ne(parameters.pool, '') }}: + pool: ${{ parameters.pool }} + ${{ if eq(parameters.pool, '') }}: + pool: + # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + name: AzurePipelines-EO + image: 1ESPT-Windows2022 + demands: Cmd + os: windows + # If it's not devdiv, it's dnceng + ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: + name: $(DncEngInternalBuildPool) + image: 1es-windows-2022 + os: windows + + steps: + - ${{ if ne(parameters.SkipLocProjectJsonGeneration, 'true') }}: + - task: Powershell@2 + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/generate-locproject.ps1 + arguments: $(_GenerateLocProjectArguments) + displayName: Generate LocProject.json + condition: ${{ parameters.condition }} + + - task: OneLocBuild@2 + displayName: OneLocBuild + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + inputs: + locProj: eng/Localize/LocProject.json + outDir: $(Build.ArtifactStagingDirectory) + lclSource: ${{ parameters.LclSource }} + lclPackageId: ${{ parameters.LclPackageId }} + isCreatePrSelected: ${{ parameters.CreatePr }} + isAutoCompletePrSelected: ${{ parameters.AutoCompletePr }} + ${{ if eq(parameters.CreatePr, true) }}: + isUseLfLineEndingsSelected: ${{ parameters.UseLfLineEndings }} + ${{ if eq(parameters.RepoType, 'gitHub') }}: + isShouldReusePrSelected: ${{ parameters.ReusePr }} + packageSourceAuth: patAuth + patVariable: ${{ parameters.CeapexPat }} + ${{ if eq(parameters.RepoType, 'gitHub') }}: + repoType: ${{ parameters.RepoType }} + gitHubPatVariable: "${{ parameters.GithubPat }}" + ${{ if ne(parameters.MirrorRepo, '') }}: + isMirrorRepoSelected: true + gitHubOrganization: ${{ parameters.GitHubOrg }} + mirrorRepo: ${{ parameters.MirrorRepo }} + mirrorBranch: ${{ parameters.MirrorBranch }} + condition: ${{ parameters.condition }} + + - task: 1ES.PublishBuildArtifacts@1 + displayName: Publish Localization Files + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/loc' + PublishLocation: Container + ArtifactName: Loc + condition: ${{ parameters.condition }} + + - task: 1ES.PublishBuildArtifacts@1 + displayName: Publish LocProject.json + inputs: + PathtoPublish: '$(Build.SourcesDirectory)/eng/Localize/' + PublishLocation: Container + ArtifactName: Loc + condition: ${{ parameters.condition }} \ No newline at end of file diff --git a/eng/common/templates-official/job/publish-build-assets.yml b/eng/common/templates-official/job/publish-build-assets.yml new file mode 100644 index 000000000..589ac80a1 --- /dev/null +++ b/eng/common/templates-official/job/publish-build-assets.yml @@ -0,0 +1,155 @@ +parameters: + configuration: 'Debug' + + # Optional: condition for the job to run + condition: '' + + # Optional: 'true' if future jobs should run even if this job fails + continueOnError: false + + # Optional: dependencies of the job + dependsOn: '' + + # Optional: Include PublishBuildArtifacts task + enablePublishBuildArtifacts: false + + # Optional: A defined YAML pool - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#pool + pool: {} + + # Optional: should run as a public build even in the internal project + # if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects. + runAsPublic: false + + # Optional: whether the build's artifacts will be published using release pipelines or direct feed publishing + publishUsingPipelines: false + + # Optional: whether the build's artifacts will be published using release pipelines or direct feed publishing + publishAssetsImmediately: false + + artifactsPublishingAdditionalParameters: '' + + signingValidationAdditionalParameters: '' + +jobs: +- job: Asset_Registry_Publish + + dependsOn: ${{ parameters.dependsOn }} + timeoutInMinutes: 150 + + ${{ if eq(parameters.publishAssetsImmediately, 'true') }}: + displayName: Publish Assets + ${{ else }}: + displayName: Publish to Build Asset Registry + + variables: + - template: /eng/common/templates-official/variables/pool-providers.yml + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - group: Publish-Build-Assets + - group: AzureDevOps-Artifact-Feeds-Pats + - name: runCodesignValidationInjection + value: false + - ${{ if eq(parameters.publishAssetsImmediately, 'true') }}: + - template: /eng/common/templates-official/post-build/common-variables.yml + + pool: + # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + name: AzurePipelines-EO + image: 1ESPT-Windows2022 + demands: Cmd + os: windows + # If it's not devdiv, it's dnceng + ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: + name: NetCore1ESPool-Publishing-Internal + image: windows.vs2019.amd64 + os: windows + steps: + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - task: DownloadBuildArtifacts@0 + displayName: Download artifact + inputs: + artifactName: AssetManifests + downloadPath: '$(Build.StagingDirectory)/Download' + checkDownloadedFiles: true + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} + + - task: NuGetAuthenticate@1 + + - task: PowerShell@2 + displayName: Publish Build Assets + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishBuildAssets -restore -msbuildEngine dotnet + /p:ManifestsPath='$(Build.StagingDirectory)/Download/AssetManifests' + /p:BuildAssetRegistryToken=$(MaestroAccessToken) + /p:MaestroApiEndpoint=https://maestro-prod.westus2.cloudapp.azure.com + /p:PublishUsingPipelines=${{ parameters.publishUsingPipelines }} + /p:OfficialBuildId=$(Build.BuildNumber) + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} + + - task: powershell@2 + displayName: Create ReleaseConfigs Artifact + inputs: + targetType: inline + script: | + New-Item -Path "$(Build.StagingDirectory)/ReleaseConfigs" -ItemType Directory -Force + $filePath = "$(Build.StagingDirectory)/ReleaseConfigs/ReleaseConfigs.txt" + Add-Content -Path $filePath -Value $(BARBuildId) + Add-Content -Path $filePath -Value "$(DefaultChannels)" + Add-Content -Path $filePath -Value $(IsStableBuild) + + - task: 1ES.PublishBuildArtifacts@1 + displayName: Publish ReleaseConfigs Artifact + inputs: + PathtoPublish: '$(Build.StagingDirectory)/ReleaseConfigs' + PublishLocation: Container + ArtifactName: ReleaseConfigs + + - task: powershell@2 + displayName: Check if SymbolPublishingExclusionsFile.txt exists + inputs: + targetType: inline + script: | + $symbolExclusionfile = "$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt" + if(Test-Path -Path $symbolExclusionfile) + { + Write-Host "SymbolExclusionFile exists" + Write-Host "##vso[task.setvariable variable=SymbolExclusionFile]true" + } + else{ + Write-Host "Symbols Exclusion file does not exists" + Write-Host "##vso[task.setvariable variable=SymbolExclusionFile]false" + } + + - task: 1ES.PublishBuildArtifacts@1 + displayName: Publish SymbolPublishingExclusionsFile Artifact + condition: eq(variables['SymbolExclusionFile'], 'true') + inputs: + PathtoPublish: '$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' + PublishLocation: Container + ArtifactName: ReleaseConfigs + + - ${{ if eq(parameters.publishAssetsImmediately, 'true') }}: + - template: /eng/common/templates-official/post-build/setup-maestro-vars.yml + parameters: + BARBuildId: ${{ parameters.BARBuildId }} + PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} + + - task: PowerShell@2 + displayName: Publish Using Darc + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1 + arguments: -BuildId $(BARBuildId) + -PublishingInfraVersion 3 + -AzdoToken '$(publishing-dnceng-devdiv-code-r-build-re)' + -MaestroToken '$(MaestroApiAccessToken)' + -WaitPublishingFinish true + -ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}' + -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' + + - ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}: + - template: /eng/common/templates-official/steps/publish-logs.yml + parameters: + JobLabel: 'Publish_Artifacts_Logs' diff --git a/eng/common/templates-official/job/source-build.yml b/eng/common/templates-official/job/source-build.yml new file mode 100644 index 000000000..f193dfbe2 --- /dev/null +++ b/eng/common/templates-official/job/source-build.yml @@ -0,0 +1,67 @@ +parameters: + # This template adds arcade-powered source-build to CI. The template produces a server job with a + # default ID 'Source_Build_Complete' to put in a dependency list if necessary. + + # Specifies the prefix for source-build jobs added to pipeline. Use this if disambiguation needed. + jobNamePrefix: 'Source_Build' + + # Defines the platform on which to run the job. By default, a linux-x64 machine, suitable for + # managed-only repositories. This is an object with these properties: + # + # name: '' + # The name of the job. This is included in the job ID. + # targetRID: '' + # The name of the target RID to use, instead of the one auto-detected by Arcade. + # nonPortable: false + # Enables non-portable mode. This means a more specific RID (e.g. fedora.32-x64 rather than + # linux-x64), and compiling against distro-provided packages rather than portable ones. + # skipPublishValidation: false + # Disables publishing validation. By default, a check is performed to ensure no packages are + # published by source-build. + # container: '' + # A container to use. Runs in docker. + # pool: {} + # A pool to use. Runs directly on an agent. + # buildScript: '' + # Specifies the build script to invoke to perform the build in the repo. The default + # './build.sh' should work for typical Arcade repositories, but this is customizable for + # difficult situations. + # jobProperties: {} + # A list of job properties to inject at the top level, for potential extensibility beyond + # container and pool. + platform: {} + +jobs: +- job: ${{ parameters.jobNamePrefix }}_${{ parameters.platform.name }} + displayName: Source-Build (${{ parameters.platform.name }}) + + ${{ each property in parameters.platform.jobProperties }}: + ${{ property.key }}: ${{ property.value }} + + ${{ if ne(parameters.platform.container, '') }}: + container: ${{ parameters.platform.container }} + + ${{ if eq(parameters.platform.pool, '') }}: + # The default VM host AzDO pool. This should be capable of running Docker containers: almost all + # source-build builds run in Docker, including the default managed platform. + # /eng/common/templates-official/variables/pool-providers.yml can't be used here (some customers declare variables already), so duplicate its logic + pool: + ${{ if eq(variables['System.TeamProject'], 'public') }}: + name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore-Svc-Public' ), False, 'NetCore-Public')] + demands: ImageOverride -equals Build.Ubuntu.1804.Amd64.Open + + ${{ if eq(variables['System.TeamProject'], 'internal') }}: + name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore1ESPool-Svc-Internal'), False, 'NetCore1ESPool-Internal')] + image: 1es-mariner-2 + os: linux + + ${{ if ne(parameters.platform.pool, '') }}: + pool: ${{ parameters.platform.pool }} + + workspace: + clean: all + + steps: + - template: /eng/common/templates-official/steps/source-build.yml + parameters: + platform: ${{ parameters.platform }} diff --git a/eng/common/templates-official/job/source-index-stage1.yml b/eng/common/templates-official/job/source-index-stage1.yml new file mode 100644 index 000000000..43ee0c202 --- /dev/null +++ b/eng/common/templates-official/job/source-index-stage1.yml @@ -0,0 +1,85 @@ +parameters: + runAsPublic: false + sourceIndexUploadPackageVersion: 2.0.0-20240502.12 + sourceIndexProcessBinlogPackageVersion: 1.0.1-20240129.2 + sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json + sourceIndexBuildCommand: powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -Command "eng/common/build.ps1 -restore -build -binarylog -ci" + preSteps: [] + binlogPath: artifacts/log/Debug/Build.binlog + condition: '' + dependsOn: '' + pool: '' + +jobs: +- job: SourceIndexStage1 + dependsOn: ${{ parameters.dependsOn }} + condition: ${{ parameters.condition }} + variables: + - name: SourceIndexUploadPackageVersion + value: ${{ parameters.sourceIndexUploadPackageVersion }} + - name: SourceIndexProcessBinlogPackageVersion + value: ${{ parameters.sourceIndexProcessBinlogPackageVersion }} + - name: SourceIndexPackageSource + value: ${{ parameters.sourceIndexPackageSource }} + - name: BinlogPath + value: ${{ parameters.binlogPath }} + - template: /eng/common/templates/variables/pool-providers.yml + + ${{ if ne(parameters.pool, '') }}: + pool: ${{ parameters.pool }} + ${{ if eq(parameters.pool, '') }}: + pool: + ${{ if eq(variables['System.TeamProject'], 'public') }}: + name: $(DncEngPublicBuildPool) + demands: ImageOverride -equals windows.vs2019.amd64.open + ${{ if eq(variables['System.TeamProject'], 'internal') }}: + name: $(DncEngInternalBuildPool) + demands: ImageOverride -equals windows.vs2019.amd64 + + steps: + - ${{ each preStep in parameters.preSteps }}: + - ${{ preStep }} + + - task: UseDotNet@2 + displayName: Use .NET 8 SDK + inputs: + packageType: sdk + version: 8.0.x + installationPath: $(Agent.TempDirectory)/dotnet + workingDirectory: $(Agent.TempDirectory) + + - script: | + $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version $(sourceIndexProcessBinlogPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools + $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version $(sourceIndexUploadPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools + displayName: Download Tools + # Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk. + workingDirectory: $(Agent.TempDirectory) + + - script: ${{ parameters.sourceIndexBuildCommand }} + displayName: Build Repository + + - script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i $(BinlogPath) -r $(Build.SourcesDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output + displayName: Process Binlog into indexable sln + + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - task: AzureCLI@2 + displayName: Get stage 1 auth token + inputs: + azureSubscription: 'SourceDotNet Stage1 Publish' + addSpnToEnvironment: true + scriptType: 'ps' + scriptLocation: 'inlineScript' + inlineScript: | + echo "##vso[task.setvariable variable=ARM_CLIENT_ID]$env:servicePrincipalId" + echo "##vso[task.setvariable variable=ARM_ID_TOKEN]$env:idToken" + echo "##vso[task.setvariable variable=ARM_TENANT_ID]$env:tenantId" + + - script: | + echo "Client ID: $(ARM_CLIENT_ID)" + echo "ID Token: $(ARM_ID_TOKEN)" + echo "Tenant ID: $(ARM_TENANT_ID)" + az login --service-principal -u $(ARM_CLIENT_ID) --tenant $(ARM_TENANT_ID) --allow-no-subscriptions --federated-token $(ARM_ID_TOKEN) + displayName: "Login to Azure" + + - script: $(Agent.TempDirectory)/.source-index/tools/UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) -s netsourceindexstage1 -b stage1 + displayName: Upload stage1 artifacts to source index \ No newline at end of file diff --git a/eng/common/templates-official/jobs/codeql-build.yml b/eng/common/templates-official/jobs/codeql-build.yml new file mode 100644 index 000000000..b68d3c2f3 --- /dev/null +++ b/eng/common/templates-official/jobs/codeql-build.yml @@ -0,0 +1,31 @@ +parameters: + # See schema documentation in /Documentation/AzureDevOps/TemplateSchema.md + continueOnError: false + # Required: A collection of jobs to run - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#job + jobs: [] + # Optional: if specified, restore and use this version of Guardian instead of the default. + overrideGuardianVersion: '' + +jobs: +- template: /eng/common/templates-official/jobs/jobs.yml + parameters: + enableMicrobuild: false + enablePublishBuildArtifacts: false + enablePublishTestResults: false + enablePublishBuildAssets: false + enablePublishUsingPipelines: false + enableTelemetry: true + + variables: + - group: Publish-Build-Assets + # The Guardian version specified in 'eng/common/sdl/packages.config'. This value must be kept in + # sync with the packages.config file. + - name: DefaultGuardianVersion + value: 0.109.0 + - name: GuardianPackagesConfigFile + value: $(Build.SourcesDirectory)\eng\common\sdl\packages.config + - name: GuardianVersion + value: ${{ coalesce(parameters.overrideGuardianVersion, '$(DefaultGuardianVersion)') }} + + jobs: ${{ parameters.jobs }} + diff --git a/eng/common/templates-official/jobs/jobs.yml b/eng/common/templates-official/jobs/jobs.yml new file mode 100644 index 000000000..857a0f8ba --- /dev/null +++ b/eng/common/templates-official/jobs/jobs.yml @@ -0,0 +1,97 @@ +parameters: + # See schema documentation in /Documentation/AzureDevOps/TemplateSchema.md + continueOnError: false + + # Optional: Include PublishBuildArtifacts task + enablePublishBuildArtifacts: false + + # Optional: Enable publishing using release pipelines + enablePublishUsingPipelines: false + + # Optional: Enable running the source-build jobs to build repo from source + enableSourceBuild: false + + # Optional: Parameters for source-build template. + # See /eng/common/templates-official/jobs/source-build.yml for options + sourceBuildParameters: [] + + graphFileGeneration: + # Optional: Enable generating the graph files at the end of the build + enabled: false + # Optional: Include toolset dependencies in the generated graph files + includeToolset: false + + # Required: A collection of jobs to run - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#job + jobs: [] + + # Optional: Override automatically derived dependsOn value for "publish build assets" job + publishBuildAssetsDependsOn: '' + + # Optional: Publish the assets as soon as the publish to BAR stage is complete, rather doing so in a separate stage. + publishAssetsImmediately: false + + # Optional: If using publishAssetsImmediately and additional parameters are needed, can be used to send along additional parameters (normally sent to post-build.yml) + artifactsPublishingAdditionalParameters: '' + signingValidationAdditionalParameters: '' + + # Optional: should run as a public build even in the internal project + # if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects. + runAsPublic: false + + enableSourceIndex: false + sourceIndexParams: {} + +# Internal resources (telemetry, microbuild) can only be accessed from non-public projects, +# and some (Microbuild) should only be applied to non-PR cases for internal builds. + +jobs: +- ${{ each job in parameters.jobs }}: + - template: ../job/job.yml + parameters: + # pass along parameters + ${{ each parameter in parameters }}: + ${{ if ne(parameter.key, 'jobs') }}: + ${{ parameter.key }}: ${{ parameter.value }} + + # pass along job properties + ${{ each property in job }}: + ${{ if ne(property.key, 'job') }}: + ${{ property.key }}: ${{ property.value }} + + name: ${{ job.job }} + +- ${{ if eq(parameters.enableSourceBuild, true) }}: + - template: /eng/common/templates-official/jobs/source-build.yml + parameters: + allCompletedJobId: Source_Build_Complete + ${{ each parameter in parameters.sourceBuildParameters }}: + ${{ parameter.key }}: ${{ parameter.value }} + +- ${{ if eq(parameters.enableSourceIndex, 'true') }}: + - template: ../job/source-index-stage1.yml + parameters: + runAsPublic: ${{ parameters.runAsPublic }} + ${{ each parameter in parameters.sourceIndexParams }}: + ${{ parameter.key }}: ${{ parameter.value }} + +- ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - ${{ if or(eq(parameters.enablePublishBuildAssets, true), eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, '')) }}: + - template: ../job/publish-build-assets.yml + parameters: + continueOnError: ${{ parameters.continueOnError }} + dependsOn: + - ${{ if ne(parameters.publishBuildAssetsDependsOn, '') }}: + - ${{ each job in parameters.publishBuildAssetsDependsOn }}: + - ${{ job.job }} + - ${{ if eq(parameters.publishBuildAssetsDependsOn, '') }}: + - ${{ each job in parameters.jobs }}: + - ${{ job.job }} + - ${{ if eq(parameters.enableSourceBuild, true) }}: + - Source_Build_Complete + + runAsPublic: ${{ parameters.runAsPublic }} + publishUsingPipelines: ${{ parameters.enablePublishUsingPipelines }} + publishAssetsImmediately: ${{ parameters.publishAssetsImmediately }} + enablePublishBuildArtifacts: ${{ parameters.enablePublishBuildArtifacts }} + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + signingValidationAdditionalParameters: ${{ parameters.signingValidationAdditionalParameters }} diff --git a/eng/common/templates-official/jobs/source-build.yml b/eng/common/templates-official/jobs/source-build.yml new file mode 100644 index 000000000..08e5db9bb --- /dev/null +++ b/eng/common/templates-official/jobs/source-build.yml @@ -0,0 +1,46 @@ +parameters: + # This template adds arcade-powered source-build to CI. A job is created for each platform, as + # well as an optional server job that completes when all platform jobs complete. + + # The name of the "join" job for all source-build platforms. If set to empty string, the job is + # not included. Existing repo pipelines can use this job depend on all source-build jobs + # completing without maintaining a separate list of every single job ID: just depend on this one + # server job. By default, not included. Recommended name if used: 'Source_Build_Complete'. + allCompletedJobId: '' + + # See /eng/common/templates-official/job/source-build.yml + jobNamePrefix: 'Source_Build' + + # This is the default platform provided by Arcade, intended for use by a managed-only repo. + defaultManagedPlatform: + name: 'Managed' + container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8' + + # Defines the platforms on which to run build jobs. One job is created for each platform, and the + # object in this array is sent to the job template as 'platform'. If no platforms are specified, + # one job runs on 'defaultManagedPlatform'. + platforms: [] + +jobs: + +- ${{ if ne(parameters.allCompletedJobId, '') }}: + - job: ${{ parameters.allCompletedJobId }} + displayName: Source-Build Complete + pool: server + dependsOn: + - ${{ each platform in parameters.platforms }}: + - ${{ parameters.jobNamePrefix }}_${{ platform.name }} + - ${{ if eq(length(parameters.platforms), 0) }}: + - ${{ parameters.jobNamePrefix }}_${{ parameters.defaultManagedPlatform.name }} + +- ${{ each platform in parameters.platforms }}: + - template: /eng/common/templates-official/job/source-build.yml + parameters: + jobNamePrefix: ${{ parameters.jobNamePrefix }} + platform: ${{ platform }} + +- ${{ if eq(length(parameters.platforms), 0) }}: + - template: /eng/common/templates-official/job/source-build.yml + parameters: + jobNamePrefix: ${{ parameters.jobNamePrefix }} + platform: ${{ parameters.defaultManagedPlatform }} diff --git a/eng/common/templates-official/post-build/common-variables.yml b/eng/common/templates-official/post-build/common-variables.yml new file mode 100644 index 000000000..c24193acf --- /dev/null +++ b/eng/common/templates-official/post-build/common-variables.yml @@ -0,0 +1,22 @@ +variables: + - group: Publish-Build-Assets + + # Whether the build is internal or not + - name: IsInternalBuild + value: ${{ and(ne(variables['System.TeamProject'], 'public'), contains(variables['Build.SourceBranch'], 'internal')) }} + + # Default Maestro++ API Endpoint and API Version + - name: MaestroApiEndPoint + value: "https://maestro-prod.westus2.cloudapp.azure.com" + - name: MaestroApiAccessToken + value: $(MaestroAccessToken) + - name: MaestroApiVersion + value: "2020-02-20" + + - name: SourceLinkCLIVersion + value: 3.0.0 + - name: SymbolToolVersion + value: 1.0.1 + + - name: runCodesignValidationInjection + value: false diff --git a/eng/common/templates-official/post-build/post-build.yml b/eng/common/templates-official/post-build/post-build.yml new file mode 100644 index 000000000..da1f40958 --- /dev/null +++ b/eng/common/templates-official/post-build/post-build.yml @@ -0,0 +1,285 @@ +parameters: + # Which publishing infra should be used. THIS SHOULD MATCH THE VERSION ON THE BUILD MANIFEST. + # Publishing V1 is no longer supported + # Publishing V2 is no longer supported + # Publishing V3 is the default + - name: publishingInfraVersion + displayName: Which version of publishing should be used to promote the build definition? + type: number + default: 3 + values: + - 3 + + - name: BARBuildId + displayName: BAR Build Id + type: number + default: 0 + + - name: PromoteToChannelIds + displayName: Channel to promote BARBuildId to + type: string + default: '' + + - name: enableSourceLinkValidation + displayName: Enable SourceLink validation + type: boolean + default: false + + - name: enableSigningValidation + displayName: Enable signing validation + type: boolean + default: true + + - name: enableSymbolValidation + displayName: Enable symbol validation + type: boolean + default: false + + - name: enableNugetValidation + displayName: Enable NuGet validation + type: boolean + default: true + + - name: publishInstallersAndChecksums + displayName: Publish installers and checksums + type: boolean + default: true + + - name: SDLValidationParameters + type: object + default: + enable: false + publishGdn: false + continueOnError: false + params: '' + artifactNames: '' + downloadArtifacts: true + + # These parameters let the user customize the call to sdk-task.ps1 for publishing + # symbols & general artifacts as well as for signing validation + - name: symbolPublishingAdditionalParameters + displayName: Symbol publishing additional parameters + type: string + default: '' + + - name: artifactsPublishingAdditionalParameters + displayName: Artifact publishing additional parameters + type: string + default: '' + + - name: signingValidationAdditionalParameters + displayName: Signing validation additional parameters + type: string + default: '' + + # Which stages should finish execution before post-build stages start + - name: validateDependsOn + type: object + default: + - build + + - name: publishDependsOn + type: object + default: + - Validate + + # Optional: Call asset publishing rather than running in a separate stage + - name: publishAssetsImmediately + type: boolean + default: false + +stages: +- ${{ if or(eq( parameters.enableNugetValidation, 'true'), eq(parameters.enableSigningValidation, 'true'), eq(parameters.enableSourceLinkValidation, 'true'), eq(parameters.SDLValidationParameters.enable, 'true')) }}: + - stage: Validate + dependsOn: ${{ parameters.validateDependsOn }} + displayName: Validate Build Assets + variables: + - template: common-variables.yml + - template: /eng/common/templates-official/variables/pool-providers.yml + jobs: + - job: + displayName: NuGet Validation + condition: and(succeededOrFailed(), eq( ${{ parameters.enableNugetValidation }}, 'true')) + pool: + # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + name: AzurePipelines-EO + image: 1ESPT-Windows2022 + demands: Cmd + os: windows + # If it's not devdiv, it's dnceng + ${{ else }}: + name: $(DncEngInternalBuildPool) + image: 1es-windows-2022 + os: windows + + steps: + - template: setup-maestro-vars.yml + parameters: + BARBuildId: ${{ parameters.BARBuildId }} + PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} + + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: specific + buildVersionToDownload: specific + project: $(AzDOProjectName) + pipeline: $(AzDOPipelineId) + buildId: $(AzDOBuildId) + artifactName: PackageArtifacts + checkDownloadedFiles: true + + - task: PowerShell@2 + displayName: Validate + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/nuget-validation.ps1 + arguments: -PackagesPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ + -ToolDestinationPath $(Agent.BuildDirectory)/Extract/ + + - job: + displayName: Signing Validation + condition: and( eq( ${{ parameters.enableSigningValidation }}, 'true'), ne( variables['PostBuildSign'], 'true')) + pool: + # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + name: AzurePipelines-EO + image: 1ESPT-Windows2022 + demands: Cmd + os: windows + # If it's not devdiv, it's dnceng + ${{ else }}: + name: $(DncEngInternalBuildPool) + image: 1es-windows-2022 + os: windows + steps: + - template: setup-maestro-vars.yml + parameters: + BARBuildId: ${{ parameters.BARBuildId }} + PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} + + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: specific + buildVersionToDownload: specific + project: $(AzDOProjectName) + pipeline: $(AzDOPipelineId) + buildId: $(AzDOBuildId) + artifactName: PackageArtifacts + checkDownloadedFiles: true + itemPattern: | + ** + !**/Microsoft.SourceBuild.Intermediate.*.nupkg + + # This is necessary whenever we want to publish/restore to an AzDO private feed + # Since sdk-task.ps1 tries to restore packages we need to do this authentication here + # otherwise it'll complain about accessing a private feed. + - task: NuGetAuthenticate@1 + displayName: 'Authenticate to AzDO Feeds' + + # Signing validation will optionally work with the buildmanifest file which is downloaded from + # Azure DevOps above. + - task: PowerShell@2 + displayName: Validate + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task SigningValidation -restore -msbuildEngine vs + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts' + /p:SignCheckExclusionsFile='$(Build.SourcesDirectory)/eng/SignCheckExclusionsFile.txt' + ${{ parameters.signingValidationAdditionalParameters }} + + - template: ../steps/publish-logs.yml + parameters: + StageLabel: 'Validation' + JobLabel: 'Signing' + BinlogToolVersion: $(BinlogToolVersion) + + - job: + displayName: SourceLink Validation + condition: eq( ${{ parameters.enableSourceLinkValidation }}, 'true') + pool: + # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + name: AzurePipelines-EO + image: 1ESPT-Windows2022 + demands: Cmd + os: windows + # If it's not devdiv, it's dnceng + ${{ else }}: + name: $(DncEngInternalBuildPool) + image: 1es-windows-2022 + os: windows + steps: + - template: setup-maestro-vars.yml + parameters: + BARBuildId: ${{ parameters.BARBuildId }} + PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} + + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + buildType: specific + buildVersionToDownload: specific + project: $(AzDOProjectName) + pipeline: $(AzDOPipelineId) + buildId: $(AzDOBuildId) + artifactName: BlobArtifacts + checkDownloadedFiles: true + + - task: PowerShell@2 + displayName: Validate + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/sourcelink-validation.ps1 + arguments: -InputPath $(Build.ArtifactStagingDirectory)/BlobArtifacts/ + -ExtractPath $(Agent.BuildDirectory)/Extract/ + -GHRepoName $(Build.Repository.Name) + -GHCommit $(Build.SourceVersion) + -SourcelinkCliVersion $(SourceLinkCLIVersion) + continueOnError: true + +- ${{ if ne(parameters.publishAssetsImmediately, 'true') }}: + - stage: publish_using_darc + ${{ if or(eq(parameters.enableNugetValidation, 'true'), eq(parameters.enableSigningValidation, 'true'), eq(parameters.enableSourceLinkValidation, 'true'), eq(parameters.SDLValidationParameters.enable, 'true')) }}: + dependsOn: ${{ parameters.publishDependsOn }} + ${{ else }}: + dependsOn: ${{ parameters.validateDependsOn }} + displayName: Publish using Darc + variables: + - template: common-variables.yml + - template: /eng/common/templates-official/variables/pool-providers.yml + jobs: + - job: + displayName: Publish Using Darc + timeoutInMinutes: 120 + pool: + # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + name: AzurePipelines-EO + image: 1ESPT-Windows2022 + demands: Cmd + os: windows + # If it's not devdiv, it's dnceng + ${{ else }}: + name: NetCore1ESPool-Publishing-Internal + image: windows.vs2019.amd64 + os: windows + steps: + - template: setup-maestro-vars.yml + parameters: + BARBuildId: ${{ parameters.BARBuildId }} + PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} + + - task: NuGetAuthenticate@1 + + - task: PowerShell@2 + displayName: Publish Using Darc + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1 + arguments: -BuildId $(BARBuildId) + -PublishingInfraVersion ${{ parameters.publishingInfraVersion }} + -AzdoToken '$(publishing-dnceng-devdiv-code-r-build-re)' + -MaestroToken '$(MaestroApiAccessToken)' + -WaitPublishingFinish true + -ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}' + -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' diff --git a/eng/common/templates-official/post-build/setup-maestro-vars.yml b/eng/common/templates-official/post-build/setup-maestro-vars.yml new file mode 100644 index 000000000..0c87f149a --- /dev/null +++ b/eng/common/templates-official/post-build/setup-maestro-vars.yml @@ -0,0 +1,70 @@ +parameters: + BARBuildId: '' + PromoteToChannelIds: '' + +steps: + - ${{ if eq(coalesce(parameters.PromoteToChannelIds, 0), 0) }}: + - task: DownloadBuildArtifacts@0 + displayName: Download Release Configs + inputs: + buildType: current + artifactName: ReleaseConfigs + checkDownloadedFiles: true + + - task: PowerShell@2 + name: setReleaseVars + displayName: Set Release Configs Vars + inputs: + targetType: inline + pwsh: true + script: | + try { + if (!$Env:PromoteToMaestroChannels -or $Env:PromoteToMaestroChannels.Trim() -eq '') { + $Content = Get-Content $(Build.StagingDirectory)/ReleaseConfigs/ReleaseConfigs.txt + + $BarId = $Content | Select -Index 0 + $Channels = $Content | Select -Index 1 + $IsStableBuild = $Content | Select -Index 2 + + $AzureDevOpsProject = $Env:System_TeamProject + $AzureDevOpsBuildDefinitionId = $Env:System_DefinitionId + $AzureDevOpsBuildId = $Env:Build_BuildId + } + else { + $buildApiEndpoint = "${Env:MaestroApiEndPoint}/api/builds/${Env:BARBuildId}?api-version=${Env:MaestroApiVersion}" + + $apiHeaders = New-Object 'System.Collections.Generic.Dictionary[[String],[String]]' + $apiHeaders.Add('Accept', 'application/json') + $apiHeaders.Add('Authorization',"Bearer ${Env:MAESTRO_API_TOKEN}") + + $buildInfo = try { Invoke-WebRequest -Method Get -Uri $buildApiEndpoint -Headers $apiHeaders | ConvertFrom-Json } catch { Write-Host "Error: $_" } + + $BarId = $Env:BARBuildId + $Channels = $Env:PromoteToMaestroChannels -split "," + $Channels = $Channels -join "][" + $Channels = "[$Channels]" + + $IsStableBuild = $buildInfo.stable + $AzureDevOpsProject = $buildInfo.azureDevOpsProject + $AzureDevOpsBuildDefinitionId = $buildInfo.azureDevOpsBuildDefinitionId + $AzureDevOpsBuildId = $buildInfo.azureDevOpsBuildId + } + + Write-Host "##vso[task.setvariable variable=BARBuildId]$BarId" + Write-Host "##vso[task.setvariable variable=TargetChannels]$Channels" + Write-Host "##vso[task.setvariable variable=IsStableBuild]$IsStableBuild" + + Write-Host "##vso[task.setvariable variable=AzDOProjectName]$AzureDevOpsProject" + Write-Host "##vso[task.setvariable variable=AzDOPipelineId]$AzureDevOpsBuildDefinitionId" + Write-Host "##vso[task.setvariable variable=AzDOBuildId]$AzureDevOpsBuildId" + } + catch { + Write-Host $_ + Write-Host $_.Exception + Write-Host $_.ScriptStackTrace + exit 1 + } + env: + MAESTRO_API_TOKEN: $(MaestroApiAccessToken) + BARBuildId: ${{ parameters.BARBuildId }} + PromoteToMaestroChannels: ${{ parameters.PromoteToChannelIds }} diff --git a/eng/common/templates-official/post-build/trigger-subscription.yml b/eng/common/templates-official/post-build/trigger-subscription.yml new file mode 100644 index 000000000..da669030d --- /dev/null +++ b/eng/common/templates-official/post-build/trigger-subscription.yml @@ -0,0 +1,13 @@ +parameters: + ChannelId: 0 + +steps: +- task: PowerShell@2 + displayName: Triggering subscriptions + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/trigger-subscriptions.ps1 + arguments: -SourceRepo $(Build.Repository.Uri) + -ChannelId ${{ parameters.ChannelId }} + -MaestroApiAccessToken $(MaestroAccessToken) + -MaestroApiEndPoint $(MaestroApiEndPoint) + -MaestroApiVersion $(MaestroApiVersion) diff --git a/eng/common/templates-official/steps/add-build-to-channel.yml b/eng/common/templates-official/steps/add-build-to-channel.yml new file mode 100644 index 000000000..f67a210d6 --- /dev/null +++ b/eng/common/templates-official/steps/add-build-to-channel.yml @@ -0,0 +1,13 @@ +parameters: + ChannelId: 0 + +steps: +- task: PowerShell@2 + displayName: Add Build to Channel + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/add-build-to-channel.ps1 + arguments: -BuildId $(BARBuildId) + -ChannelId ${{ parameters.ChannelId }} + -MaestroApiAccessToken $(MaestroApiAccessToken) + -MaestroApiEndPoint $(MaestroApiEndPoint) + -MaestroApiVersion $(MaestroApiVersion) diff --git a/eng/common/templates-official/steps/build-reason.yml b/eng/common/templates-official/steps/build-reason.yml new file mode 100644 index 000000000..eba58109b --- /dev/null +++ b/eng/common/templates-official/steps/build-reason.yml @@ -0,0 +1,12 @@ +# build-reason.yml +# Description: runs steps if build.reason condition is valid. conditions is a string of valid build reasons +# to include steps (',' separated). +parameters: + conditions: '' + steps: [] + +steps: + - ${{ if and( not(startsWith(parameters.conditions, 'not')), contains(parameters.conditions, variables['build.reason'])) }}: + - ${{ parameters.steps }} + - ${{ if and( startsWith(parameters.conditions, 'not'), not(contains(parameters.conditions, variables['build.reason']))) }}: + - ${{ parameters.steps }} diff --git a/eng/common/templates-official/steps/component-governance.yml b/eng/common/templates-official/steps/component-governance.yml new file mode 100644 index 000000000..cbba05967 --- /dev/null +++ b/eng/common/templates-official/steps/component-governance.yml @@ -0,0 +1,13 @@ +parameters: + disableComponentGovernance: false + componentGovernanceIgnoreDirectories: '' + +steps: +- ${{ if eq(parameters.disableComponentGovernance, 'true') }}: + - script: echo "##vso[task.setvariable variable=skipComponentGovernanceDetection]true" + displayName: Set skipComponentGovernanceDetection variable +- ${{ if ne(parameters.disableComponentGovernance, 'true') }}: + - task: ComponentGovernanceComponentDetection@0 + continueOnError: true + inputs: + ignoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} \ No newline at end of file diff --git a/eng/common/templates-official/steps/execute-codeql.yml b/eng/common/templates-official/steps/execute-codeql.yml new file mode 100644 index 000000000..9b4a5ffa3 --- /dev/null +++ b/eng/common/templates-official/steps/execute-codeql.yml @@ -0,0 +1,32 @@ +parameters: + # Language that should be analyzed. Defaults to csharp + language: csharp + # Build Commands + buildCommands: '' + overrideParameters: '' # Optional: to override values for parameters. + additionalParameters: '' # Optional: parameters that need user specific values eg: '-SourceToolsList @("abc","def") -ArtifactToolsList @("ghi","jkl")' + # Optional: if specified, restore and use this version of Guardian instead of the default. + overrideGuardianVersion: '' + # Optional: if true, publish the '.gdn' folder as a pipeline artifact. This can help with in-depth + # diagnosis of problems with specific tool configurations. + publishGuardianDirectoryToPipeline: false + # The script to run to execute all SDL tools. Use this if you want to use a script to define SDL + # parameters rather than relying on YAML. It may be better to use a local script, because you can + # reproduce results locally without piecing together a command based on the YAML. + executeAllSdlToolsScript: 'eng/common/sdl/execute-all-sdl-tools.ps1' + # There is some sort of bug (has been reported) in Azure DevOps where if this parameter is named + # 'continueOnError', the parameter value is not correctly picked up. + # This can also be remedied by the caller (post-build.yml) if it does not use a nested parameter + # optional: determines whether to continue the build if the step errors; + sdlContinueOnError: false + +steps: +- template: /eng/common/templates-official/steps/execute-sdl.yml + parameters: + overrideGuardianVersion: ${{ parameters.overrideGuardianVersion }} + executeAllSdlToolsScript: ${{ parameters.executeAllSdlToolsScript }} + overrideParameters: ${{ parameters.overrideParameters }} + additionalParameters: '${{ parameters.additionalParameters }} + -CodeQLAdditionalRunConfigParams @("BuildCommands < ${{ parameters.buildCommands }}", "Language < ${{ parameters.language }}")' + publishGuardianDirectoryToPipeline: ${{ parameters.publishGuardianDirectoryToPipeline }} + sdlContinueOnError: ${{ parameters.sdlContinueOnError }} \ No newline at end of file diff --git a/eng/common/templates-official/steps/execute-sdl.yml b/eng/common/templates-official/steps/execute-sdl.yml new file mode 100644 index 000000000..07426fde0 --- /dev/null +++ b/eng/common/templates-official/steps/execute-sdl.yml @@ -0,0 +1,88 @@ +parameters: + overrideGuardianVersion: '' + executeAllSdlToolsScript: '' + overrideParameters: '' + additionalParameters: '' + publishGuardianDirectoryToPipeline: false + sdlContinueOnError: false + condition: '' + +steps: +- task: NuGetAuthenticate@1 + inputs: + nuGetServiceConnections: GuardianConnect + +- task: NuGetToolInstaller@1 + displayName: 'Install NuGet.exe' + +- ${{ if ne(parameters.overrideGuardianVersion, '') }}: + - pwsh: | + Set-Location -Path $(Build.SourcesDirectory)\eng\common\sdl + . .\sdl.ps1 + $guardianCliLocation = Install-Gdn -Path $(Build.SourcesDirectory)\.artifacts -Version ${{ parameters.overrideGuardianVersion }} + Write-Host "##vso[task.setvariable variable=GuardianCliLocation]$guardianCliLocation" + displayName: Install Guardian (Overridden) + +- ${{ if eq(parameters.overrideGuardianVersion, '') }}: + - pwsh: | + Set-Location -Path $(Build.SourcesDirectory)\eng\common\sdl + . .\sdl.ps1 + $guardianCliLocation = Install-Gdn -Path $(Build.SourcesDirectory)\.artifacts + Write-Host "##vso[task.setvariable variable=GuardianCliLocation]$guardianCliLocation" + displayName: Install Guardian + +- ${{ if ne(parameters.overrideParameters, '') }}: + - powershell: ${{ parameters.executeAllSdlToolsScript }} ${{ parameters.overrideParameters }} + displayName: Execute SDL (Overridden) + continueOnError: ${{ parameters.sdlContinueOnError }} + condition: ${{ parameters.condition }} + +- ${{ if eq(parameters.overrideParameters, '') }}: + - powershell: ${{ parameters.executeAllSdlToolsScript }} + -GuardianCliLocation $(GuardianCliLocation) + -NugetPackageDirectory $(Build.SourcesDirectory)\.packages + -AzureDevOpsAccessToken $(dn-bot-dotnet-build-rw-code-rw) + ${{ parameters.additionalParameters }} + displayName: Execute SDL + continueOnError: ${{ parameters.sdlContinueOnError }} + condition: ${{ parameters.condition }} + +- ${{ if ne(parameters.publishGuardianDirectoryToPipeline, 'false') }}: + # We want to publish the Guardian results and configuration for easy diagnosis. However, the + # '.gdn' dir is a mix of configuration, results, extracted dependencies, and Guardian default + # tooling files. Some of these files are large and aren't useful during an investigation, so + # exclude them by simply deleting them before publishing. (As of writing, there is no documented + # way to selectively exclude a dir from the pipeline artifact publish task.) + - task: DeleteFiles@1 + displayName: Delete Guardian dependencies to avoid uploading + inputs: + SourceFolder: $(Agent.BuildDirectory)/.gdn + Contents: | + c + i + condition: succeededOrFailed() + + - publish: $(Agent.BuildDirectory)/.gdn + artifact: GuardianConfiguration + displayName: Publish GuardianConfiguration + condition: succeededOrFailed() + + # Publish the SARIF files in a container named CodeAnalysisLogs to enable integration + # with the "SARIF SAST Scans Tab" Azure DevOps extension + - task: CopyFiles@2 + displayName: Copy SARIF files + inputs: + flattenFolders: true + sourceFolder: $(Agent.BuildDirectory)/.gdn/rc/ + contents: '**/*.sarif' + targetFolder: $(Build.SourcesDirectory)/CodeAnalysisLogs + condition: succeededOrFailed() + + # Use PublishBuildArtifacts because the SARIF extension only checks this case + # see microsoft/sarif-azuredevops-extension#4 + - task: PublishBuildArtifacts@1 + displayName: Publish SARIF files to CodeAnalysisLogs container + inputs: + pathToPublish: $(Build.SourcesDirectory)/CodeAnalysisLogs + artifactName: CodeAnalysisLogs + condition: succeededOrFailed() \ No newline at end of file diff --git a/eng/common/templates-official/steps/generate-sbom.yml b/eng/common/templates-official/steps/generate-sbom.yml new file mode 100644 index 000000000..1bf43bf80 --- /dev/null +++ b/eng/common/templates-official/steps/generate-sbom.yml @@ -0,0 +1,48 @@ +# BuildDropPath - The root folder of the drop directory for which the manifest file will be generated. +# PackageName - The name of the package this SBOM represents. +# PackageVersion - The version of the package this SBOM represents. +# ManifestDirPath - The path of the directory where the generated manifest files will be placed +# IgnoreDirectories - Directories to ignore for SBOM generation. This will be passed through to the CG component detector. + +parameters: + PackageVersion: 8.0.0 + BuildDropPath: '$(Build.SourcesDirectory)/artifacts' + PackageName: '.NET' + ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom + IgnoreDirectories: '' + sbomContinueOnError: true + +steps: +- task: PowerShell@2 + displayName: Prep for SBOM generation in (Non-linux) + condition: or(eq(variables['Agent.Os'], 'Windows_NT'), eq(variables['Agent.Os'], 'Darwin')) + inputs: + filePath: ./eng/common/generate-sbom-prep.ps1 + arguments: ${{parameters.manifestDirPath}} + +# Chmodding is a workaround for https://github.com/dotnet/arcade/issues/8461 +- script: | + chmod +x ./eng/common/generate-sbom-prep.sh + ./eng/common/generate-sbom-prep.sh ${{parameters.manifestDirPath}} + displayName: Prep for SBOM generation in (Linux) + condition: eq(variables['Agent.Os'], 'Linux') + continueOnError: ${{ parameters.sbomContinueOnError }} + +- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'Generate SBOM manifest' + continueOnError: ${{ parameters.sbomContinueOnError }} + inputs: + PackageName: ${{ parameters.packageName }} + BuildDropPath: ${{ parameters.buildDropPath }} + PackageVersion: ${{ parameters.packageVersion }} + ManifestDirPath: ${{ parameters.manifestDirPath }} + ${{ if ne(parameters.IgnoreDirectories, '') }}: + AdditionalComponentDetectorArgs: '--IgnoreDirectories ${{ parameters.IgnoreDirectories }}' + +- task: 1ES.PublishPipelineArtifact@1 + displayName: Publish SBOM manifest + continueOnError: ${{parameters.sbomContinueOnError}} + inputs: + targetPath: '${{parameters.manifestDirPath}}' + artifactName: $(ARTIFACT_NAME) + diff --git a/eng/common/templates-official/steps/publish-logs.yml b/eng/common/templates-official/steps/publish-logs.yml new file mode 100644 index 000000000..04012fed1 --- /dev/null +++ b/eng/common/templates-official/steps/publish-logs.yml @@ -0,0 +1,23 @@ +parameters: + StageLabel: '' + JobLabel: '' + +steps: +- task: Powershell@2 + displayName: Prepare Binlogs to Upload + inputs: + targetType: inline + script: | + New-Item -ItemType Directory $(Build.SourcesDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ + Move-Item -Path $(Build.SourcesDirectory)/artifacts/log/Debug/* $(Build.SourcesDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ + continueOnError: true + condition: always() + +- task: 1ES.PublishBuildArtifacts@1 + displayName: Publish Logs + inputs: + PathtoPublish: '$(Build.SourcesDirectory)/PostBuildLogs' + PublishLocation: Container + ArtifactName: PostBuildLogs + continueOnError: true + condition: always() diff --git a/eng/common/templates-official/steps/retain-build.yml b/eng/common/templates-official/steps/retain-build.yml new file mode 100644 index 000000000..83d97a26a --- /dev/null +++ b/eng/common/templates-official/steps/retain-build.yml @@ -0,0 +1,28 @@ +parameters: + # Optional azure devops PAT with build execute permissions for the build's organization, + # only needed if the build that should be retained ran on a different organization than + # the pipeline where this template is executing from + Token: '' + # Optional BuildId to retain, defaults to the current running build + BuildId: '' + # Azure devops Organization URI for the build in the https://dev.azure.com/ format. + # Defaults to the organization the current pipeline is running on + AzdoOrgUri: '$(System.CollectionUri)' + # Azure devops project for the build. Defaults to the project the current pipeline is running on + AzdoProject: '$(System.TeamProject)' + +steps: + - task: powershell@2 + inputs: + targetType: 'filePath' + filePath: eng/common/retain-build.ps1 + pwsh: true + arguments: > + -AzdoOrgUri: ${{parameters.AzdoOrgUri}} + -AzdoProject ${{parameters.AzdoProject}} + -Token ${{coalesce(parameters.Token, '$env:SYSTEM_ACCESSTOKEN') }} + -BuildId ${{coalesce(parameters.BuildId, '$env:BUILD_ID')}} + displayName: Enable permanent build retention + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + BUILD_ID: $(Build.BuildId) \ No newline at end of file diff --git a/eng/common/templates-official/steps/send-to-helix.yml b/eng/common/templates-official/steps/send-to-helix.yml new file mode 100644 index 000000000..3eb7e2d5f --- /dev/null +++ b/eng/common/templates-official/steps/send-to-helix.yml @@ -0,0 +1,91 @@ +# Please remember to update the documentation if you make changes to these parameters! +parameters: + HelixSource: 'pr/default' # required -- sources must start with pr/, official/, prodcon/, or agent/ + HelixType: 'tests/default/' # required -- Helix telemetry which identifies what type of data this is; should include "test" for clarity and must end in '/' + HelixBuild: $(Build.BuildNumber) # required -- the build number Helix will use to identify this -- automatically set to the AzDO build number + HelixTargetQueues: '' # required -- semicolon-delimited list of Helix queues to test on; see https://helix.dot.net/ for a list of queues + HelixAccessToken: '' # required -- access token to make Helix API requests; should be provided by the appropriate variable group + HelixConfiguration: '' # optional -- additional property attached to a job + HelixPreCommands: '' # optional -- commands to run before Helix work item execution + HelixPostCommands: '' # optional -- commands to run after Helix work item execution + WorkItemDirectory: '' # optional -- a payload directory to zip up and send to Helix; requires WorkItemCommand; incompatible with XUnitProjects + WorkItemCommand: '' # optional -- a command to execute on the payload; requires WorkItemDirectory; incompatible with XUnitProjects + WorkItemTimeout: '' # optional -- a timeout in TimeSpan.Parse-ready value (e.g. 00:02:00) for the work item command; requires WorkItemDirectory; incompatible with XUnitProjects + CorrelationPayloadDirectory: '' # optional -- a directory to zip up and send to Helix as a correlation payload + XUnitProjects: '' # optional -- semicolon-delimited list of XUnitProjects to parse and send to Helix; requires XUnitRuntimeTargetFramework, XUnitPublishTargetFramework, XUnitRunnerVersion, and IncludeDotNetCli=true + XUnitWorkItemTimeout: '' # optional -- the workitem timeout in seconds for all workitems created from the xUnit projects specified by XUnitProjects + XUnitPublishTargetFramework: '' # optional -- framework to use to publish your xUnit projects + XUnitRuntimeTargetFramework: '' # optional -- framework to use for the xUnit console runner + XUnitRunnerVersion: '' # optional -- version of the xUnit nuget package you wish to use on Helix; required for XUnitProjects + IncludeDotNetCli: false # optional -- true will download a version of the .NET CLI onto the Helix machine as a correlation payload; requires DotNetCliPackageType and DotNetCliVersion + DotNetCliPackageType: '' # optional -- either 'sdk', 'runtime' or 'aspnetcore-runtime'; determines whether the sdk or runtime will be sent to Helix; see https://raw.githubusercontent.com/dotnet/core/main/release-notes/releases-index.json + DotNetCliVersion: '' # optional -- version of the CLI to send to Helix; based on this: https://raw.githubusercontent.com/dotnet/core/main/release-notes/releases-index.json + WaitForWorkItemCompletion: true # optional -- true will make the task wait until work items have been completed and fail the build if work items fail. False is "fire and forget." + IsExternal: false # [DEPRECATED] -- doesn't do anything, jobs are external if HelixAccessToken is empty and Creator is set + HelixBaseUri: 'https://helix.dot.net/' # optional -- sets the Helix API base URI (allows targeting https://helix.int-dot.net ) + Creator: '' # optional -- if the build is external, use this to specify who is sending the job + DisplayNamePrefix: 'Run Tests' # optional -- rename the beginning of the displayName of the steps in AzDO + condition: succeeded() # optional -- condition for step to execute; defaults to succeeded() + continueOnError: false # optional -- determines whether to continue the build if the step errors; defaults to false + +steps: + - powershell: 'powershell "$env:BUILD_SOURCESDIRECTORY\eng\common\msbuild.ps1 $env:BUILD_SOURCESDIRECTORY\eng\common\helixpublish.proj /restore /p:TreatWarningsAsErrors=false /t:Test /bl:$env:BUILD_SOURCESDIRECTORY\artifacts\log\$env:BuildConfig\SendToHelix.binlog"' + displayName: ${{ parameters.DisplayNamePrefix }} (Windows) + env: + BuildConfig: $(_BuildConfig) + HelixSource: ${{ parameters.HelixSource }} + HelixType: ${{ parameters.HelixType }} + HelixBuild: ${{ parameters.HelixBuild }} + HelixConfiguration: ${{ parameters.HelixConfiguration }} + HelixTargetQueues: ${{ parameters.HelixTargetQueues }} + HelixAccessToken: ${{ parameters.HelixAccessToken }} + HelixPreCommands: ${{ parameters.HelixPreCommands }} + HelixPostCommands: ${{ parameters.HelixPostCommands }} + WorkItemDirectory: ${{ parameters.WorkItemDirectory }} + WorkItemCommand: ${{ parameters.WorkItemCommand }} + WorkItemTimeout: ${{ parameters.WorkItemTimeout }} + CorrelationPayloadDirectory: ${{ parameters.CorrelationPayloadDirectory }} + XUnitProjects: ${{ parameters.XUnitProjects }} + XUnitWorkItemTimeout: ${{ parameters.XUnitWorkItemTimeout }} + XUnitPublishTargetFramework: ${{ parameters.XUnitPublishTargetFramework }} + XUnitRuntimeTargetFramework: ${{ parameters.XUnitRuntimeTargetFramework }} + XUnitRunnerVersion: ${{ parameters.XUnitRunnerVersion }} + IncludeDotNetCli: ${{ parameters.IncludeDotNetCli }} + DotNetCliPackageType: ${{ parameters.DotNetCliPackageType }} + DotNetCliVersion: ${{ parameters.DotNetCliVersion }} + WaitForWorkItemCompletion: ${{ parameters.WaitForWorkItemCompletion }} + HelixBaseUri: ${{ parameters.HelixBaseUri }} + Creator: ${{ parameters.Creator }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + condition: and(${{ parameters.condition }}, eq(variables['Agent.Os'], 'Windows_NT')) + continueOnError: ${{ parameters.continueOnError }} + - script: $BUILD_SOURCESDIRECTORY/eng/common/msbuild.sh $BUILD_SOURCESDIRECTORY/eng/common/helixpublish.proj /restore /p:TreatWarningsAsErrors=false /t:Test /bl:$BUILD_SOURCESDIRECTORY/artifacts/log/$BuildConfig/SendToHelix.binlog + displayName: ${{ parameters.DisplayNamePrefix }} (Unix) + env: + BuildConfig: $(_BuildConfig) + HelixSource: ${{ parameters.HelixSource }} + HelixType: ${{ parameters.HelixType }} + HelixBuild: ${{ parameters.HelixBuild }} + HelixConfiguration: ${{ parameters.HelixConfiguration }} + HelixTargetQueues: ${{ parameters.HelixTargetQueues }} + HelixAccessToken: ${{ parameters.HelixAccessToken }} + HelixPreCommands: ${{ parameters.HelixPreCommands }} + HelixPostCommands: ${{ parameters.HelixPostCommands }} + WorkItemDirectory: ${{ parameters.WorkItemDirectory }} + WorkItemCommand: ${{ parameters.WorkItemCommand }} + WorkItemTimeout: ${{ parameters.WorkItemTimeout }} + CorrelationPayloadDirectory: ${{ parameters.CorrelationPayloadDirectory }} + XUnitProjects: ${{ parameters.XUnitProjects }} + XUnitWorkItemTimeout: ${{ parameters.XUnitWorkItemTimeout }} + XUnitPublishTargetFramework: ${{ parameters.XUnitPublishTargetFramework }} + XUnitRuntimeTargetFramework: ${{ parameters.XUnitRuntimeTargetFramework }} + XUnitRunnerVersion: ${{ parameters.XUnitRunnerVersion }} + IncludeDotNetCli: ${{ parameters.IncludeDotNetCli }} + DotNetCliPackageType: ${{ parameters.DotNetCliPackageType }} + DotNetCliVersion: ${{ parameters.DotNetCliVersion }} + WaitForWorkItemCompletion: ${{ parameters.WaitForWorkItemCompletion }} + HelixBaseUri: ${{ parameters.HelixBaseUri }} + Creator: ${{ parameters.Creator }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + condition: and(${{ parameters.condition }}, ne(variables['Agent.Os'], 'Windows_NT')) + continueOnError: ${{ parameters.continueOnError }} diff --git a/eng/common/templates-official/steps/source-build.yml b/eng/common/templates-official/steps/source-build.yml new file mode 100644 index 000000000..829f17c34 --- /dev/null +++ b/eng/common/templates-official/steps/source-build.yml @@ -0,0 +1,129 @@ +parameters: + # This template adds arcade-powered source-build to CI. + + # This is a 'steps' template, and is intended for advanced scenarios where the existing build + # infra has a careful build methodology that must be followed. For example, a repo + # (dotnet/runtime) might choose to clone the GitHub repo only once and store it as a pipeline + # artifact for all subsequent jobs to use, to reduce dependence on a strong network connection to + # GitHub. Using this steps template leaves room for that infra to be included. + + # Defines the platform on which to run the steps. See 'eng/common/templates-official/job/source-build.yml' + # for details. The entire object is described in the 'job' template for simplicity, even though + # the usage of the properties on this object is split between the 'job' and 'steps' templates. + platform: {} + +steps: +# Build. Keep it self-contained for simple reusability. (No source-build-specific job variables.) +- script: | + set -x + df -h + + # If building on the internal project, the artifact feeds variable may be available (usually only if needed) + # In that case, call the feed setup script to add internal feeds corresponding to public ones. + # In addition, add an msbuild argument to copy the WIP from the repo to the target build location. + # This is because SetupNuGetSources.sh will alter the current NuGet.config file, and we need to preserve those + # changes. + internalRestoreArgs= + if [ '$(dn-bot-dnceng-artifact-feeds-rw)' != '$''(dn-bot-dnceng-artifact-feeds-rw)' ]; then + # Temporarily work around https://github.com/dotnet/arcade/issues/7709 + chmod +x $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh + $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh $(Build.SourcesDirectory)/NuGet.config $(dn-bot-dnceng-artifact-feeds-rw) + internalRestoreArgs='/p:CopyWipIntoInnerSourceBuildRepo=true' + + # The 'Copy WIP' feature of source build uses git stash to apply changes from the original repo. + # This only works if there is a username/email configured, which won't be the case in most CI runs. + git config --get user.email + if [ $? -ne 0 ]; then + git config user.email dn-bot@microsoft.com + git config user.name dn-bot + fi + fi + + # If building on the internal project, the internal storage variable may be available (usually only if needed) + # In that case, add variables to allow the download of internal runtimes if the specified versions are not found + # in the default public locations. + internalRuntimeDownloadArgs= + if [ '$(dotnetbuilds-internal-container-read-token-base64)' != '$''(dotnetbuilds-internal-container-read-token-base64)' ]; then + internalRuntimeDownloadArgs='/p:DotNetRuntimeSourceFeed=https://dotnetbuilds.blob.core.windows.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) --runtimesourcefeed https://dotnetbuilds.blob.core.windows.net/internal --runtimesourcefeedkey $(dotnetbuilds-internal-container-read-token-base64)' + fi + + buildConfig=Release + # Check if AzDO substitutes in a build config from a variable, and use it if so. + if [ '$(_BuildConfig)' != '$''(_BuildConfig)' ]; then + buildConfig='$(_BuildConfig)' + fi + + officialBuildArgs= + if [ '${{ and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}' = 'True' ]; then + officialBuildArgs='/p:DotNetPublishUsingPipelines=true /p:OfficialBuildId=$(BUILD.BUILDNUMBER)' + fi + + targetRidArgs= + if [ '${{ parameters.platform.targetRID }}' != '' ]; then + targetRidArgs='/p:TargetRid=${{ parameters.platform.targetRID }}' + fi + + runtimeOsArgs= + if [ '${{ parameters.platform.runtimeOS }}' != '' ]; then + runtimeOsArgs='/p:RuntimeOS=${{ parameters.platform.runtimeOS }}' + fi + + baseOsArgs= + if [ '${{ parameters.platform.baseOS }}' != '' ]; then + baseOsArgs='/p:BaseOS=${{ parameters.platform.baseOS }}' + fi + + publishArgs= + if [ '${{ parameters.platform.skipPublishValidation }}' != 'true' ]; then + publishArgs='--publish' + fi + + assetManifestFileName=SourceBuild_RidSpecific.xml + if [ '${{ parameters.platform.name }}' != '' ]; then + assetManifestFileName=SourceBuild_${{ parameters.platform.name }}.xml + fi + + ${{ coalesce(parameters.platform.buildScript, './build.sh') }} --ci \ + --configuration $buildConfig \ + --restore --build --pack $publishArgs -bl \ + $officialBuildArgs \ + $internalRuntimeDownloadArgs \ + $internalRestoreArgs \ + $targetRidArgs \ + $runtimeOsArgs \ + $baseOsArgs \ + /p:SourceBuildNonPortable=${{ parameters.platform.nonPortable }} \ + /p:ArcadeBuildFromSource=true \ + /p:AssetManifestFileName=$assetManifestFileName + displayName: Build + +# Upload build logs for diagnosis. +- task: CopyFiles@2 + displayName: Prepare BuildLogs staging directory + inputs: + SourceFolder: '$(Build.SourcesDirectory)' + Contents: | + **/*.log + **/*.binlog + artifacts/source-build/self/prebuilt-report/** + TargetFolder: '$(Build.StagingDirectory)/BuildLogs' + CleanTargetFolder: true + continueOnError: true + condition: succeededOrFailed() + +- task: 1ES.PublishPipelineArtifact@1 + displayName: Publish BuildLogs + inputs: + targetPath: '$(Build.StagingDirectory)/BuildLogs' + artifactName: BuildLogs_SourceBuild_${{ parameters.platform.name }}_Attempt$(System.JobAttempt) + continueOnError: true + condition: succeededOrFailed() + +# Manually inject component detection so that we can ignore the source build upstream cache, which contains +# a nupkg cache of input packages (a local feed). +# This path must match the upstream cache path in property 'CurrentRepoSourceBuiltNupkgCacheDir' +# in src\Microsoft.DotNet.Arcade.Sdk\tools\SourceBuild\SourceBuildArcade.targets +- task: ComponentGovernanceComponentDetection@0 + displayName: Component Detection (Exclude upstream cache) + inputs: + ignoreDirectories: '$(Build.SourcesDirectory)/artifacts/source-build/self/src/artifacts/obj/source-built-upstream-cache' diff --git a/eng/common/templates-official/variables/pool-providers.yml b/eng/common/templates-official/variables/pool-providers.yml new file mode 100644 index 000000000..1f308b24e --- /dev/null +++ b/eng/common/templates-official/variables/pool-providers.yml @@ -0,0 +1,45 @@ +# Select a pool provider based off branch name. Anything with branch name containing 'release' must go into an -Svc pool, +# otherwise it should go into the "normal" pools. This separates out the queueing and billing of released branches. + +# Motivation: +# Once a given branch of a repository's output has been officially "shipped" once, it is then considered to be COGS +# (Cost of goods sold) and should be moved to a servicing pool provider. This allows both separation of queueing +# (allowing release builds and main PR builds to not intefere with each other) and billing (required for COGS. +# Additionally, the pool provider name itself may be subject to change when the .NET Core Engineering Services +# team needs to move resources around and create new and potentially differently-named pools. Using this template +# file from an Arcade-ified repo helps guard against both having to update one's release/* branches and renaming. + +# How to use: +# This yaml assumes your shipped product branches use the naming convention "release/..." (which many do). +# If we find alternate naming conventions in broad usage it can be added to the condition below. +# +# First, import the template in an arcade-ified repo to pick up the variables, e.g.: +# +# variables: +# - template: /eng/common/templates-official/variables/pool-providers.yml +# +# ... then anywhere specifying the pool provider use the runtime variables, +# $(DncEngInternalBuildPool) +# +# pool: +# name: $(DncEngInternalBuildPool) +# image: 1es-windows-2022 + +variables: + # Coalesce the target and source branches so we know when a PR targets a release branch + # If these variables are somehow missing, fall back to main (tends to have more capacity) + + # Any new -Svc alternative pools should have variables added here to allow for splitting work + + - name: DncEngInternalBuildPool + value: $[ + replace( + replace( + eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), + True, + 'NetCore1ESPool-Svc-Internal' + ), + False, + 'NetCore1ESPool-Internal' + ) + ] \ No newline at end of file diff --git a/eng/common/templates-official/variables/sdl-variables.yml b/eng/common/templates-official/variables/sdl-variables.yml new file mode 100644 index 000000000..dbdd66d4a --- /dev/null +++ b/eng/common/templates-official/variables/sdl-variables.yml @@ -0,0 +1,7 @@ +variables: +# The Guardian version specified in 'eng/common/sdl/packages.config'. This value must be kept in +# sync with the packages.config file. +- name: DefaultGuardianVersion + value: 0.109.0 +- name: GuardianPackagesConfigFile + value: $(Build.SourcesDirectory)\eng\common\sdl\packages.config \ No newline at end of file diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml index e24ca2f46..8ec5c4f2d 100644 --- a/eng/common/templates/job/job.yml +++ b/eng/common/templates/job/job.yml @@ -15,6 +15,7 @@ parameters: timeoutInMinutes: '' variables: [] workspace: '' + templateContext: '' # Job base template specific parameters # See schema documentation - https://github.com/dotnet/arcade/blob/master/Documentation/AzureDevOps/TemplateSchema.md @@ -68,6 +69,9 @@ jobs: ${{ if ne(parameters.timeoutInMinutes, '') }}: timeoutInMinutes: ${{ parameters.timeoutInMinutes }} + ${{ if ne(parameters.templateContext, '') }}: + templateContext: ${{ parameters.templateContext }} + variables: - ${{ if ne(parameters.enableTelemetry, 'false') }}: - name: DOTNET_CLI_TELEMETRY_PROFILE diff --git a/eng/common/templates/job/source-index-stage1.yml b/eng/common/templates/job/source-index-stage1.yml index b98202aa0..43ee0c202 100644 --- a/eng/common/templates/job/source-index-stage1.yml +++ b/eng/common/templates/job/source-index-stage1.yml @@ -1,6 +1,7 @@ parameters: runAsPublic: false - sourceIndexPackageVersion: 1.0.1-20230228.2 + sourceIndexUploadPackageVersion: 2.0.0-20240502.12 + sourceIndexProcessBinlogPackageVersion: 1.0.1-20240129.2 sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json sourceIndexBuildCommand: powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -Command "eng/common/build.ps1 -restore -build -binarylog -ci" preSteps: [] @@ -14,14 +15,14 @@ jobs: dependsOn: ${{ parameters.dependsOn }} condition: ${{ parameters.condition }} variables: - - name: SourceIndexPackageVersion - value: ${{ parameters.sourceIndexPackageVersion }} + - name: SourceIndexUploadPackageVersion + value: ${{ parameters.sourceIndexUploadPackageVersion }} + - name: SourceIndexProcessBinlogPackageVersion + value: ${{ parameters.sourceIndexProcessBinlogPackageVersion }} - name: SourceIndexPackageSource value: ${{ parameters.sourceIndexPackageSource }} - name: BinlogPath value: ${{ parameters.binlogPath }} - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - group: source-dot-net stage1 variables - template: /eng/common/templates/variables/pool-providers.yml ${{ if ne(parameters.pool, '') }}: @@ -40,16 +41,16 @@ jobs: - ${{ preStep }} - task: UseDotNet@2 - displayName: Use .NET Core SDK 6 + displayName: Use .NET 8 SDK inputs: packageType: sdk - version: 6.0.x + version: 8.0.x installationPath: $(Agent.TempDirectory)/dotnet workingDirectory: $(Agent.TempDirectory) - script: | - $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version $(SourceIndexPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools - $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version $(SourceIndexPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools + $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version $(sourceIndexProcessBinlogPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools + $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version $(sourceIndexUploadPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools displayName: Download Tools # Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk. workingDirectory: $(Agent.TempDirectory) @@ -61,7 +62,24 @@ jobs: displayName: Process Binlog into indexable sln - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - script: $(Agent.TempDirectory)/.source-index/tools/UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) - displayName: Upload stage1 artifacts to source index - env: - BLOB_CONTAINER_URL: $(source-dot-net-stage1-blob-container-url) + - task: AzureCLI@2 + displayName: Get stage 1 auth token + inputs: + azureSubscription: 'SourceDotNet Stage1 Publish' + addSpnToEnvironment: true + scriptType: 'ps' + scriptLocation: 'inlineScript' + inlineScript: | + echo "##vso[task.setvariable variable=ARM_CLIENT_ID]$env:servicePrincipalId" + echo "##vso[task.setvariable variable=ARM_ID_TOKEN]$env:idToken" + echo "##vso[task.setvariable variable=ARM_TENANT_ID]$env:tenantId" + + - script: | + echo "Client ID: $(ARM_CLIENT_ID)" + echo "ID Token: $(ARM_ID_TOKEN)" + echo "Tenant ID: $(ARM_TENANT_ID)" + az login --service-principal -u $(ARM_CLIENT_ID) --tenant $(ARM_TENANT_ID) --allow-no-subscriptions --federated-token $(ARM_ID_TOKEN) + displayName: "Login to Azure" + + - script: $(Agent.TempDirectory)/.source-index/tools/UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) -s netsourceindexstage1 -b stage1 + displayName: Upload stage1 artifacts to source index \ No newline at end of file diff --git a/eng/common/templates/steps/component-governance.yml b/eng/common/templates/steps/component-governance.yml index 0ecec47b0..cbba05967 100644 --- a/eng/common/templates/steps/component-governance.yml +++ b/eng/common/templates/steps/component-governance.yml @@ -4,7 +4,7 @@ parameters: steps: - ${{ if eq(parameters.disableComponentGovernance, 'true') }}: - - script: "echo ##vso[task.setvariable variable=skipComponentGovernanceDetection]true" + - script: echo "##vso[task.setvariable variable=skipComponentGovernanceDetection]true" displayName: Set skipComponentGovernanceDetection variable - ${{ if ne(parameters.disableComponentGovernance, 'true') }}: - task: ComponentGovernanceComponentDetection@0 diff --git a/eng/common/templates/steps/generate-sbom.yml b/eng/common/templates/steps/generate-sbom.yml index a06373f38..2b21eae42 100644 --- a/eng/common/templates/steps/generate-sbom.yml +++ b/eng/common/templates/steps/generate-sbom.yml @@ -5,7 +5,7 @@ # IgnoreDirectories - Directories to ignore for SBOM generation. This will be passed through to the CG component detector. parameters: - PackageVersion: 7.0.0 + PackageVersion: 8.0.0 BuildDropPath: '$(Build.SourcesDirectory)/artifacts' PackageName: '.NET' ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom diff --git a/eng/install-scancode.sh b/eng/install-scancode.sh index cec368af9..049b749c2 100755 --- a/eng/install-scancode.sh +++ b/eng/install-scancode.sh @@ -5,7 +5,7 @@ set -euo pipefail # Install instructions: https://scancode-toolkit.readthedocs.io/en/latest/getting-started/install.html#installation-as-a-library-via-pip # See latest release at https://github.com/nexB/scancode-toolkit/releases -SCANCODE_VERSION="32.0.8" +SCANCODE_VERSION="32.1.0" pyEnvPath="/tmp/scancode-env" python3 -m venv $pyEnvPath diff --git a/eng/pipelines/source-build-sdk-diff-tests.yml b/eng/pipelines/source-build-sdk-diff-tests.yml deleted file mode 100644 index 47d1c4c89..000000000 --- a/eng/pipelines/source-build-sdk-diff-tests.yml +++ /dev/null @@ -1,64 +0,0 @@ -schedules: -- cron: "0 11 * * 1-5" - displayName: Run on weekdays at 11am UTC - branches: - include: - - main - - release/*.0.1xx* - - internal/release/*.0.1xx* - -pr: none -trigger: none - -pool: - name: NetCore1ESPool-Svc-Internal - demands: ImageOverride -equals 1es-ubuntu-2004 - -parameters: -- name: dotnetDotnetRunId - displayName: 'Specific dotnet-dotnet run ID number (e.g `2108850`)' - type: string - default: ' ' - -jobs: -- template: templates/jobs/sdk-diff-tests.yml - parameters: - buildName: CentOSStream8_Offline_MsftSdk - targetRid: centos.8-x64 - architecture: x64 - dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }} - -- template: templates/jobs/sdk-diff-tests.yml - parameters: - buildName: CentOSStream9_Offline_MsftSdk - targetRid: centos.9-x64 - architecture: x64 - dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }} - -- template: templates/jobs/sdk-diff-tests.yml - parameters: - buildName: Alpine317_Offline_MsftSdk - targetRid: alpine.3.17-x64 - architecture: x64 - dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }} - -- template: templates/jobs/sdk-diff-tests.yml - parameters: - buildName: Fedora38_Offline_MsftSdk - targetRid: fedora.38-x64 - architecture: x64 - dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }} - -- template: templates/jobs/sdk-diff-tests.yml - parameters: - buildName: Ubuntu2204_Offline_MsftSdk - targetRid: ubuntu.22.04-x64 - architecture: x64 - dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }} - -- template: templates/jobs/sdk-diff-tests.yml - parameters: - buildName: Ubuntu2204Arm64_Offline_MsftSdk - targetRid: ubuntu.22.04-arm64 - architecture: arm64 - dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }} diff --git a/eng/pipelines/templates/jobs/vmr-build.yml b/eng/pipelines/templates/jobs/vmr-build.yml index 9c5e58dbe..542320fd7 100644 --- a/eng/pipelines/templates/jobs/vmr-build.yml +++ b/eng/pipelines/templates/jobs/vmr-build.yml @@ -67,7 +67,10 @@ jobs: condition: succeededOrFailed() dependsOn: ${{ parameters.reuseBuildArtifactsFrom }}_${{ parameters.architecture }} variables: - - template: /eng/common/templates/variables/pool-providers.yml + - ${{ if eq(variables['System.TeamProject'], 'public') }}: + - template: /eng/common/templates/variables/pool-providers.yml + - ${{ else }}: + - template: /eng/common/templates-official/variables/pool-providers.yml - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - group: AzureDevOps-Artifact-Feeds-Pats - ${{ if and(not(parameters.isBuiltFromVmr), eq(variables['System.TeamProject'], 'internal'), not(startswith(parameters.vmrBranch, 'internal/release/')), not(eq(variables['Build.Reason'], 'PullRequest'))) }}: @@ -87,8 +90,21 @@ jobs: - name: sourcesPath value: ${{ parameters.vmrPath }} + templateContext: + outputs: + - output: pipelineArtifact + displayName: 'Publish BuildLogs' + condition: succeededOrFailed() + targetPath: '$(Build.StagingDirectory)/BuildLogs' + artifactName: $(Agent.JobName)_BuildLogs_Attempt$(System.JobAttempt) + - output: pipelineArtifact + displayName: 'Publish Artifacts' + condition: succeededOrFailed() + targetPath: '${{ variables.sourcesPath }}/artifacts/${{ parameters.architecture }}/Release/' + artifactName: $(Agent.JobName)_Artifacts + steps: - - template: ../steps/vmr-prepare.yml + - template: ../steps/vmr-prepare.yml@self parameters: ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: vmrBranch: $(System.PullRequest.TargetBranch) @@ -99,7 +115,7 @@ jobs: # Synchronize new content in the VMR during PRs (we expect this to come - ${{ if and(not(parameters.isBuiltFromVmr), eq(variables['Build.Reason'], 'PullRequest')) }}: - - template: ../steps/vmr-pull-updates.yml + - template: ../steps/vmr-pull-updates.yml@self parameters: vmrPath: ${{ parameters.vmrPath }} vmrBranch: ${{ parameters.vmrBranch }} @@ -148,8 +164,8 @@ jobs: notFoundMessage="No source-built SDK found to download..." echo "Looking for source-built SDK to download..." - archiveUrlLine=`grep -m 1 "" "$packageVersionsPath" || :` - urlPattern="(.*)" + archiveUrlLine=`grep -m 1 "" "$packageVersionsPath" || :` + urlPattern="(.*)" if [[ $archiveUrlLine =~ $urlPattern ]]; then archiveUrl="${BASH_REMATCH[1]}" @@ -251,11 +267,18 @@ jobs: continueOnError: true condition: succeededOrFailed() - - publish: '$(Build.StagingDirectory)/BuildLogs' - artifact: $(Agent.JobName)_BuildLogs_Attempt$(System.JobAttempt) - displayName: Publish BuildLogs - continueOnError: true - condition: succeededOrFailed() + - ${{ if eq(variables['System.TeamProject'], 'public') }}: + - publish: '$(Build.StagingDirectory)/BuildLogs' + artifact: $(Agent.JobName)_BuildLogs_Attempt$(System.JobAttempt) + displayName: Publish BuildLogs + continueOnError: true + condition: succeededOrFailed() + + - publish: '${{ variables.sourcesPath }}/artifacts/${{ parameters.architecture }}/Release/' + artifact: $(Agent.JobName)_Artifacts + displayName: Publish Artifacts + condition: succeededOrFailed() + continueOnError: true - task: PublishTestResults@2 displayName: Publish Test Results @@ -268,9 +291,3 @@ jobs: mergeTestResults: true publishRunAttachments: true testRunTitle: SourceBuild_SmokeTests_$(Agent.JobName) - - - publish: '${{ variables.sourcesPath }}/artifacts/${{ parameters.architecture }}/Release/' - artifact: $(Agent.JobName)_Artifacts - displayName: Publish Artifacts - condition: succeededOrFailed() - continueOnError: true diff --git a/eng/pipelines/templates/jobs/vmr-synchronization.yml b/eng/pipelines/templates/jobs/vmr-synchronization.yml index 713deea20..e3f20ce7b 100644 --- a/eng/pipelines/templates/jobs/vmr-synchronization.yml +++ b/eng/pipelines/templates/jobs/vmr-synchronization.yml @@ -19,10 +19,13 @@ parameters: jobs: - job: Synchronize_VMR - displayName: Synchronize dotnet/dotnet + displayName: Synchronize VMR's ${{ parameters.vmrBranch }} timeoutInMinutes: 120 variables: - - template: /eng/common/templates/variables/pool-providers.yml + - ${{ if eq(variables['System.TeamProject'], 'public') }}: + - template: /eng/common/templates/variables/pool-providers.yml + - ${{ else }}: + - template: /eng/common/templates-official/variables/pool-providers.yml - name: vmrPath value: $(Agent.BuildDirectory)/vmr - ${{ if not(parameters.noPush) }}: @@ -36,14 +39,16 @@ jobs: - group: DotNetBot-AzDO-PAT - name: vmrInternalUrl value: https://dnceng@dev.azure.com/dnceng/internal/_git/dotnet-dotnet - + pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $(DncEngPublicBuildPool) - demands: ImageOverride -equals Build.Ubuntu.2004.Amd64.Open - ${{ if eq(variables['System.TeamProject'], 'internal') }}: + image: 1es-ubuntu-2004-open + os: linux + ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals Build.Ubuntu.2004.Amd64 + demands: ImageOverride -equals 1es-ubuntu-2004 + os: linux steps: - template: ../steps/vmr-prepare.yml @@ -57,7 +62,6 @@ jobs: vmrBranch: ${{ parameters.vmrBranch }} targetRef: ${{ parameters.targetRef }} - - ${{ if and(not(parameters.noPush), not(in(variables['Build.Reason'], 'PullRequest')), eq(variables['System.TeamProject'], 'internal')) }}: # Push main and release branches to the public VMR - ${{ if or(eq(parameters.vmrBranch, 'main'), startsWith(parameters.vmrBranch, 'release/')) }}: @@ -83,4 +87,4 @@ jobs: --azdev-pat '$(dn-bot-dnceng-build-rw-code-rw)' --verbose displayName: Push changes to dotnet-dotnet (internal) - workingDirectory: $(Agent.BuildDirectory)/installer \ No newline at end of file + workingDirectory: $(Agent.BuildDirectory)/installer diff --git a/eng/pipelines/templates/stages/vmr-build.yml b/eng/pipelines/templates/stages/vmr-build.yml index 43f0c8633..04d06cda7 100644 --- a/eng/pipelines/templates/stages/vmr-build.yml +++ b/eng/pipelines/templates/stages/vmr-build.yml @@ -2,38 +2,40 @@ ### If run in a PR, new changes are applied to a local copy of the VMR, then it is source-built and tested parameters: - dependsOn: [] - condition: always() +- name: dependsOn + type: object + default: [] +- name: condition + type: string + default: always() # Branch of the VMR to use (to push to for internal builds) - vmrBranch: $(Build.SourceBranch) +- name: vmrBranch + type: string + default: $(Build.SourceBranch) # True when build is running from dotnet/dotnet directly - isBuiltFromVmr: +- name: isBuiltFromVmr + type: boolean + default: false - # The following parameters aren't expected to be passed in rather they are used for encapsulation - # ----------------------------------------------------------------------------------------------- - alpine317Container: mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.17 - centOSStream8Container: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8 - centOSStream9Container: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9 - fedora38Container: mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-38 - ubuntu2204Container: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04 - ubuntu2204ArmContainer: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-arm64 +# These are not expected to be passed it but rather just object variables reused below +- name: pool_Linux + type: object + default: + name: $(defaultPoolName) + image: $(poolImage_Linux) + demands: ImageOverride -equals $(poolImage_Linux) + os: linux - # Internal builds - poolInternalAmd64: - name: NetCore1ESPool-Svc-Internal - demands: ImageOverride -equals Build.Ubuntu.1804.Amd64 - poolInternalAmd64PR: - name: NetCore1ESPool-Internal-XL - demands: ImageOverride -equals Build.Ubuntu.1804.Amd64 - poolInternalArm64: - name: Docker-Linux-Arm-Internal - - # Public builds / PRs - poolPublicAmd64: - name: NetCore-Public-XL - demands: ImageOverride -equals Build.Ubuntu.1804.Amd64.Open +- name: pool_LinuxArm64 + type: object + default: + name: $(poolName_LinuxArm64) + image: $(poolImage_LinuxArm64) + demands: ImageOverride -equals $(poolImage_LinuxArm64) + hostArchitecture: Arm64 + os: linux stages: - stage: VMR_Source_Build @@ -41,23 +43,7 @@ stages: dependsOn: ${{ parameters.dependsOn }} condition: ${{ parameters.condition }} variables: - - ${{ if eq(variables['System.TeamProject'], 'public') }}: - - name: defaultPoolName - value: ${{ parameters.poolPublicAmd64.name }} - - name: defaultPoolDemands - value: ${{ parameters.poolPublicAmd64.demands }} - - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - - ${{ if in(variables['Build.Reason'], 'PullRequest') }}: - - name: defaultPoolName - value: ${{ parameters.poolInternalAmd64PR.name }} - - name: defaultPoolDemands - value: ${{ parameters.poolInternalAmd64PR.demands }} - - ${{ else }}: - - name: defaultPoolName - value: ${{ parameters.poolInternalAmd64.name }} - - name: defaultPoolDemands - value: ${{ parameters.poolInternalAmd64.demands }} - + - template: ../variables/vmr-build.yml@self - ${{ if ne(parameters.vmrBranch, '') }}: - name: VmrBranch value: ${{ parameters.vmrBranch }} @@ -69,17 +55,15 @@ stages: # PR and CI legs ------------------------------------ - - template: ../jobs/vmr-build.yml + - template: ../jobs/vmr-build.yml@self parameters: # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: CentOSStream8_Online_MsftSdk + buildName: ${{ format('{0}_Online_MsftSdk', variables.centOSStreamName) }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} vmrBranch: ${{ variables.VmrBranch }} architecture: x64 - pool: - name: ${{ variables.defaultPoolName }} - demands: ${{ variables.defaultPoolDemands }} - container: ${{ parameters.centOSStream8Container }} + pool: ${{ parameters.pool_Linux }} + container: ${{ variables.centOSStreamContainer }} buildFromArchive: false # 🚫 enablePoison: false # 🚫 excludeOmniSharpTests: true # ✅ @@ -87,17 +71,15 @@ stages: useMonoRuntime: false # 🚫 withPreviousSDK: false # 🚫 - - template: ../jobs/vmr-build.yml + - template: ../jobs/vmr-build.yml@self parameters: # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: CentOSStream8_Offline_MsftSdk + buildName: ${{ format('{0}_Offline_MsftSdk', variables.centOSStreamName) }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} vmrBranch: ${{ variables.VmrBranch }} architecture: x64 - pool: - name: ${{ variables.defaultPoolName }} - demands: ${{ variables.defaultPoolDemands }} - container: ${{ parameters.centOSStream8Container }} + pool: ${{ parameters.pool_Linux }} + container: ${{ variables.centOSStreamContainer }} buildFromArchive: true # ✅ enablePoison: false # 🚫 excludeOmniSharpTests: true # ✅ @@ -109,17 +91,15 @@ stages: # CI - Stage 1 x64 legs ------------------------------------ - - template: ../jobs/vmr-build.yml + - template: ../jobs/vmr-build.yml@self parameters: # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: Alpine317_Offline_MsftSdk + buildName: ${{ format('{0}_Offline_MsftSdk', variables.alpineName) }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} vmrBranch: ${{ variables.VmrBranch }} architecture: x64 - pool: - name: ${{ variables.defaultPoolName }} - demands: ${{ variables.defaultPoolDemands }} - container: ${{ parameters.alpine317Container }} + pool: ${{ parameters.pool_Linux }} + container: ${{ variables.alpineContainer }} buildFromArchive: false # ✅ enablePoison: false # 🚫 excludeOmniSharpTests: true # ✅ @@ -127,17 +107,15 @@ stages: useMonoRuntime: false # 🚫 withPreviousSDK: false # 🚫 - - template: ../jobs/vmr-build.yml + - template: ../jobs/vmr-build.yml@self parameters: # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: CentOSStream8_Online_PreviousSourceBuiltSdk + buildName: ${{ format('{0}_Online_PreviousSourceBuiltSdk', variables.centOSStreamName) }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} vmrBranch: ${{ variables.VmrBranch }} architecture: x64 - pool: - name: ${{ variables.defaultPoolName }} - demands: ${{ variables.defaultPoolDemands }} - container: ${{ parameters.centOSStream8Container }} + pool: ${{ parameters.pool_Linux }} + container: ${{ variables.centOSStreamContainer }} buildFromArchive: false # 🚫 enablePoison: false # 🚫 excludeOmniSharpTests: true # ✅ @@ -145,17 +123,15 @@ stages: useMonoRuntime: false # 🚫 withPreviousSDK: true # ✅ - - template: ../jobs/vmr-build.yml + - template: ../jobs/vmr-build.yml@self parameters: # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: CentOSStream8_Offline_PreviousSourceBuiltSdk + buildName: ${{ format('{0}_Offline_PreviousSourceBuiltSdk', variables.centOSStreamName) }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} vmrBranch: ${{ variables.VmrBranch }} architecture: x64 - pool: - name: ${{ variables.defaultPoolName }} - demands: ${{ variables.defaultPoolDemands }} - container: ${{ parameters.centOSStream8Container }} + pool: ${{ parameters.pool_Linux }} + container: ${{ variables.centOSStreamContainer }} buildFromArchive: false # 🚫 enablePoison: false # 🚫 excludeOmniSharpTests: true # ✅ @@ -163,17 +139,15 @@ stages: useMonoRuntime: false # 🚫 withPreviousSDK: true # ✅ - - template: ../jobs/vmr-build.yml + - template: ../jobs/vmr-build.yml@self parameters: # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: CentOSStream8_Mono_Offline_MsftSdk + buildName: ${{ format('{0}_Mono_Offline_MsftSdk', variables.centOSStreamName) }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} vmrBranch: ${{ variables.VmrBranch }} architecture: x64 - pool: - name: ${{ variables.defaultPoolName }} - demands: ${{ variables.defaultPoolDemands }} - container: ${{ parameters.centOSStream8Container }} + pool: ${{ parameters.pool_Linux }} + container: ${{ variables.centOSStreamContainer }} buildFromArchive: true # ✅ enablePoison: false # 🚫 excludeOmniSharpTests: true # ✅ @@ -181,35 +155,15 @@ stages: useMonoRuntime: true # ✅ withPreviousSDK: false # 🚫 - - template: ../jobs/vmr-build.yml + - template: ../jobs/vmr-build.yml@self parameters: # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: CentOSStream9_Offline_MsftSdk + buildName: ${{ format('{0}_Offline_MsftSdk', variables.fedoraName) }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} vmrBranch: ${{ variables.VmrBranch }} architecture: x64 - pool: - name: ${{ variables.defaultPoolName }} - demands: ${{ variables.defaultPoolDemands }} - container: ${{ parameters.centOSStream9Container }} - buildFromArchive: true # ✅ - enablePoison: false # 🚫 - excludeOmniSharpTests: false # 🚫 - runOnline: false # 🚫 - useMonoRuntime: false # 🚫 - withPreviousSDK: false # 🚫 - - - template: ../jobs/vmr-build.yml - parameters: - # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: Fedora38_Offline_MsftSdk - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - architecture: x64 - pool: - name: ${{ variables.defaultPoolName }} - demands: ${{ variables.defaultPoolDemands }} - container: ${{ parameters.fedora38Container }} + pool: ${{ parameters.pool_Linux }} + container: ${{ variables.fedoraContainer }} buildFromArchive: true # ✅ enablePoison: true # ✅ excludeOmniSharpTests: false # 🚫 @@ -217,17 +171,15 @@ stages: useMonoRuntime: false # 🚫 withPreviousSDK: false # 🚫 - - template: ../jobs/vmr-build.yml + - template: ../jobs/vmr-build.yml@self parameters: # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: Ubuntu2204_Offline_MsftSdk + buildName: ${{ format('{0}_Offline_MsftSdk', variables.ubuntuName) }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} vmrBranch: ${{ variables.VmrBranch }} architecture: x64 - pool: - name: ${{ variables.defaultPoolName }} - demands: ${{ variables.defaultPoolDemands }} - container: ${{ parameters.ubuntu2204Container }} + pool: ${{ parameters.pool_Linux }} + container: ${{ variables.ubuntuContainer }} buildFromArchive: false # 🚫 enablePoison: false # 🚫 excludeOmniSharpTests: false # 🚫 @@ -237,15 +189,15 @@ stages: # CI - Stage 1 arm64 Legs ------------------------------------ - - template: ../jobs/vmr-build.yml + - template: ../jobs/vmr-build.yml@self parameters: # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: Ubuntu2204Arm64_Offline_MsftSdk + buildName: ${{ format('{0}Arm64_Offline_MsftSdk', variables.ubuntuName) }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} vmrBranch: ${{ variables.VmrBranch }} architecture: arm64 - pool: ${{ parameters.poolInternalArm64 }} - container: ${{ parameters.ubuntu2204ArmContainer }} + pool: ${{ parameters.pool_LinuxArm64 }} + container: ${{ variables.ubuntuArmContainer }} buildFromArchive: false # 🚫 enablePoison: false # 🚫 excludeOmniSharpTests: false # 🚫 @@ -255,40 +207,36 @@ stages: # CI - Stage 2 x64 Legs ------------------------------------ - - template: ../jobs/vmr-build.yml + - template: ../jobs/vmr-build.yml@self parameters: # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: CentOSStream8_Online_CurrentSourceBuiltSdk + buildName: ${{ format('{0}_Online_CurrentSourceBuiltSdk', variables.centOSStreamName) }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} vmrBranch: ${{ variables.VmrBranch }} architecture: x64 - pool: - name: ${{ variables.defaultPoolName }} - demands: ${{ variables.defaultPoolDemands }} - container: ${{ parameters.centOSStream8Container }} + pool: ${{ parameters.pool_Linux }} + container: ${{ variables.centOSStreamContainer }} buildFromArchive: false # 🚫 enablePoison: false # 🚫 excludeOmniSharpTests: true # ✅ runOnline: false # 🚫 useMonoRuntime: false # 🚫 withPreviousSDK: false # 🚫 - reuseBuildArtifactsFrom: CentOSStream8_Online_MsftSdk + reuseBuildArtifactsFrom: ${{ format('{0}_Online_MsftSdk', variables.centOSStreamName) }} - - template: ../jobs/vmr-build.yml + - template: ../jobs/vmr-build.yml@self parameters: # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: Fedora38_Offline_CurrentSourceBuiltSdk + buildName: ${{ format('{0}_Offline_CurrentSourceBuiltSdk', variables.fedoraName) }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} vmrBranch: ${{ variables.VmrBranch }} architecture: x64 - pool: - name: ${{ variables.defaultPoolName }} - demands: ${{ variables.defaultPoolDemands }} - container: ${{ parameters.fedora38Container }} + pool: ${{ parameters.pool_Linux }} + container: ${{ variables.fedoraContainer }} buildFromArchive: false # 🚫 enablePoison: false # 🚫 excludeOmniSharpTests: false # 🚫 runOnline: false # 🚫 useMonoRuntime: false # 🚫 withPreviousSDK: false # 🚫 - reuseBuildArtifactsFrom: Fedora38_Offline_MsftSdk + reuseBuildArtifactsFrom: ${{ format('{0}_Offline_MsftSdk', variables.fedoraName) }} diff --git a/eng/pipelines/templates/variables/vmr-build.yml b/eng/pipelines/templates/variables/vmr-build.yml new file mode 100644 index 000000000..2d8db1587 --- /dev/null +++ b/eng/pipelines/templates/variables/vmr-build.yml @@ -0,0 +1,54 @@ +variables: +- name: alpineContainer + value: mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.19-WithNode +- name: centOSStreamContainer + value: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9 +- name: fedoraContainer + value: mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-40 +- name: ubuntuContainer + value: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04 +- name: ubuntuArmContainer + value: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-arm64 + +- name: alpineName + value: Alpine319 +- name: centOSStreamName + value: CentOSStream9 +- name: fedoraName + value: Fedora40 +- name: ubuntuName + value: Ubuntu2204 + +- name: alpineX64Rid + value: alpine.3.19-x64 +- name: centOSStreamX64Rid + value: centos.9-x64 +- name: fedoraX64Rid + value: fedora.40-x64 +- name: ubuntux64Rid + value: ubuntu.22.04-x64 +- name: ubuntuArm64Rid + value: ubuntu.22.04-arm64 + +- ${{ if eq(variables['System.TeamProject'], 'public') }}: + - name: defaultPoolName + value: NetCore-Public-XL + - name: poolImage_Linux + value: 1es-ubuntu-2004-open + - name: poolImage_LinuxArm64 + value: Mariner-2-Docker-ARM64 + - name: poolName_LinuxArm64 + value: Docker-Linux-Arm-Public +- ${{ else }}: + - ${{ if in(variables['Build.Reason'], 'PullRequest') }}: + - name: defaultPoolName + value: NetCore1ESPool-Internal-XL + - ${{ else }}: + - name: defaultPoolName + value: $(DncEngInternalBuildPool) + - name: poolImage_Linux + value: 1es-ubuntu-2204 + - name: poolImage_LinuxArm64 + value: Mariner-2-Docker-ARM64 + - name: poolName_LinuxArm64 + value: Docker-Linux-Arm-Internal diff --git a/eng/pipelines/vmr-build-internal.yml b/eng/pipelines/vmr-build-internal.yml index 85e8fe313..a28dd253f 100644 --- a/eng/pipelines/vmr-build-internal.yml +++ b/eng/pipelines/vmr-build-internal.yml @@ -23,7 +23,7 @@ variables: value: ${{ replace(parameters.vmrBranch, ' ', '') }} - ${{ else }}: - name: VmrBranch - value: release/8.0.1xx + value: internal/release/8.0.1xx resources: repositories: diff --git a/eng/pipelines/vmr-build-pr.yml b/eng/pipelines/vmr-build-pr.yml new file mode 100644 index 000000000..3c51dfe6e --- /dev/null +++ b/eng/pipelines/vmr-build-pr.yml @@ -0,0 +1,56 @@ +# This is the non-1ES PR pipeline source-building the VMR used in installer PRs +# https://dev.azure.com/dnceng-public/public/_build?definitionId=233 + +trigger: none +pr: + branches: + include: + - main + - release/* + +parameters: +- name: vmrBranch + displayName: dotnet/dotnet branch to push to + type: string + default: ' ' + +- name: disableVmrBuild + displayName: Skip source-building the VMR + type: boolean + default: false + +variables: +- ${{ if ne(parameters.vmrBranch, ' ') }}: + - name: VmrBranch + value: ${{ replace(parameters.vmrBranch, ' ', '') }} +- ${{ else }}: + - name: VmrBranch + value: release/8.0.1xx + +resources: + repositories: + - repository: vmr + type: github + name: dotnet/dotnet + endpoint: dotnet + ref: $(VmrBranch) + +stages: +# You can temporarily disable the VMR Build stage by setting the disableVmrBuild variable +- ${{ if not(parameters.disableVmrBuild) }}: + - template: templates/stages/vmr-build.yml + parameters: + vmrBranch: ${{ variables.VmrBranch }} + isBuiltFromVmr: false + +# In case the VMR Build stage is temporarily disabled, the VMR synchronization step is run to validate +# that the PR can be merged and later synchronized into the VMR without problems. +- ${{ else }}: + - stage: Synchronize_VMR + displayName: Synchronize VMR + dependsOn: [] + jobs: + - template: templates/jobs/vmr-synchronization.yml + parameters: + vmrBranch: ${{ variables.VmrBranch }} + noPush: true diff --git a/eng/pipelines/vmr-sync-internal.yml b/eng/pipelines/vmr-sync-internal.yml index 0a10a518e..cb0877ea2 100644 --- a/eng/pipelines/vmr-sync-internal.yml +++ b/eng/pipelines/vmr-sync-internal.yml @@ -17,21 +17,48 @@ resources: name: dotnet-dotnet ref: $(Build.SourceBranch) + - repository: 1ESPipelineTemplates + type: git + name: 1ESPipelineTemplates/1ESPipelineTemplates + ref: refs/tags/release + parameters: - name: vmrBranch displayName: dotnet-dotnet branch to push to type: string default: ' ' -variables: +variables: +- template: /eng/common/templates-official/variables/pool-providers.yml@self + - ${{ if ne(parameters.vmrBranch, ' ') }}: - name: VmrBranch value: ${{ replace(parameters.vmrBranch, ' ', '') }} - ${{ else }}: - name: VmrBranch value: ${{ replace(replace(variables['Build.SourceBranch'], 'refs/heads/', ''), 'refs/pull/', '') }} - -jobs: - - template: templates/jobs/vmr-synchronization.yml - parameters: - vmrBranch: ${{ variables.VmrBranch }} \ No newline at end of file + +extends: + template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates + parameters: + sdl: + sourceAnalysisPool: + name: $(DncEngInternalBuildPool) + image: 1es-windows-2022 + os: windows + + sourceRepositoriesToScan: + exclude: + - repository: vmr + + componentgovernance: + sourceScanPath: $(Agent.BuildDirectory)/vmr + ignoreDirectories: $(Agent.BuildDirectory)/vmr/src + + stages: + - stage: VMRSynchronization + displayName: VMR Synchronization + jobs: + - template: /eng/pipelines/templates/jobs/vmr-synchronization.yml@self + parameters: + vmrBranch: ${{ variables.VmrBranch }} \ No newline at end of file diff --git a/eng/pipelines/vmr-sync.yml b/eng/pipelines/vmr-sync.yml index 6659887f1..7de3ef614 100644 --- a/eng/pipelines/vmr-sync.yml +++ b/eng/pipelines/vmr-sync.yml @@ -19,23 +19,48 @@ resources: endpoint: dotnet ref: $(Build.SourceBranch) + - repository: 1ESPipelineTemplates + type: git + name: 1ESPipelineTemplates/1ESPipelineTemplates + ref: refs/tags/release + parameters: - name: vmrBranch displayName: dotnet/dotnet branch to push to type: string default: ' ' -variables: +variables: +- template: /eng/common/templates-official/variables/pool-providers.yml@self + - ${{ if ne(parameters.vmrBranch, ' ') }}: - name: VmrBranch value: ${{ replace(parameters.vmrBranch, ' ', '') }} - ${{ else }}: - name: VmrBranch value: ${{ replace(replace(variables['Build.SourceBranch'], 'refs/heads/', ''), 'refs/pull/', '') }} - -jobs: - - template: /eng/pipelines/templates/jobs/vmr-synchronization.yml - parameters: - vmrBranch: ${{ variables.VmrBranch }} - - \ No newline at end of file + +extends: + template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates + parameters: + sdl: + sourceAnalysisPool: + name: $(DncEngInternalBuildPool) + image: 1es-windows-2022 + os: windows + + sourceRepositoriesToScan: + exclude: + - repository: vmr + + componentgovernance: + sourceScanPath: $(Agent.BuildDirectory)/vmr + ignoreDirectories: $(Agent.BuildDirectory)/vmr/src + + stages: + - stage: VMRSynchronization + displayName: VMR Synchronization + jobs: + - template: /eng/pipelines/templates/jobs/vmr-synchronization.yml@self + parameters: + vmrBranch: ${{ variables.VmrBranch }} diff --git a/global.json b/global.json index e46bfeda9..50fd7a407 100644 --- a/global.json +++ b/global.json @@ -11,7 +11,7 @@ "cmake": "3.21.0" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.24113.2", - "Microsoft.DotNet.CMake.Sdk": "8.0.0-beta.24113.2" + "Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.24266.3", + "Microsoft.DotNet.CMake.Sdk": "8.0.0-beta.24266.3" } } diff --git a/src/SourceBuild/content/.config/guardian/.gdnbaselines b/src/SourceBuild/content/.config/guardian/.gdnbaselines new file mode 100644 index 000000000..ce7a029cc --- /dev/null +++ b/src/SourceBuild/content/.config/guardian/.gdnbaselines @@ -0,0 +1,1315 @@ +{ + "hydrated": false, + "properties": { + "helpUri": "https://eng.ms/docs/microsoft-security/security/azure-security/cloudai-security-fundamentals-engineering/security-integration/guardian-wiki/microsoft-guardian/general/baselines", + "hydrationStatus": "This file does not contain identifying data. It is safe to check into your repo. To hydrate this file with identifying data, run `guardian hydrate --help` and follow the guidance." + }, + "version": "1.0.0", + "baselines": { + "default": { + "name": "default", + "createdDate": "2024-04-03 14:41:43Z", + "lastUpdatedDate": "2024-04-03 14:41:43Z" + } + }, + "results": { + "5f3b52e23f96eb01bcfd73ead3cbaa2e1430de0006e5103109dd39bf9f292165": { + "signature": "5f3b52e23f96eb01bcfd73ead3cbaa2e1430de0006e5103109dd39bf9f292165", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "72b28f655eadc78b21ab36a7f572708315d8d909d1b460162511e37086288e30": { + "signature": "72b28f655eadc78b21ab36a7f572708315d8d909d1b460162511e37086288e30", + "alternativeSignatures": [ + "60efb04c6e0431e477e792a96d32b30b3a309b4ee19fad084a015e2946985459" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "08dcdf31a316917a50c97d16d8d4eca5dbd7528b8cfe8c9bd8b29fdd4dc3eb85": { + "signature": "08dcdf31a316917a50c97d16d8d4eca5dbd7528b8cfe8c9bd8b29fdd4dc3eb85", + "alternativeSignatures": [ + "c6b795bd087762188cd476b81ccdb474a25495b86b8080e1ab15c5592628b8af" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "62e5fe288e1e21307317edab5d08f047ecdd01eac5c19660bab6c9ae96f8c8b5": { + "signature": "62e5fe288e1e21307317edab5d08f047ecdd01eac5c19660bab6c9ae96f8c8b5", + "alternativeSignatures": [ + "631ff94fe085c9754b83bd9fc2a15dccccccd067392cea1f520398874266248a" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "6d4429751838adeb1f1b097b6b974a6a47d744871980ee54faeb7a4536183597": { + "signature": "6d4429751838adeb1f1b097b6b974a6a47d744871980ee54faeb7a4536183597", + "alternativeSignatures": [ + "c4538b540d00c41b9828ade572431cfd476ae40ebd4c6cfc635d06ac185972e3" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "93735e0dba704ad832d7b3fdabfcda2875dee9adb24e3cd676fce3b612d116c3": { + "signature": "93735e0dba704ad832d7b3fdabfcda2875dee9adb24e3cd676fce3b612d116c3", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "a5142e7bafbf664fdcb2d4d7071ca8427c7da0c8ba66cc7706c9c07b816f1201": { + "signature": "a5142e7bafbf664fdcb2d4d7071ca8427c7da0c8ba66cc7706c9c07b816f1201", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "1ee555192f99f2751398509614249023216a98d148e57de41317ec60715374b0": { + "signature": "1ee555192f99f2751398509614249023216a98d148e57de41317ec60715374b0", + "alternativeSignatures": [ + "5d82fd3437c708ec3bfe674016099e5465194ebc53f7dd72061b98d7257a951f" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "be4c5e062093fa08fe93f0753c3090b63af74dc4af4c04d781fddf9ec41db0d4": { + "signature": "be4c5e062093fa08fe93f0753c3090b63af74dc4af4c04d781fddf9ec41db0d4", + "alternativeSignatures": [ + "bafe4e1a197b7af8b8cfda4cafd8250a4a66a0ca18b82817e12d5a4d17350589" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "c704b27a3590a23b240e9c261dc93c8f3c7871e4d471b5688c3609880396f672": { + "signature": "c704b27a3590a23b240e9c261dc93c8f3c7871e4d471b5688c3609880396f672", + "alternativeSignatures": [ + "0880869d43948d2f7050955aeb76733bc12ab82839563cbabff0dd36d0880a39" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "b6aecc1d8697beab291f9925633b5ec3e37a088033efc7e93928fd9cac96cda4": { + "signature": "b6aecc1d8697beab291f9925633b5ec3e37a088033efc7e93928fd9cac96cda4", + "alternativeSignatures": [ + "985838b2d1518f507c85ae0f635951bad92dde58eb24c252d7e56fb6ccda6191" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "ed7c9f876d0784c23991b9ce1abc7c0df6229e7eed8cda08e56315b5fdeb5fa0": { + "signature": "ed7c9f876d0784c23991b9ce1abc7c0df6229e7eed8cda08e56315b5fdeb5fa0", + "alternativeSignatures": [ + "d2f6b006ae6b54ff39886db273b9ffc9ba23f0a84861bbe028aa54343fb5c55b" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "ae448b96e62d898485a9df57a24a920740c5504d4854e85e8060a1ba94752dbb": { + "signature": "ae448b96e62d898485a9df57a24a920740c5504d4854e85e8060a1ba94752dbb", + "alternativeSignatures": [ + "6590282ea3895180725cbb97a9e565571bb27b596bb6a6d1087b62078ed1d683" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "2e86a1d345364972a25bfe0a38237afa382766115808bb86bac8ca03e4cca304": { + "signature": "2e86a1d345364972a25bfe0a38237afa382766115808bb86bac8ca03e4cca304", + "alternativeSignatures": [ + "c079fd753fcba1568d79c4bef9fd6200b494f1552bedc1e91902ec8f01081fd7" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "5c349e8f183364d99cde545c6da7549c9d6227957c820fcde8e8beb2b40de39c": { + "signature": "5c349e8f183364d99cde545c6da7549c9d6227957c820fcde8e8beb2b40de39c", + "alternativeSignatures": [ + "8546393d391f4010c04ed43788c36626f870b02028937cf390014c660f657f7b" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "a9e7b46f71cc21fd96e3bbb1c30a7beb36470f0a4c857794b4444856e54ffc2b": { + "signature": "a9e7b46f71cc21fd96e3bbb1c30a7beb36470f0a4c857794b4444856e54ffc2b", + "alternativeSignatures": [ + "34597b8dc5d2e482d7178a50440f3b8815c44e510906dd92a4d31d434c87053b" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "3df69ea15defeb820ba0823dc80513e75a79b049dee023b51dee4419cd1d2276": { + "signature": "3df69ea15defeb820ba0823dc80513e75a79b049dee023b51dee4419cd1d2276", + "alternativeSignatures": [ + "deb5cfe250ae8f9c1bbcdf230c425dc071067ee26cc7b3d41b9fc078782febfc" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "c2b86ae10a9ad117f56bf792ae0a8a99bfbe1945254d156dd685e41dc74dd5ed": { + "signature": "c2b86ae10a9ad117f56bf792ae0a8a99bfbe1945254d156dd685e41dc74dd5ed", + "alternativeSignatures": [ + "7c13381c5c5bf98666c53e6497f0d6c8b2463fd2d7e0a0084edce348edb2a98b" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "7ec5369cb17143314826ef4e433320ab257e00485568fed9ca59d6ddf1ad166a": { + "signature": "7ec5369cb17143314826ef4e433320ab257e00485568fed9ca59d6ddf1ad166a", + "alternativeSignatures": [ + "7e1528556c5286830d73b23164ea8c99103c6344228bb91390c9943cb6090ff3" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "e71596904ef990bac717b0973b8fd3e36d52b3a45713bf8babb88f1ab0493360": { + "signature": "e71596904ef990bac717b0973b8fd3e36d52b3a45713bf8babb88f1ab0493360", + "alternativeSignatures": [ + "ff25e34637fb05921a126d3143eef03b8006f580e993ef5a7d2e27ec5178ee9a" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "32eb952e8561b331092ec83b626102388202071d192f9eb22c233b06ea90d2a1": { + "signature": "32eb952e8561b331092ec83b626102388202071d192f9eb22c233b06ea90d2a1", + "alternativeSignatures": [ + "cce04b0a7c54b775c1464a32d85804de7d1777ac2a6d21da8b080c29ac46162c" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "7d3c27b6bd42f58e624890a1669c188c6afee080e6330673942d364641876d52": { + "signature": "7d3c27b6bd42f58e624890a1669c188c6afee080e6330673942d364641876d52", + "alternativeSignatures": [ + "29d9fec9e2b10d721512bb68a68759baa33b6bbc0683a2d3d5cdcb74894917ee" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "42c9ee2033a50a53e2fcc83cb08b3a8c38a5c9e2230414ae0590d3c8f45a9a8d": { + "signature": "42c9ee2033a50a53e2fcc83cb08b3a8c38a5c9e2230414ae0590d3c8f45a9a8d", + "alternativeSignatures": [ + "44e2cd3b2773d63b155f2093202415744b74f8b5c47612ad92f2ffee3939cb2f" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "ea00dd596b6f25ad7fb56f8433aa4889808c48a9d753eeb896438d871f1bbadf": { + "signature": "ea00dd596b6f25ad7fb56f8433aa4889808c48a9d753eeb896438d871f1bbadf", + "alternativeSignatures": [ + "e6e7be75b6234262188b18265bdef3aca61e7ad4b9e0712b34ad9af2605ff5bf" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "b4e3d369cd32329e640bc7984528cdda54a9bdea2b52a5c3ed026fc57be64afd": { + "signature": "b4e3d369cd32329e640bc7984528cdda54a9bdea2b52a5c3ed026fc57be64afd", + "alternativeSignatures": [ + "8f19b3c3b99054f4c34e62dbb042d4505190bae61f7c815659e825e1e3f6585d" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "869eabde635eff83abaf3ceae639a4dfe5b6e1fc2be56bde177999b341ee7fa7": { + "signature": "869eabde635eff83abaf3ceae639a4dfe5b6e1fc2be56bde177999b341ee7fa7", + "alternativeSignatures": [ + "879cee54b1ce34bf674d7bea56317d5e606a8a6d1909e28831a801c3c760547c" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "c30ea658de240cc77f43da72a2ae66a8300716df1a36e5aad2ccf0041405512b": { + "signature": "c30ea658de240cc77f43da72a2ae66a8300716df1a36e5aad2ccf0041405512b", + "alternativeSignatures": [ + "f9010fdbf887fec3fb12dc784714ae4993cfbb0c279ceb32de179be14113851c" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "29a080743f4448e5fb1c2556f824a2f4950ec05ae1d5baa76157bc6425e08a1e": { + "signature": "29a080743f4448e5fb1c2556f824a2f4950ec05ae1d5baa76157bc6425e08a1e", + "alternativeSignatures": [ + "f6f78c526c85382e749badcc83d5d3e81976879e727417fef1b81b83faec67f0" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "5c1de06651f26dcbfaa7256b674dc725934d1892a58ab1655fed98c7d062c84c": { + "signature": "5c1de06651f26dcbfaa7256b674dc725934d1892a58ab1655fed98c7d062c84c", + "alternativeSignatures": [ + "6435a356edc13cd3ae7609656ff1920116c1f944e1d63b2ceec921d4e3f6464d" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "dd15f0a91faa86197e2bc286d99e9b0e5e625930ad53a5fae4e0a8c2b80b91ee": { + "signature": "dd15f0a91faa86197e2bc286d99e9b0e5e625930ad53a5fae4e0a8c2b80b91ee", + "alternativeSignatures": [ + "6252f589ff1cb3d68f758c8f081fd3e59d8cc56bfaa29441b9e26b1cd5726faa" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "3db9957bb879335816149b88a3fed78468210e7480dd31db37845b97d28078ad": { + "signature": "3db9957bb879335816149b88a3fed78468210e7480dd31db37845b97d28078ad", + "alternativeSignatures": [ + "4c6e2de131da98d97f9f4ab9a07fb90f6ca478f578d0bd4da7a7551683c886d7" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "cda6b64f47374712a1488b1ca527f54310e135ceb7e4611e75f28aed7f4edd43": { + "signature": "cda6b64f47374712a1488b1ca527f54310e135ceb7e4611e75f28aed7f4edd43", + "alternativeSignatures": [ + "c7c9b966693a21385b7c2f4a36c5c3c6a410cda29716d1c10537f6463cb852af" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "61eab78163233a43bc21bf8a2a762496cd63758852ed1afcfe73d4ebd90532e9": { + "signature": "61eab78163233a43bc21bf8a2a762496cd63758852ed1afcfe73d4ebd90532e9", + "alternativeSignatures": [ + "2584c057a56958edc47e8f9ed26ed2e4b2fbee706d4a5fe6793d42044754f016" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "201a1737b9cd0a61c986dc37678141a290fe56e518c4d7401443d83f89635758": { + "signature": "201a1737b9cd0a61c986dc37678141a290fe56e518c4d7401443d83f89635758", + "alternativeSignatures": [ + "3b2032f4ca90c12c9b5ea35ac6e85ba10a32f7d018b39369e044ae4d039e000b" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "bcb0788172282f0f5ab22907ec5070573092309654c8eb07dc92fb4e676ded80": { + "signature": "bcb0788172282f0f5ab22907ec5070573092309654c8eb07dc92fb4e676ded80", + "alternativeSignatures": [ + "8c37a63c016612477d48726a77b74eb798e45c09e6c2212fbd57ca10aa88dd59" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "5dc266c64bff96e86a1a3907386531e16f0dcf38f5b1bcdba22f45e7965c6bf7": { + "signature": "5dc266c64bff96e86a1a3907386531e16f0dcf38f5b1bcdba22f45e7965c6bf7", + "alternativeSignatures": [ + "ad996650f8e2b17aeddcea222c0861f9cb257aee49f31e01a4de573d23e1b0fb" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "845ca607828540eafa4053b4f9368b97c23258b9b47ceecbcec8bd7e5aa59302": { + "signature": "845ca607828540eafa4053b4f9368b97c23258b9b47ceecbcec8bd7e5aa59302", + "alternativeSignatures": [ + "c2cb1a24bf7f267ad949c325feaf69f29f60dd019f1b3879391f85f7d5316800" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "89bed4bb6776c3155318e4ff38e5062f655834cebcdf6f65b08cbd2312ac75f8": { + "signature": "89bed4bb6776c3155318e4ff38e5062f655834cebcdf6f65b08cbd2312ac75f8", + "alternativeSignatures": [ + "c805484f8267753ac6867fe334b6ecfa42d2430b21488501a926b9d49a679bb1" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "c2496232c1468a250e567517e0a7a71632e3ed60330784450511cef2a1164af0": { + "signature": "c2496232c1468a250e567517e0a7a71632e3ed60330784450511cef2a1164af0", + "alternativeSignatures": [ + "723a97522d855b779b011a0a6f84ea1ee7cf77d05f2b4808ffdbd521e655e6e3" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "e75c5f821dc59179ed407ca3da917756cd0cff7aac1755df7ef0ef6bf087f80c": { + "signature": "e75c5f821dc59179ed407ca3da917756cd0cff7aac1755df7ef0ef6bf087f80c", + "alternativeSignatures": [ + "420deccac3e08a232a59caa2178b503d310d2645f847150b564dc8e02b28fbee" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "ad85fce8c033defdd63db5aa4ec2b2197bbf9310b506241e88bcd48b5a3b41da": { + "signature": "ad85fce8c033defdd63db5aa4ec2b2197bbf9310b506241e88bcd48b5a3b41da", + "alternativeSignatures": [ + "784f946934a1f42d820c8a61ac865a094d735d0cfcca4c88fe10482306abf958" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "316329783213340b7da3052b8177bd48e10a05bf242da08dc6f9785361be2389": { + "signature": "316329783213340b7da3052b8177bd48e10a05bf242da08dc6f9785361be2389", + "alternativeSignatures": [ + "2f83c91b8c20ef743240ee45997e2af37d73a0dd99d2ea345794960d775b567d" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "2db32a47c814adc0ee80e257e1cb878a9054b92e6809cd9231690856066bcb33": { + "signature": "2db32a47c814adc0ee80e257e1cb878a9054b92e6809cd9231690856066bcb33", + "alternativeSignatures": [ + "249d66492a4d48df01ea2c04aa25e302ad17daf74d130194bec5a90405111da4" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "d2e9bf6a7e357eb1b1d594a06ed00bdf9fa193110f08e45f8e748427a370bfba": { + "signature": "d2e9bf6a7e357eb1b1d594a06ed00bdf9fa193110f08e45f8e748427a370bfba", + "alternativeSignatures": [ + "41a0e4c2bbd23190b2ebaf6163c0a9471f126cd6c2144e8377d9cb1bf0a391ef" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "c1e109d2139e82ef8545bb12a0431f4d25f2a805c9b5f71523515dbbb0be9fc3": { + "signature": "c1e109d2139e82ef8545bb12a0431f4d25f2a805c9b5f71523515dbbb0be9fc3", + "alternativeSignatures": [ + "69b330936de5c13b57fd7f0f7590a7e66efa3dba98715b5f07d8953662df5025" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "ec60cc4e84b44896c9f5a516e705340feebdaa61be024c82b07b546d3ad0c276": { + "signature": "ec60cc4e84b44896c9f5a516e705340feebdaa61be024c82b07b546d3ad0c276", + "alternativeSignatures": [ + "f9c44b75edceaeaae9611fd772b6774ce086227bb3b758dd3844c57511fb2e7a" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "5184980ee9ace427259fcaa3ee796a48efb25a7141fc16426c08dbc8903dbca9": { + "signature": "5184980ee9ace427259fcaa3ee796a48efb25a7141fc16426c08dbc8903dbca9", + "alternativeSignatures": [ + "0610a76e8ba9f8fef499d2364bac7db02436cc8f89cee26eac4c6c2c6cab952c" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "148a534bb099170811f8dcc0d51c1caa399488739a5ee98fb12bee51c7a9244d": { + "signature": "148a534bb099170811f8dcc0d51c1caa399488739a5ee98fb12bee51c7a9244d", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "1d9de8cd0e3cf1749dc40ad234b9d84e263f241dbcd8b35320808c8381840c3a": { + "signature": "1d9de8cd0e3cf1749dc40ad234b9d84e263f241dbcd8b35320808c8381840c3a", + "alternativeSignatures": [ + "8af561a51ebf9394b93708f512784edbbaa8c13872c2f56da4c5b418f71ad34d" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "d71d8881e3ad39939ff9894639cdc0012d968b48038b872ca7eba15ba93cbfe9": { + "signature": "d71d8881e3ad39939ff9894639cdc0012d968b48038b872ca7eba15ba93cbfe9", + "alternativeSignatures": [ + "bea919b0d9a2e6c38a6de6300616becf31809eaa49616e63ab90118b5ec331eb" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "4dbb69e7a5bbcaf97ee14aa268f0cc4b375111db79d91bc48b438f15e7f29859": { + "signature": "4dbb69e7a5bbcaf97ee14aa268f0cc4b375111db79d91bc48b438f15e7f29859", + "alternativeSignatures": [ + "52e95c355d30e2e33b6ad0cf11af5c31db038107a89dd120854c94857aa2298b" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "2960b8fc6b1f6665b5988544f1d44a05dfe83b9b39a14efef5e042d7a78e4e19": { + "signature": "2960b8fc6b1f6665b5988544f1d44a05dfe83b9b39a14efef5e042d7a78e4e19", + "alternativeSignatures": [ + "b4177488d7a45f4a54472adf8bb97026f0799e61e10f580ea52fbbd74cf08f10" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "c1c411bf7b80d684d2c444ed611f333f08f1073fbaaf4c6bd0238c16ffccbe4d": { + "signature": "c1c411bf7b80d684d2c444ed611f333f08f1073fbaaf4c6bd0238c16ffccbe4d", + "alternativeSignatures": [ + "8ca9e6612eb3802d5c1fd93ce0f1de61c2559512966fc97dcbeb017d1942c0fe" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "a0437af80b26a79fc6c7e101114a0a455bd0bc7a4e9ccea1fa3b355aaac07390": { + "signature": "a0437af80b26a79fc6c7e101114a0a455bd0bc7a4e9ccea1fa3b355aaac07390", + "alternativeSignatures": [ + "495012003aa9faede4c4ad115a12784f6a8f549e1ebe976537b021d6e5296da9" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "0df8574205ace03dd154be3c3a221b36feae675ac237c8fea3b994f48df75fb8": { + "signature": "0df8574205ace03dd154be3c3a221b36feae675ac237c8fea3b994f48df75fb8", + "alternativeSignatures": [ + "15f5632806a855b11f25dc0c899f5f3982b9f92340841b85b35f9f5666c36921" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "851935ee9fe368011d0d65b595a839000849d57904224cd947664078ba46874d": { + "signature": "851935ee9fe368011d0d65b595a839000849d57904224cd947664078ba46874d", + "alternativeSignatures": [ + "c8aefc4c57da1e828bfa02df6e1abc444cc98f2e9ba3f1b0bb4a4f0c04d1fab0" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "ba2a917a447947c7e8598dc49f18f6a918548051ed56fb0f38d801f52ebdaef0": { + "signature": "ba2a917a447947c7e8598dc49f18f6a918548051ed56fb0f38d801f52ebdaef0", + "alternativeSignatures": [ + "0460e5c64d667a95521ca05da96915a79178a361764141acf4bf7c4a75c3e47e" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "91b70c20fca1cd70bc4d7a34ba446f9a79d78c3c73ed708750062fe49a55324e": { + "signature": "91b70c20fca1cd70bc4d7a34ba446f9a79d78c3c73ed708750062fe49a55324e", + "alternativeSignatures": [ + "c884dc16288b0bfa8d5e7f06638c7c61a16bc42328f5a32c43f1d39c38da31f8" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "519f950c7bea3463674233b674b3093990f25167389e2d1ea82cfdf5b0ad0abf": { + "signature": "519f950c7bea3463674233b674b3093990f25167389e2d1ea82cfdf5b0ad0abf", + "alternativeSignatures": [ + "e3af28a3737f3eda0c96f52925a36770b7ccc6f3238b4ea855ce4b1d0e6e8f4b" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "192073ddefc720c7b9af682598676a54d54492be32707bf4bef8b3233e8aa1bb": { + "signature": "192073ddefc720c7b9af682598676a54d54492be32707bf4bef8b3233e8aa1bb", + "alternativeSignatures": [ + "795fa0e8fdbd60d899b1372eb853ec5b0b9b32c2f9117364c2f63856b7b17763" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "85c9f67cf21f805e1e507792f3b78c20703a374e04a7a50a071250d75a3a34c5": { + "signature": "85c9f67cf21f805e1e507792f3b78c20703a374e04a7a50a071250d75a3a34c5", + "alternativeSignatures": [ + "e387a1c8ec270a1be5c6048f2759118f30d2f43efceec3fae2aa37c892352391" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "000bea6b6816c3cf71200ceeccd187ac5d43172eb225d70b53f27cf94e4e0091": { + "signature": "000bea6b6816c3cf71200ceeccd187ac5d43172eb225d70b53f27cf94e4e0091", + "alternativeSignatures": [ + "977df07ec18dc533ce706b09124ec76a13719ca51a7e101762a0fb49c99b6985" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "cc40ef86620baaad1faea5a6f3f6b19268b9e8f2fe7169c37dd9d1b1216225b5": { + "signature": "cc40ef86620baaad1faea5a6f3f6b19268b9e8f2fe7169c37dd9d1b1216225b5", + "alternativeSignatures": [ + "154f374516f141697b001546e7871a8f6377f3da5d8a42565fc035fcacbc9d22" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "f4c4a77a4a11940d05fa6484e202593866f3cc943f0679506a6dfbf3e2e3f254": { + "signature": "f4c4a77a4a11940d05fa6484e202593866f3cc943f0679506a6dfbf3e2e3f254", + "alternativeSignatures": [ + "70e7d79088b1beda828977ecbbfd908e56848a3f7b0963dcbabb087c49ad650c" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "7918a138214555e83a85a32519dd6fc31971b28aa956f66583194530de8b009c": { + "signature": "7918a138214555e83a85a32519dd6fc31971b28aa956f66583194530de8b009c", + "alternativeSignatures": [ + "479b344b41e42fb75f1205d3643792af4211d89a7881dfac007fd6c7c5358e09" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "fa7347c7f64562b9d7e0be884bcc9d60232f6995b2139a052bf4b8cfcc3d424a": { + "signature": "fa7347c7f64562b9d7e0be884bcc9d60232f6995b2139a052bf4b8cfcc3d424a", + "alternativeSignatures": [ + "8926b16a96043571d926ccc99741a5844bb54b1215ccc929568d2dc528da9e40" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "3c494c3cdc3d2ab897a96f5b498fbf1731ba2c6dcc73e49399083635bc084e8a": { + "signature": "3c494c3cdc3d2ab897a96f5b498fbf1731ba2c6dcc73e49399083635bc084e8a", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "8bb20ad2a210dc906e39ceb48b0a6a39b240878688ad6854161240ae3a597c87": { + "signature": "8bb20ad2a210dc906e39ceb48b0a6a39b240878688ad6854161240ae3a597c87", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "486f45a6c6f00cc927a87f4b7b122829bee893d6f523fed279e7e2deda450aff": { + "signature": "486f45a6c6f00cc927a87f4b7b122829bee893d6f523fed279e7e2deda450aff", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "643ded93447723ad1faad1de45b19108d986db08e488174a5422f3f1f7f0f7a3": { + "signature": "643ded93447723ad1faad1de45b19108d986db08e488174a5422f3f1f7f0f7a3", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "51d877cdee6cab498e1a0fd4c4dd2702b3e5da9eb308e0a631d2104e2d3d2a8c": { + "signature": "51d877cdee6cab498e1a0fd4c4dd2702b3e5da9eb308e0a631d2104e2d3d2a8c", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "849b1bea0ba2f8d1c24a58896b9d230ca317e8cff7e9540f73d578dd1aba12cb": { + "signature": "849b1bea0ba2f8d1c24a58896b9d230ca317e8cff7e9540f73d578dd1aba12cb", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "c535332f090c89ae22a79aac4b9d344333c5479b891b79d72d252611c9364450": { + "signature": "c535332f090c89ae22a79aac4b9d344333c5479b891b79d72d252611c9364450", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "bc8ce9f1fd92dd123db1b6f8c33d15123bc8f3c4cb4fd42c54b4a2c5210bb158": { + "signature": "bc8ce9f1fd92dd123db1b6f8c33d15123bc8f3c4cb4fd42c54b4a2c5210bb158", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "9507f913c4445bebb9bdd471960011afa198c1e42d19c45d44aea58af61a137d": { + "signature": "9507f913c4445bebb9bdd471960011afa198c1e42d19c45d44aea58af61a137d", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "9ac9e0a5efc7c0d1e6d89422ca8e70e913eaba647ef42650f0bbc50da080a556": { + "signature": "9ac9e0a5efc7c0d1e6d89422ca8e70e913eaba647ef42650f0bbc50da080a556", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "5d49433b67f4a2f1b6b323c498722d16aeda2d8781dafe9fcb9faaf9db4ee3e1": { + "signature": "5d49433b67f4a2f1b6b323c498722d16aeda2d8781dafe9fcb9faaf9db4ee3e1", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "71ee57f56c77339e4a0cb3f5bdfd05d15191136fc8ad887cef26fe1488522529": { + "signature": "71ee57f56c77339e4a0cb3f5bdfd05d15191136fc8ad887cef26fe1488522529", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "74b8ab85959da39f4da6710c6375080c44c8929d6b68f59a06dede355aeffacc": { + "signature": "74b8ab85959da39f4da6710c6375080c44c8929d6b68f59a06dede355aeffacc", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "ca37e6fb6eb26bdec92893b3f6b08f8f41e6241f573a1b8e14d4e4d4ff1d2c7a": { + "signature": "ca37e6fb6eb26bdec92893b3f6b08f8f41e6241f573a1b8e14d4e4d4ff1d2c7a", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "d7657bb2e0603e7b353f7b1e1d884306fe44f116c7665192fd6b33003333ef7a": { + "signature": "d7657bb2e0603e7b353f7b1e1d884306fe44f116c7665192fd6b33003333ef7a", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "90b7e7a132c8df4864a9ee49670cbaec9cbc5f5c53bf009eba5a583e0934a24f": { + "signature": "90b7e7a132c8df4864a9ee49670cbaec9cbc5f5c53bf009eba5a583e0934a24f", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "8a5003e2db05146eaba3a7fc7aba715f51a5506b741a6ac2662e47e39c6165aa": { + "signature": "8a5003e2db05146eaba3a7fc7aba715f51a5506b741a6ac2662e47e39c6165aa", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "02590eb0efbb241f09bae58f60907c6dee5b33507519a4be87e168a458c2b9cb": { + "signature": "02590eb0efbb241f09bae58f60907c6dee5b33507519a4be87e168a458c2b9cb", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "df250772236d85876a9d789cca90b48e5eb79ad6cb13782465c8c88366c5d845": { + "signature": "df250772236d85876a9d789cca90b48e5eb79ad6cb13782465c8c88366c5d845", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "3cd8e3eb9b94b01c93591c685406ea91d9d31b16aace0f109734e4bacb3838f2": { + "signature": "3cd8e3eb9b94b01c93591c685406ea91d9d31b16aace0f109734e4bacb3838f2", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "e91e45a96bf36327f551eadf27d9598b3d058fc051b0f9f0f1da9420410dc79a": { + "signature": "e91e45a96bf36327f551eadf27d9598b3d058fc051b0f9f0f1da9420410dc79a", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "1c8a3d52bb83c1fbd1208b94663769b6452e73988540113dff20bfb4df4ca010": { + "signature": "1c8a3d52bb83c1fbd1208b94663769b6452e73988540113dff20bfb4df4ca010", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "8839c1c5ab6e962faf123ad7b79a584170d6491855f69555664986a425984a36": { + "signature": "8839c1c5ab6e962faf123ad7b79a584170d6491855f69555664986a425984a36", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "d2df996be35f179b45a3bdc28fcd9d5254a924ab52d2ca14b068bfea35e65284": { + "signature": "d2df996be35f179b45a3bdc28fcd9d5254a924ab52d2ca14b068bfea35e65284", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "7a20b01096651f581c51904be7cd1281150c40efc61352b70aabbca3c40ea177": { + "signature": "7a20b01096651f581c51904be7cd1281150c40efc61352b70aabbca3c40ea177", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "ef394eaa05e6eb5af1f5e523fd01f4e970f36cb2c7eacb3d363b47c9f70b0fec": { + "signature": "ef394eaa05e6eb5af1f5e523fd01f4e970f36cb2c7eacb3d363b47c9f70b0fec", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "cb83a69b59f2de3fa1d049750ddeb855030d5662c43a1c5fea6b95f01e21547f": { + "signature": "cb83a69b59f2de3fa1d049750ddeb855030d5662c43a1c5fea6b95f01e21547f", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "d08376cdfec80b5c0884a8b85f18c8b34ffee19f1395d12aef1ffc2821120f03": { + "signature": "d08376cdfec80b5c0884a8b85f18c8b34ffee19f1395d12aef1ffc2821120f03", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "ef471993ee9839701feba16b5b56a926545a165bf95224130d6c8a2bdafdd451": { + "signature": "ef471993ee9839701feba16b5b56a926545a165bf95224130d6c8a2bdafdd451", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "d742600df5b4b6b71f65cf0079b09ec36a5d58bb4b8b07923b13ab8458f68a15": { + "signature": "d742600df5b4b6b71f65cf0079b09ec36a5d58bb4b8b07923b13ab8458f68a15", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "fd9536ec348269dbb12b813270403b7410fc13575d1cbb7770604dcf54ee776b": { + "signature": "fd9536ec348269dbb12b813270403b7410fc13575d1cbb7770604dcf54ee776b", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "1614f1f0821f8900c7c8d2cb3a784272518ef6b86fb82070bda88b4bac9dbda8": { + "signature": "1614f1f0821f8900c7c8d2cb3a784272518ef6b86fb82070bda88b4bac9dbda8", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "3479973e9ab00c84264e70c5d7290a5bfda506aafdb08c3277cb1df5db688ab9": { + "signature": "3479973e9ab00c84264e70c5d7290a5bfda506aafdb08c3277cb1df5db688ab9", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "e5bd231f55be121ed2579da9651c4ec0e661a386991ef8463facf3588c306a06": { + "signature": "e5bd231f55be121ed2579da9651c4ec0e661a386991ef8463facf3588c306a06", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "19661fe89c5e1f59089cdec06cbdf6bdda2439b52731dfd630b50ff5885d6223": { + "signature": "19661fe89c5e1f59089cdec06cbdf6bdda2439b52731dfd630b50ff5885d6223", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "3bf81d57b0872ef6c8ac7878513cb8f58044e07238883f71f24b09542a8d1a07": { + "signature": "3bf81d57b0872ef6c8ac7878513cb8f58044e07238883f71f24b09542a8d1a07", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "2e07fdf491a04fc8a6cc50ae299f8345a81798499bda961a118e974970bb71a8": { + "signature": "2e07fdf491a04fc8a6cc50ae299f8345a81798499bda961a118e974970bb71a8", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "560fdab2979120fa3cfd2d9865d1ce2c0ba164982cc086cdc871b7e16fd12466": { + "signature": "560fdab2979120fa3cfd2d9865d1ce2c0ba164982cc086cdc871b7e16fd12466", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "489c5d92c47b3c961db0d5c32426a4d5fb48311e46ae49791be0f6ef03ddfc6e": { + "signature": "489c5d92c47b3c961db0d5c32426a4d5fb48311e46ae49791be0f6ef03ddfc6e", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "5890ec8b0f533c8186a824f1b46b2d99c2d54e7ed09917e5fedcdaea19b34706": { + "signature": "5890ec8b0f533c8186a824f1b46b2d99c2d54e7ed09917e5fedcdaea19b34706", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "70a8cd9f176fa02a78470ae78c285f56b617060ec339f0c8dfda095a5b0fc6c9": { + "signature": "70a8cd9f176fa02a78470ae78c285f56b617060ec339f0c8dfda095a5b0fc6c9", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "7afd296a74705d2e561497c0ab8c3750179c1eff425f496297d3b877ff718526": { + "signature": "7afd296a74705d2e561497c0ab8c3750179c1eff425f496297d3b877ff718526", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "6ffd69e0724ed3b57e926224932b0aeeed7a834ee5dc1ad24c3262deb49172d7": { + "signature": "6ffd69e0724ed3b57e926224932b0aeeed7a834ee5dc1ad24c3262deb49172d7", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "ca298b6b96ebfae8f14e29993264310b89fd738b365c2e7ca04e7af1a5cd67b7": { + "signature": "ca298b6b96ebfae8f14e29993264310b89fd738b365c2e7ca04e7af1a5cd67b7", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "8764975fced41745e1a9c844144b2aacd30d3fcd77a8c4b1067adc5f2cd8b990": { + "signature": "8764975fced41745e1a9c844144b2aacd30d3fcd77a8c4b1067adc5f2cd8b990", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "7cc3b3782554547d94e0f2e8817dbf823a84de8a95b6b358bdd29067bcff64c3": { + "signature": "7cc3b3782554547d94e0f2e8817dbf823a84de8a95b6b358bdd29067bcff64c3", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "db15b8200219494e427c3943404a81e931bf17af175823bc51da9b85b63a6831": { + "signature": "db15b8200219494e427c3943404a81e931bf17af175823bc51da9b85b63a6831", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "979582e68b87ec6e4cd7d90df4e05f01a6f9150ed07a0abc205112a241f0c16f": { + "signature": "979582e68b87ec6e4cd7d90df4e05f01a6f9150ed07a0abc205112a241f0c16f", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "56b251ecea166720fac682142922d79e01699a8cc576683b6d8944dfd3158de2": { + "signature": "56b251ecea166720fac682142922d79e01699a8cc576683b6d8944dfd3158de2", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "cbcd76cbd2a6b0a8028fd6c3d1d11ee2e211519af2420396399c3c111a4da667": { + "signature": "cbcd76cbd2a6b0a8028fd6c3d1d11ee2e211519af2420396399c3c111a4da667", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "8060e90601237ded928ae57570ef982dd3a57e7bffbec010fcd37e0bda518f10": { + "signature": "8060e90601237ded928ae57570ef982dd3a57e7bffbec010fcd37e0bda518f10", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "bc4b0a2231b13e5472e1548250ef4d7174d130daf559bca81f5d3c2c0c169690": { + "signature": "bc4b0a2231b13e5472e1548250ef4d7174d130daf559bca81f5d3c2c0c169690", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "91f0752674a19d0db604c50e23950746ff4d231cc76e40a7fa0f53dd5e855f4d": { + "signature": "91f0752674a19d0db604c50e23950746ff4d231cc76e40a7fa0f53dd5e855f4d", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "889e33f8e52ecb1d2b98d28772c572c2a10f0dc0c22fcc03b1da03df008d5f91": { + "signature": "889e33f8e52ecb1d2b98d28772c572c2a10f0dc0c22fcc03b1da03df008d5f91", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "6969ae787ed7e1caef670545de569929814479666e60a227abcb36395c3d3f60": { + "signature": "6969ae787ed7e1caef670545de569929814479666e60a227abcb36395c3d3f60", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "81adfccafd8eb134b75b59de6d4d0d8198c4639a3972d8072b61c67c9e1a104d": { + "signature": "81adfccafd8eb134b75b59de6d4d0d8198c4639a3972d8072b61c67c9e1a104d", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "cf0223227addcd8b17bc89e4e5f0ee9174bca83c9ffc5b5493ef74940b33b58c": { + "signature": "cf0223227addcd8b17bc89e4e5f0ee9174bca83c9ffc5b5493ef74940b33b58c", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "fc000248c70e613f381ee770fb96dfd28e26766fa9627d28e5b9eb5fb314a3c8": { + "signature": "fc000248c70e613f381ee770fb96dfd28e26766fa9627d28e5b9eb5fb314a3c8", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "2987ea627ea4f2effb417244c4aac8f554bf42136d6ebe0fef1df440410be09c": { + "signature": "2987ea627ea4f2effb417244c4aac8f554bf42136d6ebe0fef1df440410be09c", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "4c2880cbace8da677942b80be039a982e356c18c827ebeddab265175c9640427": { + "signature": "4c2880cbace8da677942b80be039a982e356c18c827ebeddab265175c9640427", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "849ea2c1bdff1b36df8848a7f8898f11e981c3ba8f9b033abd9d1e8b1a03c8ca": { + "signature": "849ea2c1bdff1b36df8848a7f8898f11e981c3ba8f9b033abd9d1e8b1a03c8ca", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "1706aea6ec9bfbbe540cfab3713db9b1a9ebc7f475b49f2348860e3ee6d8e682": { + "signature": "1706aea6ec9bfbbe540cfab3713db9b1a9ebc7f475b49f2348860e3ee6d8e682", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "8369054f43a96d4f463976b23773b2d22f8081d95f715161f019ceb58296d64a": { + "signature": "8369054f43a96d4f463976b23773b2d22f8081d95f715161f019ceb58296d64a", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "4ab520e2ed77b36c88f9eeeb5473205fd7f8f0a761eacee4cbbff389368dad8f": { + "signature": "4ab520e2ed77b36c88f9eeeb5473205fd7f8f0a761eacee4cbbff389368dad8f", + "alternativeSignatures": [ + "7ad51ffeb7d5438f15781162de5183c58d5db2d195f96e8c3527451adeb4e02c" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "96ab8bbaf30065be77880d679174d028a151c0fc888fca38a79038d341710563": { + "signature": "96ab8bbaf30065be77880d679174d028a151c0fc888fca38a79038d341710563", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "7bda7ae4037698bbdf188b4d3fb8a82e99063a8df2dcfe5f66ef747e3bd3f1a0": { + "signature": "7bda7ae4037698bbdf188b4d3fb8a82e99063a8df2dcfe5f66ef747e3bd3f1a0", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "a2dcb4a5d7e266049f9f865b27e69af19447e94f63ec9de8290763ddf901c756": { + "signature": "a2dcb4a5d7e266049f9f865b27e69af19447e94f63ec9de8290763ddf901c756", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "3aaf66a9a1f5bfba3b78eb7964ce8bf4dcabf7132465a31e219c6961f53dec56": { + "signature": "3aaf66a9a1f5bfba3b78eb7964ce8bf4dcabf7132465a31e219c6961f53dec56", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "c6ed8bf76382b72621892d895d0659eb8ed66ef400f5d38506a3b62129b0f60e": { + "signature": "c6ed8bf76382b72621892d895d0659eb8ed66ef400f5d38506a3b62129b0f60e", + "alternativeSignatures": [ + "07873a6bbdd04caf121ed279cd4c24e55fb79ae3e86083c413b839d8d5e81cba" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "c511a0f0c15b79748a62ee0198689e7a0c8c2af102730c337823f6cd52b3ec66": { + "signature": "c511a0f0c15b79748a62ee0198689e7a0c8c2af102730c337823f6cd52b3ec66", + "alternativeSignatures": [ + "7142b2e2126a0c0e5bf2ad08e9e56d405620fbb9f12dfcd3f90a9dfcc30f8bf5" + ], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "bfe258b52e19062b9009a68549bff3b2c99a6105f493cbf14332b3366691d446": { + "signature": "bfe258b52e19062b9009a68549bff3b2c99a6105f493cbf14332b3366691d446", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "52364f6839cf4bc824f1c82a31f3c7ee1cfb228383b3bee476ef7442526c0de8": { + "signature": "52364f6839cf4bc824f1c82a31f3c7ee1cfb228383b3bee476ef7442526c0de8", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "cef12040ed2c91d3bd7eba717e6c4bff8e547cb6d2b40363f1d859b02c873276": { + "signature": "cef12040ed2c91d3bd7eba717e6c4bff8e547cb6d2b40363f1d859b02c873276", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "ab290d190fa6582f2826c9b8524a4013ea67380f65328bc39c31dbcba59ec63c": { + "signature": "ab290d190fa6582f2826c9b8524a4013ea67380f65328bc39c31dbcba59ec63c", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "710963884a4d1e73d1ff4da0db7e1c8e1eeae25fe4a9e3c1de8b5019bb5d9d74": { + "signature": "710963884a4d1e73d1ff4da0db7e1c8e1eeae25fe4a9e3c1de8b5019bb5d9d74", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "db276fb1ea2a8e74e7ab80522362b8f402d361652ca823d7cab59465d038eb82": { + "signature": "db276fb1ea2a8e74e7ab80522362b8f402d361652ca823d7cab59465d038eb82", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "807277ed6647bcdc3eab2e24d8fbcaca0a6506d2ed455248b0497ceb42831e30": { + "signature": "807277ed6647bcdc3eab2e24d8fbcaca0a6506d2ed455248b0497ceb42831e30", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "685288ad132baddbcdf7a2201960f6d48805151f1aef2e094c4dbc16841b3e54": { + "signature": "685288ad132baddbcdf7a2201960f6d48805151f1aef2e094c4dbc16841b3e54", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "e972eb97ea7ea4a9524820036a42557f13a48240b6083c7baa0d465c00adfdee": { + "signature": "e972eb97ea7ea4a9524820036a42557f13a48240b6083c7baa0d465c00adfdee", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + }, + "1b2c907630acaff5b6e62eb4895043c82e93d885331f1f46296812634fd30abe": { + "signature": "1b2c907630acaff5b6e62eb4895043c82e93d885331f1f46296812634fd30abe", + "alternativeSignatures": [], + "memberOf": [ + "default" + ], + "createdDate": "2024-04-03 14:41:43Z" + } + } +} \ No newline at end of file diff --git a/src/SourceBuild/content/eng/Versions.props b/src/SourceBuild/content/eng/Versions.props index 54b507d2d..a78403a54 100644 --- a/src/SourceBuild/content/eng/Versions.props +++ b/src/SourceBuild/content/eng/Versions.props @@ -30,7 +30,7 @@ These URLs can't be composed from their base URL and version as we read them from the prep.sh and pipeline scripts, outside of MSBuild. --> - https://dotnetcli.azureedge.net/source-built-artifacts/assets/Private.SourceBuilt.Artifacts.8.0.102-servicing.24073.1.centos.8-x64.tar.gz - https://dotnetcli.azureedge.net/source-built-artifacts/sdks/dotnet-sdk-8.0.102-centos.8-x64.tar.gz + https://dotnetcli.azureedge.net/source-built-artifacts/assets/Private.SourceBuilt.Artifacts.8.0.105-servicing.24224.1.centos.9-x64.tar.gz + https://dotnetcli.azureedge.net/source-built-artifacts/sdks/dotnet-sdk-8.0.105-centos.9-x64.tar.gz diff --git a/src/SourceBuild/content/eng/pipelines/ci.yml b/src/SourceBuild/content/eng/pipelines/ci.yml index 55b6a212d..0bf7fda81 100644 --- a/src/SourceBuild/content/eng/pipelines/ci.yml +++ b/src/SourceBuild/content/eng/pipelines/ci.yml @@ -15,10 +15,31 @@ pr: - release/* - internal/release/* -stages: -- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - template: templates/stages/vmr-scan.yml +resources: + repositories: + - repository: 1ESPipelineTemplates + type: git + name: 1ESPipelineTemplates/1ESPipelineTemplates + ref: refs/tags/release -- template: /src/installer/eng/pipelines/templates/stages/vmr-build.yml +extends: + template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates parameters: - isBuiltFromVmr: true + sdl: + sourceAnalysisPool: + name: NetCore1ESPool-Internal + image: 1es-windows-2022 + os: windows + + baseline: + baselineFile: $(Build.SourcesDirectory)\.config\guardian\.gdnbaselines + + customBuildTags: + - ES365AIMigrationTooling + + stages: + - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: /eng/pipelines/templates/stages/vmr-scan.yml@self + - template: /src/installer/eng/pipelines/templates/stages/vmr-build.yml@self + parameters: + isBuiltFromVmr: true diff --git a/src/SourceBuild/content/eng/pipelines/pr.yml b/src/SourceBuild/content/eng/pipelines/pr.yml new file mode 100644 index 000000000..dcebbcf54 --- /dev/null +++ b/src/SourceBuild/content/eng/pipelines/pr.yml @@ -0,0 +1,18 @@ +# This is the non-1ES PR pipeline for dotnet/dotnet +# https://dev.azure.com/dnceng-public/public/_build?definitionId=240 + +trigger: none +pr: + branches: + include: + - main + - release/* + - internal/release/* + +stages: +- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: templates/stages/vmr-scan.yml + +- template: /src/installer/eng/pipelines/templates/stages/vmr-build.yml + parameters: + isBuiltFromVmr: true diff --git a/src/SourceBuild/content/eng/pipelines/source-build-sdk-diff-tests.yml b/src/SourceBuild/content/eng/pipelines/source-build-sdk-diff-tests.yml new file mode 100644 index 000000000..6704e6a0b --- /dev/null +++ b/src/SourceBuild/content/eng/pipelines/source-build-sdk-diff-tests.yml @@ -0,0 +1,70 @@ +schedules: +- cron: "0 11 * * 1-5" + displayName: Run on weekdays at 11am UTC + branches: + include: + - main + +# Relies on dotnet-source-build being in the same repo as this pipeline +# https://learn.microsoft.com/en-us/azure/devops/pipelines/process/pipeline-triggers?view=azure-devops#branch-considerations +resources: + pipelines: + - pipeline: dotnet-source-build + source: dotnet-source-build + trigger: + branches: + include: + - release/*.0.1xx* + - internal/release/*.0.1xx* + +pr: none +trigger: none + +pool: + name: NetCore1ESPool-Svc-Internal + demands: ImageOverride -equals 1es-ubuntu-2004 + +parameters: +- name: dotnetDotnetRunId + displayName: 'Specific dotnet-dotnet run ID number (e.g `2108850`)' + type: string + default: ' ' + +variables: +- template: /src/installer/eng/pipelines/templates/variables/vmr-build.yml@self + +jobs: +- template: templates/jobs/sdk-diff-tests.yml + parameters: + buildName: ${{ format('{0}_Offline_MsftSdk', variables.centOSStreamName) }} + targetRid: ${{ variables.centOSStreamX64Rid }} + architecture: x64 + dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }} + +- template: templates/jobs/sdk-diff-tests.yml + parameters: + buildName: ${{ format('{0}_Offline_MsftSdk', variables.alpineName) }} + targetRid: ${{ variables.alpineX64Rid }} + architecture: x64 + dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }} + +- template: templates/jobs/sdk-diff-tests.yml + parameters: + buildName: ${{ format('{0}_Offline_MsftSdk', variables.fedoraName) }} + targetRid: ${{ variables.fedoraX64Rid }} + architecture: x64 + dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }} + +- template: templates/jobs/sdk-diff-tests.yml + parameters: + buildName: ${{ format('{0}_Offline_MsftSdk', variables.ubuntuName) }} + targetRid: ${{ variables.ubuntuX64Rid }} + architecture: x64 + dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }} + +- template: templates/jobs/sdk-diff-tests.yml + parameters: + buildName: ${{ format('{0}Arm64_Offline_MsftSdk', variables.ubuntuName) }} + targetRid: ${{ variables.ubuntuArm64Rid }} + architecture: arm64 + dotnetDotnetRunId: ${{ parameters.dotnetDotnetRunId }} diff --git a/eng/pipelines/templates/jobs/sdk-diff-tests.yml b/src/SourceBuild/content/eng/pipelines/templates/jobs/sdk-diff-tests.yml similarity index 91% rename from eng/pipelines/templates/jobs/sdk-diff-tests.yml rename to src/SourceBuild/content/eng/pipelines/templates/jobs/sdk-diff-tests.yml index d7ed9a81a..52435dbc0 100644 --- a/eng/pipelines/templates/jobs/sdk-diff-tests.yml +++ b/src/SourceBuild/content/eng/pipelines/templates/jobs/sdk-diff-tests.yml @@ -34,7 +34,7 @@ jobs: echo "Dotnet-dotnet build: https://dev.azure.com/dnceng/internal/_build/results?buildId=$dotnet_dotnet_build&view=results" - installer_sha=$(az pipelines build tag list --organization '$(AZDO_ORG)' --project '$(AZDO_PROJECT)' --build-id $dotnet_dotnet_build --output tsv | sed "s,installer ,,g") + installer_sha=$(az pipelines build tag list --organization '$(AZDO_ORG)' --project '$(AZDO_PROJECT)' --build-id $dotnet_dotnet_build --query "[?contains(@, 'installer')]" --output tsv | sed "s,installer ,,g") installer_build=$(az pipelines runs list --organization '$(AZDO_ORG)' --project '$(AZDO_PROJECT)' --pipeline-ids '$(INSTALLER_OFFICIAL_CI_PIPELINE_ID)' --query "[?sourceVersion == '$installer_sha'].id" --output tsv) if [[ -z "$installer_build" ]]; then echo "Could not find a build of installer for commit '$installer_sha'" @@ -100,7 +100,7 @@ jobs: exit 1 fi - eng/common/build.sh -bl --projects $(Build.SourcesDirectory)/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/Microsoft.DotNet.SourceBuild.SmokeTests.csproj --restore + eng/common/build.sh -bl --projects $(Build.SourcesDirectory)/test/Microsoft.DotNet.SourceBuild.SmokeTests/Microsoft.DotNet.SourceBuild.SmokeTests.csproj --restore echo "##vso[task.setvariable variable=Platform]$platform" echo "##vso[task.setvariable variable=MsftSdkTarballPath]$(Pipeline.Workspace)/Artifacts/$msft_sdk_tarball_name" @@ -110,7 +110,7 @@ jobs: - script: > .dotnet/dotnet test - $(Build.SourcesDirectory)/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/Microsoft.DotNet.SourceBuild.SmokeTests.csproj + $(Build.SourcesDirectory)/test/Microsoft.DotNet.SourceBuild.SmokeTests/Microsoft.DotNet.SourceBuild.SmokeTests.csproj --filter "Category=SdkContent" --logger:'trx;LogFileName=$(Agent.JobName)_SDKDiffTests.trx' --logger:'console;verbosity=detailed' @@ -137,7 +137,6 @@ jobs: find artifacts/ -type f -name "BuildTests*.binlog" -exec cp {} --parents -t ${targetFolder} \; find artifacts/ -type f -name "BuildTests*.log" -exec cp {} --parents -t ${targetFolder} \; find artifacts/ -type f -name "Build.binlog" -exec cp {} --parents -t ${targetFolder} \; - cd "$(Build.SourcesDirectory)/src/SourceBuild/content" find test/ -type f -name "*.binlog" -exec cp {} --parents -t ${targetFolder} \; find test/ -type f -name "Updated*.diff" -exec cp {} --parents -t ${targetFolder} \; find test/ -type f -name "Updated*.txt" -exec cp {} --parents -t ${targetFolder} \; @@ -158,7 +157,7 @@ jobs: inputs: testRunner: vSTest testResultsFiles: '*.trx' - searchFolder: $(Build.SourcesDirectory)/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/TestResults + searchFolder: $(Build.SourcesDirectory)/test/Microsoft.DotNet.SourceBuild.SmokeTests/TestResults mergeTestResults: true publishRunAttachments: true testRunTitle: $(Agent.JobName) diff --git a/src/SourceBuild/content/eng/pipelines/templates/stages/vmr-scan.yml b/src/SourceBuild/content/eng/pipelines/templates/stages/vmr-scan.yml index 6024ce182..28541d572 100644 --- a/src/SourceBuild/content/eng/pipelines/templates/stages/vmr-scan.yml +++ b/src/SourceBuild/content/eng/pipelines/templates/stages/vmr-scan.yml @@ -3,17 +3,22 @@ stages: displayName: Tag & Scan dependsOn: [] variables: - - template: /eng/common/templates/variables/pool-providers.yml + - ${{ if eq(variables['System.TeamProject'], 'public') }}: + - template: /eng/common/templates/variables/pool-providers.yml + - ${{ else }}: + - template: /eng/common/templates-official/variables/pool-providers.yml jobs: - job: Tag_n_Scan displayName: Tag & Scan pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $(DncEngPublicBuildPool) - demands: ImageOverride -equals Build.Ubuntu.2004.Amd64.Open + image: 1es-ubuntu-2004-open + os: linux ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals Build.Ubuntu.2004.Amd64 + image: 1es-ubuntu-2004 + os: linux steps: - checkout: self diff --git a/eng/pipelines/templates/variables/pipelines.yml b/src/SourceBuild/content/eng/pipelines/templates/variables/pipelines.yml similarity index 100% rename from eng/pipelines/templates/variables/pipelines.yml rename to src/SourceBuild/content/eng/pipelines/templates/variables/pipelines.yml diff --git a/eng/pipelines/source-build-license-scan.yml b/src/SourceBuild/content/eng/pipelines/vmr-license-scan.yml similarity index 100% rename from eng/pipelines/source-build-license-scan.yml rename to src/SourceBuild/content/eng/pipelines/vmr-license-scan.yml diff --git a/src/SourceBuild/content/global.json b/src/SourceBuild/content/global.json index bda4e743d..c598d7514 100644 --- a/src/SourceBuild/content/global.json +++ b/src/SourceBuild/content/global.json @@ -1,6 +1,6 @@ { "tools": { - "dotnet": "8.0.102" + "dotnet": "8.0.105" }, "msbuild-sdks": { "Microsoft.Build.CentralPackageVersions": "2.0.1", diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/LicenseScanTests.cs b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/LicenseScanTests.cs index 8a088ba4d..72d71ef07 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/LicenseScanTests.cs +++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/LicenseScanTests.cs @@ -61,6 +61,7 @@ public class LicenseScanTests : TestBase "cc-by-sa-3.0", // https://creativecommons.org/licenses/by-sa/3.0/legalcode "cc-by-sa-4.0", // https://creativecommons.org/licenses/by-sa/4.0/legalcode "cc-pd", // https://creativecommons.org/publicdomain/mark/1.0/ + "cc-sa-1.0", // https://github.com/nexB/scancode-toolkit/blob/develop/src/licensedcode/data/licenses/cc-sa-1.0.LICENSE "epl-1.0", // https://opensource.org/license/epl-1-0/ "generic-cla", // https://github.com/nexB/scancode-toolkit/blob/develop/src/licensedcode/data/licenses/generic-cla.LICENSE "gpl-1.0-plus", // https://opensource.org/license/gpl-1-0/ @@ -76,6 +77,7 @@ public class LicenseScanTests : TestBase "lzma-sdk-9.22", // https://github.com/nexB/scancode-toolkit/blob/develop/src/licensedcode/data/licenses/lzma-sdk-9.22.LICENSE "mit", // https://opensource.org/license/mit/ "mit-addition", // https://github.com/nexB/scancode-toolkit/blob/develop/src/licensedcode/data/licenses/mit-addition.LICENSE + "mit-testregex", // https://github.com/nexB/scancode-toolkit/blob/develop/src/licensedcode/data/licenses/mit-testregex.LICENSE "ms-patent-promise", // https://github.com/nexB/scancode-toolkit/blob/develop/src/licensedcode/data/licenses/ms-patent-promise.LICENSE "ms-lpl", // https://github.com/nexB/scancode-toolkit/blob/develop/src/licensedcode/data/licenses/ms-lpl.LICENSE "ms-pl", // https://opensource.org/license/ms-pl-html/ diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/LicenseExclusions.txt b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/LicenseExclusions.txt index 9bcfbafc2..4c044d907 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/LicenseExclusions.txt +++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/LicenseExclusions.txt @@ -222,11 +222,11 @@ src/source-build-externals/patches/application-insights/0002-Remove-WebGrease-fr # False positive src/source-build-reference-packages/src/targetPacks/ILsrc/microsoft.netcore.app.ref/3.*/THIRD-PARTY-NOTICES.TXT|codesourcery-2004 -src/source-build-reference-packages/src/targetPacks/ILsrc/netstandard.library/1.6.1/ThirdPartyNotices.txt|unknown -src/source-build-reference-packages/src/targetPacks/ILsrc/netstandard.library/2.0.*/THIRD-PARTY-NOTICES.TXT|unknown +src/source-build-reference-packages/src/targetPacks/ILsrc/netstandard.library/1.6.1/ThirdPartyNotices.txt|unknown-license-reference +src/source-build-reference-packages/src/targetPacks/ILsrc/netstandard.library/2.0.*/THIRD-PARTY-NOTICES.TXT|unknown-license-reference src/source-build-reference-packages/src/targetPacks/ILsrc/netstandard.library.ref/2.1.0/THIRD-PARTY-NOTICES.TXT|codesourcery-2004 src/source-build-reference-packages/src/textOnlyPackages/src/microsoft.codeanalysis.collections/4.2.0-1.22102.8/ThirdPartyNotices.rtf|json -src/source-build-reference-packages/src/textOnlyPackages/src/microsoft.netcore.*/1.*/ThirdPartyNotices.txt|unknown +src/source-build-reference-packages/src/textOnlyPackages/src/microsoft.netcore.*/1.*/ThirdPartyNotices.txt|unknown-license-reference src/source-build-reference-packages/src/textOnlyPackages/src/microsoft.private.intellisense/8.0.*/IntellisenseFiles/*/1033/System.Security.Permissions.xml|unknown-license-reference # Contains references to licenses which are not applicable to the source diff --git a/src/SourceBuild/patches/runtime/0001-crashinfo-use-off_t-instead-of-off64_t.patch b/src/SourceBuild/patches/runtime/0001-crashinfo-use-off_t-instead-of-off64_t.patch new file mode 100644 index 000000000..6569164b8 --- /dev/null +++ b/src/SourceBuild/patches/runtime/0001-crashinfo-use-off_t-instead-of-off64_t.patch @@ -0,0 +1,38 @@ +From 05ad51a9be428012328a1ee199a4edaff20b5efe Mon Sep 17 00:00:00 2001 +From: Antoine Martin +Date: Tue, 12 Sep 2023 18:55:46 -0400 +Subject: [PATCH] crashinfo.cpp/crasinfounix.cpp: use off_t instead of off64_t + +Backport: https://github.com/dotnet/runtime/pull/101272 + +--- + src/coreclr/debug/createdump/crashinfo.cpp | 2 +- + src/coreclr/debug/createdump/crashinfounix.cpp | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/coreclr/debug/createdump/crashinfo.cpp b/src/coreclr/debug/createdump/crashinfo.cpp +index 996f3a81935d..d1d1b0ea0218 100644 +--- a/src/coreclr/debug/createdump/crashinfo.cpp ++++ b/src/coreclr/debug/createdump/crashinfo.cpp +@@ -803,7 +803,7 @@ CrashInfo::PageMappedToPhysicalMemory(uint64_t start) + } + + uint64_t pagemapOffset = (start / PAGE_SIZE) * sizeof(uint64_t); +- uint64_t seekResult = lseek64(m_fdPagemap, (off64_t) pagemapOffset, SEEK_SET); ++ uint64_t seekResult = lseek(m_fdPagemap, (off_t) pagemapOffset, SEEK_SET); + if (seekResult != pagemapOffset) + { + int seekErrno = errno; +diff --git a/src/coreclr/debug/createdump/crashinfounix.cpp b/src/coreclr/debug/createdump/crashinfounix.cpp +index 24b975e3d655..2f4ea079de3b 100644 +--- a/src/coreclr/debug/createdump/crashinfounix.cpp ++++ b/src/coreclr/debug/createdump/crashinfounix.cpp +@@ -516,7 +516,7 @@ CrashInfo::ReadProcessMemory(void* address, void* buffer, size_t size, size_t* r + // performance optimization. + m_canUseProcVmReadSyscall = false; + assert(m_fdMem != -1); +- *read = pread64(m_fdMem, buffer, size, (off64_t)address); ++ *read = pread(m_fdMem, buffer, size, (off_t)address); + } + + if (*read == (size_t)-1) diff --git a/src/SourceBuild/patches/runtime/0002-Update-MSBuild-dependencies.patch b/src/SourceBuild/patches/runtime/0002-Update-MSBuild-dependencies.patch new file mode 100644 index 000000000..267e45546 --- /dev/null +++ b/src/SourceBuild/patches/runtime/0002-Update-MSBuild-dependencies.patch @@ -0,0 +1,79 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Nikola Milosavljevic +Date: Tue, 23 Apr 2024 01:55:17 +0000 +Subject: [PATCH] Update MSBuild dependencies + +Backport: https://github.com/dotnet/runtime/issues/101395 +--- + eng/Version.Details.xml | 12 ++++++++++++ + eng/Versions.props | 6 +++--- + src/tasks/AotCompilerTask/MonoAOTCompiler.csproj | 1 - + src/tasks/WasmAppBuilder/WasmAppBuilder.csproj | 3 --- + 4 files changed, 15 insertions(+), 7 deletions(-) + +diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml +index fe35dc0997e..b90337395f6 100644 +--- a/eng/Version.Details.xml ++++ b/eng/Version.Details.xml +@@ -414,6 +414,18 @@ + https://github.com/dotnet/msbuild + 195e7f5a3a8e51c37d83cd9e54cb99dc3fc69c22 + ++ ++ https://github.com/dotnet/msbuild ++ 195e7f5a3a8e51c37d83cd9e54cb99dc3fc69c22 ++ ++ ++ https://github.com/dotnet/msbuild ++ 195e7f5a3a8e51c37d83cd9e54cb99dc3fc69c22 ++ ++ ++ https://github.com/dotnet/msbuild ++ 195e7f5a3a8e51c37d83cd9e54cb99dc3fc69c22 ++ + + https://github.com/dotnet/msbuild + 195e7f5a3a8e51c37d83cd9e54cb99dc3fc69c22 +diff --git a/eng/Versions.props b/eng/Versions.props +index f012e409095..bf16c6ee71f 100644 +--- a/eng/Versions.props ++++ b/eng/Versions.props +@@ -173,9 +173,9 @@ + 1.0.4-preview6.19326.1 + 2.0.5 + 17.8.3 +- $(MicrosoftBuildVersion) +- $(MicrosoftBuildVersion) +- $(MicrosoftBuildVersion) ++ 17.8.3 ++ 17.8.3 ++ 17.8.3 + 6.2.4 + 6.2.4 + 7.0.412701 +diff --git a/src/tasks/AotCompilerTask/MonoAOTCompiler.csproj b/src/tasks/AotCompilerTask/MonoAOTCompiler.csproj +index e76730b5aec..88ae0fb136c 100644 +--- a/src/tasks/AotCompilerTask/MonoAOTCompiler.csproj ++++ b/src/tasks/AotCompilerTask/MonoAOTCompiler.csproj +@@ -14,7 +14,6 @@ + + + +- + + + +diff --git a/src/tasks/WasmAppBuilder/WasmAppBuilder.csproj b/src/tasks/WasmAppBuilder/WasmAppBuilder.csproj +index 34a51095986..d8c95954dd8 100644 +--- a/src/tasks/WasmAppBuilder/WasmAppBuilder.csproj ++++ b/src/tasks/WasmAppBuilder/WasmAppBuilder.csproj +@@ -24,9 +24,6 @@ + + + +- +- +- + + + diff --git a/src/redist/targets/BundledTemplates.targets b/src/redist/targets/BundledTemplates.targets index 4ab2c37a7..d6e428bb3 100644 --- a/src/redist/targets/BundledTemplates.targets +++ b/src/redist/targets/BundledTemplates.targets @@ -32,19 +32,6 @@ - - - - - - - - - - - - - @@ -58,63 +45,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -