Fix: Skip draft releases in update checker

Bug: Pulse was showing update notifications for draft releases because
the update checker didn't filter them out.

The GitHub API returns draft releases in the releases endpoint, and
Pulse was treating them as available updates even though they're not
published yet.

Fix:
- Added Draft field to ReleaseInfo struct
- Added draft filtering in both RC and stable channel logic
- Draft releases are now skipped with debug logging

This prevents users from seeing "Update available" notifications
when maintainers create draft releases during the release workflow.
This commit is contained in:
rcourtman 2025-11-12 12:31:58 +00:00
parent a5b51de3f1
commit 72642a2e52

View file

@ -38,6 +38,7 @@ type ReleaseInfo struct {
Name string `json:"name"` Name string `json:"name"`
Body string `json:"body"` Body string `json:"body"`
Prerelease bool `json:"prerelease"` Prerelease bool `json:"prerelease"`
Draft bool `json:"draft"`
PublishedAt time.Time `json:"published_at"` PublishedAt time.Time `json:"published_at"`
Assets []struct { Assets []struct {
Name string `json:"name"` Name string `json:"name"`
@ -595,6 +596,12 @@ func (m *Manager) getLatestReleaseForChannel(ctx context.Context, channel string
var newestStable *ReleaseInfo var newestStable *ReleaseInfo
for i := range releases { for i := range releases {
// Skip draft releases
if releases[i].Draft {
log.Debug().Str("tag", releases[i].TagName).Msg("Skipping draft release")
continue
}
releaseVer, err := ParseVersion(releases[i].TagName) releaseVer, err := ParseVersion(releases[i].TagName)
if err != nil { if err != nil {
log.Debug().Str("tag", releases[i].TagName).Err(err).Msg("Failed to parse release version") log.Debug().Str("tag", releases[i].TagName).Err(err).Msg("Failed to parse release version")
@ -665,6 +672,12 @@ func (m *Manager) getLatestReleaseForChannel(ctx context.Context, channel string
} else { } else {
// For stable channel: find latest non-prerelease // For stable channel: find latest non-prerelease
for i := range releases { for i := range releases {
// Skip draft releases
if releases[i].Draft {
log.Debug().Str("tag", releases[i].TagName).Msg("Skipping draft release")
continue
}
if releases[i].Prerelease { if releases[i].Prerelease {
continue continue
} }