Skip to content

storage: api refactor.#253

Merged
stephenplusplus merged 7 commits intogoogleapis:masterfrom
stephenplusplus:spp--storage-refactor
Oct 20, 2014
Merged

storage: api refactor.#253
stephenplusplus merged 7 commits intogoogleapis:masterfrom
stephenplusplus:spp--storage-refactor

Conversation

@stephenplusplus
Copy link
Contributor Author

@mafintosh, as promised, here's my ping :)

A little intro-- gcloud-node is the Node gateway to Google's cloud services, such as Datastore, PubSub, and Cloud Storage. Cloud Storage lets you store files in "buckets," so we wanted to allow users a way to stream files in and out of their buckets.

Before a user can do that, we have to generate a valid connection, which includes making an API request to retrieve a token. Because of this, Duplexify was a great fit, because we needed to set the readable and writable portions of the stream asynchronously.

This is how our API looks currently (using Duplexify behind the scenes):

var fs = require('fs');
var gcloud = require('gcloud')({ /* connection details. */ });
var bucket = gcloud.storage.bucket({ bucketName: 'my-bucket' });

// Uploading a file.
fs.createReadStream('/local/file.jpg')
  .pipe(bucket.createWriteStream('file-to-create-in-the-bucket.jpg'));

// Downloading a file.
bucket.createReadStream('file-from-the-bucket.jpg')
  .pipe(fs.createWriteStream('/new/local/file.jpg'));

This PR uses Duplexify a little differently, so that our api would look like:

var fs = require('fs');
var gcloud = require('gcloud')({ /* connection details. */ });
var bucket = gcloud.storage.bucket('my-bucket');

// Uploading a file.
fs.createReadStream('/local/file.jpg')
  .pipe(bucket.file('file-to-create-in-the-bucket.jpg'));

// Downloading a file.
bucket.file('file-from-the-bucket.jpg')
  .pipe(fs.createWriteStream('/new/local/file.jpg'));

bucket.file(/*...*/) is a wrapper for new File() -- File inherits Duplexify.

Truthfully, I have no idea if I'm doing anything shameful with this implementation, which is why I would love a review! Here is the File class: https://github.com/stephenplusplus/gcloud-node/blob/spp--storage-refactor/lib/storage/file.js (please forgive the massive amounts of comments :))

My points of concern:

The problem:

A user can ask for a File object without wanting to pipe data to/from it. A File object has other functionality beyond being used as a stream. Because we need to make an API request to fetch a token before the stream can be used, we need to wait until we know they're going to be using this as a stream.

The solution: bindEvents_

This is called at the instantiation of a File object. It caches _write and _read, then overwrites them so that the first time they are called, the code goes and creates an authorized connection, until eventually calling setReadable/Writable. After the first time being called, they are overwritten, then it re-overwrites itself back to the cached version.

The problem:

When piping has completed, we need to tear down the stream, so that the next time it's used as a stream, we go and fetch a valid token again.

The solution: bindEvents_->this.on('end')

When the end event is emitted (and complete & error (see the lines above)), this removes any bound listeners, calls Duplexify#destroy, re-initializes with the Duplexify constructor, then re-calls bindEvents_ to re-bind all of these events.

The problem:

I'm a stream fool. Put in terms of an error message:

 Error: write after end
  at writeAfterEnd (/Users/stephen/dev/gcloud-node/node_modules/duplexify/node_modules/readable-stream/lib/_stream_writable.js:144:12)
  at File.Writable.write (/Users/stephen/dev/gcloud-node/node_modules/duplexify/node_modules/readable-stream/lib/_stream_writable.js:192:5)
  at write (_stream_readable.js:601:24)
  at flow (_stream_readable.js:610:7)
  at ReadStream.pipeOnReadable (_stream_readable.js:642:5)
  at ReadStream.emit (events.js:92:17)
  at emitReadable_ (_stream_readable.js:426:10)
  at emitReadable (_stream_readable.js:422:5)
  at readableAddChunk (_stream_readable.js:165:9)
  at ReadStream.Readable.push (_stream_readable.js:127:10)
  at onread (fs.js:1574:12)
  at callback (/Users/stephen/dev/gcloud-node/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/polyfills.js:207:17)
  at Object.wrapper [as oncomplete] (fs.js:465:17)

The solution: through().pipe(writable)

setWritableStream_ is called on the first _write. It calls out to getWritableStream_, which forms an http request through the request module, writes some header information to it, then returns it. Once I get it, I pass it to setWritable.

Here's my use case from my Mocha test that triggers the above error:

var file = bucket.file('LargeFile'); // (returns a File object)
fs.createReadStream(files.big.path)
  .pipe(file)
  .on('error', done)
  .on('complete', function(fileObject) {
    assert.equal(fileObject.md5Hash, files.big.hash);
    file.delete(done);
  });

This error goes away after calling setWritable(writable) if I also do: through().pipe(writable). I have no idea why this works. I would guess it's giving the writable stream some kind of "kick-start", and if that's the case, there's likely a better/more direct way to do it.

Sorry for throwing all of this at you. I appreciate any help you can give, no matter how small or big. Feel free to send me a bill for any headache relief medication purchases I may be inducing :)

@ryanseys
Copy link
Contributor

It caches _write and _read, then overwrites them so that the first time they are called, the code goes and creates an authorized connection, until eventually calling setReadable/Writable.

Hmm, I'm a stream & duplexify noob too but I thought duplexify let you delay setting a stream to readable / writable, allowing you to complete stuff before it would actually pipe. I don't see why we need to cache the methods. That seems hacky.

@stephenplusplus
Copy link
Contributor Author

We need a trigger to know when we're being asked for data or sent it. Creating a file object isn't that trigger, as a file object isn't only usable as a stream.

Edit for clarity:

What's great with Duplexify is that it returns a stream instance that will hold off data until we set the readable/writable stream. So, that probably normally looks like:

var dup = duplexify();

asyncGetWritableStream(function(stream) {
dup.setWritable(stream);
});

fs.createReadStream('/local/file.jpg').pipe(dup);

In our case, we want to give the user a stream instance even if they don't intend to use it as one. I don't believe this is the intended use case for Duplexify, which is why I had to do the rigging noted above.

The unique thing for us is since it doesn't have to be used as a stream, we don't want to fire any API requests to get the connection & stream until we know that it is.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

@ryanseys
Copy link
Contributor

Is it bad to create a stream and not use it as one right away? :( I'm sorry I still don't really understand why _write and _read can't remain on the object until the object is used as a stream (or not used as one) and instead they have to be cached? Is _write and _read being dual purposed here?

@stephenplusplus
Copy link
Contributor Author

No problem, it's definitely my failure to explain properly.

The difference between this:

var dup = duplexify();
asyncGetWritableStream(function(stream) {
  dup.setWritable(stream);
});
fs.createReadStream('/local/file.jpg').pipe(dup);

and this:

var file = bucket.file('my-file.jpg');

is that in the first example, we are creating a stream object for the intentions of using it in a streaming pipeline. In the second example, we are creating a file object, with the chance of using it as a stream.

We want to wait until we know it's being used as a stream before making any API calls to form a connection and writable stream. If we did it on instantiation of File(), we could very likely be making unnecessary API calls, and forming requests that will never be written to.

An easy fix for this could look something like this:

var file = bucket.file('my-file.jpg');

fs.createReadStream('/local/file.png')
  .pipe(file.createWriteStream());

This is similar to how we are using Duplexify currently. Only when createWriteStream is called on the File object would we go and fetch the API token and prepare a writable request stream.

I personally like the API of this PR better than that way (treating File objects as Duplex streams). Everything [seems] to be working properly, but that's why I'm excited for a review to catch any silliness.

@ryanseys
Copy link
Contributor

Likely the recent readme changes turned this unmergable. :(

@stephenplusplus
Copy link
Contributor Author

Oops, thanks for catching that. No biggy, I'll fix that up.

@stephenplusplus
Copy link
Contributor Author

Fixed up 👍

@ryanseys
Copy link
Contributor

👍

@mafintosh
Copy link

The problem:

A user can ask for a File object without wanting to pipe data to/from it. A File object has other functionality beyond being used as a stream. Because we need to make an API request to fetch a token before the stream can be used, we need to wait until we know they're going to be using this as a stream.

The solution: bindEvents_

This is called at the instantiation of a File object. It caches _write and _read, then overwrites them so that the first time they are called, the code goes and creates an authorized connection, until eventually calling setReadable/Writable. After the first time being called, they are overwritten, then it re-overwrites itself back to the cached version.

I've had this problem before. It would be cool to create/find a lazy-stream module that solves the problem in the general case. Your solution seems fine to me though :)

The problem:

When piping has completed, we need to tear down the stream, so that the next time it's used as a stream, we go and fetch a valid token again.

Does mean you can do stuff like this?

var file = bucket.file('my-file')

file.on('data', function(data) {
  // ... read data ..
})
file.on('end', function() {
  file.on('data', function(data) {
    // .. read the data again?
  })
})

As in you can reuse the same file object as multiple streams implicitly?

If that is the case I would prefer a file.createReadStream() / file.createWriteStream() method since the above code seems a bit magic to me. I'm also not sure if we run into weird territory in regards to streams when we reinitialize the stream constructors.

Another way to solve this would be to simply reinitialize the file if you want a new stream

var file1 = bucket.file('my-file')
file1.pipe(...)

var file2 = bucket.file('my-file') // just create a new file object if you want to pipe it again
file2.pipe(...)

That way we can keep the duplex api without it becoming too hackish (the cost of recreating the file object seems negligible anyways).

The problem:

I'm a stream fool. Put in terms of an error message:

You are not a fool :)
The reason because this works is because of some crazy logic in the the request module.
Basically the request module detects whether or not it is being piped to and if not it just ends the writable end of the stream right away. Your empty pipe makes the writable end stay open.

See:
https://github.com/mikeal/request/blob/master/request.js#L628-L632
https://github.com/mikeal/request/blob/master/request.js#L679-L683

Sorry for throwing all of this at you. I appreciate any help you can give, no matter how small or big. Feel > free to send me a bill for any headache relief medication purchases I may be inducing :)

