...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package main
16
17 import (
18 "context"
19 "encoding/json"
20 "fmt"
21 "os"
22 "runtime"
23 "strings"
24 )
25
26 type driverResponse struct {
27
28
29
30
31
32 NotHandled bool
33
34
35
36 Compiler string
37 Arch string
38
39
40
41
42
43 Roots []string `json:",omitempty"`
44
45
46
47
48
49
50 Packages []*FlatPackage
51 }
52
53 var (
54
55
56 rulesGoRepositoryName string
57 goDefaultAspect = rulesGoRepositoryName + "//go/tools/gopackagesdriver:aspect.bzl%go_pkg_info_aspect"
58 bazelBin = getenvDefault("GOPACKAGESDRIVER_BAZEL", "bazel")
59 bazelStartupFlags = strings.Fields(os.Getenv("GOPACKAGESDRIVER_BAZEL_FLAGS"))
60 bazelQueryFlags = strings.Fields(os.Getenv("GOPACKAGESDRIVER_BAZEL_QUERY_FLAGS"))
61 bazelQueryScope = getenvDefault("GOPACKAGESDRIVER_BAZEL_QUERY_SCOPE", "")
62 bazelBuildFlags = strings.Fields(os.Getenv("GOPACKAGESDRIVER_BAZEL_BUILD_FLAGS"))
63 workspaceRoot = os.Getenv("BUILD_WORKSPACE_DIRECTORY")
64 additionalAspects = strings.Fields(os.Getenv("GOPACKAGESDRIVER_BAZEL_ADDTL_ASPECTS"))
65 additionalKinds = strings.Fields(os.Getenv("GOPACKAGESDRIVER_BAZEL_KINDS"))
66 emptyResponse = &driverResponse{
67 NotHandled: true,
68 Compiler: "gc",
69 Arch: runtime.GOARCH,
70 Roots: []string{},
71 Packages: []*FlatPackage{},
72 }
73 )
74
75 func run() (*driverResponse, error) {
76 ctx, cancel := signalContext(context.Background(), os.Interrupt)
77 defer cancel()
78
79 queries := os.Args[1:]
80
81 request, err := ReadDriverRequest(os.Stdin)
82 if err != nil {
83 return emptyResponse, fmt.Errorf("unable to read request: %w", err)
84 }
85
86 bazel, err := NewBazel(ctx, bazelBin, workspaceRoot, bazelStartupFlags)
87 if err != nil {
88 return emptyResponse, fmt.Errorf("unable to create bazel instance: %w", err)
89 }
90
91 bazelJsonBuilder, err := NewBazelJSONBuilder(bazel, request.Tests)
92 if err != nil {
93 return emptyResponse, fmt.Errorf("unable to build JSON files: %w", err)
94 }
95
96 labels, err := bazelJsonBuilder.Labels(ctx, queries)
97 if err != nil {
98 return emptyResponse, fmt.Errorf("unable to lookup package: %w", err)
99 }
100
101 jsonFiles, err := bazelJsonBuilder.Build(ctx, labels, request.Mode)
102 if err != nil {
103 return emptyResponse, fmt.Errorf("unable to build JSON files: %w", err)
104 }
105
106 driver, err := NewJSONPackagesDriver(jsonFiles, bazelJsonBuilder.PathResolver(), bazel.version)
107 if err != nil {
108 return emptyResponse, fmt.Errorf("unable to load JSON files: %w", err)
109 }
110
111
112
113
114 return driver.GetResponse(labels), nil
115 }
116
117 func main() {
118 response, err := run()
119 if err := json.NewEncoder(os.Stdout).Encode(response); err != nil {
120 fmt.Fprintf(os.Stderr, "unable to encode response: %v", err)
121 }
122 if err != nil {
123 fmt.Fprintf(os.Stderr, "error: %v", err)
124
125
126
127 os.Exit(0)
128 }
129 }
130
View as plain text