Skip to content

Commit b5d9568

Browse files
committed
fix: always update pending versions
1 parent 5cc2ab7 commit b5d9568

3 files changed

Lines changed: 35 additions & 19 deletions

File tree

installer/services/search.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func InitOpenSearch() error {
4242

4343
_, err = grequests.Put(baseURL+"_index_template/utmstack_indexes", &grequests.RequestOptions{
4444
JSON: map[string]any{
45-
"index_patterns": []string{"alert-*", "log-*", ".utm-*", ".utmstack-*"},
45+
"index_patterns": []string{"v11-alert-", "v11-log-", ".utm-", ".utmstack-"},
4646
"template": map[string]any{
4747
"settings": map[string]any{
4848
"index.number_of_shards": 1,

installer/updater/client.go

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -115,24 +115,20 @@ func (c *UpdaterClient) CheckUpdate() error {
115115
updates = append(updates, newUpdate)
116116
}
117117

118-
currentVersion, err := GetVersion()
119-
if err != nil {
120-
return fmt.Errorf("error getting current version: %v", err)
121-
}
122-
123118
sortedUpdates := SortVersions(updates)
124119

125120
for _, update := range sortedUpdates {
126-
if update["version"] != currentVersion.Version {
127-
err := c.UpdateToNewVersion(update["version"], update["edition"], update["changelog"])
121+
// Apply all updates from the server regardless of current version
122+
// This allows for rollbacks, pre-release type changes (alpha→dev), and ensures all updates are applied in order
123+
// The server is responsible for only sending pending updates (marked as sent after application)
124+
err := c.UpdateToNewVersion(update["version"], update["edition"], update["changelog"])
125+
if err != nil {
126+
return fmt.Errorf("error updating to new version: %v", err)
127+
}
128+
if update["id"] != "offline" {
129+
err = c.MarkUpdateSent(update["id"])
128130
if err != nil {
129-
return fmt.Errorf("error updating to new version: %v", err)
130-
}
131-
if update["id"] != "offline" {
132-
err = c.MarkUpdateSent(update["id"])
133-
if err != nil {
134-
return fmt.Errorf("error marking update as sent: %v", err)
135-
}
131+
return fmt.Errorf("error marking update as sent: %v", err)
136132
}
137133
}
138134
}

installer/updater/versions.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,8 @@ func ParseVersion(versionStr string) Version {
127127
versionStr = strings.TrimPrefix(versionStr, "V")
128128

129129
// Parse version with regex: X.Y.Z or X.Y.Z-type.num
130-
re := regexp.MustCompile(`^(\d+)\.(\d+)\.(\d+)(?:-(alpha|beta|rc)\.(\d+))?$`)
130+
// Supports: dev, alpha, beta, rc
131+
re := regexp.MustCompile(`^(\d+)\.(\d+)\.(\d+)(?:-(dev|alpha|beta|rc)\.(\d+))?$`)
131132
matches := re.FindStringSubmatch(versionStr)
132133

133134
if len(matches) > 1 {
@@ -161,11 +162,30 @@ func CompareVersions(v1, v2 Version) int {
161162
return v1.Patch - v2.Patch
162163
}
163164

164-
if v1.PrereleaseNum != v2.PrereleaseNum {
165-
return v1.PrereleaseNum - v2.PrereleaseNum
165+
// Handle stable vs prerelease versions
166+
// According to semver: stable version (no prerelease) is GREATER than any prerelease
167+
// Example: v11.0.0 > v11.0.0-rc.1 > v11.0.0-beta.1 > v11.0.0-alpha.1 > v11.0.0-dev.1
168+
if v1.PrereleaseName == "" && v2.PrereleaseName != "" {
169+
return 1 // v1 is stable, v2 is prerelease → v1 > v2
170+
}
171+
if v1.PrereleaseName != "" && v2.PrereleaseName == "" {
172+
return -1 // v1 is prerelease, v2 is stable → v1 < v2
173+
}
174+
175+
// Both are prereleases or both are stable
176+
if v1.PrereleaseName != v2.PrereleaseName {
177+
// Compare prerelease type names: dev < alpha < beta < rc
178+
order := map[string]int{
179+
"dev": 1,
180+
"alpha": 2,
181+
"beta": 3,
182+
"rc": 4,
183+
}
184+
return order[v1.PrereleaseName] - order[v2.PrereleaseName]
166185
}
167186

168-
return 0
187+
// Same prerelease type, compare numbers
188+
return v1.PrereleaseNum - v2.PrereleaseNum
169189
}
170190

171191
func SortVersions(versions []map[string]string) []map[string]string {

0 commit comments

Comments
 (0)