diff --git a/appveyor-build-vs2026-images.yml b/appveyor-build-vs2026-images.yml index bb673885..84ee6557 100644 --- a/appveyor-build-vs2026-images.yml +++ b/appveyor-build-vs2026-images.yml @@ -1,8 +1,26 @@ environment: matrix: - # GCE + # Hyper-V # ======= + # - job_name: VS 2026 on Hyper-V - Part I + # bake_phase: 1 + # APPVEYOR_BUILD_WORKER_IMAGE: base-windows-server-2019-dc-hyperv + # APPVEYOR_BAKE_IMAGE: vs2026-temp-p1 + + # - job_name: VS 2026 on Hyper-V - Wait for Part I image to be ready + # bake_phase: wait-90-min + # job_depends_on: VS 2026 on Hyper-V - Part I + + # - job_name: VS 2026 on Hyper-V - Part II + # bake_phase: 3 + # job_depends_on: VS 2026 on Hyper-V - Wait for Part I image to be ready + # APPVEYOR_BUILD_WORKER_IMAGE: vs2026-temp-p1 + # APPVEYOR_BAKE_IMAGE: vs2026-master + + # # GCE (WS2022) + # # ======= + # - job_name: VS 2026 on GCE us-central1 - Part I # bake_phase: 1 # APPVEYOR_BUILD_WORKER_IMAGE: base-windows-server-2022-dc-gce-us-central1 @@ -12,6 +30,24 @@ environment: # bake_phase: wait-15-min # job_depends_on: VS 2026 on GCE us-central1 - Part I + # - job_name: VS 2026 on GCE us-central1 - Part II + # bake_phase: 3 + # job_depends_on: VS 2026 on GCE us-central1 - Wait for Part I image to be ready + # APPVEYOR_BUILD_WORKER_IMAGE: vs2026-temp-p1-gce-us-central1 + # APPVEYOR_BAKE_IMAGE: vs2026-master-gce-us-central1 + + # GCE (WS2019) + # ======= + + # - job_name: VS 2026 on GCE us-central1 - Part I + # bake_phase: 1 + # APPVEYOR_BUILD_WORKER_IMAGE: base-windows-server-2019-dc-gce-us-central1 + # APPVEYOR_BAKE_IMAGE: vs2026-temp-p1-gce-us-central1 + + # - job_name: VS 2026 on GCE us-central1 - Wait for Part I image to be ready + # bake_phase: wait-15-min + # job_depends_on: VS 2026 on GCE us-central1 - Part I + - job_name: VS 2026 on GCE us-central1 - Part II bake_phase: 3 job_depends_on: VS 2026 on GCE us-central1 - Wait for Part I image to be ready @@ -132,8 +168,7 @@ for: - ps: .\install_xunit_20.ps1 - ps: .\install_nunit3.ps1 - ps: .\install_vstest_console_logger.ps1 - # include Qt? Latest version only? - - ps: .\install_qt_fast_windows.ps1 + - ps: .\install_qt_minimal_windows.ps1 - ps: .\install_ruby.ps1 - matrix: @@ -167,7 +202,7 @@ for: - ps: .\install_jdk25.ps1 - ps: .\install_android_sdk.ps1 - ## skip all but python 3.9 and up + ## skip all but maintained Python 3.x versions - ps: .\install_python_new.ps1 - ps: .\install_openssl_new.ps1 - ps: .\install_msys64.ps1 @@ -192,6 +227,7 @@ for: # - ps: .\install_postgres14.ps1 - ps: .\install_postgres15.ps1 - ps: .\install_postgres16.ps1 + - ps: .\install_postgres18.ps1 - ps: .\install_mysql.ps1 - ps: .\install_mongo_new.ps1 @@ -199,6 +235,10 @@ for: - ps: Start-Sleep -s 5; Restart-Computer - ps: Start-Sleep -s 5 - ps: .\install_sql_server_2022_after_restart.ps1 + - ps: .\install_sql_server_2025.ps1 + - ps: Start-Sleep -s 5; Restart-Computer + - ps: Start-Sleep -s 5 + - ps: .\install_sql_server_2025_after_restart.ps1 - ps: .\install_aws_cli_v2.ps1 - ps: .\install_aws_powershell.ps1 @@ -241,8 +281,7 @@ for: # cygwin AND MSYS2? #- ps: .\install_cygwin.ps1 - ps: .\install_mingw-w64.ps1 - - ps: .\install_boost_1.88.0_vs2022.ps1 - - ps: .\install_boost_1.89.0_vs2022.ps1 + - ps: .\install_boost_1.91.0_vs2026.ps1 - ps: .\install_dotnet_devpacks.ps1 # Restart VM diff --git a/scripts/Windows/avvm/pack-node.ps1 b/scripts/Windows/avvm/pack-node.ps1 index ca70e3b5..430ee79c 100644 --- a/scripts/Windows/avvm/pack-node.ps1 +++ b/scripts/Windows/avvm/pack-node.ps1 @@ -3,9 +3,9 @@ $ErrorActionPreference = 'Stop' $avvmRoot = 'c:\avvm\node' $node_versions = @( - "22.22.0", - "24.13.0", - "25.3.0" + "22.22.3", + "24.16.0", + "26.2.0" ) foreach ($node_version in $node_versions) { @@ -39,4 +39,4 @@ foreach ($node_version in $node_versions) { Write-Host "Packing $node_version x64" 7z a "$avvmRoot\node-$node_version-x64.7z" "$avvmRoot\$node_version\x64\*" -} \ No newline at end of file +} diff --git a/scripts/Windows/install_7zip.ps1 b/scripts/Windows/install_7zip.ps1 index 107228bc..64b3dad0 100644 --- a/scripts/Windows/install_7zip.ps1 +++ b/scripts/Windows/install_7zip.ps1 @@ -3,9 +3,9 @@ Write-Host "================" [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -$exePath = "$env:TEMP\7z2501-x64.exe" +$exePath = "$env:TEMP\7z2601-x64.exe" -Invoke-WebRequest "https://www.7-zip.org/a/7z2501-x64.exe" -OutFile $exePath +Invoke-WebRequest "https://github.com/ip7z/7zip/releases/download/26.01/7z2601-x64.exe" -OutFile $exePath cmd /c start /wait $exePath /S del $exePath @@ -15,4 +15,4 @@ Add-Path "$sevenZipFolder" [Environment]::SetEnvironmentVariable("7zip", "`"$sevenZipFolder\7z.exe`"", "Machine") -Write-Host "7-Zip installed" \ No newline at end of file +Write-Host "7-Zip installed" diff --git a/scripts/Windows/install_boost_1.91.0_vs2026.ps1 b/scripts/Windows/install_boost_1.91.0_vs2026.ps1 new file mode 100644 index 00000000..be524d59 --- /dev/null +++ b/scripts/Windows/install_boost_1.91.0_vs2026.ps1 @@ -0,0 +1,42 @@ +. "$PSScriptRoot\common.ps1" + +Write-Host "Installing boost 1.91.0 for VS 2026..." -ForegroundColor Cyan + +$StopWatch = New-Object System.Diagnostics.Stopwatch +$StopWatch.Start() + +New-Item 'C:\Libraries' -ItemType Directory -Force + +Measure-Command { + Write-Host "Installing boost 1.91.0..." -ForegroundColor Cyan + + Write-Host "Downloading x86..." + $exePath = "$env:TEMP\boost_1_91_0-msvc-14.5-32.exe" + (New-Object Net.WebClient).DownloadFile('https://archives.boost.io/release/1.91.0/binaries/boost_1_91_0-msvc-14.5-32.exe', $exePath) + + Write-Host "Installing x86..." + cmd /c start /wait "$exePath" /verysilent + Remove-Item $exePath + + Write-Host "Downloading x64..." + $exePath = "$env:TEMP\boost_1_91_0-msvc-14.5-64.exe" + (New-Object Net.WebClient).DownloadFile('https://archives.boost.io/release/1.91.0/binaries/boost_1_91_0-msvc-14.5-64.exe', $exePath) + + Write-Host "Installing x64..." + cmd /c start /wait "$exePath" /verysilent + Remove-Item $exePath + + if (Test-Path 'C:\Libraries\boost_1_91_0') { + Remove-Item 'C:\Libraries\boost_1_91_0' -Force -Recurse + } + + [IO.Directory]::Move('C:\local\boost_1_91_0', 'C:\Libraries\boost_1_91_0') + + Remove-Item 'C:\local' -Force -Recurse + + Write-Host "Compressing..." + Start-ProcessWithOutput "compact /c /i /q /s:C:\Libraries\boost_1_91_0" -IgnoreStdOut +} + +$StopWatch.Stop() +Write-Host "Boost libraries installed in $("{0:hh}:{0:mm}:{0:ss}" -f $StopWatch.elapsed)" -ForegroundColor Green diff --git a/scripts/Windows/install_chrome_browser.ps1 b/scripts/Windows/install_chrome_browser.ps1 index aa7e8bce..b6b97820 100644 --- a/scripts/Windows/install_chrome_browser.ps1 +++ b/scripts/Windows/install_chrome_browser.ps1 @@ -1,12 +1,13 @@ . "$PSScriptRoot\common.ps1" -#143.0.7499.192 +# 149.0.7827.22 Write-Host "Installing Chrome..." -ForegroundColor Cyan Write-Host "Downloading..." $msiPath = "$env:TEMP\googlechromestandaloneenterprise64.msi" -#(New-Object Net.WebClient).DownloadFile('https://dl.google.com/tag/s/dl/chrome/install/googlechromestandaloneenterprise64.msi', $msiPath) -(New-Object Net.WebClient).DownloadFile('https://dl.google.com/tag/s/appguid%3D%7B8A69D345-D564-463C-AFF1-A69D9E530F96%7D%26iid%3D%7B5CD65CD9-C1D0-4A31-AEAA-4DFABF623BF5%7D%26browser%3D3%26usagestats%3D0%26appname%3DGoogle%2520Chrome%26needsadmin%3Dtrue%26ap%3Dx64-stable-statsdef_0%26brand%3DGCEA/dl/chrome/install/googlechromestandaloneenterprise64.msi', $msiPath) +(New-Object Net.WebClient).DownloadFile('https://dl.google.com/dl/chrome/install/googlechromestandaloneenterprise64.msi', $msiPath) +Write-Host "Installing..." +cmd /c start /wait msiexec /i "$msiPath" /qn /norestart Remove-Item $msiPath Set-Service gupdate -StartupType Manual -ErrorAction SilentlyContinue @@ -18,4 +19,4 @@ Unregister-ScheduledTask -TaskName GoogleUpdateTaskMachineUA -Confirm:$false -Er Start-Sleep -s 5 GetProductVersion "Chrome" -Write-Host "Installed Chrome" -ForegroundColor Green \ No newline at end of file +Write-Host "Installed Chrome" -ForegroundColor Green diff --git a/scripts/Windows/install_docker_desktop.ps1 b/scripts/Windows/install_docker_desktop.ps1 index 02e13926..185cc838 100644 --- a/scripts/Windows/install_docker_desktop.ps1 +++ b/scripts/Windows/install_docker_desktop.ps1 @@ -1,7 +1,5 @@ -# Write-Host "Installing Docker Desktop 2.2.0.5" -Write-Host "Installing Docker Desktop 4.56.0" - -https://desktop.docker.com/win/main/amd64/213807/Docker%20Desktop%20Installer.exe?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-windows +Write-Host "Installing Docker Desktop 2.2.0.5" +#Write-Host "Installing Docker Desktop 4.56.0" Write-Host "Downloading..." $exePath = "$env:TEMP\Docker-Desktop-Installer.exe" @@ -46,4 +44,4 @@ Write-Host "Mapping docker-switch-linux.cmd to Switch-DockerLinux..." powershell -command "Switch-DockerLinux" "@ | Set-Content -Path "$env:ProgramFiles\Docker\Docker\resources\bin\docker-switch-linux.cmd" -Write-Host "Finished the installation of Docker for Desktop" \ No newline at end of file +Write-Host "Finished the installation of Docker for Desktop" diff --git a/scripts/Windows/install_docker_desktop_after_reboot.ps1 b/scripts/Windows/install_docker_desktop_after_reboot.ps1 index 4078dd19..1ca3871c 100644 --- a/scripts/Windows/install_docker_desktop_after_reboot.ps1 +++ b/scripts/Windows/install_docker_desktop_after_reboot.ps1 @@ -89,7 +89,7 @@ if (Test-Path $configPath) { Write-Host "Switching Docker to Linux mode..." Switch-DockerLinux -Start-Sleep -s 30 +Start-Sleep -s 180 docker version docker pull busybox @@ -103,8 +103,8 @@ Switch-DockerWindows Start-Sleep -s 30 docker version -docker pull busybox -docker run --rm -v "$env:USERPROFILE`:/user-profile" busybox ls /user-profile +#docker pull busybox +#docker run --rm -v "$env:USERPROFILE`:/user-profile" busybox ls /user-profile if (-not $env:INSTALL_LATEST_ONLY) { PullRunDockerImages 14393 'ltsc2016' 'sac2016' diff --git a/scripts/Windows/install_doxygen.ps1 b/scripts/Windows/install_doxygen.ps1 index 8bcbb3b1..36af3ce0 100644 --- a/scripts/Windows/install_doxygen.ps1 +++ b/scripts/Windows/install_doxygen.ps1 @@ -11,7 +11,7 @@ if (Test-Path $destPath) { New-Item $destPath -ItemType directory -Force | Out-Null $zipPath = "$env:TEMP\doxygen.zip" -(New-Object Net.WebClient).DownloadFile('https://www.doxygen.nl/files/doxygen-1.16.1.windows.x64.bin.zip', $zipPath) +(New-Object Net.WebClient).DownloadFile('https://www.doxygen.nl/files/doxygen-1.17.0.windows.x64.bin.zip', $zipPath) 7z x $zipPath -aoa -o"$destPath" Remove-Item $zipPath @@ -20,4 +20,4 @@ Add-SessionPath $destPath cmd /c doxygen --version -Write-Host "Installed Doxygen" -ForegroundColor Green \ No newline at end of file +Write-Host "Installed Doxygen" -ForegroundColor Green diff --git a/scripts/Windows/install_edge_browser.ps1 b/scripts/Windows/install_edge_browser.ps1 index e6744165..6db36d54 100644 --- a/scripts/Windows/install_edge_browser.ps1 +++ b/scripts/Windows/install_edge_browser.ps1 @@ -1,10 +1,10 @@ . "$PSScriptRoot\common.ps1" -# 143.0.3650.139 +# 148.0.3967.83 Write-Host "Installing Microsoft Edge..." -ForegroundColor Cyan Write-Host "Downloading..." $msiPath = "$env:TEMP\MicrosoftEdgeEnterpriseX64.msi" -(New-Object Net.WebClient).DownloadFile('https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/bb161c65-c060-4e98-a125-5e412c0b3364/MicrosoftEdgeEnterpriseX64.msi', $msiPath) +(New-Object Net.WebClient).DownloadFile('https://go.microsoft.com/fwlink/?LinkID=2093437', $msiPath) Write-Host "Installing..." cmd /c start /wait msiexec /i "$msiPath" /qn /norestart @@ -22,4 +22,4 @@ Unregister-ScheduledTask -TaskName MicrosoftEdgeUpdateTaskMachineUA -Confirm:$fa GetProductVersion "Edge" -Write-Host "Installed Microsoft Edge" -ForegroundColor Green \ No newline at end of file +Write-Host "Installed Microsoft Edge" -ForegroundColor Green diff --git a/scripts/Windows/install_firefox_browser.ps1 b/scripts/Windows/install_firefox_browser.ps1 index f2a068e2..9c0ca470 100644 --- a/scripts/Windows/install_firefox_browser.ps1 +++ b/scripts/Windows/install_firefox_browser.ps1 @@ -1,6 +1,6 @@ . "$PSScriptRoot\common.ps1" -$firefoxVersion = "147.0" +$firefoxVersion = "151.0.1" Write-Host "Installing FireFox $firefoxVersion..." -ForegroundColor Cyan @@ -20,4 +20,4 @@ Remove-Item $exePath GetProductVersion "Firefox" -Write-Host "Installed FireFox $firefoxVersion" -ForegroundColor Green \ No newline at end of file +Write-Host "Installed FireFox $firefoxVersion" -ForegroundColor Green diff --git a/scripts/Windows/install_flutter.ps1 b/scripts/Windows/install_flutter.ps1 index a3743ff3..5b1ecd2f 100644 --- a/scripts/Windows/install_flutter.ps1 +++ b/scripts/Windows/install_flutter.ps1 @@ -1,6 +1,6 @@ . "$PSScriptRoot\common.ps1" -$version = '3.38.7' +$version = '3.44.0' Write-Host "Installing Flutter SDK $version" Write-Host "=====================" @@ -22,4 +22,4 @@ Add-Path "$env:SystemDrive\flutter\bin" Start-ProcessWithOutput "flutter upgrade --force" Start-ProcessWithOutput "flutter doctor -v" -Write-Host "Flutter SDK installed" \ No newline at end of file +Write-Host "Flutter SDK installed" diff --git a/scripts/Windows/install_git.ps1 b/scripts/Windows/install_git.ps1 index 3259d435..03d16ddd 100644 --- a/scripts/Windows/install_git.ps1 +++ b/scripts/Windows/install_git.ps1 @@ -1,4 +1,4 @@ -$version = '2.52.0' +$version = '2.54.0' Write-Host "Installing Git $version" Write-Host "=====================" diff --git a/scripts/Windows/install_go.ps1 b/scripts/Windows/install_go.ps1 index 9b2c8297..5e463608 100644 --- a/scripts/Windows/install_go.ps1 +++ b/scripts/Windows/install_go.ps1 @@ -2,21 +2,27 @@ $go_versions = @( @{ - "version" = "1.25.6" + "version" = "1.26.3" + "folder" = "go126" + + } + @{ + "version" = "1.25.10" "folder" = "go125" } ) if (-not $env:INSTALL_LATEST_ONLY) { $go_versions = $go_versions + @( - @{ - "version" = "1.24.12" - "folder" = "go124" - } - @{ - "version" = "1.23.12" - "folder" = "go123" - } + + # @{ + # "version" = "1.24.12" + # "folder" = "go124" + # } + # @{ + # "version" = "1.23.12" + # "folder" = "go123" + # } # @{ # "version" = "1.22.12" # "folder" = "go122" @@ -29,47 +35,7 @@ if (-not $env:INSTALL_LATEST_ONLY) { # "version" = "1.20.14" # "folder" = "go120" # } - # @{ - # "version" = "1.19.13" - # "folder" = "go119" - # } - # @{ - # "version" = "1.18.10" - # "folder" = "go118" - # } - # @{ - # "version" = "1.17.13" - # "folder" = "go117" - # } - # @{ - # "version" = "1.16.15" - # "folder" = "go116" - # } - # @{ - # "version" = "1.15.15" - # "folder" = "go115" - # } - # @{ - # "version" = "1.14.15" - # "folder" = "go114" - # } - # @{ - # "version" = "1.13.15" - # "folder" = "go113" - # } - # @{ - # "version" = "1.12.17" - # "folder" = "go112" - # } - # @{ - # "version" = "1.11.13" - # "folder" = "go111" - # } - # @{ - # "version" = "1.10.8" - # "folder" = "go110" - # } - ) + ) } function InstallGo ($go_version, $folder_name) { diff --git a/scripts/Windows/install_innosetup.ps1 b/scripts/Windows/install_innosetup.ps1 index 97592c56..a72c0de3 100644 --- a/scripts/Windows/install_innosetup.ps1 +++ b/scripts/Windows/install_innosetup.ps1 @@ -1,12 +1,12 @@ -Write-Host "Installing InnoSetup 6.6.1..." -ForegroundColor Cyan +Write-Host "Installing InnoSetup 6.7.3..." -ForegroundColor Cyan -$exePath = "$env:TEMP\innosetup-6.6.1.exe" +$exePath = "$env:TEMP\innosetup-6.7.3.exe" Write-Host "Downloading..." -(New-Object Net.WebClient).DownloadFile('https://files.jrsoftware.org/is/6/innosetup-6.6.1.exe', $exePath) +(New-Object Net.WebClient).DownloadFile('https://github.com/jrsoftware/issrc/releases/download/is-6_7_3/innosetup-6.7.3.exe', $exePath) Write-Host "Installing..." cmd /c start /wait $exePath /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP- Remove-Item $exePath -Write-Host "InnoSetup installed" -ForegroundColor Green \ No newline at end of file +Write-Host "InnoSetup installed" -ForegroundColor Green diff --git a/scripts/Windows/install_llvm.ps1 b/scripts/Windows/install_llvm.ps1 index 2b0f4470..90b09361 100644 --- a/scripts/Windows/install_llvm.ps1 +++ b/scripts/Windows/install_llvm.ps1 @@ -1,4 +1,4 @@ -$llvmVersion = "21.1.0" +$llvmVersion = "22.1.6" Write-Host "Installing LLVM $llvmVersion ..." -ForegroundColor Cyan Write-Host "Downloading..." $exePath = "$env:temp\LLVM-$llvmVersion-win64.exe" diff --git a/scripts/Windows/install_maven.ps1 b/scripts/Windows/install_maven.ps1 index 8766cb9b..9b5822f5 100644 --- a/scripts/Windows/install_maven.ps1 +++ b/scripts/Windows/install_maven.ps1 @@ -1,4 +1,4 @@ -Write-Host "Installing Apache Maven 3.9.12 ..." -ForegroundColor Cyan +Write-Host "Installing Apache Maven 3.9.16 ..." -ForegroundColor Cyan $apachePath = "${env:ProgramFiles(x86)}\Apache" $mavenPath = "$apachePath\Maven" @@ -12,12 +12,14 @@ if (-not (Test-Path $apachePath)) { } Write-Host "Downloading..." -$zipPath = "$env:TEMP\apache-maven-3.9.12-bin.zip" -(New-Object Net.WebClient).DownloadFile('https://dlcdn.apache.org/maven/maven-3/3.9.12/binaries/apache-maven-3.9.12-bin.zip', $zipPath) +$zipPath = "$env:TEMP\apache-maven-3.9.16-bin.zip" +(New-Object Net.WebClient).DownloadFile('https://dlcdn.apache.org/maven/maven-3/3.9.16/binaries/apache-maven-3.9.16-bin.zip', $zipPath) +if (-not (Test-Path $zipPath)) { throw "Unable to find $zipPath" } Write-Host "Unpacking..." 7z x $zipPath -oC:\apache-maven | Out-Null -[IO.Directory]::Move('C:\apache-maven\apache-maven-3.9.12', $mavenPath) +if (-not (Test-Path 'C:\apache-maven\apache-maven-3.9.16')) { throw "Unpacked Maven directory was not created." } +[IO.Directory]::Move('C:\apache-maven\apache-maven-3.9.16', $mavenPath) Remove-Item 'C:\apache-maven' -Recurse -Force Remove-Item $zipPath @@ -29,4 +31,4 @@ Add-SessionPath "$mavenPath\bin" mvn --version -Write-Host "Apache Maven 3.9.12 installed" -ForegroundColor Green \ No newline at end of file +Write-Host "Apache Maven 3.9.16 installed" -ForegroundColor Green diff --git a/scripts/Windows/install_nodejs_latest.ps1 b/scripts/Windows/install_nodejs_latest.ps1 index e7f77a7f..c76bf6da 100644 --- a/scripts/Windows/install_nodejs_latest.ps1 +++ b/scripts/Windows/install_nodejs_latest.ps1 @@ -10,12 +10,9 @@ function Install-Nodejs { #"17.9.1", #"18.20.3", #"19.9.0", - "20.20.0", - #"21.7.3", - "22.22.0", - #"23.11.1", - "24.13.0", - "25.3.0" + "22.22.3", + "24.16.0", + "26.2.0" ) @@ -304,4 +301,4 @@ Add-Path "$env:APPDATA\npm" # set AVVM URL [System.Environment]::SetEnvironmentVariable("AVVM_DOWNLOAD_URL", "https://appveyordownloads.blob.core.windows.net/avvm", "Machine") -$env:INSTALL_LATEST_ONLY=$null \ No newline at end of file +$env:INSTALL_LATEST_ONLY=$null diff --git a/scripts/Windows/install_octo.ps1 b/scripts/Windows/install_octo.ps1 index 237374b3..5fb8ab9e 100644 --- a/scripts/Windows/install_octo.ps1 +++ b/scripts/Windows/install_octo.ps1 @@ -9,18 +9,17 @@ if(-not (Test-Path $destPath)) { } #$oldZipPath = "$env:TEMP\OctopusTools.zip" -$zipPath = "$env:TEMP\OctoCli.zip" -(New-Object Net.WebClient).DownloadFile('https://github.com/OctopusDeploy/cli/releases/download/v2.20.1/octopus_2.20.1_windows_amd64.msi', $zipPath) +$msiPath = "$env:TEMP\OctoCli.msi" +(New-Object Net.WebClient).DownloadFile('https://github.com/OctopusDeploy/cli/releases/download/v2.20.1/octopus_2.20.1_windows_amd64.msi', $msiPath) # (New-Object Net.WebClient).DownloadFile('https://download.octopusdeploy.com/octopus-tools/6.17.0/OctopusTools.6.17.0.zip', $oldZipPath) #7z x $oldZipPath -aoa -o"$destPath" -7z x $zipPath -aoa -o"$destPath" +7z x $msiPath -aoa -o"$destPath" gci $destPath -r | select -exp FullName -Remove-Item $zipPath +Remove-Item $msiPath Add-Path $destPath Add-SessionPath $destPath -cmd /c octo --version cmd /c octopus --version -Write-Host "Installed Octopus tools" -ForegroundColor Green \ No newline at end of file +Write-Host "Installed Octopus tools" -ForegroundColor Green diff --git a/scripts/Windows/install_openssl_new.ps1 b/scripts/Windows/install_openssl_new.ps1 index 85dd65a8..3cfbcd19 100644 --- a/scripts/Windows/install_openssl_new.ps1 +++ b/scripts/Windows/install_openssl_new.ps1 @@ -21,10 +21,10 @@ function UninstallOpenSSL($productName) { } -Write-Host "Installing OpenSSL 3.4.3 32-bit ..." -ForegroundColor Cyan +Write-Host "Installing OpenSSL 3.4.5 32-bit ..." -ForegroundColor Cyan Write-Host "Downloading..." -$exePath = "$env:temp\Win32OpenSSL-3_4_3.exe" -(New-Object Net.WebClient).DownloadFile("https://slproweb.com/download/Win32OpenSSL-3_4_3.exe", $exePath) +$exePath = "$env:temp\Win32OpenSSL-3_4_5.exe" +(New-Object Net.WebClient).DownloadFile("https://slproweb.com/download/Win32OpenSSL-3_4_5.exe", $exePath) if (-not (Test-Path $exePath)) { throw "Unable to find $exePath" } Write-Host "Installing..." cmd /c start /wait $exePath /silent /verysilent /sp- /suppressmsgboxes /DIR=C:\OpenSSL-v34-Win32-temp @@ -32,10 +32,10 @@ Remove-Item $exePath Write-Host "Installed" -ForegroundColor Green Copy-Item C:\OpenSSL-v34-Win32-temp -Destination C:\OpenSSL-v34-Win32 -Recurse -Write-Host "Installing OpenSSL 3.4.3 64-bit ..." -ForegroundColor Cyan +Write-Host "Installing OpenSSL 3.4.5 64-bit ..." -ForegroundColor Cyan Write-Host "Downloading..." -$exePath = "$env:temp\Win64OpenSSL-3_4_3.exe" -(New-Object Net.WebClient).DownloadFile("https://slproweb.com/download/Win64OpenSSL-3_4_3.exe", $exePath) +$exePath = "$env:temp\Win64OpenSSL-3_4_5.exe" +(New-Object Net.WebClient).DownloadFile("https://slproweb.com/download/Win64OpenSSL-3_4_5.exe", $exePath) if (-not (Test-Path $exePath)) { throw "Unable to find $exePath" } Write-Host "Installing..." cmd /c start /wait $exePath /silent /verysilent /sp- /suppressmsgboxes /DIR=C:\OpenSSL-v34-Win64-temp @@ -43,13 +43,13 @@ Remove-Item $exePath Write-Host "Installed" -ForegroundColor Green Copy-Item C:\OpenSSL-v34-Win64-temp -Destination C:\OpenSSL-v34-Win64 -Recurse -UninstallOpenSSL "OpenSSL 3.4.3 (32-bit)" -UninstallOpenSSL "OpenSSL 3.4.3 (64-bit)" +UninstallOpenSSL "OpenSSL 3.4.5 (32-bit)" +UninstallOpenSSL "OpenSSL 3.4.5 (64-bit)" -Write-Host "Installing OpenSSL 3.5.4 32-bit ..." -ForegroundColor Cyan +Write-Host "Installing OpenSSL 3.5.6 32-bit ..." -ForegroundColor Cyan Write-Host "Downloading..." -$exePath = "$env:temp\Win32OpenSSL-3_5_4.exe" -(New-Object Net.WebClient).DownloadFile("https://slproweb.com/download/Win32OpenSSL-3_5_4.exe", $exePath) +$exePath = "$env:temp\Win32OpenSSL-3_5_6.exe" +(New-Object Net.WebClient).DownloadFile("https://slproweb.com/download/Win32OpenSSL-3_5_6.exe", $exePath) if (-not (Test-Path $exePath)) { throw "Unable to find $exePath" } Write-Host "Installing..." cmd /c start /wait $exePath /silent /verysilent /sp- /suppressmsgboxes /DIR=C:\OpenSSL-v35-Win32-temp @@ -57,10 +57,10 @@ Remove-Item $exePath Write-Host "Installed" -ForegroundColor Green Copy-Item C:\OpenSSL-v35-Win32-temp -Destination C:\OpenSSL-v35-Win32 -Recurse -Write-Host "Installing OpenSSL 3.5.4 64-bit ..." -ForegroundColor Cyan +Write-Host "Installing OpenSSL 3.5.6 64-bit ..." -ForegroundColor Cyan Write-Host "Downloading..." -$exePath = "$env:temp\Win64OpenSSL-3_5_4.exe" -(New-Object Net.WebClient).DownloadFile("https://slproweb.com/download/Win64OpenSSL-3_5_4.exe", $exePath) +$exePath = "$env:temp\Win64OpenSSL-3_5_6.exe" +(New-Object Net.WebClient).DownloadFile("https://slproweb.com/download/Win64OpenSSL-3_5_6.exe", $exePath) if (-not (Test-Path $exePath)) { throw "Unable to find $exePath" } Write-Host "Installing..." cmd /c start /wait $exePath /silent /verysilent /sp- /suppressmsgboxes /DIR=C:\OpenSSL-v35-Win64-temp @@ -68,13 +68,13 @@ Remove-Item $exePath Write-Host "Installed" -ForegroundColor Green Copy-Item C:\OpenSSL-v35-Win64-temp -Destination C:\OpenSSL-v35-Win64 -Recurse -UninstallOpenSSL "OpenSSL 3.5.4 (32-bit)" -UninstallOpenSSL "OpenSSL 3.5.4 (64-bit)" +UninstallOpenSSL "OpenSSL 3.5.6 (32-bit)" +UninstallOpenSSL "OpenSSL 3.5.6 (64-bit)" -Write-Host "Installing OpenSSL 3.6.0 32-bit ..." -ForegroundColor Cyan +Write-Host "Installing OpenSSL 3.6.2 32-bit ..." -ForegroundColor Cyan Write-Host "Downloading..." -$exePath = "$env:temp\Win32OpenSSL-3_6_0.exe" -(New-Object Net.WebClient).DownloadFile("https://slproweb.com/download/Win32OpenSSL-3_6_0.exe", $exePath) +$exePath = "$env:temp\Win32OpenSSL-3_6_2.exe" +(New-Object Net.WebClient).DownloadFile("https://slproweb.com/download/Win32OpenSSL-3_6_2.exe", $exePath) if (-not (Test-Path $exePath)) { throw "Unable to find $exePath" } Write-Host "Installing..." cmd /c start /wait $exePath /silent /verysilent /sp- /suppressmsgboxes /DIR=C:\OpenSSL-v36-Win32-temp @@ -82,10 +82,10 @@ Remove-Item $exePath Write-Host "Installed" -ForegroundColor Green Copy-Item C:\OpenSSL-v36-Win32-temp -Destination C:\OpenSSL-v36-Win32 -Recurse -Write-Host "Installing OpenSSL 3.6.0 64-bit ..." -ForegroundColor Cyan +Write-Host "Installing OpenSSL 3.6.2 64-bit ..." -ForegroundColor Cyan Write-Host "Downloading..." -$exePath = "$env:temp\Win64OpenSSL-3_6_0.exe" -(New-Object Net.WebClient).DownloadFile("https://slproweb.com/download/Win64OpenSSL-3_6_0.exe", $exePath) +$exePath = "$env:temp\Win64OpenSSL-3_6_2.exe" +(New-Object Net.WebClient).DownloadFile("https://slproweb.com/download/Win64OpenSSL-3_6_2.exe", $exePath) if (-not (Test-Path $exePath)) { throw "Unable to find $exePath" } Write-Host "Installing..." cmd /c start /wait $exePath /silent /verysilent /sp- /suppressmsgboxes /DIR=C:\OpenSSL-v36-Win64-temp @@ -93,5 +93,5 @@ Remove-Item $exePath Write-Host "Installed" -ForegroundColor Green Copy-Item C:\OpenSSL-v36-Win64-temp -Destination C:\OpenSSL-v36-Win64 -Recurse -UninstallOpenSSL "OpenSSL 3.6.0 (32-bit)" -UninstallOpenSSL "OpenSSL 3.6.0 (64-bit)" \ No newline at end of file +UninstallOpenSSL "OpenSSL 3.6.2 (32-bit)" +UninstallOpenSSL "OpenSSL 3.6.2 (64-bit)" diff --git a/scripts/Windows/install_postgres15.ps1 b/scripts/Windows/install_postgres15.ps1 index 4a58354c..9cd3e118 100644 --- a/scripts/Windows/install_postgres15.ps1 +++ b/scripts/Windows/install_postgres15.ps1 @@ -5,8 +5,8 @@ Write-Host "Installing PostgreSQL 15..." -ForegroundColor Cyan Write-Host "Downloading..." # http://www.enterprisedb.com/products-services-training/pgdownload#windows -$exePath = "$env:TEMP\postgresql-15.8-1-windows-x64.exe" -(New-Object Net.WebClient).DownloadFile('https://get.enterprisedb.com/postgresql/postgresql-15.8-1-windows-x64.exe', $exePath) +$exePath = "$env:TEMP\postgresql-15.18-1-windows-x64.exe" +(New-Object Net.WebClient).DownloadFile('https://get.enterprisedb.com/postgresql/postgresql-15.18-1-windows-x64.exe', $exePath) Write-Host "Installing..." cmd /c start /wait $exePath --mode unattended --install_runtimes 0 --superpassword Password12! @@ -16,4 +16,4 @@ Write-Host "Setting up services..." Stop-Service postgresql-x64-15 Set-Service -Name postgresql-x64-15 -StartupType Manual -Write-Host "PostgreSQL 15 installed" -ForegroundColor Green \ No newline at end of file +Write-Host "PostgreSQL 15 installed" -ForegroundColor Green diff --git a/scripts/Windows/install_postgres16.ps1 b/scripts/Windows/install_postgres16.ps1 index 171bdf01..66cdcbf8 100644 --- a/scripts/Windows/install_postgres16.ps1 +++ b/scripts/Windows/install_postgres16.ps1 @@ -1,8 +1,8 @@ Write-Host "Installing PostgreSQL 16..." -ForegroundColor Cyan Write-Host "Downloading..." -$exePath = "$env:TEMP\postgresql-16.4-1-windows-x64.exe" -(New-Object Net.WebClient).DownloadFile('https://get.enterprisedb.com/postgresql/postgresql-16.4-1-windows-x64.exe', $exePath) +$exePath = "$env:TEMP\postgresql-16.14-1-windows-x64.exe" +(New-Object Net.WebClient).DownloadFile('https://get.enterprisedb.com/postgresql/postgresql-16.14-1-windows-x64.exe', $exePath) Write-Host "Installing..." @@ -13,4 +13,4 @@ Write-Host "Setting up services..." Stop-Service postgresql-x64-16 Set-Service -Name postgresql-x64-16 -StartupType Manual -Write-Host "PostgreSQL 16 installed" -ForegroundColor Green \ No newline at end of file +Write-Host "PostgreSQL 16 installed" -ForegroundColor Green diff --git a/scripts/Windows/install_postgres18.ps1 b/scripts/Windows/install_postgres18.ps1 new file mode 100644 index 00000000..5a5f2422 --- /dev/null +++ b/scripts/Windows/install_postgres18.ps1 @@ -0,0 +1,15 @@ +Write-Host "Installing PostgreSQL 18..." -ForegroundColor Cyan + +Write-Host "Downloading..." +$exePath = "$env:TEMP\postgresql-18.4-1-windows-x64.exe" +(New-Object Net.WebClient).DownloadFile('https://get.enterprisedb.com/postgresql/postgresql-18.4-1-windows-x64.exe', $exePath) + +Write-Host "Installing..." +cmd /c start /wait $exePath --mode unattended --install_runtimes 0 --superpassword Password12! +Remove-Item $exePath -ErrorAction SilentlyContinue + +Write-Host "Setting up services..." +Stop-Service postgresql-x64-18 +Set-Service -Name postgresql-x64-18 -StartupType Manual + +Write-Host "PostgreSQL 18 installed" -ForegroundColor Green diff --git a/scripts/Windows/install_python_new.ps1 b/scripts/Windows/install_python_new.ps1 index 3a7c4a4a..0da0ff22 100644 --- a/scripts/Windows/install_python_new.ps1 +++ b/scripts/Windows/install_python_new.ps1 @@ -131,106 +131,7 @@ function InstallPythonEXE($version, $platform, $targetPath) { # } # } -# Python 2.7.18 -$python27 = (GetUninstallString 'Python 2.7.18') -if ($python27) { - Write-Host 'Python 2.7.18 already installed' -} -else { - UninstallPython "Python 2.7.14" - UninstallPython "Python 2.7.14 (64-bit)" - UninstallPython "Python 2.7.15" - UninstallPython "Python 2.7.15 (64-bit)" - UninstallPython "Python 2.7.16" - UninstallPython "Python 2.7.16 (64-bit)" - UninstallPython "Python 2.7.18" - UninstallPython "Python 2.7.18 (64-bit)" - - InstallPythonMSI "2.7.18" "x64" "$env:SystemDrive\Python27-x64" - InstallPythonMSI "2.7.18" "x86" "$env:SystemDrive\Python27" -} - -UpdatePip "$env:SystemDrive\Python27" -UpdatePip "$env:SystemDrive\Python27-x64" - - -# if (-not $env:INSTALL_LATEST_ONLY) { - -# # Python 3.7 x64 -# $python37_x64 = (GetUninstallString 'Python 3.7.9 (64-bit)') -# if ($python37_x64) { -# Write-Host 'Python 3.7.9 x64 already installed' -# } -# else { - -# UninstallPython "Python 3.7.0 (64-bit)" -# UninstallPython "Python 3.7.5 (64-bit)" -# UninstallPython "Python 3.7.7 (64-bit)" -# UninstallPython "Python 3.7.8 (64-bit)" - -# InstallPythonEXE "3.7.9" "x64" "$env:SystemDrive\Python37-x64" -# } - - -# # Python 3.7 -# $python37 = (GetUninstallString 'Python 3.7.9 (32-bit)') -# if ($python37) { -# Write-Host 'Python 3.7.9 already installed' -# } -# else { -# UninstallPython "Python 3.7.0 (32-bit)" -# UninstallPython "Python 3.7.5 (32-bit)" -# UninstallPython "Python 3.7.7 (32-bit)" -# UninstallPython "Python 3.7.8 (32-bit)" - -# InstallPythonEXE "3.7.9" "x86" "$env:SystemDrive\Python37" -# } - -# UpdatePip "$env:SystemDrive\Python37" -# UpdatePip "$env:SystemDrive\Python37-x64" -# } - -# Python 3.8 x64 -$python38_x64 = (GetUninstallString 'Python 3.8.10 (64-bit)') -if ($python38_x64) { - Write-Host 'Python 3.8.10 x64 already installed' -} -else { - InstallPythonEXE "3.8.10" "x64" "$env:SystemDrive\Python38-x64" -} - -# Python 3.8 -$python38 = (GetUninstallString 'Python 3.8.10 (32-bit)') -if ($python38) { - Write-Host 'Python 3.8.10 already installed' -} -else { - InstallPythonEXE "3.8.10" "x86" "$env:SystemDrive\Python38" -} - -UpdatePip "$env:SystemDrive\Python38" -UpdatePip "$env:SystemDrive\Python38-x64" - -# Python 3.9 x64 -$python39_x64 = (GetUninstallString 'Python 3.9.13 (64-bit)') -if ($python39_x64) { - Write-Host 'Python 3.9.13 x64 already installed' - UninstallPython "Python 3.9.13 (64-bit)" -} - -InstallPythonEXE "3.9.13" "x64" "$env:SystemDrive\Python39-x64" - -# Python 3.9 -$python39 = (GetUninstallString 'Python 3.9.13 (32-bit)') -if ($python39) { - Write-Host 'Python 3.9.13 already installed' - UninstallPython "Python 3.9.13 (32-bit)" -} - -InstallPythonEXE "3.9.13" "x86" "$env:SystemDrive\Python39" - -UpdatePip "$env:SystemDrive\Python39" -UpdatePip "$env:SystemDrive\Python39-x64" +# Skip EOL branches: 2.7, 3.8 and 3.9. # Python 3.10 $python310 = (GetUninstallString 'Python 3.10.11 (32-bit)') @@ -299,21 +200,21 @@ Add-Path C:\Python312 Add-Path C:\Python312\Scripts # Python 3.13 x64 -$python313_x64 = (GetUninstallString 'Python 3.13.9 (64-bit)') +$python313_x64 = (GetUninstallString 'Python 3.13.13 (64-bit)') if ($python313_x64) { - Write-Host 'Python 3.13.9 x64 already installed' + Write-Host 'Python 3.13.13 x64 already installed' } else { - InstallPythonEXE "3.13.9" "x64" "$env:SystemDrive\Python313-x64" + InstallPythonEXE "3.13.13" "x64" "$env:SystemDrive\Python313-x64" } # Python 3.13 -$python313 = (GetUninstallString 'Python 3.13.9 (32-bit)') +$python313 = (GetUninstallString 'Python 3.13.13 (32-bit)') if ($python313) { - Write-Host 'Python 3.13.9 already installed' + Write-Host 'Python 3.13.13 already installed' } else { - InstallPythonEXE "3.13.9" "x86" "$env:SystemDrive\Python313" + InstallPythonEXE "3.13.13" "x86" "$env:SystemDrive\Python313" } UpdatePip "$env:SystemDrive\Python313" @@ -323,21 +224,21 @@ Add-Path C:\Python313 Add-Path C:\Python313\Scripts # Python 3.14 x64 -$python314_x64 = (GetUninstallString 'Python 3.14.0 (64-bit)') +$python314_x64 = (GetUninstallString 'Python 3.14.5 (64-bit)') if ($python314_x64) { - Write-Host 'Python 3.14.0 x64 already installed' + Write-Host 'Python 3.14.5 x64 already installed' } else { - InstallPythonEXE "3.14.0" "x64" "$env:SystemDrive\Python314-x64" + InstallPythonEXE "3.14.5" "x64" "$env:SystemDrive\Python314-x64" } # Python 3.14 -$python314 = (GetUninstallString 'Python 3.14.0 (32-bit)') +$python314 = (GetUninstallString 'Python 3.14.5 (32-bit)') if ($python314) { - Write-Host 'Python 3.14.0 already installed' + Write-Host 'Python 3.14.5 already installed' } else { - InstallPythonEXE "3.14.0" "x86" "$env:SystemDrive\Python314" + InstallPythonEXE "3.14.5" "x86" "$env:SystemDrive\Python314" } UpdatePip "$env:SystemDrive\Python314" @@ -393,27 +294,8 @@ function CheckPython($path) { # CheckPython 'C:\Python26-x64' # } -CheckPython 'C:\Python27' -CheckPython 'C:\Python27-x64' - -if (-not $env:INSTALL_LATEST_ONLY) { - # CheckPython 'C:\Python33' - # CheckPython 'C:\Python33-x64' - # CheckPython 'C:\Python34' - # CheckPython 'C:\Python34-x64' - # CheckPython 'C:\Python35' - # CheckPython 'C:\Python35-x64' - # CheckPython 'C:\Python36' - # CheckPython 'C:\Python36-x64' - # CheckPython 'C:\Python37' - # CheckPython 'C:\Python37-x64' - CheckPython 'C:\Python38' - CheckPython 'C:\Python38-x64' - CheckPython 'C:\Python39' - CheckPython 'C:\Python39-x64' - CheckPython 'C:\Python310' - CheckPython 'C:\Python310-x64' -} +CheckPython 'C:\Python310' +CheckPython 'C:\Python310-x64' CheckPython 'C:\Python311' CheckPython 'C:\Python311-x64' @@ -422,4 +304,4 @@ CheckPython 'C:\Python312-x64' CheckPython 'C:\Python313' CheckPython 'C:\Python313-x64' CheckPython 'C:\Python314' -CheckPython 'C:\Python314-x64' \ No newline at end of file +CheckPython 'C:\Python314-x64' diff --git a/scripts/Windows/install_qt_minimal_installer_windows.ps1 b/scripts/Windows/install_qt_minimal_installer_windows.ps1 new file mode 100644 index 00000000..3ecc9c21 --- /dev/null +++ b/scripts/Windows/install_qt_minimal_installer_windows.ps1 @@ -0,0 +1,133 @@ +. "$PSScriptRoot\common.ps1" + +Write-Host "Installing minimal Qt 6.x set with Qt Online Installer..." -ForegroundColor Cyan + +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + +$qtRoot = "C:\Qt" +$qtMirror = "http://qt.mirror.constant.com" +$installerUrl = "https://download.qt.io/official_releases/online_installers/qt-online-installer-windows-x64-online.exe" +$installerPath = "$env:TEMP\qt-online-installer-windows-x64-online.exe" + +function Get-VersionId($version) { + return $version.Replace('.', '') +} + +function Get-QtPackageIds($version, $suffixes) { + $versionId = Get-VersionId $version + return $suffixes | ForEach-Object { "qt.qt6.$versionId.$_" } +} + +function Invoke-QtInstall($toolPath, $packages, [switch]$UseRoot) { + if (-not $packages -or $packages.Count -eq 0) { + return + } + + $arguments = @() + if ($UseRoot) { + $arguments += "--root `"$qtRoot`"" + } + + $arguments += @( + "--mirror $qtMirror", + "--accept-licenses", + "--accept-obligations", + "--default-answer", + "--confirm-command", + "install" + ) + $arguments += $packages + + Start-ProcessWithOutput "`"$toolPath`" $($arguments -join ' ')" +} + +function CreateJunction($link, $target) { + if (Test-Path $link) { + $existingItem = Get-Item $link -Force + if (-not ($existingItem.Attributes -band [IO.FileAttributes]::ReparsePoint)) { + throw "Refusing to replace existing non-junction path '$link'." + } + + Remove-Item $link -Force + } + + cmd /c mklink /J $link $target | Out-Null +} + +$qtTools = @( + "qt.tools.win32_mingw530", + "qt.tools.win32_mingw810", + "qt.tools.win64_mingw810", + "qt.tools.win64_mingw900", + "qt.tools.ifw.47", + "qt.license.thirdparty" +) + +$qtExtensionGroups = @( + @{ + version = "6.11.1" + packages = @( + "extensions.qtwebengine.6111.win64_msvc2022_64", + "extensions.qtwebengine.6111.win64_msvc2022_arm64_cross_compiled", + "extensions.qtpdf.6111.win64_msvc2022_64", + "extensions.qtpdf.6111.win64_msvc2022_arm64_cross_compiled" + ) + } + @{ + version = "6.10.3" + packages = @( + "extensions.qtwebengine.6103.win64_msvc2022_64", + "extensions.qtwebengine.6103.win64_msvc2022_arm64_cross_compiled", + "extensions.qtpdf.6103.win64_msvc2022_64", + "extensions.qtpdf.6103.win64_msvc2022_arm64_cross_compiled" + ) + } +) + +$qtAliasGroups = @( + @{ + version = "6.11.1" + packages = @( + "qt6.11.1-sdk" + ) + } + @{ + version = "6.10.3" + packages = @( + "qt6.10.3-sdk" + ) + } +) + +New-Item $qtRoot -ItemType Directory -Force | Out-Null + +Write-Host "Downloading Qt Online Installer..." -ForegroundColor Cyan +(New-Object Net.WebClient).DownloadFile($installerUrl, $installerPath) + +$primaryVersion = "6.11.1" +$primaryPackages = $qtAliasGroups[0].packages + $qtExtensionGroups[0].packages + $qtTools +Invoke-QtInstall $installerPath $primaryPackages -UseRoot + +$maintenanceTool = Join-Path $qtRoot "MaintenanceTool.exe" +if (-not (Test-Path $maintenanceTool)) { + throw "Qt Maintenance Tool was not created at '$maintenanceTool'." +} + +$secondaryVersion = "6.10.3" +$secondaryPackages = $qtAliasGroups[1].packages + $qtExtensionGroups[1].packages +Invoke-QtInstall $maintenanceTool $secondaryPackages + +if (-not (Test-Path "C:\Qt\6.11.1")) { + throw "Qt 6.11.1 was not installed under '$qtRoot'." +} + +if (-not (Test-Path "C:\Qt\6.10.3")) { + throw "Qt 6.10.3 was not installed under '$qtRoot'." +} + +CreateJunction -link "C:\Qt\6.11" -target "C:\Qt\6.11.1" +CreateJunction -link "C:\Qt\6.10" -target "C:\Qt\6.10.3" + +Remove-Item $installerPath -Force -ErrorAction SilentlyContinue + +Write-Host "Installed Qt 6.11.1 and 6.10.3 with Qt Online Installer" -ForegroundColor Green diff --git a/scripts/Windows/install_qt_minimal_windows.ps1 b/scripts/Windows/install_qt_minimal_windows.ps1 new file mode 100644 index 00000000..cb7e099a --- /dev/null +++ b/scripts/Windows/install_qt_minimal_windows.ps1 @@ -0,0 +1,244 @@ +Write-Host "Installing minimal Qt 6.x set ..." -ForegroundColor Cyan + +. "$PSScriptRoot\install_qt_module.ps1" + +$installDir = "C:\Qt" + +$modernComponents = @( + "win64_mingw", + "win64_msvc2022_64", + "win64_msvc2022_arm64_cross_compiled", + "debug_info", + "debug_info.win64_mingw", + "debug_info.win64_msvc2022_64", + "debug_info.win64_msvc2022_arm64_cross_compiled", + + "addons.qt3d", + "addons.qt3d.win64_mingw", + "addons.qt3d.win64_msvc2022_64", + "addons.qt3d.win64_msvc2022_arm64_cross_compiled", + + "addons.qtactiveqt", + "addons.qtactiveqt.win64_mingw", + "addons.qtactiveqt.win64_msvc2022_64", + "addons.qtactiveqt.win64_msvc2022_arm64_cross_compiled", + + "addons.qtcharts", + "addons.qtcharts.win64_mingw", + "addons.qtcharts.win64_msvc2022_64", + "addons.qtcharts.win64_msvc2022_arm64_cross_compiled", + + "addons.qtconnectivity", + "addons.qtconnectivity.win64_mingw", + "addons.qtconnectivity.win64_msvc2022_64", + "addons.qtconnectivity.win64_msvc2022_arm64_cross_compiled", + + "addons.qtdatavis3d", + "addons.qtdatavis3d.win64_mingw", + "addons.qtdatavis3d.win64_msvc2022_64", + "addons.qtdatavis3d.win64_msvc2022_arm64_cross_compiled", + + "addons.qtgraphs", + "addons.qtgraphs.win64_mingw", + "addons.qtgraphs.win64_msvc2022_64", + "addons.qtgraphs.win64_msvc2022_arm64_cross_compiled", + + "addons.qtgrpc", + "addons.qtgrpc.win64_mingw", + "addons.qtgrpc.win64_msvc2022_64", + "addons.qtgrpc.win64_msvc2022_arm64_cross_compiled", + + "addons.qthttpserver", + "addons.qthttpserver.win64_mingw", + "addons.qthttpserver.win64_msvc2022_64", + "addons.qthttpserver.win64_msvc2022_arm64_cross_compiled", + + "addons.qtimageformats", + "addons.qtimageformats.win64_mingw", + "addons.qtimageformats.win64_msvc2022_64", + "addons.qtimageformats.win64_msvc2022_arm64_cross_compiled", + + "addons.qtlanguageserver", + "addons.qtlanguageserver.win64_mingw", + "addons.qtlanguageserver.win64_msvc2022_64", + "addons.qtlanguageserver.win64_msvc2022_arm64_cross_compiled", + + "addons.qtlocation", + "addons.qtlocation.win64_mingw", + "addons.qtlocation.win64_msvc2022_64", + "addons.qtlocation.win64_msvc2022_arm64_cross_compiled", + + "addons.qtlottie", + "addons.qtlottie.win64_mingw", + "addons.qtlottie.win64_msvc2022_64", + "addons.qtlottie.win64_msvc2022_arm64_cross_compiled", + + "addons.qtmultimedia", + "addons.qtmultimedia.win64_mingw", + "addons.qtmultimedia.win64_msvc2022_64", + "addons.qtmultimedia.win64_msvc2022_arm64_cross_compiled", + + "addons.qtnetworkauth", + "addons.qtnetworkauth.win64_mingw", + "addons.qtnetworkauth.win64_msvc2022_64", + "addons.qtnetworkauth.win64_msvc2022_arm64_cross_compiled", + + "addons.qtpositioning", + "addons.qtpositioning.win64_mingw", + "addons.qtpositioning.win64_msvc2022_64", + "addons.qtpositioning.win64_msvc2022_arm64_cross_compiled", + + "addons.qtquick3dphysics", + "addons.qtquick3dphysics.win64_mingw", + "addons.qtquick3dphysics.win64_msvc2022_64", + "addons.qtquick3dphysics.win64_msvc2022_arm64_cross_compiled", + + "addons.qtquickeffectmaker", + "addons.qtquickeffectmaker.win64_mingw", + "addons.qtquickeffectmaker.win64_msvc2022_64", + + "addons.qtremoteobjects", + "addons.qtremoteobjects.win64_mingw", + "addons.qtremoteobjects.win64_msvc2022_64", + "addons.qtremoteobjects.win64_msvc2022_arm64_cross_compiled", + + "addons.qtscxml", + "addons.qtscxml.win64_mingw", + "addons.qtscxml.win64_msvc2022_64", + "addons.qtscxml.win64_msvc2022_arm64_cross_compiled", + + "addons.qtsensors", + "addons.qtsensors.win64_mingw", + "addons.qtsensors.win64_msvc2022_64", + "addons.qtsensors.win64_msvc2022_arm64_cross_compiled", + + "addons.qtserialbus", + "addons.qtserialbus.win64_mingw", + "addons.qtserialbus.win64_msvc2022_64", + "addons.qtserialbus.win64_msvc2022_arm64_cross_compiled", + + "addons.qtserialport", + "addons.qtserialport.win64_mingw", + "addons.qtserialport.win64_msvc2022_64", + "addons.qtserialport.win64_msvc2022_arm64_cross_compiled", + + "addons.qtspeech", + "addons.qtspeech.win64_mingw", + "addons.qtspeech.win64_msvc2022_64", + "addons.qtspeech.win64_msvc2022_arm64_cross_compiled", + + "addons.qtvirtualkeyboard", + "addons.qtvirtualkeyboard.win64_mingw", + "addons.qtvirtualkeyboard.win64_msvc2022_64", + "addons.qtvirtualkeyboard.win64_msvc2022_arm64_cross_compiled", + + "addons.qtwebchannel", + "addons.qtwebchannel.win64_mingw", + "addons.qtwebchannel.win64_msvc2022_64", + "addons.qtwebchannel.win64_msvc2022_arm64_cross_compiled", + + "addons.qtwebsockets", + "addons.qtwebsockets.win64_mingw", + "addons.qtwebsockets.win64_msvc2022_64", + "addons.qtwebsockets.win64_msvc2022_arm64_cross_compiled", + + "addons.qtwebview", + "addons.qtwebview.win64_mingw", + "addons.qtwebview.win64_msvc2022_64", + + "addons.qt5compat", + "addons.qt5compat.win64_mingw", + "addons.qt5compat.win64_msvc2022_64", + "addons.qt5compat.win64_msvc2022_arm64_cross_compiled", + + "addons.qtquick3d", + "addons.qtquick3d.win64_mingw", + "addons.qtquick3d.win64_msvc2022_64", + "addons.qtquick3d.win64_msvc2022_arm64_cross_compiled", + + "addons.qtquicktimeline", + "addons.qtquicktimeline.win64_mingw", + "addons.qtquicktimeline.win64_msvc2022_64", + "addons.qtquicktimeline.win64_msvc2022_arm64_cross_compiled", + + "addons.qtshadertools", + "addons.qtshadertools.win64_mingw", + "addons.qtshadertools.win64_msvc2022_64", + "addons.qtshadertools.win64_msvc2022_arm64_cross_compiled" +) + +$component_groups = @( + @{ + version = "6.11.1" + components = $modernComponents + } + @{ + version = "6.10.3" + components = $modernComponents + } + @{ + components = @( + "qt.tools.win32_mingw530", + "qt.tools.win32_mingw810", + "qt.tools.win64_mingw810", + "qt.tools.win64_mingw900", + "qt.tools.ifw.47", + "qt.license.thirdparty" + ) + } +) + +$extension_groups = @( + @{ + version = "6.11.1" + extensions = @( + "extensions.qtwebengine.6111.win64_msvc2022_64" + "extensions.qtpdf.6111.win64_msvc2022_64" + ) + } + @{ + version = "6.10.3" + extensions = @( + "extensions.qtwebengine.6103.win64_msvc2022_64" + "extensions.qtpdf.6103.win64_msvc2022_64" + ) + } +) + +foreach ($componentGroup in $component_groups) { + if ($componentGroup.version) { + $newPath = [IO.Path]::Combine($installDir, $componentGroup.version) + foreach ($component in $componentGroup.components) { + Install-QtComponent -Version $componentGroup.version -Name $component -Path $newPath -excludeDocs -excludeExamples + } + ConfigureQtVersion $installDir $componentGroup.version + } + else { + foreach ($component in $componentGroup.components) { + Install-QtComponent -Id $component -Path $installDir + } + } +} + +foreach ($extensionGroup in $extension_groups) { + $newPath = [IO.Path]::Combine($installDir, $extensionGroup.version) + foreach ($extension in $extensionGroup.extensions) { + Install-QtExtension -Version $extensionGroup.version -Name $extension -Path $newPath -excludeDocs -excludeExamples + } +} + +Write-Host "Compacting C:\Qt..." -NoNewline +compact /c /i /s:C:\Qt | Out-Null +Write-Host "OK" -ForegroundColor Green + +$sym_links = @{ + "6.11" = "6.11.1" + "6.10" = "6.10.3" +} + +foreach ($link in $sym_links.Keys) { + $target = $sym_links[$link] + New-Item -ItemType SymbolicLink -Path "$installDir\$link" -Target "$installDir\$target" -Force | Out-Null +} + +Write-Host "Minimal Qt 6.x installed" -ForegroundColor Green diff --git a/scripts/Windows/install_qt_module.ps1 b/scripts/Windows/install_qt_module.ps1 index 4e7374cd..e155675c 100644 --- a/scripts/Windows/install_qt_module.ps1 +++ b/scripts/Windows/install_qt_module.ps1 @@ -77,7 +77,7 @@ function GetVersionId($version) { function GetReleaseRootUrl($version) { $versionDigits = $version.Split('.') - if ([int]$versionDigits[1] -in 8,9) { + if ([int]$versionDigits[1] -ge 8) { return "$QT_ROOT_URL/$(GetQtPrefix $version)_$(GetVersionId $version)/$(GetQtPrefix $version)_$(GetVersionId $version)" } else { @@ -85,6 +85,25 @@ function GetReleaseRootUrl($version) { } } +function GetReleaseFeedRootUrls($version) { + $versionId = GetVersionId $version + $versionDigits = $version.Split('.') + $minorVersion = [int]$versionDigits[1] + + if ($IsWindows -and $minorVersion -ge 11) { + $basePath = "$QT_ROOT_URL/$(GetQtPrefix $version)_$versionId" + return @( + "$basePath/$(GetQtPrefix $version)_${versionId}_mingw", + "$basePath/$(GetQtPrefix $version)_${versionId}_msvc2022_64", + "$basePath/$(GetQtPrefix $version)_${versionId}_msvc2022_arm64_cross_compiled" + ) + } + + return @( + (GetReleaseRootUrl $version) + ) +} + function GetExtensionSections($ext) { $sections = $ext.Split('.') return $sections @@ -95,9 +114,11 @@ function FetchToolsUpdatePackages($toolsId) { } function FetchReleaseUpdatePackages($version) { - Write-host "GetReleaseRootUrl" - Write-Host "$(GetReleaseRootUrl $version)" - FetchUpdatePackages "$(GetReleaseRootUrl $version)" + Write-Host "GetReleaseRootUrl" + foreach ($feedRootUrl in (GetReleaseFeedRootUrls $version)) { + Write-Host $feedRootUrl + FetchUpdatePackages $feedRootUrl + } # FetchUpdatePackages "$(GetReleaseRootUrl $version)_src_doc_examples" } @@ -106,7 +127,14 @@ function FetchExtensionUpdatePackages($extension, $version) { $versionId = GetVersionId $version $sections = GetExtensionSections $extension if ($IsWindows) { - $feedRootUrl = "$QT_EXTENSIONS_URL/$($sections[1])/$versionId/msvc2022_64" + $platformFeed = "msvc2022_64" + if ($extension -match '\.win64_msvc2022_arm64_cross_compiled$') { + $platformFeed = "msvc2022_arm64_cross_compiled" + } + elseif ($extension -match '\.win64_mingw$') { + $platformFeed = "mingw" + } + $feedRootUrl = "$QT_EXTENSIONS_URL/$($sections[1])/$versionId/$platformFeed" } elseif ($IsLinux) { $feedRootUrl = "$QT_EXTENSIONS_URL/$($sections[1])/$versionId/x86_64" @@ -144,7 +172,12 @@ function FetchUpdatePackages($feedRootUrl) { if (-not $feeds_cache.ContainsKey($feedUrl)) { # load xml Write-Host "Fetching $feedUrl..." -NoNewline -ForegroundColor Gray - $feedXml = [xml](New-Object Net.WebClient).DownloadString($feedUrl) + try { + $feedXml = [xml](New-Object Net.WebClient).DownloadString($feedUrl) + } + catch { + throw "Failed to fetch Qt feed '$feedUrl': $($_.Exception.Message)" + } $feeds_cache[$feedUrl] = $feedXml # index 'PackageUpdate' nodes @@ -205,8 +238,30 @@ function InstallComponentById { Write-Host "Installing $componentId" -ForegroundColor Cyan Write-host "Installing to $destPath" + if ($excludeDocs -eq $true -and $componentId -match '\.doc(\.|$)') { + Write-Host "Skipped documentation installation" -ForegroundColor Yellow + return + } + if ($excludeExamples -eq $true -and $componentId -match '\.examples(\.|$)') { + Write-Host "Skipped examples installation" -ForegroundColor Yellow + return + } + if ($excludeExamples -eq $true -and $componentId -match '\.patcher(\.|$)') { + Write-Host "Skipped patcher installation" -ForegroundColor Yellow + return + } + $comp = $package_updates[$componentId] + if (-not $comp -and $componentId -match '^extensions\.[^.]+\.\d+$') { + Write-Host "Skipped missing extension meta-package $componentId" -ForegroundColor Yellow + return + } + + if (-not $comp) { + throw "Qt component '$componentId' was not found in fetched feeds." + } + # if ($whatIf -eq $true) { # $comp # } @@ -221,15 +276,6 @@ function InstallComponentById { Write-Host "Already installed" -ForegroundColor Yellow return } - - if ($excludeDocs -eq $true -and $componentId.EndsWith('.doc')) { - Write-Host "Skipped documentation installation" -ForegroundColor Yellow - return - } - if ($excludeExamples -eq $true -and $componentId.EndsWith('.examples')) { - Write-Host "Skipped examples installation" -ForegroundColor Yellow - return - } if ($comp.Name -match "mingw" -and ($version -ge 681)) { Write-Host "installing to mingw" $destPath = [IO.Path]::Combine($destPath, "mingw_64") @@ -319,6 +365,9 @@ function Install-QtExtension { function ConfigureQtVersion($qtRoot, $version) { $versionRoot = [IO.Path]::Combine($qtRoot, $version) + if (-not (Test-Path $versionRoot)) { + throw "Qt version root '$versionRoot' was not created." + } foreach($componentDir in (Get-ChildItem $versionRoot)) { $componentPath = $componentDir.FullName $componentBin = [IO.Path]::Combine($componentPath, 'bin') diff --git a/scripts/Windows/install_ruby.ps1 b/scripts/Windows/install_ruby.ps1 index 95345116..81cb24e2 100644 --- a/scripts/Windows/install_ruby.ps1 +++ b/scripts/Windows/install_ruby.ps1 @@ -8,78 +8,7 @@ $started = Get-Date $env:SSL_CERT_FILE = "$env:temp\cacert.pem" if (-not $env:INSTALL_LATEST_ONLY) { - $rubies = @( - # @{ - # "version" = "Ruby 1.9.3-p551" - # "install_path" = "C:\Ruby193" - # "download_url" = "https://appveyordownloads.blob.core.windows.net/misc/ruby/Ruby193.zip" - # "devkit_paths" = @() - # "install_psych" = "true" - # "dontUpdate" = $true - # "dontUpdateRubygems" = $true - # #"rubygemsUpdate" = $true - # } - # @{ - # "version" = "Ruby 2.5.9-1" - # "install_path" = "C:\Ruby25" - # "download_url" = "https://appveyordownloads.blob.core.windows.net/misc/ruby/Ruby25.zip" - # "devkit_url" = "" - # "devkit_paths" = @() - # "dontUpdate" = $true - # "bundlerV23" = $true - # "bundlerV25" = $false - # } - # @{ - # "version" = "Ruby 2.5.9-1 (x64)" - # "install_path" = "C:\Ruby25-x64" - # "download_url" = "https://appveyordownloads.blob.core.windows.net/misc/ruby/Ruby25-x64.zip" - # "devkit_url" = "" - # "devkit_paths" = @() - # "dontUpdate" = $true - # "bundlerV23" = $true - # "bundlerV25" = $false - # } - # @{ - # "version" = "Ruby 2.6.9-1" - # "install_path" = "C:\Ruby26" - # "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.9-1/rubyinstaller-2.6.9-1-x86.exe" - # "devkit_url" = "" - # "devkit_paths" = @() - # #"dontUpdate" = $true - # "bundlerV23" = $true - # "bundlerV25" = $false - # } - # @{ - # "version" = "Ruby 2.6.9-1 (x64)" - # "install_path" = "C:\Ruby26-x64" - # "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.9-1/rubyinstaller-2.6.9-1-x64.exe" - # "devkit_url" = "" - # "devkit_paths" = @() - # #"dontUpdate" = $true - # "bundlerV23" = $true - # "bundlerV25" = $false - # } - @{ - "version" = "Ruby 2.7.8-1" - "install_path" = "C:\Ruby27" - "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.8-1/rubyinstaller-2.7.8-1-x86.exe" - "devkit_url" = "" - "devkit_paths" = @() - #"dontUpdate" = $true - "bundlerV23" = $true - "bundlerV25" = $false - } - @{ - "version" = "Ruby 2.7.8-1 (x64)" - "install_path" = "C:\Ruby27-x64" - "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.8-1/rubyinstaller-2.7.8-1-x64.exe" - "devkit_url" = "" - "devkit_paths" = @() - #"dontUpdate" = $true - "bundlerV23" = $true - "bundlerV25" = $false - } - ) + $rubies = @() } else { $rubies = @() @@ -87,72 +16,45 @@ else { $rubies = $rubies + @( @{ - "version" = "Ruby 3.1.6-1" - "install_path" = "C:\Ruby31" - "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.6-1/rubyinstaller-3.1.6-1-x86.exe" - "devkit_url" = "" - "devkit_paths" = @() - "bundlerV23" = $false - "bundlerV25" = $true - } - @{ - "version" = "Ruby 3.1.6-1 (x64)" - "install_path" = "C:\Ruby31-x64" - "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.6-1/rubyinstaller-3.1.6-1-x64.exe" - "devkit_url" = "" - "devkit_paths" = @() - "bundlerV23" = $false - "bundlerV25" = $true - } - @{ - "version" = "Ruby 3.2.9-1" - "install_path" = "C:\Ruby32" - "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.9-1/rubyinstaller-3.2.9-1-x86.exe" + "version" = "Ruby 3.3.11-1" + "install_path" = "C:\Ruby33" + "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.11-1/rubyinstaller-3.3.11-1-x86.exe" "devkit_url" = "" "devkit_paths" = @() "bundlerV23" = $false "bundlerV25" = $true } @{ - "version" = "Ruby 3.2.9-1 (x64)" - "install_path" = "C:\Ruby32-x64" - "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.9-1/rubyinstaller-3.2.9-1-x64.exe" + "version" = "Ruby 3.3.11-1 (x64)" + "install_path" = "C:\Ruby33-x64" + "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.11-1/rubyinstaller-3.3.11-1-x64.exe" "devkit_url" = "" "devkit_paths" = @() "bundlerV23" = $false "bundlerV25" = $true } @{ - "version" = "Ruby 3.3.10-1" - "install_path" = "C:\Ruby33" - "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.10-1/rubyinstaller-3.3.10-1-x86.exe" + "version" = "Ruby 3.4.9-1" + "install_path" = "C:\Ruby34" + "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.9-1/rubyinstaller-3.4.9-1-x86.exe" "devkit_url" = "" "devkit_paths" = @() "bundlerV23" = $false "bundlerV25" = $true } @{ - "version" = "Ruby 3.3.10-1 (x64)" - "install_path" = "C:\Ruby33-x64" - "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.10-1/rubyinstaller-3.3.10-1-x64.exe" - "devkit_url" = "" - "devkit_paths" = @() - "bundlerV23" = $false - "bundlerV25" = $true - } - @{ - "version" = "Ruby 3.4.7-1" - "install_path" = "C:\Ruby34" - "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.7-1/rubyinstaller-3.4.7-1-x86.exe" + "version" = "Ruby 3.4.9-1 (x64)" + "install_path" = "C:\Ruby34-x64" + "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.9-1/rubyinstaller-3.4.9-1-x64.exe" "devkit_url" = "" "devkit_paths" = @() "bundlerV23" = $false "bundlerV25" = $true } @{ - "version" = "Ruby 3.4.7-1 (x64)" - "install_path" = "C:\Ruby34-x64" - "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.7-1/rubyinstaller-3.4.7-1-x64.exe" + "version" = "Ruby 4.0.5-1 (x64)" + "install_path" = "C:\Ruby40-x64" + "download_url" = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.5-1/rubyinstaller-4.0.5-1-x64.exe" "devkit_url" = "" "devkit_paths" = @() "bundlerV23" = $false @@ -372,6 +274,6 @@ for ($i = 0; $i -lt $rubies.Count; $i++) { Write-Host " bundler --version: $(cmd /c bundler --version)" } -Add-Path 'C:\Ruby32\bin' +Add-Path 'C:\Ruby40-x64\bin' -((Get-Date) - $started) \ No newline at end of file +((Get-Date) - $started) diff --git a/scripts/Windows/install_selenium_drivers.ps1 b/scripts/Windows/install_selenium_drivers.ps1 index 68a6c828..347d5087 100644 --- a/scripts/Windows/install_selenium_drivers.ps1 +++ b/scripts/Windows/install_selenium_drivers.ps1 @@ -15,7 +15,7 @@ Add-Path $destPath Write-Host "Installing Chrome Selenium driver..." -ForegroundColor Cyan $zipPath = "$env:TEMP\chromedriver_win64.zip" -(New-Object Net.WebClient).DownloadFile('https://storage.googleapis.com/chrome-for-testing-public/143.0.7499.192/win64/chrome-win64.zip', $zipPath) +(New-Object Net.WebClient).DownloadFile('https://storage.googleapis.com/chrome-for-testing-public/149.0.7827.22/win64/chromedriver-win64.zip', $zipPath) 7z e $zipPath -y -spe -o"$destPath" Remove-Item $zipPath @@ -29,7 +29,7 @@ Write-Host "Installed Chrome Selenium driver" -ForegroundColor Green Write-Host "Installing Edge Selenium driver..." -ForegroundColor Cyan $zipPath = "$env:TEMP\edgedriver_win64.zip" -(New-Object Net.WebClient).DownloadFile('https://msedgedriver.microsoft.com/143.0.3650.139/edgedriver_win64.zip', $zipPath) +(New-Object Net.WebClient).DownloadFile('https://msedgedriver.microsoft.com/148.0.3967.83/edgedriver_win64.zip', $zipPath) 7z x $zipPath -aoa -o"$destPath" Remove-Item $zipPath @@ -73,4 +73,4 @@ Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3' -Name "2500" -Value 0 Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\4' -Name "2500" -Value 0 -Write-Host "Installed IE Selenium driver" -ForegroundColor Green \ No newline at end of file +Write-Host "Installed IE Selenium driver" -ForegroundColor Green diff --git a/scripts/Windows/install_sql_server_2025.ps1 b/scripts/Windows/install_sql_server_2025.ps1 new file mode 100644 index 00000000..ea236267 --- /dev/null +++ b/scripts/Windows/install_sql_server_2025.ps1 @@ -0,0 +1,16 @@ +Write-Host "Downloading SQL Server 2025..." +$isoPath = "$env:TEMP\SQLServer2025-x64-ENU-EntDev.iso" +(New-Object Net.WebClient).DownloadFile('https://download.microsoft.com/download/dea8c210-c44a-4a9d-9d80-0c81578860c5/ENU/SQLServer2025-x64-ENU-EntDev.iso', $isoPath) + +$extractPath = "$env:TEMP\SQLServer2025-x64-ENU-EntDev" +Write-Host "Extracting..." +7z x $isoPath -aoa -o"$extractPath" | Out-Null + +Write-Host "Installing..." +cmd /c start /wait $extractPath\setup.exe /q /ACTION=Install /FEATURES=SQLEngine,FullText,Tools /INSTANCENAME=SQL2025 /SQLSYSADMINACCOUNTS="BUILTIN\ADMINISTRATORS" /TCPENABLED=1 /SECURITYMODE=SQL /SAPWD=Password12! /IACCEPTSQLSERVERLICENSETERMS + +Write-Host "Deleting temporary files..." +Remove-Item $isoPath -Force -ErrorAction Ignore +Remove-Item $extractPath -Recurse -Force -ErrorAction Ignore + +Write-Host "SQL Server 2025 installed" -ForegroundColor Green diff --git a/scripts/Windows/install_sql_server_2025_after_restart.ps1 b/scripts/Windows/install_sql_server_2025_after_restart.ps1 new file mode 100644 index 00000000..a881342f --- /dev/null +++ b/scripts/Windows/install_sql_server_2025_after_restart.ps1 @@ -0,0 +1,52 @@ +Write-Host "Preparing SQL Server 2025..." + +Write-Host "Stopping services..." + +Stop-Service 'MSSQL$SQL2025' +Stop-Service 'MSSQLFDLauncher$SQL2025' +Stop-Service 'SQLAgent$SQL2025' +Stop-Service 'MSOLAP$SQL2025' -ErrorAction Ignore +Stop-Service 'SSASTELEMETRY$SQL2025' -ErrorAction Ignore +Stop-Service 'SQLTELEMETRY$SQL2025' +Stop-Service 'SQLBrowser' +Stop-Service 'SQLWriter' + +Write-Host "Changing services startup mode..." + +Set-Service 'MSSQL$SQL2025' -StartupType Manual +Set-Service 'MSSQLFDLauncher$SQL2025' -StartupType Manual +Set-Service 'SQLAgent$SQL2025' -StartupType Manual +Set-Service 'MSOLAP$SQL2025' -StartupType Manual -ErrorAction Ignore +Set-Service 'SSASTELEMETRY$SQL2025' -StartupType Manual -ErrorAction Ignore +Set-Service 'SQLTELEMETRY$SQL2025' -StartupType Manual +Set-Service 'SQLBrowser' -StartupType Manual +Set-Service 'SQLWriter' -StartupType Manual + +Write-Host "Updating SQL Server TCP/IP configuration..." + +Import-Module "sqlps" -DisableNameChecking -ErrorAction SilentlyContinue 3> $null +$instanceName = 'SQL2025' +$computerName = $env:COMPUTERNAME +$smo = 'Microsoft.SqlServer.Management.Smo.' +$wmi = New-Object ($smo + 'Wmi.ManagedComputer') + +$uri = "ManagedComputer[@Name='$computerName']/ ServerInstance[@Name='$instanceName']/ServerProtocol[@Name='Tcp']" +$Tcp = $wmi.GetSmoObject($uri) +ForEach ($ipAddress in $Tcp.IPAddresses) +{ + $ipAddress.IPAddressProperties["TcpDynamicPorts"].Value = "" + $ipAddress.IPAddressProperties["TcpPort"].Value = "1433" +} +$Tcp.IsEnabled = $true +$Tcp.Alter() + +Write-Host "Trying to start SQL Server service..." +Start-Service SQLBrowser +Start-Service "MSSQL`$$instanceName" + +Write-Host "Stopping SQL Server service..." +Stop-Service "MSSQL`$$instanceName" +Stop-Service "MSSQLFDLauncher`$$instanceName" -ErrorAction SilentlyContinue +Stop-Service SQLBrowser + +Write-Host "SQL Server 2025 configured" -ForegroundColor Green diff --git a/scripts/Windows/install_vs2026.ps1 b/scripts/Windows/install_vs2026.ps1 index f3732fa1..b004d129 100644 --- a/scripts/Windows/install_vs2026.ps1 +++ b/scripts/Windows/install_vs2026.ps1 @@ -228,7 +228,7 @@ $ErrorActionPreference = 'Stop' # Install VS $exitCode = InstallVS -WorkLoads $WorkLoads -Sku $Sku -VSBootstrapperURL $VSBootstrapperURL -ChannelUri $ChannelUri -$vsPath = "${env:ProgramFiles}\Microsoft Visual Studio\2026\Community" +$vsPath = "${env:ProgramFiles}\Microsoft Visual Studio\18\Community" Write-Host "Disabling VS-related services" if (get-Service SQLWriterw -ErrorAction Ignore) { diff --git a/scripts/Windows/install_wsl.ps1 b/scripts/Windows/install_wsl.ps1 index ab59d51b..ba84ce26 100644 --- a/scripts/Windows/install_wsl.ps1 +++ b/scripts/Windows/install_wsl.ps1 @@ -1,129 +1,207 @@ +. "$PSScriptRoot\common.ps1" + Write-warning "Checking if WSL feature is installed..." $i = 0 $installed = $false while ($i -lt 30) { - $i +=1 + $i += 1 $installed = (Get-WindowsOptionalFeature -FeatureName Microsoft-Windows-Subsystem-Linux -Online).State -eq 'Enabled' if ($installed) { - Write-host "WSL feature is installed" + Write-Host "WSL feature is installed" break } Write-warning "Retrying in 10 seconds..." - sleep 10; + Start-Sleep -s 10 } if (-not $installed) { - Write-error "WSL feature is not installed" + Write-Error "WSL feature is not installed" } [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -# Ubuntu 16.04 -# ============ - -Write-warning "Installing Ubuntu 16.04 for WSL" - -(New-Object Net.WebClient).DownloadFile('https://aka.ms/wsl-ubuntu-1604', "$env:TEMP\wsl-ubuntu-1604.zip") -Expand-Archive -Path "$env:TEMP\wsl-ubuntu-1604.zip" -DestinationPath "C:\WSL\Ubuntu1604" -Force -Remove-Item "$env:TEMP\wsl-ubuntu-1604.zip" - - -$ubuntuExe = "C:\WSL\Ubuntu1604\ubuntu1604.exe" -$bsdtar = "C:\WSL\Ubuntu1604\rootfs\bsdtar" - -Start-Process $ubuntuExe -while($true) { - Start-Sleep -s 10 - if (-not (Test-Path $bsdtar)) { - Get-Process "ubuntu1604" | Stop-Process - break - } +function Install-WslDistro { + param( + [Parameter(Mandatory = $true)] + [string]$DisplayName, + + [Parameter(Mandatory = $true)] + [string]$DownloadUrl, + + [Parameter(Mandatory = $true)] + [string]$PackagePath, + + [Parameter(Mandatory = $true)] + [string]$InstallPath, + + [Parameter(Mandatory = $true)] + [string]$LauncherName, + + [Parameter(Mandatory = $false)] + [ValidateSet("apt", "zypper", "none")] + [string]$PackageManager = "none" + ) + + Write-Warning "Installing $DisplayName for WSL" + + if (Test-Path $PackagePath) { + Remove-Item $PackagePath -Force + } + + if (Test-Path $InstallPath) { + Remove-Item $InstallPath -Recurse -Force + } + + New-Item -ItemType Directory -Path $InstallPath -Force | Out-Null + + (New-Object Net.WebClient).DownloadFile($DownloadUrl, $PackagePath) + + $extractPath = "$InstallPath-extract" + if (Test-Path $extractPath) { + Remove-Item $extractPath -Recurse -Force + } + New-Item -ItemType Directory -Path $extractPath -Force | Out-Null + + tar -xf $PackagePath -C $extractPath + + $bundleManifest = Get-ChildItem $extractPath -Filter AppxBundleManifest.xml -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1 + if ($bundleManifest) { + $x64Appx = Get-ChildItem $extractPath -Filter "*_x64.appx" -Recurse | Select-Object -First 1 + if (-not $x64Appx) { + throw "Could not find x64 appx inside bundle for $DisplayName" + } + + $innerAppxPath = $x64Appx.FullName + $innerExtractPath = "$InstallPath-inner" + if (Test-Path $innerExtractPath) { + Remove-Item $innerExtractPath -Recurse -Force + } + New-Item -ItemType Directory -Path $innerExtractPath -Force | Out-Null + tar -xf $innerAppxPath -C $innerExtractPath + + Remove-Item $extractPath -Recurse -Force + Move-Item $innerExtractPath -Destination $extractPath + } + + Get-ChildItem $extractPath -Force | ForEach-Object { + Move-Item $_.FullName -Destination $InstallPath -Force + } + + Remove-Item $PackagePath -Force -ErrorAction SilentlyContinue + if (Test-Path $extractPath) { + Remove-Item $extractPath -Recurse -Force + } + + $launcher = Get-ChildItem $InstallPath -Filter $LauncherName -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1 + if (-not $launcher) { + $launcher = Get-ChildItem $InstallPath -Filter *.exe -Recurse | ` + Where-Object { $_.Name -notmatch 'vc_redist|setup|installer' } | ` + Select-Object -First 1 + } + if (-not $launcher) { + throw "Could not find distro launcher in $InstallPath" + } + + $launcherPath = $launcher.FullName + Write-Host "Using launcher $launcherPath" + + if ($PackageManager -eq "zypper") { + $bootstrapMarker = Join-Path $InstallPath "rootfs\bsdtar" + Start-Process $launcherPath | Out-Null + while ($true) { + Start-Sleep -s 10 + if (-not (Test-Path $bootstrapMarker)) { + Get-Process $launcher.BaseName -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue + break + } + } + } + else { + Start-ProcessWithOutput "`"$launcherPath`" install --root" + } + + if ($PackageManager -eq "apt") { + Start-ProcessWithOutput "`"$launcherPath`" run adduser appveyor --gecos `"First,Last,RoomNumber,WorkPhone,HomePhone`" --disabled-password" + Start-ProcessWithOutput "`"$launcherPath`" run `"echo 'appveyor:Password12!' | sudo chpasswd`"" + Start-ProcessWithOutput "`"$launcherPath`" run usermod -aG sudo appveyor" + Start-ProcessWithOutput "`"$launcherPath`" run `"echo -e 'appveyor\tALL=(ALL)\tNOPASSWD: ALL' > /etc/sudoers.d/appveyor`"" + Start-ProcessWithOutput "`"$launcherPath`" run chmod 0755 /etc/sudoers.d/appveyor" + Start-ProcessWithOutput "`"$launcherPath`" config --default-user appveyor" + Start-ProcessWithOutput "`"$launcherPath`" run sudo apt-get update" + } + elseif ($PackageManager -eq "zypper") { + Start-ProcessWithOutput "`"$launcherPath`" run useradd -m appveyor" + Start-ProcessWithOutput "`"$launcherPath`" run `"echo 'appveyor:Password12!' | chpasswd`"" + Start-ProcessWithOutput "`"$launcherPath`" run `"echo 'appveyor ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/appveyor`"" + Start-ProcessWithOutput "`"$launcherPath`" run chmod 0440 /etc/sudoers.d/appveyor" + Start-ProcessWithOutput "`"$launcherPath`" config --default-user appveyor" + Start-ProcessWithOutput "`"$launcherPath`" run sudo zypper --non-interactive refresh" + } } -. $ubuntuExe run adduser appveyor --gecos `"First,Last,RoomNumber,WorkPhone,HomePhone`" --disabled-password -. $ubuntuExe run "echo 'appveyor:Password12!' | sudo chpasswd" -. $ubuntuExe run usermod -aG sudo appveyor -. $ubuntuExe run "echo -e `"`"appveyor\tALL=(ALL)\tNOPASSWD: ALL`"`" > /etc/sudoers.d/appveyor" -. $ubuntuExe run chmod 0755 /etc/sudoers.d/appveyor -. $ubuntuExe config --default-user appveyor -. $ubuntuExe run sudo apt-get update - -# Ubuntu 18.04 -# ============ - -Write-warning "Installing Ubuntu 18.04 for WSL" - -(New-Object Net.WebClient).DownloadFile('https://aka.ms/wsl-ubuntu-1804', "$env:TEMP\wsl-ubuntu-1804.zip") -Expand-Archive -Path "$env:TEMP\wsl-ubuntu-1804.zip" -DestinationPath "C:\WSL\Ubuntu1804" -Force -Remove-Item "$env:TEMP\wsl-ubuntu-1804.zip" - -$ubuntuExe = "C:\WSL\Ubuntu1804\ubuntu1804.exe" -. $ubuntuExe install --root -. $ubuntuExe run adduser appveyor --gecos `"First,Last,RoomNumber,WorkPhone,HomePhone`" --disabled-password -. $ubuntuExe run "echo 'appveyor:Password12!' | sudo chpasswd" -. $ubuntuExe run usermod -aG sudo appveyor -. $ubuntuExe run "echo -e `"`"appveyor\tALL=(ALL)\tNOPASSWD: ALL`"`" > /etc/sudoers.d/appveyor" -. $ubuntuExe run chmod 0755 /etc/sudoers.d/appveyor -. $ubuntuExe config --default-user appveyor -. $ubuntuExe run sudo apt-get update - -# Ubuntu 20.04 -# ============ - -Write-warning "Installing Ubuntu 20.04 for WSL" - -(New-Object Net.WebClient).DownloadFile('https://appveyordownloads.blob.core.windows.net/misc/Ubuntu_2004.2021.825.0_x64.zip', "$env:TEMP\wsl-ubuntu-2004.zip") -Expand-Archive -Path "$env:TEMP\wsl-ubuntu-2004.zip" -DestinationPath "C:\WSL\Ubuntu2004" -Force -Remove-Item "$env:TEMP\wsl-ubuntu-2004.zip" - -$ubuntuExe = "C:\WSL\Ubuntu2004\ubuntu.exe" -. $ubuntuExe install --root -. $ubuntuExe run adduser appveyor --gecos `"First,Last,RoomNumber,WorkPhone,HomePhone`" --disabled-password -. $ubuntuExe run "echo 'appveyor:Password12!' | sudo chpasswd" -. $ubuntuExe run usermod -aG sudo appveyor -. $ubuntuExe run "echo -e `"`"appveyor\tALL=(ALL)\tNOPASSWD: ALL`"`" > /etc/sudoers.d/appveyor" -. $ubuntuExe run chmod 0755 /etc/sudoers.d/appveyor -. $ubuntuExe config --default-user appveyor -. $ubuntuExe run sudo apt-get update - - -# OpenSUSE -# ======== - -Write-warning "Installing OpenSUSE for WSL" - -(New-Object Net.WebClient).DownloadFile('https://aka.ms/wsl-opensuse-42', "$env:TEMP\wsl-opensuse.zip") -Expand-Archive -Path "$env:TEMP\wsl-opensuse.zip" -DestinationPath "C:\WSL\OpenSUSE" -Force -Remove-Item "$env:TEMP\wsl-opensuse.zip" - -$suseExe = "C:\WSL\OpenSUSE\openSUSE-42.exe" -$bsdtar = "C:\WSL\OpenSUSE\rootfs\bsdtar" - -Start-Process $suseExe -while($true) { - Start-Sleep -s 10 - if (-not (Test-Path $bsdtar)) { - Get-Process "openSUSE-42" | Stop-Process - break - } +$distros = @( + @{ + DisplayName = "Ubuntu 20.04" + DownloadUrl = "https://appveyordownloads.blob.core.windows.net/misc/Ubuntu_2004.2021.825.0_x64.zip" + PackagePath = "$env:TEMP\wsl-ubuntu-2004.appx" + InstallPath = "C:\WSL\Ubuntu2004" + LauncherName = "ubuntu.exe" + PackageManager = "apt" + } + @{ + DisplayName = "Ubuntu 22.04" + DownloadUrl = "https://publicwsldistros.blob.core.windows.net/wsldistrostorage/Ubuntu2204LTS-230518_x64.appx" + PackagePath = "$env:TEMP\wsl-ubuntu-2204.appx" + InstallPath = "C:\WSL\Ubuntu2204" + LauncherName = "ubuntu2204.exe" + PackageManager = "apt" + } + @{ + DisplayName = "Ubuntu 24.04" + DownloadUrl = "https://wslstorestorage.blob.core.windows.net/wslblob/Ubuntu2404-240425.AppxBundle" + PackagePath = "$env:TEMP\wsl-ubuntu-2404.appxbundle" + InstallPath = "C:\WSL\Ubuntu2404" + LauncherName = "ubuntu2404.exe" + PackageManager = "apt" + } + @{ + DisplayName = "openSUSE Leap 15.6" + DownloadUrl = "https://publicwsldistros.blob.core.windows.net/wsldistrostorage/SUSELeap15p6-240801_x64.Appx" + PackagePath = "$env:TEMP\wsl-opensuse-leap-156.appx" + InstallPath = "C:\WSL\OpenSUSE-Leap-15.6" + LauncherName = "openSUSE-Leap-15.6.exe" + PackageManager = "zypper" + } +) + +foreach ($distro in $distros) { + Install-WslDistro ` + -DisplayName $distro.DisplayName ` + -DownloadUrl $distro.DownloadUrl ` + -PackagePath $distro.PackagePath ` + -InstallPath $distro.InstallPath ` + -LauncherName $distro.LauncherName ` + -PackageManager $distro.PackageManager } - # Testing WSL # =========== -wslconfig /setdefault ubuntu-16.04 +wslconfig /setdefault Ubuntu-20.04 wsl lsb_release -a -wslconfig /setdefault ubuntu-18.04 +wslconfig /setdefault Ubuntu-22.04 wsl lsb_release -a -wslconfig /setdefault ubuntu +wslconfig /setdefault Ubuntu-24.04 wsl lsb_release -a +wslconfig /setdefault openSUSE-Leap-15.6 +wsl cat /etc/os-release + # Rename C:\Windows\System32\bash.exe to avoid conflicts with default Git's bash # =========== takeown /F "$env:SystemRoot\System32\bash.exe" icacls "$env:SystemRoot\System32\bash.exe" /grant administrators:F -ren "$env:SystemRoot\System32\bash.exe" wsl-bash.exe \ No newline at end of file +ren "$env:SystemRoot\System32\bash.exe" wsl-bash.exe diff --git a/scripts/Windows/update_msbuild_path.ps1 b/scripts/Windows/update_msbuild_path.ps1 index 726d9c0f..d9c5e7ef 100644 --- a/scripts/Windows/update_msbuild_path.ps1 +++ b/scripts/Windows/update_msbuild_path.ps1 @@ -20,7 +20,7 @@ if (Test-Path $msbuild_vs2026_path) { Write-Host "Adding Visual Studio 2026 current MSBuild to PATH..." -ForegroundColor Cyan Add-Path $msbuild_vs2026_path - $dac_150_path = "${env:ProgramFiles}\Microsoft Visual Studio\2026\Community\Common7\IDE\Extensions\Microsoft\SQLDB\DAC"; + $dac_150_path = "${env:ProgramFiles}\Microsoft Visual Studio\18\Community\Common7\IDE\Extensions\Microsoft\SQLDB\DAC"; if (Test-Path $dac_150_path) { Add-Path $dac_150_path } else { @@ -74,4 +74,4 @@ if (Test-Path $msbuild_vs2026_path) { Write-Host "Adding MSBuild 12.0 to PATH..." -ForegroundColor Cyan Add-Path $msbuild_12_path Add-Path "${env:ProgramFiles(x86)}\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120" -} \ No newline at end of file +}