1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2025-02-21 19:48:53 +02:00

addon.yml may now contain wildCard MAXX (#5039)

* wildCard MAXX in addon.yml for AAKaaS steps
---------

Co-authored-by: Christian Luttenberger <42861202+bluesbrother84@users.noreply.github.com>
This commit is contained in:
Tilo Körner 2024-09-12 14:44:20 +02:00 committed by GitHub
parent 085a8c003b
commit 1d659c7893
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 143 additions and 23 deletions

View File

@ -21,7 +21,7 @@ func (c *ComponentVersion) ConstructComponentVersion(repo abaputils.Repository,
if err := c.constructVersionable(repo.Name, repo.VersionYAML, conn, cvQueryURL); err != nil {
return err
}
if err := c.resolveNext(statusFilterCV); err != nil {
if err := c.resolveWildCards(statusFilterCV); err != nil {
return err
}

View File

@ -21,7 +21,7 @@ func (p *ProductVersion) ConstructProductversion(desc abaputils.AddonDescriptor,
if err := p.constructVersionable(desc.AddonProduct, desc.AddonVersionYAML, conn, pvQueryURL); err != nil {
return err
}
if err := p.resolveNext(statusFilterPV); err != nil {
if err := p.resolveWildCards(statusFilterPV); err != nil {
return err
}
return nil

View File

@ -12,7 +12,8 @@ import (
"github.com/pkg/errors"
)
const wildCard string = "NEXT"
const wildCardNext string = "NEXT"
const wildCardMax string = "MAXX"
const statusFilterCV string = "DeliveryStatus eq 'R'"
const statusFilterPV string = "DeliveryStatus eq 'T' or DeliveryStatus eq 'P'"
@ -51,21 +52,31 @@ func (v *versionable) constructVersionable(name string, dottedVersionString stri
return nil
}
func (v *versionable) resolveWildCards(statusFilter string) error {
if err := v.resolveNext(statusFilter); err != nil {
return err
}
if err := v.resolveMax(statusFilter); err != nil {
return err
}
return nil
}
func (v *versionable) resolveNext(statusFilter string) error {
switch strings.Count(v.Version, wildCard) {
switch strings.Count(v.Version, wildCardNext) {
case 0:
return nil
case 1:
log.Entry().Info("Wildcard detected in dotted-version-string. Looking up highest existing package in AAKaaS...")
var err error
switch wildCard {
switch wildCardNext {
case v.TechRelease:
err = v.resolveRelease(statusFilter)
err = v.resolveRelease(statusFilter, 1)
case v.TechSpLevel:
err = v.resolveSpLevel(statusFilter)
err = v.resolveSpLevel(statusFilter, 1)
case v.TechPatchLevel:
err = v.resolvePatchLevel(statusFilter)
err = v.resolvePatchLevel(statusFilter, 1)
}
if err != nil {
return err
@ -74,13 +85,32 @@ func (v *versionable) resolveNext(statusFilter string) error {
return err
}
default:
return errors.New("The dotted-version-string must contain only one wildcard " + wildCard)
return errors.New("The dotted-version-string must contain only one wildcard " + wildCardNext)
}
return nil
}
func (v *versionable) resolveRelease(statusFilter string) error {
func (v *versionable) resolveMax(statusFilter string) error {
if v.TechRelease == wildCardMax {
if err := v.resolveRelease(statusFilter, 0); err != nil {
return err
}
}
if v.TechSpLevel == wildCardMax {
if err := v.resolveSpLevel(statusFilter, 0); err != nil {
return err
}
}
if v.TechPatchLevel == wildCardMax {
if err := v.resolvePatchLevel(statusFilter, 0); err != nil {
return err
}
}
return nil
}
func (v *versionable) resolveRelease(statusFilter string, increment int) error {
filter := "Name eq '" + v.Name + "' and TechSpLevel eq '0000' and TechPatchLevel eq '0000' and ( " + statusFilter + " )"
orderBy := "TechRelease desc"
@ -90,13 +120,13 @@ func (v *versionable) resolveRelease(statusFilter string) error {
if newRelease, err := strconv.Atoi(queryResuult.TechRelease); err != nil {
return err
} else {
v.TechRelease = strconv.Itoa(newRelease + 1)
v.TechRelease = strconv.Itoa(newRelease + increment)
return nil
}
}
}
func (v *versionable) resolveSpLevel(statusFilter string) error {
func (v *versionable) resolveSpLevel(statusFilter string, increment int) error {
filter := "Name eq '" + v.Name + "' and TechRelease eq '" + v.TechRelease + "' and TechPatchLevel eq '0000' and ( " + statusFilter + " )"
orderBy := "TechSpLevel desc"
@ -106,13 +136,13 @@ func (v *versionable) resolveSpLevel(statusFilter string) error {
if newSpLevel, err := strconv.Atoi(queryResuult.TechSpLevel); err != nil {
return err
} else {
v.TechSpLevel = fmt.Sprintf("%04d", newSpLevel+1)
v.TechSpLevel = fmt.Sprintf("%04d", newSpLevel+increment)
return nil
}
}
}
func (v *versionable) resolvePatchLevel(statusFilter string) error {
func (v *versionable) resolvePatchLevel(statusFilter string, increment int) error {
filter := "Name eq '" + v.Name + "' and TechRelease eq '" + v.TechRelease + "' and TechSpLevel eq '" + v.TechSpLevel + "' and ( " + statusFilter + " )"
orderBy := "TechPatchLevel desc"
@ -122,7 +152,7 @@ func (v *versionable) resolvePatchLevel(statusFilter string) error {
if newPatchLevel, err := strconv.Atoi(queryResuult.TechPatchLevel); err != nil {
return err
} else {
v.TechPatchLevel = fmt.Sprintf("%04d", newPatchLevel+1)
v.TechPatchLevel = fmt.Sprintf("%04d", newPatchLevel+increment)
return nil
}
}

View File

@ -43,7 +43,7 @@ func TestCvResolve(t *testing.T) {
})
t.Run("ComponentVersion NEXT Release Existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetReleaseExisting)
err := vers.constructVersionable("DummyComp", wildCard+".0.0", *conn, cvQueryURL)
err := vers.constructVersionable("DummyComp", wildCardNext+".0.0", *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveNext(statusFilterCV)
assert.NoError(t, err)
@ -54,7 +54,7 @@ func TestCvResolve(t *testing.T) {
})
t.Run("ComponentVersion NEXT Release Non Existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetReleaseNonExisting)
err := vers.constructVersionable("DummyComp", wildCard+".0.0", *conn, cvQueryURL)
err := vers.constructVersionable("DummyComp", wildCardNext+".0.0", *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveNext(statusFilterCV)
assert.NoError(t, err)
@ -65,7 +65,7 @@ func TestCvResolve(t *testing.T) {
})
t.Run("ComponentVersion NEXT SP Level Existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetSpLevelExisting)
err := vers.constructVersionable("DummyComp", "1."+wildCard+".0", *conn, cvQueryURL)
err := vers.constructVersionable("DummyComp", "1."+wildCardNext+".0", *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveNext(statusFilterCV)
assert.NoError(t, err)
@ -77,7 +77,7 @@ func TestCvResolve(t *testing.T) {
t.Run("ComponentVersion NEXT SP Level Non Existing", func(t *testing.T) {
//This one should lead to an error later on as AOI is needed - anyway we can't just produce a differen package then customized...
mc.AddData(testDataAakaasCVGetSpLevelNonExisting)
err := vers.constructVersionable("DummyComp", "1."+wildCard+".0", *conn, cvQueryURL)
err := vers.constructVersionable("DummyComp", "1."+wildCardNext+".0", *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveNext(statusFilterCV)
assert.NoError(t, err)
@ -88,7 +88,7 @@ func TestCvResolve(t *testing.T) {
})
t.Run("ComponentVersion NEXT Patch Level Existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetPatchLevelExisting)
err := vers.constructVersionable("DummyComp", "1.3."+wildCard, *conn, cvQueryURL)
err := vers.constructVersionable("DummyComp", "1.3."+wildCardNext, *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveNext(statusFilterCV)
assert.NoError(t, err)
@ -100,7 +100,7 @@ func TestCvResolve(t *testing.T) {
t.Run("ComponentVersion NEXT Patch Level Non Existing", func(t *testing.T) {
//This one should lead to an error later on as AOI is needed - anyway we can't just produce a differen package then customized...
mc.AddData(testDataAakaasCVGetPatchLevelNonExisting)
err := vers.constructVersionable("DummyComp", "1.3."+wildCard, *conn, cvQueryURL)
err := vers.constructVersionable("DummyComp", "1.3."+wildCardNext, *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveNext(statusFilterCV)
assert.NoError(t, err)
@ -109,9 +109,10 @@ func TestCvResolve(t *testing.T) {
assert.Equal(t, "0001", vers.TechPatchLevel)
assert.Equal(t, "1.3.1", vers.Version)
})
t.Run("Product Version NEXT Release Existing", func(t *testing.T) {
mc.AddData(testDataAakaasPVGetReleaseExisting)
err := vers.constructVersionable("DummyProd", wildCard+".0.0", *conn, pvQueryURL)
err := vers.constructVersionable("DummyProd", wildCardNext+".0.0", *conn, pvQueryURL)
assert.NoError(t, err)
err = vers.resolveNext(statusFilterPV)
assert.NoError(t, err)
@ -120,9 +121,10 @@ func TestCvResolve(t *testing.T) {
assert.Equal(t, "0000", vers.TechPatchLevel)
assert.Equal(t, "2.0.0", vers.Version)
})
t.Run("Product Version NEXT Release Non Existing", func(t *testing.T) {
mc.AddData(testDataAakaasPVGetReleaseNonExisting)
err := vers.constructVersionable("DummyProd", wildCard+".0.0", *conn, pvQueryURL)
err := vers.constructVersionable("DummyProd", wildCardNext+".0.0", *conn, pvQueryURL)
assert.NoError(t, err)
err = vers.resolveNext(statusFilterPV)
assert.NoError(t, err)
@ -131,4 +133,92 @@ func TestCvResolve(t *testing.T) {
assert.Equal(t, "0000", vers.TechPatchLevel)
assert.Equal(t, "1.0.0", vers.Version)
})
t.Run("Component Version MAX Release existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetReleaseExisting)
err := vers.constructVersionable("DummyComp", wildCardMax+".0.0", *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveMax(statusFilterCV)
assert.NoError(t, err)
assert.Equal(t, "1", vers.TechRelease)
assert.Equal(t, "0000", vers.TechSpLevel)
assert.Equal(t, "0000", vers.TechPatchLevel)
})
t.Run("Component Version MAX Release non existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetReleaseNonExisting)
err := vers.constructVersionable("DummyComp", wildCardMax+".0.0", *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveMax(statusFilterCV)
assert.NoError(t, err)
assert.Equal(t, "0", vers.TechRelease)
assert.Equal(t, "0000", vers.TechSpLevel)
assert.Equal(t, "0000", vers.TechPatchLevel)
})
t.Run("Component Version MAX SP Level existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetSpLevelExisting)
err := vers.constructVersionable("DummyComp", "1."+wildCardMax+".0", *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveMax(statusFilterCV)
assert.NoError(t, err)
assert.Equal(t, "1", vers.TechRelease)
assert.Equal(t, "0007", vers.TechSpLevel)
assert.Equal(t, "0000", vers.TechPatchLevel)
})
t.Run("Component Version MAX SP Level non existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetSpLevelNonExisting)
err := vers.constructVersionable("DummyComp", "1."+wildCardMax+".0", *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveMax(statusFilterCV)
assert.NoError(t, err)
assert.Equal(t, "1", vers.TechRelease)
assert.Equal(t, "0000", vers.TechSpLevel)
assert.Equal(t, "0000", vers.TechPatchLevel)
})
t.Run("Component Version MAX Patch Level existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetPatchLevelExisting)
err := vers.constructVersionable("DummyComp", "1.3."+wildCardMax, *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveMax(statusFilterCV)
assert.NoError(t, err)
assert.Equal(t, "1", vers.TechRelease)
assert.Equal(t, "0003", vers.TechSpLevel)
assert.Equal(t, "0046", vers.TechPatchLevel)
})
t.Run("Component Version MAX Patch Level non existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetPatchLevelNonExisting)
err := vers.constructVersionable("DummyComp", "1.3."+wildCardMax, *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveMax(statusFilterCV)
assert.NoError(t, err)
assert.Equal(t, "1", vers.TechRelease)
assert.Equal(t, "0003", vers.TechSpLevel)
assert.Equal(t, "0000", vers.TechPatchLevel)
})
t.Run("Product Version MAX Release existing", func(t *testing.T) {
mc.AddData(testDataAakaasPVGetReleaseExisting)
err := vers.constructVersionable("DummyProd", wildCardMax+".0.0", *conn, pvQueryURL)
assert.NoError(t, err)
err = vers.resolveMax(statusFilterPV)
assert.NoError(t, err)
assert.Equal(t, "1", vers.TechRelease)
assert.Equal(t, "0000", vers.TechSpLevel)
assert.Equal(t, "0000", vers.TechPatchLevel)
})
t.Run("Product Version MAX Release non existing", func(t *testing.T) {
mc.AddData(testDataAakaasPVGetReleaseNonExisting)
err := vers.constructVersionable("DummyProd", wildCardMax+".0.0", *conn, pvQueryURL)
assert.NoError(t, err)
err = vers.resolveMax(statusFilterPV)
assert.NoError(t, err)
assert.Equal(t, "0", vers.TechRelease)
assert.Equal(t, "0000", vers.TechSpLevel)
assert.Equal(t, "0000", vers.TechPatchLevel)
})
}