Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
bc5b01f
chore: add original unmodified storage samples as baseline
angelcaamal Mar 12, 2026
7fafefa
refactor(buckets): standardize error handling for buckets.test.js
angelcaamal Mar 12, 2026
9bd5aed
refactor(acl): standardize error handling and address PR feedback in …
angelcaamal Mar 13, 2026
af43faa
refactor(lifecycle): standardize error handling in bucket lifecycle s…
angelcaamal Mar 13, 2026
1439c81
refactor(bucket-lock): standardize error handling and remove dead cod…
angelcaamal Mar 13, 2026
969c66b
refactor(encryption): standardize error handling in encryption samples
angelcaamal Mar 13, 2026
d3694dc
refactor(files): standardize error handling and remove dead code in f…
angelcaamal Mar 13, 2026
3df66e6
refactor(hmac-keys): standardize error handling and fix region tags i…
angelcaamal Mar 13, 2026
2b99c0a
refactor(iam): standardize error handling in IAM samples
angelcaamal Mar 13, 2026
f220b4d
refactor(notifications): standardize error handling, fix metadata des…
angelcaamal Mar 13, 2026
1feea69
refactor(storage, quickstart, requesterpays): standardize error handl…
angelcaamal Mar 13, 2026
ef43c69
refactor(storage): remove unhandledRejection listeners for consistent…
angelcaamal Mar 17, 2026
708da54
docs(storage): update repo URLs for monorepo migration and fix usage …
angelcaamal Mar 17, 2026
dc15da1
fix: correct retention date calculation in setObjectRetentionPolicy s…
angelcaamal Mar 18, 2026
fcfbbb3
fix(requesterpays): update samples related to the requesterpays test …
angelcaamal Mar 18, 2026
397c0bb
refactor(transfer-manager): standardize error handling
angelcaamal Mar 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,472 changes: 2,472 additions & 0 deletions storage/README.md

Large diffs are not rendered by default.

109 changes: 109 additions & 0 deletions storage/addBucketConditionalBinding.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

/**
* This application demonstrates how to perform basic operations on bucket and
* file Access Control Lists with the Google Cloud Storage API.
*
* For more information, see the README.md under /storage and the documentation
* at https://cloud.google.com/storage/docs.
*/

function main(
bucketName = 'my-bucket',
roleName = 'roles/storage.objectViewer',
title = 'match-prefix',
description = 'Applies to objects matching a prefix',
expression = 'resource.name.startsWith("projects/_/buckets/bucket-name/objects/prefix-a-")',
members = 'user:test@example.com'
) {
members = members.split(',');
// [START storage_add_bucket_conditional_iam_binding]
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The role to grant
// const roleName = 'roles/storage.objectViewer';

// The members to grant the new role to
// const members = [
// 'user:jdoe@example.com',
// 'group:admins@example.com',
// ];

// Create a condition
// const title = 'Title';
// const description = 'Description';
// const expression = 'resource.name.startsWith(\"projects/_/buckets/bucket-name/objects/prefix-a-\")';

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function addBucketConditionalBinding() {
try {
// Get a reference to a Google Cloud Storage bucket
const bucket = storage.bucket(bucketName);

// Gets and updates the bucket's IAM policy
const [policy] = await bucket.iam.getPolicy({requestedPolicyVersion: 3});

// Set the policy's version to 3 to use condition in bindings.
policy.version = 3;

// Adds the new roles to the bucket's IAM policy
policy.bindings.push({
role: roleName,
members: members,
condition: {
title: title,
description: description,
expression: expression,
},
});

// Updates the bucket's IAM policy
await bucket.iam.setPolicy(policy);

console.log(
`Added the following member(s) with role ${roleName} to ${bucketName}:`
);

members.forEach(member => {
console.log(` ${member}`);
});

console.log('with condition:');
console.log(` Title: ${title}`);
console.log(` Description: ${description}`);
console.log(` Expression: ${expression}`);
} catch (error) {
console.error(
'Error executing add bucket conditional binding:',
error.message || error
);
}
}

addBucketConditionalBinding();
// [END storage_add_bucket_conditional_iam_binding]
}
main(...process.argv.slice(2));
64 changes: 64 additions & 0 deletions storage/addBucketDefaultOwnerAcl.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

/**
* This application demonstrates how to perform basic operations on bucket and
* file Access Control Lists with the Google Cloud Storage API.
*
* For more information, see the README.md under /storage and the documentation
* at https://cloud.google.com/storage/docs.
*/

