add option to include github prereleases

This commit is contained in:
Mystically 2025-01-09 21:19:13 +01:00
parent 85b8ee493e
commit ed477e8cc6
4 changed files with 47 additions and 23 deletions

View File

@ -18,11 +18,23 @@ type githubReleaseLatestResponseJson struct {
}
func fetchLatestGithubRelease(request *ReleaseRequest) (*AppRelease, error) {
httpRequest, err := http.NewRequest(
"GET",
fmt.Sprintf("https://api.github.com/repos/%s/releases/latest", request.Repository),
nil,
)
var httpRequest *http.Request
var err error
var response githubReleaseLatestResponseJson
if request.IncludeGithubPreReleases {
httpRequest, err = http.NewRequest(
"GET",
fmt.Sprintf("https://api.github.com/repos/%s/releases", request.Repository),
nil,
)
} else {
httpRequest, err = http.NewRequest(
"GET",
fmt.Sprintf("https://api.github.com/repos/%s/releases/latest", request.Repository),
nil,
)
}
if err != nil {
return nil, err
@ -32,10 +44,19 @@ func fetchLatestGithubRelease(request *ReleaseRequest) (*AppRelease, error) {
httpRequest.Header.Add("Authorization", "Bearer "+(*request.Token))
}
response, err := decodeJsonFromRequest[githubReleaseLatestResponseJson](defaultClient, httpRequest)
if request.IncludeGithubPreReleases {
releases, err := decodeJsonFromRequest[[]githubReleaseLatestResponseJson](defaultClient, httpRequest)
if err != nil {
return nil, err
if err != nil {
return nil, err
}
response = releases[0]
} else {
response, err = decodeJsonFromRequest[githubReleaseLatestResponseJson](defaultClient, httpRequest)
if err != nil {
return nil, err
}
}
return &AppRelease{

View File

@ -16,9 +16,10 @@ const (
)
type ReleaseRequest struct {
Source ReleaseSource
Repository string
Token *string
Source ReleaseSource
Repository string
Token *string
IncludeGithubPreReleases bool
}
func FetchLatestReleases(requests []*ReleaseRequest) (AppReleases, error) {

View File

@ -49,7 +49,7 @@ func NewConfigFromYml(contents io.Reader) (*Config, error) {
func NewConfig() *Config {
config := &Config{}
config.Server.Host = ""
config.Server.Host = "127.0.0.1"
config.Server.Port = 8080
return config

View File

@ -12,15 +12,16 @@ import (
)
type Releases struct {
widgetBase `yaml:",inline"`
Releases feed.AppReleases `yaml:"-"`
releaseRequests []*feed.ReleaseRequest `yaml:"-"`
Repositories []string `yaml:"repositories"`
Token OptionalEnvString `yaml:"token"`
GitLabToken OptionalEnvString `yaml:"gitlab-token"`
Limit int `yaml:"limit"`
CollapseAfter int `yaml:"collapse-after"`
ShowSourceIcon bool `yaml:"show-source-icon"`
widgetBase `yaml:",inline"`
Releases feed.AppReleases `yaml:"-"`
releaseRequests []*feed.ReleaseRequest `yaml:"-"`
Repositories []string `yaml:"repositories"`
Token OptionalEnvString `yaml:"token"`
GitLabToken OptionalEnvString `yaml:"gitlab-token"`
Limit int `yaml:"limit"`
CollapseAfter int `yaml:"collapse-after"`
ShowSourceIcon bool `yaml:"show-source-icon"`
IncludeGithubPreReleases bool `yaml:"include-github-prereleases"`
}
func (widget *Releases) Initialize() error {
@ -42,8 +43,9 @@ func (widget *Releases) Initialize() error {
var request *feed.ReleaseRequest
if len(parts) == 1 {
request = &feed.ReleaseRequest{
Source: feed.ReleaseSourceGithub,
Repository: repository,
Source: feed.ReleaseSourceGithub,
Repository: repository,
IncludeGithubPreReleases: widget.IncludeGithubPreReleases,
}
if widget.Token != "" {