From ee3350ea91cd4bd181c38c27153fe9bcb7a809d1 Mon Sep 17 00:00:00 2001 From: Noah Dietz Date: Tue, 15 Oct 2019 15:19:47 -0700 Subject: [PATCH] chore: make repo bazel aware & add microgen macro (#181) --- .gitignore | 3 + BUILD | 4 + README.md | 43 ++++ WORKSPACE | 47 ++++ cmd/gen-go-sample/BUILD.bazel | 20 ++ cmd/protoc-gen-go_cli/BUILD.bazel | 20 ++ cmd/protoc-gen-go_gapic/BUILD | 21 ++ internal/errors/BUILD.bazel | 8 + internal/gencli/BUILD.bazel | 44 ++++ internal/gengapic/BUILD.bazel | 62 ++++++ internal/gensample/BUILD.bazel | 56 +++++ internal/gensample/schema_v1p2/BUILD.bazel | 8 + internal/grpc_service_config/BUILD.bazel | 29 +++ internal/license/BUILD.bazel | 8 + internal/pbinfo/BUILD.bazel | 26 +++ internal/printer/BUILD.bazel | 8 + internal/txtdiff/BUILD.bazel | 8 + repositories.bzl | 243 +++++++++++++++++++++ rules_go_gapic/go_gapic.bzl | 76 +++++++ showcase/BUILD.bazel | 1 + 20 files changed, 735 insertions(+) create mode 100644 BUILD create mode 100644 WORKSPACE create mode 100644 cmd/gen-go-sample/BUILD.bazel create mode 100644 cmd/protoc-gen-go_cli/BUILD.bazel create mode 100644 cmd/protoc-gen-go_gapic/BUILD create mode 100644 internal/errors/BUILD.bazel create mode 100644 internal/gencli/BUILD.bazel create mode 100644 internal/gengapic/BUILD.bazel create mode 100644 internal/gensample/BUILD.bazel create mode 100644 internal/gensample/schema_v1p2/BUILD.bazel create mode 100644 internal/grpc_service_config/BUILD.bazel create mode 100644 internal/license/BUILD.bazel create mode 100644 internal/pbinfo/BUILD.bazel create mode 100644 internal/printer/BUILD.bazel create mode 100644 internal/txtdiff/BUILD.bazel create mode 100644 repositories.bzl create mode 100644 rules_go_gapic/go_gapic.bzl create mode 100644 showcase/BUILD.bazel diff --git a/.gitignore b/.gitignore index 713e90e0f..b25849b16 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,6 @@ Session.vim # Temporary *~ + +# Bazel directories +bazel-* diff --git a/BUILD b/BUILD new file mode 100644 index 000000000..36a7083db --- /dev/null +++ b/BUILD @@ -0,0 +1,4 @@ +load("@bazel_gazelle//:def.bzl", "gazelle") + +# gazelle:prefix github.com/googleapis/gapic-generator-go +gazelle(name = "gazelle") diff --git a/README.md b/README.md index 5f2740381..bc56c8b4e 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,49 @@ The configuration supported by the plugin option includes: * Defaults to empty, which is essentially the GA release level. * Acceptable values are `alpha` and `beta`. +Bazel +----- + +The generator can be executed via a Bazel BUILD file using the macro in this repo. + +Add the following to your WORKSPACE to import this project. + +``` +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "com_googleapis_gapic_generator_go", + strip_prefix = "gapic-generator-master", + urls = ["https://github.com/googleapis/gapic-generator-go/archive/master.zip"], +) + +load("@com_googleapis_gapic_generator_go//:repositories.bzl", "com_googleapis_gapic_generator_go_repositories") + +com_googleapis_gapic_generator_go_repositories() +``` + +_Note: do not use `master`, use a commit hash or a release tag._ + +And invoke it in a BUILD file like so, using an example based on the [googleapis repo](https://github.com/googleapis/googleapis/tree/92bebf78345af8b2d3585220527115bda8bdedf8/google/cloud/language/v1). + +``` +load("@com_googleapis_gapic_generator_go//:rules_go_gapic/go_gapic.bzl", "go_gapic_library") + +go_gapic_library( + name = "language_go_gapic", + srcs = [ + # BUILD target for proto_library + "//google/cloud/language/v1:language_proto", + ], + deps = [ + # BUILD target for go_library_proto + "//google/cloud/language/v1:language_go_proto", + ], + # go-gapic-package parameter value + importpath = "cloud.google.com/go/language/apiv1;language", +) +``` + Docker Wrapper -------------- The generator can also be executed via a Docker container. The image containes `protoc`, the microgenerator diff --git a/WORKSPACE b/WORKSPACE new file mode 100644 index 000000000..ffa179ab2 --- /dev/null +++ b/WORKSPACE @@ -0,0 +1,47 @@ +workspace(name = "com_googleapis_gapic_generator_go") + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "com_google_protobuf", + strip_prefix = "protobuf-3.9.1", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.9.1.zip"], + sha256 = "c90d9e13564c0af85fd2912545ee47b57deded6e5a97de80395b6d2d9be64854", +) + +load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") + +protobuf_deps() + +http_archive( + name = "io_bazel_rules_go", + urls = [ + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/v0.20.0/rules_go-v0.20.0.tar.gz", + "https://github.com/bazelbuild/rules_go/releases/download/v0.20.0/rules_go-v0.20.0.tar.gz", + ], + sha256 = "078f2a9569fa9ed846e60805fb5fb167d6f6c4ece48e6d409bf5fb2154eaf0d8", +) + +load("@io_bazel_rules_go//go:deps.bzl", "go_rules_dependencies", "go_register_toolchains") + +go_rules_dependencies() + +go_register_toolchains() + +http_archive( + name = "bazel_gazelle", + urls = [ + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/0.18.2/bazel-gazelle-0.18.2.tar.gz", + "https://github.com/bazelbuild/bazel-gazelle/releases/download/0.18.2/bazel-gazelle-0.18.2.tar.gz", + ], + sha256 = "7fc87f4170011201b1690326e8c16c5d802836e3a0d617d8f75c3af2b23180c4", +) + +# gazelle:repo bazel_gazelle +load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") + +gazelle_dependencies() + +load("//:repositories.bzl", "com_googleapis_gapic_generator_go_repositories") + +com_googleapis_gapic_generator_go_repositories() diff --git a/cmd/gen-go-sample/BUILD.bazel b/cmd/gen-go-sample/BUILD.bazel new file mode 100644 index 000000000..7ae2b3bee --- /dev/null +++ b/cmd/gen-go-sample/BUILD.bazel @@ -0,0 +1,20 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") + +go_library( + name = "go_default_library", + srcs = ["main.go"], + importpath = "github.com/googleapis/gapic-generator-go/cmd/gen-go-sample", + visibility = ["//visibility:private"], + deps = [ + "//internal/errors:go_default_library", + "//internal/gensample:go_default_library", + "@com_github_golang_protobuf//proto:go_default_library", + "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", + ], +) + +go_binary( + name = "gen-go-sample", + embed = [":go_default_library"], + visibility = ["//visibility:public"], +) diff --git a/cmd/protoc-gen-go_cli/BUILD.bazel b/cmd/protoc-gen-go_cli/BUILD.bazel new file mode 100644 index 000000000..854a88724 --- /dev/null +++ b/cmd/protoc-gen-go_cli/BUILD.bazel @@ -0,0 +1,20 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") + +# gazelle:proto disable_global +go_library( + name = "go_default_library", + srcs = ["main.go"], + importpath = "github.com/googleapis/gapic-generator-go/cmd/protoc-gen-go_cli", + visibility = ["//visibility:private"], + deps = [ + "//internal/gencli:go_default_library", + "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_golang_protobuf//protoc-gen-go/plugin:go_default_library", + ], +) + +go_binary( + name = "protoc-gen-go_cli", + embed = [":go_default_library"], + visibility = ["//visibility:public"], +) diff --git a/cmd/protoc-gen-go_gapic/BUILD b/cmd/protoc-gen-go_gapic/BUILD new file mode 100644 index 000000000..8de99a94c --- /dev/null +++ b/cmd/protoc-gen-go_gapic/BUILD @@ -0,0 +1,21 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") + +# gazelle:proto disable_global +go_library( + name = "go_default_library", + srcs = ["main.go"], + importpath = "github.com/googleapis/gapic-generator-go/cmd/protoc-gen-go_gapic", + visibility = ["//visibility:private"], + deps = [ + "//internal/gengapic:go_default_library", + "//internal/gensample:go_default_library", + "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_golang_protobuf//protoc-gen-go/plugin:go_default_library", + ], +) + +go_binary( + name = "protoc-gen-go_gapic", + embed = [":go_default_library"], + visibility = ["//visibility:public"], +) diff --git a/internal/errors/BUILD.bazel b/internal/errors/BUILD.bazel new file mode 100644 index 000000000..79c3f5f60 --- /dev/null +++ b/internal/errors/BUILD.bazel @@ -0,0 +1,8 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["errors.go"], + importpath = "github.com/googleapis/gapic-generator-go/internal/errors", + visibility = ["//:__subpackages__"], +) diff --git a/internal/gencli/BUILD.bazel b/internal/gencli/BUILD.bazel new file mode 100644 index 000000000..71209af77 --- /dev/null +++ b/internal/gencli/BUILD.bazel @@ -0,0 +1,44 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "cmd_file.go", + "completion_file.go", + "flag.go", + "gencli.go", + "root_file.go", + "service_file.go", + "util.go", + ], + importpath = "github.com/googleapis/gapic-generator-go/internal/gencli", + visibility = ["//:__subpackages__"], + deps = [ + "//internal/errors:go_default_library", + "//internal/pbinfo:go_default_library", + "//internal/printer:go_default_library", + "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_jhump_protoreflect//desc:go_default_library", + "@go_googleapis//google/api:annotations_go_proto", + "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", + "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", + ], +) + +go_test( + name = "go_default_test", + srcs = [ + "cmd_file_test.go", + "completion_file_test.go", + "flag_test.go", + "root_file_test.go", + "service_file_test.go", + ], + data = glob(["testdata/**"]), + embed = [":go_default_library"], + deps = [ + "//internal/pbinfo:go_default_library", + "//internal/txtdiff:go_default_library", + "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", + ], +) diff --git a/internal/gengapic/BUILD.bazel b/internal/gengapic/BUILD.bazel new file mode 100644 index 000000000..dfcd9e82b --- /dev/null +++ b/internal/gengapic/BUILD.bazel @@ -0,0 +1,62 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "client_init.go", + "doc_file.go", + "example.go", + "gengapic.go", + "imports.go", + "lro.go", + "markdown.go", + "paging.go", + "service_config.go", + "stream.go", + ], + importpath = "github.com/googleapis/gapic-generator-go/internal/gengapic", + visibility = ["//:__subpackages__"], + deps = [ + "//internal/errors:go_default_library", + "//internal/grpc_service_config:go_default_library", + "//internal/license:go_default_library", + "//internal/pbinfo:go_default_library", + "//internal/printer:go_default_library", + "@com_github_golang_commonmark_markdown//:go_default_library", + "@com_github_golang_protobuf//jsonpb:go_default_library_gen", + "@com_github_golang_protobuf//proto:go_default_library", + "@go_googleapis//google/api:annotations_go_proto", + "@go_googleapis//google/longrunning:longrunning_go_proto", + "@in_gopkg_yaml_v2//:go_default_library", + "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", + "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", + "@io_bazel_rules_go//proto/wkt:duration_go_proto", + ], +) + +go_test( + name = "go_default_test", + srcs = [ + "client_init_test.go", + "doc_file_test.go", + "example_test.go", + "gengapic_test.go", + "markdown_test.go", + "paging_test.go", + ], + data = glob(["testdata/**"]), + embed = [":go_default_library"], + deps = [ + "//internal/grpc_service_config:go_default_library", + "//internal/pbinfo:go_default_library", + "//internal/txtdiff:go_default_library", + "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_google_go_cmp//cmp:go_default_library", + "@go_googleapis//google/api:annotations_go_proto", + "@go_googleapis//google/longrunning:longrunning_go_proto", + "@go_googleapis//google/rpc:code_go_proto", + "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", + "@io_bazel_rules_go//proto/wkt:duration_go_proto", + "@io_bazel_rules_go//proto/wkt:wrappers_go_proto", + ], +) diff --git a/internal/gensample/BUILD.bazel b/internal/gensample/BUILD.bazel new file mode 100644 index 000000000..5ded2b609 --- /dev/null +++ b/internal/gensample/BUILD.bazel @@ -0,0 +1,56 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "bytes.go", + "enum.go", + "gapic.go", + "genmanifest.go", + "gensample.go", + "inittree.go", + "out.go", + "paging.go", + "plugin.go", + "primval.go", + "resource.go", + "sampmain.go", + "typing.go", + ], + importpath = "github.com/googleapis/gapic-generator-go/internal/gensample", + visibility = ["//:__subpackages__"], + deps = [ + "//internal/errors:go_default_library", + "//internal/gensample/schema_v1p2:go_default_library", + "//internal/license:go_default_library", + "//internal/pbinfo:go_default_library", + "//internal/printer:go_default_library", + "@in_gopkg_yaml_v2//:go_default_library", + "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", + "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", + ], +) + +go_test( + name = "go_default_test", + srcs = [ + "enum_test.go", + "genmanifest_test.go", + "gensample_sampleconfig_test.go", + "gensample_test.go", + "inittree_test.go", + "resource_test.go", + ], + data = glob(["testdata/**"]), + embed = [":go_default_library"], + deps = [ + "//internal/errors:go_default_library", + "//internal/gensample/schema_v1p2:go_default_library", + "//internal/pbinfo:go_default_library", + "//internal/txtdiff:go_default_library", + "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_google_go_cmp//cmp:go_default_library", + "@in_gopkg_yaml_v2//:go_default_library", + "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", + ], +) diff --git a/internal/gensample/schema_v1p2/BUILD.bazel b/internal/gensample/schema_v1p2/BUILD.bazel new file mode 100644 index 000000000..157a05cbe --- /dev/null +++ b/internal/gensample/schema_v1p2/BUILD.bazel @@ -0,0 +1,8 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["schema.go"], + importpath = "github.com/googleapis/gapic-generator-go/internal/gensample/schema_v1p2", + visibility = ["//:__subpackages__"], +) diff --git a/internal/grpc_service_config/BUILD.bazel b/internal/grpc_service_config/BUILD.bazel new file mode 100644 index 000000000..71d868d32 --- /dev/null +++ b/internal/grpc_service_config/BUILD.bazel @@ -0,0 +1,29 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") + +proto_library( + name = "grpc_service_config_proto", + srcs = ["grpc_service_config.proto"], + visibility = ["//:__subpackages__"], + deps = [ + "@com_google_protobuf//:duration_proto", + "@com_google_protobuf//:wrappers_proto", + "@go_googleapis//google/rpc:code_proto", + ], +) + +go_proto_library( + name = "grpc_service_config_go_proto", + compilers = ["@io_bazel_rules_go//proto:go_grpc"], + importpath = "github.com/googleapis/gapic-generator-go/internal/grpc_service_config", + proto = ":grpc_service_config_proto", + visibility = ["//:__subpackages__"], + deps = ["@go_googleapis//google/rpc:code_go_proto"], +) + +go_library( + name = "go_default_library", + embed = [":grpc_service_config_go_proto"], + importpath = "github.com/googleapis/gapic-generator-go/internal/grpc_service_config", + visibility = ["//visibility:public"], +) diff --git a/internal/license/BUILD.bazel b/internal/license/BUILD.bazel new file mode 100644 index 000000000..d49d84da4 --- /dev/null +++ b/internal/license/BUILD.bazel @@ -0,0 +1,8 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["license.go"], + importpath = "github.com/googleapis/gapic-generator-go/internal/license", + visibility = ["//:__subpackages__"], +) diff --git a/internal/pbinfo/BUILD.bazel b/internal/pbinfo/BUILD.bazel new file mode 100644 index 000000000..a2065e7b2 --- /dev/null +++ b/internal/pbinfo/BUILD.bazel @@ -0,0 +1,26 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "pbinfo.go", + "prim2go.go", + ], + importpath = "github.com/googleapis/gapic-generator-go/internal/pbinfo", + visibility = ["//:__subpackages__"], + deps = [ + "//internal/errors:go_default_library", + "@com_github_golang_protobuf//proto:go_default_library", + "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", + ], +) + +go_test( + name = "go_default_test", + srcs = ["pbinfo_test.go"], + embed = [":go_default_library"], + deps = [ + "@com_github_golang_protobuf//proto:go_default_library", + "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", + ], +) diff --git a/internal/printer/BUILD.bazel b/internal/printer/BUILD.bazel new file mode 100644 index 000000000..eab35a00f --- /dev/null +++ b/internal/printer/BUILD.bazel @@ -0,0 +1,8 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["printer.go"], + importpath = "github.com/googleapis/gapic-generator-go/internal/printer", + visibility = ["//:__subpackages__"], +) diff --git a/internal/txtdiff/BUILD.bazel b/internal/txtdiff/BUILD.bazel new file mode 100644 index 000000000..dac61473a --- /dev/null +++ b/internal/txtdiff/BUILD.bazel @@ -0,0 +1,8 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["diff.go"], + importpath = "github.com/googleapis/gapic-generator-go/internal/txtdiff", + visibility = ["//:__subpackages__"], +) diff --git a/repositories.bzl b/repositories.bzl new file mode 100644 index 000000000..4926e4edd --- /dev/null +++ b/repositories.bzl @@ -0,0 +1,243 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +load("@bazel_gazelle//:deps.bzl", "go_repository") + +def com_googleapis_gapic_generator_go_repositories(): + _maybe( + http_archive, + name = "com_google_api_codegen", + strip_prefix = "gapic-generator-32df2ec2818108329f297edeeb72bc71cf5b619b", + urls = ["https://github.com/googleapis/gapic-generator/archive/32df2ec2818108329f297edeeb72bc71cf5b619b.zip"], + sha256 = "e0baddd9c12aea4434dc786e7656ce036bd76d273649d9df38fb08f7c41fdfc7", + ) + _maybe( + go_repository, + name = "co_honnef_go_tools", + importpath = "honnef.co/go/tools", + sum = "h1:XJP7lxbSxWLOMNdBE4B/STaqVy6L73o0knwj2vIlxnw=", + version = "v0.0.0-20190102054323-c2f93a96b099", + ) + _maybe( + go_repository, + name = "com_github_burntsushi_toml", + importpath = "github.com/BurntSushi/toml", + sum = "h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=", + version = "v0.3.1", + ) + _maybe( + go_repository, + name = "com_github_client9_misspell", + importpath = "github.com/client9/misspell", + sum = "h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI=", + version = "v0.3.4", + ) + _maybe( + go_repository, + name = "com_github_golang_commonmark_html", + importpath = "github.com/golang-commonmark/html", + sum = "h1:FeNEDxIy7XouGTJKiJ9Ze5vUbcAIW/FRhQbtKBNmEz8=", + version = "v0.0.0-20180910111043-7d7c804e1d46", + ) + _maybe( + go_repository, + name = "com_github_golang_commonmark_linkify", + importpath = "github.com/golang-commonmark/linkify", + sum = "h1:TkuRzcq232K5ytXtQ+BPicsjYWZgt/lS6gJ5HqcUifQ=", + version = "v0.0.0-20180910111149-f05efb453a0e", + ) + _maybe( + go_repository, + name = "com_github_golang_commonmark_markdown", + importpath = "github.com/golang-commonmark/markdown", + sum = "h1:YaQaotRjMcVth1VzHUEQlD2oeyQAglA7CXdxp9QLvKM=", + version = "v0.0.0-20180910011815-a8f139058164", + ) + _maybe( + go_repository, + name = "com_github_golang_commonmark_mdurl", + importpath = "github.com/golang-commonmark/mdurl", + sum = "h1:XkgfhPs5AotQfcu3EfDEjyAUx91KdtjrxHXYGnZJhoU=", + version = "v0.0.0-20180910110917-8d018c6567d6", + ) + _maybe( + go_repository, + name = "com_github_golang_commonmark_puny", + importpath = "github.com/golang-commonmark/puny", + sum = "h1:DUgQdQmDg4sk4SfNR+qOkXcopGz36BL02vp/V7WbPQI=", + version = "v0.0.0-20180910110745-050be392d8b8", + ) + _maybe( + go_repository, + name = "com_github_golang_glog", + importpath = "github.com/golang/glog", + sum = "h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=", + version = "v0.0.0-20160126235308-23def4e6c14b", + ) + _maybe( + go_repository, + name = "com_github_golang_mock", + importpath = "github.com/golang/mock", + sum = "h1:G5FRp8JnTd7RQH5kemVNlMeyXQAztQ3mOWV95KxsXH8=", + version = "v1.1.1", + ) + _maybe( + go_repository, + name = "com_github_golang_protobuf", + importpath = "github.com/golang/protobuf", + sum = "h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=", + version = "v1.3.2", + ) + _maybe( + go_repository, + name = "com_github_google_go_cmp", + importpath = "github.com/google/go-cmp", + sum = "h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=", + version = "v0.3.1", + ) + _maybe( + go_repository, + name = "com_github_jhump_protoreflect", + importpath = "github.com/jhump/protoreflect", + sum = "h1:NgpVT+dX71c8hZnxHof2M7QDK7QtohIJ7DYycjnkyfc=", + version = "v1.5.0", + ) + _maybe( + go_repository, + name = "com_github_opennota_wd", + importpath = "github.com/opennota/wd", + sum = "h1:cVQhwfBgiKTMAdYPbVeuIiTkdY59qZ3sp5RpyO8CNtg=", + version = "v0.0.0-20180911144301-b446539ab1e7", + ) + _maybe( + go_repository, + name = "com_github_russross_blackfriday", + importpath = "github.com/russross/blackfriday", + sum = "h1:cBXrhZNUf9C+La9/YpS+UHpUT8YD6Td9ZMSU9APFcsk=", + version = "v2.0.0+incompatible", + ) + _maybe( + go_repository, + name = "com_github_shurcool_sanitized_anchor_name", + importpath = "github.com/shurcooL/sanitized_anchor_name", + sum = "h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=", + version = "v1.0.0", + ) + _maybe( + go_repository, + name = "com_google_cloud_go", + importpath = "cloud.google.com/go", + sum = "h1:e0WKqKTd5BnrG8aKH3J3h+QvEIQtSUcf2n5UZ5ZgLtQ=", + version = "v0.26.0", + ) + _maybe( + go_repository, + name = "in_gopkg_check_v1", + importpath = "gopkg.in/check.v1", + sum = "h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=", + version = "v0.0.0-20161208181325-20d25e280405", + ) + _maybe( + go_repository, + name = "in_gopkg_yaml_v2", + importpath = "gopkg.in/yaml.v2", + sum = "h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=", + version = "v2.2.4", + ) + _maybe( + go_repository, + name = "org_golang_google_appengine", + importpath = "google.golang.org/appengine", + sum = "h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=", + version = "v1.4.0", + ) + _maybe( + go_repository, + name = "org_golang_google_genproto", + importpath = "google.golang.org/genproto", + sum = "h1:4HYDjxeNXAOTv3o1N2tjo8UUSlhQgAD52FVkwxnWgM8=", + version = "v0.0.0-20191009194640-548a555dbc03", + ) + _maybe( + go_repository, + name = "org_golang_google_grpc", + importpath = "google.golang.org/grpc", + sum = "h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8=", + version = "v1.19.0", + ) + _maybe( + go_repository, + name = "org_golang_x_exp", + importpath = "golang.org/x/exp", + sum = "h1:c2HOrn5iMezYjSlGPncknSEr/8x5LELb/ilJbXi9DEA=", + version = "v0.0.0-20190121172915-509febef88a4", + ) + _maybe( + go_repository, + name = "org_golang_x_lint", + importpath = "golang.org/x/lint", + sum = "h1:GmgasJE571dBGXS7E282h2rIZj+KvCLV8z5I6QXbKNI=", + version = "v0.0.0-20190227174305-5b3e6a55c961", + ) + _maybe( + go_repository, + name = "org_golang_x_net", + importpath = "golang.org/x/net", + sum = "h1:HuTn7WObtcDo9uEEU7rEqL0jYthdXAmZ6PP+meazmaU=", + version = "v0.0.0-20190213061140-3a22650c66bd", + ) + _maybe( + go_repository, + name = "org_golang_x_oauth2", + importpath = "golang.org/x/oauth2", + sum = "h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs=", + version = "v0.0.0-20180821212333-d2e6202438be", + ) + _maybe( + go_repository, + name = "org_golang_x_sync", + importpath = "golang.org/x/sync", + sum = "h1:Bl/8QSvNqXvPGPGXa2z5xUTmV7VDcZyvRZ+QQXkXTZQ=", + version = "v0.0.0-20181108010431-42b317875d0f", + ) + _maybe( + go_repository, + name = "org_golang_x_sys", + importpath = "golang.org/x/sys", + sum = "h1:Ve1ORMCxvRmSXBwJK+t3Oy+V2vRW2OetUQBq4rJIkZE=", + version = "v0.0.0-20180830151530-49385e6e1522", + ) + _maybe( + go_repository, + name = "org_golang_x_text", + importpath = "golang.org/x/text", + sum = "h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=", + version = "v0.3.0", + ) + _maybe( + go_repository, + name = "org_golang_x_tools", + importpath = "golang.org/x/tools", + sum = "h1:vamGzbGri8IKo20MQncCuljcQ5uAO6kaCeawQPVblAI=", + version = "v0.0.0-20190226205152-f727befe758c", + ) + +def _maybe(repo_rule, name, strip_repo_prefix = "", **kwargs): + if not name.startswith(strip_repo_prefix): + return + repo_name = name[len(strip_repo_prefix):] + if repo_name in native.existing_rules(): + return + repo_rule(name = repo_name, **kwargs) diff --git a/rules_go_gapic/go_gapic.bzl b/rules_go_gapic/go_gapic.bzl new file mode 100644 index 000000000..67eec0a02 --- /dev/null +++ b/rules_go_gapic/go_gapic.bzl @@ -0,0 +1,76 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@com_google_api_codegen//rules_gapic:gapic.bzl", "proto_custom_library", "unzipped_srcjar") + +def go_gapic_library(name, srcs, importpath, deps, release_level="", grpc_service_config = None, **kwargs): + output_suffix = ".srcjar" + file_args = {} + + if grpc_service_config: + file_args = { + grpc_service_config: "grpc-service-config", + } + + proto_custom_library( + name = name, + deps = srcs, + plugin = Label("//cmd/protoc-gen-go_gapic"), + plugin_args = [ + "go-gapic-package={}".format(importpath), + "release-level={}".format(release_level), + ], + plugin_file_args = file_args, + output_type = "go_gapic", + output_suffix = output_suffix, + **kwargs + ) + + # This dependecy list was copied directly from gapic-generator/rules_gapic/go. + # Ideally, this should be a common list used by macros in both repos. + # + # TODO(ndietz) de-dupe this dep list with gapic-generator/rules_gapic/go + actual_deps = deps + [ + "@com_github_googleapis_gax_go//v2:go_default_library", + "@org_golang_google_api//option:go_default_library", + "@org_golang_google_api//iterator:go_default_library", + "@org_golang_google_api//transport:go_default_library", + "@org_golang_google_grpc//:go_default_library", + "@org_golang_google_grpc//codes:go_default_library", + "@org_golang_google_grpc//metadata:go_default_library", + "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_golang_protobuf//ptypes:go_default_library", + "@com_github_golang_protobuf//ptypes/empty:go_default_library", + "@com_github_golang_protobuf//ptypes/timestamp:go_default_library", + "@org_golang_google_genproto//protobuf/field_mask:go_default_library", + "@com_google_googleapis//google/rpc:status_go_proto", + "@org_golang_google_grpc//status:go_default_library", + ] + + main_file = ":%s" % name + output_suffix + main_dir = "%s_main" % name + + unzipped_srcjar( + name = main_dir, + srcjar = main_file, + extension = ".go", + ) + + go_library( + name = name+"_pkg", + srcs = [":%s" % main_dir], + deps = actual_deps, + importpath = importpath, + ) diff --git a/showcase/BUILD.bazel b/showcase/BUILD.bazel new file mode 100644 index 000000000..d11bcca84 --- /dev/null +++ b/showcase/BUILD.bazel @@ -0,0 +1 @@ +# gazelle:ignore \ No newline at end of file