Advanced uses cases

Shipping additional files

If you need to ship additional files in your source code packages, you can use the following macros in the preamble:

  • %global goextensions A space separated list of extensions that should be included in the devel package in addition to Go default file extensions.

  • %global gosupfiles: A space-separated list of shell globs matching other files to include in the devel package.

  • %global gosupfilesex A space-separated list of shell globs matching other files you wish to exclude from package lists. Only works with “gosupfiles”-specified files.

For example, if you have glide files to ship:

%global gosupfiles glide.yaml glide.lock

Additional header declarations

Use %godevelheader to add specific subpackage declarations. For example, you might want to require the main package containing the binaries, or Obsoletes/Provides another package in case of renaming.

%global godevelheader %{expand:
Requires:
Obsoletes:
Provides:
}

Dealing with cyclic dependencies

In many cases, you’ll encounter packages that depend on each other, also known as cyclic dependencies, making it difficult to build either package.

Typically, when you have a problematic requires, it is only used in specific project subpackages, and most project dependents do not need those subpackages directly or indirectly. The idea is then to affect the goipaths associated with the problematic subpackages to a separate -devel rpm package, to simplify your dependency graph.

Let’s take for example the following packages: cloud.google.com/go and golang.org/x/oauth2.

cloud.google.com/go has the following dependency graph:

github.com/golang/mock/gomock
github.com/golang/protobuf/proto
github.com/golang/protobuf/ptypes
github.com/golang/protobuf/ptypes/any
github.com/golang/protobuf/ptypes/duration
github.com/golang/protobuf/ptypes/empty
github.com/golang/protobuf/ptypes/struct
github.com/golang/protobuf/ptypes/timestamp
github.com/golang/protobuf/ptypes/wrappers
github.com/google/btree
github.com/google/go-cmp/cmp
github.com/google/martian
github.com/google/martian/fifo
github.com/google/martian/httpspec
github.com/google/martian/martianhttp
github.com/google/martian/martianlog
github.com/google/martian/mitm
github.com/google/pprof/profile
github.com/googleapis/gax-go/v2
go.opencensus.io/plugin/ocgrpc
go.opencensus.io/stats
go.opencensus.io/stats/view
go.opencensus.io/tag
go.opencensus.io/trace
golang.org/x/build/kubernetes
golang.org/x/build/kubernetes/api
golang.org/x/build/kubernetes/gke
golang.org/x/oauth2
golang.org/x/oauth2/google
golang.org/x/oauth2/jwt
golang.org/x/sync/errgroup
golang.org/x/sync/semaphore
golang.org/x/text/language
golang.org/x/time/rate
[…]

And golang.org/x/oauth2 has the following dependency graph:

cloud.google.com/go/compute/metadata
golang.org/x/net/context/ctxhttp

As you can see both packages depend on each other. If we search for where cloud.google.com/go is used in golang.org/x/oauth2:

grep -nr "cloud.google.com/go/compute/metadata" $GOPATH/src/golang.org/x/oauth2

/home/user/go/src/golang.org/x/oauth2/google/default.go:17:      "cloud.google.com/go/compute/metadata"
/home/user/go/src/golang.org/x/oauth2/google/google.go:15:       "cloud.google.com/go/compute/metadata"

we can see that it is used in the`golang.org/x/oauth2/google` subpackage, which is precisely the subpackage needed by cloud.google.com/go. It is thus not possible to split golang.org/x/oauth2/google into separate devel subpackage to resolve our cyclic dependency graph.

Now if we search for where golang.org/x/oauth2 is used in cloud.google.com/go:

grep -nr "golang.org/x/oauth2/google" $GOPATH/src/cloud.google.com/go

/home/user/go/src/cloud.google.com/go/cmd/go-cloud-debug-agent/debuglet.go:38:   "golang.org/x/oauth2/google"
/home/user/go/src/cloud.google.com/go/internal/testutil/context.go:26:   "golang.org/x/oauth2/google"
/home/user/go/src/cloud.google.com/go/profiler/integration_test.go:30:   "golang.org/x/oauth2/google"
/home/user/go/src/cloud.google.com/go/authexample_test.go:22:    "golang.org/x/oauth2/google"

we can see that it is not used in the cloud.google.com/go/compute/metadata subpackage. As a result we can split cloud.google.com/go/compute/metadata into a separate devel subpackage to resolve our cyclic dependency graph.

To achieve this, we use multiple goipaths in the preamble:

%global goipaths0       cloud.google.com/go
%global goipathsex0     cloud.google.com/go/compute

