@@ -520,12 +520,38 @@ jobs:
520520 // Fetch releases from GitHub API
521521 let url = URL(string: "https://api.github.com/repos/${{ github.repository }}/releases")!
522522 let task = URLSession.shared.dataTask(with: url) { data, response, error in
523+ if let error = error {
524+ print("Network error: \(error)")
525+ exit(1)
526+ }
527+
528+ guard let httpResponse = response as? HTTPURLResponse else {
529+ print("Invalid response type")
530+ exit(1)
531+ }
532+
523533 guard let data = data else {
524- print("Failed to fetch releases")
534+ print("No data received")
535+ exit(1)
536+ }
537+
538+ // Log response for debugging
539+ if httpResponse.statusCode != 200 {
540+ print("HTTP \(httpResponse.statusCode): \(String(data: data, encoding: .utf8) ?? "unknown error")")
525541 exit(1)
526542 }
527543
528544 do {
545+ // First try to decode as a GitHubError to handle API errors
546+ if let errorResponse = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
547+ let message = errorResponse["message"] as? String {
548+ print("GitHub API Error: \(message)")
549+ if let documentationUrl = errorResponse["documentation_url"] as? String {
550+ print("Documentation: \(documentationUrl)")
551+ }
552+ exit(1)
553+ }
554+
529555 let releases = try JSONDecoder().decode([GitHubRelease].self, from: data)
530556 let prodReleases = releases.filter { !$0.prerelease && !$0.assets.isEmpty }
531557 .sorted { lhs, rhs in
@@ -538,7 +564,8 @@ jobs:
538564 print("✅ Production appcast generated successfully")
539565 exit(0)
540566 } catch {
541- print("Error: \(error)")
567+ print("JSON Decoding Error: \(error)")
568+ print("Raw response: \(String(data: data, encoding: .utf8) ?? "Unable to decode")")
542569 exit(1)
543570 }
544571 }
0 commit comments