2
2
3
3
set -e
4
4
5
- if [[ " $OSTYPE " == " linux" * ]]; then
6
- OS=" linux"
7
- elif [[ " $OSTYPE " == " darwin" * ]]; then
8
- OS=" macos"
9
- else
10
- OS=" unknown"
11
- fi
12
-
13
5
ansi_blue=' \033[94m'
6
+ ansi_dim=' \033[2m'
14
7
ansi_green=' \033[92m'
15
8
ansi_red=' \033[91m'
16
9
ansi_yellow=' \033[93m'
@@ -19,6 +12,9 @@ ansi_reset='\033[0m'
19
12
function print_blue() {
20
13
printf " ${ansi_blue} %b${ansi_reset} " " $1 "
21
14
}
15
+ function print_dim() {
16
+ printf " ${ansi_dim} %b${ansi_reset} " " $1 "
17
+ }
22
18
function print_green() {
23
19
printf " ${ansi_green} %b${ansi_reset} " " $1 "
24
20
}
@@ -38,8 +34,9 @@ function log_warning() {
38
34
39
35
function fetch_latest_binary() {
40
36
local github_repo=" $1 "
41
- local dir_path=" $2 "
42
- local binary_name=" $3 "
37
+ local os_name=" $2 "
38
+ local dir_path=" $3 "
39
+ local binary_name=" $4 "
43
40
44
41
# detect which fetch tool is available on the machine
45
42
local fetch_tool
@@ -69,39 +66,43 @@ function fetch_latest_binary() {
69
66
| sed -E ' s/.*"tag_name": "(.*)",/\1/' \
70
67
| head -1 \
71
68
) "
72
- local binary_urls=" $( \
69
+ # this is just used to validate that there are any binary urls
70
+ # resolved for the latest release
71
+ # (to determine if the GH call failed or if there's just not a file for this OS)
72
+ local latest_binary_urls=" $( \
73
73
echo " $releases_res " \
74
74
| grep " releases/download/$latest_version /gpt_cmd-" \
75
+ ) "
76
+ local os_binary_url=" $( \
77
+ echo " $releases_res " \
78
+ | grep " releases/download/$latest_version /gpt_cmd-${os_name} " \
75
79
| sed -E ' s/[ \t]+"browser_download_url": "([^"]+)",?/\1/' \
76
80
) "
77
- local latest_binary_url=" "
78
- for url in $binary_urls ; do
79
- os=" $( echo " $url " | sed -E ' s|.*/gpt_cmd-([^.]*).*|\1|' ) "
80
- if [ " $os " = " $OS " ]; then
81
- latest_binary_url=" $url "
82
- break
83
- fi
84
- done
85
- if [ -z " $latest_binary_url " ]; then
86
- local error_file_name=" gpt_cmd_install-error_$( date +" %Y-%m-%d_%H-%M-%S" ) .log"
87
- echo -e " ERROR: unable to find release binary\n" >> " $error_file_name "
88
- echo -e " GitHub releases response body:\n$releases_res " >> " $error_file_name "
81
+ if [ -z " $os_binary_url " ]; then
82
+ echo " "
83
+ if [ -n " $latest_binary_urls " ]; then
84
+ log_error " no binary found for OS '${os_name} ' on latest release"
85
+ else
86
+ local error_file_name=" gpt_cmd_install-error_$( date +" %Y-%m-%d_%H-%M-%S" ) .log"
87
+ echo -e " ERROR: unable to find release binary\n" >> " $error_file_name "
88
+ echo -e " GitHub releases response body:\n$releases_res " >> " $error_file_name "
89
89
90
- log_error " unable to find release binary; see $error_file_name for more info"
90
+ log_error " unable to lookup release binaries; see $error_file_name for more info"
91
+ fi
91
92
exit 1
92
93
fi
93
94
94
95
# fetch the binary
95
- local file_name=" $( basename " $latest_binary_url " ) "
96
+ local file_name=" $( basename " $os_binary_url " ) "
96
97
local file_path=" $dir_path /$file_name "
97
98
case $fetch_tool in
98
99
curl)
99
- curl -L -s -S -o " $file_path " " $latest_binary_url " ;;
100
+ curl -L -s -S -o " $file_path " " $os_binary_url " ;;
100
101
wget)
101
- wget -q -O " $file_path " " $latest_binary_url " ;;
102
+ wget -q -O " $file_path " " $os_binary_url " ;;
102
103
esac
103
104
if [ ! -e " $file_path " ]; then
104
- log_error " failed to fetch latest release binary ($latest_binary_url )"
105
+ log_error " failed to fetch latest release binary ($os_binary_url )"
105
106
exit 1
106
107
fi
107
108
@@ -111,11 +112,12 @@ function fetch_latest_binary() {
111
112
112
113
function make_binary_executable() {
113
114
local file_path=" $1 "
115
+ local os_name=" $2 "
114
116
115
117
chmod +x " $file_path "
116
118
117
119
# try to make MacOS trust the binary file
118
- if [ " $OS " = " macos " ]; then
120
+ if [[ " $os_name " == " darwin " * ] ]; then
119
121
if command -v xattr > /dev/null; then
120
122
if xattr -p com.apple.quarantine " $file_path " & > /dev/null; then
121
123
xattr -d com.apple.quarantine " $file_path "
@@ -142,33 +144,47 @@ function get_profile_file() {
142
144
done
143
145
}
144
146
145
- function run_install() {
146
- if [ " $OS " = " unknown" ]; then
147
- log_error " OS type '$OSTYPE ' not recognized as a supported OS"
148
- exit 1
149
- fi
147
+ function get_os_name() {
148
+ local os=$( uname -s | tr ' [:upper:]' ' [:lower:]' )
149
+ local arch=$( uname -m)
150
+
151
+ case " $arch " in
152
+ x86_64)
153
+ arch=" amd64" ;;
154
+ i686)
155
+ arch=" 386" ;;
156
+ aarch64)
157
+ arch=" arm64" ;;
158
+ armv7l)
159
+ arch=" arm" ;;
160
+ esac
161
+
162
+ echo " ${os} -${arch} "
163
+ }
150
164
165
+ function run_install() {
166
+ local os_name=" $( get_os_name) "
151
167
local install_dir=" $HOME /.gpt_cmd"
152
- echo " Installing to ${install_dir} "
168
+ print_blue " Installing to ${install_dir} \n "
153
169
154
- print_blue " Attempting to fetch latest binary..."
170
+ print_dim " Attempting to fetch latest binary..."
155
171
local repo_name=" chrisdothtml/gpt-cmd"
156
172
local binary_dir_path=" $install_dir /bin"
157
173
local binary_name=" gpt_cmd"
158
174
mkdir -p " $binary_dir_path "
159
- fetch_latest_binary " $repo_name " " $binary_dir_path " " $binary_name "
175
+ fetch_latest_binary " $repo_name " " $os_name " " $ binary_dir_path" " $binary_name "
160
176
echo " ✅"
161
177
162
- print_blue " Making binary executable on your system..."
178
+ print_dim " Making binary executable on your system..."
163
179
local binary_file_path=" $binary_dir_path /$binary_name "
164
- make_binary_executable " $binary_file_path "
180
+ make_binary_executable " $binary_file_path " " $os_name "
165
181
echo " ✅"
166
182
167
183
local path_update_str=" export PATH=\" ${binary_dir_path} :\$ PATH\" "
168
184
local profile_file
169
185
if ! command -v gpt_cmd > /dev/null; then
170
186
profile_file=" $( get_profile_file) "
171
- print_blue " Exposing binary to PATH..."
187
+ print_dim " Exposing binary to PATH..."
172
188
echo -e " \n$path_update_str " >> " $profile_file "
173
189
echo " ✅"
174
190
fi
0 commit comments