-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinstall.sh
executable file
·130 lines (111 loc) · 3.01 KB
/
install.sh
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
#!/bin/env bash
LOCAL_BIN=""
LOCAL_PATH=""
LOCAL_VERSION=""
REMOTE_URL=""
REMOTE_VERSION=""
assertBins() {
for bin in $@; do
if ! command -v $bin &>/dev/null; then
echo "Command $bin not found"
exit 1
fi
done
}
function getRelease() {
if [ -z "$1" ]; then
echo "Missing program [golang|vscode|dbeaver]"
exit 1
fi
release=$(curl -s https://raw.githubusercontent.com/guionardo/guiosoft-scripts/main/versions.json | jq ".$1")
if [ "$release" == "null" ]; then
echo "Program $1 not found"
exit 1
fi
REMOTE_URL=$(echo $release | jq -r ".artifact_url")
REMOTE_VERSION=$(echo $release | jq -r ".version")
echo "Program $1: $REMOTE_VERSION @ $REMOTE_URL"
}
getLocal() {
echo "Getting data from local $1 ..."
bin=$(eval which $1)
if [ $? != 0 ]; then
echo "$1 not found locally"
return
fi
LOCAL_BIN=$bin
LOCAL_PATH=$(eval dirname "$bin")
LOCAL_VERSION=$(eval $2)
LOCAL_VERSION=$(echo $LOCAL_VERSION | egrep '[0-9]+\.[0-9]+\.[0-9]+' -o)
echo "$1 local: $LOCAL_VERSION @ $LOCAL_PATH"
}
getLocal_golang() {
getLocal go "go version"
}
getLocal_vscode() {
getLocal code "code -v 2>&1 | head -n 1"
}
getLocal_dbeaver() {
user=$(logname)
ws_prop="/home/$user/.local/share/DBeaverData/workspace6/.metadata/dbeaver-workspace.properties"
getLocal dbeaver "cat $ws_prop | grep \"product-version\" | cut -d \"=\" -f 2"
}
vercomp() {
if [[ $LOCAL_VERSION == $REMOTE_VERSION ]]; then
echo "Local version is up-to-date"
exit 1
fi
local IFS=.
local i ver1=($LOCAL_VERSION) ver2=($REMOTE_VERSION)
# fill empty fields in ver1 with zeros
for ((i = ${#ver1[@]}; i < ${#ver2[@]}; i++)); do
ver1[i]=0
done
for ((i = 0; i < ${#ver1[@]}; i++)); do
if [[ -z ${ver2[i]} ]]; then
# fill empty fields in ver2 with zeros
ver2[i]=0
fi
if ((10#${ver1[i]} > 10#${ver2[i]})); then
echo "Local $LOCAL_VERSION is newer than remote $REMOTE_VERSION"
exit 1
fi
if ((10#${ver1[i]} < 10#${ver2[i]})); then
echo "Newer version $REMOTE_VERSION is available"
return
fi
done
echo "Local version is up-to-date"
exit 1
}
doUpdate_vscode() {
echo "Updating VSCode to $REMOTE_VERSION"
curl -L -o /tmp/vscode.deb $REMOTE_URL
dpkg -i /tmp/vscode.deb
rm /tmp/vscode.deb
}
doUpdate_dbeaver() {
echo "Updating DBeaver to $REMOTE_VERSION"
curl -L -o /tmp/dbeaver.deb $REMOTE_URL
dpkg -i /tmp/dbeaver.deb
rm /tmp/dbeaver.deb
}
doUpdate_golang() {
echo "Updating Golang to $REMOTE_VERSION"
curl -L -o /tmp/go.tar.gz $REMOTE_URL
rm -rf /usr/local/go
tar -C /usr/local -xzf /tmp/go.tar.gz
rm /tmp/go.tar.gz
}
assertBins curl jq
program=$1
getRelease $1
getLocal_$1
vercomp
if [ "$EUID" -ne 0 ]; then
echo "Please run as root"
exit 1
fi
doUpdate_$1
get_local_$1
echo "Update done -> $LOCAL_VERSION"