forked from evergreen-ci/evergreen
/
runner.go
75 lines (61 loc) · 2.03 KB
/
runner.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package repotracker
import (
"github.com/10gen-labs/slogger/v1"
"github.com/evergreen-ci/evergreen"
"github.com/evergreen-ci/evergreen/db"
"github.com/evergreen-ci/evergreen/model"
"time"
)
type Runner struct{}
const (
RunnerName = "repotracker"
Description = "poll version control for new commits"
)
func (r *Runner) Name() string {
return RunnerName
}
func (r *Runner) Description() string {
return Description
}
func (r *Runner) Run(config *evergreen.Settings) error {
lockAcquired, err := db.WaitTillAcquireGlobalLock(RunnerName, db.LockTimeout)
if err != nil {
return evergreen.Logger.Errorf(slogger.ERROR, "Error acquiring global lock: %v", err)
}
if !lockAcquired {
return evergreen.Logger.Errorf(slogger.ERROR, "Timed out acquiring global lock")
}
defer func() {
if err := db.ReleaseGlobalLock(RunnerName); err != nil {
evergreen.Logger.Errorf(slogger.ERROR, "Error releasing global lock: %v", err)
}
}()
startTime := time.Now()
evergreen.Logger.Logf(slogger.INFO, "Running repository tracker with db “%v”", config.Db)
allProjects, err := model.FindAllTrackedProjectRefs()
if err != nil {
return evergreen.Logger.Errorf(slogger.ERROR, "Error finding tracked projects %v", err)
}
for _, projectRef := range allProjects {
tracker := &RepoTracker{
config,
&projectRef,
NewGithubRepositoryPoller(&projectRef, config.Credentials["github"]),
}
numNewRepoRevisionsToFetch := config.RepoTracker.NumNewRepoRevisionsToFetch
if numNewRepoRevisionsToFetch <= 0 {
numNewRepoRevisionsToFetch = DefaultNumNewRepoRevisionsToFetch
}
err = tracker.FetchRevisions(numNewRepoRevisionsToFetch)
if err != nil {
evergreen.Logger.Errorf(slogger.ERROR, "Error fetching revisions: %v", err)
continue
}
}
runtime := time.Now().Sub(startTime)
if err = model.SetProcessRuntimeCompleted(RunnerName, runtime); err != nil {
return evergreen.Logger.Errorf(slogger.ERROR, "Error updating process status: %v", err)
}
evergreen.Logger.Logf(slogger.INFO, "Repository tracker took %v to run", runtime)
return nil
}