diff --git a/dist/functions/index.ts b/dist/functions/index.ts deleted file mode 100644 index b3538ac..0000000 --- a/dist/functions/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type {PagesFunction} from "@cloudflare/workers-types"; - -interface Env { - ASSETS: Fetcher; -} - -export const onRequest: PagesFunction = async (context) => { - const userAgent = context.request.headers.get("user-agent").toLowerCase() - const url = new URL(context.request.url) - url.pathname = "/install-opentofu." + (userAgent.includes("windows")?"ps1":"sh") - const asset = await context.env.ASSETS.fetch(url) - return new Response(asset.body, { - status: 200, - headers: { - 'content-type': 'text/x-shellscript', - 'content-disposition': 'attachment; filename=install-opentofu.' + (userAgent.includes("windows")?"ps1":"sh"), - 'vary': 'user-agent' - }, - }); -} diff --git a/dist/functions/tsconfig.json b/dist/functions/tsconfig.json deleted file mode 100644 index b34ff24..0000000 --- a/dist/functions/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "target": "esnext", - "module": "esnext", - "moduleResolution": "nodenext", - "lib": ["esnext"], - "types": ["@cloudflare/workers-types"] - } -} diff --git a/dist/install-opentofu.ps1 b/dist/install-opentofu.ps1 deleted file mode 100755 index 9e1d13e..0000000 --- a/dist/install-opentofu.ps1 +++ /dev/null @@ -1,659 +0,0 @@ -<# -.SYNOPSIS -Install OpenTofu. - -.DESCRIPTION -This script installs OpenTofu via any of the supported methods. Please run it with the -h or -help parameter -to get a detailed help description. - -.LINK -https://opentofu.org - -.LINK -https://opentofu.org/docs/intro/install/ - -.PARAMETER help -Show a more detailed help. - -.PARAMETER installMethod -The installation method to use. Must be one of: -- standalone - -.PARAMETER installPath -Installs OpenTofu to the specified path. (Standalone installation only.) - -.PARAMETER opentofuVersion -Installs the specified OpenTofu version. (Standalone installation only.) - -.PARAMETER cosignPath -Path to cosign. (Standalone installation only.) - -.PARAMETER cosignOidcIssuer -OIDC issuer for cosign signatures. (Standalone installation only.) - -.PARAMETER cosignIdentity -Identity for the cosign signature. (Standalone installation only.) - -.PARAMETER gpgPath -Path for the GPG installation. (Standalone installation only.) - -.PARAMETER gpgURL -URL to download the GPG key from. (Standalone installation only.) - -.PARAMETER gpgKeyID -GPG key ID / fingerprint to expect. (Standalone installation only.) - -.PARAMETER skipVerify -Skip cosign/GPG integrity verification. (Standalone installation only; not recommended.) - -.PARAMETER skipChangePath -Skip changing the user/system PATH variable to include OpenTofu. - -.PARAMETER allUsers -Install for all users with elevated privileges. - -.PARAMETER internalContinue -Internal parameter to use for continuing with elevated privileges. Do not use. - -.PARAMETER internalZipFile -Internal parameter to use for continuing with elevated privileges. Do not use. - -.EXAMPLE -PS> .\install-opentofu.ps1 -installMethod standalone - -#> -param( - [Parameter(Mandatory = $false)] - [switch]$help = $false, - - [Parameter(Mandatory = $false)] - [string]$installPath = "", - - [Parameter(Mandatory = $false)] - [string]$opentofuVersion = "latest", - - [Parameter(Mandatory = $false)] - [string]$installMethod, - - [Parameter(Mandatory = $false)] - [string]$cosignPath = "cosign.exe", - - [Parameter(Mandatory = $false)] - [string]$cosignOidcIssuer = "https://token.actions.githubusercontent.com", - - [Parameter(Mandatory = $false)] - [string]$cosignIdentity = "autodetect", - - [Parameter(Mandatory = $false)] - [string]$gpgPath = "gpg.exe", - - [Parameter(Mandatory = $false)] - [string]$gpgURL = "https://get.opentofu.org/opentofu.asc", - - [Parameter(Mandatory = $false)] - [string]$gpgKeyID = "E3E6E43D84CB852EADB0051D0C0AF313E5FD9F80", - - [Parameter(Mandatory = $false)] - [switch]$skipVerify = $false, - - [Parameter(Mandatory = $false)] - [switch]$skipChangePath = $false, - - [Parameter(Mandatory = $false)] - [switch]$allUsers = $false, - - [Parameter(Mandatory = $false)] - [switch]$internalContinue = $false, - - [Parameter(Mandatory = $false)] - [string]$internalZipFile = "" -) - -$scriptCommand = $MyInvocation.MyCommand.Source -$InformationPreference = 'continue' -$WarningPreference = 'continue' -$ErrorActionPreference = 'continue' -$ProgressPreference = 'silentlyContinue' - -$esc = [char]27 -$bold = "$esc[1m" -$orange = "$esc[33m" -$red = "$esc[31m" -$blue = "$esc[34m" -$normal = "$esc[0m" -$magenta = "$esc[35m" - -$defaultOpenTofuVersion = "latest" -if ($allUsers) { - $defaultInstallPath = Join-Path $Env:Programfiles "OpenTofu" -} else { - $defaultInstallPath = Join-Path (Join-Path $Env:LOCALAPPDATA "Programs") "OpenTofu" -} -$defaultCosignPath = "cosign.exe" -$defaultCosignOidcIssuer = "https://token.actions.githubusercontent.com" -$defaultCosignIdentity = "autodetect" -$defaultGPGPath = "gpg.exe" -$defaultGPGURL = "https://get.opentofu.org/opentofu.asc" -$defaultGPGKeyID = "E3E6E43D84CB852EADB0051D0C0AF313E5FD9F80" - -if (!$opentofuVersion) { - $opentofuVersion = "latest" -} -if (!$installPath) { - $installPath = $defaultInstallPath -} -if (!$cosignPath) { - $cosignPath = $defaultCosignPath -} -if (!$cosignOidcIssuer) { - $cosignOidcIssuer = $defaultCosignOidcIssuer -} -if (!$cosignIdentity) { - $cosignIdentity = $defaultCosignIdentity -} -if (!$gpgPath) { - $gpgPath = $defaultGPGPath -} -if (!$gpgURL) { - $gpgURL = $defaultGPGURL -} -if (!$gpgKeyID) { - $gpgKeyID = $defaultGPGKeyID -} - -$exitCodeOK = 0 -$exitCodeInstallRequirementNotMet = 1 -$exitCodeInstallFailed = 2 -$exitCodeInvalidArgument = 3 - -class ExitCodeException : System.Exception { - [int] $ExitCode - [bool] $PrintUsage - ExitCodeException([string] $message, [int] $exitCode) : base($message) { - $this.ExitCode = $exitCode - $this.PrintUsage = $false - } - ExitCodeException([string] $message, [int] $exitCode, [bool] $printUsage) : base($message) { - $this.ExitCode = $exitCode - $this.PrintUsage = $printUsage - } -} - -class InvalidArgumentException : ExitCodeException { - InvalidArgumentException([string] $message) : base($message, $exitCodeInvalidArgument, $true) { - - } -} - -class InstallRequirementNotMetException : ExitCodeException { - InstallRequirementNotMetException([string] $message) : base($message, $exitCodeInstallRequirementNotMet, $false) { - - } -} - -class InstallFailedException : ExitCodeException { - InstallFailedException([string] $message) : base($message, $exitCodeInstallFailed, $false) { - } -} - -function logInfo() { - param( - $message - ) - Write-Information "${blue}${message}${normal}" -} - -function logWarning() { - param( - $message - ) - Write-Warning "${orange}${message}${normal}" -} - -function logError() { - param( - $message - ) - try - { - [Console]::Error.WriteLine("${red}${message}${normal}") - } catch {} -} - -function tempdir() { - $tempPath = [System.IO.Path]::GetTempPath() - $randomName = [System.IO.Path]::GetRandomFileName() - $path = Join-Path $tempPath $randomName - New-Item -Path $path -ItemType directory -} - -function unpackStandalone() { - logInfo "Unpacking ZIP file to $installPath..." - try - { - New-Item -Path $installPath -ItemType directory -Force - } - catch - { - $msg = $_.ToString() - throw [InstallFailedException]::new("Failed to create target directory at ${installPath}. (${msg})") - } - $prevProgressPreference = $global:ProgressPreference - $global:ProgressPreference = 'SilentlyContinue' - try - { - logInfo "Unzipping $internalZipFile to $installPath..." - Expand-Archive -LiteralPath $internalZipFile -DestinationPath $installPath -Force - } - catch - { - $msg = $_.ToString() - throw [InstallFailedException]::new("Failed to unzip to ${installPath}. (${msg})") - } - finally - { - $global:ProgressPreference = $prevProgressPreference - } - - if ($skipChangePath) { - return - } - try { - if ($allUsers) { - logInfo "Updating system PATH variable..." - $target = [EnvironmentVariableTarget]::Machine - } else { - logInfo "Updating user PATH variable..." - $target = [EnvironmentVariableTarget]::User - } - $currentPath = [Environment]::GetEnvironmentVariable("Path", $target) - if (!($currentPath.Contains($installPath))) { - [Environment]::SetEnvironmentVariable("Path", $currentPath + ";${installPath}", $target) - } - } - catch - { - $msg = $_.ToString() - throw [InstallFailedException]::new("Failed to set path. (${msg})") - } -} - -function installStandalone() { - if ($internalContinue) { - logInfo "Continuing standalone installation..." - unpackStandalone - return - } - - logInfo "Performing standalone installation to ${installPath}..." - - if (!$skipVerify) { - logInfo("Checking if cosign or GPG is available...") - - $cosignAvailable = $false - try { - $ErrorActionPreference = 'stop' - if(Get-Command $cosignPath){ - $cosignAvailable = $true - } - } catch {} - $ErrorActionPreference = 'continue' - - $gpgAvailable = $false - try { - $ErrorActionPreference = 'stop' - if(Get-Command $gpgPath){ - $gpgAvailable = $true - } - } catch {} - $ErrorActionPreference = 'continue' - - if ($cosignAvailable) { - $verifyMethod = "cosign" - } elseif ($gpgAvailable) { - $verifyMethod = "gpg" - } else { - throw [InstallRequirementNotMetException]::new("${bold}Additional tools are needed for the installation. Please read the following text carefully!${normal}`n`nThis installer tries to verify that the OpenTofu version downloaded has been ${bold}signed by OpenTofu and has not been tampered with${normal}. This is only possible if either cosign or GPG is installed on the system, but neither was found. You have the following options:`n`n1. ${bold}Install cosign${normal} and add it to your ${magenta}PATH${normal} or provide the ${magenta}-cosignPath${normal} parameter to your cosign installation.`n2. ${bold}Install GPG${normal} and add it to your ${magenta}PATH${normal} or provide the ${magenta}-gpgPath${normal} parameter to your GPG installation.`n3. ${bold}Disable integrity verification${normal} with ${magenta}-skipVerify${normal} (${red}not recommended${normal}).") - } - } else { - $verifyMethod = "-" - logWarning "Signature verification is disabled. This is not recommended." - } - - if ($opentofuVersion -eq "latest") { - $body = "" - try - { - logInfo "Determining latest OpenTofu version..." - $headers = @{ } - if ($Env:GITHUB_TOKEN) - { - logInfo "Using provided GITHUB_TOKEN to prevent rate limiting..." - $headers["Authorization"] = "token ${Env:GITHUB_TOKEN}" - } - $body = Invoke-WebRequest -uri "https://api.github.com/repos/opentofu/opentofu/releases/latest" -headers $headers - $releaseData = $body | ConvertFrom-Json - } catch { - $msg = $_.ToString() - throw [InstallFailedException]::new("Failed to download release information from GitHub. This may be due to GitHub rate limiting, which you can work around by providing a GITHUB_TOKEN environment variable or by providing a specific OpenTofu version to install using the -opentofuVersion parameter. (Error: ${msg}; Response body: " + $body + ")") - } - if (!$releaseData.name) - { - throw [InstallFailedException]::new("Failed to parse release information from GitHub. This may be due to GitHub rate limiting, which you can work around by providing a GITHUB_TOKEN environment variable or by providing a specific OpenTofu version to install using the -opentofuVersion parameter. There seems to be no 'name' field in response, which indicates that GitHub sent us an unexpected response. The full response body was: " + $body) - } - $opentofuVersion = $releaseData.name.Substring(1) - logInfo "Latest OpenTofu version is ${opentofuVersion}." - } - - logInfo "Downloading OpenTofu version ${opentofuVersion}..." - - $tempPath = tempdir - if ((Get-CimInstance Win32_operatingsystem).OSArchitecture -eq "64-bit") { - $arch = "amd64" - } else { - $arch = "386" - } - - $zipName = "tofu_${opentofuVersion}_windows_${arch}.zip" - $zipPath = Join-Path $tempPath $zipName - $sigFile = "tofu_${opentofuVersion}_SHA256SUMS.sig" - $sigPath = Join-Path $tempPath $sigFile - $certFile = "tofu_${opentofuVersion}_SHA256SUMS.pem" - $certPath = Join-Path $tempPath $certFile - $gpgSigFile = "tofu_${opentofuVersion}_SHA256SUMS.gpgsig" - $gpgSigPath = Join-Path $tempPath $gpgSigFile - $sumsFile = "tofu_${opentofuVersion}_SHA256SUMS" - $sumsPath = Join-Path $tempPath $sumsFile - $gpgKeyPath = Join-Path $tempPath "opentofu.asc" - - $urlPrefix = "https://github.com/opentofu/opentofu/releases/download/v${opentofuVersion}/" - - $dlFiles = @() - $dlFiles += $zipName - $dlFiles += $sumsFile - if (!$skipVerify) - { - if ($verifyMethod -eq "cosign") - { - $dlFiles += $sigFile - $dlFiles += $certFile - } elseif ($verifyMethod -eq "gpg") { - $dlFiles += $gpgSigFile - } elseif ($verifyMethod -ne "-") { - throw [InstallFailedException]::new("Bug: unsupported verification method: ${verifyMethod}.") - } - } - - try { - logInfo "Downloading $($dlFiles.Length) files..." - for ($i = 0; $i -lt $dlFiles.Length; $i++) { - try - { - $target = Join-Path $tempPath $dlFiles[$i] - $uri = $urlPrefix + $dlFiles[$i] - logInfo "Downloading ${uri} to ${target} ..." - Invoke-WebRequest -outfile "${target}" -uri "${uri}" - } catch { - $msg = $_.ToString() - throw [InstallFailedException]::new("Failed to download OpenTofu ${opentofuVersion} release file ${dlFiles[i]}. (${msg})") - } - logInfo "Download of ${target} complete." - } - - if ($verifyMethod -eq "gpg") - { - logInfo "Fetching OpenTofu GPG key from ${gpgURL}..." - try - { - Invoke-WebRequest -outfile "${gpgKeyPath}" -uri "${gpgURL}" - } - catch - { - $msg = $_.ToString() - throw [InstallFailedException]::new("Failed to download OpenTofu GPG key from ${gpgURL}. (${msg})") - } - logInfo "GPG key download complete." - - logInfo "Dearmoring GPG key..." - & $gpgPath --dearmor ${gpgKeyPath} - if (!$?) { - throw [InstallFailedException]::new("Failed to dearmor GPG file from ${gpgURL}.") - } - $gpgKeyPath = "${gpgKeyPath}.gpg" - - logInfo "Verifying GPG key fingerprint..." - $gpgOutput = (& $gpgPath "--no-default-keyring" "--with-colons" "--show-keys" "--fingerprint" "${gpgKeyPath}" 2>&1) - if (!$?) { - throw [InstallFailedException]::new("Failed to parse GPG file from ${gpgURL}.") - } - if (!$gpgOutput.Contains("fpr:::::::::${gpgKeyID}:")) { - throw [InstallFailedException]::new("The downloaded GPG file from ${gpgURL} does not contain a key with the fingerprint ${gpgKeyID}.") - } - logInfo "Verifying GPG key fingerprint verified." - } - - logInfo "Verifying checksum..." - $expectedHash = $((Get-Content $sumsPath | Select-String -Pattern $zipName) -split '\s+')[0] - $realHash = $(Get-FileHash -Algorithm SHA256 $zipPath).Hash - if ($realHash -ne $expectedHash) { - logWarning "Checksums don't match." - throw [InstallFailedException]::new("Checksum mismatch, expected: ${expectedHash}, got: ${realHash}") - } - logInfo "Checksums match." - - if ($verifyMethod -eq "cosign") - { - if ($cosignIdentity -eq "autodetect") - { - if ($opentofuVersion.Contains("-alpha") -or $opentofuVersion.Contains("-beta")) - { - $cosignIdentity = "https://github.com/opentofu/opentofu/.github/workflows/release.yml@refs/heads/main" - } - else - { - $ver = [version]($opentofuVersion -replace "-rc.*") - $major = $ver.Major - $minor = $ver.Minor - $cosignIdentity = "https://github.com/opentofu/opentofu/.github/workflows/release.yml@refs/heads/v${major}.${minor}" - } - } - - logInfo "Verifying signature against cosign identity ${cosignIdentity}..." - logInfo "Running $cosignPath verify-blob --certificate-identity $cosignIdentity --signature $sigPath --certificate $certPath --certificate-oidc-issuer $cosignOidcIssuer $sumsPath" - & $cosignPath verify-blob --certificate-identity $cosignIdentity --signature $sigPath --certificate $certPath --certificate-oidc-issuer $cosignOidcIssuer $sumsPath - if ($?) - { - logInfo "Signature verified." - } - else - { - throw [InstallFailedException]::new("Failed to verify ${opentofuVersion} with cosign.") - } - } elseif ($verifyMethod -eq "gpg") { - - $env:GPGHOME = ${tempPath} - - logInfo "Importing GPG key..." - $gpgOutput = & $gpgPath --homedir $tempPath --import $gpgKeyPath - if (!$?) { - throw [InstallFailedException]::new("Failed to import the GPG key for OpenTofu. (${gpgOutput})") - } - - logInfo "Trusting GPG key..." - $gpgOutput = & $gpgPath --homedir $tempPath --tofu-policy good $gpgKeyID - if (!$?) { - throw [InstallFailedException]::new("Failed to trust the GPG key for OpenTofu. Possible fingerprint mismatch? (${gpgOutput})") - } - - logInfo "Verifying GPG signature..." - $gpgOutput = & $gpgPath --homedir $tempPath --trust-model tofu --verify $gpgSigPath $sumsPath - if (!$?) { - throw [InstallFailedException]::new("Failed to verify OpenTofu ${opentofuVersion} with GPG. ($?, $LASTEXITCODE, ${gpgOutput})") - } - - logInfo "Signature verified." - } elseif ($verifyMethod -ne "-") { - throw [InstallFailedException]::new("Bug: unsupported verification method: ${verifyMethod}.") - } - - $internalZipFile = Join-Path $tempPath $zipName - - if ($allUsers -and (! - (New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) - ) - { - # Note on this section: we are requesting elevated privileges via UAC. Unfortunately, this is only possible - # by launching the current script again as Administrator. This can cause some weird parsing bugs in - # conjunction with Start-Process and the "powershell" command. (The parameter separation disappears.) - # Also note that when using Start-Process with RunAs, it is not possible to pass environment variables. - # (The documentation is lying!) - # - # TL;DR: Make sure to MANUALLY test privilege elevation if you change this as we can't test UAC in CI! Make - # sure to test with paths containing spaces too! Did I mention to test this? Test it. I'm serious. - - logInfo "Unpacking with elevated privileges..." - $logDir = tempdir - # TODO capture the log output of the shell running as admin and clean up afterwards. - $argList = @("-NonInteractive", "-File", ($scriptCommand | escapePathArgument), "-internalContinue", "-allUsers", "-installMethod", "standalone", "-installPath", ($installPath | escapePathArgument), "-internalZipFile", ($internalZipFile | escapePathArgument)) - if ($skipChangePath) - { - $argList += "-skipChangePath" - } - $subprocess = Start-Process ` - -Verb RunAs ` - -WorkingDirectory (Get-Location) ` - -Wait ` - -Passthru ` - -FilePath 'powershell' ` - -ArgumentList $argList - $subprocess.WaitForExit() - if ($subprocess.ExitCode -ne 0) { - throw [InstallFailedException]::new("Unpack failed. (Exit code ${subprocess.ExitCode})") - } - } - else - { - logInfo "Unpacking with current privileges..." - unpackStandalone - } - logInfo "Unpacking complete." - - $tofuPath = Join-Path $installPath "tofu.exe" - logInfo "OpenTofu is now available at ${tofuPath}." - - if (!$skipChangePath) { - $Env:PATH = "${Env:PATH};$installPath" - } - } finally { - for ($i = 0; $i -le ($dlFiles.Length - 1); $i++) { - $target = Join-Path $tempPath $dlFiles[$i] - try - { - Remove-Item -force -recurse $target - } catch {} - } - } -} - -function escapePathArgument() { - param( - [Parameter(Mandatory=$true, ValueFromPipeline=$true)] - [string] $path - ) - - if ($path -contains '"') { - throw [InvalidArgumentException]::new("Invalid path: ${path}") - } - - return "`"${path}`"" -} - -function usage() { - $scriptName = $scriptCommand.Split("\")[-1].split("/")[-1] - $usageText = @" -${bold}Usage:${normal} ${scriptName} ${magenta}[OPTIONS]${normal} - -${bold}${blue}OPTIONS for all installation methods:${normal} - - ${bold}-help${normal} Print this help. - ${bold}-installMethod ${magenta}METHOD${normal} The installation method to use. (${red}required${normal}) - Must be one of: - ${magenta}standalone${normal} Standalone installation - ${bold}-allUsers${normal} Install for all users with elevated privileges. - ${bold}-skipChangePath${normal} Skip changing the user/system path to include the OpenTofu path. - ${bold}-skipVerify${normal} Skip cosign integrity verification. - (${bold}${red}not recommended${normal}). - ${bold}-debug${normal} Enable debug logging. - -${bold}${blue}OPTIONS for the standalone installation:${normal} - - ${bold}-opentofuVersion ${magenta}VERSION${normal} Installs the specified OpenTofu version. - (${bold}Default:${normal} ${magenta}${defaultOpenTofuVersion}${normal}) - ${bold}-installPath ${magenta}PATH${normal} Installs OpenTofu to the specified path. - (${bold}Default:${normal} ${magenta}${defaultInstallPath}${normal}) - ${bold}-gpgPath ${magenta}PATH${normal} Path to GPG. (${bold}Default:${normal} ${magenta}${defaultGPGPath}${normal}) - ${bold}-gpgURL ${magenta}URL${normal} URL of the GPG key to use (without ASCII-armor) - (${bold}Default:${normal} ${magenta}${defaultGPGURL}${normal}) - ${bold}-gpgKeyID ${magenta}ID${normal} GPG key ID to expect the gpgURL. - (${bold}Default:${normal} ${magenta}${defaultGPGKeyID}${normal}) - ${bold}-cosignPath ${magenta}PATH${normal} Path to cosign. (${bold}Default:${normal} ${magenta}${defaultCosignPath}${normal}) - ${bold}-cosignOidcIssuer ${magenta}ISSUER${normal} OIDC issuer for cosign verification. - (${bold}Default:${normal} ${magenta}${defaultCosignOidcIssuer}${normal}) - ${bold}-cosignIdentity ${magenta}IDENTITY${normal} Cosign certificate identity. - (${bold}Default:${normal} ${magenta}${defaultCosignIdentity}${normal}) - - ${bold}API rate limits:${normal} If you do not specify the OpenTofu version, the script calls the - GitHub API. This API is rate-limited. If you encounter problems, please create a GitHub - token at https://github.com/settings/tokens without any permissions and set the - ${bold}GITHUB_TOKEN${normal} environment variable to increase the rate limit: - - ${bold}`$Env:GITHUB_TOKEN = "gha_..."${normal} - - ${bold}Signature verification:${normal} This installation method uses cosign or GPG - to verify the integrity of the downloaded binaries by default. Please install cosign or gpg - or disable signature verification by specifying ${bold}-skipVerify${normal} to disable it (not recommended). - See https://docs.sigstore.dev/system_config/installation/ for details. - -${bold}${blue}Exit codes:${normal} - - ${bold}${exitCodeOK}${normal} Installation successful. - ${bold}${exitCodeInstallRequirementNotMet}${normal} Your system is missing one or more requirements - for these selected installation method. Please - install the indicated tools to continue. - ${bold}${exitCodeInstallFailed}${normal} The installation failed. - ${bold}${exitCodeInvalidArgument}${normal} Invalid configuration options. - -"@ - Write-Host $usageText -} - -Write-Host "${blue}${bold}OpenTofu Installer${normal}" -Write-Host "" -if ($help) { - usage - exit $exitCodeOK -} -try -{ - Switch ($installMethod) - { - "" { - throw [InvalidArgumentException]::new("Please select an installation method by specifying the -installMethod parameter.") - } - "standalone" { - installStandalone - } - default { - throw [InvalidArgumentException]::new("Invalid value for -installMethod: ${installMethod}") - } - } -} catch [ExitCodeException] { - logError($_.ToString()) - if ($_.Exception.PrintUsage) { - usage - } - exit $_.Exception.ExitCode -} catch { - logError($_.ToString()) - exit $exitCodeInstallFailed -} diff --git a/dist/install-opentofu.sh b/dist/install-opentofu.sh deleted file mode 100755 index 1d875c5..0000000 --- a/dist/install-opentofu.sh +++ /dev/null @@ -1,1345 +0,0 @@ -#!/bin/sh - -# OpenTofu Installer -# -# This script installs OpenTofu via any of the supported methods. - -export TOFU_INSTALL_EXIT_CODE_OK=0 -export TOFU_INSTALL_EXIT_CODE_INSTALL_REQUIREMENTS_NOT_MET=1 -export TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED=2 -export TOFU_INSTALL_EXIT_CODE_INVALID_ARGUMENT=3 - -export TOFU_INSTALL_RETURN_CODE_COMMAND_NOT_FOUND=11 -export TOFU_INSTALL_RETURN_CODE_DOWNLOAD_FAILED=13 - -bold="" -normal="" -red="" -green="" -yellow="" -blue="" -magenta="" -cyan="" -gray="" -if [ -t 1 ]; then - if command -v "tput" >/dev/null 2>&1; then - colors=$(tput colors) - else - colors=2 - fi - - if [ "${colors}" -ge 8 ]; then - bold="$(tput bold)" - normal="$(tput sgr0)" - red="$(tput setaf 1)" - green="$(tput setaf 2)" - yellow="$(tput setaf 3)" - blue="$(tput setaf 4)" - magenta="$(tput setaf 5)" - cyan="$(tput setaf 6)" - gray="$(tput setaf 245)" - fi -fi - -ROOT_METHOD="auto" -INSTALL_METHOD="" -DEFAULT_INSTALL_PATH="/opt/opentofu" -INSTALL_PATH="${DEFAULT_INSTALL_PATH}" -DEFAULT_SYMLINK_PATH="/usr/local/bin" -SYMLINK_PATH="${DEFAULT_SYMLINK_PATH}" -DEFAULT_OPENTOFU_VERSION="latest" -OPENTOFU_VERSION="${DEFAULT_OPENTOFU_VERSION}" -DEFAULT_DEB_GPG_URL="https://get.opentofu.org/opentofu.gpg" -DEB_GPG_URL="${DEFAULT_DEB_GPG_URL}" -DEFAULT_DEB_REPO_GPG_URL="https://packages.opentofu.org/opentofu/tofu/gpgkey" -DEB_REPO_GPG_URL="${DEFAULT_DEB_REPO_GPG_URL}" -DEFAULT_DEB_REPO_URL="https://packages.opentofu.org/opentofu/tofu/any/" -DEB_REPO_URL="${DEFAULT_DEB_REPO_URL}" -DEFAULT_DEB_REPO_SUITE="any" -DEB_REPO_SUITE="${DEFAULT_DEB_REPO_SUITE}" -DEFAULT_DEB_REPO_COMPONENTS="main" -DEB_REPO_COMPONENTS="${DEFAULT_DEB_REPO_COMPONENTS}" -DEFAULT_RPM_REPO_URL="https://packages.opentofu.org/opentofu/tofu/rpm_any/rpm_any/" - -RPM_REPO_URL="${DEFAULT_RPM_REPO_URL}" -DEFAULT_RPM_REPO_GPG_URL="https://packages.opentofu.org/opentofu/tofu/gpgkey" -DEFAULT_RPM_GPG_URL="https://get.opentofu.org/opentofu.asc" -RPM_GPG_URL="${DEFAULT_RPM_GPG_URL}" -RPM_REPO_GPG_URL="${DEFAULT_RPM_REPO_GPG_URL}" -#TODO once the package makes it into stable change this to "-" -DEFAULT_APK_REPO_URL="@testing https://dl-cdn.alpinelinux.org/alpine/edge/testing" -APK_REPO_URL="${DEFAULT_APK_REPO_URL}" -DEFAULT_APK_PACKAGE="opentofu@testing" -APK_PACKAGE="${DEFAULT_APK_PACKAGE}" -DEFAULT_GPG_PATH="gpg" -GPG_PATH="${DEFAULT_GPG_PATH}" -DEFAULT_GPG_URL="https://get.opentofu.org/opentofu.asc" -GPG_URL="https://get.opentofu.org/opentofu.asc" -DEFAULT_GPG_KEY_ID="E3E6E43D84CB852EADB0051D0C0AF313E5FD9F80" -GPG_KEY_ID="${DEFAULT_GPG_KEY_ID}" -DEFAULT_COSIGN_PATH="cosign" -COSIGN_PATH="${DEFAULT_COSIGN_PATH}" -DEFAULT_COSIGN_IDENTITY="autodetect" -COSIGN_IDENTITY="${DEFAULT_COSIGN_IDENTITY}" -DEFAULT_COSIGN_OIDC_ISSUER="https://token.actions.githubusercontent.com" -COSIGN_OIDC_ISSUER="${DEFAULT_COSIGN_OIDC_ISSUER}" -SKIP_VERIFY=0 - -# region ZSH -if [ -n "${ZSH_VERSION}" ]; then - ## Enable POSIX-style word splitting: - setopt SH_WORD_SPLIT >/dev/null 2>&1 -fi -# endregion - -log_success() { - if [ -z "$1" ]; then - return - fi - echo "${green}$1${normal}" 1>&2 -} - -log_warning() { - if [ -z "$1" ]; then - return - fi - echo "${yellow}$1${normal}" 1>&2 -} - -log_info() { - if [ -z "$1" ]; then - return - fi - echo "${cyan}$1${normal}" 1>&2 -} - -log_debug() { - if [ -z "$1" ]; then - return - fi - if [ -z "${LOG_DEBUG}" ]; then - return - fi - echo "${gray}$1${normal}" 1>&2 -} - -log_error() { - if [ -z "$1" ]; then - return - fi - echo "${red}$1${normal}" 1>&2 -} - -# This function checks if the command specified in $1 exists. -command_exists() { - log_debug "Determining if the ${1} command is available..." - if [ -z "$1" ]; then - log_error "Bug: no command supplied to command_exists()" - return "${TOFU_INSTALL_EXIT_CODE_INVALID_ARGUMENT}" - fi - if ! command -v "$1" >/dev/null 2>&1; then - log_debug "The ${1} command is not available." - return "${TOFU_INSTALL_RETURN_CODE_COMMAND_NOT_FOUND}" - fi - log_debug "The ${1} command is available." - return "${TOFU_INSTALL_EXIT_CODE_OK}" -} - -is_root() { - if [ "$(id -u || true)" -eq 0 ]; then - return 0 - fi - return 1 -} - -# This function runs the specified command as root. -as_root() { - # shellcheck disable=SC2145 - log_debug "Running command as root: $*" - case "${ROOT_METHOD}" in - auto) - log_debug "Automatically determining root method..." - if is_root; then - log_debug "We are already root, no user change needed." - "$@" - elif command_exists "sudo"; then - log_debug "Running command using sudo." - sudo "$@" - elif command_exists "su"; then - log_debug "Running command using su." - su root "$@" - else - log_error "Neither su nor sudo is installed, cannot obtain root privileges." - return "${TOFU_INSTALL_RETURN_CODE_COMMAND_NOT_FOUND}" - fi - return $? - ;; - none) - log_debug "Using manual root method 'none'." - "$@" - return $? - ;; - sudo) - log_debug "Using manual root method 'sudo'." - sudo "$@" - return $? - ;; - su) - log_debug "Using manual root method 'su'." - su root "$@" - return $? - ;; - *) - log_error "Bug: invalid root method value: $1" - return "${TOFU_INSTALL_EXIT_CODE_INVALID_ARGUMENT}" - esac -} - -# This function attempts to execute a function as the current user and switches to root if it fails. -maybe_root() { - if ! "$@" >/dev/null 2>&1; then - if ! as_root "$@"; then - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - fi - return "${TOFU_INSTALL_EXIT_CODE_OK}" -} - -# This function verifies if one of the supported download tools is installed and returns with -# $TOFU_INSTALL_EXIT_CODE_INSTALL_REQUIREMENTS_NOT_MET if that is not th ecase. -download_tool_exists() { - log_debug "Determining if a supported download tool is installed..." - if command_exists "wget"; then - log_debug "wget is installed." - return "${TOFU_INSTALL_EXIT_CODE_OK}" - elif command_exists "curl"; then - log_debug "curl is installed." - return "${TOFU_INSTALL_EXIT_CODE_OK}" - else - log_debug "No supported download tool is installed." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_REQUIREMENTS_NOT_MET}" - fi -} - -# This function downloads the URL specified in $1 into the file specified in $2. -# It returns $TOFU_INSTALL_EXIT_CODE_INSTALL_REQUIREMENTS_NOT_MET if no supported download tool is installed, or $TOFU_INSTALL_RETURN_CODE_DOWNLOAD_FAILED -# if the download failed. -download_file() { - if [ -z "$1" ]; then - log_error "Bug: no URL supplied to download_file()" - return "${TOFU_INSTALL_EXIT_CODE_INVALID_ARGUMENT}" - fi - if [ -z "$2" ]; then - log_error "Bug: no destination file supplied to download_file()" - return "${TOFU_INSTALL_EXIT_CODE_INVALID_ARGUMENT}" - fi - log_debug "Downloading URL ${1} to ${2}..." - IS_GITHUB=0 - if [ -n "${GITHUB_TOKEN}" ]; then - if [ "$(echo "$1" | grep -c "api.github.com" || true)" -ne 0 ]; then - IS_GITHUB=1 - fi - fi - if command_exists "wget"; then - if [ "${IS_GITHUB}" -eq 1 ]; then - log_debug "Downloading using wget with GITHUB_TOKEN..." - if ! wget -q --header="Authorization: token ${GITHUB_TOKEN}" -O "$2" "$1"; then - log_debug "Download failed." - return "${TOFU_INSTALL_RETURN_CODE_DOWNLOAD_FAILED}" - fi - else - log_debug "Downloading using wget without GITHUB_TOKEN, this may lead to rate limit issues..." - if ! wget -q -O "$2" "$1"; then - log_debug "Download failed, please try specifying the GITHUB_TOKEN environment variable." - return "${TOFU_INSTALL_RETURN_CODE_DOWNLOAD_FAILED}" - fi - fi - elif command_exists "curl"; then - if [ "${IS_GITHUB}" -eq 1 ]; then - log_debug "Downloading using curl with GITHUB_TOKEN..." - if ! curl --proto '=https' --tlsv1.2 -fsSL -H "Authorization: token ${GITHUB_TOKEN}" -o "$2" "$1"; then - log_debug "Download failed." - return "${TOFU_INSTALL_RETURN_CODE_DOWNLOAD_FAILED}" - fi - else - log_debug "Downloading using curl without GITHUB_TOKEN, this may lead to rate limit issues..." - if ! curl --proto '=https' --tlsv1.2 -fsSL -o "$2" "$1"; then - log_debug "Download failed, please try specifying the GITHUB_TOKEN environment variable." - return "${TOFU_INSTALL_RETURN_CODE_DOWNLOAD_FAILED}" - fi - fi - else - log_error "Neither wget nor curl are available on your system. Please install one of them to proceed." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_REQUIREMENTS_NOT_MET}" - fi - log_debug "Download successful." - return "${TOFU_INSTALL_EXIT_CODE_OK}" -} - -# This function downloads the OpenTofu GPG key from the specified URL to the specified location. Setting the third -# parameter to 1 causes the file to be moved as root. It returns $TOFU_INSTALL_RETURN_CODE_DOWNLOAD_FAILED if the -# download fails, or $TOFU_INSTALL_EXIT_CODE_INSTALL_REQUIREMENTS_NOT_MET if no download tool is available. -download_gpg() { - if [ -z "$1" ]; then - log_error "Bug: no URL passed to download_gpg." - return "${TOFU_INSTALL_EXIT_CODE_INVALID_ARGUMENT}" - fi - if [ -z "$2" ]; then - log_error "Bug: no destination passed to download_gpg." - return "${TOFU_INSTALL_EXIT_CODE_INVALID_ARGUMENT}" - fi - if ! command_exists "gpg"; then - log_error "Missing gpg binary." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_REQUIREMENTS_NOT_MET}" - fi - log_debug "Downloading GPG key from ${1} to ${2}..." - if ! download_tool_exists; then - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_REQUIREMENTS_NOT_MET}" - fi - log_debug "Creating temporary directory..." - TEMPDIR=$(mktemp -d) - if [ -z "${TEMPDIR}" ]; then - log_error "Failed to create temporary directory for GPG download." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - TEMPFILE="${TEMPDIR}/opentofu.gpg" - - if ! download_file "${1}" "${TEMPFILE}"; then - log_debug "Removing temporary directory..." - rm -rf "${TEMPFILE}" - return "${TOFU_INSTALL_RETURN_CODE_DOWNLOAD_FAILED}" - fi - if [ "$(grep 'BEGIN PGP PUBLIC KEY BLOCK' -c "${TEMPFILE}" || true)" -ne 0 ]; then - log_debug "Performing GPG dearmor on ${TEMPFILE}" - if ! gpg --no-tty --batch --dearmor -o "${TEMPFILE}.tmp" <"${TEMPFILE}"; then - log_error "Failed to GPG dearmor ${TEMPFILE}." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - if ! mv "${TEMPFILE}.tmp" "${TEMPFILE}"; then - log_error "Failed to move ${TEMPFILE}.tmp to ${TEMPFILE}." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - fi - if [ "$3" = "1" ]; then - log_debug "Moving GPG file as root..." - if ! as_root mv "${TEMPFILE}" "${2}"; then - log_error "Failed to move ${TEMPFILE} to ${2}." - rm -rf "${TEMPFILE}" - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - else - log_debug "Moving GPG file as the current user..." - if ! mv "${TEMPFILE}" "${2}"; then - log_error "Failed to move ${TEMPFILE} to ${2}." - rm -rf "${TEMPFILE}" - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - fi - - log_debug "Removing temporary directory..." - rm -rf "${TEMPFILE}" - return "${TOFU_INSTALL_EXIT_CODE_OK}" -} - -# This is a helper function that downloads a GPG URL to the specified file. -deb_download_gpg() { - DEB_GPG_URL="${1}" - GPG_FILE="${2}" - if [ -z "${DEB_GPG_URL}" ]; then - log_error "Bug: no GPG URL specified for deb_download_gpg." - return "${TOFU_INSTALL_EXIT_CODE_INVALID_ARGUMENT}" - fi - if [ -z "${GPG_FILE}" ]; then - log_error "Bug: no destination path specified for deb_download_gpg." - return "${TOFU_INSTALL_EXIT_CODE_INVALID_ARGUMENT}" - fi - if ! download_gpg "${DEB_GPG_URL}" "${GPG_FILE}" 1; then - log_error "Failed to download GPG key from ${DEB_GPG_URL}." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - log_debug "Changing ownership and permissions of ${GPG_FILE}..." - if ! as_root chown root:root "${GPG_FILE}"; then - log_error "Failed to chown ${GPG_FILE}." - rm -rf "${GPG_FILE}" - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - if ! as_root chmod a+r "${GPG_FILE}"; then - log_error "Failed to chmod ${GPG_FILE}." - rm -rf "${GPG_FILE}" - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - return "${TOFU_INSTALL_EXIT_CODE_OK}" -} - -# This function installs OpenTofu via a Debian repository. It returns -# $TOFU_INSTALL_EXIT_CODE_INSTALL_REQUIREMENTS_NOT_MET if this is not a Debian system. -install_deb() { - log_info "Attempting installation via Debian repository..." - if ! command_exists apt-get; then - log_info "The apt-get command is not available, skipping Debian repository installation." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_REQUIREMENTS_NOT_MET}" - fi - - if ! is_root; then - log_info "Root privileges are required to install OpenTofu as a Debian package." - log_info "The installer will now verify if it can correctly assume root privileges." - log_info "${bold}You may be asked to enter your password.${normal}" - if ! as_root echo -n ""; then - log_error "Cannot assume root privileges." - log_info "Please set up either '${bold}su${normal}' or '${bold}sudo${normal}'." - log_info "Alternatively, run this script with ${bold}-h${normal} for other installation methods." - fi - fi - - log_info "Updating package list..." - if ! as_root apt-get update; then - log_error "Failed to update apt package list." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - - log_debug "Determining packages to install..." - PACKAGE_LIST="apt-transport-https ca-certificates" - if [ "${SKIP_VERIFY}" -ne "1" ]; then - PACKAGE_LIST="${PACKAGE_LIST} gnupg" - fi - if ! download_tool_exists; then - log_debug "No download tool present, adding curl to the package list..." - PACKAGE_LIST="${PACKAGE_LIST} curl" - fi - - log_info "Installing necessary packages for installation..." - log_debug "Installing ${PACKAGE_LIST}..." - # shellcheck disable=SC2086 - if ! as_root apt-get install -y ${PACKAGE_LIST}; then - log_error "Failed to install requisite packages for Debian repository installation." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - log_debug "Necessary packages installed." - - if [ "${SKIP_VERIFY}" -ne "1" ]; then - log_info "Installing the OpenTofu GPG keys..." - log_debug "Creating /etc/apt/keyrings..." - if ! as_root install -m 0755 -d /etc/apt/keyrings; then - log_error "Failed to create /etc/apt/keyrings." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - log_debug "Created /etc/apt/keyrings." - - PACKAGE_GPG_FILE=/etc/apt/keyrings/opentofu.gpg - log_debug "Downloading the GPG key from ${DEB_GPG_URL}.." - if ! deb_download_gpg "${DEB_GPG_URL}" "${PACKAGE_GPG_FILE}"; then - log_error "Failed to download GPG key from ${DEB_GPG_URL}." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - if [ -n "${DEB_REPO_GPG_URL}" ] && [ "${DEB_REPO_GPG_URL}" != "-" ]; then - log_debug "Downloading the repo GPG key from ${DEB_REPO_GPG_URL}.." - REPO_GPG_FILE=/etc/apt/keyrings/opentofu-repo.gpg - if ! deb_download_gpg "${DEB_REPO_GPG_URL}" "${REPO_GPG_FILE}" 1; then - log_error "Failed to download GPG key from ${DEB_REPO_GPG_URL}." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - fi - fi - - log_info "Creating OpenTofu sources list..." - if [ "${SKIP_VERIFY}" -ne "1" ]; then - if [ -n "${REPO_GPG_FILE}" ]; then - if ! as_root tee /etc/apt/sources.list.d/opentofu.list; then - log_error "Failed to create /etc/apt/sources.list.d/opentofu.list." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi < /dev/null; then - log_error "Failed to run tofu after installation." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - return "${TOFU_INSTALL_EXIT_CODE_OK}" -} - -# This function installs OpenTofu via the zypper command line utility. It returns -# $TOFU_INSTALL_EXIT_CODE_INSTALL_REQUIREMENTS_NOT_MET if zypper is not available. -install_zypper() { - if ! command_exists "zypper"; then - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_REQUIREMENTS_NOT_MET}" - fi - log_info "Installing OpenTofu using zypper..." - if [ "${SKIP_VERIFY}" -ne "1" ]; then - GPGCHECK=1 - FINAL_GPG_URL="${RPM_GPG_URL}" - if [ "${RPM_REPO_GPG_URL}" != "-" ]; then - FINAL_GPG_URL=$(cat <&1 | grep "Primary key fingerprint: " | sed -e 's/^Primary key fingerprint: //' -e 's/ //g') - if [ "${FINGERPRINT}" != "${GPG_KEY_ID}" ]; then - log_error "The release is signed with the incorrect key: ${FINGERPRINT}." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - log_info "Signature verified." - elif [ "${VERIFY_METHOD}" != "-" ]; then - log_error "Bug: unsupported verification method: ${VERIFY_METHOD}" - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - - log_info "Unpacking OpenTofu..." - if ! unzip -d "${ZIPDIR}" "${TEMPDIR}/${ZIPFILE}"; then - log_error "Failed to unzip ${TEMPDIR}/${ZIPFILE} to /" - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - - log_info "Moving OpenTofu installation to ${INSTALL_PATH}..." - if ! maybe_root mkdir -p "${INSTALL_PATH}"; then - log_error "Cannot create installation path at ${INSTALL_PATH}." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - - if ! maybe_root mv "${ZIPDIR}"/* "${INSTALL_PATH}" >/dev/null 2>&1; then - log_error "Cannot move ${ZIPDIR} contents to ${INSTALL_PATH}. Please check the permissions on the target directory." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - - if [ "${SYMLINK_PATH}" != "-" ]; then - log_info "Creating tofu symlink at ${SYMLINK_PATH}/tofu..." - if ! maybe_root ln -sf "${INSTALL_PATH}/tofu" "${SYMLINK_PATH}/tofu"; then - log_error "Failed to create symlink at ${INSTALL_PATH}/tofu." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - fi - log_info "Checking if OpenTofu is installed correctly..." - if [ "${SYMLINK_PATH}" != "-" ]; then - if ! "${SYMLINK_PATH}/tofu" --version; then - log_error "Failed to run ${SYMLINK_PATH}/tofu after installation." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - else - if ! "${INSTALL_PATH}/tofu" --version; then - log_error "Failed to run ${INSTALL_PATH}/tofu after installation." - return "${TOFU_INSTALL_EXIT_CODE_INSTALL_FAILED}" - fi - fi - log_success "Installation complete." - return "${TOFU_INSTALL_EXIT_CODE_OK}" -} - -usage() { - if [ -n "$1" ]; then - log_error "Error: $1" - fi - cat < - - - OpenTofu 1.6.0-alpha1 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.6.0-alpha2/index.html b/dist/tofu/1.6.0-alpha2/index.html deleted file mode 100644 index 4288c06..0000000 --- a/dist/tofu/1.6.0-alpha2/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - OpenTofu 1.6.0-alpha2 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.6.0-alpha3/index.html b/dist/tofu/1.6.0-alpha3/index.html deleted file mode 100644 index ed3fd5d..0000000 --- a/dist/tofu/1.6.0-alpha3/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - OpenTofu 1.6.0-alpha3 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.6.0-alpha4/index.html b/dist/tofu/1.6.0-alpha4/index.html deleted file mode 100644 index 3b55daa..0000000 --- a/dist/tofu/1.6.0-alpha4/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - OpenTofu 1.6.0-alpha4 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.6.0-alpha5/index.html b/dist/tofu/1.6.0-alpha5/index.html deleted file mode 100644 index da1656a..0000000 --- a/dist/tofu/1.6.0-alpha5/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - OpenTofu 1.6.0-alpha5 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.6.0-beta1/index.html b/dist/tofu/1.6.0-beta1/index.html deleted file mode 100644 index 0072aca..0000000 --- a/dist/tofu/1.6.0-beta1/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - OpenTofu 1.6.0-beta1 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.6.0-beta2/index.html b/dist/tofu/1.6.0-beta2/index.html deleted file mode 100644 index e5c5fad..0000000 --- a/dist/tofu/1.6.0-beta2/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - OpenTofu 1.6.0-beta2 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.6.0-beta3/index.html b/dist/tofu/1.6.0-beta3/index.html deleted file mode 100644 index c9bf3e4..0000000 --- a/dist/tofu/1.6.0-beta3/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - OpenTofu 1.6.0-beta3 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.6.0-beta4/index.html b/dist/tofu/1.6.0-beta4/index.html deleted file mode 100644 index fd1f6ff..0000000 --- a/dist/tofu/1.6.0-beta4/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - OpenTofu 1.6.0-beta4 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.6.0-beta5/index.html b/dist/tofu/1.6.0-beta5/index.html deleted file mode 100644 index ca309f5..0000000 --- a/dist/tofu/1.6.0-beta5/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - OpenTofu 1.6.0-beta5 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.6.0-rc1/index.html b/dist/tofu/1.6.0-rc1/index.html deleted file mode 100644 index 2e57197..0000000 --- a/dist/tofu/1.6.0-rc1/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - OpenTofu 1.6.0-rc1 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.6.0/index.html b/dist/tofu/1.6.0/index.html deleted file mode 100644 index abcde7b..0000000 --- a/dist/tofu/1.6.0/index.html +++ /dev/null @@ -1,336 +0,0 @@ - - - - OpenTofu 1.6.0 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.6.1/index.html b/dist/tofu/1.6.1/index.html deleted file mode 100644 index 8a62f07..0000000 --- a/dist/tofu/1.6.1/index.html +++ /dev/null @@ -1,336 +0,0 @@ - - - - OpenTofu 1.6.1 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.6.2/index.html b/dist/tofu/1.6.2/index.html deleted file mode 100644 index c395992..0000000 --- a/dist/tofu/1.6.2/index.html +++ /dev/null @@ -1,336 +0,0 @@ - - - - OpenTofu 1.6.2 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.7.0-alpha1/index.html b/dist/tofu/1.7.0-alpha1/index.html deleted file mode 100644 index 2994533..0000000 --- a/dist/tofu/1.7.0-alpha1/index.html +++ /dev/null @@ -1,504 +0,0 @@ - - - - OpenTofu 1.7.0-alpha1 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.7.0-beta1/index.html b/dist/tofu/1.7.0-beta1/index.html deleted file mode 100644 index eaf5001..0000000 --- a/dist/tofu/1.7.0-beta1/index.html +++ /dev/null @@ -1,504 +0,0 @@ - - - - OpenTofu 1.7.0-beta1 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.7.0-rc1/index.html b/dist/tofu/1.7.0-rc1/index.html deleted file mode 100644 index 6e84595..0000000 --- a/dist/tofu/1.7.0-rc1/index.html +++ /dev/null @@ -1,504 +0,0 @@ - - - - OpenTofu 1.7.0-rc1 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.7.0/index.html b/dist/tofu/1.7.0/index.html deleted file mode 100644 index f10888e..0000000 --- a/dist/tofu/1.7.0/index.html +++ /dev/null @@ -1,504 +0,0 @@ - - - - OpenTofu 1.7.0 - - - - - \ No newline at end of file diff --git a/dist/tofu/1.7.1/index.html b/dist/tofu/1.7.1/index.html deleted file mode 100644 index 7f833f7..0000000 --- a/dist/tofu/1.7.1/index.html +++ /dev/null @@ -1,504 +0,0 @@ - - - - OpenTofu 1.7.1 - - - - - \ No newline at end of file diff --git a/dist/tofu/api.json b/dist/tofu/api.json deleted file mode 100644 index 4f19d54..0000000 --- a/dist/tofu/api.json +++ /dev/null @@ -1 +0,0 @@ -{"versions":[{"id":"1.7.1","files":["tofu_1.7.1_386.apk","tofu_1.7.1_386.apk.gpgsig","tofu_1.7.1_386.apk.pem","tofu_1.7.1_386.apk.sig","tofu_1.7.1_386.deb","tofu_1.7.1_386.deb.gpgsig","tofu_1.7.1_386.deb.pem","tofu_1.7.1_386.deb.sig","tofu_1.7.1_386.rpm","tofu_1.7.1_386.rpm.gpgsig","tofu_1.7.1_386.rpm.pem","tofu_1.7.1_386.rpm.sig","tofu_1.7.1_amd64.apk","tofu_1.7.1_amd64.apk.gpgsig","tofu_1.7.1_amd64.apk.pem","tofu_1.7.1_amd64.apk.sig","tofu_1.7.1_amd64.deb","tofu_1.7.1_amd64.deb.gpgsig","tofu_1.7.1_amd64.deb.pem","tofu_1.7.1_amd64.deb.sig","tofu_1.7.1_amd64.rpm","tofu_1.7.1_amd64.rpm.gpgsig","tofu_1.7.1_amd64.rpm.pem","tofu_1.7.1_amd64.rpm.sig","tofu_1.7.1_arm.apk","tofu_1.7.1_arm.apk.gpgsig","tofu_1.7.1_arm.apk.pem","tofu_1.7.1_arm.apk.sig","tofu_1.7.1_arm.deb","tofu_1.7.1_arm.deb.gpgsig","tofu_1.7.1_arm.deb.pem","tofu_1.7.1_arm.deb.sig","tofu_1.7.1_arm.rpm","tofu_1.7.1_arm.rpm.gpgsig","tofu_1.7.1_arm.rpm.pem","tofu_1.7.1_arm.rpm.sig","tofu_1.7.1_arm64.apk","tofu_1.7.1_arm64.apk.gpgsig","tofu_1.7.1_arm64.apk.pem","tofu_1.7.1_arm64.apk.sig","tofu_1.7.1_arm64.deb","tofu_1.7.1_arm64.deb.gpgsig","tofu_1.7.1_arm64.deb.pem","tofu_1.7.1_arm64.deb.sig","tofu_1.7.1_arm64.rpm","tofu_1.7.1_arm64.rpm.gpgsig","tofu_1.7.1_arm64.rpm.pem","tofu_1.7.1_arm64.rpm.sig","tofu_1.7.1_darwin_amd64.tar.gz","tofu_1.7.1_darwin_amd64.tar.gz.gpgsig","tofu_1.7.1_darwin_amd64.tar.gz.pem","tofu_1.7.1_darwin_amd64.tar.gz.sig","tofu_1.7.1_darwin_amd64.zip","tofu_1.7.1_darwin_amd64.zip.gpgsig","tofu_1.7.1_darwin_amd64.zip.pem","tofu_1.7.1_darwin_amd64.zip.sig","tofu_1.7.1_darwin_arm64.tar.gz","tofu_1.7.1_darwin_arm64.tar.gz.gpgsig","tofu_1.7.1_darwin_arm64.tar.gz.pem","tofu_1.7.1_darwin_arm64.tar.gz.sig","tofu_1.7.1_darwin_arm64.zip","tofu_1.7.1_darwin_arm64.zip.gpgsig","tofu_1.7.1_darwin_arm64.zip.pem","tofu_1.7.1_darwin_arm64.zip.sig","tofu_1.7.1_freebsd_386.tar.gz","tofu_1.7.1_freebsd_386.tar.gz.gpgsig","tofu_1.7.1_freebsd_386.tar.gz.pem","tofu_1.7.1_freebsd_386.tar.gz.sig","tofu_1.7.1_freebsd_386.zip","tofu_1.7.1_freebsd_386.zip.gpgsig","tofu_1.7.1_freebsd_386.zip.pem","tofu_1.7.1_freebsd_386.zip.sig","tofu_1.7.1_freebsd_amd64.tar.gz","tofu_1.7.1_freebsd_amd64.tar.gz.gpgsig","tofu_1.7.1_freebsd_amd64.tar.gz.pem","tofu_1.7.1_freebsd_amd64.tar.gz.sig","tofu_1.7.1_freebsd_amd64.zip","tofu_1.7.1_freebsd_amd64.zip.gpgsig","tofu_1.7.1_freebsd_amd64.zip.pem","tofu_1.7.1_freebsd_amd64.zip.sig","tofu_1.7.1_freebsd_arm.tar.gz","tofu_1.7.1_freebsd_arm.tar.gz.gpgsig","tofu_1.7.1_freebsd_arm.tar.gz.pem","tofu_1.7.1_freebsd_arm.tar.gz.sig","tofu_1.7.1_freebsd_arm.zip","tofu_1.7.1_freebsd_arm.zip.gpgsig","tofu_1.7.1_freebsd_arm.zip.pem","tofu_1.7.1_freebsd_arm.zip.sig","tofu_1.7.1_linux_386.tar.gz","tofu_1.7.1_linux_386.tar.gz.gpgsig","tofu_1.7.1_linux_386.tar.gz.pem","tofu_1.7.1_linux_386.tar.gz.sig","tofu_1.7.1_linux_386.zip","tofu_1.7.1_linux_386.zip.gpgsig","tofu_1.7.1_linux_386.zip.pem","tofu_1.7.1_linux_386.zip.sig","tofu_1.7.1_linux_amd64.tar.gz","tofu_1.7.1_linux_amd64.tar.gz.gpgsig","tofu_1.7.1_linux_amd64.tar.gz.pem","tofu_1.7.1_linux_amd64.tar.gz.sig","tofu_1.7.1_linux_amd64.zip","tofu_1.7.1_linux_amd64.zip.gpgsig","tofu_1.7.1_linux_amd64.zip.pem","tofu_1.7.1_linux_amd64.zip.sig","tofu_1.7.1_linux_arm.tar.gz","tofu_1.7.1_linux_arm.tar.gz.gpgsig","tofu_1.7.1_linux_arm.tar.gz.pem","tofu_1.7.1_linux_arm.tar.gz.sig","tofu_1.7.1_linux_arm.zip","tofu_1.7.1_linux_arm.zip.gpgsig","tofu_1.7.1_linux_arm.zip.pem","tofu_1.7.1_linux_arm.zip.sig","tofu_1.7.1_linux_arm64.tar.gz","tofu_1.7.1_linux_arm64.tar.gz.gpgsig","tofu_1.7.1_linux_arm64.tar.gz.pem","tofu_1.7.1_linux_arm64.tar.gz.sig","tofu_1.7.1_linux_arm64.zip","tofu_1.7.1_linux_arm64.zip.gpgsig","tofu_1.7.1_linux_arm64.zip.pem","tofu_1.7.1_linux_arm64.zip.sig","tofu_1.7.1_openbsd_386.tar.gz","tofu_1.7.1_openbsd_386.tar.gz.gpgsig","tofu_1.7.1_openbsd_386.tar.gz.pem","tofu_1.7.1_openbsd_386.tar.gz.sig","tofu_1.7.1_openbsd_386.zip","tofu_1.7.1_openbsd_386.zip.gpgsig","tofu_1.7.1_openbsd_386.zip.pem","tofu_1.7.1_openbsd_386.zip.sig","tofu_1.7.1_openbsd_amd64.tar.gz","tofu_1.7.1_openbsd_amd64.tar.gz.gpgsig","tofu_1.7.1_openbsd_amd64.tar.gz.pem","tofu_1.7.1_openbsd_amd64.tar.gz.sig","tofu_1.7.1_openbsd_amd64.zip","tofu_1.7.1_openbsd_amd64.zip.gpgsig","tofu_1.7.1_openbsd_amd64.zip.pem","tofu_1.7.1_openbsd_amd64.zip.sig","tofu_1.7.1_SHA256SUMS","tofu_1.7.1_SHA256SUMS.gpgsig","tofu_1.7.1_SHA256SUMS.pem","tofu_1.7.1_SHA256SUMS.sig","tofu_1.7.1_solaris_amd64.tar.gz","tofu_1.7.1_solaris_amd64.tar.gz.gpgsig","tofu_1.7.1_solaris_amd64.tar.gz.pem","tofu_1.7.1_solaris_amd64.tar.gz.sig","tofu_1.7.1_solaris_amd64.zip","tofu_1.7.1_solaris_amd64.zip.gpgsig","tofu_1.7.1_solaris_amd64.zip.pem","tofu_1.7.1_solaris_amd64.zip.sig","tofu_1.7.1_windows_386.tar.gz","tofu_1.7.1_windows_386.tar.gz.gpgsig","tofu_1.7.1_windows_386.tar.gz.pem","tofu_1.7.1_windows_386.tar.gz.sig","tofu_1.7.1_windows_386.zip","tofu_1.7.1_windows_386.zip.gpgsig","tofu_1.7.1_windows_386.zip.pem","tofu_1.7.1_windows_386.zip.sig","tofu_1.7.1_windows_amd64.tar.gz","tofu_1.7.1_windows_amd64.tar.gz.gpgsig","tofu_1.7.1_windows_amd64.tar.gz.pem","tofu_1.7.1_windows_amd64.tar.gz.sig","tofu_1.7.1_windows_amd64.zip","tofu_1.7.1_windows_amd64.zip.gpgsig","tofu_1.7.1_windows_amd64.zip.pem","tofu_1.7.1_windows_amd64.zip.sig"]},{"id":"1.7.0","files":["tofu_1.7.0_386.apk","tofu_1.7.0_386.apk.gpgsig","tofu_1.7.0_386.apk.pem","tofu_1.7.0_386.apk.sig","tofu_1.7.0_386.deb","tofu_1.7.0_386.deb.gpgsig","tofu_1.7.0_386.deb.pem","tofu_1.7.0_386.deb.sig","tofu_1.7.0_386.rpm","tofu_1.7.0_386.rpm.gpgsig","tofu_1.7.0_386.rpm.pem","tofu_1.7.0_386.rpm.sig","tofu_1.7.0_amd64.apk","tofu_1.7.0_amd64.apk.gpgsig","tofu_1.7.0_amd64.apk.pem","tofu_1.7.0_amd64.apk.sig","tofu_1.7.0_amd64.deb","tofu_1.7.0_amd64.deb.gpgsig","tofu_1.7.0_amd64.deb.pem","tofu_1.7.0_amd64.deb.sig","tofu_1.7.0_amd64.rpm","tofu_1.7.0_amd64.rpm.gpgsig","tofu_1.7.0_amd64.rpm.pem","tofu_1.7.0_amd64.rpm.sig","tofu_1.7.0_arm.apk","tofu_1.7.0_arm.apk.gpgsig","tofu_1.7.0_arm.apk.pem","tofu_1.7.0_arm.apk.sig","tofu_1.7.0_arm.deb","tofu_1.7.0_arm.deb.gpgsig","tofu_1.7.0_arm.deb.pem","tofu_1.7.0_arm.deb.sig","tofu_1.7.0_arm.rpm","tofu_1.7.0_arm.rpm.gpgsig","tofu_1.7.0_arm.rpm.pem","tofu_1.7.0_arm.rpm.sig","tofu_1.7.0_arm64.apk","tofu_1.7.0_arm64.apk.gpgsig","tofu_1.7.0_arm64.apk.pem","tofu_1.7.0_arm64.apk.sig","tofu_1.7.0_arm64.deb","tofu_1.7.0_arm64.deb.gpgsig","tofu_1.7.0_arm64.deb.pem","tofu_1.7.0_arm64.deb.sig","tofu_1.7.0_arm64.rpm","tofu_1.7.0_arm64.rpm.gpgsig","tofu_1.7.0_arm64.rpm.pem","tofu_1.7.0_arm64.rpm.sig","tofu_1.7.0_darwin_amd64.tar.gz","tofu_1.7.0_darwin_amd64.tar.gz.gpgsig","tofu_1.7.0_darwin_amd64.tar.gz.pem","tofu_1.7.0_darwin_amd64.tar.gz.sig","tofu_1.7.0_darwin_amd64.zip","tofu_1.7.0_darwin_amd64.zip.gpgsig","tofu_1.7.0_darwin_amd64.zip.pem","tofu_1.7.0_darwin_amd64.zip.sig","tofu_1.7.0_darwin_arm64.tar.gz","tofu_1.7.0_darwin_arm64.tar.gz.gpgsig","tofu_1.7.0_darwin_arm64.tar.gz.pem","tofu_1.7.0_darwin_arm64.tar.gz.sig","tofu_1.7.0_darwin_arm64.zip","tofu_1.7.0_darwin_arm64.zip.gpgsig","tofu_1.7.0_darwin_arm64.zip.pem","tofu_1.7.0_darwin_arm64.zip.sig","tofu_1.7.0_freebsd_386.tar.gz","tofu_1.7.0_freebsd_386.tar.gz.gpgsig","tofu_1.7.0_freebsd_386.tar.gz.pem","tofu_1.7.0_freebsd_386.tar.gz.sig","tofu_1.7.0_freebsd_386.zip","tofu_1.7.0_freebsd_386.zip.gpgsig","tofu_1.7.0_freebsd_386.zip.pem","tofu_1.7.0_freebsd_386.zip.sig","tofu_1.7.0_freebsd_amd64.tar.gz","tofu_1.7.0_freebsd_amd64.tar.gz.gpgsig","tofu_1.7.0_freebsd_amd64.tar.gz.pem","tofu_1.7.0_freebsd_amd64.tar.gz.sig","tofu_1.7.0_freebsd_amd64.zip","tofu_1.7.0_freebsd_amd64.zip.gpgsig","tofu_1.7.0_freebsd_amd64.zip.pem","tofu_1.7.0_freebsd_amd64.zip.sig","tofu_1.7.0_freebsd_arm.tar.gz","tofu_1.7.0_freebsd_arm.tar.gz.gpgsig","tofu_1.7.0_freebsd_arm.tar.gz.pem","tofu_1.7.0_freebsd_arm.tar.gz.sig","tofu_1.7.0_freebsd_arm.zip","tofu_1.7.0_freebsd_arm.zip.gpgsig","tofu_1.7.0_freebsd_arm.zip.pem","tofu_1.7.0_freebsd_arm.zip.sig","tofu_1.7.0_linux_386.tar.gz","tofu_1.7.0_linux_386.tar.gz.gpgsig","tofu_1.7.0_linux_386.tar.gz.pem","tofu_1.7.0_linux_386.tar.gz.sig","tofu_1.7.0_linux_386.zip","tofu_1.7.0_linux_386.zip.gpgsig","tofu_1.7.0_linux_386.zip.pem","tofu_1.7.0_linux_386.zip.sig","tofu_1.7.0_linux_amd64.tar.gz","tofu_1.7.0_linux_amd64.tar.gz.gpgsig","tofu_1.7.0_linux_amd64.tar.gz.pem","tofu_1.7.0_linux_amd64.tar.gz.sig","tofu_1.7.0_linux_amd64.zip","tofu_1.7.0_linux_amd64.zip.gpgsig","tofu_1.7.0_linux_amd64.zip.pem","tofu_1.7.0_linux_amd64.zip.sig","tofu_1.7.0_linux_arm.tar.gz","tofu_1.7.0_linux_arm.tar.gz.gpgsig","tofu_1.7.0_linux_arm.tar.gz.pem","tofu_1.7.0_linux_arm.tar.gz.sig","tofu_1.7.0_linux_arm.zip","tofu_1.7.0_linux_arm.zip.gpgsig","tofu_1.7.0_linux_arm.zip.pem","tofu_1.7.0_linux_arm.zip.sig","tofu_1.7.0_linux_arm64.tar.gz","tofu_1.7.0_linux_arm64.tar.gz.gpgsig","tofu_1.7.0_linux_arm64.tar.gz.pem","tofu_1.7.0_linux_arm64.tar.gz.sig","tofu_1.7.0_linux_arm64.zip","tofu_1.7.0_linux_arm64.zip.gpgsig","tofu_1.7.0_linux_arm64.zip.pem","tofu_1.7.0_linux_arm64.zip.sig","tofu_1.7.0_openbsd_386.tar.gz","tofu_1.7.0_openbsd_386.tar.gz.gpgsig","tofu_1.7.0_openbsd_386.tar.gz.pem","tofu_1.7.0_openbsd_386.tar.gz.sig","tofu_1.7.0_openbsd_386.zip","tofu_1.7.0_openbsd_386.zip.gpgsig","tofu_1.7.0_openbsd_386.zip.pem","tofu_1.7.0_openbsd_386.zip.sig","tofu_1.7.0_openbsd_amd64.tar.gz","tofu_1.7.0_openbsd_amd64.tar.gz.gpgsig","tofu_1.7.0_openbsd_amd64.tar.gz.pem","tofu_1.7.0_openbsd_amd64.tar.gz.sig","tofu_1.7.0_openbsd_amd64.zip","tofu_1.7.0_openbsd_amd64.zip.gpgsig","tofu_1.7.0_openbsd_amd64.zip.pem","tofu_1.7.0_openbsd_amd64.zip.sig","tofu_1.7.0_SHA256SUMS","tofu_1.7.0_SHA256SUMS.gpgsig","tofu_1.7.0_SHA256SUMS.pem","tofu_1.7.0_SHA256SUMS.sig","tofu_1.7.0_solaris_amd64.tar.gz","tofu_1.7.0_solaris_amd64.tar.gz.gpgsig","tofu_1.7.0_solaris_amd64.tar.gz.pem","tofu_1.7.0_solaris_amd64.tar.gz.sig","tofu_1.7.0_solaris_amd64.zip","tofu_1.7.0_solaris_amd64.zip.gpgsig","tofu_1.7.0_solaris_amd64.zip.pem","tofu_1.7.0_solaris_amd64.zip.sig","tofu_1.7.0_windows_386.tar.gz","tofu_1.7.0_windows_386.tar.gz.gpgsig","tofu_1.7.0_windows_386.tar.gz.pem","tofu_1.7.0_windows_386.tar.gz.sig","tofu_1.7.0_windows_386.zip","tofu_1.7.0_windows_386.zip.gpgsig","tofu_1.7.0_windows_386.zip.pem","tofu_1.7.0_windows_386.zip.sig","tofu_1.7.0_windows_amd64.tar.gz","tofu_1.7.0_windows_amd64.tar.gz.gpgsig","tofu_1.7.0_windows_amd64.tar.gz.pem","tofu_1.7.0_windows_amd64.tar.gz.sig","tofu_1.7.0_windows_amd64.zip","tofu_1.7.0_windows_amd64.zip.gpgsig","tofu_1.7.0_windows_amd64.zip.pem","tofu_1.7.0_windows_amd64.zip.sig"]},{"id":"1.7.0-rc1","files":["tofu_1.7.0-rc1_386.apk","tofu_1.7.0-rc1_386.apk.gpgsig","tofu_1.7.0-rc1_386.apk.pem","tofu_1.7.0-rc1_386.apk.sig","tofu_1.7.0-rc1_386.deb","tofu_1.7.0-rc1_386.deb.gpgsig","tofu_1.7.0-rc1_386.deb.pem","tofu_1.7.0-rc1_386.deb.sig","tofu_1.7.0-rc1_386.rpm","tofu_1.7.0-rc1_386.rpm.gpgsig","tofu_1.7.0-rc1_386.rpm.pem","tofu_1.7.0-rc1_386.rpm.sig","tofu_1.7.0-rc1_amd64.apk","tofu_1.7.0-rc1_amd64.apk.gpgsig","tofu_1.7.0-rc1_amd64.apk.pem","tofu_1.7.0-rc1_amd64.apk.sig","tofu_1.7.0-rc1_amd64.deb","tofu_1.7.0-rc1_amd64.deb.gpgsig","tofu_1.7.0-rc1_amd64.deb.pem","tofu_1.7.0-rc1_amd64.deb.sig","tofu_1.7.0-rc1_amd64.rpm","tofu_1.7.0-rc1_amd64.rpm.gpgsig","tofu_1.7.0-rc1_amd64.rpm.pem","tofu_1.7.0-rc1_amd64.rpm.sig","tofu_1.7.0-rc1_arm.apk","tofu_1.7.0-rc1_arm.apk.gpgsig","tofu_1.7.0-rc1_arm.apk.pem","tofu_1.7.0-rc1_arm.apk.sig","tofu_1.7.0-rc1_arm.deb","tofu_1.7.0-rc1_arm.deb.gpgsig","tofu_1.7.0-rc1_arm.deb.pem","tofu_1.7.0-rc1_arm.deb.sig","tofu_1.7.0-rc1_arm.rpm","tofu_1.7.0-rc1_arm.rpm.gpgsig","tofu_1.7.0-rc1_arm.rpm.pem","tofu_1.7.0-rc1_arm.rpm.sig","tofu_1.7.0-rc1_arm64.apk","tofu_1.7.0-rc1_arm64.apk.gpgsig","tofu_1.7.0-rc1_arm64.apk.pem","tofu_1.7.0-rc1_arm64.apk.sig","tofu_1.7.0-rc1_arm64.deb","tofu_1.7.0-rc1_arm64.deb.gpgsig","tofu_1.7.0-rc1_arm64.deb.pem","tofu_1.7.0-rc1_arm64.deb.sig","tofu_1.7.0-rc1_arm64.rpm","tofu_1.7.0-rc1_arm64.rpm.gpgsig","tofu_1.7.0-rc1_arm64.rpm.pem","tofu_1.7.0-rc1_arm64.rpm.sig","tofu_1.7.0-rc1_darwin_amd64.tar.gz","tofu_1.7.0-rc1_darwin_amd64.tar.gz.gpgsig","tofu_1.7.0-rc1_darwin_amd64.tar.gz.pem","tofu_1.7.0-rc1_darwin_amd64.tar.gz.sig","tofu_1.7.0-rc1_darwin_amd64.zip","tofu_1.7.0-rc1_darwin_amd64.zip.gpgsig","tofu_1.7.0-rc1_darwin_amd64.zip.pem","tofu_1.7.0-rc1_darwin_amd64.zip.sig","tofu_1.7.0-rc1_darwin_arm64.tar.gz","tofu_1.7.0-rc1_darwin_arm64.tar.gz.gpgsig","tofu_1.7.0-rc1_darwin_arm64.tar.gz.pem","tofu_1.7.0-rc1_darwin_arm64.tar.gz.sig","tofu_1.7.0-rc1_darwin_arm64.zip","tofu_1.7.0-rc1_darwin_arm64.zip.gpgsig","tofu_1.7.0-rc1_darwin_arm64.zip.pem","tofu_1.7.0-rc1_darwin_arm64.zip.sig","tofu_1.7.0-rc1_freebsd_386.tar.gz","tofu_1.7.0-rc1_freebsd_386.tar.gz.gpgsig","tofu_1.7.0-rc1_freebsd_386.tar.gz.pem","tofu_1.7.0-rc1_freebsd_386.tar.gz.sig","tofu_1.7.0-rc1_freebsd_386.zip","tofu_1.7.0-rc1_freebsd_386.zip.gpgsig","tofu_1.7.0-rc1_freebsd_386.zip.pem","tofu_1.7.0-rc1_freebsd_386.zip.sig","tofu_1.7.0-rc1_freebsd_amd64.tar.gz","tofu_1.7.0-rc1_freebsd_amd64.tar.gz.gpgsig","tofu_1.7.0-rc1_freebsd_amd64.tar.gz.pem","tofu_1.7.0-rc1_freebsd_amd64.tar.gz.sig","tofu_1.7.0-rc1_freebsd_amd64.zip","tofu_1.7.0-rc1_freebsd_amd64.zip.gpgsig","tofu_1.7.0-rc1_freebsd_amd64.zip.pem","tofu_1.7.0-rc1_freebsd_amd64.zip.sig","tofu_1.7.0-rc1_freebsd_arm.tar.gz","tofu_1.7.0-rc1_freebsd_arm.tar.gz.gpgsig","tofu_1.7.0-rc1_freebsd_arm.tar.gz.pem","tofu_1.7.0-rc1_freebsd_arm.tar.gz.sig","tofu_1.7.0-rc1_freebsd_arm.zip","tofu_1.7.0-rc1_freebsd_arm.zip.gpgsig","tofu_1.7.0-rc1_freebsd_arm.zip.pem","tofu_1.7.0-rc1_freebsd_arm.zip.sig","tofu_1.7.0-rc1_linux_386.tar.gz","tofu_1.7.0-rc1_linux_386.tar.gz.gpgsig","tofu_1.7.0-rc1_linux_386.tar.gz.pem","tofu_1.7.0-rc1_linux_386.tar.gz.sig","tofu_1.7.0-rc1_linux_386.zip","tofu_1.7.0-rc1_linux_386.zip.gpgsig","tofu_1.7.0-rc1_linux_386.zip.pem","tofu_1.7.0-rc1_linux_386.zip.sig","tofu_1.7.0-rc1_linux_amd64.tar.gz","tofu_1.7.0-rc1_linux_amd64.tar.gz.gpgsig","tofu_1.7.0-rc1_linux_amd64.tar.gz.pem","tofu_1.7.0-rc1_linux_amd64.tar.gz.sig","tofu_1.7.0-rc1_linux_amd64.zip","tofu_1.7.0-rc1_linux_amd64.zip.gpgsig","tofu_1.7.0-rc1_linux_amd64.zip.pem","tofu_1.7.0-rc1_linux_amd64.zip.sig","tofu_1.7.0-rc1_linux_arm.tar.gz","tofu_1.7.0-rc1_linux_arm.tar.gz.gpgsig","tofu_1.7.0-rc1_linux_arm.tar.gz.pem","tofu_1.7.0-rc1_linux_arm.tar.gz.sig","tofu_1.7.0-rc1_linux_arm.zip","tofu_1.7.0-rc1_linux_arm.zip.gpgsig","tofu_1.7.0-rc1_linux_arm.zip.pem","tofu_1.7.0-rc1_linux_arm.zip.sig","tofu_1.7.0-rc1_linux_arm64.tar.gz","tofu_1.7.0-rc1_linux_arm64.tar.gz.gpgsig","tofu_1.7.0-rc1_linux_arm64.tar.gz.pem","tofu_1.7.0-rc1_linux_arm64.tar.gz.sig","tofu_1.7.0-rc1_linux_arm64.zip","tofu_1.7.0-rc1_linux_arm64.zip.gpgsig","tofu_1.7.0-rc1_linux_arm64.zip.pem","tofu_1.7.0-rc1_linux_arm64.zip.sig","tofu_1.7.0-rc1_openbsd_386.tar.gz","tofu_1.7.0-rc1_openbsd_386.tar.gz.gpgsig","tofu_1.7.0-rc1_openbsd_386.tar.gz.pem","tofu_1.7.0-rc1_openbsd_386.tar.gz.sig","tofu_1.7.0-rc1_openbsd_386.zip","tofu_1.7.0-rc1_openbsd_386.zip.gpgsig","tofu_1.7.0-rc1_openbsd_386.zip.pem","tofu_1.7.0-rc1_openbsd_386.zip.sig","tofu_1.7.0-rc1_openbsd_amd64.tar.gz","tofu_1.7.0-rc1_openbsd_amd64.tar.gz.gpgsig","tofu_1.7.0-rc1_openbsd_amd64.tar.gz.pem","tofu_1.7.0-rc1_openbsd_amd64.tar.gz.sig","tofu_1.7.0-rc1_openbsd_amd64.zip","tofu_1.7.0-rc1_openbsd_amd64.zip.gpgsig","tofu_1.7.0-rc1_openbsd_amd64.zip.pem","tofu_1.7.0-rc1_openbsd_amd64.zip.sig","tofu_1.7.0-rc1_SHA256SUMS","tofu_1.7.0-rc1_SHA256SUMS.gpgsig","tofu_1.7.0-rc1_SHA256SUMS.pem","tofu_1.7.0-rc1_SHA256SUMS.sig","tofu_1.7.0-rc1_solaris_amd64.tar.gz","tofu_1.7.0-rc1_solaris_amd64.tar.gz.gpgsig","tofu_1.7.0-rc1_solaris_amd64.tar.gz.pem","tofu_1.7.0-rc1_solaris_amd64.tar.gz.sig","tofu_1.7.0-rc1_solaris_amd64.zip","tofu_1.7.0-rc1_solaris_amd64.zip.gpgsig","tofu_1.7.0-rc1_solaris_amd64.zip.pem","tofu_1.7.0-rc1_solaris_amd64.zip.sig","tofu_1.7.0-rc1_windows_386.tar.gz","tofu_1.7.0-rc1_windows_386.tar.gz.gpgsig","tofu_1.7.0-rc1_windows_386.tar.gz.pem","tofu_1.7.0-rc1_windows_386.tar.gz.sig","tofu_1.7.0-rc1_windows_386.zip","tofu_1.7.0-rc1_windows_386.zip.gpgsig","tofu_1.7.0-rc1_windows_386.zip.pem","tofu_1.7.0-rc1_windows_386.zip.sig","tofu_1.7.0-rc1_windows_amd64.tar.gz","tofu_1.7.0-rc1_windows_amd64.tar.gz.gpgsig","tofu_1.7.0-rc1_windows_amd64.tar.gz.pem","tofu_1.7.0-rc1_windows_amd64.tar.gz.sig","tofu_1.7.0-rc1_windows_amd64.zip","tofu_1.7.0-rc1_windows_amd64.zip.gpgsig","tofu_1.7.0-rc1_windows_amd64.zip.pem","tofu_1.7.0-rc1_windows_amd64.zip.sig"]},{"id":"1.7.0-beta1","files":["tofu_1.7.0-beta1_386.apk","tofu_1.7.0-beta1_386.apk.gpgsig","tofu_1.7.0-beta1_386.apk.pem","tofu_1.7.0-beta1_386.apk.sig","tofu_1.7.0-beta1_386.deb","tofu_1.7.0-beta1_386.deb.gpgsig","tofu_1.7.0-beta1_386.deb.pem","tofu_1.7.0-beta1_386.deb.sig","tofu_1.7.0-beta1_386.rpm","tofu_1.7.0-beta1_386.rpm.gpgsig","tofu_1.7.0-beta1_386.rpm.pem","tofu_1.7.0-beta1_386.rpm.sig","tofu_1.7.0-beta1_amd64.apk","tofu_1.7.0-beta1_amd64.apk.gpgsig","tofu_1.7.0-beta1_amd64.apk.pem","tofu_1.7.0-beta1_amd64.apk.sig","tofu_1.7.0-beta1_amd64.deb","tofu_1.7.0-beta1_amd64.deb.gpgsig","tofu_1.7.0-beta1_amd64.deb.pem","tofu_1.7.0-beta1_amd64.deb.sig","tofu_1.7.0-beta1_amd64.rpm","tofu_1.7.0-beta1_amd64.rpm.gpgsig","tofu_1.7.0-beta1_amd64.rpm.pem","tofu_1.7.0-beta1_amd64.rpm.sig","tofu_1.7.0-beta1_arm.apk","tofu_1.7.0-beta1_arm.apk.gpgsig","tofu_1.7.0-beta1_arm.apk.pem","tofu_1.7.0-beta1_arm.apk.sig","tofu_1.7.0-beta1_arm.deb","tofu_1.7.0-beta1_arm.deb.gpgsig","tofu_1.7.0-beta1_arm.deb.pem","tofu_1.7.0-beta1_arm.deb.sig","tofu_1.7.0-beta1_arm.rpm","tofu_1.7.0-beta1_arm.rpm.gpgsig","tofu_1.7.0-beta1_arm.rpm.pem","tofu_1.7.0-beta1_arm.rpm.sig","tofu_1.7.0-beta1_arm64.apk","tofu_1.7.0-beta1_arm64.apk.gpgsig","tofu_1.7.0-beta1_arm64.apk.pem","tofu_1.7.0-beta1_arm64.apk.sig","tofu_1.7.0-beta1_arm64.deb","tofu_1.7.0-beta1_arm64.deb.gpgsig","tofu_1.7.0-beta1_arm64.deb.pem","tofu_1.7.0-beta1_arm64.deb.sig","tofu_1.7.0-beta1_arm64.rpm","tofu_1.7.0-beta1_arm64.rpm.gpgsig","tofu_1.7.0-beta1_arm64.rpm.pem","tofu_1.7.0-beta1_arm64.rpm.sig","tofu_1.7.0-beta1_darwin_amd64.tar.gz","tofu_1.7.0-beta1_darwin_amd64.tar.gz.gpgsig","tofu_1.7.0-beta1_darwin_amd64.tar.gz.pem","tofu_1.7.0-beta1_darwin_amd64.tar.gz.sig","tofu_1.7.0-beta1_darwin_amd64.zip","tofu_1.7.0-beta1_darwin_amd64.zip.gpgsig","tofu_1.7.0-beta1_darwin_amd64.zip.pem","tofu_1.7.0-beta1_darwin_amd64.zip.sig","tofu_1.7.0-beta1_darwin_arm64.tar.gz","tofu_1.7.0-beta1_darwin_arm64.tar.gz.gpgsig","tofu_1.7.0-beta1_darwin_arm64.tar.gz.pem","tofu_1.7.0-beta1_darwin_arm64.tar.gz.sig","tofu_1.7.0-beta1_darwin_arm64.zip","tofu_1.7.0-beta1_darwin_arm64.zip.gpgsig","tofu_1.7.0-beta1_darwin_arm64.zip.pem","tofu_1.7.0-beta1_darwin_arm64.zip.sig","tofu_1.7.0-beta1_freebsd_386.tar.gz","tofu_1.7.0-beta1_freebsd_386.tar.gz.gpgsig","tofu_1.7.0-beta1_freebsd_386.tar.gz.pem","tofu_1.7.0-beta1_freebsd_386.tar.gz.sig","tofu_1.7.0-beta1_freebsd_386.zip","tofu_1.7.0-beta1_freebsd_386.zip.gpgsig","tofu_1.7.0-beta1_freebsd_386.zip.pem","tofu_1.7.0-beta1_freebsd_386.zip.sig","tofu_1.7.0-beta1_freebsd_amd64.tar.gz","tofu_1.7.0-beta1_freebsd_amd64.tar.gz.gpgsig","tofu_1.7.0-beta1_freebsd_amd64.tar.gz.pem","tofu_1.7.0-beta1_freebsd_amd64.tar.gz.sig","tofu_1.7.0-beta1_freebsd_amd64.zip","tofu_1.7.0-beta1_freebsd_amd64.zip.gpgsig","tofu_1.7.0-beta1_freebsd_amd64.zip.pem","tofu_1.7.0-beta1_freebsd_amd64.zip.sig","tofu_1.7.0-beta1_freebsd_arm.tar.gz","tofu_1.7.0-beta1_freebsd_arm.tar.gz.gpgsig","tofu_1.7.0-beta1_freebsd_arm.tar.gz.pem","tofu_1.7.0-beta1_freebsd_arm.tar.gz.sig","tofu_1.7.0-beta1_freebsd_arm.zip","tofu_1.7.0-beta1_freebsd_arm.zip.gpgsig","tofu_1.7.0-beta1_freebsd_arm.zip.pem","tofu_1.7.0-beta1_freebsd_arm.zip.sig","tofu_1.7.0-beta1_linux_386.tar.gz","tofu_1.7.0-beta1_linux_386.tar.gz.gpgsig","tofu_1.7.0-beta1_linux_386.tar.gz.pem","tofu_1.7.0-beta1_linux_386.tar.gz.sig","tofu_1.7.0-beta1_linux_386.zip","tofu_1.7.0-beta1_linux_386.zip.gpgsig","tofu_1.7.0-beta1_linux_386.zip.pem","tofu_1.7.0-beta1_linux_386.zip.sig","tofu_1.7.0-beta1_linux_amd64.tar.gz","tofu_1.7.0-beta1_linux_amd64.tar.gz.gpgsig","tofu_1.7.0-beta1_linux_amd64.tar.gz.pem","tofu_1.7.0-beta1_linux_amd64.tar.gz.sig","tofu_1.7.0-beta1_linux_amd64.zip","tofu_1.7.0-beta1_linux_amd64.zip.gpgsig","tofu_1.7.0-beta1_linux_amd64.zip.pem","tofu_1.7.0-beta1_linux_amd64.zip.sig","tofu_1.7.0-beta1_linux_arm.tar.gz","tofu_1.7.0-beta1_linux_arm.tar.gz.gpgsig","tofu_1.7.0-beta1_linux_arm.tar.gz.pem","tofu_1.7.0-beta1_linux_arm.tar.gz.sig","tofu_1.7.0-beta1_linux_arm.zip","tofu_1.7.0-beta1_linux_arm.zip.gpgsig","tofu_1.7.0-beta1_linux_arm.zip.pem","tofu_1.7.0-beta1_linux_arm.zip.sig","tofu_1.7.0-beta1_linux_arm64.tar.gz","tofu_1.7.0-beta1_linux_arm64.tar.gz.gpgsig","tofu_1.7.0-beta1_linux_arm64.tar.gz.pem","tofu_1.7.0-beta1_linux_arm64.tar.gz.sig","tofu_1.7.0-beta1_linux_arm64.zip","tofu_1.7.0-beta1_linux_arm64.zip.gpgsig","tofu_1.7.0-beta1_linux_arm64.zip.pem","tofu_1.7.0-beta1_linux_arm64.zip.sig","tofu_1.7.0-beta1_openbsd_386.tar.gz","tofu_1.7.0-beta1_openbsd_386.tar.gz.gpgsig","tofu_1.7.0-beta1_openbsd_386.tar.gz.pem","tofu_1.7.0-beta1_openbsd_386.tar.gz.sig","tofu_1.7.0-beta1_openbsd_386.zip","tofu_1.7.0-beta1_openbsd_386.zip.gpgsig","tofu_1.7.0-beta1_openbsd_386.zip.pem","tofu_1.7.0-beta1_openbsd_386.zip.sig","tofu_1.7.0-beta1_openbsd_amd64.tar.gz","tofu_1.7.0-beta1_openbsd_amd64.tar.gz.gpgsig","tofu_1.7.0-beta1_openbsd_amd64.tar.gz.pem","tofu_1.7.0-beta1_openbsd_amd64.tar.gz.sig","tofu_1.7.0-beta1_openbsd_amd64.zip","tofu_1.7.0-beta1_openbsd_amd64.zip.gpgsig","tofu_1.7.0-beta1_openbsd_amd64.zip.pem","tofu_1.7.0-beta1_openbsd_amd64.zip.sig","tofu_1.7.0-beta1_SHA256SUMS","tofu_1.7.0-beta1_SHA256SUMS.gpgsig","tofu_1.7.0-beta1_SHA256SUMS.pem","tofu_1.7.0-beta1_SHA256SUMS.sig","tofu_1.7.0-beta1_solaris_amd64.tar.gz","tofu_1.7.0-beta1_solaris_amd64.tar.gz.gpgsig","tofu_1.7.0-beta1_solaris_amd64.tar.gz.pem","tofu_1.7.0-beta1_solaris_amd64.tar.gz.sig","tofu_1.7.0-beta1_solaris_amd64.zip","tofu_1.7.0-beta1_solaris_amd64.zip.gpgsig","tofu_1.7.0-beta1_solaris_amd64.zip.pem","tofu_1.7.0-beta1_solaris_amd64.zip.sig","tofu_1.7.0-beta1_windows_386.tar.gz","tofu_1.7.0-beta1_windows_386.tar.gz.gpgsig","tofu_1.7.0-beta1_windows_386.tar.gz.pem","tofu_1.7.0-beta1_windows_386.tar.gz.sig","tofu_1.7.0-beta1_windows_386.zip","tofu_1.7.0-beta1_windows_386.zip.gpgsig","tofu_1.7.0-beta1_windows_386.zip.pem","tofu_1.7.0-beta1_windows_386.zip.sig","tofu_1.7.0-beta1_windows_amd64.tar.gz","tofu_1.7.0-beta1_windows_amd64.tar.gz.gpgsig","tofu_1.7.0-beta1_windows_amd64.tar.gz.pem","tofu_1.7.0-beta1_windows_amd64.tar.gz.sig","tofu_1.7.0-beta1_windows_amd64.zip","tofu_1.7.0-beta1_windows_amd64.zip.gpgsig","tofu_1.7.0-beta1_windows_amd64.zip.pem","tofu_1.7.0-beta1_windows_amd64.zip.sig"]},{"id":"1.7.0-alpha1","files":["tofu_1.7.0-alpha1_386.apk","tofu_1.7.0-alpha1_386.apk.gpgsig","tofu_1.7.0-alpha1_386.apk.pem","tofu_1.7.0-alpha1_386.apk.sig","tofu_1.7.0-alpha1_386.deb","tofu_1.7.0-alpha1_386.deb.gpgsig","tofu_1.7.0-alpha1_386.deb.pem","tofu_1.7.0-alpha1_386.deb.sig","tofu_1.7.0-alpha1_386.rpm","tofu_1.7.0-alpha1_386.rpm.gpgsig","tofu_1.7.0-alpha1_386.rpm.pem","tofu_1.7.0-alpha1_386.rpm.sig","tofu_1.7.0-alpha1_amd64.apk","tofu_1.7.0-alpha1_amd64.apk.gpgsig","tofu_1.7.0-alpha1_amd64.apk.pem","tofu_1.7.0-alpha1_amd64.apk.sig","tofu_1.7.0-alpha1_amd64.deb","tofu_1.7.0-alpha1_amd64.deb.gpgsig","tofu_1.7.0-alpha1_amd64.deb.pem","tofu_1.7.0-alpha1_amd64.deb.sig","tofu_1.7.0-alpha1_amd64.rpm","tofu_1.7.0-alpha1_amd64.rpm.gpgsig","tofu_1.7.0-alpha1_amd64.rpm.pem","tofu_1.7.0-alpha1_amd64.rpm.sig","tofu_1.7.0-alpha1_arm.apk","tofu_1.7.0-alpha1_arm.apk.gpgsig","tofu_1.7.0-alpha1_arm.apk.pem","tofu_1.7.0-alpha1_arm.apk.sig","tofu_1.7.0-alpha1_arm.deb","tofu_1.7.0-alpha1_arm.deb.gpgsig","tofu_1.7.0-alpha1_arm.deb.pem","tofu_1.7.0-alpha1_arm.deb.sig","tofu_1.7.0-alpha1_arm.rpm","tofu_1.7.0-alpha1_arm.rpm.gpgsig","tofu_1.7.0-alpha1_arm.rpm.pem","tofu_1.7.0-alpha1_arm.rpm.sig","tofu_1.7.0-alpha1_arm64.apk","tofu_1.7.0-alpha1_arm64.apk.gpgsig","tofu_1.7.0-alpha1_arm64.apk.pem","tofu_1.7.0-alpha1_arm64.apk.sig","tofu_1.7.0-alpha1_arm64.deb","tofu_1.7.0-alpha1_arm64.deb.gpgsig","tofu_1.7.0-alpha1_arm64.deb.pem","tofu_1.7.0-alpha1_arm64.deb.sig","tofu_1.7.0-alpha1_arm64.rpm","tofu_1.7.0-alpha1_arm64.rpm.gpgsig","tofu_1.7.0-alpha1_arm64.rpm.pem","tofu_1.7.0-alpha1_arm64.rpm.sig","tofu_1.7.0-alpha1_darwin_amd64.tar.gz","tofu_1.7.0-alpha1_darwin_amd64.tar.gz.gpgsig","tofu_1.7.0-alpha1_darwin_amd64.tar.gz.pem","tofu_1.7.0-alpha1_darwin_amd64.tar.gz.sig","tofu_1.7.0-alpha1_darwin_amd64.zip","tofu_1.7.0-alpha1_darwin_amd64.zip.gpgsig","tofu_1.7.0-alpha1_darwin_amd64.zip.pem","tofu_1.7.0-alpha1_darwin_amd64.zip.sig","tofu_1.7.0-alpha1_darwin_arm64.tar.gz","tofu_1.7.0-alpha1_darwin_arm64.tar.gz.gpgsig","tofu_1.7.0-alpha1_darwin_arm64.tar.gz.pem","tofu_1.7.0-alpha1_darwin_arm64.tar.gz.sig","tofu_1.7.0-alpha1_darwin_arm64.zip","tofu_1.7.0-alpha1_darwin_arm64.zip.gpgsig","tofu_1.7.0-alpha1_darwin_arm64.zip.pem","tofu_1.7.0-alpha1_darwin_arm64.zip.sig","tofu_1.7.0-alpha1_freebsd_386.tar.gz","tofu_1.7.0-alpha1_freebsd_386.tar.gz.gpgsig","tofu_1.7.0-alpha1_freebsd_386.tar.gz.pem","tofu_1.7.0-alpha1_freebsd_386.tar.gz.sig","tofu_1.7.0-alpha1_freebsd_386.zip","tofu_1.7.0-alpha1_freebsd_386.zip.gpgsig","tofu_1.7.0-alpha1_freebsd_386.zip.pem","tofu_1.7.0-alpha1_freebsd_386.zip.sig","tofu_1.7.0-alpha1_freebsd_amd64.tar.gz","tofu_1.7.0-alpha1_freebsd_amd64.tar.gz.gpgsig","tofu_1.7.0-alpha1_freebsd_amd64.tar.gz.pem","tofu_1.7.0-alpha1_freebsd_amd64.tar.gz.sig","tofu_1.7.0-alpha1_freebsd_amd64.zip","tofu_1.7.0-alpha1_freebsd_amd64.zip.gpgsig","tofu_1.7.0-alpha1_freebsd_amd64.zip.pem","tofu_1.7.0-alpha1_freebsd_amd64.zip.sig","tofu_1.7.0-alpha1_freebsd_arm.tar.gz","tofu_1.7.0-alpha1_freebsd_arm.tar.gz.gpgsig","tofu_1.7.0-alpha1_freebsd_arm.tar.gz.pem","tofu_1.7.0-alpha1_freebsd_arm.tar.gz.sig","tofu_1.7.0-alpha1_freebsd_arm.zip","tofu_1.7.0-alpha1_freebsd_arm.zip.gpgsig","tofu_1.7.0-alpha1_freebsd_arm.zip.pem","tofu_1.7.0-alpha1_freebsd_arm.zip.sig","tofu_1.7.0-alpha1_linux_386.tar.gz","tofu_1.7.0-alpha1_linux_386.tar.gz.gpgsig","tofu_1.7.0-alpha1_linux_386.tar.gz.pem","tofu_1.7.0-alpha1_linux_386.tar.gz.sig","tofu_1.7.0-alpha1_linux_386.zip","tofu_1.7.0-alpha1_linux_386.zip.gpgsig","tofu_1.7.0-alpha1_linux_386.zip.pem","tofu_1.7.0-alpha1_linux_386.zip.sig","tofu_1.7.0-alpha1_linux_amd64.tar.gz","tofu_1.7.0-alpha1_linux_amd64.tar.gz.gpgsig","tofu_1.7.0-alpha1_linux_amd64.tar.gz.pem","tofu_1.7.0-alpha1_linux_amd64.tar.gz.sig","tofu_1.7.0-alpha1_linux_amd64.zip","tofu_1.7.0-alpha1_linux_amd64.zip.gpgsig","tofu_1.7.0-alpha1_linux_amd64.zip.pem","tofu_1.7.0-alpha1_linux_amd64.zip.sig","tofu_1.7.0-alpha1_linux_arm.tar.gz","tofu_1.7.0-alpha1_linux_arm.tar.gz.gpgsig","tofu_1.7.0-alpha1_linux_arm.tar.gz.pem","tofu_1.7.0-alpha1_linux_arm.tar.gz.sig","tofu_1.7.0-alpha1_linux_arm.zip","tofu_1.7.0-alpha1_linux_arm.zip.gpgsig","tofu_1.7.0-alpha1_linux_arm.zip.pem","tofu_1.7.0-alpha1_linux_arm.zip.sig","tofu_1.7.0-alpha1_linux_arm64.tar.gz","tofu_1.7.0-alpha1_linux_arm64.tar.gz.gpgsig","tofu_1.7.0-alpha1_linux_arm64.tar.gz.pem","tofu_1.7.0-alpha1_linux_arm64.tar.gz.sig","tofu_1.7.0-alpha1_linux_arm64.zip","tofu_1.7.0-alpha1_linux_arm64.zip.gpgsig","tofu_1.7.0-alpha1_linux_arm64.zip.pem","tofu_1.7.0-alpha1_linux_arm64.zip.sig","tofu_1.7.0-alpha1_openbsd_386.tar.gz","tofu_1.7.0-alpha1_openbsd_386.tar.gz.gpgsig","tofu_1.7.0-alpha1_openbsd_386.tar.gz.pem","tofu_1.7.0-alpha1_openbsd_386.tar.gz.sig","tofu_1.7.0-alpha1_openbsd_386.zip","tofu_1.7.0-alpha1_openbsd_386.zip.gpgsig","tofu_1.7.0-alpha1_openbsd_386.zip.pem","tofu_1.7.0-alpha1_openbsd_386.zip.sig","tofu_1.7.0-alpha1_openbsd_amd64.tar.gz","tofu_1.7.0-alpha1_openbsd_amd64.tar.gz.gpgsig","tofu_1.7.0-alpha1_openbsd_amd64.tar.gz.pem","tofu_1.7.0-alpha1_openbsd_amd64.tar.gz.sig","tofu_1.7.0-alpha1_openbsd_amd64.zip","tofu_1.7.0-alpha1_openbsd_amd64.zip.gpgsig","tofu_1.7.0-alpha1_openbsd_amd64.zip.pem","tofu_1.7.0-alpha1_openbsd_amd64.zip.sig","tofu_1.7.0-alpha1_SHA256SUMS","tofu_1.7.0-alpha1_SHA256SUMS.gpgsig","tofu_1.7.0-alpha1_SHA256SUMS.pem","tofu_1.7.0-alpha1_SHA256SUMS.sig","tofu_1.7.0-alpha1_solaris_amd64.tar.gz","tofu_1.7.0-alpha1_solaris_amd64.tar.gz.gpgsig","tofu_1.7.0-alpha1_solaris_amd64.tar.gz.pem","tofu_1.7.0-alpha1_solaris_amd64.tar.gz.sig","tofu_1.7.0-alpha1_solaris_amd64.zip","tofu_1.7.0-alpha1_solaris_amd64.zip.gpgsig","tofu_1.7.0-alpha1_solaris_amd64.zip.pem","tofu_1.7.0-alpha1_solaris_amd64.zip.sig","tofu_1.7.0-alpha1_windows_386.tar.gz","tofu_1.7.0-alpha1_windows_386.tar.gz.gpgsig","tofu_1.7.0-alpha1_windows_386.tar.gz.pem","tofu_1.7.0-alpha1_windows_386.tar.gz.sig","tofu_1.7.0-alpha1_windows_386.zip","tofu_1.7.0-alpha1_windows_386.zip.gpgsig","tofu_1.7.0-alpha1_windows_386.zip.pem","tofu_1.7.0-alpha1_windows_386.zip.sig","tofu_1.7.0-alpha1_windows_amd64.tar.gz","tofu_1.7.0-alpha1_windows_amd64.tar.gz.gpgsig","tofu_1.7.0-alpha1_windows_amd64.tar.gz.pem","tofu_1.7.0-alpha1_windows_amd64.tar.gz.sig","tofu_1.7.0-alpha1_windows_amd64.zip","tofu_1.7.0-alpha1_windows_amd64.zip.gpgsig","tofu_1.7.0-alpha1_windows_amd64.zip.pem","tofu_1.7.0-alpha1_windows_amd64.zip.sig"]},{"id":"1.6.2","files":["tofu_1.6.2_386.apk","tofu_1.6.2_386.apk.gpgsig","tofu_1.6.2_386.apk.pem","tofu_1.6.2_386.apk.sig","tofu_1.6.2_386.deb","tofu_1.6.2_386.deb.gpgsig","tofu_1.6.2_386.deb.pem","tofu_1.6.2_386.deb.sig","tofu_1.6.2_386.rpm","tofu_1.6.2_386.rpm.gpgsig","tofu_1.6.2_386.rpm.pem","tofu_1.6.2_386.rpm.sig","tofu_1.6.2_amd64.apk","tofu_1.6.2_amd64.apk.gpgsig","tofu_1.6.2_amd64.apk.pem","tofu_1.6.2_amd64.apk.sig","tofu_1.6.2_amd64.deb","tofu_1.6.2_amd64.deb.gpgsig","tofu_1.6.2_amd64.deb.pem","tofu_1.6.2_amd64.deb.sig","tofu_1.6.2_amd64.rpm","tofu_1.6.2_amd64.rpm.gpgsig","tofu_1.6.2_amd64.rpm.pem","tofu_1.6.2_amd64.rpm.sig","tofu_1.6.2_arm.apk","tofu_1.6.2_arm.apk.gpgsig","tofu_1.6.2_arm.apk.pem","tofu_1.6.2_arm.apk.sig","tofu_1.6.2_arm.deb","tofu_1.6.2_arm.deb.gpgsig","tofu_1.6.2_arm.deb.pem","tofu_1.6.2_arm.deb.sig","tofu_1.6.2_arm.rpm","tofu_1.6.2_arm.rpm.gpgsig","tofu_1.6.2_arm.rpm.pem","tofu_1.6.2_arm.rpm.sig","tofu_1.6.2_arm64.apk","tofu_1.6.2_arm64.apk.gpgsig","tofu_1.6.2_arm64.apk.pem","tofu_1.6.2_arm64.apk.sig","tofu_1.6.2_arm64.deb","tofu_1.6.2_arm64.deb.gpgsig","tofu_1.6.2_arm64.deb.pem","tofu_1.6.2_arm64.deb.sig","tofu_1.6.2_arm64.rpm","tofu_1.6.2_arm64.rpm.gpgsig","tofu_1.6.2_arm64.rpm.pem","tofu_1.6.2_arm64.rpm.sig","tofu_1.6.2_darwin_amd64.zip","tofu_1.6.2_darwin_amd64.zip.gpgsig","tofu_1.6.2_darwin_amd64.zip.pem","tofu_1.6.2_darwin_amd64.zip.sig","tofu_1.6.2_darwin_arm64.zip","tofu_1.6.2_darwin_arm64.zip.gpgsig","tofu_1.6.2_darwin_arm64.zip.pem","tofu_1.6.2_darwin_arm64.zip.sig","tofu_1.6.2_freebsd_386.zip","tofu_1.6.2_freebsd_386.zip.gpgsig","tofu_1.6.2_freebsd_386.zip.pem","tofu_1.6.2_freebsd_386.zip.sig","tofu_1.6.2_freebsd_amd64.zip","tofu_1.6.2_freebsd_amd64.zip.gpgsig","tofu_1.6.2_freebsd_amd64.zip.pem","tofu_1.6.2_freebsd_amd64.zip.sig","tofu_1.6.2_freebsd_arm.zip","tofu_1.6.2_freebsd_arm.zip.gpgsig","tofu_1.6.2_freebsd_arm.zip.pem","tofu_1.6.2_freebsd_arm.zip.sig","tofu_1.6.2_linux_386.zip","tofu_1.6.2_linux_386.zip.gpgsig","tofu_1.6.2_linux_386.zip.pem","tofu_1.6.2_linux_386.zip.sig","tofu_1.6.2_linux_amd64.zip","tofu_1.6.2_linux_amd64.zip.gpgsig","tofu_1.6.2_linux_amd64.zip.pem","tofu_1.6.2_linux_amd64.zip.sig","tofu_1.6.2_linux_arm.zip","tofu_1.6.2_linux_arm.zip.gpgsig","tofu_1.6.2_linux_arm.zip.pem","tofu_1.6.2_linux_arm.zip.sig","tofu_1.6.2_linux_arm64.zip","tofu_1.6.2_linux_arm64.zip.gpgsig","tofu_1.6.2_linux_arm64.zip.pem","tofu_1.6.2_linux_arm64.zip.sig","tofu_1.6.2_openbsd_386.zip","tofu_1.6.2_openbsd_386.zip.gpgsig","tofu_1.6.2_openbsd_386.zip.pem","tofu_1.6.2_openbsd_386.zip.sig","tofu_1.6.2_openbsd_amd64.zip","tofu_1.6.2_openbsd_amd64.zip.gpgsig","tofu_1.6.2_openbsd_amd64.zip.pem","tofu_1.6.2_openbsd_amd64.zip.sig","tofu_1.6.2_SHA256SUMS","tofu_1.6.2_SHA256SUMS.gpgsig","tofu_1.6.2_SHA256SUMS.pem","tofu_1.6.2_SHA256SUMS.sig","tofu_1.6.2_solaris_amd64.zip","tofu_1.6.2_solaris_amd64.zip.gpgsig","tofu_1.6.2_solaris_amd64.zip.pem","tofu_1.6.2_solaris_amd64.zip.sig","tofu_1.6.2_windows_386.zip","tofu_1.6.2_windows_386.zip.gpgsig","tofu_1.6.2_windows_386.zip.pem","tofu_1.6.2_windows_386.zip.sig","tofu_1.6.2_windows_amd64.zip","tofu_1.6.2_windows_amd64.zip.gpgsig","tofu_1.6.2_windows_amd64.zip.pem","tofu_1.6.2_windows_amd64.zip.sig"]},{"id":"1.6.1","files":["tofu_1.6.1_386.apk","tofu_1.6.1_386.apk.gpgsig","tofu_1.6.1_386.apk.pem","tofu_1.6.1_386.apk.sig","tofu_1.6.1_386.deb","tofu_1.6.1_386.deb.gpgsig","tofu_1.6.1_386.deb.pem","tofu_1.6.1_386.deb.sig","tofu_1.6.1_386.rpm","tofu_1.6.1_386.rpm.gpgsig","tofu_1.6.1_386.rpm.pem","tofu_1.6.1_386.rpm.sig","tofu_1.6.1_amd64.apk","tofu_1.6.1_amd64.apk.gpgsig","tofu_1.6.1_amd64.apk.pem","tofu_1.6.1_amd64.apk.sig","tofu_1.6.1_amd64.deb","tofu_1.6.1_amd64.deb.gpgsig","tofu_1.6.1_amd64.deb.pem","tofu_1.6.1_amd64.deb.sig","tofu_1.6.1_amd64.rpm","tofu_1.6.1_amd64.rpm.gpgsig","tofu_1.6.1_amd64.rpm.pem","tofu_1.6.1_amd64.rpm.sig","tofu_1.6.1_arm.apk","tofu_1.6.1_arm.apk.gpgsig","tofu_1.6.1_arm.apk.pem","tofu_1.6.1_arm.apk.sig","tofu_1.6.1_arm.deb","tofu_1.6.1_arm.deb.gpgsig","tofu_1.6.1_arm.deb.pem","tofu_1.6.1_arm.deb.sig","tofu_1.6.1_arm.rpm","tofu_1.6.1_arm.rpm.gpgsig","tofu_1.6.1_arm.rpm.pem","tofu_1.6.1_arm.rpm.sig","tofu_1.6.1_arm64.apk","tofu_1.6.1_arm64.apk.gpgsig","tofu_1.6.1_arm64.apk.pem","tofu_1.6.1_arm64.apk.sig","tofu_1.6.1_arm64.deb","tofu_1.6.1_arm64.deb.gpgsig","tofu_1.6.1_arm64.deb.pem","tofu_1.6.1_arm64.deb.sig","tofu_1.6.1_arm64.rpm","tofu_1.6.1_arm64.rpm.gpgsig","tofu_1.6.1_arm64.rpm.pem","tofu_1.6.1_arm64.rpm.sig","tofu_1.6.1_darwin_amd64.zip","tofu_1.6.1_darwin_amd64.zip.gpgsig","tofu_1.6.1_darwin_amd64.zip.pem","tofu_1.6.1_darwin_amd64.zip.sig","tofu_1.6.1_darwin_arm64.zip","tofu_1.6.1_darwin_arm64.zip.gpgsig","tofu_1.6.1_darwin_arm64.zip.pem","tofu_1.6.1_darwin_arm64.zip.sig","tofu_1.6.1_freebsd_386.zip","tofu_1.6.1_freebsd_386.zip.gpgsig","tofu_1.6.1_freebsd_386.zip.pem","tofu_1.6.1_freebsd_386.zip.sig","tofu_1.6.1_freebsd_amd64.zip","tofu_1.6.1_freebsd_amd64.zip.gpgsig","tofu_1.6.1_freebsd_amd64.zip.pem","tofu_1.6.1_freebsd_amd64.zip.sig","tofu_1.6.1_freebsd_arm.zip","tofu_1.6.1_freebsd_arm.zip.gpgsig","tofu_1.6.1_freebsd_arm.zip.pem","tofu_1.6.1_freebsd_arm.zip.sig","tofu_1.6.1_linux_386.zip","tofu_1.6.1_linux_386.zip.gpgsig","tofu_1.6.1_linux_386.zip.pem","tofu_1.6.1_linux_386.zip.sig","tofu_1.6.1_linux_amd64.zip","tofu_1.6.1_linux_amd64.zip.gpgsig","tofu_1.6.1_linux_amd64.zip.pem","tofu_1.6.1_linux_amd64.zip.sig","tofu_1.6.1_linux_arm.zip","tofu_1.6.1_linux_arm.zip.gpgsig","tofu_1.6.1_linux_arm.zip.pem","tofu_1.6.1_linux_arm.zip.sig","tofu_1.6.1_linux_arm64.zip","tofu_1.6.1_linux_arm64.zip.gpgsig","tofu_1.6.1_linux_arm64.zip.pem","tofu_1.6.1_linux_arm64.zip.sig","tofu_1.6.1_openbsd_386.zip","tofu_1.6.1_openbsd_386.zip.gpgsig","tofu_1.6.1_openbsd_386.zip.pem","tofu_1.6.1_openbsd_386.zip.sig","tofu_1.6.1_openbsd_amd64.zip","tofu_1.6.1_openbsd_amd64.zip.gpgsig","tofu_1.6.1_openbsd_amd64.zip.pem","tofu_1.6.1_openbsd_amd64.zip.sig","tofu_1.6.1_SHA256SUMS","tofu_1.6.1_SHA256SUMS.gpgsig","tofu_1.6.1_SHA256SUMS.pem","tofu_1.6.1_SHA256SUMS.sig","tofu_1.6.1_solaris_amd64.zip","tofu_1.6.1_solaris_amd64.zip.gpgsig","tofu_1.6.1_solaris_amd64.zip.pem","tofu_1.6.1_solaris_amd64.zip.sig","tofu_1.6.1_windows_386.zip","tofu_1.6.1_windows_386.zip.gpgsig","tofu_1.6.1_windows_386.zip.pem","tofu_1.6.1_windows_386.zip.sig","tofu_1.6.1_windows_amd64.zip","tofu_1.6.1_windows_amd64.zip.gpgsig","tofu_1.6.1_windows_amd64.zip.pem","tofu_1.6.1_windows_amd64.zip.sig"]},{"id":"1.6.0","files":["tofu_1.6.0_386.apk","tofu_1.6.0_386.apk.gpgsig","tofu_1.6.0_386.apk.pem","tofu_1.6.0_386.apk.sig","tofu_1.6.0_386.deb","tofu_1.6.0_386.deb.gpgsig","tofu_1.6.0_386.deb.pem","tofu_1.6.0_386.deb.sig","tofu_1.6.0_386.rpm","tofu_1.6.0_386.rpm.gpgsig","tofu_1.6.0_386.rpm.pem","tofu_1.6.0_386.rpm.sig","tofu_1.6.0_amd64.apk","tofu_1.6.0_amd64.apk.gpgsig","tofu_1.6.0_amd64.apk.pem","tofu_1.6.0_amd64.apk.sig","tofu_1.6.0_amd64.deb","tofu_1.6.0_amd64.deb.gpgsig","tofu_1.6.0_amd64.deb.pem","tofu_1.6.0_amd64.deb.sig","tofu_1.6.0_amd64.rpm","tofu_1.6.0_amd64.rpm.gpgsig","tofu_1.6.0_amd64.rpm.pem","tofu_1.6.0_amd64.rpm.sig","tofu_1.6.0_arm.apk","tofu_1.6.0_arm.apk.gpgsig","tofu_1.6.0_arm.apk.pem","tofu_1.6.0_arm.apk.sig","tofu_1.6.0_arm.deb","tofu_1.6.0_arm.deb.gpgsig","tofu_1.6.0_arm.deb.pem","tofu_1.6.0_arm.deb.sig","tofu_1.6.0_arm.rpm","tofu_1.6.0_arm.rpm.gpgsig","tofu_1.6.0_arm.rpm.pem","tofu_1.6.0_arm.rpm.sig","tofu_1.6.0_arm64.apk","tofu_1.6.0_arm64.apk.gpgsig","tofu_1.6.0_arm64.apk.pem","tofu_1.6.0_arm64.apk.sig","tofu_1.6.0_arm64.deb","tofu_1.6.0_arm64.deb.gpgsig","tofu_1.6.0_arm64.deb.pem","tofu_1.6.0_arm64.deb.sig","tofu_1.6.0_arm64.rpm","tofu_1.6.0_arm64.rpm.gpgsig","tofu_1.6.0_arm64.rpm.pem","tofu_1.6.0_arm64.rpm.sig","tofu_1.6.0_darwin_amd64.zip","tofu_1.6.0_darwin_amd64.zip.gpgsig","tofu_1.6.0_darwin_amd64.zip.pem","tofu_1.6.0_darwin_amd64.zip.sig","tofu_1.6.0_darwin_arm64.zip","tofu_1.6.0_darwin_arm64.zip.gpgsig","tofu_1.6.0_darwin_arm64.zip.pem","tofu_1.6.0_darwin_arm64.zip.sig","tofu_1.6.0_freebsd_386.zip","tofu_1.6.0_freebsd_386.zip.gpgsig","tofu_1.6.0_freebsd_386.zip.pem","tofu_1.6.0_freebsd_386.zip.sig","tofu_1.6.0_freebsd_amd64.zip","tofu_1.6.0_freebsd_amd64.zip.gpgsig","tofu_1.6.0_freebsd_amd64.zip.pem","tofu_1.6.0_freebsd_amd64.zip.sig","tofu_1.6.0_freebsd_arm.zip","tofu_1.6.0_freebsd_arm.zip.gpgsig","tofu_1.6.0_freebsd_arm.zip.pem","tofu_1.6.0_freebsd_arm.zip.sig","tofu_1.6.0_linux_386.zip","tofu_1.6.0_linux_386.zip.gpgsig","tofu_1.6.0_linux_386.zip.pem","tofu_1.6.0_linux_386.zip.sig","tofu_1.6.0_linux_amd64.zip","tofu_1.6.0_linux_amd64.zip.gpgsig","tofu_1.6.0_linux_amd64.zip.pem","tofu_1.6.0_linux_amd64.zip.sig","tofu_1.6.0_linux_arm.zip","tofu_1.6.0_linux_arm.zip.gpgsig","tofu_1.6.0_linux_arm.zip.pem","tofu_1.6.0_linux_arm.zip.sig","tofu_1.6.0_linux_arm64.zip","tofu_1.6.0_linux_arm64.zip.gpgsig","tofu_1.6.0_linux_arm64.zip.pem","tofu_1.6.0_linux_arm64.zip.sig","tofu_1.6.0_openbsd_386.zip","tofu_1.6.0_openbsd_386.zip.gpgsig","tofu_1.6.0_openbsd_386.zip.pem","tofu_1.6.0_openbsd_386.zip.sig","tofu_1.6.0_openbsd_amd64.zip","tofu_1.6.0_openbsd_amd64.zip.gpgsig","tofu_1.6.0_openbsd_amd64.zip.pem","tofu_1.6.0_openbsd_amd64.zip.sig","tofu_1.6.0_SHA256SUMS","tofu_1.6.0_SHA256SUMS.gpgsig","tofu_1.6.0_SHA256SUMS.pem","tofu_1.6.0_SHA256SUMS.sig","tofu_1.6.0_solaris_amd64.zip","tofu_1.6.0_solaris_amd64.zip.gpgsig","tofu_1.6.0_solaris_amd64.zip.pem","tofu_1.6.0_solaris_amd64.zip.sig","tofu_1.6.0_windows_386.zip","tofu_1.6.0_windows_386.zip.gpgsig","tofu_1.6.0_windows_386.zip.pem","tofu_1.6.0_windows_386.zip.sig","tofu_1.6.0_windows_amd64.zip","tofu_1.6.0_windows_amd64.zip.gpgsig","tofu_1.6.0_windows_amd64.zip.pem","tofu_1.6.0_windows_amd64.zip.sig"]},{"id":"1.6.0-rc1","files":["tofu_1.6.0-rc1_386.apk","tofu_1.6.0-rc1_386.deb","tofu_1.6.0-rc1_386.rpm","tofu_1.6.0-rc1_amd64.apk","tofu_1.6.0-rc1_amd64.deb","tofu_1.6.0-rc1_amd64.rpm","tofu_1.6.0-rc1_arm.apk","tofu_1.6.0-rc1_arm.deb","tofu_1.6.0-rc1_arm.rpm","tofu_1.6.0-rc1_arm64.apk","tofu_1.6.0-rc1_arm64.deb","tofu_1.6.0-rc1_arm64.rpm","tofu_1.6.0-rc1_darwin_amd64.zip","tofu_1.6.0-rc1_darwin_arm64.zip","tofu_1.6.0-rc1_freebsd_386.zip","tofu_1.6.0-rc1_freebsd_amd64.zip","tofu_1.6.0-rc1_freebsd_arm.zip","tofu_1.6.0-rc1_linux_386.zip","tofu_1.6.0-rc1_linux_amd64.zip","tofu_1.6.0-rc1_linux_arm.zip","tofu_1.6.0-rc1_linux_arm64.zip","tofu_1.6.0-rc1_openbsd_386.zip","tofu_1.6.0-rc1_openbsd_amd64.zip","tofu_1.6.0-rc1_SHA256SUMS","tofu_1.6.0-rc1_SHA256SUMS.pem","tofu_1.6.0-rc1_SHA256SUMS.sig","tofu_1.6.0-rc1_solaris_amd64.zip","tofu_1.6.0-rc1_windows_386.zip","tofu_1.6.0-rc1_windows_amd64.zip"]},{"id":"1.6.0-beta5","files":["tofu_1.6.0-beta5_386.apk","tofu_1.6.0-beta5_386.deb","tofu_1.6.0-beta5_386.rpm","tofu_1.6.0-beta5_amd64.apk","tofu_1.6.0-beta5_amd64.deb","tofu_1.6.0-beta5_amd64.rpm","tofu_1.6.0-beta5_arm.apk","tofu_1.6.0-beta5_arm.deb","tofu_1.6.0-beta5_arm.rpm","tofu_1.6.0-beta5_arm64.apk","tofu_1.6.0-beta5_arm64.deb","tofu_1.6.0-beta5_arm64.rpm","tofu_1.6.0-beta5_darwin_amd64.zip","tofu_1.6.0-beta5_darwin_arm64.zip","tofu_1.6.0-beta5_freebsd_386.zip","tofu_1.6.0-beta5_freebsd_amd64.zip","tofu_1.6.0-beta5_freebsd_arm.zip","tofu_1.6.0-beta5_linux_386.zip","tofu_1.6.0-beta5_linux_amd64.zip","tofu_1.6.0-beta5_linux_arm.zip","tofu_1.6.0-beta5_linux_arm64.zip","tofu_1.6.0-beta5_openbsd_386.zip","tofu_1.6.0-beta5_openbsd_amd64.zip","tofu_1.6.0-beta5_SHA256SUMS","tofu_1.6.0-beta5_SHA256SUMS.pem","tofu_1.6.0-beta5_SHA256SUMS.sig","tofu_1.6.0-beta5_solaris_amd64.zip","tofu_1.6.0-beta5_windows_386.zip","tofu_1.6.0-beta5_windows_amd64.zip"]},{"id":"1.6.0-beta4","files":["tofu_1.6.0-beta4_386.apk","tofu_1.6.0-beta4_386.deb","tofu_1.6.0-beta4_386.rpm","tofu_1.6.0-beta4_amd64.apk","tofu_1.6.0-beta4_amd64.deb","tofu_1.6.0-beta4_amd64.rpm","tofu_1.6.0-beta4_arm.apk","tofu_1.6.0-beta4_arm.deb","tofu_1.6.0-beta4_arm.rpm","tofu_1.6.0-beta4_arm64.apk","tofu_1.6.0-beta4_arm64.deb","tofu_1.6.0-beta4_arm64.rpm","tofu_1.6.0-beta4_darwin_amd64.zip","tofu_1.6.0-beta4_darwin_arm64.zip","tofu_1.6.0-beta4_freebsd_386.zip","tofu_1.6.0-beta4_freebsd_amd64.zip","tofu_1.6.0-beta4_freebsd_arm.zip","tofu_1.6.0-beta4_linux_386.zip","tofu_1.6.0-beta4_linux_amd64.zip","tofu_1.6.0-beta4_linux_arm.zip","tofu_1.6.0-beta4_linux_arm64.zip","tofu_1.6.0-beta4_openbsd_386.zip","tofu_1.6.0-beta4_openbsd_amd64.zip","tofu_1.6.0-beta4_SHA256SUMS","tofu_1.6.0-beta4_SHA256SUMS.pem","tofu_1.6.0-beta4_SHA256SUMS.sig","tofu_1.6.0-beta4_solaris_amd64.zip","tofu_1.6.0-beta4_windows_386.zip","tofu_1.6.0-beta4_windows_amd64.zip"]},{"id":"1.6.0-beta3","files":["tofu_1.6.0-beta3_386.apk","tofu_1.6.0-beta3_386.deb","tofu_1.6.0-beta3_386.rpm","tofu_1.6.0-beta3_amd64.apk","tofu_1.6.0-beta3_amd64.deb","tofu_1.6.0-beta3_amd64.rpm","tofu_1.6.0-beta3_arm.apk","tofu_1.6.0-beta3_arm.deb","tofu_1.6.0-beta3_arm.rpm","tofu_1.6.0-beta3_arm64.apk","tofu_1.6.0-beta3_arm64.deb","tofu_1.6.0-beta3_arm64.rpm","tofu_1.6.0-beta3_darwin_amd64.zip","tofu_1.6.0-beta3_darwin_arm64.zip","tofu_1.6.0-beta3_freebsd_386.zip","tofu_1.6.0-beta3_freebsd_amd64.zip","tofu_1.6.0-beta3_freebsd_arm.zip","tofu_1.6.0-beta3_linux_386.zip","tofu_1.6.0-beta3_linux_amd64.zip","tofu_1.6.0-beta3_linux_arm.zip","tofu_1.6.0-beta3_linux_arm64.zip","tofu_1.6.0-beta3_openbsd_386.zip","tofu_1.6.0-beta3_openbsd_amd64.zip","tofu_1.6.0-beta3_SHA256SUMS","tofu_1.6.0-beta3_SHA256SUMS.pem","tofu_1.6.0-beta3_SHA256SUMS.sig","tofu_1.6.0-beta3_solaris_amd64.zip","tofu_1.6.0-beta3_windows_386.zip","tofu_1.6.0-beta3_windows_amd64.zip"]},{"id":"1.6.0-beta2","files":["tofu_1.6.0-beta2_386.apk","tofu_1.6.0-beta2_386.deb","tofu_1.6.0-beta2_386.rpm","tofu_1.6.0-beta2_amd64.apk","tofu_1.6.0-beta2_amd64.deb","tofu_1.6.0-beta2_amd64.rpm","tofu_1.6.0-beta2_arm.apk","tofu_1.6.0-beta2_arm.deb","tofu_1.6.0-beta2_arm.rpm","tofu_1.6.0-beta2_arm64.apk","tofu_1.6.0-beta2_arm64.deb","tofu_1.6.0-beta2_arm64.rpm","tofu_1.6.0-beta2_darwin_amd64.zip","tofu_1.6.0-beta2_darwin_arm64.zip","tofu_1.6.0-beta2_freebsd_386.zip","tofu_1.6.0-beta2_freebsd_amd64.zip","tofu_1.6.0-beta2_freebsd_arm.zip","tofu_1.6.0-beta2_linux_386.zip","tofu_1.6.0-beta2_linux_amd64.zip","tofu_1.6.0-beta2_linux_arm.zip","tofu_1.6.0-beta2_linux_arm64.zip","tofu_1.6.0-beta2_openbsd_386.zip","tofu_1.6.0-beta2_openbsd_amd64.zip","tofu_1.6.0-beta2_SHA256SUMS","tofu_1.6.0-beta2_SHA256SUMS.pem","tofu_1.6.0-beta2_SHA256SUMS.sig","tofu_1.6.0-beta2_solaris_amd64.zip","tofu_1.6.0-beta2_windows_386.zip","tofu_1.6.0-beta2_windows_amd64.zip"]},{"id":"1.6.0-beta1","files":["tofu_1.6.0-beta1_386.apk","tofu_1.6.0-beta1_386.deb","tofu_1.6.0-beta1_386.rpm","tofu_1.6.0-beta1_amd64.apk","tofu_1.6.0-beta1_amd64.deb","tofu_1.6.0-beta1_amd64.rpm","tofu_1.6.0-beta1_arm.apk","tofu_1.6.0-beta1_arm.deb","tofu_1.6.0-beta1_arm.rpm","tofu_1.6.0-beta1_arm64.apk","tofu_1.6.0-beta1_arm64.deb","tofu_1.6.0-beta1_arm64.rpm","tofu_1.6.0-beta1_darwin_amd64.zip","tofu_1.6.0-beta1_darwin_arm64.zip","tofu_1.6.0-beta1_freebsd_386.zip","tofu_1.6.0-beta1_freebsd_amd64.zip","tofu_1.6.0-beta1_freebsd_arm.zip","tofu_1.6.0-beta1_linux_386.zip","tofu_1.6.0-beta1_linux_amd64.zip","tofu_1.6.0-beta1_linux_arm.zip","tofu_1.6.0-beta1_linux_arm64.zip","tofu_1.6.0-beta1_openbsd_386.zip","tofu_1.6.0-beta1_openbsd_amd64.zip","tofu_1.6.0-beta1_SHA256SUMS","tofu_1.6.0-beta1_SHA256SUMS.pem","tofu_1.6.0-beta1_SHA256SUMS.sig","tofu_1.6.0-beta1_solaris_amd64.zip","tofu_1.6.0-beta1_windows_386.zip","tofu_1.6.0-beta1_windows_amd64.zip"]},{"id":"1.6.0-alpha5","files":["tofu_1.6.0-alpha5_386.apk","tofu_1.6.0-alpha5_386.deb","tofu_1.6.0-alpha5_386.rpm","tofu_1.6.0-alpha5_amd64.apk","tofu_1.6.0-alpha5_amd64.deb","tofu_1.6.0-alpha5_amd64.rpm","tofu_1.6.0-alpha5_arm.apk","tofu_1.6.0-alpha5_arm.deb","tofu_1.6.0-alpha5_arm.rpm","tofu_1.6.0-alpha5_arm64.apk","tofu_1.6.0-alpha5_arm64.deb","tofu_1.6.0-alpha5_arm64.rpm","tofu_1.6.0-alpha5_darwin_amd64.zip","tofu_1.6.0-alpha5_darwin_arm64.zip","tofu_1.6.0-alpha5_freebsd_386.zip","tofu_1.6.0-alpha5_freebsd_amd64.zip","tofu_1.6.0-alpha5_freebsd_arm.zip","tofu_1.6.0-alpha5_linux_386.zip","tofu_1.6.0-alpha5_linux_amd64.zip","tofu_1.6.0-alpha5_linux_arm.zip","tofu_1.6.0-alpha5_linux_arm64.zip","tofu_1.6.0-alpha5_openbsd_386.zip","tofu_1.6.0-alpha5_openbsd_amd64.zip","tofu_1.6.0-alpha5_SHA256SUMS","tofu_1.6.0-alpha5_SHA256SUMS.pem","tofu_1.6.0-alpha5_SHA256SUMS.sig","tofu_1.6.0-alpha5_solaris_amd64.zip","tofu_1.6.0-alpha5_windows_386.zip","tofu_1.6.0-alpha5_windows_amd64.zip"]},{"id":"1.6.0-alpha4","files":["tofu_1.6.0-alpha4_386.apk","tofu_1.6.0-alpha4_386.deb","tofu_1.6.0-alpha4_386.rpm","tofu_1.6.0-alpha4_amd64.apk","tofu_1.6.0-alpha4_amd64.deb","tofu_1.6.0-alpha4_amd64.rpm","tofu_1.6.0-alpha4_arm.apk","tofu_1.6.0-alpha4_arm.deb","tofu_1.6.0-alpha4_arm.rpm","tofu_1.6.0-alpha4_arm64.apk","tofu_1.6.0-alpha4_arm64.deb","tofu_1.6.0-alpha4_arm64.rpm","tofu_1.6.0-alpha4_darwin_amd64.zip","tofu_1.6.0-alpha4_darwin_arm64.zip","tofu_1.6.0-alpha4_freebsd_386.zip","tofu_1.6.0-alpha4_freebsd_amd64.zip","tofu_1.6.0-alpha4_freebsd_arm.zip","tofu_1.6.0-alpha4_linux_386.zip","tofu_1.6.0-alpha4_linux_amd64.zip","tofu_1.6.0-alpha4_linux_arm.zip","tofu_1.6.0-alpha4_linux_arm64.zip","tofu_1.6.0-alpha4_openbsd_386.zip","tofu_1.6.0-alpha4_openbsd_amd64.zip","tofu_1.6.0-alpha4_SHA256SUMS","tofu_1.6.0-alpha4_SHA256SUMS.pem","tofu_1.6.0-alpha4_SHA256SUMS.sig","tofu_1.6.0-alpha4_solaris_amd64.zip","tofu_1.6.0-alpha4_windows_386.zip","tofu_1.6.0-alpha4_windows_amd64.zip"]},{"id":"1.6.0-alpha3","files":["tofu_1.6.0-alpha3_386.apk","tofu_1.6.0-alpha3_386.deb","tofu_1.6.0-alpha3_386.rpm","tofu_1.6.0-alpha3_amd64.apk","tofu_1.6.0-alpha3_amd64.deb","tofu_1.6.0-alpha3_amd64.rpm","tofu_1.6.0-alpha3_arm.apk","tofu_1.6.0-alpha3_arm.deb","tofu_1.6.0-alpha3_arm.rpm","tofu_1.6.0-alpha3_arm64.apk","tofu_1.6.0-alpha3_arm64.deb","tofu_1.6.0-alpha3_arm64.rpm","tofu_1.6.0-alpha3_darwin_amd64.zip","tofu_1.6.0-alpha3_darwin_arm64.zip","tofu_1.6.0-alpha3_freebsd_386.zip","tofu_1.6.0-alpha3_freebsd_amd64.zip","tofu_1.6.0-alpha3_freebsd_arm.zip","tofu_1.6.0-alpha3_linux_386.zip","tofu_1.6.0-alpha3_linux_amd64.zip","tofu_1.6.0-alpha3_linux_arm.zip","tofu_1.6.0-alpha3_linux_arm64.zip","tofu_1.6.0-alpha3_openbsd_386.zip","tofu_1.6.0-alpha3_openbsd_amd64.zip","tofu_1.6.0-alpha3_SHA256SUMS","tofu_1.6.0-alpha3_SHA256SUMS.pem","tofu_1.6.0-alpha3_SHA256SUMS.sig","tofu_1.6.0-alpha3_solaris_amd64.zip","tofu_1.6.0-alpha3_windows_386.zip","tofu_1.6.0-alpha3_windows_amd64.zip"]},{"id":"1.6.0-alpha2","files":["tofu_1.6.0-alpha2_386.apk","tofu_1.6.0-alpha2_386.deb","tofu_1.6.0-alpha2_386.rpm","tofu_1.6.0-alpha2_amd64.apk","tofu_1.6.0-alpha2_amd64.deb","tofu_1.6.0-alpha2_amd64.rpm","tofu_1.6.0-alpha2_arm.apk","tofu_1.6.0-alpha2_arm.deb","tofu_1.6.0-alpha2_arm.rpm","tofu_1.6.0-alpha2_arm64.apk","tofu_1.6.0-alpha2_arm64.deb","tofu_1.6.0-alpha2_arm64.rpm","tofu_1.6.0-alpha2_darwin_amd64.zip","tofu_1.6.0-alpha2_darwin_arm64.zip","tofu_1.6.0-alpha2_freebsd_386.zip","tofu_1.6.0-alpha2_freebsd_amd64.zip","tofu_1.6.0-alpha2_freebsd_arm.zip","tofu_1.6.0-alpha2_linux_386.zip","tofu_1.6.0-alpha2_linux_amd64.zip","tofu_1.6.0-alpha2_linux_arm.zip","tofu_1.6.0-alpha2_linux_arm64.zip","tofu_1.6.0-alpha2_openbsd_386.zip","tofu_1.6.0-alpha2_openbsd_amd64.zip","tofu_1.6.0-alpha2_SHA256SUMS","tofu_1.6.0-alpha2_SHA256SUMS.pem","tofu_1.6.0-alpha2_SHA256SUMS.sig","tofu_1.6.0-alpha2_solaris_amd64.zip","tofu_1.6.0-alpha2_windows_386.zip","tofu_1.6.0-alpha2_windows_amd64.zip"]},{"id":"1.6.0-alpha1","files":["tofu_1.6.0-alpha1_386.apk","tofu_1.6.0-alpha1_386.deb","tofu_1.6.0-alpha1_386.rpm","tofu_1.6.0-alpha1_amd64.apk","tofu_1.6.0-alpha1_amd64.deb","tofu_1.6.0-alpha1_amd64.rpm","tofu_1.6.0-alpha1_arm.apk","tofu_1.6.0-alpha1_arm.deb","tofu_1.6.0-alpha1_arm.rpm","tofu_1.6.0-alpha1_arm64.apk","tofu_1.6.0-alpha1_arm64.deb","tofu_1.6.0-alpha1_arm64.rpm","tofu_1.6.0-alpha1_darwin_amd64.zip","tofu_1.6.0-alpha1_darwin_arm64.zip","tofu_1.6.0-alpha1_freebsd_386.zip","tofu_1.6.0-alpha1_freebsd_amd64.zip","tofu_1.6.0-alpha1_freebsd_arm.zip","tofu_1.6.0-alpha1_linux_386.zip","tofu_1.6.0-alpha1_linux_amd64.zip","tofu_1.6.0-alpha1_linux_arm.zip","tofu_1.6.0-alpha1_linux_arm64.zip","tofu_1.6.0-alpha1_openbsd_386.zip","tofu_1.6.0-alpha1_openbsd_amd64.zip","tofu_1.6.0-alpha1_SHA256SUMS","tofu_1.6.0-alpha1_SHA256SUMS.pem","tofu_1.6.0-alpha1_SHA256SUMS.sig","tofu_1.6.0-alpha1_solaris_amd64.zip","tofu_1.6.0-alpha1_windows_386.zip","tofu_1.6.0-alpha1_windows_amd64.zip"]}]} \ No newline at end of file diff --git a/dist/tofu/index.html b/dist/tofu/index.html deleted file mode 100644 index c98c2da..0000000 --- a/dist/tofu/index.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - OpenTofu releases - - - - - \ No newline at end of file