@@ -3,80 +3,27 @@ package processors
3
3
import (
4
4
"context"
5
5
"fmt"
6
- "hash/fnv"
7
6
"os"
8
- "strconv"
9
- "strings"
10
7
8
+ "github.com/golangci/golangci-shared/pkg/config"
11
9
"github.com/golangci/golangci-shared/pkg/logutil"
12
10
"github.com/golangci/golangci-worker/app/lib/executors"
11
+ "github.com/golangci/golangci-worker/app/lib/experiments"
13
12
"github.com/golangci/golangci-worker/app/lib/github"
14
13
"github.com/pkg/errors"
15
14
)
16
15
17
- func hash (s string ) uint32 {
18
- h := fnv .New32a ()
19
- _ , _ = h .Write ([]byte (s ))
20
- return h .Sum32 ()
21
- }
22
-
23
- func getEnabledRepoNamesForContainerExperiment () map [string ]bool {
24
- repos := os .Getenv ("CONTAINER_EXECUTOR_EXPERIMENT_REPOS" )
25
- if repos == "" {
26
- return map [string ]bool {}
27
- }
28
-
29
- repoList := strings .Split (repos , "," )
30
- ret := map [string ]bool {}
31
- for _ , r := range repoList {
32
- ret [r ] = true
33
- }
34
-
35
- return ret
36
- }
37
-
38
- func isContainerExecutorExperimentEnabled (repo * github.Repo ) bool {
39
- enabledRepos := getEnabledRepoNamesForContainerExperiment ()
40
- if enabledRepos [repo .FullName ()] {
41
- return true
42
- }
43
-
44
- percentStr := os .Getenv ("CONTAINER_EXECUTOR_EXPERIMENT_PERCENT" )
45
- if percentStr == "" {
46
- return false
16
+ func makeExecutor (ctx context.Context , repo * github.Repo , forPull bool , log logutil.Log , ec * experiments.Checker ) (executors.Executor , error ) {
17
+ if log == nil { // TODO: remove
18
+ log = logutil .NewStderrLog ("executor" )
19
+ log .SetLevel (logutil .LogLevelInfo )
47
20
}
48
-
49
- percent , err := strconv .Atoi (percentStr )
50
- if err != nil {
51
- return false
52
- }
53
-
54
- if percent < 0 || percent > 100 {
55
- return false
56
- }
57
-
58
- hash := hash (fmt .Sprintf ("%s/%s" , repo .Owner , repo .Name ))
59
- return uint32 (percent ) > (hash % 100 )
60
- }
61
-
62
- func makeExecutor (ctx context.Context , repo * github.Repo ) (executors.Executor , error ) {
63
- var exec executors.Executor
64
- log := logutil .NewStderrLog ("executor" )
65
- log .SetLevel (logutil .LogLevelInfo )
66
-
67
- var useContainerExecutor bool
68
- useCE := os .Getenv ("USE_CONTAINER_EXECUTOR" )
69
- if useCE != "" { //nolint:gocritic
70
- useContainerExecutor = useCE == "1"
71
- log .Infof ("Container executor is enabled by env var: %t" , useContainerExecutor )
72
- } else if isContainerExecutorExperimentEnabled (repo ) {
73
- useContainerExecutor = true
74
- log .Infof ("Container executor is enabled by experiment" )
75
- } else {
76
- log .Infof ("Container executor is disabled, use remote shell" )
21
+ if ec == nil { // TODO: remove
22
+ cfg := config .NewEnvConfig (log )
23
+ ec = experiments .NewChecker (cfg , log )
77
24
}
78
25
79
- if useContainerExecutor {
26
+ if ec . IsActiveForAnalysis ( "use_container_executor" , repo , forPull ) {
80
27
ce , err := executors .NewContainer (log )
81
28
if err != nil {
82
29
return nil , errors .Wrap (err , "can't build container executor" )
@@ -85,19 +32,17 @@ func makeExecutor(ctx context.Context, repo *github.Repo) (executors.Executor, e
85
32
if err = ce .Setup (ctx ); err != nil {
86
33
return nil , errors .Wrap (err , "failed to setup container executor" )
87
34
}
88
- exec = ce .WithWorkDir ("/goapp" )
89
- } else {
90
- s := executors .NewRemoteShell (
91
- os .Getenv ("REMOTE_SHELL_USER" ),
92
- os .Getenv ("REMOTE_SHELL_HOST" ),
93
- os .Getenv ("REMOTE_SHELL_KEY_FILE_PATH" ),
94
- )
95
- if err := s .SetupTempWorkDir (ctx ); err != nil {
96
- return nil , fmt .Errorf ("can't setup temp work dir: %s" , err )
97
- }
35
+ return ce .WithWorkDir ("/goapp" ), nil
36
+ }
98
37
99
- exec = s
38
+ s := executors .NewRemoteShell (
39
+ os .Getenv ("REMOTE_SHELL_USER" ),
40
+ os .Getenv ("REMOTE_SHELL_HOST" ),
41
+ os .Getenv ("REMOTE_SHELL_KEY_FILE_PATH" ),
42
+ )
43
+ if err := s .SetupTempWorkDir (ctx ); err != nil {
44
+ return nil , fmt .Errorf ("can't setup temp work dir: %s" , err )
100
45
}
101
46
102
- return exec , nil
47
+ return s , nil
103
48
}
0 commit comments