From ec9ce244d71043ce89384e94b8ed21f12aec1383 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Wed, 25 Feb 2026 22:07:47 +0000 Subject: [PATCH 1/6] Enable automatically starting the ARM64 VM on pipeline run --- windows-release/azure-pipelines.yml | 2 ++ windows-release/stage-build.yml | 5 +++++ windows-release/start-arm64vm.yml | 27 +++++++++++++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 windows-release/start-arm64vm.yml diff --git a/windows-release/azure-pipelines.yml b/windows-release/azure-pipelines.yml index 9f87474c..c197ac0d 100644 --- a/windows-release/azure-pipelines.yml +++ b/windows-release/azure-pipelines.yml @@ -163,6 +163,8 @@ stages: pool: vmImage: ${{ parameters.vmImage }} jobs: + - template: start-arm64vm.yml + - ${{ if eq(parameters.DoPGOARM64, 'true') }}: - template: stage-build.yml parameters: DoFreethreaded: ${{ parameters.DoFreethreaded }} diff --git a/windows-release/stage-build.yml b/windows-release/stage-build.yml index 1433b8ea..350a30a1 100644 --- a/windows-release/stage-build.yml +++ b/windows-release/stage-build.yml @@ -10,6 +10,7 @@ parameters: jobs: - job: Build_Docs displayName: Docs build + dependsOn: [] workspace: clean: all @@ -37,6 +38,7 @@ jobs: - job: Build_Python displayName: Python build + dependsOn: [] workspace: clean: all @@ -170,6 +172,7 @@ jobs: - ${{ if eq(parameters.DoPGO, 'true') }}: - job: Build_Python_PGO_Native displayName: Python PGO build + dependsOn: [] workspace: clean: all @@ -210,6 +213,7 @@ jobs: - ${{ if eq(parameters.DoPGOARM64, 'true') }}: - job: Build_Python_PGO_1 displayName: Python PGO build + dependsOn: [] workspace: clean: all @@ -324,6 +328,7 @@ jobs: - job: TclTk_Lib displayName: Publish Tcl/Tk Library + dependsOn: [] variables: IncludeLLVM: false diff --git a/windows-release/start-arm64vm.yml b/windows-release/start-arm64vm.yml new file mode 100644 index 00000000..50b056c3 --- /dev/null +++ b/windows-release/start-arm64vm.yml @@ -0,0 +1,27 @@ +jobs: +- job: Start_ARM64VM + displayName: 'Ensure ARM64 VM is running' + dependsOn: [] + + steps: + - task: AzureCLI@2 + displayName: 'Start pythonarm64 and set auto-shutdown to (UTC now - 1h)' + inputs: + azureSubscription: "Steve's VM" # WIF service connection name + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + $ErrorActionPreference = 'Stop' + + $rg = 'cpythonbuild' + $vm = 'pythonarm64' + + # Compute UTC time minus 1 hour, format HHmm (e.g. 1830) + $shutdownTime = (Get-Date).ToUniversalTime().AddHours(-1).ToString('HHmm') + Write-Host "Setting auto-shutdown time (UTC HHmm) to: $shutdownTime" + + # Configure daily auto-shutdown in 23 hours + az vm auto-shutdown -g $rg -n $vm --time $shutdownTime + + # Start VM, but don't fail if it's already running + az vm start -g $rg -n $vm From d233132fecf32d6b2d75d7b9198d6f19fdc024de Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Wed, 25 Feb 2026 22:11:04 +0000 Subject: [PATCH 2/6] Fix template --- windows-release/azure-pipelines.yml | 4 ++- windows-release/start-arm64vm.yml | 56 ++++++++++++++++------------- 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/windows-release/azure-pipelines.yml b/windows-release/azure-pipelines.yml index c197ac0d..d8db487c 100644 --- a/windows-release/azure-pipelines.yml +++ b/windows-release/azure-pipelines.yml @@ -164,7 +164,9 @@ stages: vmImage: ${{ parameters.vmImage }} jobs: - template: start-arm64vm.yml - - ${{ if eq(parameters.DoPGOARM64, 'true') }}: + parameters: + DoARM64: ${{ parameters.DoARM64 }} + DoPGOARM64: ${{ parameters.DoPGOARM64 }} - template: stage-build.yml parameters: DoFreethreaded: ${{ parameters.DoFreethreaded }} diff --git a/windows-release/start-arm64vm.yml b/windows-release/start-arm64vm.yml index 50b056c3..f023176c 100644 --- a/windows-release/start-arm64vm.yml +++ b/windows-release/start-arm64vm.yml @@ -1,27 +1,33 @@ +parameters: + DoARM64: false + DoPGOARM64: false + jobs: -- job: Start_ARM64VM - displayName: 'Ensure ARM64 VM is running' - dependsOn: [] +# Only include the job if we need the VM, which means ARM64 PGO. +- ${{ if eq(parameters.DoPGOARM64, 'true') }}: + - job: Start_ARM64VM + displayName: 'Ensure ARM64 VM is running' + dependsOn: [] + + steps: + - task: AzureCLI@2 + displayName: 'Start pythonarm64 and set auto-shutdown to (UTC now - 1h)' + inputs: + azureSubscription: "Steve's VM" # WIF service connection name + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + $ErrorActionPreference = 'Stop' + + $rg = 'cpythonbuild' + $vm = 'pythonarm64' + + # Compute UTC time minus 1 hour, format HHmm (e.g. 1830) + $shutdownTime = (Get-Date).ToUniversalTime().AddHours(-1).ToString('HHmm') + Write-Host "Setting auto-shutdown time to: $shutdownTime UTC" + + # Configure daily auto-shutdown in 23 hours + az vm auto-shutdown -g $rg -n $vm --time $shutdownTime - steps: - - task: AzureCLI@2 - displayName: 'Start pythonarm64 and set auto-shutdown to (UTC now - 1h)' - inputs: - azureSubscription: "Steve's VM" # WIF service connection name - scriptType: pscore - scriptLocation: inlineScript - inlineScript: | - $ErrorActionPreference = 'Stop' - - $rg = 'cpythonbuild' - $vm = 'pythonarm64' - - # Compute UTC time minus 1 hour, format HHmm (e.g. 1830) - $shutdownTime = (Get-Date).ToUniversalTime().AddHours(-1).ToString('HHmm') - Write-Host "Setting auto-shutdown time (UTC HHmm) to: $shutdownTime" - - # Configure daily auto-shutdown in 23 hours - az vm auto-shutdown -g $rg -n $vm --time $shutdownTime - - # Start VM, but don't fail if it's already running - az vm start -g $rg -n $vm + # Start VM, but don't fail if it's already running + az vm start -g $rg -n $vm From c26faba1fb612c0a099c89ac8a01ca95afddd440 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Wed, 25 Feb 2026 22:22:01 +0000 Subject: [PATCH 3/6] Only 12 hours, and better messages --- windows-release/start-arm64vm.yml | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/windows-release/start-arm64vm.yml b/windows-release/start-arm64vm.yml index f023176c..eb83b2d0 100644 --- a/windows-release/start-arm64vm.yml +++ b/windows-release/start-arm64vm.yml @@ -10,6 +10,8 @@ jobs: dependsOn: [] steps: + - checkout: none + - task: AzureCLI@2 displayName: 'Start pythonarm64 and set auto-shutdown to (UTC now - 1h)' inputs: @@ -22,12 +24,23 @@ jobs: $rg = 'cpythonbuild' $vm = 'pythonarm64' - # Compute UTC time minus 1 hour, format HHmm (e.g. 1830) - $shutdownTime = (Get-Date).ToUniversalTime().AddHours(-1).ToString('HHmm') + # Compute UTC time minus 12 hours, format HHmm (e.g. 1830) + $shutdownTime = (Get-Date).ToUniversalTime().AddHours(-12).ToString('HHmm') Write-Host "Setting auto-shutdown time to: $shutdownTime UTC" - # Configure daily auto-shutdown in 23 hours - az vm auto-shutdown -g $rg -n $vm --time $shutdownTime + # Configure daily auto-shutdown in 12 hours + az vm auto-shutdown -g $rg -n $vm --time $shutdownTime | Out-Null + if ($?) { + Write-Host "Successfully configured auto-shutdown for ARM64 VM in 12 hours." + } else { + Write-Host "##[warning]Failed to configure ARM64 VM auto-shutdown." + } # Start VM, but don't fail if it's already running - az vm start -g $rg -n $vm + az vm start -g $rg -n $vm | Out-Null + $u = "https://dev.azure.com/Python/cpython/_settings/agentqueues?queueId=24&view=agents" + if ($?) { + Write-Host "Successfully started ARM64 VM. Check $u for running status." + } else { + Write-Host "##[warning]Failed to start ARM64 VM. Check $u in case it is already active, or ping Steve." + } From 1cef5e7d8cf829cea217b03a09ae4cab7bb7056b Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Wed, 25 Feb 2026 23:02:14 +0000 Subject: [PATCH 4/6] Meant to be both conditions --- windows-release/start-arm64vm.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/windows-release/start-arm64vm.yml b/windows-release/start-arm64vm.yml index eb83b2d0..b4c154b6 100644 --- a/windows-release/start-arm64vm.yml +++ b/windows-release/start-arm64vm.yml @@ -4,7 +4,7 @@ parameters: jobs: # Only include the job if we need the VM, which means ARM64 PGO. -- ${{ if eq(parameters.DoPGOARM64, 'true') }}: +- ${{ if and(eq(parameters.DoARM64, 'true'), eq(parameters.DoPGOARM64, 'true')) }}: - job: Start_ARM64VM displayName: 'Ensure ARM64 VM is running' dependsOn: [] From cee32060400e56e4d0e5b8a39fe2e08d94560d8c Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Wed, 25 Feb 2026 23:11:34 +0000 Subject: [PATCH 5/6] Revert "Meant to be both conditions" This reverts commit 1cef5e7d8cf829cea217b03a09ae4cab7bb7056b. --- windows-release/start-arm64vm.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/windows-release/start-arm64vm.yml b/windows-release/start-arm64vm.yml index b4c154b6..eb83b2d0 100644 --- a/windows-release/start-arm64vm.yml +++ b/windows-release/start-arm64vm.yml @@ -4,7 +4,7 @@ parameters: jobs: # Only include the job if we need the VM, which means ARM64 PGO. -- ${{ if and(eq(parameters.DoARM64, 'true'), eq(parameters.DoPGOARM64, 'true')) }}: +- ${{ if eq(parameters.DoPGOARM64, 'true') }}: - job: Start_ARM64VM displayName: 'Ensure ARM64 VM is running' dependsOn: [] From 5e5dfc5f85239c26d2655ab54feb1ca8fb393b0b Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Wed, 25 Feb 2026 23:13:03 +0000 Subject: [PATCH 6/6] Remove unnecessary note --- windows-release/azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/windows-release/azure-pipelines.yml b/windows-release/azure-pipelines.yml index d8db487c..20335a9f 100644 --- a/windows-release/azure-pipelines.yml +++ b/windows-release/azure-pipelines.yml @@ -63,7 +63,7 @@ parameters: type: boolean default: true - name: DoPGOARM64 - displayName: "Run ARM64 PGO (requires custom VM)" + displayName: "Run ARM64 PGO" type: boolean default: true - name: DoLayout