Skip to content

Commit 6a662a3

Browse files
committed
Fix GitHub API 404 error in verify-release-assets.js
1 parent 5d152f0 commit 6a662a3

File tree

1 file changed

+81
-21
lines changed

1 file changed

+81
-21
lines changed

scripts/verify-release-assets.js

Lines changed: 81 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,35 +25,95 @@ async function verifyReleaseAssets() {
2525
throw new Error("GITHUB_TOKEN environment variable is required");
2626
}
2727

28-
// Fetch all releases (including drafts)
28+
// Fetch all releases (including drafts) with retry logic
2929
const tagName = `v${version}`;
30-
31-
console.log(`📡 Fetching all releases to find: ${tagName}`);
32-
33-
const allReleasesUrl = `https://api.github.com/repos/${owner}/${repo}/releases`;
34-
const response = await fetch(allReleasesUrl, {
35-
headers: {
36-
Authorization: `token ${token}`,
37-
Accept: "application/vnd.github.v3+json",
38-
"User-Agent": "dyad-release-verifier",
39-
},
40-
});
41-
42-
if (!response.ok) {
43-
throw new Error(
44-
`GitHub API error: ${response.status} ${response.statusText}`,
45-
);
30+
const maxRetries = 5;
31+
const baseDelay = 10000; // 10 seconds
32+
33+
let release = null;
34+
let lastError = null;
35+
36+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
37+
try {
38+
console.log(`📡 Attempt ${attempt}/${maxRetries}: Fetching all releases to find: ${tagName}`);
39+
console.log(`🔗 API URL: https://api.github.com/repos/${owner}/${repo}/releases`);
40+
41+
const allReleasesUrl = `https://api.github.com/repos/${owner}/${repo}/releases`;
42+
const response = await fetch(allReleasesUrl, {
43+
headers: {
44+
Authorization: `token ${token}`,
45+
Accept: "application/vnd.github.v3+json",
46+
"User-Agent": "dyad-release-verifier",
47+
},
48+
});
49+
50+
console.log(`📡 API Response Status: ${response.status} ${response.statusText}`);
51+
52+
if (!response.ok) {
53+
console.error(`❌ GitHub API error details:`);
54+
console.error(` Status: ${response.status}`);
55+
console.error(` Status Text: ${response.statusText}`);
56+
console.error(` URL: ${allReleasesUrl}`);
57+
console.error(` Headers:`, Object.fromEntries(response.headers.entries()));
58+
59+
// Try to get response body for more details
60+
try {
61+
const errorBody = await response.text();
62+
console.error(` Response Body: ${errorBody}`);
63+
} catch (e) {
64+
console.error(` Could not read error response body: ${e.message}`);
65+
}
66+
67+
throw new Error(
68+
`GitHub API error: ${response.status} ${response.statusText}`,
69+
);
70+
}
71+
72+
const allReleases = await response.json();
73+
console.log(`📦 Total releases found: ${allReleases.length}`);
74+
console.log(`🔍 Available release tags:`, allReleases.map(r => r.tag_name).slice(0, 10));
75+
76+
release = allReleases.find((r) => r.tag_name === tagName);
77+
78+
if (release) {
79+
console.log(`✅ Found release on attempt ${attempt}: ${release.tag_name} (${release.draft ? 'DRAFT' : 'PUBLISHED'})`);
80+
break;
81+
} else {
82+
console.warn(`⚠️ Release ${tagName} not found on attempt ${attempt}. Available releases (first 10):`);
83+
allReleases.slice(0, 10).forEach(r => {
84+
console.warn(` - ${r.tag_name} (${r.draft ? 'DRAFT' : 'PUBLISHED'})`);
85+
});
86+
87+
if (attempt < maxRetries) {
88+
const delay = baseDelay * attempt; // Exponential backoff: 10s, 20s, 30s, 40s, 50s
89+
console.log(`⏳ Waiting ${delay / 1000} seconds before retry...`);
90+
await new Promise(resolve => setTimeout(resolve, delay));
91+
}
92+
}
93+
} catch (error) {
94+
lastError = error;
95+
console.error(`❌ Attempt ${attempt} failed:`, error.message);
96+
97+
if (attempt < maxRetries) {
98+
const delay = baseDelay * attempt;
99+
console.log(`⏳ Waiting ${delay / 1000} seconds before retry...`);
100+
await new Promise(resolve => setTimeout(resolve, delay));
101+
}
102+
}
46103
}
47104

48-
const allReleases = await response.json();
49-
const release = allReleases.find((r) => r.tag_name === tagName);
50-
51105
if (!release) {
106+
console.error(`❌ Release ${tagName} not found after ${maxRetries} attempts!`);
107+
if (lastError) {
108+
console.error(`Last error: ${lastError.message}`);
109+
}
52110
throw new Error(
53-
`Release ${tagName} not found in published releases or drafts. Make sure the release exists.`,
111+
`Release ${tagName} not found in published releases or drafts after retries. Make sure the release exists.`,
54112
);
55113
}
56114

115+
console.log(`✅ Found release: ${release.tag_name} (${release.draft ? 'DRAFT' : 'PUBLISHED'})`);
116+
57117
const assets = release.assets || [];
58118

59119
console.log(`📦 Found ${assets.length} assets in release ${tagName}`);

0 commit comments

Comments
 (0)