diff --git a/synthtool/gcp/templates/node_mono_repo_library/README.md b/synthtool/gcp/templates/node_mono_repo_library/README.md index e5a6fa5f2..d06ef4104 100644 --- a/synthtool/gcp/templates/node_mono_repo_library/README.md +++ b/synthtool/gcp/templates/node_mono_repo_library/README.md @@ -24,11 +24,11 @@ {% endif %} A comprehensive list of changes in each version may be found in -[the CHANGELOG](https://github.com/{{ metadata['repo']['repo'] }}/blob/{{metadata['repo']['default_branch']}}/CHANGELOG.md). +[the CHANGELOG]({{ metadata['homepage'] }}/CHANGELOG.md). {% if metadata['repo']['client_documentation'] %}* [{{ metadata['repo']['name_pretty'] }} {{ metadata['repo']['language']|language_pretty }} Client API Reference][client-docs]{% endif %} {% if metadata['repo']['product_documentation'] %}* [{{ metadata['repo']['name_pretty'] }} Documentation][product-docs]{% endif %} -* [github.com/{{ metadata['repo']['repo'] }}](https://github.com/{{ metadata['repo']['repo'] }}) +* [github.com/{{ metadata['full_directory_path'] }}]({{ metadata['homepage'] }}) Read more about the client libraries for Cloud APIs, including the older Google APIs Client Libraries, in [Client Libraries Explained][explained]. diff --git a/synthtool/languages/node_mono_repo.py b/synthtool/languages/node_mono_repo.py index 0fe0e86a4..6f79bd9c1 100644 --- a/synthtool/languages/node_mono_repo.py +++ b/synthtool/languages/node_mono_repo.py @@ -47,8 +47,24 @@ def read_metadata(relative_dir: str): f"package.json is missing required fields {_REQUIRED_FIELDS}" ) - repo = git.parse_repo_url(data["repository"]) + repo_url = ( + data["repository"] + if isinstance(data["repository"], str) + else data["repository"]["url"] + ) + + repo = git.parse_repo_url(repo_url) + data["full_directory_path"] = ( + data["repository"] + if isinstance(data["repository"], str) + else f'{repo["owner"]}/{repo["name"]}/{data["repository"]["directory"]}' + ) + data["homepage"] = ( + data["repository"] + if isinstance(data["repository"], str) + else data["homepage"] + ) data["repository"] = f'{repo["owner"]}/{repo["name"]}' data["repository_name"] = repo["name"] data["lib_install_cmd"] = f'npm install {data["name"]}' diff --git a/tests/fixtures/node_templates/package_json_mono_repo/package.json b/tests/fixtures/node_templates/package_json_mono_repo/package.json new file mode 100644 index 000000000..5e3b8d794 --- /dev/null +++ b/tests/fixtures/node_templates/package_json_mono_repo/package.json @@ -0,0 +1,77 @@ +{ + "name": "@google-cloud/dlp", + "description": "DLP API client for Node.js", + "version": "3.1.0", + "license": "Apache-2.0", + "author": "Google Inc", + "engines": { + "node": ">=10.0.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/googleapis/google-cloud-node.git", + "directory": "packages/google-cloud-dlp" + }, + "homepage": "https://github.com/googleapis/google-cloud-node/tree/main/packages/google-cloud-dlp", + "main": "build/src/index.js", + "files": [ + "build/protos", + "build/src" + ], + "keywords": [ + "google apis client", + "google api client", + "google apis", + "google api", + "google", + "google cloud platform", + "google cloud", + "cloud", + "google dlp", + "dlp", + "DLP API" + ], + "scripts": { + "test": "c8 mocha build/test", + "samples-test": "cd samples/ && npm link ../ && npm install && npm test && cd ../", + "system-test": "mocha build/system-test", + "docs": "jsdoc -c .jsdoc.js", + "lint": "gts check", + "fix": "gts fix", + "docs-test": "linkinator docs", + "clean": "gts clean", + "compile": "tsc -p . && cp -r protos build/", + "compile-protos": "compileProtos src", + "predocs-test": "npm run docs", + "prepare": "npm run compile-protos && npm run compile", + "prelint": "cd samples; npm link ../; npm install", + "precompile": "gts clean", + "api-extractor": "api-extractor run --local", + "api-documenter": "api-documenter yaml --input-folder=temp" + }, + "dependencies": { + "google-gax": "^2.9.2", + "protobufjs": "^6.8.0" + }, + "devDependencies": { + "@types/mocha": "^8.0.0", + "@types/node": "^12.0.0", + "@types/sinon": "^9.0.0", + "c8": "^7.0.0", + "gts": "^2.0.0", + "jsdoc": "^3.5.5", + "jsdoc-fresh": "^1.0.1", + "jsdoc-region-tag": "^1.0.2", + "linkinator": "^2.0.0", + "mocha": "^8.0.0", + "null-loader": "^4.0.0", + "pack-n-play": "^1.0.0-2", + "sinon": "^14.0.0", + "ts-loader": "^9.0.0", + "typescript": "^3.8.3", + "webpack": "^5.0.0", + "webpack-cli": "^4.0.0", + "@microsoft/api-documenter": "^7.8.10", + "@microsoft/api-extractor": "^7.8.10" + } + } \ No newline at end of file diff --git a/tests/test_node_mono_repo.py b/tests/test_node_mono_repo.py index 5393903c3..6823e3211 100644 --- a/tests/test_node_mono_repo.py +++ b/tests/test_node_mono_repo.py @@ -15,6 +15,7 @@ import filecmp import pathlib import re +import os from pathlib import Path from unittest import TestCase from unittest.mock import patch @@ -52,6 +53,22 @@ def test_quickstart_metadata_with_snippet(): ) +def test_package_json_mono_repo(): + with util.chdir(FIXTURES / "node_templates" / "package_json_mono_repo"): + metadata = node_mono_repo.template_metadata( + FIXTURES / "node_templates" / "package_json_mono_repo" + ) + assert ( + "https://github.com/googleapis/google-cloud-node/tree/main/packages/google-cloud-dlp" + in metadata["homepage"] + ) + print(metadata["full_directory_path"]) + assert ( + "google-cloud-node/packages/google-cloud-dlp" + in metadata["full_directory_path"] + ) + + def test_metadata_engines_field(): with util.chdir(FIXTURES / "node_templates" / "standard"): metadata = node_mono_repo.template_metadata( @@ -180,7 +197,9 @@ def test_write_release_please_config(): def test_copy_quickstart(): - with util.copied_fixtures_dir(FIXTURES): + with util.copied_fixtures_dir( + FIXTURES / "nodejs_mono_repo_with_samples" / "packages" / "datastore" + ): node_mono_repo.copy_list_sample_to_quickstart( FIXTURES / "nodejs_mono_repo_with_samples" / "packages" / "datastore" ) @@ -204,6 +223,14 @@ def test_copy_quickstart(): / "compare_to_quickstart.js" ), ) + os.remove( + FIXTURES + / "nodejs_mono_repo_with_samples" + / "packages" + / "datastore" + / "samples" + / "quickstart.js" + ) def test_generate_index_ts_empty_versions():