-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathinstall-latest
More file actions
171 lines (150 loc) · 5.13 KB
/
Copy pathinstall-latest
File metadata and controls
171 lines (150 loc) · 5.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#!/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
#---------------------------------------------------------------------------