71 lines
1.3 KiB
Go
71 lines
1.3 KiB
Go
package healthcheck
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"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("error opening repo: %v", err)
|
|
}
|
|
|
|
refs, err := repo.Tags()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error getting 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 iterating tags: %v", err)
|
|
}
|
|
|
|
return tags, nil
|
|
}
|
|
|
|
func CheckReleases(repoPath string, category string, n int) error {
|
|
tags, err := getTagsFromRepo(repoPath)
|
|
if err != nil {
|
|
return fmt.Errorf("error 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)
|
|
return fmt.Errorf("Wrong release tag '%s'. Please use one of %s.", target, tagList)
|
|
}
|
|
return nil
|
|
}
|