function main(bucketName = 'my-bucket', userEmail = 'jdobry@google.com') {
// [START storage_add_bucket_default_owner]
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The email address of the user to add
// const userEmail = 'user-email-to-add';

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function addBucketDefaultOwner() {
try {
// Makes the user an owner in the default ACL of the bucket. You can use
// addAllUsers(), addDomain(), addProject(), addGroup(), and
// addAllAuthenticatedUsers() to grant access to different types of entities.
// You can also use "readers" and "writers" to grant different roles.
await storage.bucket(bucketName).acl.default.owners.addUser(userEmail);

console.log(
`Added user ${userEmail} as an owner on bucket ${bucketName}.`
);
} catch (error) {
console.error(
'Error executing add bucket default owner ACL:',
error.message || error
);
}
}

addBucketDefaultOwner();
// [END storage_add_bucket_default_owner]
}
main(...process.argv.slice(2));
82 changes: 82 additions & 0 deletions storage/addBucketIamMember.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

function main(
bucketName = 'my-bucket',
roleName = 'roles/storage.objectViewer',
members = 'user:test@example.com'
) {
//including this logic so as to not use yargs
members = members.split(',');
// [START storage_add_bucket_iam_member]
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The role to grant
// const roleName = 'roles/storage.objectViewer';

// The members to grant the new role to
// const members = [
// 'user:jdoe@example.com',
// 'group:admins@example.com',
// ];

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function addBucketIamMember() {
try {
// Get a reference to a Google Cloud Storage bucket
const bucket = storage.bucket(bucketName);

// For more information please read:
// https://cloud.google.com/storage/docs/access-control/iam
const [policy] = await bucket.iam.getPolicy({requestedPolicyVersion: 3});

// Adds the new roles to the bucket's IAM policy
policy.bindings.push({
role: roleName,
members: members,
});

// Updates the bucket's IAM policy
await bucket.iam.setPolicy(policy);

console.log(
`Added the following member(s) with role ${roleName} to ${bucketName}:`
);

members.forEach(member => {
console.log(` ${member}`);
});
} catch (error) {
console.error(
'Error executing add bucket iam member:',
error.message || error
);
}
}

addBucketIamMember();
// [END storage_add_bucket_iam_member]
}
main(...process.argv.slice(2));
66 changes: 66 additions & 0 deletions storage/addBucketLabel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

// sample-metadata:
// title: Storage Add Bucket Label.
// description: Adds bucket label.
// usage: node addBucketLabel.js <BUCKET_NAME> <LABEL_KEY> <LABEL_VALUE>

function main(
bucketName = 'my-bucket',
labelKey = 'labelone',
labelValue = 'labelonevalue'
) {
// [START storage_add_bucket_label]
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The key of the label to add
// const labelKey = 'label-key-to-add';

// The value of the label to add
// const labelValue = 'label-value-to-add';

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

const labels = {
[labelKey]: labelValue,
};

async function addBucketLabel() {
try {
await storage.bucket(bucketName).setMetadata({labels});
console.log(`Added label to bucket ${bucketName}`);
} catch (error) {
console.error(
'Error executing add bucket label:',
error.message || error
);
}
}

addBucketLabel();
// [END storage_add_bucket_label]
}

main(...process.argv.slice(2));
64 changes: 64 additions & 0 deletions storage/addBucketOwnerAcl.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

/**
* This application demonstrates how to perform basic operations on bucket and
* file Access Control Lists with the Google Cloud Storage API.
*
* For more information, see the README.md under /storage and the documentation
* at https://cloud.google.com/storage/docs.
*/

function main(bucketName = 'my-bucket', userEmail = 'jdobry@google.com') {
// [START storage_add_bucket_owner]
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The email address of the user to add
// const userEmail = 'user-email-to-add';

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function addBucketOwner() {
try {
// Makes the user an owner of the bucket. You can use addAllUsers(),
// addDomain(), addProject(), addGroup(), and addAllAuthenticatedUsers()
// to grant access to different types of entities. You can also use "readers"
// and "writers" to grant different roles.
await storage.bucket(bucketName).acl.owners.addUser(userEmail);

console.log(
`Added user ${userEmail} as an owner on bucket ${bucketName}.`
);
} catch (error) {
console.error(
'Error executing add bucket owner ACL:',
error.message || error
);
}
}

addBucketOwner();
// [END storage_add_bucket_owner]
}
main(...process.argv.slice(2));
Loading
Loading