9ca3a8819f585073e6422c3f2d736a3394a67ba0
[webi-installers/.git] / webi / webi.bash
1 #!/bin/bash
2
3 # title: Webi
4 # homepage: https://webinstall.dev
5 # tagline: webinstall.dev for the CLI
6 # description: |
7 #   for the people like us that are too lazy even to run <kbd>curl&nbsp;https://webinstall.dev/PACKAGE_NAME&nbsp;|&nbsp;bash</kbd>
8 # examples: |
9 #   ```bash
10 #   webi node@latest
11 #   ```
12 #   <br/>
13 #
14 #   ```bash
15 #   webi golang@v1.14
16 #   ```
17 #   <br/>
18 #
19 #   ```bash
20 #   webi rustlang
21 #   ```
22
23 {
24
25 mkdir -p "$HOME/.local/bin"
26
27 cat << EOF > "$HOME/.local/bin/webi"
28 #!/bin/bash
29
30 set -e
31 set -u
32
33 my_package="\${1:-}"
34 if [ -z "\$my_package" ]; then
35         echo "Usage: webi <package>@<version>"
36         echo "Example: webi node@latest"
37         exit 1
38 fi
39
40 ##
41 ## Detect acceptable package formats
42 ##
43
44 my_ext=""
45 set +e
46 if [ -n "\$(command -v git)" ]; then
47         my_ext="git,\${my_ext}"
48 fi
49 if [ -n "\$(command -v tar)" ]; then
50         my_ext="tar,\${my_ext}"
51 fi
52 if [ -n "\$(command -v unzip)" ]; then
53         my_ext="zip,\${my_ext}"
54 fi
55 if [ -n "\$(command -v pkgutil)" ]; then
56         my_ext="pkg,\${my_ext}"
57 fi
58 if [ -n "\$(command -v diskutil)" ]; then
59         # note: could also detect via hdiutil
60         my_ext="dmg,\${my_ext}"
61 fi
62 set -e
63
64 ##
65 ## Detect http client
66 ##
67 set +e
68 export WEBI_CURL="\$(command -v curl)"
69 export WEBI_WGET="\$(command -v wget)"
70 set -e
71
72 export WEBI_BOOT="\$(mktemp -d -t "\$my_package-bootstrap.XXXXXXXX")"
73 export WEBI_UA="\$(uname -a)"
74
75 if [ -n "\$WEBI_CURL" ]; then
76         curl -fsSL "https://webinstall.dev/\$my_package?ext=\$my_ext" -H "User-Agent: curl \$WEBI_UA" \\
77                 -o "\$WEBI_BOOT/\$my_package-bootstrap.sh"
78 else
79         wget -q "https://webinstall.dev/\$my_package?ext=\$my_ext" --user-agent="wget \$WEBI_UA" \\
80                 -O "\$WEBI_BOOT/\$my_package-bootstrap.sh"
81 fi
82
83 pushd "\$WEBI_BOOT" 2>&1 > /dev/null
84         bash "\$my_package-bootstrap.sh"
85 popd 2>&1 > /dev/null
86
87 rm -rf "\$WEBI_BOOT"
88 EOF
89
90 chmod a+x ~/.local/bin/webi
91
92 }