Allow releasing multiple variants, and use DefaultVariants that have ReleaseTo by default

This commit is contained in:
Steve Streeting 2020-10-08 14:59:25 +01:00
parent 691d68ddbe
commit eb1a74a1d2

View File

@ -1,12 +1,9 @@
[CmdletBinding()] # Fail on unknown args
param (
# Version to release
[Parameter(Mandatory=$true)]
[string]$version,
# Variant name to release
[Parameter(Mandatory=$true)]
# Project folder (assumes current dir if not specified)
[string]$variant,
# Variant name(s) to release; if not specified release all DefaultVariants with ReleaseTo options
[array]$variants,
# Source folder, current dir if omitted
[string]$src,
# Which service(s) to release on e.g. "steam": defaults to "ReleaseTo" services in packageconfig.json for variant
@ -29,7 +26,7 @@ function Write-Usage {
Write-Output " ue4-release.ps1 -version:ver -variant:var -services:steam,itch [-src:sourcefolder] [-dryrun]"
Write-Output " "
Write-Output " -version:ver : Version to release; must have been packaged already"
Write-Output " -variant:var : Name of package variant to release"
Write-Output " -variants:var1,var2 : Name of variants to release. Omit to use DefaultVariants"
Write-Output " -services:s1,s2 : Name of services to release to. Can omit and rely on ReleaseTo"
Write-Output " setting of variant in packageconfig.json "
Write-Output " -src : Source folder (current folder if omitted), must contain packageconfig.json"
@ -49,6 +46,11 @@ if ($src.Length -eq 0) {
Write-Verbose "-src not specified, assuming current directory"
}
if (-not $version) {
Write-Output "Mandatory argument: version"
Exit 1
}
Write-Output "~-~-~ UE4 Release Helper Start ~-~-~"
try {
@ -56,22 +58,27 @@ try {
# Import config
$config = Read-Package-Config -srcfolder:$src
# Find variant (first match in case config has many)
$variantConfig = $config.Variants | Where-Object { $_.Name -eq $variant }
if ($variantConfig -is [array]) {
if ($variantConfig.Count > 1) {
throw "More than one package variant called $variant in packageconfig.json, ambiguous!"
if ($variants) {
$variantConfigs = $config.Variants | Where-Object { $_.Name -in $variants }
if ($variantConfigs.Count -ne $variants.Count) {
$unmatchedVariants = $variants | Where-Object { $_ -notin $variantConfigs.Name }
Write-Warning "Variant(s) not found, ignoring: $($unmatchedVariants -join ", ")"
}
} else {
# Don't think this will happen but still
$variantConfig = $variantConfig[0]
}
# Use default variants
$variantConfigs = $config.Variants | Where-Object { $_.Name -in $config.DefaultVariants }
}
$hasErrors = $false
foreach ($variantConfig in $variantConfigs) {
# Get source dir
$sourcedir = Get-Package-Client-Dir -config:$config -versionNumber:$version -variantName:$variant
$sourcedir = Get-Package-Client-Dir -config:$config -versionNumber:$version -variantName:$variantConfig.Name
if (-not (Test-Path $sourcedir -PathType Container)) {
throw "Release folder $sourcedir does not exist"
Write-Error "Release folder $sourcedir does not exist, skipping"
$hasErrors = $true
continue
}
# Find service(s)
@ -87,11 +94,12 @@ try {
}
if (-not $servicesFound) {
throw "No matching services to release $variant to"
Write-Verbose "Skipping $($variantConfig.Name), no matching release services"
continue
}
Write-Output ""
Write-Output "Variant : $variant"
Write-Output "Variant : $($variantConfig.Name)"
Write-Output "Source Folder : $sourcedir"
Write-Output "Service(s) : $($servicesFound -join ", ")"
Write-Output ""
@ -107,6 +115,12 @@ try {
}
}
}
if ($hasErrors) {
throw "Errors occurred, see above"
}
} catch {
Write-Output $_.Exception.Message
Write-Output "~-~-~ UE4 Release Helper FAILED ~-~-~"