a3d9e7ef84c711ae76f716de8278e10500af9d80
[webi-installers/.git] / webi / template.bash
1 #!/bin/bash
2
3 {
4
5 set -e
6 set -u
7
8 #WEBI_PKG=
9 #WEBI_NAME=
10 # TODO should this be BASEURL instead?
11 #WEBI_HOST=
12 #WEBI_RELEASES=
13 #WEBI_CSV=
14 #WEBI_TAG=
15 #WEBI_VERSION=
16 #WEBI_MAJOR=
17 #WEBI_MINOR=
18 #WEBI_PATCH=
19 # TODO not sure if BUILD is the best name for this
20 #WEBI_BUILD=
21 #WEBI_LTS=
22 #WEBI_CHANNEL=
23 #WEBI_EXT=
24 #WEBI_PKG_URL=
25 #WEBI_PKG_FILE=
26 export WEBI_HOST
27
28 ##
29 ## Set up tmp, download, and install directories
30 ##
31
32 WEBI_TMP=${WEBI_TMP:-"$(mktemp -d -t webinstall-${WEBI_PKG:-}.XXXXXXXX)"}
33
34 mkdir -p "$HOME/Downloads"
35 mkdir -p "$HOME/.local/bin"
36 mkdir -p "$HOME/.local/opt"
37
38 ##
39 ## Detect http client
40 ##
41 set +e
42 export WEBI_CURL="$(command -v curl)"
43 export WEBI_WGET="$(command -v wget)"
44 set -e
45
46 webi_check() {
47     # Test for existing version
48     set +e
49     pkg_current_cmd="$(command -v "$pkg_cmd_name")"
50     set -e
51     my_current_version=""
52     if [ -n "$pkg_current_cmd" ]; then
53         pkg_current_version="$(pkg_get_current_version)"
54         # remove trailing '.0's for golang's sake
55         my_current_version="$(echo $pkg_current_version | sed 's:\.0::g')"
56         my_new_version="$(echo $WEBI_VERSION | sed 's:\.0::g')"
57         my_canonical_name="$(pkg_format_cmd_version "$WEBI_VERSION")"
58         if [ "$my_new_version" == "$my_current_version" ]; then
59             echo "$my_canonical_name already installed at $pkg_current_cmd"
60             exit 0
61         else
62             if [ "$pkg_current_cmd" != "$pkg_common_cmd" ]; then
63                 echo "WARN: possible conflict between $my_canonical_name and $pkg_current_version at $pkg_current_cmd"
64             fi
65             if [ -x "$pkg_new_cmd" ]; then
66                 pkg_switch_version
67                 echo "switched to $my_canonical_name at $pkg_new_opt"
68                 exit 0
69             fi
70           fi
71     fi
72 }
73
74 webi_download() {
75     if [ -n "${1:-}" ]; then
76         my_url="$1"
77     else
78         if [ "error" == "$WEBI_CHANNEL" ]; then
79             echo "Could not find $WEBI_NAME v$WEBI_VERSION"
80             exit 1
81         fi
82         my_url="$WEBI_PKG_URL"
83         echo "Downloading $WEBI_NAME v$WEBI_VERSION"
84     fi
85     if [ -n "${2:-}" ]; then
86         my_dl="$2"
87     else
88         my_dl="$HOME/Downloads/$WEBI_PKG_FILE"
89     fi
90
91     if [ -n "$WEBI_WGET" ]; then
92         # wget has resumable downloads
93         # TODO wget -c --content-disposition "$my_url"
94         set +e
95         wget -q --show-progress -c "$my_url" --user-agent="wget $WEBI_UA" -O "$my_dl"
96         if ! [ $? -eq 0 ]; then
97           echo "failed to download from $WEBI_PKG_URL"
98           exit 1
99         fi
100         set -e
101     else
102         # BSD curl is non-resumable, hence we don't bother
103         # TODO curl -fsSL --remote-name --remote-header-name --write-out "$my_url"
104         curl -fSL "$my_url" -H "User-Agent: curl $WEBI_UA" -o "$my_dl"
105     fi
106 }
107
108 webi_extract() {
109     pushd "$WEBI_TMP" 2>&1 >/dev/null
110         if [ "tar" == "$WEBI_EXT" ]; then
111             echo "Extracting $HOME/Downloads/$WEBI_PKG_FILE"
112             tar xf "$HOME/Downloads/$WEBI_PKG_FILE"
113         elif [ "zip" == "$WEBI_EXT" ]; then
114             echo "Extracting $HOME/Downloads/$WEBI_PKG_FILE"
115             unzip "$HOME/Downloads/$WEBI_PKG_FILE"
116         elif [ "exe" == "$WEBI_EXT" ]; then
117             # do nothing (but don't leave an empty if block either)
118             echo -n ""
119         elif [ "xz" == "$WEBI_EXT" ]; then
120             echo "Inflating $HOME/Downloads/$WEBI_PKG_FILE"
121             unxz -c "$HOME/Downloads/$WEBI_PKG_FILE" > $(basename "$WEBI_PKG_FILE")
122         else
123             # do nothing
124             echo "Failed to extract $HOME/Downloads/$WEBI_PKG_FILE"
125             exit 1
126         fi
127     popd 2>&1 >/dev/null
128 }
129
130 webi_path_add() {
131     # make sure that we don't recursively install pathman with webi
132     my_path="$PATH"
133     export PATH="$HOME/.local/bin:$PATH"
134     set +e
135     my_pathman=$(command -v pathman)
136     set -e
137     export PATH="$my_path"
138
139     # install pathman if not already installed
140     if [ -z "$my_pathman" ]; then
141         "$HOME/.local/bin/webi" pathman
142         "$HOME/.local/bin/pathman" add "$HOME/.local/bin"
143         export PATH="$HOME/.local/bin:$PATH"
144     fi
145
146     # in case pathman was recently installed and the PATH not updated
147     "$HOME/.local/bin/pathman" add "$1"
148 }
149
150 ##
151 ##
152 ## BEGIN user-submited script
153 ##
154 ##
155
156 {{ installer }}
157
158 ##
159 ##
160 ## END user-submitted script
161 ##
162 ##
163
164 }