From 5f212e0b6bb8d81e22dc46863f5d7b30f5c363b6 Mon Sep 17 00:00:00 2001 From: Drew Scoggins Date: Mon, 20 Jul 2026 11:20:04 -0700 Subject: [PATCH 1/2] Migrate "Download binlog files" steps to DownloadPipelineArtifact@2 The two inline binlog download steps in runtime-perf-job.yml still used DownloadBuildArtifacts@0, which was missed by #5262. dotnet/runtime now publishes these binlogs as Pipeline Artifacts (#128498), so migrate the download side to DownloadPipelineArtifact@2, matching #5262's pattern (drop downloadType/checkDownloadedFiles, downloadPath -> targetPath). Paired with the runtime change giving these binlogs stable names. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 6f47a24b-d0d8-4286-afcc-a1f3d96552c5 --- eng/pipelines/templates/runtime-perf-job.yml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/eng/pipelines/templates/runtime-perf-job.yml b/eng/pipelines/templates/runtime-perf-job.yml index 282d11b307e..e5aaff1bcf2 100644 --- a/eng/pipelines/templates/runtime-perf-job.yml +++ b/eng/pipelines/templates/runtime-perf-job.yml @@ -180,12 +180,11 @@ jobs: displayName: 'Android Sample App' - - task: DownloadBuildArtifacts@0 + - task: DownloadPipelineArtifact@2 displayName: 'Download binlog files' inputs: buildType: current - downloadType: single - downloadPath: '$(builtAppDir)/androidHelloWorldBinlog' + targetPath: '$(builtAppDir)/androidHelloWorldBinlog' # AndroidMono ${{ if eq(parameters.runtimeType, 'AndroidMono')}}: ${{ if eq(parameters.codeGenType, 'JIT') }}: @@ -199,7 +198,6 @@ jobs: artifactName: 'AndroidCoreCLRArm64BuildLog' ${{ if eq(parameters.codeGenType, 'R2R') }}: artifactName: 'AndroidCoreCLRR2RArm64BuildLog' - checkDownloadedFiles: true # Disabled due to not working and needing consistent normal android results. https://github.com/dotnet/performance/issues/4729 # - template: /eng/pipelines/templates/download-artifact-step.yml @@ -250,12 +248,11 @@ jobs: ${{ if and(eq(parameters.runtimeType, 'iOSNativeAOT'), eq(parameters.iOSStripSymbols, 'True')) }}: artifactName: 'iOSSampleAppNativeAOTNoSymbols' checkDownloadedFiles: true - - task: DownloadBuildArtifacts@0 + - task: DownloadPipelineArtifact@2 displayName: 'Download binlog files' inputs: buildType: current - downloadType: single - downloadPath: '$(builtAppDir)/iosHelloWorldBinlog' + targetPath: '$(builtAppDir)/iosHelloWorldBinlog' ${{ if and(eq(parameters.runtimeType, 'iOSMono'), eq(parameters.codeGenType, 'FullAOT'), eq(parameters.iOSLlvmBuild, 'False'), eq(parameters.iOSStripSymbols, 'True')) }}: artifactName: 'iOSMonoFullAOTArm64NoLLVMStripSymbolsBuildLog' ${{ if and(eq(parameters.runtimeType, 'iOSMono'), eq(parameters.codeGenType, 'FullAOT'), eq(parameters.iOSLlvmBuild, 'True'), eq(parameters.iOSStripSymbols, 'True')) }}: @@ -265,5 +262,4 @@ jobs: ${{ if and(eq(parameters.runtimeType, 'iOSCoreCLR'), eq(parameters.codeGenType, 'R2R'), eq(parameters.iOSStripSymbols, 'True')) }}: artifactName: 'iOSCoreCLRR2RArm64StripSymbolsBuildLog' ${{ if and(eq(parameters.runtimeType, 'iOSNativeAOT'), eq(parameters.iOSStripSymbols, 'True')) }}: - artifactName: 'iOSNativeAOTArm64StripSymbolsBuildLog' - checkDownloadedFiles: true \ No newline at end of file + artifactName: 'iOSNativeAOTArm64StripSymbolsBuildLog' \ No newline at end of file From 4602988f9c84e31e87d4071641f56e0ebdc9e9f7 Mon Sep 17 00:00:00 2001 From: Drew Scoggins Date: Mon, 20 Jul 2026 13:12:17 -0700 Subject: [PATCH 2/2] Normalize remaining downloads to DownloadPipelineArtifact@2 Migrate the last inline "Download iOS Sample App" step in runtime-perf-job.yml off DownloadBuildArtifacts@0, completing the move to DownloadPipelineArtifact@2 for all downloads in the perf pipeline YAML (eng/common is Arcade-managed and left as-is). DownloadPipelineArtifact@2 places a named artifact's contents directly in targetPath, without the subfolder that DownloadBuildArtifacts@0 created. The payload-staging globs in run_performance_job.py used "**" without recursive=True, so they only matched one intermediate directory and would miss the now-flattened .binlog/.zip files (fatal for the iOS sample app zip). Make those three globs recursive; recursive=True also still matches the old nested layout, so it is safe across the transition. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 6f47a24b-d0d8-4286-afcc-a1f3d96552c5 --- eng/pipelines/templates/runtime-perf-job.yml | 6 ++---- scripts/run_performance_job.py | 6 +++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/eng/pipelines/templates/runtime-perf-job.yml b/eng/pipelines/templates/runtime-perf-job.yml index e5aaff1bcf2..479d40959a8 100644 --- a/eng/pipelines/templates/runtime-perf-job.yml +++ b/eng/pipelines/templates/runtime-perf-job.yml @@ -231,12 +231,11 @@ jobs: artifactFileName: 'iOSSampleAppNativeAOTNoSymbols.zip' displayName: 'iOS Sample App' # same artifact as above but don't extract .zip - - task: DownloadBuildArtifacts@0 + - task: DownloadPipelineArtifact@2 displayName: 'Download iOS Sample App' inputs: buildType: current - downloadType: single - downloadPath: '$(builtAppDir)/iosHelloWorldZip' + targetPath: '$(builtAppDir)/iosHelloWorldZip' ${{ if and(eq(parameters.runtimeType, 'iOSMono'), eq(parameters.codeGenType, 'FullAOT'), eq(parameters.iOSLlvmBuild, 'False'), eq(parameters.iOSStripSymbols, 'True')) }}: artifactName: 'iOSSampleAppMonoFullAOTNoLLVMNoSymbols' ${{ if and(eq(parameters.runtimeType, 'iOSMono'), eq(parameters.codeGenType, 'FullAOT'), eq(parameters.iOSLlvmBuild, 'True'), eq(parameters.iOSStripSymbols, 'True')) }}: @@ -247,7 +246,6 @@ jobs: artifactName: 'iOSSampleAppCoreCLRR2RNoSymbols' ${{ if and(eq(parameters.runtimeType, 'iOSNativeAOT'), eq(parameters.iOSStripSymbols, 'True')) }}: artifactName: 'iOSSampleAppNativeAOTNoSymbols' - checkDownloadedFiles: true - task: DownloadPipelineArtifact@2 displayName: 'Download binlog files' inputs: diff --git a/scripts/run_performance_job.py b/scripts/run_performance_job.py index 5d93d189ab0..02cf4a01092 100644 --- a/scripts/run_performance_job.py +++ b/scripts/run_performance_job.py @@ -1070,7 +1070,7 @@ def run_performance_job(args: RunPerformanceJobArgs): android_binlog_dir = os.path.join(root_payload_dir, "androidHelloWorldBinlog") shutil.copytree(os.path.join(args.built_app_dir, "androidHelloWorldBinlog"), android_binlog_dir) - binlog_files = glob(os.path.join(android_binlog_dir, "**", "*.binlog")) + binlog_files = glob(os.path.join(android_binlog_dir, "**", "*.binlog"), recursive=True) if binlog_files: dest = os.path.join(android_binlog_dir, "msbuild.binlog") getLogger().info(f"Moving {binlog_files[0]} to {dest}") @@ -1093,7 +1093,7 @@ def run_performance_job(args: RunPerformanceJobArgs): shutil.copytree(os.path.join(args.built_app_dir, "iosHelloWorldZip"), ios_hello_world_zip_dir) # Find the zip file in the directory and move it to iOSSampleApp.zip - zip_files = glob(os.path.join(ios_hello_world_zip_dir, "**", "*.zip")) + zip_files = glob(os.path.join(ios_hello_world_zip_dir, "**", "*.zip"), recursive=True) if zip_files: dest = os.path.join(ios_hello_world_zip_dir, "iOSSampleApp.zip") getLogger().info(f"Moving {zip_files[0]} to {dest}") @@ -1102,7 +1102,7 @@ def run_performance_job(args: RunPerformanceJobArgs): ios_hello_world_binlog_dir = os.path.join(payload_dir, "iosHelloWorldBinlog") shutil.copytree(os.path.join(args.built_app_dir, "iosHelloWorldBinlog"), ios_hello_world_binlog_dir) - binlog_files = glob(os.path.join(ios_hello_world_binlog_dir, "**", "*.binlog")) + binlog_files = glob(os.path.join(ios_hello_world_binlog_dir, "**", "*.binlog"), recursive=True) if binlog_files: dest = os.path.join(ios_hello_world_binlog_dir, "msbuild.binlog") getLogger().info(f"Moving {binlog_files[0]} to {dest}")