From 7e9acb4fee9f5a638afe9913126e0a0231d517bd Mon Sep 17 00:00:00 2001 From: Adrian Vladu Date: Fri, 31 May 2024 11:28:17 +0300 Subject: [PATCH] Use Python installer from the https://www.python.org/ To avoid always writing the Python installation files to this folder, we can just download the installer, check the SHA1 checksum and install Python. This way, on the next Python version iteration, we can just change the SHA1 checksum dictionary and the build can be done. Signed-off-by: Adrian Vladu --- BuildAutomation/BuildCloudbaseInitSetup.ps1 | 58 ++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/BuildAutomation/BuildCloudbaseInitSetup.ps1 b/BuildAutomation/BuildCloudbaseInitSetup.ps1 index 2432f2cb..3e5cb442 100644 --- a/BuildAutomation/BuildCloudbaseInitSetup.ps1 +++ b/BuildAutomation/BuildCloudbaseInitSetup.ps1 @@ -1,6 +1,7 @@ Param( [string]$platform = "x64", - [string]$pythonversion = "3.11_9", + [string]$pythonversion = "3.12.3", + [string]$pythonversionPrelease = "", [string]$SignX509Thumbprint = $null, [string]$release = $null, # Cloudbase-Init repo details @@ -18,6 +19,13 @@ $ErrorActionPreference = "Stop" $scriptPath = split-path -parent $MyInvocation.MyCommand.Definition . "$scriptPath\BuildUtils.ps1" +$PythonInstallerSha1Hash = @{ + "python-installer-3.12.3-x64.exe" = "B1207FBA545A75841E2DBCA2AD4F17B26414E0C1"; + "python-installer-3.12.3-x86.exe" = "FF180F8EA0B126E5A0FAF0A22EC50E96E5B9C5AB"; + "python-installer-3.13.0b1-x64.exe" = "46ADF56A03D91D39EA4E8B6F5FFB080C824BDFDA"; + "python-installer-3.13.0b1-x86.exe" = "62E6FE0D5C9267275ABDD36302F327EB4E68C794"; +} + $platformVCVarsRequired = "x86_amd64" # On Visual Studio 2019, the mixed x86_amd64 VC variables # make compilation for x86 use the x64 functions @@ -76,6 +84,54 @@ try $python_template_dir = join-path $cloudbaseInitInstallerDir "Python$($pythonversion.replace('.', ''))_${platform}_Template" + ExecRetry -maxRetryCount 3 { + $pythonVersionInstaller = $pythonversion.Replace("-",".").Replace("_",".").Trim() + $pythonVersionInstallerSuffix = $pythonVersionInstaller + if ($pythonversionPrelease) { + $pythonVersionInstallerSuffix = $pythonversionPrelease + } + $pythonArchInstaller = "" + if ($platform -eq "x64") { + $pythonArchInstaller = "-amd64" + } + $pythonInstallerName = "python-installer-${pythonVersionInstallerSuffix}-${platform}.exe" + $pythonInstallerPath = (Join-Path $pwd $pythonInstallerName) + $PythonInstallerUrl = "https://www.python.org/ftp/python/${pythonVersionInstaller}/python-${pythonVersionInstallerSuffix}${pythonArchInstaller}.exe" + DownloadFile $PythonInstallerUrl $pythonInstallerPath + $expectedSha1Hash = $PythonInstallerSha1Hash[$pythonInstallerName] + if (!$expectedSha1Hash) { + throw "expected Sha1 Hash for ${pythonInstallerPath} is not configured" + } + $sha1Hash = (Get-FileHash -Algorithm SHA1 $pythonInstallerPath).Hash + if ($sha1Hash -ne $expectedSha1Hash) { + throw "$pythonInstallerPath SHA1 hash is: ${sha1Hash}. Expected hash: ${expectedSha1Hash}" + } + + try { + Write-Host "Trying to uninstall Python ${pythonVersionInstaller} to ${python_template_dir}" + $installProcess = Start-Process -PassThru -Wait $pythonInstallerPath ` + -ArgumentList "/silent /uninstall" + $installProcess.WaitForExit() + if ($installProcess.ExitCode -ne 0) { + Write-Host "Failed to uninstall ${pythonVersionInstaller} from ${python_template_dir}. Exit code: $($installProcess.ExitCode)" + } else { + Write-Host "Uninstalled Python ${pythonVersionInstaller} from ${python_template_dir}" + } + if ($python_template_dir -and (Test-Path $python_template_dir)) { + Remove-Item -Force -Recurse "${python_template_dir}" + } + } catch {Write-Host $_} + + Write-Host "Trying to install Python ${pythonVersionInstaller} to ${python_template_dir}" + $installProcess = Start-Process -PassThru -Wait $pythonInstallerPath ` + -ArgumentList "/silent TargetDir=${python_template_dir} Include_test=0 Include_tcltk=0 Include_launcher=0 Include_doc=0" + $installProcess.WaitForExit() + if ($installProcess.ExitCode -ne 0) { + throw "Failed to install ${pythonVersionInstaller} to ${python_template_dir}. Exit code: $($installProcess.ExitCode)" + } + Write-Host "Installed Python ${pythonVersionInstaller} to ${python_template_dir}" + } + CheckCopyDir $python_template_dir $python_dir # Make sure that we don't have temp files from a previous build