return history properly sorted

This commit is contained in:
anianz
2020-11-11 12:55:48 +01:00
parent cbbfd94fbb
commit df1fd83256
3 changed files with 15 additions and 5 deletions

View File

@@ -3,6 +3,7 @@ package main
import ( import (
"encoding/json" "encoding/json"
"os" "os"
"sort"
resource "github.com/cioplenu/concourse-nomad-resource" resource "github.com/cioplenu/concourse-nomad-resource"
"github.com/cioplenu/concourse-nomad-resource/common" "github.com/cioplenu/concourse-nomad-resource/common"
@@ -21,16 +22,19 @@ func main() {
lastVersion := request.Version.Version lastVersion := request.Version.Version
history := common.GetHistory(request.Source) history := common.GetHistory(request.Source)
sort.Sort(history) // Nomad provides history from newest to oldest
versions := make([]resource.Version, 0) versions := make([]resource.Version, 0)
for _, jobVersion := range history { for i, jobVersion := range history {
// Only return the current version and newer ones
if lastVersion != 0 && lastVersion > jobVersion.Version { if lastVersion != 0 && lastVersion > jobVersion.Version {
continue continue
} }
versions = append(versions, resource.Version{jobVersion.Version}) // If no version was provided return only the latest
if lastVersion == 0 { if lastVersion == 0 && i < len(history)-1 {
break continue
} }
versions = append(versions, resource.Version{jobVersion.Version})
} }
json.NewEncoder(os.Stdout).Encode(versions) json.NewEncoder(os.Stdout).Encode(versions)

View File

@@ -17,7 +17,7 @@ func Check(err error, msg string) {
} }
} }
func GetHistory(source resource.Source) []resource.JobVersion { func GetHistory(source resource.Source) resource.History {
cmd := exec.Command( cmd := exec.Command(
"nomad", "nomad",
"job", "job",

View File

@@ -12,6 +12,12 @@ type JobVersion struct {
SubmitTime int SubmitTime int
} }
type History []JobVersion
func (h History) Len() int { return len(h) }
func (h History) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
func (h History) Less(i, j int) bool { return h[i].Version < h[j].Version }
type Version struct { type Version struct {
Version int `json:"Version,string"` Version int `json:"Version,string"`
} }