Repository: googleapis/google-api-java-client
Pull request #1786 (2021-05-05 12:10:50)

chore: remove codecov
@Neenu1995 

generated-files-bot[bot]: <!-- probot comment [12634855]-->
*Warning*: This pull request is touching the following templated files:

* .kokoro/build.sh
* .kokoro/presubmit/common.cfg
* codecov.yaml

Patch:
diff --git a/.github/release-please.yml b/.github/release-please.yml
index 8ca7f9ca..3cc5e9ba 100644
--- a/.github/release-please.yml
+++ b/.github/release-please.yml
@@ -1,3 +1,8 @@
 bumpMinorPreMajor: true
 handleGHRelease: true
 releaseType: java-yoshi
+branches:
+  - bumpMinorPreMajor: true
+    handleGHRelease: true
+    releaseType: java-lts
+    branch: 1.31.3-sp
diff --git a/.github/sync-repo-settings.yaml b/.github/sync-repo-settings.yaml
index 6afe2d1b..a8c5b3ed 100644
--- a/.github/sync-repo-settings.yaml
+++ b/.github/sync-repo-settings.yaml
@@ -1,49 +1,43 @@
-# Whether or not rebase-merging is enabled on this repository.
-# Defaults to `true`
 rebaseMergeAllowed: false
-
-# Whether or not squash-merging is enabled on this repository.
-# Defaults to `true`
 squashMergeAllowed: true
-
-# Whether or not PRs are merged with a merge commit on this repository.
-# Defaults to `false`
 mergeCommitAllowed: false
-
-# Rules for master branch protection
 branchProtectionRules:
-# Identifies the protection rule pattern. Name of the branch to be protected.
-# Defaults to `master`
-- pattern: master
-  # Can admins overwrite branch protection.
-  # Defaults to `true`
-  isAdminEnforced: true
-  # Number of approving reviews required to update matching branches.
-  # Defaults to `1`
-  requiredApprovingReviewCount: 1
-  # Are reviews from code owners required to update matching branches.
-  # Defaults to `false`
-  requiresCodeOwnerReviews: true
-  # Require up to date branches
-  requiresStrictStatusChecks: false
-  # List of required status check contexts that must pass for commits to be accepted to matching branches.
-  requiredStatusCheckContexts:
-    - "units (7)"
-    - "units (8)"
-    - "units (11)"
-    - "windows"
-    - "dependencies (8)"
-    - "dependencies (11)"
-    - "linkage-monitor"
-    - "lint"
-    - "clirr"
-    - "cla/google"
-
-# List of explicit permissions to add (additive only)
+  - pattern: master
+    isAdminEnforced: true
+    requiredApprovingReviewCount: 1
+    requiresCodeOwnerReviews: true
+    requiresStrictStatusChecks: false
+    requiredStatusCheckContexts:
+      - units (7)
+      - units (8)
+      - units (11)
+      - windows
+      - dependencies (8)
+      - dependencies (11)
+      - linkage-monitor
+      - lint
+      - clirr
+      - cla/google
+  - pattern: 1.31.3-sp
+    isAdminEnforced: true
+    requiredApprovingReviewCount: 1
+    requiresCodeOwnerReviews: true
+    requiresStrictStatusChecks: false
+    requiredStatusCheckContexts:
+      - units (7)
+      - units (8)
+      - units (11)
+      - windows
+      - dependencies (8)
+      - dependencies (11)
+      - linkage-monitor
+      - lint
+      - clirr
+      - cla/google
 permissionRules:
-- team: yoshi-admins
-  permission: admin
-- team: yoshi-java-admins
-  permission: admin
-- team: yoshi-java
-  permission: push
+  - team: yoshi-admins
+    permission: admin
+  - team: yoshi-java-admins
+    permission: admin
+  - team: yoshi-java
+    permission: push
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 16e5abaa..cc337f60 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -20,10 +20,6 @@ jobs:
     - run: .kokoro/build.sh
       env:
         JOB_TYPE: test
-    - name: coverage
-      uses: codecov/codecov-action@v1
-      with:
-        name: actions ${{matrix.java}}
   windows:
     runs-on: windows-latest
     steps:
diff --git a/.kokoro/build.sh b/.kokoro/build.sh
index 429b657a..c382f905 100755
--- a/.kokoro/build.sh
+++ b/.kokoro/build.sh
@@ -107,11 +107,6 @@ clirr)
     ;;
 esac
 
-if [ "${REPORT_COVERAGE}" == "true" ]
-then
-  bash ${KOKORO_GFILE_DIR}/codecov.sh
-fi
-
 # fix output location of logs
 bash .kokoro/coerce_logs.sh
 
