Skip to content

Instantly share code, notes, and snippets.

@salrashid123
Last active December 6, 2023 13:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save salrashid123/8e81645454d5aebdc04fd78831310cf1 to your computer and use it in GitHub Desktop.
Save salrashid123/8e81645454d5aebdc04fd78831310cf1 to your computer and use it in GitHub Desktop.
bazel build for gcp apis: (ref https://github.com/bazelbuild/rules_go/issues/3467)

ref

bazel build with go gcp library

bazel run :gazelle -- update-repos -from_file=go.mod -prune=true -to_macro=repositories.bzl%go_repositories

bazel run  --platforms=@io_bazel_rules_go//go/toolchain:linux_amd64 :main

  • WORKSPACE
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "io_bazel_rules_go",
    sha256 = "91585017debb61982f7054c9688857a2ad1fd823fc3f9cb05048b0025c47d023",
    urls = [
        "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.42.0/rules_go-v0.42.0.zip",
        "https://github.com/bazelbuild/rules_go/releases/download/v0.42.0/rules_go-v0.42.0.zip",
    ],
)

http_archive(
    name = "bazel_gazelle",
    sha256 = "d3fa66a39028e97d76f9e2db8f1b0c11c099e8e01bf363a923074784e451f809",
    urls = [
        "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.33.0/bazel-gazelle-v0.33.0.tar.gz",
        "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.33.0/bazel-gazelle-v0.33.0.tar.gz",
    ],
)

http_archive(
    name = "googleapis",
    sha256 = "9d1a930e767c93c825398b8f8692eca3fe353b9aaadedfbcf1fca2282c85df88",
    strip_prefix = "googleapis-64926d52febbf298cb82a8f472ade4a3969ba922",
    urls = [
        "https://github.com/googleapis/googleapis/archive/64926d52febbf298cb82a8f472ade4a3969ba922.zip",
    ],
)

# ==================================

load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies")

# ==================================

load("//:repositories.bzl", "go_repositories")
# gazelle:repository_macro repositories.bzl%go_repositories
go_repositories()

# ==================================

go_rules_dependencies()
go_register_toolchains(version = "1.20.5")
gazelle_dependencies()

# ==================================

load("@googleapis//:repository_rules.bzl", "switched_rules_by_language")
switched_rules_by_language(
    name = "com_google_googleapis_imports",
)

# ==================================

  • BUILD.bazel
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
load("@bazel_gazelle//:def.bzl", "gazelle")

gazelle(name = "gazelle")

go_binary(
    name = "main",
    out = "server",
    embed = [":go_default_library"],
    goarch = "amd64",
    goos = "linux",
    visibility = ["//visibility:public"],
)

go_library(
    name = "go_default_library",
    srcs = ["main.go"],
    importpath = "github.com/example/app",
    visibility = ["//visibility:private"],
    deps = [
        "@com_google_cloud_go_compute_metadata//:go_default_library",
        "@com_google_cloud_go_kms//apiv1:go_default_library",
        "@com_google_cloud_go_kms//apiv1/kmspb:go_default_library",
        "@com_google_cloud_go_logging//:go_default_library",
        "@com_google_cloud_go_pubsub//:go_default_library",
        "@org_golang_google_genproto_googleapis_api//monitoredres:monitoredres",
    ],
)

  • repositories.bzl
load("@bazel_gazelle//:deps.bzl", "go_repository")

def go_repositories():
    go_repository(
        name = "com_github_googleapis_gax_go_v2",
        importpath = "github.com/googleapis/gax-go/v2",
        build_file_proto_mode = "disable_global",
        sum = "h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=",
        version = "v2.12.0",
    )

    go_repository(
        name = "org_golang_google_appengine",
        importpath = "google.golang.org/appengine",
        build_file_proto_mode = "disable_global",
        sum = "h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=",
        version = "v1.6.7",
    )

  • main.go
package main

import (
	"fmt"

	_ "cloud.google.com/go/compute/metadata"
	_ "cloud.google.com/go/kms/apiv1"

	_ "google.golang.org/genproto/googleapis/api/monitoredres"

	_ "cloud.google.com/go/kms/apiv1/kmspb"

	_ "cloud.google.com/go/logging"
	_ "cloud.google.com/go/pubsub"
)

var ()

const ()

func main() {
	fmt.Println("ok")
}
  • go.mod
module github.com/example/app

go 1.21

require (
	cloud.google.com/go/compute/metadata v0.2.3
	cloud.google.com/go/kms v1.15.3
	cloud.google.com/go/logging v1.8.1
	cloud.google.com/go/pubsub v1.33.0
	google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b
)

require (
	cloud.google.com/go v0.110.8 // indirect
	cloud.google.com/go/compute v1.23.0 // indirect
	cloud.google.com/go/iam v1.1.2 // indirect
	cloud.google.com/go/longrunning v0.5.1 // indirect
	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
	github.com/golang/protobuf v1.5.3 // indirect
	github.com/google/go-cmp v0.5.9 // indirect
	github.com/google/s2a-go v0.1.4 // indirect
	github.com/googleapis/enterprise-certificate-proxy v0.2.4 // indirect
	github.com/googleapis/gax-go/v2 v2.12.0 // indirect
	go.opencensus.io v0.24.0 // indirect
	golang.org/x/crypto v0.14.0 // indirect
	golang.org/x/net v0.17.0 // indirect
	golang.org/x/oauth2 v0.10.0 // indirect
	golang.org/x/sync v0.3.0 // indirect
	golang.org/x/sys v0.13.0 // indirect
	golang.org/x/text v0.13.0 // indirect
	google.golang.org/api v0.128.0 // indirect
	google.golang.org/appengine v1.6.7 // indirect
	google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a // indirect
	google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a // indirect
	google.golang.org/grpc v1.58.3 // indirect
	google.golang.org/protobuf v1.31.0 // indirect
)

$ bazel query "@org_golang_google_genproto_googleapis_api//:*"
Starting local Bazel server and connecting to it...
@org_golang_google_genproto_googleapis_api//:BUILD.bazel
@org_golang_google_genproto_googleapis_api//:api
@org_golang_google_genproto_googleapis_api//:go_default_library
@org_golang_google_genproto_googleapis_api//:launch_stage.pb.go


$ bazel query "@org_golang_google_genproto_googleapis_api//monitoredres:*"
@org_golang_google_genproto_googleapis_api//monitoredres:BUILD.bazel
@org_golang_google_genproto_googleapis_api//monitoredres:go_default_library
@org_golang_google_genproto_googleapis_api//monitoredres:monitored_resource.pb.go
@org_golang_google_genproto_googleapis_api//monitoredres:monitoredres
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment