| #!/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.1/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" |
| URL="https://github.com/apache/openserverless-cli/releases/download/v$VERSION/$FILE" |
| |
| mkdir -p ~/.local/bin |
| if ! curl -fsSL "$URL" -o "/tmp/$FILE" |
| then echo "cannot download ops from:" |
| echo "$URL" |
| exit 1 |
| fi |
| |
| if test "$EXT" = ".zip" |
| then |
| unzip -o -d ~/.local/bin "/tmp/$FILE" "$CMD" |
| else |
| tar xzvf "/tmp/$FILE" -C ~/.local/bin "$CMD" |
| fi |
| 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' |
| |
| $SUFFIX = "_windows_amd64" |
| $EXT = ".zip" |
| $CMD = "ops.exe" |
| |
| if (-not $InWindows) { |
| Write-Host "This script is only for Windows - exiting" |
| exit 1 |
| } |
| |
| $OPSROOT = "https://raw.githubusercontent.com/apache/openserverless-task/0.9.1/opsroot.json" |
| $VERSION = (Invoke-RestMethod -Uri $OPSROOT).version |
| $FILE = "openserverless-cli_${VERSION}$SUFFIX$EXT" |
| $URL = "https://github.com/apache/openserverless-cli/releases/download/v$VERSION/$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 |
| Invoke-WebRequest -Uri $URL -OutFile "$TmpFile" |
| |
| # Unpack the file based on its extension |
| Expand-Archive -Path "$TmpFile" -DestinationPath $BinPath -Force |
| Remove-Item -Path "$TmpFile" -Force -ErrorAction SilentlyContinue |
| |
| # Verify installation |
| if (-not (Test-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)) { |
| $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" |
| } |
| |
| |
| # Powershell End ----------------------------------------------------------- |
| # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| out-null |
| #--------------------------------------------------------------------------- |