@@ -18,16 +18,34 @@ public struct Fetcher {
18
18
return decoder
19
19
} ( )
20
20
21
- static func fetch( repository: GitHubRepository ) async throws -> [ Release ] {
22
- Logger . shared. info ( " ℹ️ Fetching \( repository. apiURL) " )
23
- let url = repository. apiURL
24
- let ( data, _) = try await URLSession . shared. data ( from: url)
25
- let releases = try decoder. decode ( [ Release ] . self, from: data)
26
- Logger . shared. info ( " ✅ Fetched \( repository. apiURL) " )
27
- return releases
21
+ static func fetch( repository: GitHubRepository , accessToken: String ? ) async throws -> [ Release ] {
22
+ do {
23
+ Logger . shared. info ( " ℹ️ Fetching \( repository. apiURL) " )
24
+ let url = repository. apiURL
25
+ var request = URLRequest ( url: url)
26
+ request. setValue ( " application/vnd.github+json " , forHTTPHeaderField: " Accept " )
27
+ request. setValue ( " 2022-11-28 " , forHTTPHeaderField: " X-GitHub-Api-Version " )
28
+ if let accessToken {
29
+ request. setValue ( " Bearer \( accessToken) " , forHTTPHeaderField: " Authorization " )
30
+ Logger . shared. info ( " ℹ️ Set bearer token " )
31
+ }
32
+ let ( data, _) = try await URLSession . shared. data ( for: request)
33
+ do {
34
+ Logger . shared. info ( " ✅ Fetched \( repository. apiURL) " )
35
+ let releases = try decoder. decode ( [ Release ] . self, from: data)
36
+ Logger . shared. info ( " ✅ Parsed \( repository. apiURL) " )
37
+ return releases
38
+ } catch {
39
+ Logger . shared. info ( " ❌ Parse failed \( repository. apiURL) , error: \( error) , data: \( String ( data: data, encoding: . utf8) ?? " nil " ) " )
40
+ throw error
41
+ }
42
+ } catch {
43
+ Logger . shared. info ( " ❌ Fetch failed \( repository. apiURL) , error: \( error) " )
44
+ throw error
45
+ }
28
46
}
29
47
30
- public static func fetch( repositories: [ GitHubRepository ] ) async throws -> [ GitHubRepository : [ Release ] ] {
48
+ public static func fetch( repositories: [ GitHubRepository ] , accessToken : String ? ) async throws -> [ GitHubRepository : [ Release ] ] {
31
49
defer {
32
50
Logger . shared. info ( " 🎉 \( #function) finished " )
33
51
}
@@ -36,7 +54,7 @@ public struct Fetcher {
36
54
for repository in repositories {
37
55
group. addTask {
38
56
do {
39
- let releases = try await fetch ( repository: repository)
57
+ let releases = try await fetch ( repository: repository, accessToken : accessToken )
40
58
return ( repository, releases)
41
59
} catch {
42
60
Logger . shared. error ( " ❌ \( #function) failed " )
0 commit comments