Skip to content

Commit

Permalink
fix: sort the goversion by release date
Browse files Browse the repository at this point in the history
  • Loading branch information
Zxilly committed Feb 3, 2024
1 parent 3dd8ad9 commit fd5a0f2
Show file tree
Hide file tree
Showing 4 changed files with 542 additions and 532 deletions.
59 changes: 43 additions & 16 deletions gen/goversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,12 @@ package main
import (
"bytes"
"context"
"encoding/csv"
"fmt"
"github.com/google/go-github/v58/github"
"io"
"os"
"sort"
"strings"
"time"
)
Expand All @@ -45,8 +48,6 @@ func generateGoVersions() {
opts.Page = resp.NextPage
}

// Get mode commit info for new tags

f, err := os.OpenFile(goversionCsv, os.O_CREATE|os.O_RDWR, 0664)
if err != nil {
fmt.Println("Error when opening goversions.csv:", err)
Expand All @@ -55,24 +56,18 @@ func generateGoVersions() {
defer func(f *os.File) {
_ = f.Close()
}(f)

knownVersions, err := getCsvStoredGoversions(f)
if err != nil {
fmt.Println("Error when getting stored go versions:", err)
return
}

_, err = fmt.Fprintln(f, "version,sha,date")
if err != nil {
fmt.Println("Error when writing csv header:", err)
return
}

for _, tag := range allTags {
if strings.HasPrefix(tag.GetName(), "weekly") || strings.HasPrefix(tag.GetName(), "release") {
continue
}
if v, known := knownVersions[tag.GetName()]; known {
_, _ = fmt.Fprintf(f, "%s,%s,%s\n", v.Name, v.Sha, v.Date)
if _, known := knownVersions[tag.GetName()]; known {
continue
}

Expand All @@ -81,20 +76,52 @@ func generateGoVersions() {
fmt.Println("Error when getting commit info:", err)
return
}
_, _ = fmt.Fprintf(f, "%s,%s,%s\n", tag.GetName(), commit.GetSHA(), commit.GetCommitter().GetCreatedAt().String())
fmt.Println("New tag found:", tag.Name)
knownVersions[tag.GetName()] = &goversion{Name: tag.GetName(), Sha: commit.GetSHA(), Date: commit.GetCommitter().GetCreatedAt().String()}

fmt.Println("New tag found:", tag.GetName())
knownVersions[tag.GetName()] = &goversion{Name: tag.GetName(), Sha: commit.GetSHA(), Date: commit.GetCommit().GetCommitter().GetDate().Format(time.RFC3339)}
}

sortedVersion := make([]*goversion, 0, len(knownVersions))
for _, ver := range knownVersions {
sortedVersion = append(sortedVersion, ver)
}

sort.Slice(sortedVersion, func(i, j int) bool {
time1, err := time.Parse(time.RFC3339, sortedVersion[i].Date)
if err != nil {
fmt.Println("Error when parsing time:", err)
return false
}
time2, err := time.Parse(time.RFC3339, sortedVersion[j].Date)
if err != nil {
fmt.Println("Error when parsing time:", err)
return false
}
return time1.Before(time2)
})

// Generate the code.
buf := bytes.NewBuffer(nil)

err = f.Truncate(0)
if err != nil {
fmt.Println("Error when truncating the file:", err)
return
}
_, _ = f.Seek(0, io.SeekStart)

cw := csv.NewWriter(f)
for _, ver := range sortedVersion {
_ = cw.Write([]string{ver.Name, ver.Sha, ver.Date})
}
cw.Flush()

buf := bytes.NewBuffer(nil)
err = goversionTemplate.Execute(buf, struct {
Timestamp time.Time
GoVersions map[string]*goversion
GoVersions []*goversion
}{
Timestamp: time.Now().UTC(),
GoVersions: knownVersions,
GoVersions: sortedVersion,
})
if err != nil {
fmt.Println("Error when generating the code:", err)
Expand Down
30 changes: 7 additions & 23 deletions gen/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@
package main

import (
"bufio"
"errors"
"encoding/csv"
"fmt"
"go/format"
"os"
Expand Down Expand Up @@ -90,28 +89,13 @@ func getSourceDir() string {

func getCsvStoredGoversions(f *os.File) (map[string]*goversion, error) {
vers := make(map[string]*goversion)
r := bufio.NewScanner(f)
// Read header
if !r.Scan() {
return nil, errors.New("empty file")
c, err := csv.NewReader(f).ReadAll()
if err != nil {
return nil, err
}
r.Text()

for r.Scan() {
row := r.Text()
if row == "" {
continue
}
data := strings.Split(row, ",")
if data[0] == "" {
// No version
continue
}
version := strings.TrimSpace(data[0])
sha := strings.TrimSpace(data[1])
date := strings.TrimSpace(data[2])
vers[version] = &goversion{Name: version, Sha: sha, Date: date}
for _, line := range c {
vers[line[0]] = &goversion{Name: line[0], Sha: line[1], Date: line[2]}
}
_, err := f.Seek(0, 0)

return vers, err
}
Loading

0 comments on commit fd5a0f2

Please sign in to comment.