refactor: move changelog file to updater interface (#15)

This commit is contained in:
Julian Tölle 2024-08-23 22:17:38 +02:00 committed by GitHub
parent 47de2f97bc
commit f0eed8cc56
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 79 additions and 151 deletions

View file

@ -3,14 +3,8 @@ package rp
import (
"bytes"
_ "embed"
"fmt"
"html/template"
"io"
"log"
"os"
"regexp"
"github.com/go-git/go-git/v5"
)
const (
@ -20,8 +14,6 @@ const (
var (
changelogTemplate *template.Template
headerRegex = regexp.MustCompile(`^# Changelog\n`)
)
//go:embed changelog.md.tpl
@ -35,60 +27,6 @@ func init() {
}
}
func UpdateChangelogFile(wt *git.Worktree, newEntry string) error {
file, err := wt.Filesystem.OpenFile(ChangelogFile, os.O_RDWR|os.O_CREATE, 0644)
if err != nil {
return err
}
defer file.Close()
content, err := io.ReadAll(file)
if err != nil {
return err
}
headerIndex := headerRegex.FindIndex(content)
if headerIndex == nil && len(content) != 0 {
return fmt.Errorf("unexpected format of CHANGELOG.md, header does not match")
}
if headerIndex != nil {
// Remove the header from the content
content = content[headerIndex[1]:]
}
err = file.Truncate(0)
if err != nil {
return err
}
_, err = file.Seek(0, io.SeekStart)
if err != nil {
return err
}
_, err = file.Write([]byte(ChangelogHeader + "\n\n" + newEntry))
if err != nil {
return err
}
_, err = file.Write(content)
if err != nil {
return err
}
// Close file to make sure it is written to disk.
err = file.Close()
if err != nil {
return err
}
_, err = wt.Add(ChangelogFile)
if err != nil {
return err
}
return nil
}
func NewChangelogEntry(commits []AnalyzedCommit, version, link, prefix, suffix string) (string, error) {
features := make([]AnalyzedCommit, 0)
fixes := make([]AnalyzedCommit, 0)