Skip to content

Commit a734324

Browse files
Merge pull request #39 from devtron-labs/fix-stack-manager-issues
fix: stack Manager issues
2 parents 9fe2361 + 053e784 commit a734324

15 files changed

Lines changed: 1492 additions & 8 deletions

File tree

api/RestHandler.go

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package api
1818

1919
import (
2020
"encoding/json"
21+
"github.com/Masterminds/semver"
2122
util "github.com/devtron-labs/central-api/client"
2223
"github.com/devtron-labs/central-api/common"
2324
"github.com/devtron-labs/central-api/pkg"
@@ -27,6 +28,7 @@ import (
2728
"io/ioutil"
2829
"net/http"
2930
"strconv"
31+
"strings"
3032
)
3133

3234
type RestHandler interface {
@@ -120,15 +122,18 @@ func (impl *RestHandlerImpl) GetReleases(w http.ResponseWriter, r *http.Request)
120122
size := 10
121123
var err error
122124
offsetQueryParam := r.URL.Query().Get("offset")
123-
if len(offsetQueryParam) > 0 {
125+
sizeQueryParam := r.URL.Query().Get("size")
126+
hasOffsetParam := len(offsetQueryParam) > 0
127+
hasSizeParam := len(sizeQueryParam) > 0
128+
129+
if hasOffsetParam {
124130
offset, err = strconv.Atoi(offsetQueryParam)
125131
if err != nil {
126132
impl.WriteJsonResp(w, err, "invalid offset", http.StatusBadRequest)
127133
return
128134
}
129135
}
130-
sizeQueryParam := r.URL.Query().Get("size")
131-
if len(sizeQueryParam) > 0 {
136+
if hasSizeParam {
132137
size, err = strconv.Atoi(sizeQueryParam)
133138
if err != nil {
134139
impl.WriteJsonResp(w, err, "invalid size", http.StatusBadRequest)
@@ -140,18 +145,40 @@ func (impl *RestHandlerImpl) GetReleases(w http.ResponseWriter, r *http.Request)
140145
if len(repo) > 0 {
141146
repository = bean.Repository(repo)
142147
}
148+
serverVersion := r.URL.Query().Get("serverVersion")
143149
//will fetch all the releases from cache and later apply size and offset filter
144150
response, err := impl.releaseNoteService.GetReleases(repository)
145151
if err != nil {
146152
impl.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
147153
return
148154
}
155+
if len(serverVersion) > 0 {
156+
// get all releases of that version and above that version
157+
var filteredResponse []*common.Release
158+
for _, release := range response {
159+
// Compare version strings - include matching version and newer versions
160+
if release.TagName == serverVersion || isVersionNewer(release.TagName, serverVersion) {
161+
filteredResponse = append(filteredResponse, release)
162+
}
163+
}
164+
response = filteredResponse
149165

150-
if size > 0 {
151-
if offset+size <= len(response) {
152-
response = response[offset : offset+size]
153-
} else {
154-
response = response[offset:]
166+
// If serverVersion is provided, only apply pagination if size are explicitly provided
167+
if hasSizeParam && size > 0 {
168+
if offset+size <= len(response) {
169+
response = response[offset : offset+size]
170+
} else {
171+
response = response[offset:]
172+
}
173+
}
174+
} else {
175+
// If serverVersion is not provided, apply pagination with default or provided values
176+
if size > 0 {
177+
if offset+size <= len(response) {
178+
response = response[offset : offset+size]
179+
} else {
180+
response = response[offset:]
181+
}
155182
}
156183
}
157184
if len(response) == 0 {
@@ -230,3 +257,26 @@ func (impl *RestHandlerImpl) GetBuildpackMetadata(w http.ResponseWriter, r *http
230257
impl.WriteJsonResp(w, nil, buildpackMetadata, http.StatusOK)
231258
return
232259
}
260+
261+
// isVersionNewer compares two version strings and returns true if v1 is newer than v2
262+
func isVersionNewer(v1, v2 string) bool {
263+
// Ensure 'v' prefix is present for semver parsing
264+
if !strings.HasPrefix(v1, "v") {
265+
v1 = "v" + v1
266+
}
267+
if !strings.HasPrefix(v2, "v") {
268+
v2 = "v" + v2
269+
}
270+
271+
// Parse versions
272+
ver1, err1 := semver.NewVersion(v1)
273+
ver2, err2 := semver.NewVersion(v2)
274+
275+
// Fall back to string comparison if parsing fails
276+
if err1 != nil || err2 != nil {
277+
return strings.TrimPrefix(v1, "v") > strings.TrimPrefix(v2, "v")
278+
}
279+
280+
// Compare using semver
281+
return ver1.GreaterThan(ver2)
282+
}

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ module github.com/devtron-labs/central-api
33
go 1.18
44

55
require (
6+
github.com/Masterminds/semver v1.5.0
67
github.com/caarlos0/env v3.5.0+incompatible
78
github.com/devtron-labs/common-lib v0.0.16-0.20240318063710-69cb957d019a
89
github.com/go-pg/pg v6.15.1+incompatible

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZ
3232
github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
3333
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
3434
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
35+
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
36+
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
3537
github.com/aws/aws-sdk-go v1.44.116 h1:NpLIhcvLWXJZAEwvPj3TDHeqp7DleK6ZUVYyW01WNHY=
3638
github.com/aws/aws-sdk-go v1.44.116/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
3739
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=

vendor/github.com/Masterminds/semver/.travis.yml

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/Masterminds/semver/CHANGELOG.md

Lines changed: 109 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/Masterminds/semver/LICENSE.txt

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/Masterminds/semver/Makefile

Lines changed: 36 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)