From 1eaba8bd694f7552a8e3e09b4f164de8b6ca23f0 Mon Sep 17 00:00:00 2001 From: Cody Oss <6331106+codyoss@users.noreply.github.com> Date: Tue, 20 Jul 2021 12:12:24 -0600 Subject: [PATCH] fix(internal): detect module for properly generating docs URLs (#4460) Fixes: #4447 --- internal/.repo-metadata-full.json | 36 +++++++++++++------------- internal/gapicgen/execv/gocmd/gocmd.go | 13 ++++++++++ internal/gapicgen/generator/gapics.go | 16 +++++++++--- 3 files changed, 44 insertions(+), 21 deletions(-) diff --git a/internal/.repo-metadata-full.json b/internal/.repo-metadata-full.json index 0717a995c03..f52c67e81b9 100644 --- a/internal/.repo-metadata-full.json +++ b/internal/.repo-metadata-full.json @@ -148,7 +148,7 @@ "description": "BigQuery Connection API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/bigquery/connection/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/connection/apiv1", "release_level": "ga", "library_type": "" }, @@ -157,7 +157,7 @@ "description": "BigQuery Connection API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/bigquery/connection/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/connection/apiv1beta1", "release_level": "beta", "library_type": "" }, @@ -166,7 +166,7 @@ "description": "BigQuery Data Transfer API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/bigquery/datatransfer/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/datatransfer/apiv1", "release_level": "ga", "library_type": "" }, @@ -175,7 +175,7 @@ "description": "BigQuery Reservation API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/bigquery/reservation/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/reservation/apiv1", "release_level": "ga", "library_type": "" }, @@ -184,7 +184,7 @@ "description": "BigQuery Reservation API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/bigquery/reservation/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/reservation/apiv1beta1", "release_level": "beta", "library_type": "" }, @@ -193,7 +193,7 @@ "description": "BigQuery Storage API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/bigquery/storage/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/storage/apiv1", "release_level": "ga", "library_type": "" }, @@ -202,7 +202,7 @@ "description": "BigQuery Storage API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/bigquery/storage/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/storage/apiv1beta1", "release_level": "beta", "library_type": "" }, @@ -211,7 +211,7 @@ "description": "BigQuery Storage API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/bigquery/storage/apiv1beta2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/storage/apiv1beta2", "release_level": "beta", "library_type": "" }, @@ -427,7 +427,7 @@ "description": "Cloud Datastore API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/datastore/admin/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datastore/latest/admin/apiv1", "release_level": "alpha", "library_type": "" }, @@ -562,7 +562,7 @@ "description": "Cloud Firestore API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/firestore/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest/apiv1", "release_level": "ga", "library_type": "" }, @@ -571,7 +571,7 @@ "description": "Cloud Firestore API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/firestore/apiv1/admin", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest/apiv1/admin", "release_level": "ga", "library_type": "" }, @@ -715,7 +715,7 @@ "description": "Cloud Logging API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/logging/apiv2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/logging/latest/apiv2", "release_level": "ga", "library_type": "" }, @@ -958,7 +958,7 @@ "description": "Cloud Pub/Sub API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/pubsub/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/pubsub/latest/apiv1", "release_level": "ga", "library_type": "" }, @@ -976,7 +976,7 @@ "description": "Pub/Sub Lite API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/pubsublite/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/pubsublite/latest/apiv1", "release_level": "ga", "library_type": "" }, @@ -1237,7 +1237,7 @@ "description": "Cloud Spanner Database Admin API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/spanner/admin/database/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/spanner/latest/admin/database/apiv1", "release_level": "ga", "library_type": "" }, @@ -1246,7 +1246,7 @@ "description": "Cloud Spanner Instance Admin API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/spanner/admin/instance/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/spanner/latest/admin/instance/apiv1", "release_level": "ga", "library_type": "" }, @@ -1255,7 +1255,7 @@ "description": "Cloud Spanner API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/spanner/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/spanner/latest/apiv1", "release_level": "ga", "library_type": "" }, @@ -1291,7 +1291,7 @@ "description": "Cloud Storage API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/storage/internal/apiv2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/storage/latest/internal/apiv2", "release_level": "alpha", "library_type": "" }, diff --git a/internal/gapicgen/execv/gocmd/gocmd.go b/internal/gapicgen/execv/gocmd/gocmd.go index a839b401990..e0ec2c79c24 100644 --- a/internal/gapicgen/execv/gocmd/gocmd.go +++ b/internal/gapicgen/execv/gocmd/gocmd.go @@ -90,3 +90,16 @@ func Vet(dir string) error { c.Dir = dir return c.Run() } + +// CurrentMod returns the module name of the provided directory. +func CurrentMod(dir string) (string, error) { + log.Println("detecting current module") + c := execv.Command("go", "list", "-m") + c.Dir = dir + var out []byte + var err error + if out, err = c.Output(); err != nil { + return "", err + } + return strings.TrimSpace(string(out)), nil +} diff --git a/internal/gapicgen/generator/gapics.go b/internal/gapicgen/generator/gapics.go index 85a4d7d4642..9856accb9e0 100644 --- a/internal/gapicgen/generator/gapics.go +++ b/internal/gapicgen/generator/gapics.go @@ -506,12 +506,16 @@ func (g *GapicGenerator) manifest(confs []*microgenConfig) error { if err := yaml.NewDecoder(yamlFile).Decode(&yamlConfig); err != nil { return fmt.Errorf("decode: %v", err) } + docURL, err := docURL(g.googleCloudDir, conf.importPath) + if err != nil { + return fmt.Errorf("unable to build docs URL: %v", err) + } entry := manifestEntry{ DistributionName: conf.importPath, Description: yamlConfig.Title, Language: "Go", ClientLibraryType: "generated", - DocsURL: docURL(conf.importPath), + DocsURL: docURL, ReleaseLevel: conf.releaseLevel, } entries[conf.importPath] = entry @@ -596,6 +600,12 @@ func (g *GapicGenerator) findModifiedDirs() ([]string, error) { return dirList, nil } -func docURL(importPath string) string { - return "https://cloud.google.com/go/docs/reference/" + importPath[:20] + "latest/" + importPath[20:] +func docURL(cloudDir, importPath string) (string, error) { + suffix := strings.TrimPrefix(importPath, "cloud.google.com/go/") + mod, err := gocmd.CurrentMod(filepath.Join(cloudDir, suffix)) + if err != nil { + return "", err + } + pkgPath := strings.TrimPrefix(strings.TrimPrefix(importPath, mod), "/") + return "https://cloud.google.com/go/docs/reference/" + mod + "/latest/" + pkgPath, nil }