-
Notifications
You must be signed in to change notification settings - Fork 28
/
install
executable file
·172 lines (163 loc) · 5.91 KB
/
install
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
172
#!/bin/bash
#
# Copyright 2021-2024 JetBrains s.r.o.
#
# Licensed 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
#
# https://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.
#
RELEASE=${1}
TMP_DIR="/tmp/tmpinstalldir"
OUT_DIR=${2:-"/usr/local/bin"}
check_mark="\033[1;32m✓\033[0m"
echo -e '
_ _
/\ \ /\ \ Qodana CLI (installer)
/ \ \ / \ \ Documentation
/ /\ \ \ / /\ \ \ https://jb.gg/qodana-docs
/ / /\ \ \ / / /\ \ \ Contact us at
/ / / \ \_\ / / / \ \_\ [email protected]
/ / / _ / / / / / / / / / Or via our issue tracker
/ / / /\ \/ / / / / / / / https://jb.gg/qodana-issue
/ / /__\ \ \/ / / /___/ / / Or share your feedback at our forum
/ / /____\ \ \ / / /____\/ / https://jb.gg/qodana-forum
\/________\_\/ \/_________/
'
echo -e "
👋 This script will download Qodana CLI to \033[4m/usr/local/bin/qodana\033[0m
If you get 'permission denied' error:
- Specify other dir and version: \033[4mcurl -fsSL https://jb.gg/qodana-cli/install | bash -s -- v2023.2.8 $HOME/.local/bin\033[0m
- Or change the owner of $OUT_DIR to your user
If you get API rate limit exceeded error:
- Specify the version, so the script does not query GitHub API: \033[4mcurl -fsSL https://jb.gg/qodana-cli/install | bash -s -- v2023.2.8 \033[0m
"
set -e
function cleanup {
echo rm -rf $TMP_DIR > /dev/null
}
function header() {
echo -e "\n\033[1m$1\033[0m";
}
function fail {
cleanup
msg=$1
echo "============"
echo "Error: $msg" 1>&2
exit 1
}
function install {
set -e
if [ -z "$RELEASE" ]; then
LATEST=$(curl --silent "https://api.github.com/repos/jetbrains/qodana-cli/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
RELEASE=$LATEST
fi
USER="JetBrains"
PROG="qodana"
INSECURE="false"
#bash check
[ ! "$BASH_VERSION" ] && fail "Please use bash instead"
[ ! -d $OUT_DIR ] && fail "output directory missing: $OUT_DIR"
#dependency check, assume we are a standard POSIX machine
which find > /dev/null || fail "find not installed"
which xargs > /dev/null || fail "xargs not installed"
which sort > /dev/null || fail "sort not installed"
which tail > /dev/null || fail "tail not installed"
which cut > /dev/null || fail "cut not installed"
which du > /dev/null || fail "du not installed"
GET=""
if which curl > /dev/null; then
GET="curl"
if [[ $INSECURE = "true" ]]; then GET="$GET --insecure"; fi
GET="$GET --fail -# -L"
elif which wget > /dev/null; then
GET="wget"
if [[ $INSECURE = "true" ]]; then GET="$GET --no-check-certificate"; fi
GET="$GET -qO-"
else
fail "neither wget/curl are installed"
fi
case $(uname -s) in
Darwin) OS="darwin";;
Linux) OS="linux";;
*) fail "unknown os: $(uname -s)";;
esac
#find ARCH
if [[ $(uname -m) == "x86_64" ]]; then
ARCH="amd64"
elif [[ $(uname -m) == "aarch64" || $(uname -m) == "arm64" ]]; then
ARCH="arm"
else
fail "unknown arch: $(uname -m)"
fi
URL=""
FTYPE=""
case "${OS}_${ARCH}" in
"darwin_arm")
URL="https://github.com/JetBrains/qodana-cli/releases/download/$RELEASE/qodana_darwin_arm64.tar.gz"
FTYPE=".tar.gz"
;;
"darwin_amd64")
URL="https://github.com/JetBrains/qodana-cli/releases/download/$RELEASE/qodana_darwin_x86_64.tar.gz"
FTYPE=".tar.gz"
;;
"linux_arm")
URL="https://github.com/JetBrains/qodana-cli/releases/download/$RELEASE/qodana_linux_arm64.tar.gz"
FTYPE=".tar.gz"
;;
"linux_amd64")
URL="https://github.com/JetBrains/qodana-cli/releases/download/$RELEASE/qodana_linux_x86_64.tar.gz"
FTYPE=".tar.gz"
;;
*) fail "No asset for platform ${OS}-${ARCH}";;
esac
#got URL! download it...
echo -e "\033[0;90m\nInstalling $PROG ($RELEASE) from $URL ... \033[0\n"
#enter tempdir
mkdir -p $TMP_DIR
cd $TMP_DIR || exit
if [[ $FTYPE = ".gz" ]]; then
which gzip > /dev/null || fail "gzip is not installed"
#gz download!
bash -c "$GET $URL" | gzip -d - > $PROG || fail "download failed"
elif [[ $FTYPE = ".tar.gz" ]] || [[ $FTYPE = ".tgz" ]]; then
#check if archiver progs installed
which tar > /dev/null || fail "tar is not installed"
which gzip > /dev/null || fail "gzip is not installed"
bash -c "$GET $URL" | tar zxf - > /dev/null || fail "download failed"
elif [[ $FTYPE = ".zip" ]]; then
which unzip > /dev/null || fail "unzip is not installed"
bash -c "$GET $URL" > tmp.zip || fail "download failed"
unzip -o -qq tmp.zip || fail "unzip failed"
rm tmp.zip || fail "cleanup failed"
elif [[ $FTYPE = "" ]]; then
bash -c "$GET $URL" > "qodana_${OS}_${ARCH}" || fail "download failed"
else
fail "unknown file type: $FTYPE"
fi
TMP_BIN=$(find . -type f | xargs du | sort -n | tail -n 1 | cut -f 2)
if [ ! -f "$TMP_BIN" ]; then
fail "could not find find binary (largest file)"
fi
if [[ $(du -m "$TMP_BIN" | cut -f1) -lt 1 ]]; then
fail "no binary found ($TMP_BIN is not larger than 1MB)"
fi
chmod +x "$TMP_BIN" || fail "chmod +x failed"
mv "$TMP_BIN" "$OUT_DIR"/$PROG || fail "mv failed" #FINAL STEP!
echo -e "$ qodana --help " && "$OUT_DIR/$PROG" --help
echo -e "${check_mark} Installed at $OUT_DIR/$PROG"
cleanup
header "Next steps\n"
echo -e "‣ \033[1mInitialize Qodana in a project\033[0m"
echo -e " \033[0;90m\033[0;33mcd\033[0;90m to the project you want to set up Qodana with and run \033[0;33mqodana init\033[0;90m\033[0m\n"
echo -e "‣ \033[1mGet help and share your feedback\033[0m"
echo -e " \033[0;90mJoin the Qodana community at \033[0;4mhttps://jb.gg/qodana-forum\033[0m"
}
install