summaryrefslogtreecommitdiffstats
path: root/pkg/release_notes/release_notes.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/release_notes/release_notes.go')
-rw-r--r--pkg/release_notes/release_notes.go73
1 files changed, 73 insertions, 0 deletions
diff --git a/pkg/release_notes/release_notes.go b/pkg/release_notes/release_notes.go
new file mode 100644
index 000000000..e667527e9
--- /dev/null
+++ b/pkg/release_notes/release_notes.go
@@ -0,0 +1,73 @@
+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")
+}