package healthcheck import ( "fmt" "strings" "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" ) 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 { return fmt.Errorf("Wrong release tag '%s'. Please use one of '%s'.", target, strings.Join(tags, "', '")) } return nil }