#! /usr/bin/env bash # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # The top half of this script runs in Bash and the bottom half in Powershell # Some lines at the end or the beginning can run in both shells, but syntax # common to both is limited. # -------------------------------------------------------------------------- echo @' ' > /dev/null #vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv # Bash Start ----------------------------------------------------------- OS="$(uname -s)" ARCH="$(uname -m)" CMD="ops" case "$OS-$ARCH" in (Linux-x86_64) SUFFIX="_linux_amd64" EXT=".tar.gz" ;; (Linux-aarch64) SUFFIX="_linux_arm64" EXT=".tar.gz" ;; (Linux-arm64) SUFFIX="_linux_arm64" EXT=".tar.gz" ;; (Darwin-x86_64) SUFFIX="_darwin_amd64" EXT=".tar.gz" ;; (Darwin-arm64) SUFFIX="_darwin_arm64" EXT=".tar.gz" ;; (MINGW64_NT-*) SUFFIX="_windows_amd64" ; EXT=".zip" CMD="ops.exe" ;; (*) echo "unknown system - exiting" exit 1 ;; esac OPSROOT="https://raw.githubusercontent.com/apache/openserverless-task/0.9.0/opsroot.json" if test -z "$VERSION" then VERSION="$(curl -sL $OPSROOT | sed -n 's/^.*"version": "\([^"]*\)",/\1/p')" fi if test -z "$VERSION" then echo "cannot determine version from $OPSROOT - exiting" exit 1 fi FILE="openserverless-cli_${VERSION}$SUFFIX$EXT" # the version can contain a '+' which must be percent-encoded in the url path TAG="v${VERSION//+/%2B}" URL="https://github.com/apache/openserverless-cli/releases/download/$TAG/$FILE" mkdir -p ~/.local/bin if ! curl -fsSL "$URL" -o "/tmp/$FILE" then echo "cannot download ops from:" echo "$URL" exit 1 fi DIR="openserverless-cli_${VERSION}$SUFFIX" if test "$EXT" = ".zip" then unzip -o -j -d ~/.local/bin "/tmp/$FILE" "$DIR/$CMD" else tar xzvf "/tmp/$FILE" -C ~/.local/bin --strip-components=1 "$DIR/$CMD" fi chmod +x ~/.local/bin/"$CMD" rm -f "/tmp/$FILE" if ! test -e ~/.local/bin/"$CMD" then echo "cannot install ops - download and unpack it in a folder in the path from here:" echo "$URL" exit 1 fi case ":$PATH:" in *":$HOME/.local/bin:"*) : # already in PATH ;; *) echo "$HOME/.local/bin is not in the path - adding it" LINE='export PATH="$HOME/.local/bin:$PATH"' for RC in "$HOME/.bashrc" "$HOME/.zshrc" do if ! test -e "$RC" || ! grep -qF "$LINE" "$RC" then echo "$LINE" >>"$RC" fi done echo please restart your terminal to find ops in your path ;; esac exit 0 # Above this line is Bash Script ------------------------------------------- # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ echo > /dev/null <<"out-null" ### '@ | out-null #vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv # Below this line is Powershell Script ------------------------------------- $InWindows = [System.Environment]::OSVersion.Platform -eq 'Win32NT' if (-not $InWindows) { Write-Host "This script is only for Windows - exiting" exit 1 } $SUFFIX = "_windows_amd64" $EXT = ".zip" $CMD = "ops.exe" $OPSROOT = "https://raw.githubusercontent.com/apache/openserverless-task/0.9.0/opsroot.json" if (-not $VERSION) { $VERSION = (Invoke-RestMethod -Uri $OPSROOT).version } if (-not $VERSION) { Write-Host "Cannot determine version from $OPSROOT - exiting" exit 1 } $FILE = "openserverless-cli_${VERSION}$SUFFIX$EXT" # the version can contain a '+' which must be percent-encoded in the url path $TAG = "v" + $VERSION.Replace("+", "%2B") $URL = "https://github.com/apache/openserverless-cli/releases/download/$TAG/$FILE" # Create the directory if it doesn't exist $BinPath = "$HOME\.local\bin" if (-not (Test-Path -Path $BinPath)) { New-Item -ItemType Directory -Force -Path $BinPath | Out-Null } # Download the file to a temp location $TmpFile = Join-Path ([System.IO.Path]::GetTempPath()) $FILE try { Invoke-WebRequest -Uri $URL -OutFile "$TmpFile" } catch { Write-Host "Cannot download ops from:" Write-Host $URL exit 1 } # Unpack to a temp folder, then install just the command $DIR = "openserverless-cli_${VERSION}$SUFFIX" $TmpDir = Join-Path ([System.IO.Path]::GetTempPath()) "openserverless-cli-$VERSION" Remove-Item -LiteralPath "$TmpDir" -Recurse -Force -ErrorAction SilentlyContinue Expand-Archive -LiteralPath "$TmpFile" -DestinationPath "$TmpDir" -Force Move-Item -LiteralPath (Join-Path (Join-Path "$TmpDir" $DIR) $CMD) -Destination (Join-Path $BinPath $CMD) -Force Remove-Item -LiteralPath "$TmpDir" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item -LiteralPath "$TmpFile" -Force -ErrorAction SilentlyContinue # Verify installation if (-not (Test-Path -LiteralPath (Join-Path $BinPath $CMD))) { Write-Host "Cannot install ops - download and unpack it in a folder in the path from here:" Write-Host $URL exit 1 } # Check if the bin path is in the user's PATH if (-not (($env:PATH -split ';') -contains $BinPath)) { Write-Host "$BinPath is not in the path - adding it" $existingPath = [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::User) $newPath = "$BinPath;$existingPath" [System.Environment]::SetEnvironmentVariable("Path", $newPath, [System.EnvironmentVariableTarget]::User) Write-Host "Please restart your terminal to find ops in your path" } exit 0 # Powershell End ----------------------------------------------------------- # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ out-null #---------------------------------------------------------------------------