update unzip instructions
[webi-installers/.git] / _webi / bootstrap.sh
1 #!/bin/bash
2
3 {
4
5 set -e
6 set -u
7
8 #WEBI_PKG=
9 #WEBI_HOST=https://webinstall.dev
10 export WEBI_HOST
11
12 mkdir -p "$HOME/.local/bin"
13
14 cat << EOF > "$HOME/.local/bin/webi"
15 #!/bin/bash
16
17 set -e
18 set -u
19
20 {
21
22 export WEBI_TIMESTAMP=\$(date +%F_%H-%M-%S)
23 export _webi_tmp="\${_webi_tmp:-\$(mktemp -d -t webi-\$WEBI_TIMESTAMP.XXXXXXXX)}"
24
25 if [ -n "\${_WEBI_PARENT:-}" ]; then
26   export _WEBI_CHILD=true
27 else
28   export _WEBI_CHILD=
29 fi
30 export _WEBI_PARENT=true
31
32 ##
33 ## Detect acceptable package formats
34 ##
35
36 my_ext=""
37 set +e
38 # NOTE: the order here is least favorable to most favorable
39 if [ -n "\$(command -v pkgutil)" ]; then
40     my_ext="pkg,\$my_ext"
41 fi
42 # disable this check for the sake of building the macOS installer on Linux
43 #if [ -n "\$(command -v diskutil)" ]; then
44     # note: could also detect via hdiutil
45     my_ext="dmg,\$my_ext"
46 #fi
47 if [ -n "\$(command -v git)" ]; then
48     my_ext="git,\$my_ext"
49 fi
50 if [ -n "\$(command -v unxz)" ]; then
51     my_ext="xz,\$my_ext"
52 fi
53 if [ -n "\$(command -v unzip)" ]; then
54     my_ext="zip,\$my_ext"
55 else
56     if [ -n "\$(command -v apt-get)" ]; then
57         >&2 echo "WARN: please install 'unzip':"
58         >&2 echo "        sudo apt-get install -y unzip"
59     else
60         >&2 echo "WARN: 'unzip' not found"
61     fi
62 fi
63 if [ -n "\$(command -v tar)" ]; then
64     my_ext="tar,\$my_ext"
65 fi
66 my_ext="\$(echo "\$my_ext" | sed 's/,$//')" # nix trailing comma
67 set -e
68
69
70 ##
71 ## Detect http client
72 ##
73
74 set +e
75 export WEBI_CURL="\$(command -v curl)"
76 export WEBI_WGET="\$(command -v wget)"
77 set -e
78
79 export WEBI_HOST="\${WEBI_HOST:-https://webinstall.dev}"
80 export WEBI_UA="\$(uname -a)"
81
82
83 webinstall() {
84
85     my_package="\${1:-}"
86     if [ -z "\$my_package" ]; then
87         >&2 echo "Usage: webi <package>@<version> ..."
88         >&2 echo "Example: webi node@lts rg"
89         exit 1
90     fi
91
92     export WEBI_BOOT="\$(mktemp -d -t "\$my_package-bootstrap.\$WEBI_TIMESTAMP.XXXXXXXX")"
93
94     my_installer_url="\$WEBI_HOST/api/installers/\$my_package.sh?formats=\$my_ext"
95     set +e
96     if [ -n "\$WEBI_CURL" ]; then
97         curl -fsSL "\$my_installer_url" -H "User-Agent: curl \$WEBI_UA" \\
98             -o "\$WEBI_BOOT/\$my_package-bootstrap.sh"
99     else
100         wget -q "\$my_installer_url" --user-agent="wget \$WEBI_UA" \\
101             -O "\$WEBI_BOOT/\$my_package-bootstrap.sh"
102     fi
103     if ! [ \$? -eq 0 ]; then
104       >&2 echo "error fetching '\$my_installer_url'"
105       exit 1
106     fi
107     set -e
108
109     pushd "\$WEBI_BOOT" 2>&1 > /dev/null
110         bash "\$my_package-bootstrap.sh"
111     popd 2>&1 > /dev/null
112
113     rm -rf "\$WEBI_BOOT"
114
115 }
116
117 show_path_updates() {
118
119     if ! [ -n "\${_WEBI_CHILD}" ]; then
120         if [ -f "\$_webi_tmp/.PATH.env" ]; then
121             my_paths=\$(cat "\$_webi_tmp/.PATH.env" | sort -u)
122             if [ -n "\$my_paths" ]; then
123                 echo "IMPORTANT: You must update you PATH to use the installed program(s)"
124                 echo ""
125                 echo "You can CLOSE and REOPEN Terminal, or RUN these exports:"
126                 echo ""
127                 echo "\$my_paths"
128                 echo ""
129             fi
130             rm -f "\$_webi_tmp/.PATH.env"
131         fi
132     fi
133
134 }
135
136 for pkgname in "\$@"
137 do
138     webinstall "\$pkgname"
139 done
140
141 show_path_updates
142
143 }
144
145 EOF
146
147 chmod a+x "$HOME/.local/bin/webi"
148
149 if [ -n "${WEBI_PKG:-}" ]; then
150     "$HOME/.local/bin/webi" "${WEBI_PKG}"
151 fi
152
153 }