%global goipaths1       cloud.google.com/go/compute

goipaths0 will be the main package from which we exclude compute, and goipaths1 will be the split package containing it.

After building, we end up with two packages:

  • golang-cloud-google-devel-0.36.0-1.fc31.x86_64.rpm, which provides:

    golang(cloud.google.com/go) = 0.36.0-1.fc31
    golang(cloud.google.com/go/asset/apiv1beta1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/asset/v1beta1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/bigquery) = 0.36.0-1.fc31
    golang(cloud.google.com/go/bigquery/datatransfer/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/bigquery/storage/apiv1beta1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/bigtable) = 0.36.0-1.fc31
    golang(cloud.google.com/go/bigtable/bttest) = 0.36.0-1.fc31
    golang(cloud.google.com/go/bigtable/internal/cbtconfig) = 0.36.0-1.fc31
    golang(cloud.google.com/go/bigtable/internal/gax) = 0.36.0-1.fc31
    golang(cloud.google.com/go/bigtable/internal/option) = 0.36.0-1.fc31
    golang(cloud.google.com/go/bigtable/internal/stat) = 0.36.0-1.fc31
    golang(cloud.google.com/go/civil) = 0.36.0-1.fc31
    golang(cloud.google.com/go/cloudtasks/apiv2beta2) = 0.36.0-1.fc31
    golang(cloud.google.com/go/cloudtasks/apiv2beta3) = 0.36.0-1.fc31
    golang(cloud.google.com/go/cmd/go-cloud-debug-agent/internal/breakpoints) = 0.36.0-1.fc31
    golang(cloud.google.com/go/cmd/go-cloud-debug-agent/internal/controller) = 0.36.0-1.fc31
    golang(cloud.google.com/go/cmd/go-cloud-debug-agent/internal/debug) = 0.36.0-1.fc31
    golang(cloud.google.com/go/cmd/go-cloud-debug-agent/internal/debug/arch) = 0.36.0-1.fc31
    golang(cloud.google.com/go/cmd/go-cloud-debug-agent/internal/debug/dwarf) = 0.36.0-1.fc31
    golang(cloud.google.com/go/cmd/go-cloud-debug-agent/internal/debug/elf) = 0.36.0-1.fc31
    golang(cloud.google.com/go/cmd/go-cloud-debug-agent/internal/debug/gosym) = 0.36.0-1.fc31
    golang(cloud.google.com/go/cmd/go-cloud-debug-agent/internal/debug/local) = 0.36.0-1.fc31
    golang(cloud.google.com/go/cmd/go-cloud-debug-agent/internal/debug/remote) = 0.36.0-1.fc31
    golang(cloud.google.com/go/cmd/go-cloud-debug-agent/internal/debug/server) = 0.36.0-1.fc31
    golang(cloud.google.com/go/cmd/go-cloud-debug-agent/internal/debug/server/protocol) = 0.36.0-1.fc31
    golang(cloud.google.com/go/cmd/go-cloud-debug-agent/internal/debug/tests/peek) = 0.36.0-1.fc31
    golang(cloud.google.com/go/cmd/go-cloud-debug-agent/internal/valuecollector) = 0.36.0-1.fc31
    golang(cloud.google.com/go/container) = 0.36.0-1.fc31
    golang(cloud.google.com/go/container/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/containeranalysis/apiv1beta1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/dataproc/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/dataproc/apiv1beta2) = 0.36.0-1.fc31
    golang(cloud.google.com/go/datastore) = 0.36.0-1.fc31
    golang(cloud.google.com/go/debugger/apiv2) = 0.36.0-1.fc31
    golang(cloud.google.com/go/dialogflow/apiv2) = 0.36.0-1.fc31
    golang(cloud.google.com/go/dlp/apiv2) = 0.36.0-1.fc31
    golang(cloud.google.com/go/errorreporting) = 0.36.0-1.fc31
    golang(cloud.google.com/go/errorreporting/apiv1beta1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/expr/apiv1alpha1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/firestore) = 0.36.0-1.fc31
    golang(cloud.google.com/go/firestore/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/firestore/apiv1beta1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/firestore/genproto) = 0.36.0-1.fc31
    golang(cloud.google.com/go/firestore/internal) = 0.36.0-1.fc31
    golang(cloud.google.com/go/functions/metadata) = 0.36.0-1.fc31
    golang(cloud.google.com/go/httpreplay) = 0.36.0-1.fc31
    golang(cloud.google.com/go/httpreplay/internal/proxy) = 0.36.0-1.fc31
    golang(cloud.google.com/go/iam) = 0.36.0-1.fc31
    golang(cloud.google.com/go/iam/admin/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/iam/credentials/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/internal) = 0.36.0-1.fc31
    golang(cloud.google.com/go/internal/btree) = 0.36.0-1.fc31
    golang(cloud.google.com/go/internal/fields) = 0.36.0-1.fc31
    golang(cloud.google.com/go/internal/leakcheck) = 0.36.0-1.fc31
    golang(cloud.google.com/go/internal/optional) = 0.36.0-1.fc31
    golang(cloud.google.com/go/internal/pretty) = 0.36.0-1.fc31
    golang(cloud.google.com/go/internal/protostruct) = 0.36.0-1.fc31
    golang(cloud.google.com/go/internal/testutil) = 0.36.0-1.fc31
    golang(cloud.google.com/go/internal/trace) = 0.36.0-1.fc31
    golang(cloud.google.com/go/internal/tracecontext) = 0.36.0-1.fc31
    golang(cloud.google.com/go/internal/uid) = 0.36.0-1.fc31
    golang(cloud.google.com/go/internal/version) = 0.36.0-1.fc31
    golang(cloud.google.com/go/irm/apiv1alpha2) = 0.36.0-1.fc31
    golang(cloud.google.com/go/kms/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/language/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/language/apiv1beta2) = 0.36.0-1.fc31
    golang(cloud.google.com/go/logging) = 0.36.0-1.fc31
    golang(cloud.google.com/go/logging/apiv2) = 0.36.0-1.fc31
    golang(cloud.google.com/go/logging/internal) = 0.36.0-1.fc31
    golang(cloud.google.com/go/logging/internal/testing) = 0.36.0-1.fc31
    golang(cloud.google.com/go/logging/logadmin) = 0.36.0-1.fc31
    golang(cloud.google.com/go/longrunning) = 0.36.0-1.fc31
    golang(cloud.google.com/go/longrunning/autogen) = 0.36.0-1.fc31
    golang(cloud.google.com/go/monitoring/apiv3) = 0.36.0-1.fc31
    golang(cloud.google.com/go/oslogin/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/oslogin/apiv1beta) = 0.36.0-1.fc31
    golang(cloud.google.com/go/profiler) = 0.36.0-1.fc31
    golang(cloud.google.com/go/profiler/mocks) = 0.36.0-1.fc31
    golang(cloud.google.com/go/profiler/proftest) = 0.36.0-1.fc31
    golang(cloud.google.com/go/pubsub) = 0.36.0-1.fc31
    golang(cloud.google.com/go/pubsub/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/pubsub/internal/distribution) = 0.36.0-1.fc31
    golang(cloud.google.com/go/pubsub/loadtest) = 0.36.0-1.fc31
    golang(cloud.google.com/go/pubsub/loadtest/pb) = 0.36.0-1.fc31
    golang(cloud.google.com/go/pubsub/pstest) = 0.36.0-1.fc31
    golang(cloud.google.com/go/redis/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/redis/apiv1beta1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/rpcreplay) = 0.36.0-1.fc31
    golang(cloud.google.com/go/rpcreplay/proto/intstore) = 0.36.0-1.fc31
    golang(cloud.google.com/go/rpcreplay/proto/rpcreplay) = 0.36.0-1.fc31
    golang(cloud.google.com/go/scheduler/apiv1beta1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/securitycenter/apiv1beta1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/spanner) = 0.36.0-1.fc31
    golang(cloud.google.com/go/spanner/admin/database/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/spanner/admin/instance/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/spanner/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/spanner/internal/backoff) = 0.36.0-1.fc31
    golang(cloud.google.com/go/spanner/internal/testutil) = 0.36.0-1.fc31
    golang(cloud.google.com/go/speech/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/speech/apiv1p1beta1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/storage) = 0.36.0-1.fc31
    golang(cloud.google.com/go/talent/apiv4beta1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/texttospeech/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/trace) = 0.36.0-1.fc31
    golang(cloud.google.com/go/trace/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/trace/apiv2) = 0.36.0-1.fc31
    golang(cloud.google.com/go/translate) = 0.36.0-1.fc31
    golang(cloud.google.com/go/translate/internal/translate/v2) = 0.36.0-1.fc31
    golang(cloud.google.com/go/videointelligence/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/videointelligence/apiv1beta1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/videointelligence/apiv1beta2) = 0.36.0-1.fc31
    golang(cloud.google.com/go/vision/apiv1) = 0.36.0-1.fc31
    golang(cloud.google.com/go/vision/apiv1p1beta1) = 0.36.0-1.fc31
    golang-cloud-google-devel = 0.36.0-1.fc31
    golang-cloud-google-devel(x86-64) = 0.36.0-1.fc31
    golang-ipath(cloud.google.com/go) = 0.36.0-1.fc31
  • golang-cloud-google-compute-devel-0.36.0-1.fc31.x86_64.rpm, which provides:

    golang(cloud.google.com/go/compute/metadata) = 0.36.0-1.fc31
    golang-cloud-google-compute-devel = 0.36.0-1.fc31
    golang-cloud-google-compute-devel(x86-64) = 0.36.0-1.fc31
    golang-ipath(cloud.google.com/go/compute) = 0.36.0-1.fc31

