diff --git a/install-binary.ps1 b/install-binary.ps1 new file mode 100644 index 00000000..365493ed --- /dev/null +++ b/install-binary.ps1 @@ -0,0 +1,75 @@ +param ( + [switch] $Update = $false +) + +function Get-Architecture { + $architecture = [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture + + $arch = switch ($architecture) { + "X64" { "amd64" } + "Arm64" { "arm64" } + Default { "" } + } + + if ($arch -eq "") { + throw "Unsupported architecture: ${architecture}" + } + + return $arch +} + +function Get-Version { + param ([Parameter(Mandatory=$true)][bool] $Update) + + if ($Update) { + return "latest" + } + + return git describe --tags --exact-match 2>$null || "latest" +} + +function New-TemporaryDirectory { + $tmp = [System.IO.Path]::GetTempPath() + $name = (New-Guid).ToString("N") + $dir = New-Item -ItemType Directory -Path (Join-Path $tmp $name) + return $dir.FullName +} + +function Get-Url { + param ([Parameter(Mandatory=$true)][string] $Version, [Parameter(Mandatory=$true)][string] $Architecture) + + if ($Version -eq "latest") { + return "https://github.com/databus23/helm-diff/releases/latest/download/helm-diff-windows-${Architecture}.tgz" + } + return "https://github.com/databus23/helm-diff/releases/download/${Version}/helm-diff-windows-${Architecture}.tgz" +} + +function Download-Plugin { + param ([Parameter(Mandatory=$true)][string] $Url, [Parameter(Mandatory=$true)][string] $Output) + + Invoke-WebRequest -OutFile $Output $Url +} + +function Install-Plugin { + param ([Parameter(Mandatory=$true)][string] $ArchiveDirectory, [Parameter(Mandatory=$true)][string] $ArchiveName, [Parameter(Mandatory=$true)][string] $Destination) + + tar -xzf (Join-Path $ArchiveDirectory $ArchiveName) -C $ArchiveDirectory + + New-Item -ItemType Directory -Path $Destination -Force + Copy-Item -Path (Join-Path $ArchiveDirectory "diff" "bin" "diff.exe") -Destination $Destination -Force +} + +$ErrorActionPreference = "Stop" + +$archiveName = "helm-diff.tgz" +$arch = Get-Architecture +$version = Get-Version -Update $Update +$tmpDir = New-TemporaryDirectory + +trap { Remove-Item -path $tmpDir -Recurse -Force } + +$url = Get-Url -Version $version -Architecture $arch +$output = Join-Path $tmpDir $archiveName + +Download-Plugin -Url $url -Output $output +Install-Plugin -ArchiveDirectory $tmpDir -ArchiveName $archiveName -Destination (Join-Path $env:HELM_PLUGIN_DIR "bin") \ No newline at end of file diff --git a/plugin.yaml b/plugin.yaml index d466f107..9664495b 100644 --- a/plugin.yaml +++ b/plugin.yaml @@ -1,11 +1,29 @@ -name: "diff" +name: diff # Version is the version of Helm plus the number of official builds for this # plugin version: "3.10.0" usage: "Preview helm upgrade changes as a diff" description: "Preview helm upgrade changes as a diff" useTunnel: true -command: "$HELM_PLUGIN_DIR/bin/diff" -hooks: - install: "$HELM_PLUGIN_DIR/install-binary.sh" - update: "$HELM_PLUGIN_DIR/install-binary.sh -u" +platformCommand: + - command: ${HELM_PLUGIN_DIR}/bin/diff + - os: windows + command: ${HELM_PLUGIN_DIR}\bin\diff.exe +platformHooks: + install: + - command: ${HELM_PLUGIN_DIR}/install-binary.sh + - os: windows + command: pwsh + args: + - -c + - ${HELM_PLUGIN_DIR}/install-binary.ps1 + update: + - command: ${HELM_PLUGIN_DIR}/install-binary.sh + args: + - -u + - os: windows + command: pwsh + args: + - -c + - ${HELM_PLUGIN_DIR}/install-binary.ps1 + - -Update \ No newline at end of file