diff --git a/.kokoro/presubmit/common.cfg b/.kokoro/presubmit/common.cfg
index 4e28721b..e6120b40 100644
--- a/.kokoro/presubmit/common.cfg
+++ b/.kokoro/presubmit/common.cfg
@@ -24,11 +24,3 @@ env_vars: {
   value: "test"
 }
 
-before_action {
-  fetch_keystore {
-    keystore_resource {
-      keystore_config_id: 73713
-      keyname: "dpebot_codecov_token"
-    }
-  }
-}
diff --git a/.kokoro/release/publish_javadoc11.sh b/.kokoro/release/publish_javadoc11.sh
index 7690b4f4..7ab04d3d 100755
--- a/.kokoro/release/publish_javadoc11.sh
+++ b/.kokoro/release/publish_javadoc11.sh
@@ -49,6 +49,13 @@ pushd target/docfx-yml
 python3 -m docuploader create-metadata \
  --name ${NAME} \
  --version ${VERSION} \
+ --xrefs devsite://java/gax \
+ --xrefs devsite://java/google-cloud-core \
+ --xrefs devsite://java/api-common \
+ --xrefs devsite://java/proto-google-common-protos \
+ --xrefs devsite://java/google-api-client \
+ --xrefs devsite://java/google-http-client \
+ --xrefs devsite://java/protobuf \
  --language java
 
 # upload yml to production bucket
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b315f2ec..7a1a2295 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
 # Changelog
 
