mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-02-25 18:55:28 -06:00
We're using glamour for rendering the markdown, and I'm interested in using it in other places too
74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
package release_notes
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// Represents the JSON structure of a GitHub release
|
|
type Release struct {
|
|
Name string `json:"name"`
|
|
PublishedAt string `json:"published_at"`
|
|
Body string `json:"body"`
|
|
}
|
|
|
|
// Fetches the last 5 releases from the lazygit repository and returns the information as a string
|
|
func GetLazyGitReleases() (string, error) {
|
|
url := "https://api.github.com/repos/jesseduffield/lazygit/releases?per_page=5"
|
|
|
|
resp, err := http.Get(url)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
body, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
var releases []Release
|
|
err = json.Unmarshal(body, &releases)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
var sb strings.Builder
|
|
|
|
sb.WriteString("_These are the latest release notes for lazygit. They are pulled straight from GitHub so if you're not on the latest version, you can see what you're missing out on!_\n\n")
|
|
|
|
for _, release := range releases {
|
|
sb.WriteString(fmt.Sprintf("# Version %s\n\n", release.Name))
|
|
sb.WriteString(fmt.Sprintf("_Released on %s_\n", formatDate(release.PublishedAt)))
|
|
sb.WriteString(fmt.Sprintf("%s\n", release.Body))
|
|
sb.WriteString("--------------------------------------------------\n")
|
|
}
|
|
|
|
return sb.String(), nil
|
|
}
|
|
|
|
func formatDate(dateStr string) string {
|
|
parsedDate, err := time.Parse(time.RFC3339, dateStr)
|
|
if err != nil {
|
|
return "Unknown date"
|
|
}
|
|
|
|
day := fmt.Sprintf("%d", parsedDate.Day())
|
|
switch day {
|
|
case "1", "21", "31":
|
|
day += "st"
|
|
case "2", "22":
|
|
day += "nd"
|
|
case "3", "23":
|
|
day += "rd"
|
|
default:
|
|
day += "th"
|
|
}
|
|
|
|
return parsedDate.Format("January " + day + " 2006")
|
|
}
|