diff --git a/azure-pipelines-PR.yml b/azure-pipelines-PR.yml
index 98ae82ca1..ea66325f3 100644
--- a/azure-pipelines-PR.yml
+++ b/azure-pipelines-PR.yml
@@ -20,6 +20,15 @@ variables:
# Skip Running CI tests
- name: SkipTests
value: false
+ # Set Official Build Id
+ - name: OfficialBuildId
+ value: $(Build.BuildNumber)
+ - ${{ if or(startswith(variables['Build.SourceBranch'], 'refs/heads/release/'), startswith(variables['Build.SourceBranch'], 'refs/heads/internal/release/'), eq(variables['Build.Reason'], 'Manual')) }}:
+ - name: PostBuildSign
+ value: false
+ - ${{ else }}:
+ - name: PostBuildSign
+ value: true
# Set the target blob feed for package publish during official and validation builds.
- name: _DotNetArtifactsCategory
@@ -39,19 +48,16 @@ stages:
- template: /eng/pipelines/jobs/windows-build-PR.yml
parameters:
name: win_x64
- displayName: win-x64
targetArchitecture: x64
# Windows x86
- template: /eng/pipelines/jobs/windows-build-PR.yml
parameters:
name: win_x86
- displayName: win-x86
targetArchitecture: x86
# Windows arm64
- template: /eng/pipelines/jobs/windows-build-PR.yml
parameters:
name: win_arm64
- displayName: win-arm64
targetArchitecture: arm64
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index c45506627..9e541cf28 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -14,7 +14,7 @@ variables:
value: dotnet-core-acquisition
# Skip Running CI tests
- name: SkipTests
- value: true
+ value: false
# Set Official Build Id
- name: OfficialBuildId
value: $(Build.BuildNumber)
@@ -60,32 +60,34 @@ extends:
- template: /eng/pipelines/jobs/windows-build.yml@self
parameters:
name: win_x64
- displayName: win-x64
targetArchitecture: x64
# Windows x86
- template: /eng/pipelines/jobs/windows-build.yml@self
parameters:
name: win_x86
- displayName: win-x86
targetArchitecture: x86
# Windows arm64
- template: /eng/pipelines/jobs/windows-build.yml@self
parameters:
name: win_arm64
- displayName: win-arm64
targetArchitecture: arm64
+ - stage: PrepareForPublish
+ displayName: Prepare for Publish
+ dependsOn: Build
+ jobs:
+ # Prep artifacts: sign them and upload pipeline artifacts expected by stages-based publishing.
+ - template: /eng/pipelines/jobs/prepare-signed-artifacts.yml@self
+ parameters:
+ PublishRidAgnosticPackagesFromJobName: win_x64
# Publish to Build Asset Registry in order to generate the ReleaseConfigs artifact.
- template: /eng/common/templates-official/job/publish-build-assets.yml@self
parameters:
publishUsingPipelines: true
publishAssetsImmediately: true
- dependsOn:
- - win_x64
- - win_x86
- - win_arm64
+ dependsOn: PrepareSignedArtifacts
pool:
name: NetCore1ESPool-Internal
demands: ImageOverride -equals windows.vs2022preview.amd64
@@ -93,11 +95,15 @@ extends:
# Stages-based publishing entry point
- template: /eng/common/templates-official/post-build/post-build.yml@self
parameters:
+ publishingInfraVersion: 3
+ validateDependsOn:
+ - PrepareForPublish
enableSymbolValidation: false
enableSigningValidation: false
enableNugetValidation: false
enableSourceLinkValidation: false
publishAssetsImmediately: true
+
SDLValidationParameters:
enable: false
params: >-
diff --git a/build.cmd b/build.cmd
index 675fdf83f..79d95dc5b 100644
--- a/build.cmd
+++ b/build.cmd
@@ -1,2 +1,2 @@
@echo off
-powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0eng\common\Build.ps1""" -restore -build %*"
+powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0eng\common\Build.ps1""" -restore -build -bl %*"
diff --git a/eng/AfterSigning.targets b/eng/AfterSigning.targets
deleted file mode 100644
index af21b1072..000000000
--- a/eng/AfterSigning.targets
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- <_SuppressSdkImports>false
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/eng/Publishing.props b/eng/Publishing.props
index 2e352a8e8..83454c779 100644
--- a/eng/Publishing.props
+++ b/eng/Publishing.props
@@ -2,44 +2,20 @@
true
-
- false
-
- false
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ Condition="'$(DotNetBuildRepo)' == 'true'">
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ RelativeBlobPath="WindowsDesktop/$(WindowsDesktopRuntimePackProductVersion)/%(Filename)%(Extension)" />
diff --git a/eng/Signing.props b/eng/Signing.props
index 9aff13e33..454ba3279 100644
--- a/eng/Signing.props
+++ b/eng/Signing.props
@@ -1,11 +1,40 @@
+
+ true
true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/eng/Versions.props b/eng/Versions.props
index d651d2a03..15ab62f16 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -11,8 +11,10 @@
+ 9.0.0-beta.24168.1
9.0.0-beta.24168.1
9.0.0-beta.24168.1
+ 9.0.0-beta.24168.1
4.5.0
4.8.6
diff --git a/eng/pipelines/jobs/prepare-signed-artifacts-PR.yml b/eng/pipelines/jobs/prepare-signed-artifacts-PR.yml
new file mode 100644
index 000000000..5a4150fcd
--- /dev/null
+++ b/eng/pipelines/jobs/prepare-signed-artifacts-PR.yml
@@ -0,0 +1,50 @@
+parameters:
+ dependsOn: []
+ PublishRidAgnosticPackagesFromJobName: ''
+
+jobs:
+- job: PrepareSignedArtifacts
+ displayName: Prepare Signed Artifacts
+ dependsOn: ${{ parameters.dependsOn }}
+ pool:
+ name: NetCore1ESPool-Svc-Internal
+ demands: ImageOverride -equals windows.vs2019.amd64
+ # Double the default timeout.
+ timeoutInMinutes: 120
+ workspace:
+ clean: all
+
+ steps:
+ - task: DownloadBuildArtifacts@0
+ displayName: Download IntermediateUnsignedArtifacts
+ inputs:
+ artifactName: IntermediateUnsignedArtifacts
+ downloadPath: $(Build.SourcesDirectory)\artifacts\PackageDownload
+
+ - script: >
+ build.cmd -ci
+ -projects $(Build.SourcesDirectory)\src\publish\prepare-artifacts.proj
+ -c Release
+ /p:PublishRidAgnosticPackagesFromJobName=${{ parameters.PublishRidAgnosticPackagesFromJobName }}
+ /p:SignType=$(SignType)
+ /p:DotNetSignType=$(SignType)
+ /bl:$(Build.SourcesDirectory)\prepare-artifacts.binlog
+ displayName: Prepare artifacts and upload to build
+
+ - task: CopyFiles@2
+ displayName: Copy Files to $(Build.StagingDirectory)\BuildLogs
+ inputs:
+ SourceFolder: '$(Build.SourcesDirectory)'
+ Contents: |
+ **/*.log
+ **/*.binlog
+ TargetFolder: '$(Build.StagingDirectory)\BuildLogs'
+ continueOnError: true
+ condition: succeededOrFailed()
+
+ - task: PublishBuildArtifacts@1
+ displayName: Publish Artifact BuildLogs
+ inputs:
+ PathtoPublish: '$(Build.StagingDirectory)\BuildLogs'
+ ArtifactName: Logs-PrepareSignedArtifacts
+ condition: succeededOrFailed()
\ No newline at end of file
diff --git a/eng/pipelines/jobs/prepare-signed-artifacts.yml b/eng/pipelines/jobs/prepare-signed-artifacts.yml
new file mode 100644
index 000000000..d2349feea
--- /dev/null
+++ b/eng/pipelines/jobs/prepare-signed-artifacts.yml
@@ -0,0 +1,55 @@
+parameters:
+ dependsOn: []
+ PublishRidAgnosticPackagesFromJobName: ''
+
+jobs:
+- job: PrepareSignedArtifacts
+ displayName: Prepare Signed Artifacts
+ dependsOn: ${{ parameters.dependsOn }}
+ # Double the default timeout.
+ timeoutInMinutes: 120
+ workspace:
+ clean: all
+
+ templateContext:
+ outputs:
+ - output: pipelineArtifact
+ displayName: 'Publish Artifact BuildLogs'
+ condition: succeededOrFailed()
+ targetPath: '$(Build.StagingDirectory)\BuildLogs'
+ artifactName: Logs-PrepareSignedArtifacts
+ steps:
+ - task: NuGetAuthenticate@1
+ - task: MicroBuildSigningPlugin@2
+ displayName: Install MicroBuild plugin for Signing
+ inputs:
+ signType: $(SignType)
+ zipSources: false
+ feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json
+ condition: and(succeeded(), in(variables['SignType'], 'real', 'test'))
+ - task: DownloadBuildArtifacts@0
+ displayName: Download IntermediateUnsignedArtifacts
+ inputs:
+ artifactName: IntermediateUnsignedArtifacts
+ downloadPath: $(Build.SourcesDirectory)\artifacts\PackageDownload
+
+ - script: >
+ build.cmd -ci
+ -projects $(Build.SourcesDirectory)\src\publish\prepare-artifacts.proj
+ -c Release
+ /p:PublishRidAgnosticPackagesFromJobName=${{ parameters.PublishRidAgnosticPackagesFromJobName }}
+ /p:SignType=$(SignType)
+ /p:DotNetSignType=$(SignType)
+ /bl:$(Build.SourcesDirectory)\prepare-artifacts.binlog
+ displayName: Prepare artifacts and upload to build
+
+ - task: CopyFiles@2
+ displayName: Copy Files to $(Build.StagingDirectory)\BuildLogs
+ inputs:
+ SourceFolder: '$(Build.SourcesDirectory)'
+ Contents: |
+ **/*.log
+ **/*.binlog
+ TargetFolder: '$(Build.StagingDirectory)\BuildLogs'
+ continueOnError: true
+ condition: succeededOrFailed()
\ No newline at end of file
diff --git a/eng/pipelines/jobs/windows-build-PR.yml b/eng/pipelines/jobs/windows-build-PR.yml
index 7644ec11c..2d7ea07b5 100644
--- a/eng/pipelines/jobs/windows-build-PR.yml
+++ b/eng/pipelines/jobs/windows-build-PR.yml
@@ -11,7 +11,7 @@ jobs:
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
pool:
# Use a hosted pool when possible.
- vmImage: 'windows-2022'
+ vmImage: 'windows-2019'
strategy:
matrix:
Debug:
@@ -24,6 +24,7 @@ jobs:
- name: CommonMSBuildArgs
value: >-
-c $(_BuildConfig)
+ /p:OfficialBuildId=$(OfficialBuildId)
/p:TargetArchitecture=${{ parameters.targetArchitecture }}
/p:SkipTests=${{ parameters.skipTests }}
- name: MsbuildSigningArguments
@@ -40,40 +41,12 @@ jobs:
displayName: Clear NuGet http cache (if exists)
- script: >-
- eng/common/cibuild.cmd
+ build.cmd -ci -test
$(CommonMSBuildArgs)
$(MsbuildSigningArguments)
$(_InternalRuntimeDownloadArgs)
displayName: Build
- - ${{ if ne(parameters.skipTests, 'true') }}:
- - task: PublishTestResults@2
- displayName: Publish Test Results
- inputs:
- testResultsFormat: 'xUnit'
- testResultsFiles: '*.xml'
- searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)'
- mergeTestResults: true
- testRunTitle: ${{ parameters.name }}-$(_BuildConfig)
- continueOnError: true
- condition: always()
-
- - task: CopyFiles@2
- displayName: Prepare BuildLogs staging directory
- inputs:
- SourceFolder: '$(Build.SourcesDirectory)'
- Contents: |
- **/*.log
- **/*.binlog
- TargetFolder: '$(Build.StagingDirectory)/BuildLogs'
- CleanTargetFolder: true
- continueOnError: true
- condition: succeededOrFailed()
-
- - task: PublishBuildArtifacts@1
- displayName: Publish BuildLogs
- inputs:
- PathtoPublish: '$(Build.StagingDirectory)/BuildLogs'
- ArtifactName: Logs-${{ parameters.name }}-$(_BuildConfig)
- continueOnError: true
- condition: succeededOrFailed()
\ No newline at end of file
+ - template: /eng/pipelines/steps/upload-job-artifacts-PR.yml
+ parameters:
+ name: ${{ parameters.name }}
\ No newline at end of file
diff --git a/eng/pipelines/jobs/windows-build.yml b/eng/pipelines/jobs/windows-build.yml
index 69a3137d3..90740c90c 100644
--- a/eng/pipelines/jobs/windows-build.yml
+++ b/eng/pipelines/jobs/windows-build.yml
@@ -11,6 +11,8 @@ jobs:
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
strategy:
matrix:
+ Debug:
+ _BuildConfig: Debug
Release:
_BuildConfig: Release
workspace:
@@ -20,7 +22,6 @@ jobs:
value: >-
-c $(_BuildConfig)
/p:OfficialBuildId=$(OfficialBuildId)
- /p:DotNetPublishUsingPipelines=true
/p:TargetArchitecture=${{ parameters.targetArchitecture }}
/p:SkipTests=${{ parameters.skipTests }}
- name: MsbuildSigningArguments
@@ -35,6 +36,12 @@ jobs:
templateContext:
outputs:
+ - output: buildArtifacts
+ displayName: 'Publish Artifacts'
+ condition: and(succeeded(), eq(variables._BuildConfig, 'Release'))
+ PathtoPublish: '$(Build.StagingDirectory)/Artifacts'
+ ArtifactName: IntermediateUnsignedArtifacts
+ ArtifactType: container
- output: pipelineArtifact
displayName: 'Publish BuildLogs'
condition: succeededOrFailed()
@@ -65,7 +72,7 @@ jobs:
displayName: Clear NuGet http cache (if exists)
- script: >-
- eng/common/cibuild.cmd
+ build.cmd -ci -test
$(CommonMSBuildArgs)
$(MsbuildSigningArguments)
$(_InternalRuntimeDownloadArgs)
@@ -76,37 +83,6 @@ jobs:
parameters:
name: Generate_SBOM_${{ parameters.name }}
- # Upload build outputs as build artifacts.
- - task: CopyFiles@2
- displayName: Prepare job-specific Artifacts subdirectory
- inputs:
- SourceFolder: '$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)'
- Contents: |
- Shipping/**/*
- NonShipping/**/*
- TargetFolder: '$(Build.StagingDirectory)/Artifacts/${{ parameters.name }}'
- CleanTargetFolder: true
- condition: and(succeeded(), eq(variables._BuildConfig, 'Release'))
-
- - ${{ if ne(parameters.skipTests, 'true') }}:
- - task: PublishTestResults@2
- displayName: Publish Test Results
- inputs:
- testResultsFormat: 'xUnit'
- testResultsFiles: '*.xml'
- searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)'
- mergeTestResults: true
- testRunTitle: ${{ parameters.name }}-$(_BuildConfig)
- continueOnError: true
-
- - task: CopyFiles@2
- displayName: Prepare BuildLogs staging directory
- inputs:
- SourceFolder: '$(Build.SourcesDirectory)'
- Contents: |
- **/*.log
- **/*.binlog
- TargetFolder: '$(Build.StagingDirectory)/BuildLogs'
- CleanTargetFolder: true
- continueOnError: true
- condition: succeededOrFailed()
\ No newline at end of file
+ - template: /eng/pipelines/steps/upload-job-artifacts.yml@self
+ parameters:
+ name: ${{ parameters.name }}
\ No newline at end of file
diff --git a/eng/pipelines/steps/upload-job-artifacts-PR.yml b/eng/pipelines/steps/upload-job-artifacts-PR.yml
new file mode 100644
index 000000000..83cfaea11
--- /dev/null
+++ b/eng/pipelines/steps/upload-job-artifacts-PR.yml
@@ -0,0 +1,35 @@
+parameters:
+ name: ''
+
+steps:
+# Always upload test outputs and build logs.
+- task: PublishTestResults@2
+ displayName: Publish Test Results
+ inputs:
+ testResultsFormat: 'xUnit'
+ testResultsFiles: '*.xml'
+ searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)'
+ mergeTestResults: true
+ testRunTitle: ${{ parameters.name }}-$(_BuildConfig)
+ continueOnError: true
+ condition: always()
+
+- task: CopyFiles@2
+ displayName: Prepare BuildLogs staging directory
+ inputs:
+ SourceFolder: '$(Build.SourcesDirectory)'
+ Contents: |
+ **/*.log
+ **/*.binlog
+ TargetFolder: '$(Build.StagingDirectory)/BuildLogs'
+ CleanTargetFolder: true
+ continueOnError: true
+ condition: succeededOrFailed()
+
+- task: PublishBuildArtifacts@1
+ displayName: Publish BuildLogs
+ inputs:
+ PathtoPublish: '$(Build.StagingDirectory)/BuildLogs'
+ ArtifactName: Logs-${{ parameters.name }}-$(_BuildConfig)
+ continueOnError: true
+ condition: succeededOrFailed()
\ No newline at end of file
diff --git a/eng/pipelines/steps/upload-job-artifacts.yml b/eng/pipelines/steps/upload-job-artifacts.yml
new file mode 100644
index 000000000..368969596
--- /dev/null
+++ b/eng/pipelines/steps/upload-job-artifacts.yml
@@ -0,0 +1,39 @@
+parameters:
+ name: ''
+
+steps:
+# Upload build outputs as build artifacts.
+- task: CopyFiles@2
+ displayName: Prepare job-specific Artifacts subdirectory
+ inputs:
+ SourceFolder: '$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)'
+ Contents: |
+ Shipping/**/*
+ NonShipping/**/*
+ TargetFolder: '$(Build.StagingDirectory)/Artifacts/${{ parameters.name }}'
+ CleanTargetFolder: true
+ condition: and(succeeded(), eq(variables._BuildConfig, 'Release'))
+
+# Always upload test outputs and build logs.
+- task: PublishTestResults@2
+ displayName: Publish Test Results
+ inputs:
+ testResultsFormat: 'xUnit'
+ testResultsFiles: '*.xml'
+ searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)'
+ mergeTestResults: true
+ testRunTitle: ${{ parameters.name }}-$(_BuildConfig)
+ continueOnError: true
+ condition: always()
+
+- task: CopyFiles@2
+ displayName: Prepare BuildLogs staging directory
+ inputs:
+ SourceFolder: '$(Build.SourcesDirectory)'
+ Contents: |
+ **/*.log
+ **/*.binlog
+ TargetFolder: '$(Build.StagingDirectory)/BuildLogs'
+ CleanTargetFolder: true
+ continueOnError: true
+ condition: succeededOrFailed()
\ No newline at end of file
diff --git a/src/publish/prepare-artifacts.proj b/src/publish/prepare-artifacts.proj
new file mode 100644
index 000000000..dc8c18933
--- /dev/null
+++ b/src/publish/prepare-artifacts.proj
@@ -0,0 +1,255 @@
+
+
+
+ $(NetCurrent)
+
+ false
+ true
+
+ false
+
+ $(ArtifactsDir)PackageDownload/
+
+
+ $([System.IO.Path]::GetDirectoryName('$(ArcadeSdkBuildTasksAssembly)'))\..\
+ $(ArcadeSdkMSBuildProjectDir)Sign.proj
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DotNetReleaseShipping=true
+
+
+
+
+
+ WindowsDesktop/$(Version)/
+
+ Manifest.xml
+ $(ArtifactsLogDir)AssetManifest/$(AssetManifestFilename)
+
+
+ $(ArtifactsObjDir)TempWorkingDir\$([System.Guid]::NewGuid())\
+
+ $(VersionPrefix)
+ $(Version)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(InstallersRelativePath)%(Filename)%(Extension)
+ true
+ NonShipping=true
+
+
+
+ $(InstallersRelativePath)%(Filename)%(Extension)
+ true
+
+
+
+
+
+ $(InstallersRelativePath)%(Filename)%(Extension)
+ Checksum
+ true
+
+
+
+ $(InstallersRelativePath)windowsdesktop-productVersion.txt
+ true
+
+
+
+ $(InstallersRelativePath)productVersion.txt
+ true
+
+
+
+
+
+
+ $(SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)
+
+ $(CollectionUri.Split('/')[3])
+
+ $(CollectionUri.Split('.')[0].Split('/')[2])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/windowsdesktop/tests/NuGetArtifactTester.cs b/src/windowsdesktop/tests/NuGetArtifactTester.cs
index 0993abd47..69a4d1213 100644
--- a/src/windowsdesktop/tests/NuGetArtifactTester.cs
+++ b/src/windowsdesktop/tests/NuGetArtifactTester.cs
@@ -83,6 +83,11 @@ public void IsTargetingPackForPlatform()
HasGoodPlatformManifest();
}
+ public void IsAppHostPack()
+ {
+ IsRuntimeSpecificPack();
+ }
+
public void IsRuntimePack()
{
IsRuntimeSpecificPack();