Skip to content

Commit

Permalink
ui: fix dev gen js
Browse files Browse the repository at this point in the history
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
  • Loading branch information
rickystewart committed Aug 26, 2024
1 parent d450d6d commit ee76f08
Show file tree
Hide file tree
Showing 8 changed files with 281 additions and 114 deletions.
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.aspect/** -diff
build/bazelutil/distdir_files.bzl -diff
pkg/BUILD.bazel -diff
pkg/protos.bzl -diff
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@

/Makefile @cockroachdb/dev-inf

#!/pkg @cockroachdb/unowned
#!/pkg/sql/ @cockroachdb/sql-queries-noreview

/pkg/sql/inverted/ @cockroachdb/sql-queries-prs
Expand Down
2 changes: 1 addition & 1 deletion build/bazelutil/bazel-generate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -85,5 +85,5 @@ fi
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
echo "Skipping //pkg/cmd/generate-bazel-extra (relevant files are unchanged from upstream)."
else
bazel run //pkg/cmd/generate-bazel-extra --run_under="cd $PWD && " ${EXTRA_BAZEL_ARGS:-} -- -gen_test_suites
bazel run //pkg/cmd/generate-bazel-extra --run_under="cd $PWD && " ${EXTRA_BAZEL_ARGS:-}
fi
4 changes: 2 additions & 2 deletions docs/generated/http/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
load(":defs.bzl", "PROTOBUF_TARGETS")
load("//pkg:protos.bzl", "SERVER_PROTOS")

genrule(
name = "http",
srcs = PROTOBUF_TARGETS,
srcs = SERVER_PROTOS,
outs = [
"full.md",
"health-other.md",
Expand Down
62 changes: 0 additions & 62 deletions docs/generated/http/defs.bzl

This file was deleted.

94 changes: 80 additions & 14 deletions pkg/cmd/generate-bazel-extra/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ package main
import (
"bufio"
"errors"
"flag"
"fmt"
"log"
"os"
Expand Down Expand Up @@ -44,15 +43,12 @@ func getPackagesToQuery() string {
return strings.Join(packagesToQuery, "+")
}

func generateTestSuites() {
cmd := exec.Command(
"bazel", "query",
fmt.Sprintf(`kind("((go|sh)_(binary|library|test|transition_binary|transition_test))", %s)`, getPackagesToQuery()),
"--output=label_kind",
)
func runCmd(name string, args ...string) string {
cmd := exec.Command(name, args...)

buf, err := cmd.Output()
if err != nil {
log.Printf("Could not query Bazel tests: got error %v", err)
log.Printf("bazel command failed: got error %v", err)
var cmderr *exec.ExitError
if errors.As(err, &cmderr) {
log.Printf("Got error output: %s", string(cmderr.Stderr))
Expand All @@ -61,8 +57,20 @@ func generateTestSuites() {
}
os.Exit(1)
}

return string(buf[:])
}

// generatePkgBuild generates pkg/BUILD.bazel and its test_suite target.
func generatePkgBuild() {
buf := runCmd(
"bazel", "query",
fmt.Sprintf(`kind("((go|sh)_(binary|library|test|transition_binary|transition_test))", %s)`, getPackagesToQuery()),
"--output=label_kind",
)

var goLabels, testLabels []string
for _, line := range strings.Split(string(buf[:]), "\n") {
for _, line := range strings.Split(buf, "\n") {
fields := strings.Fields(line)
if len(fields) != 3 {
continue
Expand Down Expand Up @@ -123,10 +131,68 @@ test_suite(
}
}

func main() {
doTestSuites := flag.Bool("gen_test_suites", false, "generate test suites")
flag.Parse()
if *doTestSuites {
generateTestSuites()
// generateProtos generates the file pkg/protos.bzl.
func generateProtos() {
buf := runCmd(
"bazel", "query", "deps(//pkg/server/serverpb:serverpb_proto)",
"--output=label_kind",
)

var protoLabels, protoFiles []string
for _, line := range strings.Split(buf, "\n") {
fields := strings.Fields(line)
if len(fields) != 3 {
continue
}
kind := fields[0]
label := fields[2]
if kind == "proto_library" {
protoLabels = append(protoLabels, label)
} else if kind == "source" && (strings.HasPrefix(label, "//") ||
strings.HasPrefix(label, "@com_github_prometheus_client_model//io/prometheus/client:") ||
strings.HasPrefix(label, "@com_github_cockroachdb_errors//errorspb:")) {
protoFiles = append(protoFiles, label)
}
}
sort.Strings(protoLabels)
sort.Strings(protoFiles)

f, err := os.Create("pkg/protos.bzl")
if err != nil {
log.Fatalf("Failed to open file `pkg/protos.bzl` - %v", err)
}
w := bufio.NewWriter(f)

fmt.Fprintln(w, `# Code generated by generate-bazel-extra, DO NOT EDIT.
# This lists all the direct and indirect proto_library dependencies of
# //pkg/server/serverpb:serverpb_proto.
SERVER_PROTOS = [`)
for _, label := range protoLabels {
fmt.Fprintf(w, " %q,\n", label)
}
fmt.Fprintln(w, `]
# This lists all the in-tree .proto files required to build serverpb_proto.
PROTO_FILES = [`)
for _, label := range protoFiles {
fmt.Fprintf(w, " %q,\n", label)
}
fmt.Fprintln(w, "]")

if err := w.Flush(); err != nil {
log.Fatal(err)
}
if err := f.Close(); err != nil {
log.Fatal(err)
}
}

func generate() {
generatePkgBuild()
generateProtos()
}

func main() {
generate()
}
156 changes: 156 additions & 0 deletions pkg/protos.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
# Code generated by generate-bazel-extra, DO NOT EDIT.

# This lists all the direct and indirect proto_library dependencies of
# //pkg/server/serverpb:serverpb_proto.
SERVER_PROTOS = [
"//pkg/build:build_proto",
"//pkg/clusterversion:clusterversion_proto",
"//pkg/config/zonepb:zonepb_proto",
"//pkg/geo/geopb:geopb_proto",
"//pkg/gossip:gossip_proto",
"//pkg/jobs/jobspb:jobspb_proto",
"//pkg/kv/kvpb:kvpb_proto",
"//pkg/kv/kvserver/concurrency/isolation:isolation_proto",
"//pkg/kv/kvserver/concurrency/lock:lock_proto",
"//pkg/kv/kvserver/kvflowcontrol/kvflowcontrolpb:kvflowcontrolpb_proto",
"//pkg/kv/kvserver/kvserverpb:kvserverpb_proto",
"//pkg/kv/kvserver/liveness/livenesspb:livenesspb_proto",
"//pkg/kv/kvserver/loqrecovery/loqrecoverypb:loqrecoverypb_proto",
"//pkg/kv/kvserver/readsummary/rspb:rspb_proto",
"//pkg/multitenant/mtinfopb:mtinfopb_proto",
"//pkg/multitenant/tenantcapabilities/tenantcapabilitiespb:tenantcapabilitiespb_proto",
"//pkg/raft/raftpb:raftpb_proto",
"//pkg/roachpb:roachpb_proto",
"//pkg/rpc/rpcpb:rpcpb_proto",
"//pkg/server/diagnostics/diagnosticspb:diagnosticspb_proto",
"//pkg/server/serverpb:serverpb_proto",
"//pkg/server/status/statuspb:statuspb_proto",
"//pkg/settings:settings_proto",
"//pkg/sql/appstatspb:appstatspb_proto",
"//pkg/sql/catalog/catenumpb:catenumpb_proto",
"//pkg/sql/catalog/catpb:catpb_proto",
"//pkg/sql/catalog/descpb:descpb_proto",
"//pkg/sql/catalog/fetchpb:fetchpb_proto",
"//pkg/sql/contentionpb:contentionpb_proto",
"//pkg/sql/lex:lex_proto",
"//pkg/sql/schemachanger/scpb:scpb_proto",
"//pkg/sql/sem/semenumpb:semenumpb_proto",
"//pkg/sql/sessiondatapb:sessiondatapb_proto",
"//pkg/sql/sqlstats/insights:insights_proto",
"//pkg/sql/types:types_proto",
"//pkg/storage/enginepb:enginepb_proto",
"//pkg/ts/catalog:catalog_proto",
"//pkg/ts/tspb:tspb_proto",
"//pkg/util/admission/admissionpb:admissionpb_proto",
"//pkg/util/duration:duration_proto",
"//pkg/util/hlc:hlc_proto",
"//pkg/util/log/logpb:logpb_proto",
"//pkg/util/metric:metric_proto",
"//pkg/util/timeutil/pgdate:pgdate_proto",
"//pkg/util/tracing/tracingpb:tracingpb_proto",
"//pkg/util:util_proto",
"@com_github_cockroachdb_errors//errorspb:errorspb_proto",
"@com_github_gogo_protobuf//gogoproto:gogo_proto",
"@com_github_prometheus_client_model//io/prometheus/client:io_prometheus_client_proto",
"@com_google_protobuf//:any_proto",
"@com_google_protobuf//:descriptor_proto",
"@com_google_protobuf//:duration_proto",
"@com_google_protobuf//:timestamp_proto",
"@go_googleapis//google/api:annotations_proto",
"@go_googleapis//google/api:http_proto",
]

# This lists all the in-tree .proto files required to build serverpb_proto.
PROTO_FILES = [
"//pkg/build:info.proto",
"//pkg/clusterversion:cluster_version.proto",
"//pkg/config/zonepb:zone.proto",
"//pkg/geo/geopb:config.proto",
"//pkg/geo/geopb:geopb.proto",
"//pkg/gossip:gossip.proto",
"//pkg/jobs/jobspb:jobs.proto",
"//pkg/jobs/jobspb:schedule.proto",
"//pkg/kv/kvpb:api.proto",
"//pkg/kv/kvpb:errors.proto",
"//pkg/kv/kvserver/concurrency/isolation:levels.proto",
"//pkg/kv/kvserver/concurrency/lock:lock_waiter.proto",
"//pkg/kv/kvserver/concurrency/lock:locking.proto",
"//pkg/kv/kvserver/kvflowcontrol/kvflowcontrolpb:kvflowcontrol.proto",
"//pkg/kv/kvserver/kvserverpb:internal_raft.proto",
"//pkg/kv/kvserver/kvserverpb:lease_status.proto",
"//pkg/kv/kvserver/kvserverpb:proposer_kv.proto",
"//pkg/kv/kvserver/kvserverpb:raft.proto",
"//pkg/kv/kvserver/kvserverpb:range_log.proto",
"//pkg/kv/kvserver/kvserverpb:state.proto",
"//pkg/kv/kvserver/liveness/livenesspb:liveness.proto",
"//pkg/kv/kvserver/loqrecovery/loqrecoverypb:recovery.proto",
"//pkg/kv/kvserver/readsummary/rspb:summary.proto",
"//pkg/multitenant/mtinfopb:info.proto",
"//pkg/multitenant/tenantcapabilities/tenantcapabilitiespb:capabilities.proto",
"//pkg/raft/raftpb:raft.proto",
"//pkg/roachpb:data.proto",
"//pkg/roachpb:index_usage_stats.proto",
"//pkg/roachpb:internal.proto",
"//pkg/roachpb:io-formats.proto",
"//pkg/roachpb:metadata.proto",
"//pkg/roachpb:span_config.proto",
"//pkg/roachpb:span_stats.proto",
"//pkg/rpc/rpcpb:rpc.proto",
"//pkg/server/diagnostics/diagnosticspb:diagnostics.proto",
"//pkg/server/serverpb:admin.proto",
"//pkg/server/serverpb:authentication.proto",
"//pkg/server/serverpb:index_recommendations.proto",
"//pkg/server/serverpb:init.proto",
"//pkg/server/serverpb:migration.proto",
"//pkg/server/serverpb:status.proto",
"//pkg/server/status/statuspb:status.proto",
"//pkg/settings:encoding.proto",
"//pkg/sql/appstatspb:app_stats.proto",
"//pkg/sql/catalog/catenumpb:encoded_datum.proto",
"//pkg/sql/catalog/catenumpb:index.proto",
"//pkg/sql/catalog/catpb:catalog.proto",
"//pkg/sql/catalog/catpb:enum.proto",
"//pkg/sql/catalog/catpb:function.proto",
"//pkg/sql/catalog/catpb:privilege.proto",
"//pkg/sql/catalog/descpb:join_type.proto",
"//pkg/sql/catalog/descpb:lease.proto",
"//pkg/sql/catalog/descpb:locking.proto",
"//pkg/sql/catalog/descpb:structured.proto",
"//pkg/sql/catalog/fetchpb:index_fetch.proto",
"//pkg/sql/contentionpb:contention.proto",
"//pkg/sql/lex:encode.proto",
"//pkg/sql/schemachanger/scpb:elements.proto",
"//pkg/sql/schemachanger/scpb:scpb.proto",
"//pkg/sql/sem/semenumpb:constraint.proto",
"//pkg/sql/sessiondatapb:local_only_session_data.proto",
"//pkg/sql/sessiondatapb:session_data.proto",
"//pkg/sql/sessiondatapb:session_migration.proto",
"//pkg/sql/sessiondatapb:session_revival_token.proto",
"//pkg/sql/sqlstats/insights:insights.proto",
"//pkg/sql/types:types.proto",
"//pkg/storage/enginepb:engine.proto",
"//pkg/storage/enginepb:file_registry.proto",
"//pkg/storage/enginepb:mvcc.proto",
"//pkg/storage/enginepb:mvcc3.proto",
"//pkg/storage/enginepb:rocksdb.proto",
"//pkg/ts/catalog:chart_catalog.proto",
"//pkg/ts/tspb:timeseries.proto",
"//pkg/util/admission/admissionpb:admission_stats.proto",
"//pkg/util/admission/admissionpb:io_threshold.proto",
"//pkg/util/duration:duration.proto",
"//pkg/util/hlc:legacy_timestamp.proto",
"//pkg/util/hlc:timestamp.proto",
"//pkg/util/log/logpb:event.proto",
"//pkg/util/log/logpb:log.proto",
"//pkg/util/metric:metric.proto",
"//pkg/util/timeutil/pgdate:pgdate.proto",
"//pkg/util/tracing/tracingpb:recorded_span.proto",
"//pkg/util/tracing/tracingpb:tracing.proto",
"//pkg/util:unresolved_addr.proto",
"@com_github_cockroachdb_errors//errorspb:errors.proto",
"@com_github_cockroachdb_errors//errorspb:hintdetail.proto",
"@com_github_cockroachdb_errors//errorspb:markers.proto",
"@com_github_cockroachdb_errors//errorspb:tags.proto",
"@com_github_cockroachdb_errors//errorspb:testing.proto",
"@com_github_prometheus_client_model//io/prometheus/client:metrics.proto",
]
Loading

0 comments on commit ee76f08

Please sign in to comment.