+### [1.31.5](https://www.github.com/googleapis/google-api-java-client/compare/v1.31.4...v1.31.5) (2021-05-10)
+
+
+### Bug Fixes
+
+* release scripts from issuing overlapping phases ([#1769](https://www.github.com/googleapis/google-api-java-client/issues/1769)) ([3174ff9](https://www.github.com/googleapis/google-api-java-client/commit/3174ff9ddf0c7428b90bff766c6b18bf17d1feac))
+* remove deprecated parent pom ([#1785](https://www.github.com/googleapis/google-api-java-client/issues/1785)) ([5da3355](https://www.github.com/googleapis/google-api-java-client/commit/5da335518ff5076ea5dd4f40fd0494330458296c))
+* update GoogleJsonError object to accomodate all fields in Invalid parameter exception ([#1783](https://www.github.com/googleapis/google-api-java-client/issues/1783)) ([94c4570](https://www.github.com/googleapis/google-api-java-client/commit/94c4570e16324b4c654d4ec3f0f940926064d955))
+
 ### [1.31.4](https://www.github.com/googleapis/google-api-java-client/compare/v1.31.3...v1.31.4) (2021-04-09)
 
 
diff --git a/README.md b/README.md
index 7265bb1b..b664fc2a 100644
--- a/README.md
+++ b/README.md
@@ -34,7 +34,7 @@ To use Maven, add the following lines to your pom.xml file:
       <dependency>
         <groupId>com.google.api-client</groupId>
         <artifactId>google-api-client</artifactId>
-        <version>1.31.4</version>
+        <version>1.31.5</version>
       </dependency>
     </dependencies>
   </project>
@@ -48,7 +48,7 @@ repositories {
     google()
 }
 dependencies {
-    compile 'com.google.api-client:google-api-client:1.31.4'
+    compile 'com.google.api-client:google-api-client:1.31.5'
 }
 ```
 [//]: # ({x-version-update-end})
diff --git a/codecov.yaml b/codecov.yaml
deleted file mode 100644
index 5724ea94..00000000
--- a/codecov.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-codecov:
-  ci:
-    - source.cloud.google.com
diff --git a/google-api-client-android/pom.xml b/google-api-client-android/pom.xml
index 53561047..bfca0562 100644
--- a/google-api-client-android/pom.xml
+++ b/google-api-client-android/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>com.google.api-client</groupId>
     <artifactId>google-api-client-parent</artifactId>
-    <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+    <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
     <relativePath>../pom.xml</relativePath>
   </parent>
   <artifactId>google-api-client-android</artifactId>
diff --git a/google-api-client-appengine/pom.xml b/google-api-client-appengine/pom.xml
index b4d237f2..018731e3 100644
--- a/google-api-client-appengine/pom.xml
+++ b/google-api-client-appengine/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>com.google.api-client</groupId>
     <artifactId>google-api-client-parent</artifactId>
-    <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+    <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
     <relativePath>../pom.xml</relativePath>
   </parent>
   <artifactId>google-api-client-appengine</artifactId>
diff --git a/google-api-client-assembly/pom.xml b/google-api-client-assembly/pom.xml
index 4acf48e6..4a637399 100644
--- a/google-api-client-assembly/pom.xml
+++ b/google-api-client-assembly/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>com.google.api-client</groupId>
     <artifactId>google-api-client-parent</artifactId>
-    <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+    <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
     <relativePath>../pom.xml</relativePath>
   </parent>
   <groupId>com.google.api-client</groupId>
diff --git a/google-api-client-bom/pom.xml b/google-api-client-bom/pom.xml
index 11aeac0e..e20bec79 100644
--- a/google-api-client-bom/pom.xml
+++ b/google-api-client-bom/pom.xml
@@ -3,7 +3,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.google.api-client</groupId>
   <artifactId>google-api-client-bom</artifactId>
-  <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+  <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
   <packaging>pom</packaging>
 
   <name>Google API Client Library for Java BOM</name>
@@ -63,53 +63,53 @@
       <dependency>
         <groupId>com.google.api-client</groupId>
         <artifactId>google-api-client</artifactId>
-        <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+        <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api-client</groupId>
         <artifactId>google-api-client-android</artifactId>
-        <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+        <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api-client</groupId>
         <artifactId>google-api-client-appengine</artifactId>
-        <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+        <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api-client</groupId>
         <artifactId>google-api-client-assembly</artifactId>
-        <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+        <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
         <type>pom</type>
       </dependency>
       <dependency>
         <groupId>com.google.api-client</groupId>
         <artifactId>google-api-client-gson</artifactId>
-        <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+        <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api-client</groupId>
         <artifactId>google-api-client-jackson2</artifactId>
-        <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+        <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api-client</groupId>
         <artifactId>google-api-client-java6</artifactId>
-        <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+        <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api-client</groupId>
         <artifactId>google-api-client-protobuf</artifactId>
-        <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+        <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api-client</groupId>
         <artifactId>google-api-client-servlet</artifactId>
-        <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+        <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api-client</groupId>
         <artifactId>google-api-client-xml</artifactId>
-        <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+        <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
       </dependency>
     </dependencies>
   </dependencyManagement>
@@ -175,7 +175,7 @@
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-gpg-plugin</artifactId>
-            <version>1.6</version>
+            <version>3.0.1</version>
             <executions>
               <execution>
                 <id>sign-artifacts</id>
diff --git a/google-api-client-gson/pom.xml b/google-api-client-gson/pom.xml
index daa5f85a..36b36448 100644
--- a/google-api-client-gson/pom.xml
+++ b/google-api-client-gson/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>com.google.api-client</groupId>
     <artifactId>google-api-client-parent</artifactId>
-    <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+    <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
     <relativePath>../pom.xml</relativePath>
   </parent>
   <artifactId>google-api-client-gson</artifactId>
diff --git a/google-api-client-jackson2/pom.xml b/google-api-client-jackson2/pom.xml
index f7bc3248..e594182b 100644
--- a/google-api-client-jackson2/pom.xml
+++ b/google-api-client-jackson2/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>com.google.api-client</groupId>
     <artifactId>google-api-client-parent</artifactId>
-    <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+    <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
     <relativePath>../pom.xml</relativePath>
   </parent>
   <artifactId>google-api-client-jackson2</artifactId>
diff --git a/google-api-client-java6/pom.xml b/google-api-client-java6/pom.xml
index d2d81a6f..a8fff0d2 100644
--- a/google-api-client-java6/pom.xml
+++ b/google-api-client-java6/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>com.google.api-client</groupId>
     <artifactId>google-api-client-parent</artifactId>
-    <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+    <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
     <relativePath>../pom.xml</relativePath>
   </parent>
   <artifactId>google-api-client-java6</artifactId>
diff --git a/google-api-client-protobuf/pom.xml b/google-api-client-protobuf/pom.xml
index b1355666..b3dca2fb 100644
--- a/google-api-client-protobuf/pom.xml
+++ b/google-api-client-protobuf/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>com.google.api-client</groupId>
     <artifactId>google-api-client-parent</artifactId>
-    <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+    <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
     <relativePath>../pom.xml</relativePath>
   </parent>
   <artifactId>google-api-client-protobuf</artifactId>
diff --git a/google-api-client-servlet/pom.xml b/google-api-client-servlet/pom.xml
index 57930416..a84311b0 100644
--- a/google-api-client-servlet/pom.xml
+++ b/google-api-client-servlet/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>com.google.api-client</groupId>
     <artifactId>google-api-client-parent</artifactId>
-    <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+    <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
     <relativePath>../pom.xml</relativePath>
   </parent>
   <artifactId>google-api-client-servlet</artifactId>
diff --git a/google-api-client-xml/pom.xml b/google-api-client-xml/pom.xml
index 43aa1eb5..7625ed93 100644
--- a/google-api-client-xml/pom.xml
+++ b/google-api-client-xml/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>com.google.api-client</groupId>
     <artifactId>google-api-client-parent</artifactId>
-    <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+    <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
     <relativePath>../pom.xml</relativePath>
   </parent>
   <artifactId>google-api-client-xml</artifactId>
diff --git a/google-api-client/pom.xml b/google-api-client/pom.xml
index 73586220..89c14b47 100644
--- a/google-api-client/pom.xml
+++ b/google-api-client/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>com.google.api-client</groupId>
     <artifactId>google-api-client-parent</artifactId>
-    <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+    <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
     <relativePath>../pom.xml</relativePath>
   </parent>
   <artifactId>google-api-client</artifactId>
diff --git a/google-api-client/src/main/java/com/google/api/client/googleapis/json/GoogleJsonError.java b/google-api-client/src/main/java/com/google/api/client/googleapis/json/GoogleJsonError.java
index 265407f5..1a530145 100644
--- a/google-api-client/src/main/java/com/google/api/client/googleapis/json/GoogleJsonError.java
+++ b/google-api-client/src/main/java/com/google/api/client/googleapis/json/GoogleJsonError.java
@@ -21,6 +21,7 @@ import com.google.api.client.json.JsonFactory;
 import com.google.api.client.json.JsonObjectParser;
 import com.google.api.client.util.Data;
 import com.google.api.client.util.Key;
+import com.google.common.collect.ImmutableList;
 import java.io.IOException;
 import java.util.Collections;
 import java.util.List;
@@ -183,6 +184,64 @@ public class GoogleJsonError extends GenericJson {
     }
   }
 
+  public static class Details {
+    @Key("@type")
+    private String type;
+
+    @Key private String detail;
+    @Key private List<ParameterViolations> parameterViolations;
+
+    public String getType() {
+      return type;
+    }
+
+    public void setType(String type) {
+      this.type = type;
+    }
+
+    public String getDetail() {
+      return detail;
+    }
+
+    public void setDetail(String detail) {
+      this.detail = detail;
+    }
+
+    public List<ParameterViolations> getParameterViolations() {
+      return parameterViolations;
+    }
+
+    /**
+     * Sets parameterViolations list as immutable to prevent exposing mutable state.
+     *
+     * @param parameterViolations
+     */
+    public void setParameterViolations(List<ParameterViolations> parameterViolations) {
+      this.parameterViolations = ImmutableList.copyOf(parameterViolations);
+    }
+  }
+
+  public static class ParameterViolations {
+    @Key private String parameter;
+    @Key private String description;
+
+    public String getDescription() {
+      return description;
+    }
+
+    public void setDescription(String description) {
+      this.description = description;
+    }
+
+    public String getParameter() {
+      return parameter;
+    }
+
+    public void setParameter(String parameter) {
+      this.parameter = parameter;
+    }
+  }
+
   /** List of detailed errors or {@code null} for none. */
   @Key private List<ErrorInfo> errors;
 
@@ -192,6 +251,9 @@ public class GoogleJsonError extends GenericJson {
   /** Human-readable explanation of the error or {@code null} for none. */
   @Key private String message;
 
+  /** Lists type and parameterViolation details of an Exception */
+  @Key private List<Details> details;
+
   /**
    * Returns the list of detailed errors or {@code null} for none.
    *
@@ -202,12 +264,13 @@ public class GoogleJsonError extends GenericJson {
   }
 
   /**
-   * Sets the list of detailed errors or {@code null} for none.
+   * Sets the list of detailed errors or {@code null} for none. Sets the list of detailed errors as
+   * immutable to prevent exposing mutable state.
    *
    * @since 1.8
    */
   public final void setErrors(List<ErrorInfo> errors) {
-    this.errors = errors;
+    this.errors = ImmutableList.copyOf(errors);
   }
 
   /**
@@ -246,6 +309,20 @@ public class GoogleJsonError extends GenericJson {
     this.message = message;
   }
 
+  public List<Details> getDetails() {
+    return details;
+  }
+
+  /**
+   * Sets the list of invalid parameter error details as immutable to prevent exposing mutable
+   * state.
+   *
+   * @param details
+   */
+  public void setDetails(List<Details> details) {
+    this.details = ImmutableList.copyOf(details);
+  }
+
   @Override
   public GoogleJsonError set(String fieldName, Object value) {
     return (GoogleJsonError) super.set(fieldName, value);
diff --git a/pom.xml b/pom.xml
index bbb664c3..8edc34e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.google.api-client</groupId>
   <artifactId>google-api-client-parent</artifactId>
-  <version>1.31.5-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
+  <version>1.31.6-SNAPSHOT</version><!-- {x-version-update:google-api-client:current} -->
   <packaging>pom</packaging>
   <name>Parent for the Google API Client Library for Java</name>
   <description>The Google APIs Client Library for Java is a Java client library
@@ -17,6 +17,27 @@
   </issueManagement>
 
   <inceptionYear>2010</inceptionYear>
+  
+  <developers>
+    <developer>
+      <id>chingor</id>
+      <name>Jeff Ching</name>
+      <email>chingor@google.com</email>
+      <organization>Google</organization>
+      <roles>
+        <role>Developer</role>
+      </roles>
+    </developer>
+    <developer>
+      <id>neenushaji</id>
+      <name>Neenu Shaji</name>
+      <email>neenushaji@google.com</email>
+      <organization>Google</organization>
+      <roles>
+        <role>Developer</role>
+      </roles>
+    </developer>
+  </developers>
 
   <scm>
     <connection>scm:git:https://github.com/googleapis/google-api-java-client.git</connection>
@@ -478,7 +499,7 @@
     <project.oauth.version>1.31.5</project.oauth.version>
     <project.jsr305.version>3.0.2</project.jsr305.version>
     <project.gson.version>2.8.6</project.gson.version>
-    <project.protobuf-java.version>3.15.8</project.protobuf-java.version>
+    <project.protobuf-java.version>3.16.0</project.protobuf-java.version>
     <project.guava.version>30.1.1-android</project.guava.version>
     <project.appengine.version>1.9.84</project.appengine.version>
     <project.xpp3.version>1.1.4c</project.xpp3.version>
@@ -504,7 +525,7 @@
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-gpg-plugin</artifactId>
-            <version>1.6</version>
+            <version>3.0.1</version>
             <executions>
               <execution>
                 <id>sign-artifacts</id>
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index 72e56ed1..b4356a73 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -29,7 +29,7 @@
     <dependency>
       <groupId>com.google.api-client</groupId>
       <artifactId>google-api-client</artifactId>
-      <version>1.31.4</version>
+      <version>1.31.5</version>
     </dependency>
     <!-- [END google-api-client_install_without_bom] -->
 
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 93c4d355..dd2c0540 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -28,7 +28,7 @@
     <dependency>
       <groupId>com.google.api-client</groupId>
       <artifactId>google-api-client</artifactId>
-      <version>1.31.4</version>
+      <version>1.31.5</version>
     </dependency>
   <!-- {x-version-update-end} -->
 
diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml
index 71a5e356..f53126b4 100644
--- a/samples/snippets/pom.xml
+++ b/samples/snippets/pom.xml
@@ -30,7 +30,7 @@
       <dependency>
         <groupId>com.google.cloud</groupId>
         <artifactId>libraries-bom</artifactId>
-        <version>20.2.0</version>
+        <version>20.3.0</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
diff --git a/synth.metadata b/synth.metadata
index 4ab5aca4..a7bcb3b0 100644
--- a/synth.metadata
+++ b/synth.metadata
@@ -4,14 +4,14 @@
       "git": {
         "name": ".",
         "remote": "https://github.com/googleapis/google-api-java-client.git",
-        "sha": "441e1cc3d12271a5590451e147d5fd46bc83f868"
+        "sha": "dbeebd8be5c60cbe60aeda97eeea4b4dca99c0d6"
       }
     },
     {
       "git": {
         "name": "synthtool",
         "remote": "https://github.com/googleapis/synthtool.git",
-        "sha": "8285c2b4cdbc3771d031ad91e1c4ec9e55fff45d"
+        "sha": "046994f491c02806aea60118e214a9edd67f5ab7"
       }
     }
   ],
@@ -80,7 +80,6 @@
     "CODE_OF_CONDUCT.md",
     "CONTRIBUTING.md",
     "LICENSE",
-    "codecov.yaml",
     "samples/install-without-bom/pom.xml",
     "samples/pom.xml",
     "samples/snapshot/pom.xml",
diff --git a/versions.txt b/versions.txt
index af98b0f7..0b5cffb4 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,4 +1,4 @@
 # Format:
 # module:released-version:current-version
 
-google-api-client:1.31.4:1.31.5-SNAPSHOT
+google-api-client:1.31.5:1.31.6-SNAPSHOT


Test patch:
diff --git a/google-api-client/src/test/java/com/google/api/client/googleapis/json/GoogleJsonErrorTest.java b/google-api-client/src/test/java/com/google/api/client/googleapis/json/GoogleJsonErrorTest.java
index 83960bc8..99cc3b1d 100644
--- a/google-api-client/src/test/java/com/google/api/client/googleapis/json/GoogleJsonErrorTest.java
+++ b/google-api-client/src/test/java/com/google/api/client/googleapis/json/GoogleJsonErrorTest.java
@@ -27,10 +27,11 @@ import com.google.api.client.testing.http.HttpTesting;
 import com.google.api.client.testing.http.MockHttpTransport;
 import com.google.api.client.testing.http.MockLowLevelHttpRequest;
 import com.google.api.client.testing.http.MockLowLevelHttpResponse;
+import java.io.InputStream;
 import junit.framework.TestCase;
 
 /**
- * Tests {@link GoogleJsonError}.
+ * Tests {@link com.google.api.client.googleapis.json.GoogleJsonError}.
  *
  * @author Yaniv Inbar
  */
@@ -51,7 +52,8 @@ public class GoogleJsonErrorTest extends TestCase {
   public void test_json() throws Exception {
     JsonParser parser = FACTORY.createJsonParser(ERROR);
     parser.nextToken();
-    GoogleJsonError e = parser.parse(GoogleJsonError.class);
+    com.google.api.client.googleapis.json.GoogleJsonError e =
+        parser.parse(com.google.api.client.googleapis.json.GoogleJsonError.class);
     assertEquals(ERROR, FACTORY.toString(e));
   }
 
@@ -70,6 +72,10 @@ public class GoogleJsonErrorTest extends TestCase {
               .setStatusCode(HttpStatusCodes.STATUS_CODE_FORBIDDEN);
     }
 
+    ErrorTransport(MockLowLevelHttpResponse mockLowLevelHttpResponse) {
+      response = mockLowLevelHttpResponse;
+    }
+
     @Override
     public LowLevelHttpRequest buildRequest(String name, String url) {
       return new MockLowLevelHttpRequest(url).setResponse(response);
@@ -82,7 +88,41 @@ public class GoogleJsonErrorTest extends TestCase {
         transport.createRequestFactory().buildGetRequest(HttpTesting.SIMPLE_GENERIC_URL);
     request.setThrowExceptionOnExecuteError(false);
     HttpResponse response = request.execute();
-    GoogleJsonError errorResponse = GoogleJsonError.parse(FACTORY, response);
+    com.google.api.client.googleapis.json.GoogleJsonError errorResponse =
+        com.google.api.client.googleapis.json.GoogleJsonError.parse(FACTORY, response);
     assertEquals(ERROR, FACTORY.toString(errorResponse));
   }
+
+  public void testParse_withDetails() throws Exception {
+    String DETAILS_ERROR =
+        "{"
+            + "\"code\":400,"
+            + "\"details\":[{"
+            + "\"@type\":\"type.googleapis.com/google.dataflow.v1beta3.InvalidTemplateParameters\","
+            + "\"parameterViolations\":[{"
+            + "\"description\":\"Parameter didn't match regex '^[0-9a-zA-Z_]+$'\","
+            + "\"parameter\":\"safeBrowsingApiKey\""
+            + "}]},{"
+            + "\"@type\":\"type.googleapis.com/google.rpc.DebugInfo\","
+            + "\"detail\":\"test detail\"}],"
+            + "\"message\":\"The template parameters are invalid.\","
+            + "\"status\":\"INVALID_ARGUMENT\""
+            + "}";
+    InputStream errorContent = GoogleJsonErrorTest.class.getResourceAsStream("error.json");
+    HttpTransport transport =
+        new ErrorTransport(
+            new MockLowLevelHttpResponse()
+                .setContent(errorContent)
+                .setContentType(Json.MEDIA_TYPE)
+                .setStatusCode(HttpStatusCodes.STATUS_CODE_FORBIDDEN));
+    HttpRequest request =
+        transport.createRequestFactory().buildGetRequest(HttpTesting.SIMPLE_GENERIC_URL);
+    request.setThrowExceptionOnExecuteError(false);
+    HttpResponse response = request.execute();
+    com.google.api.client.googleapis.json.GoogleJsonError errorResponse =
+        com.google.api.client.googleapis.json.GoogleJsonError.parse(FACTORY, response);
+
+    assertEquals(DETAILS_ERROR, FACTORY.toString(errorResponse));
+    assertNotNull(errorResponse.getDetails());
+  }
 }
diff --git a/google-api-client/src/test/java/com/google/api/client/googleapis/json/GoogleJsonResponseExceptionTest.java b/google-api-client/src/test/java/com/google/api/client/googleapis/json/GoogleJsonResponseExceptionTest.java
index 075154cc..ad28bd0c 100644
--- a/google-api-client/src/test/java/com/google/api/client/googleapis/json/GoogleJsonResponseExceptionTest.java
+++ b/google-api-client/src/test/java/com/google/api/client/googleapis/json/GoogleJsonResponseExceptionTest.java
@@ -17,10 +17,13 @@ package com.google.api.client.googleapis.json;
 import com.google.api.client.googleapis.json.GoogleJsonErrorTest.ErrorTransport;
 import com.google.api.client.http.HttpRequest;
 import com.google.api.client.http.HttpResponse;
+import com.google.api.client.http.HttpStatusCodes;
 import com.google.api.client.http.HttpTransport;
 import com.google.api.client.json.Json;
 import com.google.api.client.testing.http.HttpTesting;
 import com.google.api.client.testing.http.MockHttpTransport;
+import com.google.api.client.testing.http.MockLowLevelHttpResponse;
+import java.io.InputStream;
 import junit.framework.TestCase;
 
 /**
@@ -37,7 +40,8 @@ public class GoogleJsonResponseExceptionTest extends TestCase {
     request.setThrowExceptionOnExecuteError(false);
     HttpResponse response = request.execute();
     GoogleJsonResponseException ge =
-        GoogleJsonResponseException.from(GoogleJsonErrorTest.FACTORY, response);
+        GoogleJsonResponseException.from(
+            com.google.api.client.googleapis.json.GoogleJsonErrorTest.FACTORY, response);
     assertNull(ge.getDetails());
     assertTrue(ge.getMessage().startsWith("200"));
   }
@@ -49,8 +53,12 @@ public class GoogleJsonResponseExceptionTest extends TestCase {
     request.setThrowExceptionOnExecuteError(false);
     HttpResponse response = request.execute();
     GoogleJsonResponseException ge =
-        GoogleJsonResponseException.from(GoogleJsonErrorTest.FACTORY, response);
-    assertEquals(GoogleJsonErrorTest.ERROR, GoogleJsonErrorTest.FACTORY.toString(ge.getDetails()));
+        GoogleJsonResponseException.from(
+            com.google.api.client.googleapis.json.GoogleJsonErrorTest.FACTORY, response);
+    assertEquals(
+        com.google.api.client.googleapis.json.GoogleJsonErrorTest.ERROR,
+        com.google.api.client.googleapis.json.GoogleJsonErrorTest.FACTORY.toString(
+            ge.getDetails()));
     assertTrue(ge.getMessage().startsWith("403"));
   }
 
@@ -61,7 +69,8 @@ public class GoogleJsonResponseExceptionTest extends TestCase {
     request.setThrowExceptionOnExecuteError(false);
     HttpResponse response = request.execute();
     GoogleJsonResponseException ge =
-        GoogleJsonResponseException.from(GoogleJsonErrorTest.FACTORY, response);
+        GoogleJsonResponseException.from(
+            com.google.api.client.googleapis.json.GoogleJsonErrorTest.FACTORY, response);
     assertNull(ge.getDetails());
     assertTrue(ge.getMessage().startsWith("403"));
   }
@@ -73,7 +82,8 @@ public class GoogleJsonResponseExceptionTest extends TestCase {
     request.setThrowExceptionOnExecuteError(false);
     HttpResponse response = request.execute();
     GoogleJsonResponseException ge =
-        GoogleJsonResponseException.from(GoogleJsonErrorTest.FACTORY, response);
+        GoogleJsonResponseException.from(
+            com.google.api.client.googleapis.json.GoogleJsonErrorTest.FACTORY, response);
     assertNull(ge.getDetails());
     assertTrue(ge.getMessage().startsWith("403"));
   }
@@ -85,7 +95,8 @@ public class GoogleJsonResponseExceptionTest extends TestCase {
     request.setThrowExceptionOnExecuteError(false);
     HttpResponse response = request.execute();
     GoogleJsonResponseException ge =
-        GoogleJsonResponseException.from(GoogleJsonErrorTest.FACTORY, response);
+        GoogleJsonResponseException.from(
+            com.google.api.client.googleapis.json.GoogleJsonErrorTest.FACTORY, response);
     assertNull(ge.getDetails());
     assertTrue(ge.getMessage().startsWith("403"));
     assertTrue(ge.getMessage().contains("<foo>"));
@@ -98,7 +109,8 @@ public class GoogleJsonResponseExceptionTest extends TestCase {
     request.setThrowExceptionOnExecuteError(false);
     HttpResponse response = request.execute();
     GoogleJsonResponseException ge =
-        GoogleJsonResponseException.from(GoogleJsonErrorTest.FACTORY, response);
+        GoogleJsonResponseException.from(
+            com.google.api.client.googleapis.json.GoogleJsonErrorTest.FACTORY, response);
     assertNull(ge.getDetails());
     assertTrue(ge.getMessage().startsWith("403"));
   }
@@ -110,7 +122,8 @@ public class GoogleJsonResponseExceptionTest extends TestCase {
     request.setThrowExceptionOnExecuteError(false);
     HttpResponse response = request.execute();
     GoogleJsonResponseException ge =
-        GoogleJsonResponseException.from(GoogleJsonErrorTest.FACTORY, response);
+        GoogleJsonResponseException.from(
+            com.google.api.client.googleapis.json.GoogleJsonErrorTest.FACTORY, response);
     assertNull(ge.getDetails());
     assertTrue(ge.getMessage().startsWith("403"));
   }
@@ -125,7 +138,8 @@ public class GoogleJsonResponseExceptionTest extends TestCase {
     request.setThrowExceptionOnExecuteError(false);
     HttpResponse response = request.execute();
     GoogleJsonResponseException ge =
-        GoogleJsonResponseException.from(GoogleJsonErrorTest.FACTORY, response);
+        GoogleJsonResponseException.from(
+            com.google.api.client.googleapis.json.GoogleJsonErrorTest.FACTORY, response);
     assertNotNull(ge.getDetails());
     assertEquals("invalid_token", ge.getDetails().getMessage());
     assertTrue(ge.getMessage().contains("403"));
@@ -141,7 +155,8 @@ public class GoogleJsonResponseExceptionTest extends TestCase {
     request.setThrowExceptionOnExecuteError(false);
     HttpResponse response = request.execute();
     GoogleJsonResponseException ge =
-        GoogleJsonResponseException.from(GoogleJsonErrorTest.FACTORY, response);
+        GoogleJsonResponseException.from(
+            com.google.api.client.googleapis.json.GoogleJsonErrorTest.FACTORY, response);
     assertNull(ge.getDetails());
     assertTrue(ge.getMessage().contains("403"));
     assertTrue(ge.getMessage().contains("invalid_token"));
@@ -155,8 +170,43 @@ public class GoogleJsonResponseExceptionTest extends TestCase {
     request.setThrowExceptionOnExecuteError(false);
     HttpResponse response = request.execute();
     GoogleJsonResponseException ge =
-        GoogleJsonResponseException.from(GoogleJsonErrorTest.FACTORY, response);
+        GoogleJsonResponseException.from(
+            com.google.api.client.googleapis.json.GoogleJsonErrorTest.FACTORY, response);
     assertNull(ge.getDetails());
     assertTrue(ge.getMessage().startsWith("403"));
   }
+
+  public void testFrom_detailsWithInvalidParameter() throws Exception {
+    String DETAILS_ERROR =
+        "{"
+            + "\"code\":400,"
+            + "\"details\":[{"
+            + "\"@type\":\"type.googleapis.com/google.dataflow.v1beta3.InvalidTemplateParameters\","
+            + "\"parameterViolations\":[{"
+            + "\"description\":\"Parameter didn't match regex '^[0-9a-zA-Z_]+$'\","
+            + "\"parameter\":\"safeBrowsingApiKey\""
+            + "}]},{"
+            + "\"@type\":\"type.googleapis.com/google.rpc.DebugInfo\","
+            + "\"detail\":\"test detail\"}],"
+            + "\"message\":\"The template parameters are invalid.\","
+            + "\"status\":\"INVALID_ARGUMENT\""
+            + "}";
+    InputStream errorContent =
+        com.google.api.client.googleapis.json.GoogleJsonErrorTest.class.getResourceAsStream(
+            "error.json");
+    HttpTransport transport =
+        new ErrorTransport(
+            new MockLowLevelHttpResponse()
+                .setContent(errorContent)
+                .setContentType(Json.MEDIA_TYPE)
+                .setStatusCode(HttpStatusCodes.STATUS_CODE_FORBIDDEN));
+    HttpRequest request =
+        transport.createRequestFactory().buildGetRequest(HttpTesting.SIMPLE_GENERIC_URL);
+    request.setThrowExceptionOnExecuteError(false);
+    HttpResponse response = request.execute();
+    GoogleJsonResponseException ge =
+        GoogleJsonResponseException.from(
+            com.google.api.client.googleapis.json.GoogleJsonErrorTest.FACTORY, response);
+    assertNotNull(ge.getDetails().getDetails());
+  }
 }
diff --git a/google-api-client/src/test/resources/com/google/api/client/googleapis/json/error.json b/google-api-client/src/test/resources/com/google/api/client/googleapis/json/error.json
new file mode 100644
index 00000000..578abec2
--- /dev/null
+++ b/google-api-client/src/test/resources/com/google/api/client/googleapis/json/error.json
@@ -0,0 +1,23 @@
+{
+  "error": {
+    "code": 400,
+    "message": "The template parameters are invalid.",
+    "status": "INVALID_ARGUMENT",
+    "details": [
+      {
+        "@type": "type.googleapis.com/google.dataflow.v1beta3.InvalidTemplateParameters",
+        "parameterViolations": [
+          {
+            "parameter": "safeBrowsingApiKey",
+            "description": "Parameter didn't match regex '^[0-9a-zA-Z_]+$'"
+          }
+        ]
+      },
+      {
+        "@type": "type.googleapis.com/google.rpc.DebugInfo",
+        "detail": "test detail"
+      }
+    ]
+  }
+}
+