No problem at all! Glad to see more people getting into streams :)

General issue:

https://github.com/stephenplusplus/gcloud-node/blob/spp--storage-refactor/lib/storage/file.js#L410
You should not emit end yourself as that is a core stream event that is emitted when the readable part ends

@stephenplusplus
Copy link
Contributor Author

If that is the case I would prefer a file.createReadStream() / file.createWriteStream() method since the above code seems a bit magic to me.

I think that's a good idea. I like file being the stream for the easiest use possible, but it's probably better to force a user to be more direct with their intentions. Plus, doing this saves us the step of overwriting _read and _write - instead using createReadStream and createWriteStream as the trigger to fetch a token.

Your empty pipe makes the writable end stay open.

Wow, interesting. I definitely wouldn't have figured that out. Is there a better solution available or a typical way to handle this?

Thank you very much for the review! I'll make these changes and re-ping if you want to take another look, but don't feel obligated. You've been a huge help already!

@stephenplusplus
Copy link
Contributor Author

Pushed an update that removes the magic: d17d6c5

A file stream must be created on demand now:

var file = bucket.file('my-file');

file.createReadStream().pipe(/*...*/)

Docs are updated: http://stephenplusplus.github.io/gcloud-node/#/docs/master/storage/file

Also, I made https://github.com/stephenplusplus/stream-events to attempt to handle broadcasting 'writing' and 'reading' when a stream invokes _read and _write 💃 (not used in our app)

@stephenplusplus
Copy link
Contributor Author

Re: my earlier question: "Is there a better solution available or a typical way to handle this?"

Here's what I did:

- through().pipe(writable);
+ dup().pipe(writable);

I ended up ditching through as a dependency, instead just using what we already have, Duplexify, to create a simple stream.

@ryanseys
Copy link
Contributor

Aww, sad to see my magic file idea isn't very ideal. It's a little wonky that you have to force writable on request to stay open, would that be considered a bug in request? Is there any guidelines as what to do as a dual-purposed (stream and general object) object? We're effectively trying to do weird stuff like request does here. Request can be piped, be piped to, or neither, kinda like file should have been done. But I agree, that it should be more ephemeral so you can't pipe after piping. That'd be weird.

That all being said, I don't want our codebase to end up like requests :P At this point I'm just a bystander trying to learn streams.

