mirror of
https://github.com/containers/podman.git
synced 2025-08-06 19:44:14 +08:00
Merge pull request #24827 from l0rd/win-installer-patch
Add a Windows Installer patch to avoid unrequested reboots
This commit is contained in:
@ -315,7 +315,7 @@ The Podman Windows installer (e.g., `podman-5.1.0-dev-setup.exe`) is a bundle
|
|||||||
that includes an msi package (`podman.msi`) and installs the WSL kernel
|
that includes an msi package (`podman.msi`) and installs the WSL kernel
|
||||||
(`podman-wslkerninst.exe`). It's built using the
|
(`podman-wslkerninst.exe`). It's built using the
|
||||||
[WiX Toolset](https://wixtoolset.org/) and the
|
[WiX Toolset](https://wixtoolset.org/) and the
|
||||||
[PanelSwWixExtension](https://github.com/nirbar/PanelSwWixExtension/tree/wix3-v3.11.1.353)
|
[PanelSwWixExtension](https://github.com/nirbar/PanelSwWixExtension/tree/master5)
|
||||||
WiX extension. The source code is in the folder `contrib\win-installer`.
|
WiX extension. The source code is in the folder `contrib\win-installer`.
|
||||||
|
|
||||||
### Build the Windows installer
|
### Build the Windows installer
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#!/usr/bin/env powershell
|
#!/usr/bin/env powershell
|
||||||
|
|
||||||
. $PSScriptRoot\win-lib.ps1
|
. $PSScriptRoot\win-lib.ps1
|
||||||
|
. $PSScriptRoot\..\win-installer\utils.ps1
|
||||||
|
|
||||||
if ($Env:CI -eq "true") {
|
if ($Env:CI -eq "true") {
|
||||||
$WIN_INST_FOLDER = "$ENV:CIRRUS_WORKING_DIR\repo\contrib\win-installer"
|
$WIN_INST_FOLDER = "$ENV:CIRRUS_WORKING_DIR\repo\contrib\win-installer"
|
||||||
@ -14,10 +15,30 @@ if ($Env:CI -eq "true") {
|
|||||||
|
|
||||||
Push-Location $WIN_INST_FOLDER
|
Push-Location $WIN_INST_FOLDER
|
||||||
|
|
||||||
# Build Installer
|
# Build and test the windows installer
|
||||||
|
|
||||||
|
# Download v5.3.1 installer as `build.ps1` uses it to build the patch
|
||||||
|
# (podman.msp). `build.ps1` reads `$env:V531_SETUP_EXE_PATH` to get its path.
|
||||||
|
# The v5.3.1 installer is also used to test the "v5.3.1 -> current" version minor
|
||||||
|
# update (with patch).
|
||||||
|
if (!$env:V531_SETUP_EXE_PATH) {
|
||||||
|
$env:V531_SETUP_EXE_PATH = Get-Podman-Setup-From-GitHub -version "tags/v5.3.1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Download the previous installer to test a major update (without patch)
|
||||||
|
# After v5.3.2 release we should download latest instead of v5.3.0 (i.e.
|
||||||
|
# `Get-Latest-Podman-Setup-From-GitHub`)
|
||||||
|
if (!$env:PREV_SETUP_EXE_PATH) {
|
||||||
|
$env:PREV_SETUP_EXE_PATH = Get-Podman-Setup-From-GitHub -version "tags/v5.3.0"
|
||||||
|
}
|
||||||
|
|
||||||
# Note: consumes podman-remote-release-windows_amd64.zip from repo.tar.zst
|
# Note: consumes podman-remote-release-windows_amd64.zip from repo.tar.zst
|
||||||
Run-Command ".\build.ps1 $Env:WIN_INST_VER dev `"$RELEASE_DIR`""
|
Run-Command ".\build.ps1 $Env:WIN_INST_VER dev `"$RELEASE_DIR`""
|
||||||
|
|
||||||
|
# Build a v9.9.10 installer to test an update from current to next version
|
||||||
|
$NEXT_WIN_INST_VER="9.9.10"
|
||||||
|
Run-Command ".\build.ps1 `"$NEXT_WIN_INST_VER`" dev `"$RELEASE_DIR`""
|
||||||
|
|
||||||
Pop-Location
|
Pop-Location
|
||||||
|
|
||||||
# Run the installer silently and WSL/HyperV install options disabled (prevent reboots)
|
# Run the installer silently and WSL/HyperV install options disabled (prevent reboots)
|
||||||
@ -25,4 +46,7 @@ $command = "$WIN_INST_FOLDER\test-installer.ps1 "
|
|||||||
$command += "-scenario all "
|
$command += "-scenario all "
|
||||||
$command += "-provider $ENV:CONTAINERS_MACHINE_PROVIDER "
|
$command += "-provider $ENV:CONTAINERS_MACHINE_PROVIDER "
|
||||||
$command += "-setupExePath `"$WIN_INST_FOLDER\podman-$ENV:WIN_INST_VER-dev-setup.exe`""
|
$command += "-setupExePath `"$WIN_INST_FOLDER\podman-$ENV:WIN_INST_VER-dev-setup.exe`""
|
||||||
|
$command += "-previousSetupExePath `"$env:PREV_SETUP_EXE_PATH`""
|
||||||
|
$command += "-nextSetupExePath `"$WIN_INST_FOLDER\podman-$NEXT_WIN_INST_VER-dev-setup.exe`""
|
||||||
|
$command += "-v531SetupExePath `"$env:V531_SETUP_EXE_PATH`""
|
||||||
Run-Command "${command}"
|
Run-Command "${command}"
|
||||||
|
@ -1,3 +1,64 @@
|
|||||||
# Windows Installer Build
|
# Windows Installer Build
|
||||||
|
|
||||||
Instructions [have moved here](Build and test the Podman Windows installer](#build-and-test-the-podman-windows-installer)).
|
Instructions [have moved here](Build and test the Podman Windows installer](#build-and-test-the-podman-windows-installer)).
|
||||||
|
|
||||||
|
## How to run a full tests scenarios
|
||||||
|
|
||||||
|
Manual tests to validate changes the wxs files or a WiX upgrade.
|
||||||
|
|
||||||
|
## Preparation
|
||||||
|
|
||||||
|
- checkout previous release tag (e.g. 5.3.0)
|
||||||
|
`git fetch --all --tags --prune && git tag --list v5.* && git checkout tags/v5.3.0`
|
||||||
|
- make the installer
|
||||||
|
`./winmake podman && ./winmake docs && ./winmake win-gvproxy && ./winmake installer`
|
||||||
|
- checkout tag `v5.3.1` make the installer
|
||||||
|
`./winmake podman && ./winmake docs && ./winmake win-gvproxy && ./winmake installer`
|
||||||
|
- get the `v5.3.1` msi product id (with superorca)
|
||||||
|
- checkout the main branch and change the product id on `podman.wxs` to match `v5.3.1` product id
|
||||||
|
- set `$env:V531_SETUP_EXE_PATH` and make current and next installer
|
||||||
|
`$env:V531_SETUP_EXE_PATH=<path> && ./winmake podman && ./winmake docs && ./winmake win-gvproxy && ./winmake installer && ./winmake installer 9.9.9`
|
||||||
|
- patch installertest to make sure it doesn't download the setup.exe from internet but uses the one just built
|
||||||
|
|
||||||
|
## Run the tests
|
||||||
|
|
||||||
|
1. Uninstall the virtualization providers (WSL and Hyper-V) using the "Windows Features" app
|
||||||
|
2. Run installtest for both `wsl` and `hyperv` (**as an admin**)
|
||||||
|
```pwsh
|
||||||
|
.\contrib\win-installer\test-installer.ps1 `
|
||||||
|
-scenario all `
|
||||||
|
-setupExePath ".\contrib\win-installer\podman-5.4.0-dev-setup.exe" `
|
||||||
|
-previousSetupExePath ".\contrib\win-installer\podman-5.3.0-dev-setup.exe" `
|
||||||
|
-nextSetupExePath ".\contrib\win-installer\podman-9.9.9-dev-setup.exe" `
|
||||||
|
-v531SetupExePath ".\contrib\win-installer\podman-5.3.1-dev-setup.exe" `
|
||||||
|
-provider hyperv
|
||||||
|
```
|
||||||
|
3. Manually test the upgrade "from v5.3.1 to current to next"
|
||||||
|
```pwsh
|
||||||
|
contrib\win-installer\podman-5.3.1-dev-setup.exe /install /log contrib\win-installer\podman-setup-531.log
|
||||||
|
contrib\win-installer\podman-5.4.0-dev-setup.exe /install /log contrib\win-installer\podman-setup-540.log
|
||||||
|
contrib\win-installer\podman-9.9.9-dev-setup.exe /install /log contrib\win-installer\podman-setup-999.log
|
||||||
|
contrib\win-installer\podman-9.9.9-dev-setup.exe /x /log contrib\win-installer\podman-uninstall-999.log
|
||||||
|
```
|
||||||
|
4. manually run the current installer with the option to install wsl and confirm it reboots and install both podman and wsl
|
||||||
|
5. manually run the current installer with the option to install hyperv and confirm it reboots and install both podman and wsl
|
||||||
|
6. run installtest for both wsl and hyperv
|
||||||
|
7. manually run the current installer with the option to install wsl and confirm it doesn't reboot
|
||||||
|
8. manually run the current installer with the option to install hyperv and confirm it doesn't reboot
|
||||||
|
|
||||||
|
## retrieve installed podman msi package information
|
||||||
|
|
||||||
|
```pwsh
|
||||||
|
$Installer = New-Object -ComObject WindowsInstaller.Installer;
|
||||||
|
$InstallerProducts = $Installer.ProductsEx("", "", 7);
|
||||||
|
$InstalledProducts = ForEach($Product in $InstallerProducts){
|
||||||
|
[PSCustomObject]@{ProductCode = $Product.ProductCode();
|
||||||
|
LocalPackage = $Product.InstallProperty("LocalPackage");
|
||||||
|
VersionString = $Product.InstallProperty("VersionString");
|
||||||
|
ProductName = $Product.InstallProperty("ProductName")
|
||||||
|
}
|
||||||
|
};
|
||||||
|
$InstalledProducts | Where-Object {$_.ProductName -match "podman"}
|
||||||
|
```
|
||||||
|
|
||||||
|
and uninstall it with `msiexec /x "{<product-code>}"`
|
||||||
|
@ -49,12 +49,28 @@ function CheckRequirements() {
|
|||||||
CheckCommand "go" "Golang"
|
CheckCommand "go" "Golang"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function Build-531-Patch() {
|
||||||
|
param(
|
||||||
|
[ValidateScript({Test-Path $_ -PathType Leaf})]
|
||||||
|
[string]$v531SetupExePath=$ENV:V531_SETUP_EXE_PATH
|
||||||
|
)
|
||||||
|
|
||||||
|
if (!$v531SetupExePath) {
|
||||||
|
. $PSScriptRoot\utils.ps1
|
||||||
|
$v531SetupExePath=Get-Podman-Setup-From-GitHub "tags/v5.3.1"
|
||||||
|
}
|
||||||
|
wix burn extract $v531SetupExePath -o $PSScriptRoot\prevPodmanMsi; ExitOnError
|
||||||
|
Move-Item $PSScriptRoot\prevPodmanMsi\a1 $PSScriptRoot\en-US\prev-podman.wixpdb -Force; ExitOnError
|
||||||
|
Move-Item $PSScriptRoot\prevPodmanMsi\a0 $PSScriptRoot\en-US\prev-podman.msi -Force; ExitOnError
|
||||||
|
wix build -define "Version=$ENV:INSTVER" -bindpath $PSScriptRoot\en-US -out $PSScriptRoot\en-US\podman.msp podman-patch.wxs; ExitOnError
|
||||||
|
}
|
||||||
|
|
||||||
if ($args.Count -lt 1 -or $args[0].Length -lt 1) {
|
if ($args.Count -lt 1 -or $args[0].Length -lt 1) {
|
||||||
Write-Host "Usage: " $MyInvocation.MyCommand.Name "<version> [dev|prod] [release_dir]"
|
Write-Host "Usage: " $MyInvocation.MyCommand.Name "<version> [dev|prod] [release_dir]"
|
||||||
Write-Host
|
Write-Host
|
||||||
Write-Host 'Uses Env Vars: '
|
Write-Host 'Uses Env Vars: '
|
||||||
Write-Host ' $ENV:FETCH_BASE_URL - GitHub Repo Address to locate release on'
|
Write-Host ' $ENV:FETCH_BASE_URL - GitHub Repo Address to locate release on'
|
||||||
|
Write-Host ' $ENV:V531_SETUP_EXE_PATH - Path to v5.3.1 setup.exe used to build the patch'
|
||||||
Write-Host 'Env Settings for signing (optional)'
|
Write-Host 'Env Settings for signing (optional)'
|
||||||
Write-Host ' $ENV:VAULT_ID'
|
Write-Host ' $ENV:VAULT_ID'
|
||||||
Write-Host ' $ENV:APP_ID'
|
Write-Host ' $ENV:APP_ID'
|
||||||
@ -129,6 +145,10 @@ if (Test-Path ./obj) {
|
|||||||
dotnet build podman.wixproj /property:DefineConstants="VERSION=$ENV:INSTVER" -o .; ExitOnError
|
dotnet build podman.wixproj /property:DefineConstants="VERSION=$ENV:INSTVER" -o .; ExitOnError
|
||||||
SignItem @("en-US\podman.msi")
|
SignItem @("en-US\podman.msi")
|
||||||
|
|
||||||
|
# Build the Patch for 5.3.1
|
||||||
|
Build-531-Patch
|
||||||
|
SignItem @("en-US\podman.msp")
|
||||||
|
|
||||||
dotnet build podman-setup.wixproj /property:DefineConstants="VERSION=$ENV:INSTVER" -o .; ExitOnError
|
dotnet build podman-setup.wixproj /property:DefineConstants="VERSION=$ENV:INSTVER" -o .; ExitOnError
|
||||||
wix burn detach podman-setup.exe -engine engine.exe; ExitOnError
|
wix burn detach podman-setup.exe -engine engine.exe; ExitOnError
|
||||||
SignItem @("engine.exe")
|
SignItem @("engine.exe")
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
<MsiProperty Name="WITH_HYPERV" Value="[HyperVCheckbox]" />
|
<MsiProperty Name="WITH_HYPERV" Value="[HyperVCheckbox]" />
|
||||||
<MsiProperty Name="SKIP_CONFIG_FILE_CREATION" Value="[SkipConfigFileCreation]" />
|
<MsiProperty Name="SKIP_CONFIG_FILE_CREATION" Value="[SkipConfigFileCreation]" />
|
||||||
</MsiPackage>
|
</MsiPackage>
|
||||||
|
<MspPackage Id="Patch" SourceFile="en-US\podman.msp" Vital="yes" />
|
||||||
<ExePackage DisplayName="WSL Kernel Install" InstallCondition="(MachineProvider = "wsl") AND (WSLCheckbox = 1) AND (NOT PreviousInstallFolder)" SourceFile="artifacts\podman-wslkerninst.exe" DetectCondition="" Permanent="true" />
|
<ExePackage DisplayName="WSL Kernel Install" InstallCondition="(MachineProvider = "wsl") AND (WSLCheckbox = 1) AND (NOT PreviousInstallFolder)" SourceFile="artifacts\podman-wslkerninst.exe" DetectCondition="" Permanent="true" />
|
||||||
</Chain>
|
</Chain>
|
||||||
<OptionalUpdateRegistration />
|
<OptionalUpdateRegistration />
|
||||||
|
21
contrib/win-installer/podman-patch.wxs
Normal file
21
contrib/win-installer/podman-patch.wxs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
||||||
|
<Patch
|
||||||
|
AllowRemoval="yes"
|
||||||
|
Classification="Update"
|
||||||
|
DisplayName="Podman Patch v$(Version)"
|
||||||
|
Description="Podman Patch v$(Version)"
|
||||||
|
Manufacturer="Red Hat Inc.">
|
||||||
|
|
||||||
|
<Media Id="1000" Cabinet="PodmanPatch.cab">
|
||||||
|
<PatchBaseline
|
||||||
|
Id="podmanPatch"
|
||||||
|
BaselineFile="podman.msi"
|
||||||
|
UpdateFile="prev-podman.msi"/>
|
||||||
|
</Media>
|
||||||
|
|
||||||
|
<PatchFamily
|
||||||
|
Id="PodmanPatches"
|
||||||
|
Version="$(Version)"
|
||||||
|
Supersede="yes" />
|
||||||
|
</Patch>
|
||||||
|
</Wix>
|
@ -1,12 +1,12 @@
|
|||||||
<Project Sdk="WixToolset.Sdk/5.0.0">
|
<Project Sdk="WixToolset.Sdk/5.0.2">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<InstallerPlatform>x64</InstallerPlatform>
|
<InstallerPlatform>x64</InstallerPlatform>
|
||||||
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
|
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
|
||||||
<OutputType>Bundle</OutputType>
|
<OutputType>Bundle</OutputType>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="WixToolset.BootstrapperApplications.wixext" Version="5.0.0" />
|
<PackageReference Include="WixToolset.BootstrapperApplications.wixext" Version="5.0.2" />
|
||||||
<PackageReference Include="WixToolset.Util.wixext" Version="5.0.0" />
|
<PackageReference Include="WixToolset.Util.wixext" Version="5.0.2" />
|
||||||
<Compile Include="burn.wxs" />
|
<Compile Include="burn.wxs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<Project Sdk="WixToolset.Sdk/5.0.0">
|
<Project Sdk="WixToolset.Sdk/5.0.2">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<InstallerPlatform>x64</InstallerPlatform>
|
<InstallerPlatform>x64</InstallerPlatform>
|
||||||
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
|
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
|
||||||
@ -13,9 +13,9 @@
|
|||||||
<Compile Include="podman.wxs;podman-ui.wxs;welcome-install-dlg.wxs" />
|
<Compile Include="podman.wxs;podman-ui.wxs;welcome-install-dlg.wxs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="PanelSwWixExtension4" Version="5.1.1.375" />
|
<PackageReference Include="PanelSwWixExtension4" Version="5.4.5.422" />
|
||||||
<PackageReference Include="WixToolset.Heat" Version="5.0.0" />
|
<PackageReference Include="WixToolset.Heat" Version="5.0.2" />
|
||||||
<PackageReference Include="WixToolset.UI.wixext" Version="5.0.0" />
|
<PackageReference Include="WixToolset.UI.wixext" Version="5.0.2" />
|
||||||
<PackageReference Include="WixToolset.Util.wixext" Version="5.0.0" />
|
<PackageReference Include="WixToolset.Util.wixext" Version="5.0.2" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<?define UseGVProxy = ""?>
|
<?define UseGVProxy = ""?>
|
||||||
<?endif?>
|
<?endif?>
|
||||||
|
|
||||||
<Package Name="podman" Manufacturer="Red Hat Inc." Version="$(VERSION)" UpgradeCode="a6a9dd9c-0732-44ba-9279-ffe22ea50671">
|
<Package Name="podman" Manufacturer="Red Hat Inc." Version="$(VERSION)" UpgradeCode="a6a9dd9c-0732-44ba-9279-ffe22ea50671" ProductCode="18107131-1820-4878-8AEE-65AAE37BC1E3">
|
||||||
<Media Id="1" Cabinet="Podman.cab" EmbedCab="yes" />
|
<Media Id="1" Cabinet="Podman.cab" EmbedCab="yes" />
|
||||||
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." RemoveFeatures="Complete" Schedule="afterInstallExecute" />
|
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." RemoveFeatures="Complete" Schedule="afterInstallExecute" />
|
||||||
<Property Id="DiskPrompt" Value="Red Hat's Podman $(VERSION) Installation" />
|
<Property Id="DiskPrompt" Value="Red Hat's Podman $(VERSION) Installation" />
|
||||||
@ -72,14 +72,14 @@
|
|||||||
<CustomAction Id="CheckHyperV" Execute="firstSequence" DllEntry="CheckHyperV" BinaryRef="PodmanHooks" />
|
<CustomAction Id="CheckHyperV" Execute="firstSequence" DllEntry="CheckHyperV" BinaryRef="PodmanHooks" />
|
||||||
<util:BroadcastEnvironmentChange />
|
<util:BroadcastEnvironmentChange />
|
||||||
<ComponentGroup Id="WSLFeature" Directory="INSTALLDIR">
|
<ComponentGroup Id="WSLFeature" Directory="INSTALLDIR">
|
||||||
<Component Id="WSLFeatureComponent" Guid="F6A693BC-186C-4E64-8015-C3073013B3A8" Condition="(NOT WIX_UPGRADE_DETECTED) AND (WSL_INSTALL = 1)">
|
<Component Id="WSLFeatureComponent" Guid="F6A693BC-186C-4E64-8015-C3073013B3A8" Condition="(NOT Installed) AND (WSL_INSTALL = 1)">
|
||||||
<CreateFolder />
|
<CreateFolder />
|
||||||
<PanelSW:Dism EnableFeature="VirtualMachinePlatform" ErrorHandling="prompt" />
|
<PanelSW:Dism EnableFeature="VirtualMachinePlatform" ErrorHandling="prompt" />
|
||||||
<PanelSW:Dism EnableFeature="Microsoft-Windows-Subsystem-Linux" ErrorHandling="prompt" />
|
<PanelSW:Dism EnableFeature="Microsoft-Windows-Subsystem-Linux" ErrorHandling="prompt" />
|
||||||
</Component>
|
</Component>
|
||||||
</ComponentGroup>
|
</ComponentGroup>
|
||||||
<ComponentGroup Id="HyperVFeature" Directory="INSTALLDIR">
|
<ComponentGroup Id="HyperVFeature" Directory="INSTALLDIR">
|
||||||
<Component Id="HyperVFeatureComponent" Guid="F7B2D4C9-6C89-46BB-B4EA-FF39424972F3" Condition="(NOT WIX_UPGRADE_DETECTED) AND (HYPERV_INSTALL = 1)">
|
<Component Id="HyperVFeatureComponent" Guid="F7B2D4C9-6C89-46BB-B4EA-FF39424972F3" Condition="(NOT Installed) AND (HYPERV_INSTALL = 1)">
|
||||||
<CreateFolder />
|
<CreateFolder />
|
||||||
<PanelSW:Dism EnableFeature="Microsoft-Hyper-V" ErrorHandling="prompt" />
|
<PanelSW:Dism EnableFeature="Microsoft-Hyper-V" ErrorHandling="prompt" />
|
||||||
</Component>
|
</Component>
|
||||||
@ -110,13 +110,13 @@
|
|||||||
<WixVariable Id="WixUIDialogBmp" Value="resources\podman-dialog.png" />
|
<WixVariable Id="WixUIDialogBmp" Value="resources\podman-dialog.png" />
|
||||||
<UIRef Id="PodmanUI" />
|
<UIRef Id="PodmanUI" />
|
||||||
<UI>
|
<UI>
|
||||||
<Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="OpenGuide" Condition="(WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1) AND (NOT WIX_UPGRADE_DETECTED)" />
|
<Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="OpenGuide" Condition="(WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1) AND (NOT Installed) AND (NOT UpdateStarted)" />
|
||||||
</UI>
|
</UI>
|
||||||
|
|
||||||
<InstallExecuteSequence>
|
<InstallExecuteSequence>
|
||||||
<Custom Action="CheckWSL" Before="SetWSL_INSTALL" />
|
<Custom Action="CheckWSL" Before="SetWSL_INSTALL" />
|
||||||
<Custom Action="CheckHyperV" Before="SetHYPERV_INSTALL" />
|
<Custom Action="CheckHyperV" Before="SetHYPERV_INSTALL" />
|
||||||
<ForceReboot Before="StopServices" Condition="(NOT WIX_UPGRADE_DETECTED) AND (NOT BURNMSIUNINSTALL) AND ((WSL_INSTALL = 1) OR (HYPERV_INSTALL = 1)) AND (NOT AFTERREBOOT)" />
|
<ForceReboot After="DismX86" Condition="(NOT Installed) AND (NOT UpdateStarted) AND (NOT BURNMSIUNINSTALL) AND ((WSL_INSTALL = 1) OR (HYPERV_INSTALL = 1)) AND (NOT AFTERREBOOT)" />
|
||||||
</InstallExecuteSequence>
|
</InstallExecuteSequence>
|
||||||
<Binary Id="PodmanHooks" SourceFile="artifacts/podman-msihooks.dll" />
|
<Binary Id="PodmanHooks" SourceFile="artifacts/podman-msihooks.dll" />
|
||||||
|
|
||||||
@ -154,7 +154,7 @@
|
|||||||
<StandardDirectory Id="CommonAppDataFolder">
|
<StandardDirectory Id="CommonAppDataFolder">
|
||||||
<Directory Id="CONFIGDIR" Name="containers">
|
<Directory Id="CONFIGDIR" Name="containers">
|
||||||
<Directory Id="ContainersConfigSubDir" Name="containers.conf.d">
|
<Directory Id="ContainersConfigSubDir" Name="containers.conf.d">
|
||||||
<Component Id="MachineProviderConfigFile" Guid="C32C0040-D9AF-4155-AC7E-465B63B6BE3B" Condition="CREATE_MACHINE_PROVIDER_CONFIG_FILE">
|
<Component Id="MachineProviderConfigFile" Guid="C32C0040-D9AF-4155-AC7E-465B63B6BE3B" Condition="CREATE_MACHINE_PROVIDER_CONFIG_FILE" Transitive="true">
|
||||||
<CreateFolder />
|
<CreateFolder />
|
||||||
<IniFile Id="MachineProviderConfigFile" Action="createLine" Directory="ContainersConfigSubDir" Section="machine" Name="99-podman-machine-provider.conf" Key="provider" Value=""[MACHINE_PROVIDER]"" />
|
<IniFile Id="MachineProviderConfigFile" Action="createLine" Directory="ContainersConfigSubDir" Section="machine" Name="99-podman-machine-provider.conf" Key="provider" Value=""[MACHINE_PROVIDER]"" />
|
||||||
</Component>
|
</Component>
|
||||||
|
@ -1,24 +1,42 @@
|
|||||||
#!/usr/bin/env pwsh
|
#!/usr/bin/env pwsh
|
||||||
|
|
||||||
# Example usage:
|
# Usage examples:
|
||||||
|
#
|
||||||
|
# 1) Build a v9.9.9 installer and run `update-without-user-chages`
|
||||||
|
# scenario without specifying the previous setup exe (it will download from
|
||||||
|
# GitHub):
|
||||||
|
#
|
||||||
# rm .\contrib\win-installer\*.log &&
|
# rm .\contrib\win-installer\*.log &&
|
||||||
# rm .\contrib\win-installer\*.exe &&
|
# rm .\contrib\win-installer\*.exe &&
|
||||||
# rm .\contrib\win-installer\*.wixpdb &&
|
# rm .\contrib\win-installer\*.wixpdb &&
|
||||||
|
# .\winmake.ps1 installer &&
|
||||||
# .\winmake.ps1 installer 9.9.9 &&
|
# .\winmake.ps1 installer 9.9.9 &&
|
||||||
# .\contrib\win-installer\test-installer.ps1 `
|
# .\contrib\win-installer\test-installer.ps1 `
|
||||||
# -scenario update-without-user-changes `
|
# -scenario update-without-user-changes `
|
||||||
# -setupExePath ".\contrib\win-installer\podman-9.9.9-dev-setup.exe" `
|
# -previousSetupExePath ".\contrib\win-installer\podman-5.3.0-dev-setup.exe" `
|
||||||
|
# -setupExePath ".\contrib\win-installer\podman-5.4.0-dev-setup.exe" `
|
||||||
|
# -nextSetupExePath ".\contrib\win-installer\podman-9.9.9-dev-setup.exe" `
|
||||||
|
# -v531SetupExePath ".\contrib\win-installer\podman-5.3.1-dev-setup.exe" `
|
||||||
# -provider hyperv
|
# -provider hyperv
|
||||||
|
#
|
||||||
|
|
||||||
# The Param statement must be the first statement, except for comments and any #Require statements.
|
# The Param statement must be the first statement, except for comments and any #Require statements.
|
||||||
param (
|
param (
|
||||||
[Parameter(Mandatory)]
|
[Parameter(Mandatory)]
|
||||||
[ValidateSet("test-objects-exist", "test-objects-exist-not", "installation-green-field", "installation-skip-config-creation-flag", "installation-with-pre-existing-podman-exe", "update-without-user-changes", "update-with-user-changed-config-file", "update-with-user-removed-config-file", "all")]
|
[ValidateSet("test-objects-exist", "test-objects-exist-not", "installation-green-field", "installation-skip-config-creation-flag", "installation-with-pre-existing-podman-exe",
|
||||||
|
"update-without-user-changes", "update-with-user-changed-config-file", "update-with-user-removed-config-file",
|
||||||
|
"update-without-user-changes-from-531", "update-with-user-changed-config-file-from-531", "update-with-user-removed-config-file-from-531",
|
||||||
|
"update-without-user-changes-to-next", "update-with-user-changed-config-file-to-next", "update-with-user-removed-config-file-to-next",
|
||||||
|
"all")]
|
||||||
[string]$scenario,
|
[string]$scenario,
|
||||||
[ValidateScript({Test-Path $_ -PathType Leaf})]
|
[ValidateScript({Test-Path $_ -PathType Leaf})]
|
||||||
[string]$setupExePath,
|
[string]$setupExePath,
|
||||||
[ValidateScript({Test-Path $_ -PathType Leaf})]
|
[ValidateScript({Test-Path $_ -PathType Leaf})]
|
||||||
[string]$previousSetupExePath,
|
[string]$previousSetupExePath,
|
||||||
|
[ValidateScript({Test-Path $_ -PathType Leaf})]
|
||||||
|
[string]$nextSetupExePath,
|
||||||
|
[ValidateScript({Test-Path $_ -PathType Leaf})]
|
||||||
|
[string]$v531SetupExePath,
|
||||||
[ValidateSet("wsl", "hyperv")]
|
[ValidateSet("wsl", "hyperv")]
|
||||||
[string]$provider="wsl",
|
[string]$provider="wsl",
|
||||||
[switch]$installWSL=$false,
|
[switch]$installWSL=$false,
|
||||||
@ -27,6 +45,8 @@ param (
|
|||||||
[switch]$skipConfigFileCreation=$false
|
[switch]$skipConfigFileCreation=$false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
. $PSScriptRoot\utils.ps1
|
||||||
|
|
||||||
$MachineConfPath = "$env:ProgramData\containers\containers.conf.d\99-podman-machine-provider.conf"
|
$MachineConfPath = "$env:ProgramData\containers\containers.conf.d\99-podman-machine-provider.conf"
|
||||||
$PodmanFolderPath = "$env:ProgramFiles\RedHat\Podman"
|
$PodmanFolderPath = "$env:ProgramFiles\RedHat\Podman"
|
||||||
$PodmanExePath = "$PodmanFolderPath\podman.exe"
|
$PodmanExePath = "$PodmanFolderPath\podman.exe"
|
||||||
@ -77,31 +97,19 @@ function Install-Podman-With-Defaults {
|
|||||||
$ret = Start-Process -Wait `
|
$ret = Start-Process -Wait `
|
||||||
-PassThru "$setupExePath" `
|
-PassThru "$setupExePath" `
|
||||||
-ArgumentList "/install /quiet `
|
-ArgumentList "/install /quiet `
|
||||||
/log $PSScriptRoot\podman-setup.log"
|
/log $PSScriptRoot\podman-setup-default.log"
|
||||||
if ($ret.ExitCode -ne 0) {
|
if ($ret.ExitCode -ne 0) {
|
||||||
Write-Host "Install failed, dumping log"
|
Write-Host "Install failed, dumping log"
|
||||||
Get-Content $PSScriptRoot\podman-setup.log
|
Get-Content $PSScriptRoot\podman-setup-default.log
|
||||||
throw "Exit code is $($ret.ExitCode)"
|
throw "Exit code is $($ret.ExitCode)"
|
||||||
}
|
}
|
||||||
Write-Host "Installation completed successfully!`n"
|
Write-Host "Installation completed successfully!`n"
|
||||||
}
|
}
|
||||||
|
|
||||||
function Install-Previous-Podman {
|
|
||||||
Install-Podman -setupExePath $previousSetupExePath
|
|
||||||
}
|
|
||||||
|
|
||||||
function Install-Previous-Podman-With-Defaults {
|
|
||||||
Install-Podman-With-Defaults -setupExePath $previousSetupExePath
|
|
||||||
}
|
|
||||||
|
|
||||||
function Install-Current-Podman {
|
function Install-Current-Podman {
|
||||||
Install-Podman -setupExePath $setupExePath
|
Install-Podman -setupExePath $setupExePath
|
||||||
}
|
}
|
||||||
|
|
||||||
function Install-Current-Podman-With-Defaults {
|
|
||||||
Install-Podman-With-Defaults -setupExePath $setupExePath
|
|
||||||
}
|
|
||||||
|
|
||||||
function Test-Podman-Objects-Exist {
|
function Test-Podman-Objects-Exist {
|
||||||
Write-Host "Verifying that podman files, folders and registry entries exist..."
|
Write-Host "Verifying that podman files, folders and registry entries exist..."
|
||||||
$WindowsPathsToTest | ForEach-Object {
|
$WindowsPathsToTest | ForEach-Object {
|
||||||
@ -156,10 +164,6 @@ function Uninstall-Current-Podman {
|
|||||||
Uninstall-Podman -setupExePath $setupExePath
|
Uninstall-Podman -setupExePath $setupExePath
|
||||||
}
|
}
|
||||||
|
|
||||||
function Uninstall-Previous-Podman {
|
|
||||||
Uninstall-Podman -setupExePath $previousSetupExePath
|
|
||||||
}
|
|
||||||
|
|
||||||
function Test-Podman-Objects-Exist-Not {
|
function Test-Podman-Objects-Exist-Not {
|
||||||
Write-Host "Verifying that podman files, folders and registry entries don't exist..."
|
Write-Host "Verifying that podman files, folders and registry entries don't exist..."
|
||||||
$WindowsPathsToTest | ForEach-Object {
|
$WindowsPathsToTest | ForEach-Object {
|
||||||
@ -200,16 +204,28 @@ function Remove-Podman-Machine-Conf {
|
|||||||
Write-Host "Deletion successful!`n"
|
Write-Host "Deletion successful!`n"
|
||||||
}
|
}
|
||||||
|
|
||||||
function Get-Latest-Podman-Setup-From-GitHub {
|
function Test-Installation {
|
||||||
$tag = "5.3.0"
|
param (
|
||||||
Write-Host "Downloading the $tag Podman windows setup from GitHub..."
|
[ValidateSet("wsl", "hyperv")]
|
||||||
$downloadUrl = "https://github.com/containers/podman/releases/download/v$tag/podman-$tag-setup.exe"
|
[string]$expectedConf
|
||||||
Write-Host "Downloading URL: $downloadUrl"
|
)
|
||||||
$destinationPath = "$PSScriptRoot\podman-$tag-setup.exe"
|
Test-Podman-Objects-Exist
|
||||||
Write-Host "Destination Path: $destinationPath"
|
Test-Podman-Machine-Conf-Exist
|
||||||
Invoke-WebRequest -Uri $downloadUrl -OutFile $destinationPath
|
if ($expectedConf) {
|
||||||
Write-Host "Command completed successfully!`n"
|
Test-Podman-Machine-Conf-Content -expected $expectedConf
|
||||||
return $destinationPath
|
} else {
|
||||||
|
Test-Podman-Machine-Conf-Content
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Test-Installation-No-Config {
|
||||||
|
Test-Podman-Objects-Exist
|
||||||
|
Test-Podman-Machine-Conf-Exist-Not
|
||||||
|
}
|
||||||
|
|
||||||
|
function Test-Uninstallation {
|
||||||
|
Test-Podman-Objects-Exist-Not
|
||||||
|
Test-Podman-Machine-Conf-Exist-Not
|
||||||
}
|
}
|
||||||
|
|
||||||
# SCENARIOS
|
# SCENARIOS
|
||||||
@ -218,12 +234,9 @@ function Start-Scenario-Installation-Green-Field {
|
|||||||
Write-Host " Running scenario: Installation-Green-Field"
|
Write-Host " Running scenario: Installation-Green-Field"
|
||||||
Write-Host "==========================================="
|
Write-Host "==========================================="
|
||||||
Install-Current-Podman
|
Install-Current-Podman
|
||||||
Test-Podman-Objects-Exist
|
Test-Installation
|
||||||
Test-Podman-Machine-Conf-Exist
|
|
||||||
Test-Podman-Machine-Conf-Content
|
|
||||||
Uninstall-Current-Podman
|
Uninstall-Current-Podman
|
||||||
Test-Podman-Objects-Exist-Not
|
Test-Uninstallation
|
||||||
Test-Podman-Machine-Conf-Exist-Not
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function Start-Scenario-Installation-Skip-Config-Creation-Flag {
|
function Start-Scenario-Installation-Skip-Config-Creation-Flag {
|
||||||
@ -232,11 +245,9 @@ function Start-Scenario-Installation-Skip-Config-Creation-Flag {
|
|||||||
Write-Host "========================================================="
|
Write-Host "========================================================="
|
||||||
$skipConfigFileCreation = $true
|
$skipConfigFileCreation = $true
|
||||||
Install-Current-Podman
|
Install-Current-Podman
|
||||||
Test-Podman-Objects-Exist
|
Test-Installation-No-Config
|
||||||
Test-Podman-Machine-Conf-Exist-Not
|
|
||||||
Uninstall-Current-Podman
|
Uninstall-Current-Podman
|
||||||
Test-Podman-Objects-Exist-Not
|
Test-Uninstallation
|
||||||
Test-Podman-Machine-Conf-Exist-Not
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function Start-Scenario-Installation-With-Pre-Existing-Podman-Exe {
|
function Start-Scenario-Installation-With-Pre-Existing-Podman-Exe {
|
||||||
@ -245,63 +256,98 @@ function Start-Scenario-Installation-With-Pre-Existing-Podman-Exe {
|
|||||||
Write-Host "============================================================"
|
Write-Host "============================================================"
|
||||||
New-Fake-Podman-Exe
|
New-Fake-Podman-Exe
|
||||||
Install-Current-Podman
|
Install-Current-Podman
|
||||||
Test-Podman-Objects-Exist
|
Test-Installation-No-Config
|
||||||
Test-Podman-Machine-Conf-Exist-Not
|
|
||||||
Uninstall-Current-Podman
|
Uninstall-Current-Podman
|
||||||
Test-Podman-Objects-Exist-Not
|
Test-Uninstallation
|
||||||
Test-Podman-Machine-Conf-Exist-Not
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function Start-Scenario-Update-Without-User-Changes {
|
function Start-Scenario-Update-Without-User-Changes {
|
||||||
Write-Host "`n=============================================="
|
param (
|
||||||
Write-Host " Running scenario: Update-Without-User-Changes"
|
[ValidateSet("From-Previous", "From-531", "To-Next")]
|
||||||
Write-Host "=============================================="
|
[string]$mode="From-Previous"
|
||||||
Install-Previous-Podman
|
)
|
||||||
Test-Podman-Objects-Exist
|
Write-Host "`n======================================================"
|
||||||
Test-Podman-Machine-Conf-Exist
|
Write-Host " Running scenario: Update-Without-User-Changes-$mode"
|
||||||
Test-Podman-Machine-Conf-Content
|
Write-Host "======================================================"
|
||||||
Install-Current-Podman-With-Defaults
|
switch ($mode) {
|
||||||
Test-Podman-Objects-Exist
|
'From-Previous' {$i = $previousSetupExePath; $u = $setupExePath}
|
||||||
Test-Podman-Machine-Conf-Exist
|
'From-531' {$i = $v531SetupExePath; $u = $setupExePath}
|
||||||
Test-Podman-Machine-Conf-Content
|
'To-Next' {$i = $setupExePath; $u = $nextSetupExePath}
|
||||||
Uninstall-Current-Podman
|
}
|
||||||
Test-Podman-Objects-Exist-Not
|
Install-Podman -setupExePath $i
|
||||||
Test-Podman-Machine-Conf-Exist-Not
|
Test-Installation
|
||||||
|
Install-Podman-With-Defaults -setupExePath $u
|
||||||
|
Test-Installation
|
||||||
|
Uninstall-Podman -setupExePath $u
|
||||||
|
Test-Uninstallation
|
||||||
|
}
|
||||||
|
|
||||||
|
function Start-Scenario-Update-Without-User-Changes-From-531 {
|
||||||
|
Start-Scenario-Update-Without-User-Changes -mode "From-531"
|
||||||
|
}
|
||||||
|
|
||||||
|
function Start-Scenario-Update-Without-User-Changes-To-Next {
|
||||||
|
Start-Scenario-Update-Without-User-Changes -mode "To-Next"
|
||||||
}
|
}
|
||||||
|
|
||||||
function Start-Scenario-Update-With-User-Changed-Config-File {
|
function Start-Scenario-Update-With-User-Changed-Config-File {
|
||||||
Write-Host "`n======================================================="
|
param (
|
||||||
Write-Host " Running scenario: Update-With-User-Changed-Config-File"
|
[ValidateSet("From-Previous", "From-531", "To-Next")]
|
||||||
Write-Host "======================================================="
|
[string]$mode="From-Previous"
|
||||||
Install-Previous-Podman
|
)
|
||||||
Test-Podman-Objects-Exist
|
Write-Host "`n=============================================================="
|
||||||
Test-Podman-Machine-Conf-Exist
|
Write-Host " Running scenario: Update-With-User-Changed-Config-File-$mode"
|
||||||
Test-Podman-Machine-Conf-Content
|
Write-Host "=============================================================="
|
||||||
|
switch ($mode) {
|
||||||
|
'From-Previous' {$i = $previousSetupExePath; $u = $setupExePath}
|
||||||
|
'From-531' {$i = $v531SetupExePath; $u = $setupExePath}
|
||||||
|
'To-Next' {$i = $setupExePath; $u = $nextSetupExePath}
|
||||||
|
}
|
||||||
|
Install-Podman -setupExePath $i
|
||||||
|
Test-Installation
|
||||||
$newProvider = Switch-Podman-Machine-Conf-Content
|
$newProvider = Switch-Podman-Machine-Conf-Content
|
||||||
Install-Current-Podman-With-Defaults
|
Install-Podman-With-Defaults -setupExePath $u
|
||||||
Test-Podman-Objects-Exist
|
Test-Installation -expectedConf $newProvider
|
||||||
Test-Podman-Machine-Conf-Exist
|
Uninstall-Podman -setupExePath $u
|
||||||
Test-Podman-Machine-Conf-Content -expected $newProvider
|
Test-Uninstallation
|
||||||
Uninstall-Current-Podman
|
}
|
||||||
Test-Podman-Objects-Exist-Not
|
|
||||||
Test-Podman-Machine-Conf-Exist-Not
|
function Start-Scenario-Update-With-User-Changed-Config-File-From-531 {
|
||||||
|
Start-Scenario-Update-With-User-Changed-Config-File -mode "From-531"
|
||||||
|
}
|
||||||
|
|
||||||
|
function Start-Scenario-Update-With-User-Changed-Config-File-To-Next {
|
||||||
|
Start-Scenario-Update-With-User-Changed-Config-File -mode "To-Next"
|
||||||
}
|
}
|
||||||
|
|
||||||
function Start-Scenario-Update-With-User-Removed-Config-File {
|
function Start-Scenario-Update-With-User-Removed-Config-File {
|
||||||
Write-Host "`n======================================================="
|
param (
|
||||||
Write-Host " Running scenario: Update-With-User-Removed-Config-File"
|
[ValidateSet("From-Previous", "From-531", "To-Next")]
|
||||||
Write-Host "======================================================="
|
[string]$mode="From-Previous"
|
||||||
Install-Previous-Podman
|
)
|
||||||
Test-Podman-Objects-Exist
|
Write-Host "`n=============================================================="
|
||||||
Test-Podman-Machine-Conf-Exist
|
Write-Host " Running scenario: Update-With-User-Removed-Config-File-$mode"
|
||||||
Test-Podman-Machine-Conf-Content
|
Write-Host "=============================================================="
|
||||||
|
switch ($mode) {
|
||||||
|
'From-Previous' {$i = $previousSetupExePath; $u = $setupExePath}
|
||||||
|
'From-531' {$i = $v531SetupExePath; $u = $setupExePath}
|
||||||
|
'To-Next' {$i = $setupExePath; $u = $nextSetupExePath}
|
||||||
|
}
|
||||||
|
Install-Podman -setupExePath $i
|
||||||
|
Test-Installation
|
||||||
Remove-Podman-Machine-Conf
|
Remove-Podman-Machine-Conf
|
||||||
Install-Current-Podman-With-Defaults
|
Install-Podman-With-Defaults -setupExePath $u
|
||||||
Test-Podman-Objects-Exist
|
Test-Installation-No-Config
|
||||||
Test-Podman-Machine-Conf-Exist-Not
|
Uninstall-Podman -setupExePath $u
|
||||||
Uninstall-Current-Podman
|
Test-Uninstallation
|
||||||
Test-Podman-Objects-Exist-Not
|
}
|
||||||
Test-Podman-Machine-Conf-Exist-Not
|
|
||||||
|
function Start-Scenario-Update-With-User-Removed-Config-File-From-531 {
|
||||||
|
Start-Scenario-Update-With-User-Removed-Config-File -mode "From-531"
|
||||||
|
}
|
||||||
|
|
||||||
|
function Start-Scenario-Update-With-User-Removed-Config-File-To-Next {
|
||||||
|
Start-Scenario-Update-With-User-Removed-Config-File -mode "To-Next"
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($scenario) {
|
switch ($scenario) {
|
||||||
@ -326,27 +372,75 @@ switch ($scenario) {
|
|||||||
}
|
}
|
||||||
Start-Scenario-Update-Without-User-Changes
|
Start-Scenario-Update-Without-User-Changes
|
||||||
}
|
}
|
||||||
|
'update-without-user-changes-from-531' {
|
||||||
|
if (!$v531SetupExePath) {
|
||||||
|
$v531SetupExePath = Get-Podman-Setup-From-GitHub -version "tags/v5.3.1"
|
||||||
|
}
|
||||||
|
Start-Scenario-Update-Without-User-Changes-From-531
|
||||||
|
}
|
||||||
|
'update-without-user-changes-to-next' {
|
||||||
|
if (!$nextSetupExePath) {
|
||||||
|
throw "Next version installer path is not defined. Use '-nextSetupExePath <setup-exe-path>' to define it."
|
||||||
|
}
|
||||||
|
Start-Scenario-Update-Without-User-Changes-To-Next
|
||||||
|
}
|
||||||
'update-with-user-changed-config-file' {
|
'update-with-user-changed-config-file' {
|
||||||
if (!$previousSetupExePath) {
|
if (!$previousSetupExePath) {
|
||||||
$previousSetupExePath = Get-Latest-Podman-Setup-From-GitHub
|
$previousSetupExePath = Get-Latest-Podman-Setup-From-GitHub
|
||||||
}
|
}
|
||||||
Start-Scenario-Update-With-User-Changed-Config-File
|
Start-Scenario-Update-With-User-Changed-Config-File
|
||||||
}
|
}
|
||||||
|
'update-with-user-changed-config-file-from-531' {
|
||||||
|
if (!$v531SetupExePath) {
|
||||||
|
$v531SetupExePath = Get-Podman-Setup-From-GitHub -version "tags/v5.3.1"
|
||||||
|
}
|
||||||
|
Start-Scenario-Update-With-User-Changed-Config-File-From-531
|
||||||
|
}
|
||||||
|
'update-with-user-changed-config-file-to-next' {
|
||||||
|
if (!$nextSetupExePath) {
|
||||||
|
throw "Next version installer path is not defined. Use '-nextSetupExePath <setup-exe-path>' to define it."
|
||||||
|
}
|
||||||
|
Start-Scenario-Update-With-User-Changed-Config-File-To-Next
|
||||||
|
}
|
||||||
'update-with-user-removed-config-file' {
|
'update-with-user-removed-config-file' {
|
||||||
if (!$previousSetupExePath) {
|
if (!$previousSetupExePath) {
|
||||||
$previousSetupExePath = Get-Latest-Podman-Setup-From-GitHub
|
$previousSetupExePath = Get-Latest-Podman-Setup-From-GitHub
|
||||||
}
|
}
|
||||||
Start-Scenario-Update-With-User-Removed-Config-File
|
Start-Scenario-Update-With-User-Removed-Config-File
|
||||||
}
|
}
|
||||||
|
'update-with-user-removed-config-file-from-531' {
|
||||||
|
if (!$v531SetupExePath) {
|
||||||
|
$v531SetupExePath = Get-Podman-Setup-From-GitHub -version "tags/v5.3.1"
|
||||||
|
}
|
||||||
|
Start-Scenario-Update-With-User-Removed-Config-File-From-531
|
||||||
|
}
|
||||||
|
'update-with-user-removed-config-file-to-next' {
|
||||||
|
if (!$nextSetupExePath) {
|
||||||
|
throw "Next version installer path is not defined. Use '-nextSetupExePath <setup-exe-path>' to define it."
|
||||||
|
}
|
||||||
|
Start-Scenario-Update-With-User-Removed-Config-File-To-Next
|
||||||
|
}
|
||||||
'all' {
|
'all' {
|
||||||
|
if (!$nextSetupExePath) {
|
||||||
|
throw "Next version installer path is not defined. Use '-nextSetupExePath <setup-exe-path>' to define it."
|
||||||
|
}
|
||||||
if (!$previousSetupExePath) {
|
if (!$previousSetupExePath) {
|
||||||
$previousSetupExePath = Get-Latest-Podman-Setup-From-GitHub
|
$previousSetupExePath = Get-Latest-Podman-Setup-From-GitHub
|
||||||
}
|
}
|
||||||
|
if (!$v531SetupExePath) {
|
||||||
|
$v531SetupExePath = Get-Podman-Setup-From-GitHub -version "tags/v5.3.1"
|
||||||
|
}
|
||||||
Start-Scenario-Installation-Green-Field
|
Start-Scenario-Installation-Green-Field
|
||||||
Start-Scenario-Installation-Skip-Config-Creation-Flag
|
Start-Scenario-Installation-Skip-Config-Creation-Flag
|
||||||
Start-Scenario-Installation-With-Pre-Existing-Podman-Exe
|
Start-Scenario-Installation-With-Pre-Existing-Podman-Exe
|
||||||
Start-Scenario-Update-Without-User-Changes
|
Start-Scenario-Update-Without-User-Changes
|
||||||
|
Start-Scenario-Update-Without-User-Changes-From-531
|
||||||
|
Start-Scenario-Update-Without-User-Changes-To-Next
|
||||||
Start-Scenario-Update-With-User-Changed-Config-File
|
Start-Scenario-Update-With-User-Changed-Config-File
|
||||||
|
Start-Scenario-Update-With-User-Changed-Config-File-From-531
|
||||||
|
Start-Scenario-Update-With-User-Changed-Config-File-To-Next
|
||||||
Start-Scenario-Update-With-User-Removed-Config-File
|
Start-Scenario-Update-With-User-Removed-Config-File
|
||||||
|
Start-Scenario-Update-With-User-Removed-Config-File-From-531
|
||||||
|
Start-Scenario-Update-With-User-Removed-Config-File-To-Next
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
23
contrib/win-installer/utils.ps1
Normal file
23
contrib/win-installer/utils.ps1
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
function Get-Latest-Podman-Setup-From-GitHub {
|
||||||
|
return Get-Podman-Setup-From-GitHub "latest"
|
||||||
|
}
|
||||||
|
|
||||||
|
function Get-Podman-Setup-From-GitHub {
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory)]
|
||||||
|
[string] $version
|
||||||
|
)
|
||||||
|
|
||||||
|
Write-Host "Downloading the $version Podman windows setup from GitHub..."
|
||||||
|
$apiUrl = "https://api.github.com/repos/containers/podman/releases/$version"
|
||||||
|
$response = Invoke-RestMethod -Uri $apiUrl -Headers @{"User-Agent"="PowerShell"} -ErrorAction Stop
|
||||||
|
$downloadUrl = $response.assets[0].browser_download_url
|
||||||
|
Write-Host "Downloading URL: $downloadUrl"
|
||||||
|
$latestTag = $response.tag_name
|
||||||
|
$destinationPath = "$PSScriptRoot\podman-$latestTag-setup.exe"
|
||||||
|
Write-Host "Destination Path: $destinationPath"
|
||||||
|
Invoke-WebRequest -Uri $downloadUrl -OutFile $destinationPath
|
||||||
|
Write-Host "Command completed successfully!`n"
|
||||||
|
return $destinationPath
|
||||||
|
}
|
Reference in New Issue
Block a user