We now have broken the cyclic dependency graph: golang.org/x/oauth2 can now depend separately on golang-cloud-google-compute-devel.

Here is the full example:

golang-cloud-google-go.spec
# Generated by go2rpm
%bcond_without check
%bcond_without bootstrap

# https://github.com/GoogleCloudPlatform/google-cloud-go
%global goipath         cloud.google.com/go
%global forgeurl        https://github.com/GoogleCloudPlatform/google-cloud-go
Version:                0.37.4

%gometa

%if %{without bootstrap}
%global goipaths0       cloud.google.com/go
%global goipathsex0     cloud.google.com/go/compute
%endif

%global goipaths1       cloud.google.com/go/compute

%global common_description %{expand:
Go packages for Google Cloud Platform services.}

%global golicenses      LICENSE
%global godocs          AUTHORS CODE_OF_CONDUCT.md CONTRIBUTING.md CONTRIBUTORS RELEASING.md old-news.md CHANGES.md README.md

Name:           %{goname}
Release:        1%{?dist}
Summary:        Google Cloud client libraries for Go

# Upstream license specification: Apache-2.0
License:        ASL 2.0
URL:            %{gourl}
Source0:        %{gosource}

%if %{without bootstrap}
BuildRequires:  golang(github.com/golang/mock/gomock)
BuildRequires:  golang(github.com/golang/protobuf/proto)
BuildRequires:  golang(github.com/golang/protobuf/ptypes)
BuildRequires:  golang(github.com/golang/protobuf/ptypes/any)
BuildRequires:  golang(github.com/golang/protobuf/ptypes/duration)
BuildRequires:  golang(github.com/golang/protobuf/ptypes/empty)
BuildRequires:  golang(github.com/golang/protobuf/ptypes/struct)
BuildRequires:  golang(github.com/golang/protobuf/ptypes/timestamp)
BuildRequires:  golang(github.com/golang/protobuf/ptypes/wrappers)
BuildRequires:  golang(github.com/google/btree)
BuildRequires:  golang(github.com/google/go-cmp/cmp)
BuildRequires:  golang(github.com/google/martian)
BuildRequires:  golang(github.com/google/martian/fifo)
BuildRequires:  golang(github.com/google/martian/httpspec)
BuildRequires:  golang(github.com/google/martian/martianhttp)
BuildRequires:  golang(github.com/google/martian/martianlog)
BuildRequires:  golang(github.com/google/martian/mitm)
BuildRequires:  golang(github.com/google/pprof/profile)
BuildRequires:  golang(github.com/googleapis/gax-go/v2)
BuildRequires:  golang(go.opencensus.io/plugin/ocgrpc)
BuildRequires:  golang(go.opencensus.io/stats)
BuildRequires:  golang(go.opencensus.io/stats/view)
BuildRequires:  golang(go.opencensus.io/tag)
BuildRequires:  golang(go.opencensus.io/trace)
BuildRequires:  golang(golang.org/x/oauth2)
BuildRequires:  golang(golang.org/x/oauth2/google)
BuildRequires:  golang(golang.org/x/oauth2/jwt)
BuildRequires:  golang(golang.org/x/sync/errgroup)
BuildRequires:  golang(golang.org/x/sync/semaphore)
BuildRequires:  golang(golang.org/x/text/language)
BuildRequires:  golang(golang.org/x/time/rate)
BuildRequires:  golang(google.golang.org/api/bigquery/v2)
BuildRequires:  golang(google.golang.org/api/clouddebugger/v2)
BuildRequires:  golang(google.golang.org/api/cloudresourcemanager/v1)
BuildRequires:  golang(google.golang.org/api/cloudtrace/v1)
BuildRequires:  golang(google.golang.org/api/compute/v1)
BuildRequires:  golang(google.golang.org/api/container/v1)
BuildRequires:  golang(google.golang.org/api/gensupport)
BuildRequires:  golang(google.golang.org/api/googleapi)
BuildRequires:  golang(google.golang.org/api/iterator)
BuildRequires:  golang(google.golang.org/api/option)
BuildRequires:  golang(google.golang.org/api/storage/v1)
BuildRequires:  golang(google.golang.org/api/support/bundler)
BuildRequires:  golang(google.golang.org/api/transport)
BuildRequires:  golang(google.golang.org/api/transport/grpc)
BuildRequires:  golang(google.golang.org/api/transport/http)
BuildRequires:  golang(google.golang.org/genproto/googleapis/api/expr/v1alpha1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/api/label)
BuildRequires:  golang(google.golang.org/genproto/googleapis/api/metric)
BuildRequires:  golang(google.golang.org/genproto/googleapis/api/monitoredres)
BuildRequires:  golang(google.golang.org/genproto/googleapis/appengine/logging/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/bigtable/admin/v2)
BuildRequires:  golang(google.golang.org/genproto/googleapis/bigtable/v2)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/asset/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/asset/v1beta1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/audit)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/bigquery/datatransfer/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/bigquery/storage/v1beta1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/dataproc/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/dialogflow/v2)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/iot/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/irm/v1alpha2)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/kms/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/language/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/language/v1beta2)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/oslogin/common)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/oslogin/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/oslogin/v1beta)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/redis/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/redis/v1beta1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/scheduler/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/scheduler/v1beta1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/securitycenter/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/securitycenter/v1beta1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/speech/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/speech/v1p1beta1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/talent/v4beta1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/tasks/v2)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/tasks/v2beta2)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/tasks/v2beta3)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/texttospeech/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/videointelligence/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/videointelligence/v1beta1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/videointelligence/v1beta2)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/vision/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/cloud/webrisk/v1beta1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/container/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/datastore/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/devtools/clouddebugger/v2)
BuildRequires:  golang(google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/devtools/cloudprofiler/v2)
BuildRequires:  golang(google.golang.org/genproto/googleapis/devtools/cloudtrace/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/devtools/cloudtrace/v2)
BuildRequires:  golang(google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/grafeas)
BuildRequires:  golang(google.golang.org/genproto/googleapis/firestore/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/iam/admin/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/iam/credentials/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/iam/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/logging/type)
BuildRequires:  golang(google.golang.org/genproto/googleapis/logging/v2)
BuildRequires:  golang(google.golang.org/genproto/googleapis/longrunning)
BuildRequires:  golang(google.golang.org/genproto/googleapis/monitoring/v3)
BuildRequires:  golang(google.golang.org/genproto/googleapis/privacy/dlp/v2)
BuildRequires:  golang(google.golang.org/genproto/googleapis/pubsub/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/rpc/code)
BuildRequires:  golang(google.golang.org/genproto/googleapis/rpc/errdetails)
BuildRequires:  golang(google.golang.org/genproto/googleapis/rpc/status)
BuildRequires:  golang(google.golang.org/genproto/googleapis/spanner/admin/database/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/spanner/admin/instance/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/spanner/v1)
BuildRequires:  golang(google.golang.org/genproto/googleapis/type/latlng)
BuildRequires:  golang(google.golang.org/genproto/protobuf/field_mask)
BuildRequires:  golang(google.golang.org/grpc)
BuildRequires:  golang(google.golang.org/grpc/codes)
BuildRequires:  golang(google.golang.org/grpc/credentials)
BuildRequires:  golang(google.golang.org/grpc/keepalive)
BuildRequires:  golang(google.golang.org/grpc/metadata)
BuildRequires:  golang(google.golang.org/grpc/status)

%if %{with check}
# Tests
BuildRequires:  golang(github.com/google/go-cmp/cmp/cmpopts)
BuildRequires:  golang(google.golang.org/api/iterator/testing)
BuildRequires:  golang(google.golang.org/api/logging/v2)
%endif
%endif

%description
%{common_description}

%gopkg

%prep
%goprep

%install
%gopkginstall

%if %{without bootstrap}
%if %{with check}
%check
%gocheck
%endif
%endif

%gopkgfiles

%changelog
* Tue Apr 23 09:48:52 CEST 2019 Robert-André Mauchin <zebob.m@gmail.com> - 0.37.4-1
- Release 0.37.4