stephenplusplus added a commit that referenced this pull request Oct 20, 2014
sofisl pushed a commit that referenced this pull request Feb 24, 2026
GautamSharda pushed a commit that referenced this pull request Feb 25, 2026
…1382) (#253)

* chore: Enable Size-Label bot in all googleapis NodeJs repositories

Auto-label T-shirt size indicator should be assigned on every new pull request in all googleapis NodeJs repositories

* Remove product

Remove product since it is by default true
Source-Link: googleapis/synthtool@f1562fa
Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-nodejs:latest@sha256:bb4d47d0e770abad62699a4664ce6b9ff1629d50c276a6c75860a6a1853dd19b
codyoss pushed a commit that referenced this pull request Mar 5, 2026
sofisl added a commit that referenced this pull request Mar 5, 2026
* chore: release 2.0.3 (#234)

* updated CHANGELOG.md [ci skip]

* updated package.json [ci skip]

* updated samples/package.json [ci skip]

* fix: IP address takes 15 seconds to timeout, vs., metadata returning immediately (#235)

* fix: use 3s timeout rather than 15 default (#237)

* chore: release 2.0.4 (#236)

* feat!: isAvailable now tries both DNS and IP, choosing whichever responds first (#239)

* chore: release 3.0.0 (#240)

* chore: add protos/ to .eslintignore (#243)

* chore: add metadata file (#249)

* feat: don't throw on ENETUNREACH (#250)

* chore: release 3.1.0 (#251)

* docs: updates to CONTRIBUTING.md

* chore: update CONTRIBUTING.md and make releaseType node (#253)

* feat: add DEBUG_AUTH for digging into authentication issues (#254)

* chore: release 3.2.0 (#255)

* fix(deps): update gaxios (#257)

* chore(deps): update dependency c8 to v6 (#259)

* chore: update to latest version of googleapis (#260)

* test: collect coverage in src folder

* chore(deps): update dependency googleapis to v45 (#262)

* chore: release 3.2.1 (#258)

* updated CHANGELOG.md [ci skip]

* updated package.json [ci skip]

* updated samples/package.json [ci skip]

* fix(docs): add jsdoc-region-tag plugin (#264)

* chore: release 3.2.2 (#265)

* fix(deps): pin TypeScript below 3.7.0

* chore(deps): update dependency googleapis to v46 (#271)

* chore: release 3.2.3 (#272)

* feat: add environment variable for configuring environment detection (#275)

* fix: fastFailMetadataRequest should not reject, if response already happened (#273)

* feat: cache response from isAvailable() method (#274)

* chore: release 3.3.0 (#276)

* docs: update jsdoc license/samples-README (#277)

* chore(deps): update dependency c8 to v7 (#279)

* chore(deps): update dependency eslint-plugin-node to v11 (#280)

* refactor: use explicit mocha imports

* chore: update .nycrc

* chore(deps): update dependency mocha to v7 (#283)

* chore(deps): update dependency gcx to v1 (#284)

* chore(deps): update dependency googleapis to v47 (#286)

* chore: clear synth.metadata

* chore: regenerate synth.metadata (#290)

* chore(deps): update dependency @types/mocha to v7

* fix(isAvailable): handle EHOSTDOWN and EHOSTUNREACH error codes (#291)

* chore: release 3.3.1 (#293)

* chore: skip img.shields.io in docs test

* test: modernize mocha config (#294)

* chore(deps): update dependency linkinator to v2

* build: add GitHub actions config for unit tests (#297)

* chore(deps): update dependency nock to v12

* feat: significantly increase timeout if GCF environment detected (#300)

* chore: release 3.4.0 (#303)

* chore(deps): update dependency uuid to v7

* chore: update jsdoc.js (#306)

* chore: update .jsdoc.js by add protos and remove double quotes (#307)

* chore: correct .jsdoc.js protos and double quotes (#308)

* feat: add ECONNREFUSED to list of known errors for isAvailable() (#309)

* chore: release 3.5.0 (#310)

:robot: I have created a release \*beep\* \*boop\* 
---
## [3.5.0](https://www.github.com/googleapis/gcp-metadata/compare/v3.4.0...v3.5.0) (2020-03-03)


### Features

* add ECONNREFUSED to list of known errors for isAvailable() ([#309](https://www.github.com/googleapis/gcp-metadata/issues/309)) ([17ff6ea](https://www.github.com/googleapis/gcp-metadata/commit/17ff6ea361d02de31463532d4ab4040bf6276e0b))
---


This PR was generated with [Release Please](https://github.com/googleapis/release-please).

* build: update linkinator config (#311)

* build(tests): fix coveralls and enable build cop (#312)

* chore(deps): update dependency googleapis to v48 (#314)

* feat!: drops Node 8 from engines field (#315)

* build!: switch to latest typescirpt/gts (#317)

BREAKING CHANGE: typescript@3.7.x has breaking changes; compiler now targets es2015

* chore: release 4.0.0 (#316)

* fix(deps): update dependency gaxios to v3 (#326)

* test: functions no longer default to allowing external connections (#334)

* build: update templates

Co-authored-by: Benjamin E. Coe <bencoe@google.com>

* build: set AUTOSYNTH_MULTIPLE_COMMITS=true for context aware commits (#332)

* chore: remove duplicate mocha config (#335)

* fix: apache license URL (#468) (#336)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/9c94202f-63a5-4df0-9d76-871a00f99b85/targets

* chore(deps): update dependency gts to v2 (#337)

* build: remove unused codecov config (#338)

* chore: update lint ignore files (#339)

* chore: update formatting and lint (#341)

* chore: release 4.0.1 (#328)

* updated CHANGELOG.md [ci skip]

* updated package.json [ci skip]

* updated samples/package.json [ci skip]

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>

* chore(deps): update dependency googleapis to v49 (#342)

* build: use codecov's action, now that it's authless (#343)

* chore: update npm scripts and synth.py (#344)

Update npm scripts: add clean, prelint, prefix; make sure that lint and fix are set properly. Use post-process feature of synthtool.

* chore(deps): update dependency tmp to ^0.2.0 (#345)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [tmp](https://togithub.com/raszi/node-tmp) | devDependencies | minor | [`^0.1.0` -> `^0.2.0`](https://renovatebot.com/diffs/npm/tmp/0.1.0/0.2.0) |

---

### Release Notes

<details>
<summary>raszi/node-tmp</summary>

### [`v0.2.0`](https://togithub.com/raszi/node-tmp/blob/master/CHANGELOG.md#tmp-v020)

[Compare Source](https://togithub.com/raszi/node-tmp/compare/v0.1.0...v0.2.0)

-   drop support for node version &lt; v8.17.0

    **_BREAKING CHANGE_**

    node versions &lt; v8.17.0 are no longer supported. 

-   [#&#8203;216](https://togithub.com/raszi/node-tmp/issues/216)

    **_BREAKING CHANGE_**

    SIGINT handler has been removed. 

    Users must install their own SIGINT handler and call process.exit() so that tmp's process 
    exit handler can do the cleanup.

    A simple handler would be

        process.on('SIGINT', process.exit);

-   [#&#8203;156](https://togithub.com/raszi/node-tmp/issues/156)

    **_BREAKING CHANGE_**

    template option no longer accepts arbitrary paths. all paths must be relative to os.tmpdir().
    the template option can point to an absolute path that is located under os.tmpdir().
    this can now be used in conjunction with the dir option. 

-   [#&#8203;207](https://togithub.com/raszi/node-tmp/issues/TBD)

    **_BREAKING CHANGE_**

    dir option no longer accepts arbitrary paths. all paths must be relative to os.tmpdir().
    the dir option can point to an absolute path that is located under os.tmpdir().

-   [#&#8203;218](https://togithub.com/raszi/node-tmp/issues/TBD)

    **_BREAKING CHANGE_**

    name option no longer accepts arbitrary paths. name must no longer contain a path and will always be made relative
    to the current os.tmpdir() and the optional dir option.

-   [#&#8203;197](https://togithub.com/raszi/node-tmp/issues/197)

    **_BUG FIX_**

    sync cleanup callback must be returned when using the sync API functions.

    fs.rmdirSync() must not be called with a second parameter that is a function.

-   [#&#8203;176](https://togithub.com/raszi/node-tmp/issues/176)

    **_BUG FIX_**

    fail early if no os.tmpdir() was specified.
    previous versions of Electron did return undefined when calling os.tmpdir().
    \_getTmpDir() now tries to resolve the path returned by os.tmpdir().

    now using rimraf for removing directory trees.

-   [#&#8203;246](https://togithub.com/raszi/node-tmp/issues/246)

    **_BUG FIX_**

    os.tmpdir() might return a value that includes single or double quotes,
    similarly so the dir option, the template option and the name option

-   [#&#8203;240](https://togithub.com/raszi/node-tmp/issues/240)

    **_DOCUMENTATION_**

    better documentation for `tmp.setGracefulCleanup()`.

-   [#&#8203;206](https://togithub.com/raszi/node-tmp/issues/206)

    **_DOCUMENTATION_**

    document name option.

-   [#&#8203;236](https://togithub.com/raszi/node-tmp/issues/236)

    **_DOCUMENTATION_**

    document discardDescriptor option.

-   [#&#8203;237](https://togithub.com/raszi/node-tmp/issues/237)

    **_DOCUMENTATION_**

    document detachDescriptor option.

-   [#&#8203;238](https://togithub.com/raszi/node-tmp/issues/238)

    **_DOCUMENTATION_**

    document mode option.

-   [#&#8203;175](https://togithub.com/raszi/node-tmp/issues/175)

    **_DOCUMENTATION_**

    document unsafeCleanup option.

##### Miscellaneous

-   stabilized tests
-   general clean up
-   update jsdoc

</details>

---

### Renovate configuration

:date: **Schedule**: "after 9am and before 3pm" (UTC).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#googleapis/gcp-metadata).

* feat: Introduces the GCE_METADATA_IP to allow using a different IP address for the GCE metadata server. (#346)

This is useful for environments where 169.254.169.254 is already used by other metadata servers, eg AWS, Azure, etc.

This aligns with other Google client libraries and utilities which already support this such as the Python library.

* chore(deps): update dependency uuid to v8 (#347)

Co-authored-by: gcf-merge-on-green[bot] <60162190+gcf-merge-on-green[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/tmp to v0.2.0 (#350)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@types/tmp](https://togithub.com/DefinitelyTyped/DefinitelyTyped) | devDependencies | minor | [`0.1.0` -> `0.2.0`](https://renovatebot.com/diffs/npm/@types%2ftmp/0.1.0/0.2.0) |

---

### Renovate configuration

:date: **Schedule**: "after 9am and before 3pm" (UTC).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#googleapis/gcp-metadata).

* fix: warn rather than throwing when we fail to connect to metadata server (#351)

* fix: do not check secondary host if GCE_METADATA_IP set (#352)

* chore: release 4.1.0 (#349)

* chore(deps): update dependency googleapis to v50 (#353)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [googleapis](https://togithub.com/googleapis/google-api-nodejs-client) | devDependencies | major | [`^49.0.0` -> `^50.0.0`](https://renovatebot.com/diffs/npm/googleapis/49.0.0/50.0.0) |

---

### Release Notes

<details>
<summary>googleapis/google-api-nodejs-client</summary>

### [`v50.0.0`](https://togithub.com/googleapis/google-api-nodejs-client/blob/master/CHANGELOG.md#&#8203;5000-httpswwwgithubcomgoogleapisgoogle-api-nodejs-clientcomparev4900v5000-2020-05-05)

[Compare Source](https://togithub.com/googleapis/google-api-nodejs-client/compare/v49.0.0...v50.0.0)

##### ⚠ BREAKING CHANGES

-   upgrade to gts@2 ([#&#8203;2062](https://togithub.com/googleapis/google-api-nodejs-client/issues/2062))
-   run the generator ([#&#8203;2053](https://togithub.com/googleapis/google-api-nodejs-client/issues/2053))

##### Features

-   add Blunderbussconfig ([#&#8203;2065](https://www.github.com/googleapis/google-api-nodejs-client/issues/2065)) ([e293188](https://www.github.com/googleapis/google-api-nodejs-client/commit/e293188add17f32c2d11fa06df917f2374f84ac4))
-   run the generator ([#&#8203;2053](https://www.github.com/googleapis/google-api-nodejs-client/issues/2053)) ([1124249](https://www.github.com/googleapis/google-api-nodejs-client/commit/1124249d4c7efc3fe52d48f3f489715db2acd6b9))
-   run the generator ([#&#8203;2081](https://www.github.com/googleapis/google-api-nodejs-client/issues/2081)) ([0c06d1c](https://www.github.com/googleapis/google-api-nodejs-client/commit/0c06d1cc8eea8a0a937436d571d14a9a462647ff))

##### Bug Fixes

-   **deps:** update dependency uuid to v8 ([#&#8203;2069](https://www.github.com/googleapis/google-api-nodejs-client/issues/2069)) ([8f2454c](https://www.github.com/googleapis/google-api-nodejs-client/commit/8f2454c06d4e1de087482e5e6f84c2d11603f868))

##### Build System

-   upgrade to gts@2 ([#&#8203;2062](https://www.github.com/googleapis/google-api-nodejs-client/issues/2062)) ([0b8d04c](https://www.github.com/googleapis/google-api-nodejs-client/commit/0b8d04cbb87f7b7f779de035ef02e18f66c12f18))

</details>

---

### Renovate configuration

:date: **Schedule**: "after 9am and before 3pm" (UTC).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#googleapis/gcp-metadata).

* build: do not fail builds on codecov errors (#528) (#354)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/13e8b547-7af0-436b-b85e-2c1942f8f36a/targets

Source-Link: https://github.com/googleapis/synthtool/commit/be74d3e532faa47eb59f1a0eaebde0860d1d8ab4

* chore(deps): update dependency @types/uuid to v8 (#359)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@types/uuid](https://togithub.com/DefinitelyTyped/DefinitelyTyped) | devDependencies | major | [`^7.0.0` -> `^8.0.0`](https://renovatebot.com/diffs/npm/@types%2fuuid/7.0.4/8.0.0) |

---

### Renovate configuration

:date: **Schedule**: "after 9am and before 3pm" (UTC).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#googleapis/gcp-metadata).

* chore(deps): update dependency googleapis to v51 (#355)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [googleapis](https://togithub.com/googleapis/google-api-nodejs-client) | devDependencies | major | [`^50.0.0` -> `^51.0.0`](https://renovatebot.com/diffs/npm/googleapis/50.0.0/51.0.0) |

---

### Release Notes

<details>
<summary>googleapis/google-api-nodejs-client</summary>

### [`v51.0.0`](https://togithub.com/googleapis/google-api-nodejs-client/blob/master/CHANGELOG.md#&#8203;5100-httpswwwgithubcomgoogleapisgoogle-api-nodejs-clientcomparev5000v5100-2020-05-13)

[Compare Source](https://togithub.com/googleapis/google-api-nodejs-client/compare/v50.0.0...v51.0.0)

##### ⚠ BREAKING CHANGES

-   run the generator ([#&#8203;2096](https://togithub.com/googleapis/google-api-nodejs-client/issues/2096))

##### Features

-   generate samples ([#&#8203;2056](https://www.github.com/googleapis/google-api-nodejs-client/issues/2056)) ([ea599ac](https://www.github.com/googleapis/google-api-nodejs-client/commit/ea599acb1a5adfdfe4efefdf701f19cc07963b70))
-   run the generator ([#&#8203;2096](https://www.github.com/googleapis/google-api-nodejs-client/issues/2096)) ([a89ca06](https://www.github.com/googleapis/google-api-nodejs-client/commit/a89ca0677d79c3dd0376459de77bdad3118d3f44))

</details>

---

### Renovate configuration

:date: **Schedule**: "after 9am and before 3pm" (UTC).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#googleapis/gcp-metadata).

* chore(deps): update dependency googleapis to v52 (#360)

* build: migrate to secret manager (#362)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/9b55eba7-85ee-48d5-a737-8b677439db4d/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/1c92077459db3dc50741e878f98b08c6261181e0

* chore(deps): update dependency mocha to v8 (#363)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [mocha](https://mochajs.org/) ([source](https://togithub.com/mochajs/mocha)) | devDependencies | major | [`^7.0.0` -> `^8.0.0`](https://renovatebot.com/diffs/npm/mocha/7.2.0/8.0.1) |

---

### Release Notes

<details>
<summary>mochajs/mocha</summary>

### [`v8.0.1`](https://togithub.com/mochajs/mocha/blob/master/CHANGELOG.md#&#8203;801--2020-06-10)

[Compare Source](https://togithub.com/mochajs/mocha/compare/v8.0.0...v8.0.1)

The obligatory patch after a major.

#### :bug: Fixes

-   [#&#8203;4328](https://togithub.com/mochajs/mocha/issues/4328): Fix `--parallel` when combined with `--watch` ([**@&#8203;boneskull**](https://togithub.com/boneskull))

### [`v8.0.0`](https://togithub.com/mochajs/mocha/blob/master/CHANGELOG.md#&#8203;800--2020-06-10)

[Compare Source](https://togithub.com/mochajs/mocha/compare/v7.2.0...v8.0.0)

In this major release, Mocha adds the ability to _run tests in parallel_. Better late than never! Please note the **breaking changes** detailed below.

Let's welcome [**@&#8203;giltayar**](https://togithub.com/giltayar) and [**@&#8203;nicojs**](https://togithub.com/nicojs) to the maintenance team!

#### :boom: Breaking Changes

-   [#&#8203;4164](https://togithub.com/mochajs/mocha/issues/4164): **Mocha v8.0.0 now requires Node.js v10.0.0 or newer.** Mocha no longer supports the Node.js v8.x line ("Carbon"), which entered End-of-Life at the end of 2019 ([**@&#8203;UlisesGascon**](https://togithub.com/UlisesGascon))

-   [#&#8203;4175](https://togithub.com/mochajs/mocha/issues/4175): Having been deprecated with a warning since v7.0.0, **`mocha.opts` is no longer supported** ([**@&#8203;juergba**](https://togithub.com/juergba))

    :sparkles: **WORKAROUND:** Replace `mocha.opts` with a [configuration file](https://mochajs.org/#configuring-mocha-nodejs).

-   [#&#8203;4260](https://togithub.com/mochajs/mocha/issues/4260): Remove `enableTimeout()` (`this.enableTimeout()`) from the context object ([**@&#8203;craigtaub**](https://togithub.com/craigtaub))

    :sparkles: **WORKAROUND:** Replace usage of `this.enableTimeout(false)` in your tests with `this.timeout(0)`.

-   [#&#8203;4315](https://togithub.com/mochajs/mocha/issues/4315): The `spec` option no longer supports a comma-delimited list of files ([**@&#8203;juergba**](https://togithub.com/juergba))

    :sparkles: **WORKAROUND**: Use an array instead (e.g., `"spec": "foo.js,bar.js"` becomes `"spec": ["foo.js", "bar.js"]`).

-   [#&#8203;4309](https://togithub.com/mochajs/mocha/issues/4309): Drop support for Node.js v13.x line, which is now End-of-Life ([**@&#8203;juergba**](https://togithub.com/juergba))

-   [#&#8203;4282](https://togithub.com/mochajs/mocha/issues/4282): `--forbid-only` will throw an error even if exclusive tests are avoided via `--grep` or other means ([**@&#8203;arvidOtt**](https://togithub.com/arvidOtt))

-   [#&#8203;4223](https://togithub.com/mochajs/mocha/issues/4223): The context object's `skip()` (`this.skip()`) in a "before all" (`before()`) hook will no longer execute subsequent sibling hooks, in addition to hooks in child suites ([**@&#8203;juergba**](https://togithub.com/juergba))

-   [#&#8203;4178](https://togithub.com/mochajs/mocha/issues/4178): Remove previously soft-deprecated APIs ([**@&#8203;wnghdcjfe**](https://togithub.com/wnghdcjfe)):
    -   `Mocha.prototype.ignoreLeaks()`
    -   `Mocha.prototype.useColors()`
    -   `Mocha.prototype.useInlineDiffs()`
    -   `Mocha.prototype.hideDiff()`

#### :tada: Enhancements

-   [#&#8203;4245](https://togithub.com/mochajs/mocha/issues/4245): Add ability to run tests in parallel for Node.js (see [docs](https://mochajs.org/#parallel-tests)) ([**@&#8203;boneskull**](https://togithub.com/boneskull))

    :exclamation: See also [#&#8203;4244](https://togithub.com/mochajs/mocha/issues/4244); [Root Hook Plugins (docs)](https://mochajs.org/#root-hook-plugins) -- _root hooks must be defined via Root Hook Plugins to work in parallel mode_

-   [#&#8203;4304](https://togithub.com/mochajs/mocha/issues/4304): `--require` now works with ES modules ([**@&#8203;JacobLey**](https://togithub.com/JacobLey))

-   [#&#8203;4299](https://togithub.com/mochajs/mocha/issues/4299): In some circumstances, Mocha can run ES modules under Node.js v10 -- _use at your own risk!_ ([**@&#8203;giltayar**](https://togithub.com/giltayar))

#### :book: Documentation

-   [#&#8203;4246](https://togithub.com/mochajs/mocha/issues/4246): Add documentation for parallel mode and Root Hook plugins ([**@&#8203;boneskull**](https://togithub.com/boneskull))

#### :bug: Fixes

(All bug fixes in Mocha v8.0.0 are also breaking changes, and are listed above)

</details>

---

### Renovate configuration

:date: **Schedule**: "after 9am and before 3pm" (UTC).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#googleapis/gcp-metadata).

* chore(nodejs_templates): add script logging to node_library populate-secrets.sh (#364)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/e306327b-605f-4c07-9420-c106e40c47d5/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/e7034945fbdc0e79d3c57f6e299e5c90b0f11469

* chore: update node issue template (#365)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/37f383f8-7560-459e-b66c-def10ff830cb/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/b10590a4a1568548dd13cfcea9aa11d40898144b

* build: add config .gitattributes (#368)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/2a81bca4-7abd-4108-ac1f-21340f858709/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/dc9caca650c77b7039e2bbc3339ffb34ae78e5b7

* chore(deps): update dependency nock to v13 (#369)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [nock](https://togithub.com/nock/nock) | devDependencies | major | [`^12.0.0` -> `^13.0.0`](https://renovatebot.com/diffs/npm/nock/12.0.3/13.0.0) |

---

### Release Notes

<details>
<summary>nock/nock</summary>

### [`v13.0.0`](https://togithub.com/nock/nock/releases/v13.0.0)

[Compare Source](https://togithub.com/nock/nock/compare/v12.0.3...v13.0.0)

See the [Migration Guide](https://togithub.com/nock/nock/blob/75507727cf09a0b7bf0aa7ebdf3621952921b82e/migration_guides/migrating_to_13.md)

##### Breaking changes

1.  `Scope.log` has been removed. Use the `debug` library when [debugging](https://togithub.com/nock/nock#debugging) failed matches.

2.  `socketDelay` has been removed. Use [`delayConnection`](https://togithub.com/nock/nock#delay-the-connection) instead.

3.  `delay`, `delayConnection`, and `delayBody` are now setters instead of additive.

4.  [When recording](https://togithub.com/nock/nock#recording), skipping body matching using `*` is no longer supported by `nock.define`.
    Set the definition body to `undefined` instead.

5.  `ClientRequest.abort()` has been updated to align with Node's native behavior.
    This could be considered a feature, however, it created some subtle differences that are not backwards compatible. Refer to the migration guide for details.  

6.  Playback of a mocked responses will now never happen until the 'socket' event is emitted.

</details>

---

### Renovate configuration

:date: **Schedule**: "after 9am and before 3pm" (UTC).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#googleapis/gcp-metadata).

* fix: typeo in nodejs .gitattribute (#371)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/cc99acfa-05b8-434b-9500-2f6faf2eaa02/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/799d8e6522c1ef7cb55a70d9ea0b15e045c3d00b

* chore: release 4.1.1 (#372)

:robot: I have created a release \*beep\* \*boop\* 
---
### [4.1.1](https://www.github.com/googleapis/gcp-metadata/compare/v4.1.0...v4.1.1) (2020-07-09)


### Bug Fixes

* typeo in nodejs .gitattribute ([#371](https://www.github.com/googleapis/gcp-metadata/issues/371)) ([5b4bb1c](https://www.github.com/googleapis/gcp-metadata/commit/5b4bb1c85e67e3ef0a6d1ec2ea316d560e03092f))
---


This PR was generated with [Release Please](https://github.com/googleapis/release-please).

* fix(deps): roll back dependency gcp-metadata to ^4.1.0 (#373)

* chore: release 4.1.2 (#375)

* chore(deps): update dependency @types/mocha to v8 (#377)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@types/mocha](https://togithub.com/DefinitelyTyped/DefinitelyTyped) | devDependencies | major | [`^7.0.0` -> `^8.0.0`](https://renovatebot.com/diffs/npm/@types%2fmocha/7.0.2/8.0.0) |

---

### Renovate configuration

:date: **Schedule**: "after 9am and before 3pm" (UTC).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#googleapis/gcp-metadata).

* docs: add ProjectID and nested properties examples (#366)

These two examples will be a great help to developers quickly interpreting how to use this library.

Co-authored-by: Justin Beckwith <justin.beckwith@gmail.com>

* fix(deps): update dependency json-bigint to ^0.4.0 (#378)

* chore: release 4.1.3 (#379)

* updated CHANGELOG.md [ci skip]

* updated package.json [ci skip]

* updated samples/package.json

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>

* chore(deps): update dependency googleapis to v54 (#380)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [googleapis](https://togithub.com/googleapis/google-api-nodejs-client) | devDependencies | major | [`^52.0.0` -> `^54.0.0`](https://renovatebot.com/diffs/npm/googleapis/52.1.0/54.0.0) |

---

### Release Notes

<details>
<summary>googleapis/google-api-nodejs-client</summary>

### [`v54.0.0`](https://togithub.com/googleapis/google-api-nodejs-client/blob/master/CHANGELOG.md#&#8203;5400-httpswwwgithubcomgoogleapisgoogle-api-nodejs-clientcomparev5300v5400-2020-07-10)

[Compare Source](https://togithub.com/googleapis/google-api-nodejs-client/compare/v52.1.0...v54.0.0)

##### ⚠ BREAKING CHANGES

-   **webfonts:** This release has breaking changes.
-   **run:** This release has breaking changes.
-   **playcustomapp:** This release has breaking changes.
-   **groupssettings:** This release has breaking changes.
-   **games:** This release has breaking changes.
-   **dns:** This release has breaking changes.
-   **dialogflow:** This release has breaking changes.
-   **cloudbuild:** This release has breaking changes.
-   **civicinfo:** This release has breaking changes.
-   **books:** This release has breaking changes.

##### Features

-   **admin:** update the API ([b58f001](https://www.github.com/googleapis/google-api-nodejs-client/commit/b58f001282bebe3d0bc9bb8842125f3bc19a4a35))
-   **androidpublisher:** update the API ([a39978c](https://www.github.com/googleapis/google-api-nodejs-client/commit/a39978cd9b1f743d1d25538de26264cdc7665ce9))
-   **artifactregistry:** update the API ([d3e6b4e](https://www.github.com/googleapis/google-api-nodejs-client/commit/d3e6b4e13461f5aa4d0fd7ab7c8b6379d04b34d5))
-   **bigquery:** update the API ([801f29a](https://www.github.com/googleapis/google-api-nodejs-client/commit/801f29ababf8b2a2b96e3a91abbe613cffff627d))
-   **bigqueryreservation:** update the API ([47b9da6](https://www.github.com/googleapis/google-api-nodejs-client/commit/47b9da6164a7c5f538c262e266c392c2016a6479))
-   **books:** update the API ([bbbed18](https://www.github.com/googleapis/google-api-nodejs-client/commit/bbbed18118673ad005acd00f8507c7b909972068))
-   **civicinfo:** update the API ([a164b5c](https://www.github.com/googleapis/google-api-nodejs-client/commit/a164b5c2c694db387b17565a0529895c2940c20c))
-   **cloudasset:** update the API ([e74b3bf](https://www.github.com/googleapis/google-api-nodejs-client/commit/e74b3bfd925b9fec90944826d41a4d183fb88dd4))
-   **cloudbilling:** update the API ([c174f6e](https://www.github.com/googleapis/google-api-nodejs-client/commit/c174f6e77ce170e794bff4969eae3efed9fe9049))
-   **cloudbuild:** update the API ([9016438](https://www.github.com/googleapis/google-api-nodejs-client/commit/90164385d0b93e242468029f9dcfa71cb25dbce1))
-   **cloudidentity:** update the API ([747850e](https://www.github.com/googleapis/google-api-nodejs-client/commit/747850e61b288451d564ed0950716352f00b1d0b))
-   **cloudresourcemanager:** update the API ([6394bec](https://www.github.com/googleapis/google-api-nodejs-client/commit/6394bec0bfa34382864bbff6bca0837327b29bf4))
-   **compute:** update the API ([02cce0d](https://www.github.com/googleapis/google-api-nodejs-client/commit/02cce0d057740e04b380ca47904e0bbe54172602))
-   **container:** update the API ([e221ff5](https://www.github.com/googleapis/google-api-nodejs-client/commit/e221ff5075417976e477263d5cdc2b9ecbb8b1b5))
-   **content:** update the API ([00012b6](https://www.github.com/googleapis/google-api-nodejs-client/commit/00012b6369f82170d8627caf00cc965aad013dd5))
-   **dataproc:** update the API ([2ff7db7](https://www.github.com/googleapis/google-api-nodejs-client/commit/2ff7db7a5936997ad476ce840a9b7203bbd84a0c))
-   **dialogflow:** update the API ([e92b84e](https://www.github.com/googleapis/google-api-nodejs-client/commit/e92b84ebf1aa563d60b5bb0f4229c83ad457db5c))
-   **displayvideo:** update the API ([8691bdd](https://www.github.com/googleapis/google-api-nodejs-client/commit/8691bddcccc3e622c4929960be5cf9e0eceeaf36))
-   **dns:** update the API ([639a258](https://www.github.com/googleapis/google-api-nodejs-client/commit/639a2580bf8ac79bce26c8c46d802ddf722580e2))
-   **drive:** update the API ([4b468b7](https://www.github.com/googleapis/google-api-nodejs-client/commit/4b468b7414b971b11ff9dbf901679e2b0e2dddb5))
-   **playcustomapp:** update the API ([df4618d](https://www.github.com/googleapis/google-api-nodejs-client/commit/df4618dad72715cdedb6fef9e1d8b6132bb40e3d))
-   regenerate index files ([e15df98](https://www.github.com/googleapis/google-api-nodejs-client/commit/e15df9821cb034f834ccbdaed775e1a4dc436a51))
-   **fcm:** update the API ([1251fb8](https://www.github.com/googleapis/google-api-nodejs-client/commit/1251fb81af5ea33d2dedec38f970fdfed98de0d3))
-   **games:** update the API ([c93cb30](https://www.github.com/googleapis/google-api-nodejs-client/commit/c93cb30b91d6e8fa0bbb1fe0486d4d75e681f928))
-   **groupssettings:** update the API ([81cd81d](https://www.github.com/googleapis/google-api-nodejs-client/commit/81cd81d4c7bcbf6d2f94229ba0bf90242f1018ba))
-   **healthcare:** update the API ([3083559](https://www.github.com/googleapis/google-api-nodejs-client/commit/30835593c8f10529244c14c566499a635b638e31))
-   **lifesciences:** update the API ([7feb073](https://www.github.com/googleapis/google-api-nodejs-client/commit/7feb073e5e57baccea3a91419ecb4ff9295e6371))
-   **managedidentities:** update the API ([48b16fe](https://www.github.com/googleapis/google-api-nodejs-client/commit/48b16fe334c4bad14e35280b7aae0a8abf9d9e0a))
-   **ml:** update the API ([51eb5c5](https://www.github.com/googleapis/google-api-nodejs-client/commit/51eb5c549b5c876a5a62ee2f413eef779f29f22c))
-   **monitoring:** update the API ([08334a3](https://www.github.com/googleapis/google-api-nodejs-client/commit/08334a3ca25d76572a81c9eeec8cce463c06efee))
-   **people:** update the API ([3b82224](https://www.github.com/googleapis/google-api-nodejs-client/commit/3b82224a6b8a45ce27d8401e1b9bec726114a483))
-   **prod_tt_sasportal:** update the API ([75b7e2d](https://www.github.com/googleapis/google-api-nodejs-client/commit/75b7e2dc5ee293644ab208d7b5f7f502848cbe91))
-   **recommender:** update the API ([8d1a4b8](https://www.github.com/googleapis/google-api-nodejs-client/commit/8d1a4b87fa01e82c43c8decf58506ebcd9a0ce0f))
-   **run:** update the API ([5f57e3c](https://www.github.com/googleapis/google-api-nodejs-client/commit/5f57e3ce20249d7caacc6fc39342960e9ed90667))
-   **sasportal:** update the API ([355fe63](https://www.github.com/googleapis/google-api-nodejs-client/commit/355fe63f0ffe90fe7ce823c111abb5b2d7367746))
-   **serviceconsumermanagement:** update the API ([a1c8bac](https://www.github.com/googleapis/google-api-nodejs-client/commit/a1c8bac0d0c85f61f05cf335371e4e0b12898a00))
-   **servicecontrol:** update the API ([7c069fe](https://www.github.com/googleapis/google-api-nodejs-client/commit/7c069feac12632d09a352f0ad372fb5b6533c650))
-   **serviceusage:** update the API ([1d635b8](https://www.github.com/googleapis/google-api-nodejs-client/commit/1d635b8990e61dcf9727950763c61f8cf90e1e55))
-   **testing:** update the API ([29b315e](https://www.github.com/googleapis/google-api-nodejs-client/commit/29b315e2b3c37545f7cc839faa0c915330be7d12))
-   **webfonts:** update the API ([1cb38af](https://www.github.com/googleapis/google-api-nodejs-client/commit/1cb38af59700107210e82d08ddf074534df77985))

##### Bug Fixes

-   **accessapproval:** update the API ([cd856eb](https://www.github.com/googleapis/google-api-nodejs-client/commit/cd856eb230ae1476283034943b36f610bd415bdd))
-   **admob:** update the API ([571c96a](https://www.github.com/googleapis/google-api-nodejs-client/commit/571c96a919ff3cbf0ab79884efb520b1b641f260))
-   **androiddeviceprovisioning:** update the API ([265d4c0](https://www.github.com/googleapis/google-api-nodejs-client/commit/265d4c09c1ad1251d453cf832b1a13d03f8cdbfd))
-   **bigqueryconnection:** update the API ([309be47](https://www.github.com/googleapis/google-api-nodejs-client/commit/309be47d070c7540b4bfbff6dafaf48011cadcba))
-   **bigtableadmin:** update the API ([68c4a0d](https://www.github.com/googleapis/google-api-nodejs-client/commit/68c4a0dc841b51a8552f0fb6aad4724a1cdbb965))
-   **billingbudgets:** update the API ([9089b8f](https://www.github.com/googleapis/google-api-nodejs-client/commit/9089b8fde8fd2b145ba597db0611ce707e07f799))
-   **chat:** update the API ([ed14465](https://www.github.com/googleapis/google-api-nodejs-client/commit/ed144650e548d98fb2aa37463815aa3c0f3a0b65))
-   **classroom:** update the API ([3c73d57](https://www.github.com/googleapis/google-api-nodejs-client/commit/3c73d57576a96573f608e55e2589be74b833173c))
-   **clouderrorreporting:** update the API ([ed135f3](https://www.github.com/googleapis/google-api-nodejs-client/commit/ed135f3bbf4a2ab682cd55e1c95cb391523661cb))
-   **cloudfunctions:** update the API ([54c8b57](https://www.github.com/googleapis/google-api-nodejs-client/commit/54c8b57fe9752e7b93ef1fdd308323a3131aa233))
-   **cloudscheduler:** update the API ([ed2f240](https://www.github.com/googleapis/google-api-nodejs-client/commit/ed2f2407f22d3b67ce680bc4732f3c7418986937))
-   **composer:** update the API ([07c95c0](https://www.github.com/googleapis/google-api-nodejs-client/commit/07c95c01135cd82c776869ea9591a718efda6698))
-   **containeranalysis:** update the API ([a2fdc43](https://www.github.com/googleapis/google-api-nodejs-client/commit/a2fdc439e8b620aabdffedb352dbabdc432f6c73))
-   **dlp:** update the API ([c18496b](https://www.github.com/googleapis/google-api-nodejs-client/commit/c18496b0db04a9a552b60c83b493cf2f8666459b))
-   **documentai:** update the API ([d09d2f3](https://www.github.com/googleapis/google-api-nodejs-client/commit/d09d2f35361e5c100ff04b2e02f42fcb1332d7dc))
-   **doubleclicksearch:** update the API ([8fbbc3f](https://www.github.com/googleapis/google-api-nodejs-client/commit/8fbbc3f582bef6dd059903051af5ad561bfc973d))
-   **firebase:** update the API ([6354956](https://www.github.com/googleapis/google-api-nodejs-client/commit/635495658e8682d0d3a2e56e18e6d8bcca0617ea))
-   **firebasehosting:** update the API ([dce4929](https://www.github.com/googleapis/google-api-nodejs-client/commit/dce4929944a9406f344688bb99233420003105e0))
-   **gameservices:** update the API ([d23d5f1](https://www.github.com/googleapis/google-api-nodejs-client/commit/d23d5f1b9381bb36a6f1cb23b09f22a52e212395))
-   **gmailpostmastertools:** update the API ([7a88976](https://www.github.com/googleapis/google-api-nodejs-client/commit/7a88976518abf6da1bad8bd08b2a4ed7785eb203))
-   **groupsmigration:** update the API ([414e50a](https://www.github.com/googleapis/google-api-nodejs-client/commit/414e50ad191ccf36db3fc1ac304b33c40bcf03d2))
-   **iam:** update the API ([653d902](https://www.github.com/googleapis/google-api-nodejs-client/commit/653d902aee44a1dfa00a904b02891f6b51bb0a25))
-   **iamcredentials:** update the API ([880c339](https://www.github.com/googleapis/google-api-nodejs-client/commit/880c33973439f1c2ec27e4d1d29f1241d222f196))
-   **logging:** update the API ([b2a1eb1](https://www.github.com/googleapis/google-api-nodejs-client/commit/b2a1eb17f5ff7410bdd7463c0da3254e28be3e66))
-   **pagespeedonline:** update the API ([fef4e3d](https://www.github.com/googleapis/google-api-nodejs-client/commit/fef4e3da076234c860ef5b672c3fc2fad4dcb7b9))
-   **playablelocations:** update the API ([3c0a75c](https://www.github.com/googleapis/google-api-nodejs-client/commit/3c0a75c66fef257f639d1227c89b577dd10e8db8))
-   **pubsub:** update the API ([b7c4d93](https://www.github.com/googleapis/google-api-nodejs-client/commit/b7c4d93c500d133914e49013520f64910f0daf91))
-   **realtimebidding:** update the API ([4295587](https://www.github.com/googleapis/google-api-nodejs-client/commit/4295587f8b4558d633ba657448b6b929ff8d647d))
-   **redis:** update the API ([6685609](https://www.github.com/googleapis/google-api-nodejs-client/commit/668560917de291fc9345f4b340d7961617df6ad9))
-   **remotebuildexecution:** update the API ([7853b30](https://www.github.com/googleapis/google-api-nodejs-client/commit/7853b3089aac87fb5b6587b03ef3f1c32d08912f))
-   **safebrowsing:** update the API ([59295a6](https://www.github.com/googleapis/google-api-nodejs-client/commit/59295a6d4689b582fe6667bb9318a9e6e32347d0))
-   **securitycenter:** update the API ([1be3b58](https://www.github.com/googleapis/google-api-nodejs-client/commit/1be3b58aa29fb01296062a2c3196842a38c79061))
-   **servicemanagement:** update the API ([e2e63ad](https://www.github.com/googleapis/google-api-nodejs-client/commit/e2e63adaddce24671f624468e68c54df873bef72))
-   **servicenetworking:** update the API ([43840be](https://www.github.com/googleapis/google-api-nodejs-client/commit/43840be058cd32524b40edf51216833fc7490027))
-   **sheets:** update the API ([9c10fe8](https://www.github.com/googleapis/google-api-nodejs-client/commit/9c10fe851891c3f0dc01241118ee48c391d12df3))
-   **spanner:** update the API ([5c7ecc5](https://www.github.com/googleapis/google-api-nodejs-client/commit/5c7ecc504b04342ab8e4cb0a8062b46ae6b6c59a))
-   **storage:** update the API ([3c12d1a](https://www.github.com/googleapis/google-api-nodejs-client/commit/3c12d1a56b69d223e10f89354866fd69b8a83c39))
-   **vectortile:** update the API ([9a11146](https://www.github.com/googleapis/google-api-nodejs-client/commit/9a11146bb65632ff278d6e5cabfc5eda455c8d5b))
-   **vision:** update the API ([d100bc6](https://www.github.com/googleapis/google-api-nodejs-client/commit/d100bc625b5023644a78439daebf79c98db988d7))

</details>

---

### Renovate configuration

:date: **Schedule**: "after 9am and before 3pm" (UTC).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#googleapis/gcp-metadata).

* fix(deps): update dependency json-bigint to v1 (#382)

* chore: release 4.1.4 (#383)

* updated CHANGELOG.md [ci skip]

* updated package.json [ci skip]

* updated samples/package.json

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>

* build: fix typo in publish (#387)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/5b03461e-47c0-40e8-a8ad-c465ee146cc5/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/388e10f5ae302d3e8de1fac99f3a95d1ab8f824a
Source-Link: https://github.com/googleapis/synthtool/commit/d82deccf657a66e31bd5da9efdb96c6fa322fc7e

* chore: add config files for cloud-rad for node.js (#388)

* chore: add config files for cloud-rad for node.js

Generate and upload yaml files for ref docs

* Add gitattributes for json with comments

* Fix extra char

Source-Author: F. Hinkelmann <franziska.hinkelmann@gmail.com>
Source-Date: Thu Jul 16 12:19:00 2020 -0400
Source-Repo: googleapis/synthtool
Source-Sha: 21f1470ecd01424dc91c70f1a7c798e4e87d1eec
Source-Link: https://github.com/googleapis/synthtool/commit/21f1470ecd01424dc91c70f1a7c798e4e87d1eec

* chore(deps): update dependency googleapis to v55 (#389)

* chore: add dev dependencies for cloud-rad ref docs (#390)

* build: rename _toc to toc (#391)

Source-Author: F. Hinkelmann <franziska.hinkelmann@gmail.com>
Source-Date: Tue Jul 21 10:53:20 2020 -0400
Source-Repo: googleapis/synthtool
Source-Sha: 99c93fe09f8c1dca09dfc0301c8668e3a70dd796
Source-Link: https://github.com/googleapis/synthtool/commit/99c93fe09f8c1dca09dfc0301c8668e3a70dd796

Co-authored-by: sofisl <55454395+sofisl@users.noreply.github.com>

* build: move gitattributes files to node templates (#392)

Source-Author: F. Hinkelmann <franziska.hinkelmann@gmail.com>
Source-Date: Thu Jul 23 01:45:04 2020 -0400
Source-Repo: googleapis/synthtool
Source-Sha: 3a00b7fea8c4c83eaff8eb207f530a2e3e8e1de3
Source-Link: https://github.com/googleapis/synthtool/commit/3a00b7fea8c4c83eaff8eb207f530a2e3e8e1de3

* chore(deps): update dependency googleapis to v56 (#393)

* chore(deps): update dependency googleapis to v57 (#394)

* chore(node): fix kokoro build path for cloud-rad (#395)

Source-Author: F. Hinkelmann <franziska.hinkelmann@gmail.com>
Source-Date: Wed Jul 29 00:28:42 2020 -0400
Source-Repo: googleapis/synthtool
Source-Sha: 89d431fb2975fc4e0ed24995a6e6dfc8ff4c24fa
Source-Link: https://github.com/googleapis/synthtool/commit/89d431fb2975fc4e0ed24995a6e6dfc8ff4c24fa

* chore(deps): update dependency googleapis to v58 (#396)

* build: --credential-file-override is no longer required (#398)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/4de22315-84b1-493d-8da2-dfa7688128f5/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/94421c47802f56a44c320257b2b4c190dc7d6b68

* chore(deps): update dependency googleapis to v59 (#399)

* chore: update cloud rad kokoro build job (#400)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/b742586e-df31-4aac-8092-78288e9ea8e7/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/bd0deaa1113b588d70449535ab9cbf0f2bd0e72f

* build: perform publish using Node 12 (#401)

Source-Author: Benjamin E. Coe <bencoe@google.com>
Source-Date: Wed Aug 12 12:12:29 2020 -0700
Source-Repo: googleapis/synthtool
Source-Sha: 5747555f7620113d9a2078a48f4c047a99d31b3e
Source-Link: https://github.com/googleapis/synthtool/commit/5747555f7620113d9a2078a48f4c047a99d31b3e

* chore: start tracking obsolete files (#402)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/7a1b0b96-8ddb-4836-a1a2-d2f73b7e6ffe/targets

- [ ] To automatically regenerate this PR, check this box.

* build: move system and samples test from Node 10 to Node 12 (#403)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/ba2d388f-b3b2-4ad7-a163-0c6b4d86894f/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/05de3e1e14a0b07eab8b474e669164dbd31f81fb

* build: track flaky tests for "nightly", add new secrets for tagging (#404)

Source-Author: Benjamin E. Coe <bencoe@google.com>
Source-Date: Wed Aug 26 14:28:22 2020 -0700
Source-Repo: googleapis/synthtool
Source-Sha: 8cf6d2834ad14318e64429c3b94f6443ae83daf9
Source-Link: https://github.com/googleapis/synthtool/commit/8cf6d2834ad14318e64429c3b94f6443ae83daf9

* test: kitchen sink test had ancient deps (#408)

Fixes #405

* build(test): recursively find test files; fail on unsupported dependency versions (#409)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/b07e7603-6d2e-453b-934d-7b03566ffcfd/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/fdd03c161003ab97657cc0218f25c82c89ddf4b6

* feat: add support for GCE_METADATA_HOST environment variable (#406)

* feat: add support for GCE_METADATA_HOST environment variable

* chore: start tracking obsolete files (#411)

* chore: release 4.2.0 (#410)

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Co-authored-by: sofisl <55454395+sofisl@users.noreply.github.com>

* chore(deps): update dependency googleapis to v60 (#412)

* chore: update bucket for cloud-rad (#413)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/50d3d05e-d0e3-4b19-aa85-502f92e4470a/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/079dcce498117f9570cebe6e6cff254b38ba3860

* build(node_library): migrate to Trampoline V2 (#414)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/e58201ce-61aa-4909-a1c6-a4b8f6e73db0/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/0c868d49b8e05bc1f299bc773df9eb4ef9ed96e9

* chore(deps): update dependency googleapis to v61 (#415)

* chore(deps): update dependency gts to v3 (#416)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [gts](https://togithub.com/google/gts) | devDependencies | major | [`^2.0.2` -> `^3.0.0`](https://renovatebot.com/diffs/npm/gts/2.0.2/3.0.0) |

---

### Release Notes

<details>
<summary>google/gts</summary>

### [`v3.0.0`](https://togithub.com/google/gts/blob/master/CHANGELOG.md#&#8203;300-httpswwwgithubcomgooglegtscomparev202v300-2020-10-08)

[Compare Source](https://togithub.com/google/gts/compare/v2.0.2...v3.0.0)

##### ⚠ BREAKING CHANGES

-   change default `check` to `lint` ([#&#8203;570](https://togithub.com/google/gts/issues/570))
-   **deps:** require TypeScript 4.x ([#&#8203;565](https://togithub.com/google/gts/issues/565))

##### Features

-   Add TypeScript v4 support ([#&#8203;551](https://www.github.com/google/gts/issues/551)) ([0883956](https://www.github.com/google/gts/commit/08839565a1d2b4b39d532c9b0b596f01b18856fe))
-   change default `check` to `lint` ([#&#8203;570](https://www.github.com/google/gts/issues/570)) ([c527b66](https://www.github.com/google/gts/commit/c527b66be1ef6a78ea14b3d29225a8d7fb7097bd))
-   generate .eslintignore when running init ([#&#8203;521](https://www.github.com/google/gts/issues/521)) ([8bce036](https://www.github.com/google/gts/commit/8bce0368767f0c2ad7d0700deb839962bc928d16))

##### Bug Fixes

-   add build/.eslintrc.json to files field ([#&#8203;553](https://www.github.com/google/gts/issues/553)) ([3b516ad](https://www.github.com/google/gts/commit/3b516ad5e9f0d58201dde469461db7c6ed1c1b78))
-   **deps:** require TypeScript 4.x ([#&#8203;565](https://www.github.com/google/gts/issues/565)) ([cbc5267](https://www.github.com/google/gts/commit/cbc5267579ef24e8c8ceaa2ef794df3ef54ea56a))
-   **deps:** update dependency update-notifier to v5 ([#&#8203;574](https://www.github.com/google/gts/issues/574)) ([9a882bf](https://www.github.com/google/gts/commit/9a882bf4ac30ad06e7b91a65ad5721d8e8b41c4b))
-   **deps:** update typescript-eslint monorepo to v2.34.0 ([#&#8203;509](https://www.github.com/google/gts/issues/509)) ([998a4ac](https://www.github.com/google/gts/commit/998a4ac9b75c97f04d8e5db37563f32d31652f23))
-   **deps:** update typescript-eslint monorepo to v3 (major) ([#&#8203;528](https://www.github.com/google/gts/issues/528)) ([e22e173](https://www.github.com/google/gts/commit/e22e17338db2ddb7eb829c821037c2f4e77ff869))
-   **deps:** update typescript-eslint monorepo to v4 ([#&#8203;556](https://www.github.com/google/gts/issues/556)) ([54148df](https://www.github.com/google/gts/commit/54148dfbd8b5f8b36a0f44f901c5db933393a661))
-   better error message for broken tsconfig.json ([#&#8203;501](https://www.github.com/google/gts/issues/501)) ([0c17a76](https://www.github.com/google/gts/commit/0c17a76c6650eee1d8abaff11a897a432eeaa65f))
-   prohibit calls for it.only and describe.only ([#&#8203;499](https://www.github.com/google/gts/issues/499)) ([071c33c](https://www.github.com/google/gts/commit/071c33ceef0e3765166aaebf6ed4698167ac0f98))

##### [2.0.2](https://www.github.com/google/gts/compare/v2.0.1...v2.0.2) (2020-05-11)

##### Bug Fixes

-   Revert 'update dependency eslint to v7'" ([#&#8203;507](https://www.github.com/google/gts/issues/507)) ([0f9950b](https://www.github.com/google/gts/commit/0f9950b273329dbcce5f3cc20864c3dcd076f08c))
-   **deps:** pin release of eslint-typescript ([#&#8203;508](https://www.github.com/google/gts/issues/508)) ([bd86b42](https://www.github.com/google/gts/commit/bd86b42e2bb904d3765dee82262e4691a11b9958))
-   **deps:** update dependency eslint to v7 ([#&#8203;504](https://www.github.com/google/gts/issues/504)) ([6aee159](https://www.github.com/google/gts/commit/6aee1595d0486ae2c7fd68d16b1b59c4c4015753))

##### [2.0.1](https://www.github.com/google/gts/compare/v2.0.0...v2.0.1) (2020-05-07)

##### Bug Fixes

-   throw an error if running with an unsupported version of nodejs ([#&#8203;493](https://www.github.com/google/gts/issues/493)) ([94fdf1e](https://www.github.com/google/gts/commit/94fdf1eaed634aa73c3e44c7a3d9f1325f773b07))
-   **deps:** update dependency meow to v7 ([#&#8203;502](https://www.github.com/google/gts/issues/502)) ([cf91cda](https://www.github.com/google/gts/commit/cf91cda1afab25759427511d3c97d0037d61c649))

</details>

---

### Renovate configuration

:date: **Schedule**: "after 9am and before 3pm" (UTC).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/gcp-metadata).

* build: only check --engine-strict for production deps (#418)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/4cd5e301-947f-4d70-9a60-8beeb4f801a4/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/5451633881133e5573cc271a18e73b18caca8b1b

* chore: clean up Node.js TOC for cloud-rad (#419)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/d032c795-21ea-4ddd-9af9-5229b7741969/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/901ddd44e9ef7887ee681b9183bbdea99437fdcc
Source-Link: https://github.com/googleapis/synthtool/commit/f96d3b455fe27c3dc7bc37c3c9cd27b1c6d269c8

* fix(deps): update dependency gaxios to v4 (#420)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [gaxios](https://togithub.com/googleapis/gaxios) | dependencies | major | [`^3.0.0` -> `^4.0.0`](https://renovatebot.com/diffs/npm/gaxios/3.2.0/4.0.0) |

---

### Release Notes

<details>
<summary>googleapis/gaxios</summary>

### [`v4.0.0`](https://togithub.com/googleapis/gaxios/blob/master/CHANGELOG.md#&#8203;400-httpswwwgithubcomgoogleapisgaxioscomparev320v400-2020-10-21)

[Compare Source](https://togithub.com/googleapis/gaxios/compare/v3.2.0...v4.0.0)

##### ⚠ BREAKING CHANGES

-   parameters in `url` and parameters provided via params will now be combined.

##### Bug Fixes

-   drop requirement on URL/combine url and params ([#&#8203;338](https://www.github.com/googleapis/gaxios/issues/338)) ([e166bc6](https://www.github.com/googleapis/gaxios/commit/e166bc6721fd979070ab3d9c69b71ffe9ee061c7))

</details>

---

### Renovate configuration

:date: **Schedule**: "after 9am and before 3pm" (UTC).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/gcp-metadata).

* docs: updated code of conduct (includes update to actions) (#425)

* chore(docs): update code of conduct of synthtool and templates

Source-Author: Christopher Wilcox <crwilcox@google.com>
Source-Date: Thu Oct 22 14:22:01 2020 -0700
Source-Repo: googleapis/synthtool
Source-Sha: 5f6ef0ec5501d33c4667885b37a7685a30d41a76
Source-Link: https://github.com/googleapis/synthtool/commit/5f6ef0ec5501d33c4667885b37a7685a30d41a76

* build(node): update testing matrix

Source-Author: Benjamin E. Coe <bencoe@google.com>
Source-Date: Thu Oct 22 22:32:52 2020 -0500
Source-Repo: googleapis/synthtool
Source-Sha: b7413d38b763827c72c0360f0a3d286c84656eeb
Source-Link: https://github.com/googleapis/synthtool/commit/b7413d38b763827c72c0360f0a3d286c84656eeb

* build(node): don't run prepare during smoke test

Source-Author: Benjamin E. Coe <bencoe@google.com>
Source-Date: Fri Oct 23 17:27:51 2020 -0400
Source-Repo: googleapis/synthtool
Source-Sha: a783321fd55f010709294455584a553f4b24b944
Source-Link: https://github.com/googleapis/synthtool/commit/a783321fd55f010709294455584a553f4b24b944

* build(node): cleanup production deps before installing dev/production

Source-Author: Benjamin E. Coe <bencoe@google.com>
Source-Date: Mon Oct 26 10:37:03 2020 -0400
Source-Repo: googleapis/synthtool
Source-Sha: 89c849ba5013e45e8fb688b138f33c2ec6083dc5
Source-Link: https://github.com/googleapis/synthtool/commit/89c849ba5013e45e8fb688b138f33c2ec6083dc5

* chore: release 4.2.1 (#421)

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>

* chore(deps): update dependency googleapis to v62 (#426)

* build(node): add KOKORO_BUILD_ARTIFACTS_SUBDIR to env (#427)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/a3945889-600e-4e75-bee0-b9fae0061d72/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/ba9918cd22874245b55734f57470c719b577e591

* chore(deps): update dependency googleapis to v63 (#428)

* chore(deps): update dependency googleapis to v64 (#429)

* chore(deps): update dependency googleapis to v65 (#430)

* chore(deps): update dependency googleapis to v66 (#431)

* docs: add instructions for authenticating for system tests (#432)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/f858a143-daac-4e50-b9ae-219abe9981ce/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/363fe305e9ce34a6cd53951c6ee5f997094b54ee

* chore(deps): update dependency googleapis to v67 (#433)

* refactor(nodejs): move build cop to flakybot (#435)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/1ff854df-6525-4c07-b2b3-1ffce863e3f6/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: https://github.com/googleapis/synthtool/commit/57c23fa5705499a4181095ced81f0ee0933b64f6

* docs: generate a standard README (#437)

* chore(deps): update dependency googleapis to v68 (#439)

* chore(deps): update dependency googleapis to v70 (#440)

* chore: regenerate common templates (#443)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/8d112339-8f12-4550-bf32-d8ee0f806c58/targets

- [ ] To automatically regenerate this PR, check this box. (May take up to 24 hours.)

Source-Link: https://github.com/googleapis/synthtool/commit/c6706ee5d693e9ae5967614170732646590d8374
Source-Link: https://github.com/googleapis/synthtool/commit/b33b0e2056a85fc2264b294f2cf47dcd45e95186
Source-Link: https://github.com/googleapis/synthtool/commit/898b38a6f4fab89a76dfb152480bb034a781331b

* build: address memory issue with Node 10 (#448)

* chore(deps): update dependency googleapis to v73 (#447)

* build: add generated-files bot config (#446)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/74f0c42b-d8fe-4430-b878-ab099e9e7fe7/targets

- [ ] To automatically regenerate this PR, check this box. (May take up to 24 hours.)

Source-Link: https://github.com/googleapis/synthtool/commit/e6f3d54be015a394b6ab5a25903ec09062a2b424
Source-Link: https://github.com/googleapis/synthtool/commit/04573fd73f56791c659832aa84d35a4ec860d6f7

* build: remove codecov action (#449)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/6dfc5e60-8418-4e29-9b88-9851087cfe12/targets

- [ ] To automatically regenerate this PR, check this box. (May take up to 24 hours.)

Source-Link: https://github.com/googleapis/synthtool/commit/b891fb474173f810051a7fdb0d66915e0a9bc82f

* feat: add `gcf-owl-bot[bot]` to `ignoreAuthors` (#450)

This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/b7c32ab5-f410-49ac-9cbf-a2a7252155c6/targets

- [ ] To automatically regenerate this PR, check this box. (May take up to 24 hours.)

Source-Link: https://github.com/googleapis/synthtool/commit/7332178a11ddddc91188dc0f25bca1ccadcaa6c6

* chore: migrate to owl bot (#452)

* chore: migrate to owl bot

* chore: copy files from googleapis-gen 397c0bfd367a2427104f988d5329bc117caafd95

* chore: run the post processor

* chore(deps): update dependency @types/node to v14 (#453)

[![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@types/node](https://togithub.com/DefinitelyTyped/DefinitelyTyped) | [`^12.7.2` -> `^14.0.0`](https://renovatebot.com/diffs/npm/@types%2fnode/12.20.13/14.17.0) | [![age](https://badges.renovateapi.com/packages/npm/@types%2fnode/14.17.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/@types%2fnode/14.17.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/@types%2fnode/14.17.0/compatibility-slim/12.20.13)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/@types%2fnode/14.17.0/confidence-slim/12.20.13)](https://docs.renovatebot.com/merge-confidence/) |

---

### Configuration

📅 **Schedule**: "after 9am and before 3pm" (UTC).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻️ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box.

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/gcp-metadata).

* chore(deps): update dependency googleapis to v74 (#454)

* refactor: use functions module for tests (#456)

* chore: release 4.3.0 (#462)

:robot: I have created a release \*beep\* \*boop\*
---
## [4.3.0](https://www.github.com/googleapis/gcp-metadata/compare/v4.2.1...v4.3.0) (2021-06-10…
codyoss pushed a commit that referenced this pull request Mar 9, 2026
* chore(docs): update code of conduct of synthtool and templates

Source-Author: Christopher Wilcox <crwilcox@google.com>
Source-Date: Thu Oct 22 14:22:01 2020 -0700
Source-Repo: googleapis/synthtool
Source-Sha: 5f6ef0ec5501d33c4667885b37a7685a30d41a76
Source-Link: googleapis/synthtool@5f6ef0e

* build(node): update testing matrix

Source-Author: Benjamin E. Coe <bencoe@google.com>
Source-Date: Thu Oct 22 22:32:52 2020 -0500
Source-Repo: googleapis/synthtool
Source-Sha: b7413d38b763827c72c0360f0a3d286c84656eeb
Source-Link: googleapis/synthtool@b7413d3

* build(node): don't run prepare during smoke test

Source-Author: Benjamin E. Coe <bencoe@google.com>
Source-Date: Fri Oct 23 17:27:51 2020 -0400
Source-Repo: googleapis/synthtool
Source-Sha: a783321fd55f010709294455584a553f4b24b944
Source-Link: googleapis/synthtool@a783321

* build(node): cleanup production deps before installing dev/production

Source-Author: Benjamin E. Coe <bencoe@google.com>
Source-Date: Mon Oct 26 10:37:03 2020 -0400
Source-Repo: googleapis/synthtool
Source-Sha: 89c849ba5013e45e8fb688b138f33c2ec6083dc5
Source-Link: googleapis/synthtool@89c849b
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants