From 92c4c230445f02c993b300f507207908564594e4 Mon Sep 17 00:00:00 2001 From: timoxa0 Date: Sun, 23 Jun 2024 11:46:25 +0000 Subject: [PATCH] Add install scripts --- installers/go-posix.sh | 28 ++++++ installers/linux.sh | 21 +++++ installers/windows.ps1 | 193 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 242 insertions(+) create mode 100644 installers/go-posix.sh create mode 100644 installers/linux.sh create mode 100644 installers/windows.ps1 diff --git a/installers/go-posix.sh b/installers/go-posix.sh new file mode 100644 index 0000000..49eecc7 --- /dev/null +++ b/installers/go-posix.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +command -v go >/dev/null 2>&1 || { + printf "\e[33mGo is required but not installed\e[0m\n" >&2 + rnm=1 +} +command -v git >/dev/null 2>&1 || { + printf "\e[33mGit is required but not installed\e[0m\n" >&2 + rnm=1 +} +[[ "$rnm" == "1" ]] && exit 1 + +[ -d "$HOME/.local/bin" ] && { + mkdir --parent "$HOME/.local/bin" +} + +[ -d ~/.lon-tool-src ] && rm ~/.lon-tool-src -rf +git clone https://git.timoxa0.su/timoxa0/lon-tool.git ~/.lon-tool-src || { + rm ~/.lon-tool-src -rf + exit 2 +} + +pushd ~/.lon-tool-src &> /dev/null +rev=$(git describe --abbrev=4 --dirty --always --tags) +go get git.timoxa0.su/timoxa0/lon-tool/cmd +go build -ldflags "-X git.timoxa0.su/timoxa0/lon-tool/cmd.version=$rev" -o "$HOME/.local/bin/lon-tool" main.go && { + printf "\e[32mDone!\e[0m Installed at %s\n" "$HOME/go/bin/lon-tool" +} +popd &> /dev/null diff --git a/installers/linux.sh b/installers/linux.sh new file mode 100644 index 0000000..e9fceae --- /dev/null +++ b/installers/linux.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +URL="https://git.timoxa0.su/timoxa0/lon-tool/releases/download/latest/lon-tool_lin_amd64" + +[[ "$(uname -m)" != "x86_64*" ]] || { + printf "Unsupported CPU arch\n" + exit 1 +} + +[ -d "$HOME/.local/bin" ] && { + mkdir --parent "$HOME/.local/bin" +} + +printf "Downloading lon-tool\n" +curl "$URL" -o "$HOME/.local/bin/lon-tool" -# +chmod +x "$HOME/.local/bin/lon-tool" + +command -v adb >/dev/null 2>&1 || { + printf "\e[33mWARNING: adb binary not found.\e[0m\nPlease install google platform tools using your package manager\n" >&2 +} + +printf "\e[32mDone!\e[0m Installed at %s\n" "$HOME/.local/bin/lon-tool" \ No newline at end of file diff --git a/installers/windows.ps1 b/installers/windows.ps1 new file mode 100644 index 0000000..91566d2 --- /dev/null +++ b/installers/windows.ps1 @@ -0,0 +1,193 @@ +$url="https://git.timoxa0.su/timoxa0/lon-tool/releases/download/latest/lon-tool_win_amd64.exe" +$bin_dir = Join-Path $env:USERPROFILE ".bin" +$platform_tools_url = "https://dl.google.com/android/repository/platform-tools-latest-windows.zip" +$platform_tools_dir = Join-Path $bin_dir "platform_tools" + +function Get-FileFromWeb { + param ( + # Parameter help description + [Parameter(Mandatory)] + [string]$URL, + + # Parameter help description + [Parameter(Mandatory)] + [string]$File + ) + Begin { + function Show-Progress { + param ( + # Enter total value + [Parameter(Mandatory)] + [Single]$TotalValue, + + # Enter current value + [Parameter(Mandatory)] + [Single]$CurrentValue, + + # Enter custom progresstext + [Parameter(Mandatory)] + [string]$ProgressText, + + # Enter value suffix + [Parameter()] + [string]$ValueSuffix, + + # Enter bar lengh suffix + [Parameter()] + [int]$BarSize = 40, + + # show complete bar + [Parameter()] + [switch]$Complete + ) + + # calc % + $percent = $CurrentValue / $TotalValue + $percentComplete = $percent * 100 + if ($ValueSuffix) { + $ValueSuffix = " $ValueSuffix" # add space in front + } + if ($psISE) { + Write-Progress "$ProgressText $CurrentValue$ValueSuffix of $TotalValue$ValueSuffix" -id 0 -percentComplete $percentComplete + } + else { + # build progressbar with string function + $curBarSize = $BarSize * $percent + $progbar = "" + $progbar = $progbar.PadRight($curBarSize,[char]9608) + $progbar = $progbar.PadRight($BarSize,[char]9617) + + if (!$Complete.IsPresent) { + Write-Host -NoNewLine "`r$ProgressText $progbar [ $($CurrentValue.ToString("#.###").PadLeft($TotalValue.ToString("#.###").Length))$ValueSuffix / $($TotalValue.ToString("#.###"))$ValueSuffix ] $($percentComplete.ToString("##0.00").PadLeft(6)) % complete" + } + else { + Write-Host -NoNewLine "`r$ProgressText $progbar [ $($TotalValue.ToString("#.###").PadLeft($TotalValue.ToString("#.###").Length))$ValueSuffix / $($TotalValue.ToString("#.###"))$ValueSuffix ] $($percentComplete.ToString("##0.00").PadLeft(6)) % complete" + } + } + } + } + Process { + try { + $storeEAP = $ErrorActionPreference + $ErrorActionPreference = 'Stop' + + # invoke request + $request = [System.Net.HttpWebRequest]::Create($URL) + $response = $request.GetResponse() + + if ($response.StatusCode -eq 401 -or $response.StatusCode -eq 403 -or $response.StatusCode -eq 404) { + throw "Remote file either doesn't exist, is unauthorized, or is forbidden for '$URL'." + } + + if($File -match '^\.\\') { + $File = Join-Path (Get-Location -PSProvider "FileSystem") ($File -Split '^\.')[1] + } + + if($File -and !(Split-Path $File)) { + $File = Join-Path (Get-Location -PSProvider "FileSystem") $File + } + + if ($File) { + $fileDirectory = $([System.IO.Path]::GetDirectoryName($File)) + if (!(Test-Path($fileDirectory))) { + [System.IO.Directory]::CreateDirectory($fileDirectory) | Out-Null + } + } + + [long]$fullSize = $response.ContentLength + $fullSizeMB = $fullSize / 1024 / 1024 + + # define buffer + [byte[]]$buffer = new-object byte[] 1048576 + [long]$total = [long]$count = 0 + + # create reader / writer + $reader = $response.GetResponseStream() + $writer = new-object System.IO.FileStream $File, "Create" + + # start download + $finalBarCount = 0 #show final bar only one time + do { + + $count = $reader.Read($buffer, 0, $buffer.Length) + + $writer.Write($buffer, 0, $count) + + $total += $count + $totalMB = $total / 1024 / 1024 + + if ($fullSize -gt 0) { + Show-Progress -TotalValue $fullSizeMB -CurrentValue $totalMB -ProgressText "Downloading $($File.Name)" -ValueSuffix "MB" + } + + if ($total -eq $fullSize -and $count -eq 0 -and $finalBarCount -eq 0) { + Show-Progress -TotalValue $fullSizeMB -CurrentValue $totalMB -ProgressText "Downloading $($File.Name)" -ValueSuffix "MB" -Complete + $finalBarCount++ + #Write-Host "$finalBarCount" + } + + } while ($count -gt 0) + } + + catch { + + $ExeptionMsg = $_.Exception.Message + Write-Host "Download breaks with error : $ExeptionMsg" + } + + finally { + # cleanup + if ($reader) { $reader.Close() } + if ($writer) { $writer.Flush(); $writer.Close() } + + $ErrorActionPreference = $storeEAP + [GC]::Collect() + } + } +} + +function Install-Tool { + if (-not (Test-Path $bin_dir -PathType Container)) { + New-Item -Path $bin_dir -ItemType Directory | Out-Null + } + + $currentPath = [Environment]::GetEnvironmentVariable("PATH", "User") -split ";" + if ($currentPath -notcontains $bin_dir) { + [Environment]::SetEnvironmentVariable("PATH", "$env:PATH;$bin_dir", "User") + $env:PATH="$env:PATH;$bin_dir" + Write-Host "$bin_dir added to PATH." + } + + Get-FileFromWeb "$url" (Join-Path $bin_dir "lon-tool.exe") + Write-Host +} + +function Install-Platoform_tools { + + if (-not (Test-Path $platform_tools_dir -PathType Container)) { + New-Item -Path $platform_tools_dir -ItemType Directory | Out-Null + } + + $currentPath = [Environment]::GetEnvironmentVariable("PATH", "User") -split ";" + if ($currentPath -notcontains $platform_tools_dir) { + [Environment]::SetEnvironmentVariable("PATH", "$env:PATH;$platform_tools_dir", "User") + $env:PATH="$env:PATH;$platform_tools_dir" + Write-Host "$platform_tools_dir added to PATH." + } + + Get-FileFromWeb "$platform_tools_url" (Join-Path $platform_tools_dir "tools.zip") + Write-Host + Expand-Archive -Path (Join-Path $platform_tools_dir "tools.zip") -DestinationPath $platform_tools_dir + Move-Item (Join-Path $platform_tools_dir "platform-tools\*") $platform_tools_dir + Remove-Item (Join-Path $platform_tools_dir "platform-tools\*") +} + +Install-Tool + +if (-not (Get-Command "adb.exe" -ErrorAction SilentlyContinue)) { + $decision = $Host.UI.PromptForChoice("Adb executable not found in PATH", "Do you wand to install android platform tools?", ("&Yes", "&No"), 1) + if ($decision -eq 0) { + Install-Platoform_tools + } +} +Write-Host "Done!" -ForegroundColor Green