The Go client libraries have several modules. Each module does not strictly correspond to a single library - they correspond to trees of directories. If a file needs to be released, you must release the closest ancestor module.
To see all modules:
$ cat `find . -name go.mod` | grep module module cloud.google.com/go/pubsub module cloud.google.com/go/spanner module cloud.google.com/go module cloud.google.com/go/bigtable module cloud.google.com/go/bigquery module cloud.google.com/go/storage module cloud.google.com/go/pubsublite module cloud.google.com/go/firestore module cloud.google.com/go/logging module cloud.google.com/go/internal/gapicgen module cloud.google.com/go/internal/godocfx module cloud.google.com/go/internal/examples/fake module cloud.google.com/go/internal/examples/mock module cloud.google.com/go/datastore
The cloud.google.com/go is the repository root module. Each other module is a submodule.
So, if you need to release a change in bigtable/bttest/inmem.go, the closest ancestor module is cloud.google.com/go/bigtable - so you should release a new version of the cloud.google.com/go/bigtable submodule.
If you need to release a change in asset/apiv1/asset_client.go, the closest ancestor module is cloud.google.com/go - so you should release a new version of the cloud.google.com/go repository root module. Note: releasing cloud.google.com/go has no impact on any of the submodules, and vice-versa. They are released entirely independently.
If there are any test failures in the Kokoro build, releases are blocked until the failures have been resolved.
cloud.google.com/go and submodules)We now use release-please to perform automated releases for cloud.google.com/go and all submodules.
CHANGES.md, tag the merged commit with the appropriate version, and draft a GitHub release which will copy the notes from CHANGES.md.cloud.google.com/go)If for whatever reason the automated release process is not working as expected, here is how to manually cut a release of cloud.google.com/go.
google-cloud-go/ and switch to main.git pullgit tag -l | grep -v beta | grep -v alpha to see all existing releases. The current latest tag $CV is the largest tag. It should look something like vX.Y.Z (note: ignore all LIB/vX.Y.Z tags - these are tags for a specific library, not the module root). We'll call the current version $CV and the new version $NV.git log $CV... to list all the changes since the last release. NOTE: You must manually visually parse out changes to submodules [1] (the git log is going to show you things in submodules, which are not going to be part of your release).CHANGES.md to include a summary of the changes.internal/version/version.go, update const Repo to today's date with the format YYYYMMDD.internal/version run go generate..go-r file. Push to your fork, and create a PR titled chore: release $NV.git pull c. Tag the repo with the next version: git tag $NV. d. Push the tag to origin: git push origin $NVCHANGES.md.If for whatever reason the automated release process is not working as expected, here is how to manually cut a release of a submodule.
(these instructions assume we're releasing cloud.google.com/go/datastore - adjust accordingly)
google-cloud-go/ and switch to main.git pullgit tag -l | grep datastore | grep -v beta | grep -v alpha to see all existing releases. The current latest tag $CV is the largest tag. It should look something like datastore/vX.Y.Z. We'll call the current version $CV and the new version $NV.git log $CV.. -- datastore/ to list all the changes to the submodule directory since the last release.datastore/CHANGES.md to include a summary of the changes.internal/version run go generate..go-r file. Push to your fork, and create a PR titled chore(datastore): release $NV.git pull c. Tag the repo with the next version: git tag $NV. d. Push the tag to origin: git push origin $NVdatastore/CHANGES.md.