Private/Logic/Eigenverft.Manifested.Sandbox.Runtime.GHCli.Install.ps1

<#
    Eigenverft.Manifested.Sandbox.Runtime.GHCli.Install
#>


function Repair-GHCliRuntime {
    [CmdletBinding()]
    param(
        [pscustomobject]$State,
        [string[]]$CorruptPackagePaths = @(),
        [string]$Flavor,
        [string]$LocalRoot = (Get-ManifestedLocalRoot)
    )

    if (-not $State) {
        $State = Get-GHCliRuntimeState -Flavor $Flavor -LocalRoot $LocalRoot
    }

    return (Repair-ManifestedArchiveRuntimeArtifacts -State $State -CorruptPackagePaths $CorruptPackagePaths)
}

function Install-GHCliRuntime {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [pscustomobject]$PackageInfo,

        [string]$Flavor,
        [string]$LocalRoot = (Get-ManifestedLocalRoot)
    )

    if ([string]::IsNullOrWhiteSpace($Flavor)) {
        $Flavor = if ($PackageInfo.Flavor) { $PackageInfo.Flavor } else { Get-GHCliFlavor }
    }

    $runtimeHome = Get-ManagedGHCliRuntimeHome -Version $PackageInfo.Version -Flavor $Flavor -LocalRoot $LocalRoot
    $installResult = Install-ManifestedArchiveRuntimeFromPackage -PackageInfo $PackageInfo -RuntimeHome $runtimeHome -StagePrefix 'ghcli' -DisplayName 'GitHub CLI' -TestRuntime {
        param($candidateRuntimeHome)
        Test-GHCliRuntime -RuntimeHome $candidateRuntimeHome
    }
    $validation = $installResult.Validation

    [pscustomobject]@{
        Action      = $installResult.Action
        TagName     = $PackageInfo.TagName
        Version     = $PackageInfo.Version
        Flavor      = $Flavor
        RuntimeHome = $runtimeHome
        GhCmd       = $validation.GhCmd
        Source      = $PackageInfo.Source
        DownloadUrl = $PackageInfo.DownloadUrl
        Sha256      = $PackageInfo.Sha256
    }
}