@@ -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