2
2
set -e
3
3
releases=$( mktemp)
4
4
5
- maybe_trace () {
5
+ setup () {
6
6
if [ -n " $trace " ]; then
7
7
set -x
8
8
fi
9
+ b=' `'
10
+ headers_file=$( mktemp)
9
11
}
10
12
11
13
list_releases () {
12
- releases_url =" https://api.github.com/repos/$repo /releases"
14
+ releases_url_base =" https://api.github.com/repos/$repo /releases"
13
15
if [ -n " $version " ]; then
14
- releases_url=" $releases_url /tags/$version "
16
+ releases_url=" $releases_url_base /tags/$version "
17
+ else
18
+ releases_url=" $releases_url_base "
19
+ fi
20
+ curl -D " $headers_file " -H " $AUTHORIZATION_HEADER " -q -s -L " $releases_url " -o " $releases "
21
+ response_code=$( get_response_code)
22
+ if [ $response_code -eq 404 ]; then
23
+ if [ -n " $version " ]; then
24
+ curl -D " $headers_file " -H " $AUTHORIZATION_HEADER " -q -s -L " $releases_url_base " -o " /dev/null"
25
+ releases_response_code=$( get_response_code)
26
+ if [ $releases_response_code -eq 404 ]; then
27
+ releases_is_404=1
28
+ fi
29
+ else
30
+ releases_is_404=1
31
+ fi
32
+ if [ -n " $releases_is_404 " ]; then
33
+ if [ -n " $token_is_not_gh_token " ]; then
34
+ hint=" If the repository $b $repo $b is private then the provided $b token $b does not have access to the repository."
35
+ else
36
+ hint=" If the repository $b $repo $b is private then provide a $b token $b ."
37
+ fi
38
+ else
39
+ hint=" The specified version $b $version $b of $b $repo $b is missing; either it never existed or it was deleted. Check the version and the releases page."
40
+ fi
15
41
fi
16
- curl -H " $AUTHORIZATION_HEADER " -q -s -L " $releases_url " -o " $releases "
42
+ validate_response_code " $response_code " " $releases " " $releases_url "
17
43
}
18
44
19
45
find_artifact () {
@@ -98,6 +124,39 @@ get_content_length() {
98
124
' " $1 "
99
125
}
100
126
127
+ validate_response_code () {
128
+ case " $1 " in
129
+ 2* )
130
+ return
131
+ ;;
132
+ 401)
133
+ title=' Bad credentials'
134
+ if [ -z " $hint " ]; then
135
+ hint=" Either the provided $b token $b was never valid for repository $b $repo $b , it was revoked/deleted, or it expired. Try replacing it."
136
+ fi
137
+ ;;
138
+ 404)
139
+ title=' Server reported resource not found'
140
+ ;;
141
+ * )
142
+ title=Unexpected http response code
143
+ ;;
144
+ esac
145
+ (
146
+ echo " ## $title ($b $1 $b )"
147
+ if [ -n " $hint " ]; then
148
+ echo " $hint "
149
+ fi
150
+ echo
151
+ echo " $b $3 $b :"
152
+ echo
153
+ echo ' ```'
154
+ head -c 10240 " $2 "
155
+ echo ' ```'
156
+ ) | tee -a " $GITHUB_STEP_SUMMARY " >&2
157
+ exit 1
158
+ }
159
+
101
160
validate_file_length () {
102
161
perl -e '
103
162
my $artifact=$ENV{artifact};
@@ -121,13 +180,18 @@ shasum() {
121
180
' " $1 "
122
181
}
123
182
183
+ get_response_code () {
184
+ perl -e ' $/="\r\n\r\n"; my $code = -1; while (<>) { $_ =~ s/\n.*/\n/s; next unless m!HTTP/\S+\s+(\d+)!; $code=$1;} print $code;' " $headers_file "
185
+ }
186
+
124
187
download_artifact () {
125
188
temp_file=$( mktemp)
126
- headers_file=$( mktemp)
127
189
curl -D " $headers_file " -H " $AUTHORIZATION_HEADER " -o " $temp_file " -q -s -L " $artifact "
190
+ response_code=$( get_response_code)
128
191
content_length=$( get_content_length " $headers_file " )
129
192
request_id=$( grep -i ^x-github-request-id: " $headers_file " | tail -1)
130
- echo " Downloaded $artifact - content-length: $content_length ; shasum256: $( shasum " $temp_file " ) ; $request_id "
193
+ echo " Downloaded $artifact - status: $response_code ; content-length: $content_length ; shasum256: $( shasum " $temp_file " ) ; $request_id "
194
+ validate_response_code " $response_code " " $temp_file " " $artifact "
131
195
content_length=" $content_length " artifact=" $artifact " temp_file=" $temp_file " validate_file_length
132
196
133
197
echo " url=$artifact " >> " $GITHUB_OUTPUT "
@@ -224,7 +288,7 @@ maybe_extract_artifact() {
224
288
fi
225
289
}
226
290
227
- maybe_trace
291
+ setup
228
292
set_up_auth
229
293
list_releases
230
294
select_artifact
0 commit comments