scorecard/checker/checker.go

49 lines
849 B
Go
Raw Normal View History

2020-10-09 17:47:59 +03:00
package checker
import (
"context"
"fmt"
2020-10-09 17:47:59 +03:00
"net/http"
"github.com/google/go-github/v32/github"
)
type Checker struct {
Ctx context.Context
Client *github.Client
HttpClient *http.Client
Owner, Repo string
Logf func(s string, f ...interface{})
}
type logger struct {
messages []string
}
func (l *logger) Logf(s string, f ...interface{}) {
l.messages = append(l.messages, fmt.Sprintf(s+"\n", f...))
}
type Runner struct {
Checker Checker
}
func (r *Runner) Run(f CheckFn) CheckResult {
var res CheckResult
var l logger
for retriesRemaining := 3; retriesRemaining > 0; retriesRemaining-- {
checker := r.Checker
l = logger{}
checker.Logf = l.Logf
res = f(checker)
if res.ShouldRetry {
checker.Logf("error, retrying: %s", res.Error)
continue
}
break
}
res.Details = l.messages
return res
2020-10-09 17:47:59 +03:00
}