@@ -25,12 +25,11 @@ type Info struct {
2525 Repo string `json:"repo`
2626}
2727
28- type VersionTag []struct {
29- Tag string `json:"tag_name"`
30- }
31-
32- type Commit struct {
33- Commit string `json:"sha"`
28+ type VersionUpdateInfo struct {
29+ Repo string
30+ From string
31+ To string
32+ DiffUrl string
3433}
3534
3635type Dependencies = map [string ]* Info
@@ -73,6 +72,8 @@ func main() {
7372
7473func updater (token string , repoPath string , commit bool ) error {
7574 var err error
75+ var dependencies Dependencies
76+ var updatedDependencies []VersionUpdateInfo
7677
7778 f , err := os .ReadFile (repoPath + "/versions.json" )
7879 if err != nil {
@@ -82,32 +83,32 @@ func updater(token string, repoPath string, commit bool) error {
8283 client := github .NewClient (nil ).WithAuthToken (token )
8384 ctx := context .Background ()
8485
85- var updatedDependencies [][]string
86- var dependencies Dependencies
87-
8886 err = json .Unmarshal (f , & dependencies )
8987 if err != nil {
9088 return fmt .Errorf ("error unmarshaling versions JSON to dependencies: %s" , err )
9189 }
9290
9391 for dependency := range dependencies {
94- err := retry .Do0 (context .Background (), 3 , retry .Fixed (1 * time .Second ), func () error {
95- return getAndUpdateDependency (
92+ var updatedDependency VersionUpdateInfo
93+ err := retry .Do0 (context .Background (), 3 , retry .Fixed (1 * time .Second ), func () error {
94+ updatedDependency , err = getAndUpdateDependency (
9695 ctx ,
9796 client ,
9897 dependency ,
9998 repoPath ,
10099 dependencies ,
101- & updatedDependencies ,
102100 )
101+ return err
103102 })
104103
105104 if err != nil {
106105 return fmt .Errorf ("error getting and updating version/commit for " + dependency + ": %s" , err )
107106 }
107+
108+ updatedDependencies = append (updatedDependencies , updatedDependency )
108109 }
109110
110- if commit {
111+ if commit && updatedDependencies != nil {
111112 err := createCommitMessage (updatedDependencies )
112113 if err != nil {
113114 return fmt .Errorf ("error creating commit message: %s" , err )
@@ -122,42 +123,42 @@ func updater(token string, repoPath string, commit bool) error {
122123 return nil
123124}
124125
125- func createCommitMessage (updatedDependencies [][] string ) error {
126+ func createCommitMessage (updatedDependencies []VersionUpdateInfo ) error {
126127 commitTitle := "chore: updated "
127128 var commitDescription = "Updated dependencies for: \n "
129+ var repos []string
128130 for _ , dependency := range updatedDependencies {
129- if len ( dependency ) != 0 {
130- repo , tag := dependency [ 0 ] , dependency [ 1 ]
131- commitDescription += repo + " => " + tag + " (" + dependency [ 2 ] + ")" + "\n "
132- commitTitle += repo + ", "
131+ if dependency != ( VersionUpdateInfo {}) {
132+ repo , tag := dependency . Repo , dependency . To
133+ commitDescription += repo + " => " + tag + " (" + dependency . DiffUrl + ")" + "\n "
134+ repos = append ( repos , repo )
133135 }
134136 }
135- commitTitle = strings .TrimSuffix ( commitTitle , ", " )
137+ commitTitle + = strings .Join ( repos , ", " )
136138 cmd := exec .Command ("git" , "commit" , "-am" , commitTitle , "-m" , commitDescription )
137139 if err := cmd .Run (); err != nil {
138140 return fmt .Errorf ("error running git commit -m: %s" , err )
139141 }
140142 return nil
141143}
142144
143- func getAndUpdateDependency (ctx context.Context , client * github.Client , dependencyType string , repoPath string , dependencies Dependencies , updatedDependencies * [][] string ) error {
144- version , commit , err := getVersionAndCommit (ctx , client , dependencies , dependencyType , updatedDependencies )
145+ func getAndUpdateDependency (ctx context.Context , client * github.Client , dependencyType string , repoPath string , dependencies Dependencies ) ( VersionUpdateInfo , error ) {
146+ version , commit , updatedDependency , err := getVersionAndCommit (ctx , client , dependencies , dependencyType )
145147 if err != nil {
146- return err
148+ return VersionUpdateInfo {}, err
147149 }
148150
149151 e := updateVersionTagAndCommit (commit , version , dependencyType , repoPath , dependencies )
150152 if e != nil {
151- return fmt .Errorf ("error updating version tag and commit: %s" , e )
153+ return VersionUpdateInfo {}, fmt .Errorf ("error updating version tag and commit: %s" , e )
152154 }
153155
154- return nil
156+ return updatedDependency , nil
155157}
156158
157- func getVersionAndCommit (ctx context.Context , client * github.Client , dependencies Dependencies , dependencyType string , updatedDependencies * [][] string ) (string , string , error ) {
159+ func getVersionAndCommit (ctx context.Context , client * github.Client , dependencies Dependencies , dependencyType string ) (string , string , VersionUpdateInfo , error ) {
158160 var version * github.RepositoryRelease
159161 var err error
160- var updates []string
161162 var diffUrl string
162163 foundPrefixVersion := false
163164 options := & github.ListOptions {Page : 1 }
@@ -170,18 +171,14 @@ func getVersionAndCommit(ctx context.Context, client *github.Client, dependencie
170171 options )
171172
172173 if err != nil {
173- return "" , "" , fmt .Errorf ("error getting releases: %s" , err )
174+ return "" , "" , VersionUpdateInfo {}, fmt .Errorf ("error getting releases: %s" , err )
174175 }
175176
176177 if dependencies [dependencyType ].TagPrefix == "" {
177178 version = releases [0 ]
178179 if * version .TagName != dependencies [dependencyType ].Tag {
179- diffUrl = "https://github.com/" +
180- dependencies [dependencyType ].Owner + "/" +
181- dependencies [dependencyType ].Repo + "/compare/" +
182- dependencies [dependencyType ].Tag + "..." + * version .TagName
183-
184- updates = append (updates , dependencies [dependencyType ].Repo , * version .TagName , diffUrl )
180+ diffUrl = generateGithubRepoUrl (dependencies , dependencyType ) + "/compare/" +
181+ dependencies [dependencyType ].Tag + "..." + * version .TagName
185182 }
186183 break
187184 } else if dependencies [dependencyType ].TagPrefix != "" {
@@ -190,12 +187,8 @@ func getVersionAndCommit(ctx context.Context, client *github.Client, dependencie
190187 version = releases [release ]
191188 foundPrefixVersion = true
192189 if * version .TagName != dependencies [dependencyType ].Tag {
193- diffUrl = "https://github.com/" +
194- dependencies [dependencyType ].Owner + "/" +
195- dependencies [dependencyType ].Repo + "/compare/" +
196- dependencies [dependencyType ].Tag + "..." + * version .TagName
197-
198- updates = append (updates , dependencies [dependencyType ].Repo , * version .TagName , diffUrl )
190+ diffUrl = generateGithubRepoUrl (dependencies , dependencyType ) + "/compare/" +
191+ dependencies [dependencyType ].Tag + "..." + * version .TagName
199192 }
200193 break
201194 }
@@ -209,7 +202,12 @@ func getVersionAndCommit(ctx context.Context, client *github.Client, dependencie
209202 }
210203 }
211204
212- * updatedDependencies = append (* updatedDependencies , updates )
205+ updatedDependency := VersionUpdateInfo {
206+ dependencies [dependencyType ].Repo ,
207+ dependencies [dependencyType ].Tag ,
208+ * version .TagName ,
209+ diffUrl ,
210+ }
213211
214212 commit , _ , err := client .Repositories .GetCommit (
215213 ctx ,
@@ -218,10 +216,10 @@ func getVersionAndCommit(ctx context.Context, client *github.Client, dependencie
218216 "refs/tags/" + * version .TagName ,
219217 & github.ListOptions {})
220218 if err != nil {
221- return "" , "" , fmt .Errorf ("error getting commit for " + dependencyType + ": %s" , err )
219+ return "" , "" , VersionUpdateInfo {}, fmt .Errorf ("error getting commit for " + dependencyType + ": %s" , err )
222220 }
223221
224- return * version .TagName , * commit .SHA , nil
222+ return * version .TagName , * commit .SHA , updatedDependency , nil
225223}
226224
227225func updateVersionTagAndCommit (
@@ -258,9 +256,7 @@ func createVersionsEnv(repoPath string, dependencies Dependencies) error {
258256 envLines := []string {}
259257
260258 for dependency := range dependencies {
261- repoUrl := "https://github.com/" +
262- dependencies [dependency ].Owner + "/" +
263- dependencies [dependency ].Repo + ".git"
259+ repoUrl := generateGithubRepoUrl (dependencies , dependency ) + ".git"
264260
265261 dependencyPrefix := strings .ToUpper (dependency )
266262
@@ -289,3 +285,7 @@ func createVersionsEnv(repoPath string, dependencies Dependencies) error {
289285
290286 return nil
291287}
288+
289+ func generateGithubRepoUrl (dependencies Dependencies , dependencyType string ) string {
290+ return "https://github.com/" + dependencies [dependencyType ].Owner + "/" + dependencies [dependencyType ].Repo + "/"
291+ }
0 commit comments