2020-10-09 17:47:59 +03:00
|
|
|
package checker
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
2020-10-13 18:35:55 +03:00
|
|
|
"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
|
2020-10-13 18:35:55 +03:00
|
|
|
Logf func(s string, f ...interface{})
|
|
|
|
}
|
|
|
|
|
|
|
|
type logger struct {
|
|
|
|
message string
|
|
|
|
}
|
|
|
|
|
|
|
|
func (l *logger) Logf(s string, f ...interface{}) {
|
|
|
|
l.message += 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 {
|
2020-10-19 02:49:51 +03:00
|
|
|
checker.Logf("error, retrying: %s", res.Error)
|
2020-10-13 18:35:55 +03:00
|
|
|
continue
|
|
|
|
}
|
|
|
|
break
|
|
|
|
}
|
|
|
|
res.Details = l.message
|
|
|
|
return res
|
2020-10-09 17:47:59 +03:00
|
|
|
}
|