-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinstall
136 lines (129 loc) · 4.35 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
#!/bin/bash
LATEST=$(curl --silent "https://api.github.com/repos/Scurrra/docsync-cli/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
RELEASE=${1:-$LATEST}
VERSION="${RELEASE//v}"
TMP_DIR="/tmp/tmpinstalldir"
OUT_DIR=${2:-"/usr/local/bin"}
check_mark="\033[1;32m✓\033[0m"
echo -e "
👋 This script will download docsync to \033[4m/usr/local/bin/docsync\033[0m
If you get 'permission denied' error:
- Specify other dir and version: \033[4mcurl -fsSL https://github.com/Scurrra/docsync/blob/master/install | bash -s -- $RELEASE $HOME/.local/bin\033[0m
- Or change the owner of $OUT_DIR to your user
"
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
USER="Scurrra"
PROG="docsync"
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 | grep 64 > /dev/null; then
ARCH="amd64"
elif uname -m | grep arm > /dev/null; then
ARCH="arm"
else
fail "unknown arch: $(uname -m)"
fi
URL=""
FTYPE=""
case "${OS}_${ARCH}" in
"darwin_arm")
URL="https://github.com/Scurrra/docsync/releases/download/$RELEASE/docsync_${VERSION}_Darwin_arm64.tar.gz"
FTYPE=".tar.gz"
;;
"darwin_amd64")
URL="https://github.com/Scurrra/docsync/releases/download/$RELEASE/docsync_${VERSION}_Darwin_x86_64.tar.gz"
FTYPE=".tar.gz"
;;
"linux_arm")
URL="https://github.com/Scurrra/docsync/releases/download/$RELEASE/docsync_${VERSION}_Linux_arm64.tar.gz"
FTYPE=".tar.gz"
;;
"linux_amd64")
URL="https://github.com/Scurrra/docsync/releases/download/$RELEASE/docsync_${VERSION}_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)... \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" > "docsync_${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 "$ docsync --help " && "$OUT_DIR/$PROG" --help
echo -e "${check_mark} Installed at $OUT_DIR/$PROG"
cleanup
header "Next steps\n"
echo -e "‣ \033[1mInitialize docsync in a project\033[0m"
echo -e " \033[0;90m\033[0;33mcd\033[0;90m to the project you want to set up docsync with and run \033[0;33mdocsync init\033[0;90m\033[0m\n"
}
install