11package main
22
33import (
4+ "context"
45 "encoding/json"
56 "fmt"
7+ "github.com/ethereum-optimism/optimism/op-service/retry"
8+ "github.com/google/go-github/v72/github"
9+ "github.com/urfave/cli/v3"
10+ "time"
11+
12+ "log"
613 "os"
714 "strings"
8- "log"
9- "context"
10- "github.com/urfave/cli/v3"
11- "github.com/google/go-github/v72/github"
1215)
1316
1417type Info struct {
15- RepoUrl string `json:"repoUrl"`
16- Tag string `json:"tag"`
17- Commit string `json:"commit"`
18- CommitUrl string `json:"commitUrl"`
18+ RepoUrl string `json:"repoUrl"`
19+ Tag string `json:"tag"`
20+ Commit string `json:"commit"`
21+ CommitUrl string `json:"commitUrl"`
1922 VersionUrl string `json:"versionUrl"`
20- TagPrefix * string `json:"tagPrefix,omitempty"`
21- Owner string `json:"owner`
22- Repo string `json:"repo`
23+ TagPrefix string `json:"tagPrefix,omitempty"`
24+ Owner string `json:"owner`
25+ Repo string `json:"repo`
2326}
2427
2528type VersionTag []struct {
@@ -33,20 +36,19 @@ type Commit struct {
3336type Dependencies = map [string ]* Info
3437
3538func main () {
36- cmd := & cli.Command {
37- Name : "updater" ,
39+ cmd := & cli.Command {
40+ Name : "updater" ,
3841 Usage : "Updates the dependencies in the geth, nethermind and reth Dockerfiles" ,
39- Flags :
40- []cli.Flag {
41- & cli.StringFlag {
42- Name : "token" ,
43- Usage : "Auth token used to make requests to the Github API must be set using export" ,
44- Sources : cli .EnvVars ("GITHUB_TOKEN" ),
42+ Flags : []cli.Flag {
43+ & cli.StringFlag {
44+ Name : "token" ,
45+ Usage : "Auth token used to make requests to the Github API must be set using export" ,
46+ Sources : cli .EnvVars ("GITHUB_TOKEN" ),
4547 Required : true ,
4648 },
47- & cli.StringFlag {
48- Name : "repo" ,
49- Usage : "Specifies repo location to run the version updater on" ,
49+ & cli.StringFlag {
50+ Name : "repo" ,
51+ Usage : "Specifies repo location to run the version updater on" ,
5052 Required : true ,
5153 },
5254 },
@@ -80,14 +82,17 @@ func updater(token string, repoPath string) error {
8082 }
8183
8284 for dependency := range dependencies {
83- err = getAndUpdateDependency (
84- dependency ,
85- token ,
86- repoPath ,
87- dependencies ,
88- )
85+ err := retry .Do0 (context .Background (), 3 , retry .Fixed (1 * time .Second ), func () error {
86+ return getAndUpdateDependency (
87+ dependency ,
88+ token ,
89+ repoPath ,
90+ dependencies ,
91+ )
92+ })
93+
8994 if err != nil {
90- return fmt .Errorf ("error getting and updating version/commit for " + dependency + ": %s" , err )
95+ return fmt .Errorf ("error getting and updating version/commit for " + dependency + ": %s" , err )
9196 }
9297 }
9398
@@ -104,7 +109,10 @@ func getAndUpdateDependency(
104109 token string ,
105110 repoPath string ,
106111 dependencies Dependencies ) error {
107- version , commit , _ := getVersionAndCommit (token , dependencies , dependencyType )
112+ version , commit , err := getVersionAndCommit (token , dependencies , dependencyType )
113+ if err != nil {
114+ return err
115+ }
108116
109117 e := updateVersionTagAndCommit (commit , version , dependencyType , repoPath , dependencies )
110118 if e != nil {
@@ -114,64 +122,59 @@ func getAndUpdateDependency(
114122 return nil
115123}
116124
117- func getVersionAndCommit (token string , dependencies Dependencies , dependencyType string ) (string , string , error ){
125+ func getVersionAndCommit (token string , dependencies Dependencies , dependencyType string ) (string , string , error ) {
118126 client := github .NewClient (nil ).WithAuthToken (token )
119127 ctx := context .Background ()
120128
121129 var version * github.RepositoryRelease
122130 var err error
123131 // handle dependencies with prefix
124- if dependencies [dependencyType ].TagPrefix != nil {
125- releases , _ , err := client .Repositories .ListReleases (
126- ctx ,
127- dependencies [dependencyType ].Owner ,
128- dependencies [dependencyType ].Repo ,
129- nil )
132+ // if dependencies[dependencyType].TagPrefix != nil {
133+ releases , _ , err := client .Repositories .ListReleases (
134+ ctx ,
135+ dependencies [dependencyType ].Owner ,
136+ dependencies [dependencyType ].Repo ,
137+ nil )
130138
131- if err != nil {
132- return "" , "" , fmt .Errorf ("error getting releases: %s" , err )
133- }
139+ if err != nil {
140+ return "" , "" , fmt .Errorf ("error getting releases: %s" , err )
141+ }
134142
143+ if dependencies [dependencyType ].TagPrefix == "" {
144+ version = releases [0 ]
145+ } else {
135146 for release := range releases {
136- if strings .HasPrefix (* releases [release ].TagName , * dependencies [dependencyType ].TagPrefix ){
147+ if strings .HasPrefix (* releases [release ].TagName , dependencies [dependencyType ].TagPrefix ) {
137148 version = releases [release ]
138149 break
139150 }
140151 }
141- } else {
142- release , _ , err := client .Repositories .GetLatestRelease (
143- ctx ,
144- dependencies [dependencyType ].Owner ,
145- dependencies [dependencyType ].Repo )
146- if err != nil {
147- return "" , "" , fmt .Errorf ("error getting releases: %s" , err )
148- }
149- version = release
150152 }
151153
152- commit , _ , err := client .Git . GetRef (
153- ctx ,
154+ commit , _ , err := client .Repositories . GetCommit (
155+ ctx ,
154156 dependencies [dependencyType ].Owner ,
155- dependencies [dependencyType ].Repo ,
156- "refs/tags/" + * version .TagName )
157+ dependencies [dependencyType ].Repo ,
158+ "refs/tags/" + * version .TagName ,
159+ & github.ListOptions {})
157160 if err != nil {
158- return "" , "" , fmt .Errorf ("error getting commit for " + dependencyType + ": %s" , err )
161+ return "" , "" , fmt .Errorf ("error getting commit for " + dependencyType + ": %s" , err )
159162 }
160163
161- return * version .TagName , * commit .Object . SHA , nil
164+ return * version .TagName , * commit .SHA , nil
162165}
163166
164167func updateVersionTagAndCommit (
165- commit string ,
166- tag string ,
168+ commit string ,
169+ tag string ,
167170 dependencyType string ,
168- repoPath string ,
171+ repoPath string ,
169172 dependencies Dependencies ) error {
170173 dependencies [dependencyType ].Tag = tag
171174 dependencies [dependencyType ].Commit = commit
172175 err := writeToVersionsEnv (repoPath , dependencies )
173176 if err != nil {
174- return fmt .Errorf ("error writing to versions " + dependencyType + ": %s" , err )
177+ return fmt .Errorf ("error writing to versions " + dependencyType + ": %s" , err )
175178 }
176179 return nil
177180}
@@ -183,7 +186,7 @@ func writeToVersionsEnv(repoPath string, dependencies Dependencies) error {
183186 return fmt .Errorf ("error Marshaling dependencies json: %s" , err )
184187 }
185188
186- e := os .WriteFile (repoPath + "/versions.json" , updatedJson , 0644 )
189+ e := os .WriteFile (repoPath + "/versions.json" , updatedJson , 0644 )
187190 if e != nil {
188191 return fmt .Errorf ("error writing to versions.json: %s" , e )
189192 }
@@ -197,14 +200,14 @@ func createVersionsEnv(repoPath string, dependencies Dependencies) error {
197200 for dependency := range dependencies {
198201 dependencyPrefix := strings .ToUpper (dependency )
199202
200- envLines = append (envLines , fmt .Sprintf ("export %s_%s=%s \n " ,
201- dependencyPrefix , "TAG" , dependencies [dependency ].Tag ))
203+ envLines = append (envLines , fmt .Sprintf ("export %s_%s=%s \n " ,
204+ dependencyPrefix , "TAG" , dependencies [dependency ].Tag ))
202205
203206 envLines = append (envLines , fmt .Sprintf ("export %s_%s=%s \n " ,
204- dependencyPrefix , "COMMIT" , dependencies [dependency ].Commit ))
207+ dependencyPrefix , "COMMIT" , dependencies [dependency ].Commit ))
205208
206209 envLines = append (envLines , fmt .Sprintf ("export %s_%s=%s \n \n " ,
207- dependencyPrefix , "REPO" , dependencies [dependency ].RepoUrl ))
210+ dependencyPrefix , "REPO" , dependencies [dependency ].RepoUrl ))
208211 }
209212
210213 file , err := os .Create (repoPath + "/versions.env" )
@@ -219,4 +222,4 @@ func createVersionsEnv(repoPath string, dependencies Dependencies) error {
219222 }
220223
221224 return nil
222- }
225+ }
0 commit comments