89 lines
1.6 KiB
Go
89 lines
1.6 KiB
Go
package healthcheck
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/go-git/go-git/v5"
|
|
"github.com/go-git/go-git/v5/plumbing"
|
|
)
|
|
|
|
func catTags(all []string) (out string) {
|
|
out = ""
|
|
for _, str := range all {
|
|
out += str + " "
|
|
}
|
|
return out
|
|
}
|
|
|
|
func getTagsFromRepo(repoPath string) ([]string, error) {
|
|
repo, err := git.PlainOpen(repoPath)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Cannot open repo: %v", err)
|
|
}
|
|
|
|
refs, err := repo.Tags()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Cannot get tags: %v", err)
|
|
}
|
|
|
|
var tags []string
|
|
err = refs.ForEach(func(ref *plumbing.Reference) error {
|
|
tags = append(tags, ref.Name().Short())
|
|
return nil
|
|
})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Error while iterating tags: %v", err)
|
|
}
|
|
|
|
return tags, nil
|
|
}
|
|
|
|
func CheckReleases(repoPath string, category string, n int) (jsonOut CheckStage) {
|
|
jsonOut = CheckStage{
|
|
Name: "ReleaseCheck",
|
|
StdOut: "Checking release tag: ",
|
|
ExitCode: 0,
|
|
StdErr: "",
|
|
}
|
|
|
|
tags, err := getTagsFromRepo(repoPath)
|
|
if err != nil {
|
|
log.Fatalf("Error in getting tags: %v", err)
|
|
}
|
|
|
|
var prefix string
|
|
|
|
switch category {
|
|
case "exam":
|
|
prefix = "e"
|
|
case "project":
|
|
prefix = "p"
|
|
case "homework":
|
|
prefix = "h"
|
|
default:
|
|
prefix = "a"
|
|
}
|
|
|
|
target := prefix + fmt.Sprintf("%d", n)
|
|
found := false
|
|
for _, tag := range tags {
|
|
if tag == target {
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
if !found {
|
|
tagList := catTags(tags)
|
|
jsonOut.ExitCode = 107
|
|
jsonOut.StdOut = "Failed"
|
|
jsonOut.StdErr = fmt.Sprintf("wrong release tag '%s', please use one of %s aborting", target, tagList)
|
|
return jsonOut
|
|
}
|
|
|
|
jsonOut.StdOut += "OK"
|
|
jsonOut.ExitCode = 0
|
|
jsonOut.StdErr = "Fine"
|
|
return jsonOut
|
|
}
|