JOJ3/pkg/healthcheck/release.go
张泊明518370910136 05876c290d
feat: file check
squash all previous commits
2024-09-11 07:44:08 -04:00

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
}