Skip to content

Commit 427d47a

Browse files
committed
ui: fix dev gen js
Since we switched to Bazel 7, `bazel` is more rigorous about disallowing directories as outputs. This means that the `crdb-api-client` implementation, which was always pretty much incorrect, started entirely failing to build. To address this we add code generation to list `.proto` files and use that instead of trying to use the directory `dist` as an output file which Bazel does not want. Closes #129369. Epic: none Release note: None Release justification: Non-production code changes
1 parent 1436a84 commit 427d47a

File tree

8 files changed

+281
-114
lines changed

8 files changed

+281
-114
lines changed

.gitattributes

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
.aspect/** -diff
22
build/bazelutil/distdir_files.bzl -diff
33
pkg/BUILD.bazel -diff
4+
pkg/protos.bzl -diff

.github/CODEOWNERS

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838

3939
/Makefile @cockroachdb/dev-inf
4040

41+
#!/pkg @cockroachdb/unowned
4142
#!/pkg/sql/ @cockroachdb/sql-queries-noreview
4243

4344
/pkg/sql/inverted/ @cockroachdb/sql-queries-prs

build/bazelutil/bazel-generate.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,5 +85,5 @@ fi
8585
if files_unchanged_from_upstream $(find_relevant ./pkg -name BUILD.bazel) $(find_relevant ./pkg/cmd/generate-bazel-extra -name BUILD.bazel -or -name '*.go'); then
8686
echo "Skipping //pkg/cmd/generate-bazel-extra (relevant files are unchanged from upstream)."
8787
else
88-
bazel run //pkg/cmd/generate-bazel-extra --run_under="cd $PWD && " ${EXTRA_BAZEL_ARGS:-} -- -gen_test_suites
88+
bazel run //pkg/cmd/generate-bazel-extra --run_under="cd $PWD && " ${EXTRA_BAZEL_ARGS:-}
8989
fi

docs/generated/http/BUILD.bazel

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
load(":defs.bzl", "PROTOBUF_TARGETS")
1+
load("//pkg:protos.bzl", "SERVER_PROTOS")
22

33
genrule(
44
name = "http",
5-
srcs = PROTOBUF_TARGETS,
5+
srcs = SERVER_PROTOS,
66
outs = [
77
"full.md",
88
"health-other.md",

docs/generated/http/defs.bzl

-62
This file was deleted.

pkg/cmd/generate-bazel-extra/main.go

+80-14
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ package main
1313
import (
1414
"bufio"
1515
"errors"
16-
"flag"
1716
"fmt"
1817
"log"
1918
"os"
@@ -44,15 +43,12 @@ func getPackagesToQuery() string {
4443
return strings.Join(packagesToQuery, "+")
4544
}
4645

47-
func generateTestSuites() {
48-
cmd := exec.Command(
49-
"bazel", "query",
50-
fmt.Sprintf(`kind("((go|sh)_(binary|library|test|transition_binary|transition_test))", %s)`, getPackagesToQuery()),
51-
"--output=label_kind",
52-
)
46+
func runCmd(name string, args ...string) string {
47+
cmd := exec.Command(name, args...)
48+
5349
buf, err := cmd.Output()
5450
if err != nil {
55-
log.Printf("Could not query Bazel tests: got error %v", err)
51+
log.Printf("bazel command failed: got error %v", err)
5652
var cmderr *exec.ExitError
5753
if errors.As(err, &cmderr) {
5854
log.Printf("Got error output: %s", string(cmderr.Stderr))
@@ -61,8 +57,20 @@ func generateTestSuites() {
6157
}
6258
os.Exit(1)
6359
}
60+
61+
return string(buf[:])
62+
}
63+
64+
// generatePkgBuild generates pkg/BUILD.bazel and its test_suite target.
65+
func generatePkgBuild() {
66+
buf := runCmd(
67+
"bazel", "query",
68+
fmt.Sprintf(`kind("((go|sh)_(binary|library|test|transition_binary|transition_test))", %s)`, getPackagesToQuery()),
69+
"--output=label_kind",
70+
)
71+
6472
var goLabels, testLabels []string
65-
for _, line := range strings.Split(string(buf[:]), "\n") {
73+
for _, line := range strings.Split(buf, "\n") {
6674
fields := strings.Fields(line)
6775
if len(fields) != 3 {
6876
continue
@@ -123,10 +131,68 @@ test_suite(
123131
}
124132
}
125133

126-
func main() {
127-
doTestSuites := flag.Bool("gen_test_suites", false, "generate test suites")
128-
flag.Parse()
129-
if *doTestSuites {
130-
generateTestSuites()
134+
// generateProtos generates the file pkg/protos.bzl.
135+
func generateProtos() {
136+
buf := runCmd(
137+
"bazel", "query", "deps(//pkg/server/serverpb:serverpb_proto)",
138+
"--output=label_kind",
139+
)
140+
141+
var protoLabels, protoFiles []string
142+
for _, line := range strings.Split(buf, "\n") {
143+
fields := strings.Fields(line)
144+
if len(fields) != 3 {
145+
continue
146+
}
147+
kind := fields[0]
148+
label := fields[2]
149+
if kind == "proto_library" {
150+
protoLabels = append(protoLabels, label)
151+
} else if kind == "source" && (strings.HasPrefix(label, "//") ||
152+
strings.HasPrefix(label, "@com_github_prometheus_client_model//io/prometheus/client:") ||
153+
strings.HasPrefix(label, "@com_github_cockroachdb_errors//errorspb:")) {
154+
protoFiles = append(protoFiles, label)
155+
}
156+
}
157+
sort.Strings(protoLabels)
158+
sort.Strings(protoFiles)
159+
160+
f, err := os.Create("pkg/protos.bzl")
161+
if err != nil {
162+
log.Fatalf("Failed to open file `pkg/protos.bzl` - %v", err)
131163
}
164+
w := bufio.NewWriter(f)
165+
166+
fmt.Fprintln(w, `# Code generated by generate-bazel-extra, DO NOT EDIT.
167+
168+
# This lists all the direct and indirect proto_library dependencies of
169+
# //pkg/server/serverpb:serverpb_proto.
170+
SERVER_PROTOS = [`)
171+
for _, label := range protoLabels {
172+
fmt.Fprintf(w, " %q,\n", label)
173+
}
174+
fmt.Fprintln(w, `]
175+
176+
# This lists all the in-tree .proto files required to build serverpb_proto.
177+
PROTO_FILES = [`)
178+
for _, label := range protoFiles {
179+
fmt.Fprintf(w, " %q,\n", label)
180+
}
181+
fmt.Fprintln(w, "]")
182+
183+
if err := w.Flush(); err != nil {
184+
log.Fatal(err)
185+
}
186+
if err := f.Close(); err != nil {
187+
log.Fatal(err)
188+
}
189+
}
190+
191+
func generate() {
192+
generatePkgBuild()
193+
generateProtos()
194+
}
195+
196+
func main() {
197+
generate()
132198
}

pkg/protos.bzl

+156
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
# Code generated by generate-bazel-extra, DO NOT EDIT.
2+
3+
# This lists all the direct and indirect proto_library dependencies of
4+
# //pkg/server/serverpb:serverpb_proto.
5+
SERVER_PROTOS = [
6+
"//pkg/build:build_proto",
7+
"//pkg/clusterversion:clusterversion_proto",
8+
"//pkg/config/zonepb:zonepb_proto",
9+
"//pkg/geo/geopb:geopb_proto",
10+
"//pkg/gossip:gossip_proto",
11+
"//pkg/jobs/jobspb:jobspb_proto",
12+
"//pkg/kv/kvpb:kvpb_proto",
13+
"//pkg/kv/kvserver/concurrency/isolation:isolation_proto",
14+
"//pkg/kv/kvserver/concurrency/lock:lock_proto",
15+
"//pkg/kv/kvserver/kvflowcontrol/kvflowcontrolpb:kvflowcontrolpb_proto",
16+
"//pkg/kv/kvserver/kvserverpb:kvserverpb_proto",
17+
"//pkg/kv/kvserver/liveness/livenesspb:livenesspb_proto",
18+
"//pkg/kv/kvserver/loqrecovery/loqrecoverypb:loqrecoverypb_proto",
19+
"//pkg/kv/kvserver/readsummary/rspb:rspb_proto",
20+
"//pkg/multitenant/mtinfopb:mtinfopb_proto",
21+
"//pkg/multitenant/tenantcapabilities/tenantcapabilitiespb:tenantcapabilitiespb_proto",
22+
"//pkg/raft/raftpb:raftpb_proto",
23+
"//pkg/roachpb:roachpb_proto",
24+
"//pkg/rpc/rpcpb:rpcpb_proto",
25+
"//pkg/server/diagnostics/diagnosticspb:diagnosticspb_proto",
26+
"//pkg/server/serverpb:serverpb_proto",
27+
"//pkg/server/status/statuspb:statuspb_proto",
28+
"//pkg/settings:settings_proto",
29+
"//pkg/sql/appstatspb:appstatspb_proto",
30+
"//pkg/sql/catalog/catenumpb:catenumpb_proto",
31+
"//pkg/sql/catalog/catpb:catpb_proto",
32+
"//pkg/sql/catalog/descpb:descpb_proto",
33+
"//pkg/sql/catalog/fetchpb:fetchpb_proto",
34+
"//pkg/sql/contentionpb:contentionpb_proto",
35+
"//pkg/sql/lex:lex_proto",
36+
"//pkg/sql/schemachanger/scpb:scpb_proto",
37+
"//pkg/sql/sem/semenumpb:semenumpb_proto",
38+
"//pkg/sql/sessiondatapb:sessiondatapb_proto",
39+
"//pkg/sql/sqlstats/insights:insights_proto",
40+
"//pkg/sql/types:types_proto",
41+
"//pkg/storage/enginepb:enginepb_proto",
42+
"//pkg/ts/catalog:catalog_proto",
43+
"//pkg/ts/tspb:tspb_proto",
44+
"//pkg/util/admission/admissionpb:admissionpb_proto",
45+
"//pkg/util/duration:duration_proto",
46+
"//pkg/util/hlc:hlc_proto",
47+
"//pkg/util/log/logpb:logpb_proto",
48+
"//pkg/util/metric:metric_proto",
49+
"//pkg/util/timeutil/pgdate:pgdate_proto",
50+
"//pkg/util/tracing/tracingpb:tracingpb_proto",
51+
"//pkg/util:util_proto",
52+
"@com_github_cockroachdb_errors//errorspb:errorspb_proto",
53+
"@com_github_gogo_protobuf//gogoproto:gogo_proto",
54+
"@com_github_prometheus_client_model//io/prometheus/client:io_prometheus_client_proto",
55+
"@com_google_protobuf//:any_proto",
56+
"@com_google_protobuf//:descriptor_proto",
57+
"@com_google_protobuf//:duration_proto",
58+
"@com_google_protobuf//:timestamp_proto",
59+
"@go_googleapis//google/api:annotations_proto",
60+
"@go_googleapis//google/api:http_proto",
61+
]
62+
63+
# This lists all the in-tree .proto files required to build serverpb_proto.
64+
PROTO_FILES = [
65+
"//pkg/build:info.proto",
66+
"//pkg/clusterversion:cluster_version.proto",
67+
"//pkg/config/zonepb:zone.proto",
68+
"//pkg/geo/geopb:config.proto",
69+
"//pkg/geo/geopb:geopb.proto",
70+
"//pkg/gossip:gossip.proto",
71+
"//pkg/jobs/jobspb:jobs.proto",
72+
"//pkg/jobs/jobspb:schedule.proto",
73+
"//pkg/kv/kvpb:api.proto",
74+
"//pkg/kv/kvpb:errors.proto",
75+
"//pkg/kv/kvserver/concurrency/isolation:levels.proto",
76+
"//pkg/kv/kvserver/concurrency/lock:lock_waiter.proto",
77+
"//pkg/kv/kvserver/concurrency/lock:locking.proto",
78+
"//pkg/kv/kvserver/kvflowcontrol/kvflowcontrolpb:kvflowcontrol.proto",
79+
"//pkg/kv/kvserver/kvserverpb:internal_raft.proto",
80+
"//pkg/kv/kvserver/kvserverpb:lease_status.proto",
81+
"//pkg/kv/kvserver/kvserverpb:proposer_kv.proto",
82+
"//pkg/kv/kvserver/kvserverpb:raft.proto",
83+
"//pkg/kv/kvserver/kvserverpb:range_log.proto",
84+
"//pkg/kv/kvserver/kvserverpb:state.proto",
85+
"//pkg/kv/kvserver/liveness/livenesspb:liveness.proto",
86+
"//pkg/kv/kvserver/loqrecovery/loqrecoverypb:recovery.proto",
87+
"//pkg/kv/kvserver/readsummary/rspb:summary.proto",
88+
"//pkg/multitenant/mtinfopb:info.proto",
89+
"//pkg/multitenant/tenantcapabilities/tenantcapabilitiespb:capabilities.proto",
90+
"//pkg/raft/raftpb:raft.proto",
91+
"//pkg/roachpb:data.proto",
92+
"//pkg/roachpb:index_usage_stats.proto",
93+
"//pkg/roachpb:internal.proto",
94+
"//pkg/roachpb:io-formats.proto",
95+
"//pkg/roachpb:metadata.proto",
96+
"//pkg/roachpb:span_config.proto",
97+
"//pkg/roachpb:span_stats.proto",
98+
"//pkg/rpc/rpcpb:rpc.proto",
99+
"//pkg/server/diagnostics/diagnosticspb:diagnostics.proto",
100+
"//pkg/server/serverpb:admin.proto",
101+
"//pkg/server/serverpb:authentication.proto",
102+
"//pkg/server/serverpb:index_recommendations.proto",
103+
"//pkg/server/serverpb:init.proto",
104+
"//pkg/server/serverpb:migration.proto",
105+
"//pkg/server/serverpb:status.proto",
106+
"//pkg/server/status/statuspb:status.proto",
107+
"//pkg/settings:encoding.proto",
108+
"//pkg/sql/appstatspb:app_stats.proto",
109+
"//pkg/sql/catalog/catenumpb:encoded_datum.proto",
110+
"//pkg/sql/catalog/catenumpb:index.proto",
111+
"//pkg/sql/catalog/catpb:catalog.proto",
112+
"//pkg/sql/catalog/catpb:enum.proto",
113+
"//pkg/sql/catalog/catpb:function.proto",
114+
"//pkg/sql/catalog/catpb:privilege.proto",
115+
"//pkg/sql/catalog/descpb:join_type.proto",
116+
"//pkg/sql/catalog/descpb:lease.proto",
117+
"//pkg/sql/catalog/descpb:locking.proto",
118+
"//pkg/sql/catalog/descpb:structured.proto",
119+
"//pkg/sql/catalog/fetchpb:index_fetch.proto",
120+
"//pkg/sql/contentionpb:contention.proto",
121+
"//pkg/sql/lex:encode.proto",
122+
"//pkg/sql/schemachanger/scpb:elements.proto",
123+
"//pkg/sql/schemachanger/scpb:scpb.proto",
124+
"//pkg/sql/sem/semenumpb:constraint.proto",
125+
"//pkg/sql/sessiondatapb:local_only_session_data.proto",
126+
"//pkg/sql/sessiondatapb:session_data.proto",
127+
"//pkg/sql/sessiondatapb:session_migration.proto",
128+
"//pkg/sql/sessiondatapb:session_revival_token.proto",
129+
"//pkg/sql/sqlstats/insights:insights.proto",
130+
"//pkg/sql/types:types.proto",
131+
"//pkg/storage/enginepb:engine.proto",
132+
"//pkg/storage/enginepb:file_registry.proto",
133+
"//pkg/storage/enginepb:mvcc.proto",
134+
"//pkg/storage/enginepb:mvcc3.proto",
135+
"//pkg/storage/enginepb:rocksdb.proto",
136+
"//pkg/ts/catalog:chart_catalog.proto",
137+
"//pkg/ts/tspb:timeseries.proto",
138+
"//pkg/util/admission/admissionpb:admission_stats.proto",
139+
"//pkg/util/admission/admissionpb:io_threshold.proto",
140+
"//pkg/util/duration:duration.proto",
141+
"//pkg/util/hlc:legacy_timestamp.proto",
142+
"//pkg/util/hlc:timestamp.proto",
143+
"//pkg/util/log/logpb:event.proto",
144+
"//pkg/util/log/logpb:log.proto",
145+
"//pkg/util/metric:metric.proto",
146+
"//pkg/util/timeutil/pgdate:pgdate.proto",
147+
"//pkg/util/tracing/tracingpb:recorded_span.proto",
148+
"//pkg/util/tracing/tracingpb:tracing.proto",
149+
"//pkg/util:unresolved_addr.proto",
150+
"@com_github_cockroachdb_errors//errorspb:errors.proto",
151+
"@com_github_cockroachdb_errors//errorspb:hintdetail.proto",
152+
"@com_github_cockroachdb_errors//errorspb:markers.proto",
153+
"@com_github_cockroachdb_errors//errorspb:tags.proto",
154+
"@com_github_cockroachdb_errors//errorspb:testing.proto",
155+
"@com_github_prometheus_client_model//io/prometheus/client:metrics.proto",
156+
]

0 commit comments

Comments
 (0)