You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
948 B
Go

package changelog
import (
_ "embed"
"encoding/json"
"sync"
)
//go:embed data/changelog.json
var embedded []byte
// Release is one curated release note block keyed by Version (must match internal/version.Version when you want it shown).
type Release struct {
Version string `json:"version"`
Title string `json:"title"`
Items []string `json:"items"`
}
type fileShape struct {
Releases []Release `json:"releases"`
}
var (
loadOnce sync.Once
parsed fileShape
loadErr error
)
func load() {
loadOnce.Do(func() {
loadErr = json.Unmarshal(embedded, &parsed)
})
}
// ForVersion returns the release entry for the given server version, or nil if none (no modal).
func ForVersion(serverVersion string) *Release {
load()
if loadErr != nil || serverVersion == "" {
return nil
}
for i := range parsed.Releases {
if parsed.Releases[i].Version == serverVersion {
r := parsed.Releases[i]
return &r
}
}
return nil
}