discovery-artifact-manager

module
v0.0.0-...-21b4110 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 10, 2024 License: Apache-2.0

README

Introduction

The Discovery Artifact Manager is intended to facilitate testing, publishing, and synchronization of generators and artifacts for client libraries and generated code samples of Google APIs defined by the API Discovery Service.

This repo includes copies of the following in separate top-level directories:

NOTE: This repo only contains a cache of the above items; it is not their source of truth. Changes to Toolkit and Discovery-based Google API client libraries should be directed to their respective repos. There is no guarantee that sources or Discovery files in this repo are up to date.

Local machine setup

Install git-subrepo on your local machine.

Adding a new client library repo

Use the git subrepo clone command, from the root directory of this repository. The NodeJS library, for example, is installed using:

git subrepo clone https://github.com/google/google-api-nodejs-client.git clients/nodejs/google-api-nodejs-client

Modifying a client library repo

To make changes to a repo, use the git subrepo pull and git subrepo push commands. The former will merge your local client with fetched upstream changes, and the latter will actually do the push to the upstream sub-repo. For example, to push the PHP client library:

git subrepo pull clients/php/google-api-php-client-services
git subrepo push clients/php/google-api-php-client-services

During the course of your local work, you may find yourself deciding to reset your HEAD locally. If you do this after a subrepo push, trying to reset your HEAD to before the push, then this can cause some complications: you would not want github subrepo to subsequently pull again, as it normally does when pushing (since that will merge the upstream changes you pushed earlier). Instead, you can force-push your changes by using git subrepo push --force. We're still learning the quirks of git subrepo, but a good rule of thumb is to be extremely careful when manipulating references that have already been synced (push or pull) with the external subrepo locations.

After you push your subrepo, you should also push discovery-artifact-manager to your review branch.

Pushing changes for review

When you make a change to code that lives in discovery-artifact-manager, either directly or via subrepos, you should stage your code to your own Github review branch and then create a Pull Request from there to the Github master branch.

  1. Create a review branch on Github. We'll refer to the name of the branch as ${REVIEW_BRANCH}.
  2. Decide what local branch you'll push. Often, this will be master. We'll refer to this branch as ${LOCAL_BRANCH}
  3. From your local machine, push to the review branch:
git push origin ${LOCAL_BRANCH}:${REVIEW_BRANCH}
  1. On Github, issue a Pull Request against the master branch.

Updating local Discovery doc cache

To aid hermetic testing of client libraries and samples (avoiding synchronization issues), the discoveries directory hosts a local cache of Discovery docs from the Discovery service. This cache may be updated from current live versions by running

./src/main/updatedisco/updatedisco

from any subdirectory. This cache is not yet used for testing by other tools.

Running tests

cd toolkit
./gradlew test

Updating samples

To update samples, you will both need to make edits in the appropriate .snip file, e.g., toolkit/src/main/resources/com/google/api/codegen/nodejs/sample.snip, and update tests.

Updating tests
  • cd toolkit.
  • run: ./gradlew test, this will generate the expected test output in /tmp/com.google.api.codegen_testdata/.
  • copy the snapshot files generated in /tmp to the appropriate location, in the case of this example: src/test/java/com/google/api/codegen/testdata/discoveries/nodejs/.
  • make sure that the samples look appropriate.
  • and finally, re-run tests.

Directories

Path Synopsis
src
common/clone
Package clone implements a generic Clone() operation applicable to all types.
Package clone implements a generic Clone() operation applicable to all types.
common/environment
Package environment returns information about the environment in which this binary executes.
Package environment returns information about the environment in which this binary executes.
common/errorlist
Package errorlist maintains a list of errors that clients can populate and later retrieve, in order to present multiple errors to the user at once (as opposed to causing piecemeal incremental failures as the user fixes one error and re-runs).
Package errorlist maintains a list of errors that clients can populate and later retrieve, in order to present multiple errors to the user at once (as opposed to causing piecemeal incremental failures as the user fixes one error and re-runs).
common/gcs
Package gcs allows users to run the gsutil command to upload data to Google Cloud storage.
Package gcs allows users to run the gsutil command to upload data to Google Cloud storage.
common/parsehtml
Package parsehtml provides utilities for parsing HTML-format library documentation, which is referenced for type information by the Python "compile" check.
Package parsehtml provides utilities for parsing HTML-format library documentation, which is referenced for type information by the Python "compile" check.
main/update
Package update provides the top-level `Update` function to refresh and regenerate artifacts in discovery-artifact-manager
Package update provides the top-level `Update` function to refresh and regenerate artifacts in discovery-artifact-manager
main/updatedisco
Package main provides a standalone executable `updatedisco` to update the local Discovery doc cache from the live Discovery service in a top-level directory 'discoveries', which must exist.
Package main provides a standalone executable `updatedisco` to update the local Discovery doc cache from the live Discovery service in a top-level directory 'discoveries', which must exist.
snippetgen/common/clientlib
Package clientlib provides utility functions to help with downloading client libraries.
Package clientlib provides utility functions to help with downloading client libraries.
snippetgen/common/fragment
Package fragment defines the format of the fragment files that will eventually be displayed on documentation pages.
Package fragment defines the format of the fragment files that will eventually be displayed on documentation pages.
snippetgen/common/metadata
Package metadata contains utility functions as well as run-time constants for creating the fragment files.
Package metadata contains utility functions as well as run-time constants for creating the fragment files.
snippetgen/compilecheck
compilecheck sets up tests to check the validity of generated code samples.
compilecheck sets up tests to check the validity of generated code samples.
snippetgen/compilecheck/internal/csharp
Package csharp implements compile checking for C#.code samples.
Package csharp implements compile checking for C#.code samples.
snippetgen/compilecheck/internal/filesys
Package filesys contains abstractions and mocks of the file system, useful for testing.
Package filesys contains abstractions and mocks of the file system, useful for testing.
snippetgen/compilecheck/internal/golang
Package golang implements compile checking for Go code samples.
Package golang implements compile checking for Go code samples.
snippetgen/compilecheck/internal/java
Package java implements compilecheck for Java.
Package java implements compilecheck for Java.
snippetgen/compilecheck/internal/js
Package js implements compilecheck for JS.
Package js implements compilecheck for JS.
snippetgen/compilecheck/internal/langutil
Package langutil provides language-independent types useful for processing code snippets and client libraries.
Package langutil provides language-independent types useful for processing code snippets and client libraries.
snippetgen/compilecheck/internal/nodejs
Package nodejs implements compilecheck for NodeJS.
Package nodejs implements compilecheck for NodeJS.
snippetgen/compilecheck/internal/php
Package php implements compilecheck for PHP.
Package php implements compilecheck for PHP.
snippetgen/compilecheck/internal/py
Package py implements compilecheck for Python.
Package py implements compilecheck for Python.
snippetgen/compilecheck/internal/ruby
Package ruby implements compilecheck for Ruby.
Package ruby implements compilecheck for Ruby.
snippetgen/jsonpkger
Jsonpkger packages code fragments into JSON form.
Jsonpkger packages code fragments into JSON form.
snippetgen/mergesnippets
Package main contains the main driver for the mergesnippets tool, which merges manual and automatic snippets into public snippets that can be published to GCS.
Package main contains the main driver for the mergesnippets tool, which merges manual and automatic snippets into public snippets that can be published to GCS.
snippetgen/mergesnippets/snippet
Package snippet implements the Merger class to retrieve and merge secondary and primary snippets, and to publish the merged snippets.
Package snippet implements the Merger class to retrieve and merge secondary and primary snippets, and to publish the merged snippets.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL