Install-GitHubRelease.ps1

<#PSScriptInfo
 
.VERSION 1.5.0-scriptgenerators0001
 
.GUID 802367c6-654a-450b-94db-87e1d52e020a
 
.AUTHOR Joel 'Jaykul' Bennett
 
.COMPANYNAME HuddledMasses.org
 
.COPYRIGHT (c) 2019-2025 Joel Bennett. All rights reserved.
 
.TAGS Install GitHub Releases Binaries Linux Windows MacOS
 
.LICENSEURI https://opensource.org/license/MIT
 
.PROJECTURI https://github.com/Jaykul/FromGitHub
 
.RELEASENOTES
 
I'm working on making this a module and still distributing it as a script.
 
The first re-release was 1.4.0, but it had some regressions, and I ended up re-publishing 1.3.2 as 1.4.2
After fixing those regressions, we are now releasing again from the module source, as 1.5.0
 
v1.5.0-scriptgenerators0001+Build.local.Sha.7a26038f3fce8350bad385bdc6d2e8ad0f0aa05f.Date.20250527T222939
 
#>




<#
.SYNOPSIS
Install a binary from a github release.
 
.DESCRIPTION
An installer for single-binary tools released on GitHub.
This cross-platform script will download, check the file hash,
unpack and and make sure the binary is on your PATH.
 
It uses the github API to get the details of the release and find the
list of downloadable assets, and relies on the common naming convention
to detect the right binary for your OS (and architecture).
 
.NOTES
All these examples are (only) tested on Windows and WSL Ubuntu
 
 
.EXAMPLE
Install-GithubRelease FluxCD Flux2
 
Install `Flux` from the https://github.com/FluxCD/Flux2 repository
 
.EXAMPLE
Install-GithubRelease earthly earthly
 
Install `earthly` from the https://github.com/earthly/earthly repository
 
.EXAMPLE
Install-GithubRelease junegunn fzf
 
Install `fzf` from the https://github.com/junegunn/fzf repository
 
.EXAMPLE
Install-GithubRelease BurntSushi ripgrep
 
Install `rg` from the https://github.com/BurntSushi/ripgrep repository
 
.EXAMPLE
Install-GithubRelease opentofu opentofu
 
Install `opentofu` from the https://github.com/opentofu/opentofu repository
 
.EXAMPLE
Install-GithubRelease twpayne chezmoi
 
Install `chezmoi` from the https://github.com/twpayne/chezmoi repository
 
.EXAMPLE
Install-GitHubRelease https://github.com/mikefarah/yq/releases/tag/v4.44.6
 
Install `yq` version v4.44.6 from it's release on github.com
 
.EXAMPLE
Install-GithubRelease sharkdp/bat
Install-GithubRelease sharkdp/fd
 
Install `bat` and `fd` from their repositories
 
#>


[CmdletBinding(SupportsShouldProcess)]
param(
        # The user or organization that owns the repository
        # Also supports pasting the org and repo as a single string: fluxcd/flux2
        # Or passing the full URL to the project: https://github.com/fluxcd/flux2
        # Or a specific release: https://github.com/fluxcd/flux2/releases/tag/v2.5.0
        [Parameter(Position = 0, Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
        [Alias("User")]
        [string]$Org,

        # The name of the repository or project to download from
        [Parameter(Position = 1, ValueFromPipelineByPropertyName)]
        [string]$Repo,

        # The tag of the release to download. Defaults to 'latest'
        [Parameter(Position = 2, ValueFromPipelineByPropertyName)]
        [Alias("Version")]
        [string]$Tag = 'latest',

        # Skip prompting to create the "BinDir" tool directory (on Windows)
        [switch]$Force,

        # A regex pattern to override selecting the right option from the assets on the release
        # The operating system is automatically detected, you do not need to pass this parameter
        [string]$OS,

        # A regex pattern to override selecting the right option from the assets on the release
        # The architecture is automatically detected, you do not need to pass this parameter
        [string]$Architecture,

        # The location to install to.
        # Defaults to $Env:LocalAppData\Programs\Tools on Windows, /usr/local/bin on Linux/MacOS
        # There's normally no reason to pass this parameter
        [string]$BinDir,

        # Optionally, the file name for the executable (it will be renamed to this)
        [string]$ExecutableName
    )


@(
'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'
)|.{

    [CmdletBinding(DefaultParameterSetName = "ByteArray")]
    param(
        [Parameter(Mandatory, ValueFromPipeline)]
        [string]$Base64Content
    )
    process {
        $Out = [System.IO.MemoryStream]::new()
        $In = [System.IO.MemoryStream][System.Convert]::FromBase64String($Base64Content)
        $zip = [System.IO.Compression.DeflateStream]::new($In, [System.IO.Compression.CompressionMode]::Decompress)
        $zip.CopyTo($Out)
        trap [System.IO.InvalidDataException] {
            Write-Debug "Base64Content not Compressed. Skipping Deflate."
            $In.CopyTo($Out)
            continue
        }
        $null = $Out.Seek(0, "Begin")
        $null = [System.Reflection.Assembly]::Load($Out.ToArray())
        trap [BadImageFormatException] {
            Write-Debug "Base64Content not an Assembly. Trying New-Module and ScriptBlock.Create."
            $null = $Out.Seek(0, "Begin")
            # Use StreamReader to handle possible BOM
            $Source = [System.IO.StreamReader]::new($Out, $true).ReadToEnd()
            $null = New-Module ([ScriptBlock]::Create($Source)) -Verbose:$false | Import-Module -Scope Global -Verbose:$false
            continue
        }
    }

}
Install-GitHubRelease @PSBoundParameters