Compare commits

...

4 Commits

5 changed files with 91 additions and 6 deletions

34
.drone.yml Normal file
View File

@ -0,0 +1,34 @@
---
kind: pipeline
name: coopcloud.tech/tagcmp
steps:
- name: make check
image: golang:1.17
commands:
- make check
- name: make build
image: golang:1.17
commands:
- make build
- name: make test
image: golang:1.17
commands:
- make test
- name: notify on failure
image: plugins/matrix
settings:
homeserver: https://matrix.autonomic.zone
roomid: "IFazIpLtxiScqbHqoa:autonomic.zone"
userid: "@autono-bot:autonomic.zone"
accesstoken:
from_secret: autono_bot_access_token
depends_on:
- make check
- make build
- make test
when:
status:
- failure

8
Makefile Normal file
View File

@ -0,0 +1,8 @@
build:
@go build .
check:
@test -z $$(gofmt -l .) || (echo "gofmt: formatting issue - run 'make format' to resolve" && exit 1)
test:
@go test . -cover

View File

@ -1,5 +1,6 @@
# tagcmp
[![Build Status](https://build.coopcloud.tech/api/badges/coop-cloud/tagcmp/status.svg?ref=refs/heads/main)](https://build.coopcloud.tech/coop-cloud/tagcmp)
[![Go Report Card](https://goreportcard.com/badge/git.coopcloud.tech/coop-cloud/tagcmp)](https://goreportcard.com/report/git.coopcloud.tech/coop-cloud/tagcmp)
Comparison operations for image tags. Because registries aren't doing this for

View File

@ -12,6 +12,7 @@ Package tagcmp provides image tag comparison operations\.
- [Variables](<#variables>)
- [func IsParsable(tag string) bool](<#func-isparsable>)
- [func UpgradeType(t Tag) int](<#func-upgradetype>)
- [type ByTagAsc](<#type-bytagasc>)
- [func (t ByTagAsc) Len() int](<#func-bytagasc-len>)
- [func (t ByTagAsc) Less(i, j int) bool](<#func-bytagasc-less>)
@ -27,6 +28,7 @@ Package tagcmp provides image tag comparison operations\.
- [func (t Tag) IsGreaterThan(tag Tag) bool](<#func-tag-isgreaterthan>)
- [func (t Tag) IsLessThan(tag Tag) bool](<#func-tag-islessthan>)
- [func (t Tag) String() string](<#func-tag-string>)
- [func (curTag Tag) UpgradeElement(newTag Tag) (Tag, error)](<#func-tag-upgradeelement>)
## Variables
@ -69,6 +71,14 @@ func IsParsable(tag string) bool
IsParsable determines if a tag is supported by this library
## func UpgradeType
```go
func UpgradeType(t Tag) int
```
UpgradeType takes exit from UpgradeElemene and returns a numeric representation of upgrade or downgrade 1/\-1: patch 2/\-2: minor 4/\-4: major 0: no change
## type ByTagAsc
ByTagAsc sorts tags in ascending order where the last element is the latest tag\.
@ -183,6 +193,14 @@ func (t Tag) String() string
String formats a Tag correctly in string representation
### func \(Tag\) UpgradeElement
```go
func (curTag Tag) UpgradeElement(newTag Tag) (Tag, error)
```
UpgradeElement returns a Tag object which is the difference between an old and new tag It can contain negative numbers if comparing with an older tag\.
Generated by [gomarkdoc](<https://github.com/princjef/gomarkdoc>)

View File

@ -173,12 +173,36 @@ func (curTag Tag) UpgradeElement(newTag Tag) (Tag, error) {
return Tag{}, fmt.Errorf("%s and %s are not compatible with each other", curTag.String(), newTag.String())
}
diff := curTag
diff.Major(strconv.Itoa(strconv.Atoi(newTag.Major) - strconv.Atoi(curTag.Major)))
curMajor, err := strconv.Atoi(curTag.Major)
if err != nil {
return Tag{}, err
}
curMinor, err := strconv.Atoi(curTag.Minor)
if err != nil {
return Tag{}, err
}
curPatch, err := strconv.Atoi(curTag.Patch)
if err != nil {
return Tag{}, err
}
newMajor, err := strconv.Atoi(newTag.Major)
if err != nil {
return Tag{}, err
}
newMinor, err := strconv.Atoi(newTag.Minor)
if err != nil {
return Tag{}, err
}
newPatch, err := strconv.Atoi(newTag.Patch)
if err != nil {
return Tag{}, err
}
diff.Major = strconv.Itoa(newMajor - curMajor)
if !curTag.MissingMinor {
diff.Minor(strconv.Itoa(strconv.Atoi(newTag.Minor) - strconv.Atoi(curTag.Minor)))
diff.Minor = strconv.Itoa(newMinor - curMinor)
}
if !curTag.MissingPatch {
diff.Patch(strconv.Itoa(strconv.Atoi(newTag.Patch) - strconv.Atoi(curTag.Patch)))
diff.Patch = strconv.Itoa(newPatch - curPatch)
}
return diff, nil
@ -188,16 +212,16 @@ func (curTag Tag) UpgradeElement(newTag Tag) (Tag, error) {
// 1/-1: patch 2/-2: minor 4/-4: major 0: no change
func UpgradeType(t Tag) int {
var major, minor, patch int
major = strconv.Atoi(t.Major)
major, _ = strconv.Atoi(t.Major)
if t.MissingMinor {
minor = 0
} else {
minor = strconv.Atoi(t.Minor)
minor, _ = strconv.Atoi(t.Minor)
}
if t.MissingPatch {
patch = 0
} else {
patch := strconv.Atoi(t.Patch)
patch, _ = strconv.Atoi(t.Patch)
}
if major > 0 {
return 4