chore(deps): bump cloud.google.com/go/storage from 1.30.1 to 1.31.0 (#2611)
Bumps [cloud.google.com/go/storage](https://github.com/googleapis/google-cloud-go) from 1.30.1 to 1.31.0. - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/pubsub/v1.30.1...pubsub/v1.31.0) --- updated-dependencies: - dependency-name: cloud.google.com/go/storage dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit is contained in:
parent
9a30501c44
commit
27300967a0
8
go.mod
8
go.mod
|
|
@ -3,7 +3,7 @@ module github.com/GoogleContainerTools/kaniko
|
||||||
go 1.19
|
go 1.19
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cloud.google.com/go/storage v1.30.1
|
cloud.google.com/go/storage v1.31.0
|
||||||
github.com/Azure/azure-storage-blob-go v0.14.0
|
github.com/Azure/azure-storage-blob-go v0.14.0
|
||||||
// This docker-credential-gcr dependency version is actually the same as v2.1.8.
|
// This docker-credential-gcr dependency version is actually the same as v2.1.8.
|
||||||
// See https://github.com/GoogleCloudPlatform/docker-credential-gcr/issues/128
|
// See https://github.com/GoogleCloudPlatform/docker-credential-gcr/issues/128
|
||||||
|
|
@ -48,10 +48,10 @@ require (
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cloud.google.com/go v0.110.0 // indirect
|
cloud.google.com/go v0.110.2 // indirect
|
||||||
cloud.google.com/go/compute v1.19.3 // indirect
|
cloud.google.com/go/compute v1.19.3 // indirect
|
||||||
cloud.google.com/go/compute/metadata v0.2.3 // indirect
|
cloud.google.com/go/compute/metadata v0.2.3 // indirect
|
||||||
cloud.google.com/go/iam v0.13.0 // indirect
|
cloud.google.com/go/iam v1.1.0 // indirect
|
||||||
github.com/Azure/azure-pipeline-go v0.2.3 // indirect
|
github.com/Azure/azure-pipeline-go v0.2.3 // indirect
|
||||||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
|
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
|
||||||
github.com/Azure/go-autorest v14.2.0+incompatible // indirect
|
github.com/Azure/go-autorest v14.2.0+incompatible // indirect
|
||||||
|
|
@ -106,7 +106,7 @@ require (
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
github.com/golang/protobuf v1.5.3 // indirect
|
github.com/golang/protobuf v1.5.3 // indirect
|
||||||
github.com/google/uuid v1.3.0 // indirect
|
github.com/google/uuid v1.3.0 // indirect
|
||||||
github.com/googleapis/gax-go/v2 v2.10.0 // indirect
|
github.com/googleapis/gax-go/v2 v2.11.0 // indirect
|
||||||
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
||||||
github.com/hashicorp/go-memdb v1.3.2 // indirect
|
github.com/hashicorp/go-memdb v1.3.2 // indirect
|
||||||
github.com/hashicorp/golang-lru v0.5.4 // indirect
|
github.com/hashicorp/golang-lru v0.5.4 // indirect
|
||||||
|
|
|
||||||
16
go.sum
16
go.sum
|
|
@ -20,8 +20,8 @@ cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPT
|
||||||
cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
|
cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
|
||||||
cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
|
cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
|
||||||
cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
|
cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
|
||||||
cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys=
|
cloud.google.com/go v0.110.2 h1:sdFPBr6xG9/wkBbfhmUz/JmZC7X6LavQgcrVINrKiVA=
|
||||||
cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY=
|
cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw=
|
||||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
||||||
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
|
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
|
||||||
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
|
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
|
||||||
|
|
@ -35,8 +35,8 @@ cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2Aawl
|
||||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||||
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
||||||
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
|
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
|
||||||
cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k=
|
cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94=
|
||||||
cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0=
|
cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk=
|
||||||
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
||||||
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
|
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
|
||||||
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
|
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
|
||||||
|
|
@ -47,8 +47,8 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl
|
||||||
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
|
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
|
||||||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
||||||
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
|
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
|
||||||
cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM=
|
cloud.google.com/go/storage v1.31.0 h1:+S3LjjEN2zZ+L5hOwj4+1OkGCsLVe0NzpXKQ1pSdTCI=
|
||||||
cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E=
|
cloud.google.com/go/storage v1.31.0/go.mod h1:81ams1PrhW16L4kF7qg+4mTq7SRs5HsbDTM0bWvrwJ0=
|
||||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||||
github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U=
|
github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U=
|
||||||
github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k=
|
github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k=
|
||||||
|
|
@ -387,8 +387,8 @@ github.com/googleapis/enterprise-certificate-proxy v0.2.4 h1:uGy6JWR/uMIILU8wbf+
|
||||||
github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=
|
github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
||||||
github.com/googleapis/gax-go/v2 v2.10.0 h1:ebSgKfMxynOdxw8QQuFOKMgomqeLGPqNLQox2bo42zg=
|
github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4=
|
||||||
github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw=
|
github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI=
|
||||||
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
|
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,27 @@
|
||||||
# Changes
|
# Changes
|
||||||
|
|
||||||
|
|
||||||
|
## [1.1.0](https://github.com/googleapis/google-cloud-go/compare/iam/v1.0.1...iam/v1.1.0) (2023-05-30)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **iam:** Update all direct dependencies ([b340d03](https://github.com/googleapis/google-cloud-go/commit/b340d030f2b52a4ce48846ce63984b28583abde6))
|
||||||
|
|
||||||
|
## [1.0.1](https://github.com/googleapis/google-cloud-go/compare/iam/v1.0.0...iam/v1.0.1) (2023-05-08)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **iam:** Update grpc to v1.55.0 ([1147ce0](https://github.com/googleapis/google-cloud-go/commit/1147ce02a990276ca4f8ab7a1ab65c14da4450ef))
|
||||||
|
|
||||||
|
## [1.0.0](https://github.com/googleapis/google-cloud-go/compare/iam/v0.13.0...iam/v1.0.0) (2023-04-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **iam:** Promote to GA ([#7627](https://github.com/googleapis/google-cloud-go/issues/7627)) ([b351906](https://github.com/googleapis/google-cloud-go/commit/b351906a10e17a02d7f7e2551bc1585fd9dc3742))
|
||||||
|
|
||||||
## [0.13.0](https://github.com/googleapis/google-cloud-go/compare/iam/v0.12.0...iam/v0.13.0) (2023-03-15)
|
## [0.13.0](https://github.com/googleapis/google-cloud-go/compare/iam/v0.12.0...iam/v0.13.0) (2023-03-15)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,8 @@
|
||||||
|
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-go v1.26.0
|
// protoc-gen-go v1.30.0
|
||||||
// protoc v3.21.9
|
// protoc v4.23.1
|
||||||
// source: google/iam/v1/iam_policy.proto
|
// source: google/iam/v1/iam_policy.proto
|
||||||
|
|
||||||
package iampb
|
package iampb
|
||||||
|
|
@ -342,37 +342,37 @@ var file_google_iam_v1_iam_policy_proto_rawDesc = []byte{
|
||||||
0x53, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75,
|
0x53, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75,
|
||||||
0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d,
|
0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d,
|
||||||
0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93,
|
0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93,
|
||||||
0x02, 0x23, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
|
0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f,
|
||||||
0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x73, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69,
|
0x75, 0x72, 0x63, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x73, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50,
|
||||||
0x63, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x74, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50,
|
0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x74, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50,
|
||||||
0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69,
|
0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69,
|
||||||
0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69,
|
0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69,
|
||||||
0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
|
0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
|
||||||
0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79,
|
0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79,
|
||||||
0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x72,
|
0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x76, 0x31,
|
||||||
0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x67, 0x65, 0x74, 0x49,
|
0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x67,
|
||||||
0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x9a, 0x01, 0x0a, 0x12,
|
0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x9a, 0x01, 0x0a, 0x12,
|
||||||
0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f,
|
0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f,
|
||||||
0x6e, 0x73, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e,
|
0x6e, 0x73, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e,
|
||||||
0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73,
|
0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73,
|
||||||
0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x67,
|
0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x67,
|
||||||
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73,
|
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73,
|
||||||
0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52,
|
0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52,
|
||||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22,
|
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a,
|
||||||
0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3d, 0x2a,
|
0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
|
||||||
0x2a, 0x7d, 0x3a, 0x74, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73,
|
0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x74, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72,
|
||||||
0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x01, 0x2a, 0x1a, 0x1e, 0xca, 0x41, 0x1b, 0x69, 0x61, 0x6d,
|
0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1e, 0xca, 0x41, 0x1b, 0x69, 0x61, 0x6d,
|
||||||
0x2d, 0x6d, 0x65, 0x74, 0x61, 0x2d, 0x61, 0x70, 0x69, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
|
0x2d, 0x6d, 0x65, 0x74, 0x61, 0x2d, 0x61, 0x70, 0x69, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
|
||||||
0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x42, 0x86, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d,
|
0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x42, 0x7f, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e,
|
||||||
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x0e,
|
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x49,
|
||||||
0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
|
0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a,
|
||||||
0x5a, 0x30, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e,
|
0x29, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f,
|
||||||
0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f,
|
0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x69,
|
||||||
0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x69,
|
0x61, 0x6d, 0x70, 0x62, 0x3b, 0x69, 0x61, 0x6d, 0x70, 0x62, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13,
|
||||||
0x61, 0x6d, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43,
|
0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d,
|
||||||
0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f,
|
0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f,
|
||||||
0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56,
|
0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,8 @@
|
||||||
|
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-go v1.26.0
|
// protoc-gen-go v1.30.0
|
||||||
// protoc v3.21.9
|
// protoc v4.23.1
|
||||||
// source: google/iam/v1/options.proto
|
// source: google/iam/v1/options.proto
|
||||||
|
|
||||||
package iampb
|
package iampb
|
||||||
|
|
@ -111,16 +111,16 @@ var file_google_iam_v1_options_proto_rawDesc = []byte{
|
||||||
0x12, 0x38, 0x0a, 0x18, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x6f,
|
0x12, 0x38, 0x0a, 0x18, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x6f,
|
||||||
0x6c, 0x69, 0x63, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
|
0x6c, 0x69, 0x63, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
|
||||||
0x28, 0x05, 0x52, 0x16, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x6c,
|
0x28, 0x05, 0x52, 0x16, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x6c,
|
||||||
0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x84, 0x01, 0x0a, 0x11, 0x63,
|
0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x7d, 0x0a, 0x11, 0x63, 0x6f,
|
||||||
0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31,
|
0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42,
|
||||||
0x42, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
|
0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a,
|
||||||
0x5a, 0x30, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e,
|
0x29, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f,
|
||||||
0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f,
|
0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x69,
|
||||||
0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x69,
|
0x61, 0x6d, 0x70, 0x62, 0x3b, 0x69, 0x61, 0x6d, 0x70, 0x62, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13,
|
||||||
0x61, 0x6d, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43,
|
0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d,
|
||||||
0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f,
|
0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f,
|
||||||
0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56,
|
0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,8 @@
|
||||||
|
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-go v1.26.0
|
// protoc-gen-go v1.30.0
|
||||||
// protoc v3.21.9
|
// protoc v4.23.1
|
||||||
// source: google/iam/v1/policy.proto
|
// source: google/iam/v1/policy.proto
|
||||||
|
|
||||||
package iampb
|
package iampb
|
||||||
|
|
@ -214,7 +214,8 @@ func (AuditConfigDelta_Action) EnumDescriptor() ([]byte, []int) {
|
||||||
// only if the expression evaluates to `true`. A condition can add constraints
|
// only if the expression evaluates to `true`. A condition can add constraints
|
||||||
// based on attributes of the request, the resource, or both. To learn which
|
// based on attributes of the request, the resource, or both. To learn which
|
||||||
// resources support conditions in their IAM policies, see the
|
// resources support conditions in their IAM policies, see the
|
||||||
// [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
|
// [IAM
|
||||||
|
// documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
|
||||||
//
|
//
|
||||||
// **JSON example:**
|
// **JSON example:**
|
||||||
//
|
//
|
||||||
|
|
@ -237,7 +238,8 @@ func (AuditConfigDelta_Action) EnumDescriptor() ([]byte, []int) {
|
||||||
// "condition": {
|
// "condition": {
|
||||||
// "title": "expirable access",
|
// "title": "expirable access",
|
||||||
// "description": "Does not grant access after Sep 2020",
|
// "description": "Does not grant access after Sep 2020",
|
||||||
// "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')",
|
// "expression": "request.time <
|
||||||
|
// timestamp('2020-10-01T00:00:00.000Z')",
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// ],
|
// ],
|
||||||
|
|
@ -279,10 +281,10 @@ type Policy struct {
|
||||||
// Any operation that affects conditional role bindings must specify version
|
// Any operation that affects conditional role bindings must specify version
|
||||||
// `3`. This requirement applies to the following operations:
|
// `3`. This requirement applies to the following operations:
|
||||||
//
|
//
|
||||||
// - Getting a policy that includes a conditional role binding
|
// * Getting a policy that includes a conditional role binding
|
||||||
// - Adding a conditional role binding to a policy
|
// * Adding a conditional role binding to a policy
|
||||||
// - Changing a conditional role binding in a policy
|
// * Changing a conditional role binding in a policy
|
||||||
// - Removing any role binding, with or without a condition, from a policy
|
// * Removing any role binding, with or without a condition, from a policy
|
||||||
// that includes conditions
|
// that includes conditions
|
||||||
//
|
//
|
||||||
// **Important:** If you use IAM Conditions, you must include the `etag` field
|
// **Important:** If you use IAM Conditions, you must include the `etag` field
|
||||||
|
|
@ -294,7 +296,8 @@ type Policy struct {
|
||||||
// specify any valid version or leave the field unset.
|
// specify any valid version or leave the field unset.
|
||||||
//
|
//
|
||||||
// To learn which resources support conditions in their IAM policies, see the
|
// To learn which resources support conditions in their IAM policies, see the
|
||||||
// [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
|
// [IAM
|
||||||
|
// documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
|
||||||
Version int32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"`
|
Version int32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"`
|
||||||
// Associates a list of `members`, or principals, with a `role`. Optionally,
|
// Associates a list of `members`, or principals, with a `role`. Optionally,
|
||||||
// may specify a `condition` that determines how and when the `bindings` are
|
// may specify a `condition` that determines how and when the `bindings` are
|
||||||
|
|
@ -396,28 +399,29 @@ type Binding struct {
|
||||||
// Specifies the principals requesting access for a Cloud Platform resource.
|
// Specifies the principals requesting access for a Cloud Platform resource.
|
||||||
// `members` can have the following values:
|
// `members` can have the following values:
|
||||||
//
|
//
|
||||||
// - `allUsers`: A special identifier that represents anyone who is
|
// * `allUsers`: A special identifier that represents anyone who is
|
||||||
// on the internet; with or without a Google account.
|
// on the internet; with or without a Google account.
|
||||||
//
|
//
|
||||||
// - `allAuthenticatedUsers`: A special identifier that represents anyone
|
// * `allAuthenticatedUsers`: A special identifier that represents anyone
|
||||||
// who is authenticated with a Google account or a service account.
|
// who is authenticated with a Google account or a service account.
|
||||||
//
|
//
|
||||||
// - `user:{emailid}`: An email address that represents a specific Google
|
// * `user:{emailid}`: An email address that represents a specific Google
|
||||||
// account. For example, `alice@example.com` .
|
// account. For example, `alice@example.com` .
|
||||||
//
|
//
|
||||||
// - `serviceAccount:{emailid}`: An email address that represents a service
|
//
|
||||||
|
// * `serviceAccount:{emailid}`: An email address that represents a service
|
||||||
// account. For example, `my-other-app@appspot.gserviceaccount.com`.
|
// account. For example, `my-other-app@appspot.gserviceaccount.com`.
|
||||||
//
|
//
|
||||||
// - `group:{emailid}`: An email address that represents a Google group.
|
// * `group:{emailid}`: An email address that represents a Google group.
|
||||||
// For example, `admins@example.com`.
|
// For example, `admins@example.com`.
|
||||||
//
|
//
|
||||||
// - `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique
|
// * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique
|
||||||
// identifier) representing a user that has been recently deleted. For
|
// identifier) representing a user that has been recently deleted. For
|
||||||
// example, `alice@example.com?uid=123456789012345678901`. If the user is
|
// example, `alice@example.com?uid=123456789012345678901`. If the user is
|
||||||
// recovered, this value reverts to `user:{emailid}` and the recovered user
|
// recovered, this value reverts to `user:{emailid}` and the recovered user
|
||||||
// retains the role in the binding.
|
// retains the role in the binding.
|
||||||
//
|
//
|
||||||
// - `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus
|
// * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus
|
||||||
// unique identifier) representing a service account that has been recently
|
// unique identifier) representing a service account that has been recently
|
||||||
// deleted. For example,
|
// deleted. For example,
|
||||||
// `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`.
|
// `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`.
|
||||||
|
|
@ -425,14 +429,17 @@ type Binding struct {
|
||||||
// `serviceAccount:{emailid}` and the undeleted service account retains the
|
// `serviceAccount:{emailid}` and the undeleted service account retains the
|
||||||
// role in the binding.
|
// role in the binding.
|
||||||
//
|
//
|
||||||
// - `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique
|
// * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique
|
||||||
// identifier) representing a Google group that has been recently
|
// identifier) representing a Google group that has been recently
|
||||||
// deleted. For example, `admins@example.com?uid=123456789012345678901`. If
|
// deleted. For example, `admins@example.com?uid=123456789012345678901`. If
|
||||||
// the group is recovered, this value reverts to `group:{emailid}` and the
|
// the group is recovered, this value reverts to `group:{emailid}` and the
|
||||||
// recovered group retains the role in the binding.
|
// recovered group retains the role in the binding.
|
||||||
//
|
//
|
||||||
// - `domain:{domain}`: The G Suite domain (primary) that represents all the
|
//
|
||||||
|
// * `domain:{domain}`: The G Suite domain (primary) that represents all the
|
||||||
// users of that domain. For example, `google.com` or `example.com`.
|
// users of that domain. For example, `google.com` or `example.com`.
|
||||||
|
//
|
||||||
|
//
|
||||||
Members []string `protobuf:"bytes,2,rep,name=members,proto3" json:"members,omitempty"`
|
Members []string `protobuf:"bytes,2,rep,name=members,proto3" json:"members,omitempty"`
|
||||||
// The condition that is associated with this binding.
|
// The condition that is associated with this binding.
|
||||||
//
|
//
|
||||||
|
|
@ -640,7 +647,8 @@ type AuditLogConfig struct {
|
||||||
LogType AuditLogConfig_LogType `protobuf:"varint,1,opt,name=log_type,json=logType,proto3,enum=google.iam.v1.AuditLogConfig_LogType" json:"log_type,omitempty"`
|
LogType AuditLogConfig_LogType `protobuf:"varint,1,opt,name=log_type,json=logType,proto3,enum=google.iam.v1.AuditLogConfig_LogType" json:"log_type,omitempty"`
|
||||||
// Specifies the identities that do not cause logging for this type of
|
// Specifies the identities that do not cause logging for this type of
|
||||||
// permission.
|
// permission.
|
||||||
// Follows the same format of [Binding.members][google.iam.v1.Binding.members].
|
// Follows the same format of
|
||||||
|
// [Binding.members][google.iam.v1.Binding.members].
|
||||||
ExemptedMembers []string `protobuf:"bytes,2,rep,name=exempted_members,json=exemptedMembers,proto3" json:"exempted_members,omitempty"`
|
ExemptedMembers []string `protobuf:"bytes,2,rep,name=exempted_members,json=exemptedMembers,proto3" json:"exempted_members,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -999,16 +1007,15 @@ var file_google_iam_v1_policy_proto_rawDesc = []byte{
|
||||||
0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e,
|
0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e,
|
||||||
0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07,
|
0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07,
|
||||||
0x0a, 0x03, 0x41, 0x44, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4d, 0x4f, 0x56,
|
0x0a, 0x03, 0x41, 0x44, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4d, 0x4f, 0x56,
|
||||||
0x45, 0x10, 0x02, 0x42, 0x83, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
|
0x45, 0x10, 0x02, 0x42, 0x7c, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
||||||
0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x50, 0x6f, 0x6c, 0x69, 0x63,
|
0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79,
|
||||||
0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
|
0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x29, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67,
|
||||||
0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70,
|
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x61, 0x6d,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f,
|
0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x69, 0x61, 0x6d, 0x70, 0x62, 0x3b, 0x69, 0x61, 0x6d,
|
||||||
0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x69, 0x61, 0x6d, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13,
|
0x70, 0x62, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43,
|
||||||
0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d,
|
0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f,
|
||||||
0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f,
|
0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56,
|
||||||
0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
0x33,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -19,25 +19,26 @@ metadata required. For now, `.repo-metadata-full.json` includes everything.
|
||||||
|
|
||||||
## cloudbuild.yaml
|
## cloudbuild.yaml
|
||||||
|
|
||||||
To kick off a build locally run from the repo root:
|
The `cloudbuild.yaml` Cloud Build configuration currently supports:
|
||||||
|
|
||||||
|
* Building a docker container from the `internal/postprocessor/Dockerfile`.
|
||||||
|
|
||||||
|
The build can be run locally in the `google-cloud-go` root directory:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
gcloud builds submit --project=cloud-devrel-kokoro-resources --config=internal/cloudbuild.yaml
|
gcloud builds submit --project=cloud-devrel-kokoro-resources --config=internal/cloudbuild.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
|
See the [postprocessor/README](postprocessor/README.md) for instructions
|
||||||
|
regarding updating the post-processor docker container.
|
||||||
|
|
||||||
### Updating OwlBot SHA
|
### Updating OwlBot SHA
|
||||||
|
|
||||||
You may want to manually update the which version of the post processor will be
|
You may want to manually update the which version of the post-processor will be
|
||||||
used -- to do this you need to update the SHA in the OwlBot lock file. Start by
|
used -- to do this you need to update the SHA in the OwlBot lock file.
|
||||||
running the following commands:
|
|
||||||
|
|
||||||
```bash
|
See the [postprocessor/README](postprocessor/README.md) for detailed
|
||||||
docker pull gcr.io/cloud-devrel-public-resources/owlbot-go:latest
|
instructions.
|
||||||
docker inspect --format='{{index .RepoDigests 0}}' gcr.io/cloud-devrel-public-resources/owlbot-go:latest
|
|
||||||
```
|
|
||||||
|
|
||||||
This will give you a SHA. You can use this value to update the value in
|
|
||||||
`.github/.OwlBot.lock.yaml`.
|
|
||||||
|
|
||||||
*Note*: OwlBot will eventually open a pull request to update this value if it
|
*Note*: OwlBot will eventually open a pull request to update this value if it
|
||||||
discovers a new version of the container.
|
discovers a new version of the container.
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,35 @@
|
||||||
# Changes
|
# Changes
|
||||||
|
|
||||||
|
|
||||||
|
## [1.31.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.30.1...storage/v1.31.0) (2023-06-27)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **storage/internal:** Add ctype=CORD for ChecksummedData.content ([ca94e27](https://github.com/googleapis/google-cloud-go/commit/ca94e2724f9e2610b46aefd0a3b5ddc06102e91b))
|
||||||
|
* **storage:** Add support for MatchGlob ([#8097](https://github.com/googleapis/google-cloud-go/issues/8097)) ([9426a5a](https://github.com/googleapis/google-cloud-go/commit/9426a5a45d4c2fd07f84261f6d602680e79cdc48)), refs [#7727](https://github.com/googleapis/google-cloud-go/issues/7727) [#7728](https://github.com/googleapis/google-cloud-go/issues/7728)
|
||||||
|
* **storage:** Respect WithEndpoint for SignedURLs and PostPolicy ([#8113](https://github.com/googleapis/google-cloud-go/issues/8113)) ([f918f23](https://github.com/googleapis/google-cloud-go/commit/f918f23a3cda4fbc8d709e32b914ead8b735d664))
|
||||||
|
* **storage:** Update all direct dependencies ([b340d03](https://github.com/googleapis/google-cloud-go/commit/b340d030f2b52a4ce48846ce63984b28583abde6))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **storage:** Fix CreateBucket logic for gRPC ([#8165](https://github.com/googleapis/google-cloud-go/issues/8165)) ([8424e7e](https://github.com/googleapis/google-cloud-go/commit/8424e7e145a117c91006318fa924a8b2643c1c7e)), refs [#8162](https://github.com/googleapis/google-cloud-go/issues/8162)
|
||||||
|
* **storage:** Fix reads with "./" in object names [XML] ([#8017](https://github.com/googleapis/google-cloud-go/issues/8017)) ([6b7b21f](https://github.com/googleapis/google-cloud-go/commit/6b7b21f8a334b6ad3a25e1f66ae1265b4d1f0995))
|
||||||
|
* **storage:** Fix routing header for writes ([#8159](https://github.com/googleapis/google-cloud-go/issues/8159)) ([42a59f5](https://github.com/googleapis/google-cloud-go/commit/42a59f5a23ab9b4743ab032ad92304922c801d93)), refs [#8142](https://github.com/googleapis/google-cloud-go/issues/8142) [#8143](https://github.com/googleapis/google-cloud-go/issues/8143) [#8144](https://github.com/googleapis/google-cloud-go/issues/8144) [#8145](https://github.com/googleapis/google-cloud-go/issues/8145) [#8149](https://github.com/googleapis/google-cloud-go/issues/8149)
|
||||||
|
* **storage:** REST query UpdateMask bug ([df52820](https://github.com/googleapis/google-cloud-go/commit/df52820b0e7721954809a8aa8700b93c5662dc9b))
|
||||||
|
* **storage:** Update grpc to v1.55.0 ([1147ce0](https://github.com/googleapis/google-cloud-go/commit/1147ce02a990276ca4f8ab7a1ab65c14da4450ef))
|
||||||
|
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
* **storage/internal:** Clarifications about behavior of DeleteObject RPC ([3f1ed9c](https://github.com/googleapis/google-cloud-go/commit/3f1ed9c63fb115f47607a3ab478842fe5ba0df11))
|
||||||
|
* **storage/internal:** Clarified the behavior of supplying bucket.name field in CreateBucket to reflect actual implementation ([ebae64d](https://github.com/googleapis/google-cloud-go/commit/ebae64d53397ec5dfe851f098754eaa1f5df7cb1))
|
||||||
|
* **storage/internal:** Revert ChecksummedData message definition not to specify ctype=CORD, because it would be a breaking change. ([ef61e47](https://github.com/googleapis/google-cloud-go/commit/ef61e4799280a355b960da8ae240ceb2efbe71ac))
|
||||||
|
* **storage/internal:** Update routing annotations for CancelResumableWriteRequest and QueryWriteStatusRequest ([4900851](https://github.com/googleapis/google-cloud-go/commit/49008518e168fe6f7891b907d6fc14eecdef758c))
|
||||||
|
* **storage/internal:** Updated ChecksummedData message definition to specify ctype=CORD, and removed incorrect earlier attempt that set that annotation in the ReadObjectResponse message definition ([ef61e47](https://github.com/googleapis/google-cloud-go/commit/ef61e4799280a355b960da8ae240ceb2efbe71ac))
|
||||||
|
* **storage:** WithXMLReads should mention XML instead of JSON API ([#7881](https://github.com/googleapis/google-cloud-go/issues/7881)) ([36f56c8](https://github.com/googleapis/google-cloud-go/commit/36f56c80c456ca74ffc03df76844ce15980ced82))
|
||||||
|
|
||||||
## [1.30.1](https://github.com/googleapis/google-cloud-go/compare/storage/v1.30.0...storage/v1.30.1) (2023-03-21)
|
## [1.30.1](https://github.com/googleapis/google-cloud-go/compare/storage/v1.30.0...storage/v1.30.1) (2023-03-21)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"cloud.google.com/go/internal/trace"
|
"cloud.google.com/go/internal/trace"
|
||||||
storagepb "cloud.google.com/go/storage/internal/apiv2/stubs"
|
"cloud.google.com/go/storage/internal/apiv2/storagepb"
|
||||||
raw "google.golang.org/api/storage/v1"
|
raw "google.golang.org/api/storage/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ import (
|
||||||
"cloud.google.com/go/compute/metadata"
|
"cloud.google.com/go/compute/metadata"
|
||||||
"cloud.google.com/go/internal/optional"
|
"cloud.google.com/go/internal/optional"
|
||||||
"cloud.google.com/go/internal/trace"
|
"cloud.google.com/go/internal/trace"
|
||||||
storagepb "cloud.google.com/go/storage/internal/apiv2/stubs"
|
"cloud.google.com/go/storage/internal/apiv2/storagepb"
|
||||||
"google.golang.org/api/googleapi"
|
"google.golang.org/api/googleapi"
|
||||||
"google.golang.org/api/iamcredentials/v1"
|
"google.golang.org/api/iamcredentials/v1"
|
||||||
"google.golang.org/api/iterator"
|
"google.golang.org/api/iterator"
|
||||||
|
|
@ -173,12 +173,18 @@ func (b *BucketHandle) Update(ctx context.Context, uattrs BucketAttrsToUpdate) (
|
||||||
// [Overview of access control]: https://cloud.google.com/storage/docs/accesscontrol#signed_urls_query_string_authentication
|
// [Overview of access control]: https://cloud.google.com/storage/docs/accesscontrol#signed_urls_query_string_authentication
|
||||||
// [automatic detection of credentials]: https://pkg.go.dev/cloud.google.com/go/storage#hdr-Credential_requirements_for_signing
|
// [automatic detection of credentials]: https://pkg.go.dev/cloud.google.com/go/storage#hdr-Credential_requirements_for_signing
|
||||||
func (b *BucketHandle) SignedURL(object string, opts *SignedURLOptions) (string, error) {
|
func (b *BucketHandle) SignedURL(object string, opts *SignedURLOptions) (string, error) {
|
||||||
if opts.GoogleAccessID != "" && (opts.SignBytes != nil || len(opts.PrivateKey) > 0) {
|
|
||||||
return SignedURL(b.name, object, opts)
|
|
||||||
}
|
|
||||||
// Make a copy of opts so we don't modify the pointer parameter.
|
// Make a copy of opts so we don't modify the pointer parameter.
|
||||||
newopts := opts.clone()
|
newopts := opts.clone()
|
||||||
|
|
||||||
|
if newopts.Hostname == "" {
|
||||||
|
// Extract the correct host from the readhost set on the client
|
||||||
|
newopts.Hostname = b.c.xmlHost
|
||||||
|
}
|
||||||
|
|
||||||
|
if opts.GoogleAccessID != "" && (opts.SignBytes != nil || len(opts.PrivateKey) > 0) {
|
||||||
|
return SignedURL(b.name, object, newopts)
|
||||||
|
}
|
||||||
|
|
||||||
if newopts.GoogleAccessID == "" {
|
if newopts.GoogleAccessID == "" {
|
||||||
id, err := b.detectDefaultGoogleAccessID()
|
id, err := b.detectDefaultGoogleAccessID()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -215,12 +221,18 @@ func (b *BucketHandle) SignedURL(object string, opts *SignedURLOptions) (string,
|
||||||
//
|
//
|
||||||
// [automatic detection of credentials]: https://pkg.go.dev/cloud.google.com/go/storage#hdr-Credential_requirements_for_signing
|
// [automatic detection of credentials]: https://pkg.go.dev/cloud.google.com/go/storage#hdr-Credential_requirements_for_signing
|
||||||
func (b *BucketHandle) GenerateSignedPostPolicyV4(object string, opts *PostPolicyV4Options) (*PostPolicyV4, error) {
|
func (b *BucketHandle) GenerateSignedPostPolicyV4(object string, opts *PostPolicyV4Options) (*PostPolicyV4, error) {
|
||||||
if opts.GoogleAccessID != "" && (opts.SignRawBytes != nil || opts.SignBytes != nil || len(opts.PrivateKey) > 0) {
|
|
||||||
return GenerateSignedPostPolicyV4(b.name, object, opts)
|
|
||||||
}
|
|
||||||
// Make a copy of opts so we don't modify the pointer parameter.
|
// Make a copy of opts so we don't modify the pointer parameter.
|
||||||
newopts := opts.clone()
|
newopts := opts.clone()
|
||||||
|
|
||||||
|
if newopts.Hostname == "" {
|
||||||
|
// Extract the correct host from the readhost set on the client
|
||||||
|
newopts.Hostname = b.c.xmlHost
|
||||||
|
}
|
||||||
|
|
||||||
|
if opts.GoogleAccessID != "" && (opts.SignRawBytes != nil || opts.SignBytes != nil || len(opts.PrivateKey) > 0) {
|
||||||
|
return GenerateSignedPostPolicyV4(b.name, object, newopts)
|
||||||
|
}
|
||||||
|
|
||||||
if newopts.GoogleAccessID == "" {
|
if newopts.GoogleAccessID == "" {
|
||||||
id, err := b.detectDefaultGoogleAccessID()
|
id, err := b.detectDefaultGoogleAccessID()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -921,8 +933,6 @@ func (ua *BucketAttrsToUpdate) toProtoBucket() *storagepb.Bucket {
|
||||||
return &storagepb.Bucket{}
|
return &storagepb.Bucket{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(cathyo): Handle labels. Pending b/230510191.
|
|
||||||
|
|
||||||
var v *storagepb.Bucket_Versioning
|
var v *storagepb.Bucket_Versioning
|
||||||
if ua.VersioningEnabled != nil {
|
if ua.VersioningEnabled != nil {
|
||||||
v = &storagepb.Bucket_Versioning{Enabled: optional.ToBool(ua.VersioningEnabled)}
|
v = &storagepb.Bucket_Versioning{Enabled: optional.ToBool(ua.VersioningEnabled)}
|
||||||
|
|
@ -996,6 +1006,7 @@ func (ua *BucketAttrsToUpdate) toProtoBucket() *storagepb.Bucket {
|
||||||
IamConfig: bktIAM,
|
IamConfig: bktIAM,
|
||||||
Rpo: ua.RPO.String(),
|
Rpo: ua.RPO.String(),
|
||||||
Autoclass: ua.Autoclass.toProtoAutoclass(),
|
Autoclass: ua.Autoclass.toProtoAutoclass(),
|
||||||
|
Labels: ua.setLabels,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1264,7 +1275,9 @@ func (ua *BucketAttrsToUpdate) toRawBucket() *raw.Bucket {
|
||||||
}
|
}
|
||||||
|
|
||||||
// If returns a new BucketHandle that applies a set of preconditions.
|
// If returns a new BucketHandle that applies a set of preconditions.
|
||||||
// Preconditions already set on the BucketHandle are ignored.
|
// Preconditions already set on the BucketHandle are ignored. The supplied
|
||||||
|
// BucketConditions must have exactly one field set to a non-zero value;
|
||||||
|
// otherwise an error will be returned from any operation on the BucketHandle.
|
||||||
// Operations on the new handle will return an error if the preconditions are not
|
// Operations on the new handle will return an error if the preconditions are not
|
||||||
// satisfied. The only valid preconditions for buckets are MetagenerationMatch
|
// satisfied. The only valid preconditions for buckets are MetagenerationMatch
|
||||||
// and MetagenerationNotMatch.
|
// and MetagenerationNotMatch.
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,9 @@ import (
|
||||||
"cloud.google.com/go/iam/apiv1/iampb"
|
"cloud.google.com/go/iam/apiv1/iampb"
|
||||||
"cloud.google.com/go/internal/trace"
|
"cloud.google.com/go/internal/trace"
|
||||||
gapic "cloud.google.com/go/storage/internal/apiv2"
|
gapic "cloud.google.com/go/storage/internal/apiv2"
|
||||||
storagepb "cloud.google.com/go/storage/internal/apiv2/stubs"
|
"cloud.google.com/go/storage/internal/apiv2/storagepb"
|
||||||
"github.com/googleapis/gax-go/v2"
|
"github.com/googleapis/gax-go/v2"
|
||||||
|
"google.golang.org/api/googleapi"
|
||||||
"google.golang.org/api/iterator"
|
"google.golang.org/api/iterator"
|
||||||
"google.golang.org/api/option"
|
"google.golang.org/api/option"
|
||||||
"google.golang.org/api/option/internaloption"
|
"google.golang.org/api/option/internaloption"
|
||||||
|
|
@ -153,7 +154,7 @@ func (c *grpcStorageClient) GetServiceAccount(ctx context.Context, project strin
|
||||||
func (c *grpcStorageClient) CreateBucket(ctx context.Context, project, bucket string, attrs *BucketAttrs, opts ...storageOption) (*BucketAttrs, error) {
|
func (c *grpcStorageClient) CreateBucket(ctx context.Context, project, bucket string, attrs *BucketAttrs, opts ...storageOption) (*BucketAttrs, error) {
|
||||||
s := callSettings(c.settings, opts...)
|
s := callSettings(c.settings, opts...)
|
||||||
b := attrs.toProtoBucket()
|
b := attrs.toProtoBucket()
|
||||||
b.Name = bucket
|
b.Project = toProjectResource(project)
|
||||||
// If there is lifecycle information but no location, explicitly set
|
// If there is lifecycle information but no location, explicitly set
|
||||||
// the location. This is a GCS quirk/bug.
|
// the location. This is a GCS quirk/bug.
|
||||||
if b.GetLocation() == "" && b.GetLifecycle() != nil {
|
if b.GetLocation() == "" && b.GetLifecycle() != nil {
|
||||||
|
|
@ -161,9 +162,9 @@ func (c *grpcStorageClient) CreateBucket(ctx context.Context, project, bucket st
|
||||||
}
|
}
|
||||||
|
|
||||||
req := &storagepb.CreateBucketRequest{
|
req := &storagepb.CreateBucketRequest{
|
||||||
Parent: toProjectResource(project),
|
Parent: fmt.Sprintf("projects/%s", globalProjectAlias),
|
||||||
Bucket: b,
|
Bucket: b,
|
||||||
BucketId: b.GetName(),
|
BucketId: bucket,
|
||||||
}
|
}
|
||||||
if attrs != nil {
|
if attrs != nil {
|
||||||
req.PredefinedAcl = attrs.PredefinedACL
|
req.PredefinedAcl = attrs.PredefinedACL
|
||||||
|
|
@ -354,7 +355,16 @@ func (c *grpcStorageClient) UpdateBucket(ctx context.Context, bucket string, uat
|
||||||
if uattrs.Autoclass != nil {
|
if uattrs.Autoclass != nil {
|
||||||
fieldMask.Paths = append(fieldMask.Paths, "autoclass")
|
fieldMask.Paths = append(fieldMask.Paths, "autoclass")
|
||||||
}
|
}
|
||||||
// TODO(cathyo): Handle labels. Pending b/230510191.
|
|
||||||
|
for label := range uattrs.setLabels {
|
||||||
|
fieldMask.Paths = append(fieldMask.Paths, fmt.Sprintf("labels.%s", label))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete a label by not including it in Bucket.Labels but adding the key to the update mask.
|
||||||
|
for label := range uattrs.deleteLabels {
|
||||||
|
fieldMask.Paths = append(fieldMask.Paths, fmt.Sprintf("labels.%s", label))
|
||||||
|
}
|
||||||
|
|
||||||
req.UpdateMask = fieldMask
|
req.UpdateMask = fieldMask
|
||||||
|
|
||||||
var battrs *BucketAttrs
|
var battrs *BucketAttrs
|
||||||
|
|
@ -404,6 +414,11 @@ func (c *grpcStorageClient) ListObjects(ctx context.Context, bucket string, q *Q
|
||||||
}
|
}
|
||||||
gitr := c.raw.ListObjects(it.ctx, req, s.gax...)
|
gitr := c.raw.ListObjects(it.ctx, req, s.gax...)
|
||||||
fetch := func(pageSize int, pageToken string) (token string, err error) {
|
fetch := func(pageSize int, pageToken string) (token string, err error) {
|
||||||
|
// MatchGlob not yet supported for gRPC.
|
||||||
|
// TODO: add support when b/287306063 resolved.
|
||||||
|
if q != nil && q.MatchGlob != "" {
|
||||||
|
return "", status.Errorf(codes.Unimplemented, "MatchGlob is not supported for gRPC")
|
||||||
|
}
|
||||||
var objects []*storagepb.Object
|
var objects []*storagepb.Object
|
||||||
err = run(it.ctx, func() error {
|
err = run(it.ctx, func() error {
|
||||||
objects, token, err = gitr.InternalFetch(pageSize, pageToken)
|
objects, token, err = gitr.InternalFetch(pageSize, pageToken)
|
||||||
|
|
@ -540,7 +555,19 @@ func (c *grpcStorageClient) UpdateObject(ctx context.Context, bucket, object str
|
||||||
if uattrs.ACL != nil || len(uattrs.PredefinedACL) > 0 {
|
if uattrs.ACL != nil || len(uattrs.PredefinedACL) > 0 {
|
||||||
fieldMask.Paths = append(fieldMask.Paths, "acl")
|
fieldMask.Paths = append(fieldMask.Paths, "acl")
|
||||||
}
|
}
|
||||||
// TODO(cathyo): Handle metadata. Pending b/230510191.
|
|
||||||
|
if uattrs.Metadata != nil {
|
||||||
|
// We don't support deleting a specific metadata key; metadata is deleted
|
||||||
|
// as a whole if provided an empty map, so we do not use dot notation here
|
||||||
|
if len(uattrs.Metadata) == 0 {
|
||||||
|
fieldMask.Paths = append(fieldMask.Paths, "metadata")
|
||||||
|
} else {
|
||||||
|
// We can, however, use dot notation for adding keys
|
||||||
|
for key := range uattrs.Metadata {
|
||||||
|
fieldMask.Paths = append(fieldMask.Paths, fmt.Sprintf("metadata.%s", key))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
req.UpdateMask = fieldMask
|
req.UpdateMask = fieldMask
|
||||||
|
|
||||||
|
|
@ -885,15 +912,8 @@ func (c *grpcStorageClient) NewRangeReader(ctx context.Context, params *newRange
|
||||||
|
|
||||||
req.ReadOffset = params.offset + seen
|
req.ReadOffset = params.offset + seen
|
||||||
|
|
||||||
// A negative length means "read to the end of the object", but the
|
// Only set a ReadLimit if length is greater than zero, because <= 0 means
|
||||||
// read_limit field it corresponds to uses zero to mean the same thing. Thus
|
// to read it all.
|
||||||
// we coerce the length to 0 to read to the end of the object.
|
|
||||||
if params.length < 0 {
|
|
||||||
params.length = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only set a ReadLimit if length is greater than zero, because zero
|
|
||||||
// means read it all.
|
|
||||||
if params.length > 0 {
|
if params.length > 0 {
|
||||||
req.ReadLimit = params.length - seen
|
req.ReadLimit = params.length - seen
|
||||||
}
|
}
|
||||||
|
|
@ -963,6 +983,7 @@ func (c *grpcStorageClient) NewRangeReader(ctx context.Context, params *newRange
|
||||||
// client buffer for reading later.
|
// client buffer for reading later.
|
||||||
leftovers: msg.GetChecksummedData().GetContent(),
|
leftovers: msg.GetChecksummedData().GetContent(),
|
||||||
settings: s,
|
settings: s,
|
||||||
|
zeroRange: params.length == 0,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -974,8 +995,15 @@ func (c *grpcStorageClient) NewRangeReader(ctx context.Context, params *newRange
|
||||||
r.remain = size
|
r.remain = size
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For a zero-length request, explicitly close the stream and set remaining
|
||||||
|
// bytes to zero.
|
||||||
|
if params.length == 0 {
|
||||||
|
r.remain = 0
|
||||||
|
r.reader.Close()
|
||||||
|
}
|
||||||
|
|
||||||
// Only support checksums when reading an entire object, not a range.
|
// Only support checksums when reading an entire object, not a range.
|
||||||
if checksums := msg.GetObjectChecksums(); checksums != nil && checksums.Crc32C != nil && params.offset == 0 && params.length == 0 {
|
if checksums := msg.GetObjectChecksums(); checksums != nil && checksums.Crc32C != nil && params.offset == 0 && params.length < 0 {
|
||||||
r.wantCRC = checksums.GetCrc32C()
|
r.wantCRC = checksums.GetCrc32C()
|
||||||
r.checkCRC = true
|
r.checkCRC = true
|
||||||
}
|
}
|
||||||
|
|
@ -1036,11 +1064,13 @@ func (c *grpcStorageClient) OpenWriter(params *openWriterParams, opts ...storage
|
||||||
pr.CloseWithError(err)
|
pr.CloseWithError(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// At this point, the current buffer has been uploaded. Capture the
|
// At this point, the current buffer has been uploaded. For resumable
|
||||||
// committed offset here in case the upload was not finalized and
|
// uploads, capture the committed offset here in case the upload was not
|
||||||
// another chunk is to be uploaded.
|
// finalized and another chunk is to be uploaded.
|
||||||
|
if gw.upid != "" {
|
||||||
offset = off
|
offset = off
|
||||||
progress(offset)
|
progress(offset)
|
||||||
|
}
|
||||||
|
|
||||||
// When we are done reading data and the chunk has been finalized,
|
// When we are done reading data and the chunk has been finalized,
|
||||||
// we are done.
|
// we are done.
|
||||||
|
|
@ -1335,6 +1365,7 @@ type readStreamResponse struct {
|
||||||
|
|
||||||
type gRPCReader struct {
|
type gRPCReader struct {
|
||||||
seen, size int64
|
seen, size int64
|
||||||
|
zeroRange bool
|
||||||
stream storagepb.Storage_ReadObjectClient
|
stream storagepb.Storage_ReadObjectClient
|
||||||
reopen func(seen int64) (*readStreamResponse, context.CancelFunc, error)
|
reopen func(seen int64) (*readStreamResponse, context.CancelFunc, error)
|
||||||
leftovers []byte
|
leftovers []byte
|
||||||
|
|
@ -1344,7 +1375,12 @@ type gRPCReader struct {
|
||||||
|
|
||||||
// Read reads bytes into the user's buffer from an open gRPC stream.
|
// Read reads bytes into the user's buffer from an open gRPC stream.
|
||||||
func (r *gRPCReader) Read(p []byte) (int, error) {
|
func (r *gRPCReader) Read(p []byte) (int, error) {
|
||||||
// No stream to read from, either never initiliazed or Close was called.
|
// The entire object has been read by this reader, return EOF.
|
||||||
|
if r.size == r.seen || r.zeroRange {
|
||||||
|
return 0, io.EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
// No stream to read from, either never initialized or Close was called.
|
||||||
// Note: There is a potential concurrency issue if multiple routines are
|
// Note: There is a potential concurrency issue if multiple routines are
|
||||||
// using the same reader. One encounters an error and the stream is closed
|
// using the same reader. One encounters an error and the stream is closed
|
||||||
// and then reopened while the other routine attempts to read from it.
|
// and then reopened while the other routine attempts to read from it.
|
||||||
|
|
@ -1352,11 +1388,6 @@ func (r *gRPCReader) Read(p []byte) (int, error) {
|
||||||
return 0, fmt.Errorf("reader has been closed")
|
return 0, fmt.Errorf("reader has been closed")
|
||||||
}
|
}
|
||||||
|
|
||||||
// The entire object has been read by this reader, return EOF.
|
|
||||||
if r.size != 0 && r.size == r.seen {
|
|
||||||
return 0, io.EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
var n int
|
var n int
|
||||||
// Read leftovers and return what was available to conform to the Reader
|
// Read leftovers and return what was available to conform to the Reader
|
||||||
// interface: https://pkg.go.dev/io#Reader.
|
// interface: https://pkg.go.dev/io#Reader.
|
||||||
|
|
@ -1447,6 +1478,12 @@ func (r *gRPCReader) reopenStream() (*storagepb.ReadObjectResponse, error) {
|
||||||
|
|
||||||
func newGRPCWriter(c *grpcStorageClient, params *openWriterParams, r io.Reader) *gRPCWriter {
|
func newGRPCWriter(c *grpcStorageClient, params *openWriterParams, r io.Reader) *gRPCWriter {
|
||||||
size := params.chunkSize
|
size := params.chunkSize
|
||||||
|
|
||||||
|
// Round up chunksize to nearest 256KiB
|
||||||
|
if size%googleapi.MinUploadChunkSize != 0 {
|
||||||
|
size += googleapi.MinUploadChunkSize - (size % googleapi.MinUploadChunkSize)
|
||||||
|
}
|
||||||
|
|
||||||
if params.chunkSize == 0 {
|
if params.chunkSize == 0 {
|
||||||
// TODO: Should we actually use the minimum of 256 KB here when the user
|
// TODO: Should we actually use the minimum of 256 KB here when the user
|
||||||
// indicates they want minimal memory usage? We cannot do a zero-copy,
|
// indicates they want minimal memory usage? We cannot do a zero-copy,
|
||||||
|
|
@ -1578,7 +1615,7 @@ func (w *gRPCWriter) uploadBuffer(recvd int, start int64, doneReading bool) (*st
|
||||||
// The first message on the WriteObject stream must either be the
|
// The first message on the WriteObject stream must either be the
|
||||||
// Object or the Resumable Upload ID.
|
// Object or the Resumable Upload ID.
|
||||||
if first {
|
if first {
|
||||||
ctx := gapic.InsertMetadata(w.ctx, metadata.Pairs("x-goog-request-params", "bucket="+url.QueryEscape(w.bucket)))
|
ctx := gapic.InsertMetadata(w.ctx, metadata.Pairs("x-goog-request-params", fmt.Sprintf("bucket=projects/_/buckets/%s", url.QueryEscape(w.bucket))))
|
||||||
w.stream, err = w.c.raw.WriteObject(ctx)
|
w.stream, err = w.c.raw.WriteObject(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, false, err
|
return nil, 0, false, err
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
storagepb "cloud.google.com/go/storage/internal/apiv2/stubs"
|
"cloud.google.com/go/storage/internal/apiv2/storagepb"
|
||||||
"google.golang.org/api/iterator"
|
"google.golang.org/api/iterator"
|
||||||
raw "google.golang.org/api/storage/v1"
|
raw "google.golang.org/api/storage/v1"
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ import (
|
||||||
type httpStorageClient struct {
|
type httpStorageClient struct {
|
||||||
creds *google.Credentials
|
creds *google.Credentials
|
||||||
hc *http.Client
|
hc *http.Client
|
||||||
readHost string
|
xmlHost string
|
||||||
raw *raw.Service
|
raw *raw.Service
|
||||||
scheme string
|
scheme string
|
||||||
settings *settings
|
settings *settings
|
||||||
|
|
@ -123,7 +123,7 @@ func newHTTPStorageClient(ctx context.Context, opts ...storageOption) (storageCl
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("storage client: %w", err)
|
return nil, fmt.Errorf("storage client: %w", err)
|
||||||
}
|
}
|
||||||
// Update readHost and scheme with the chosen endpoint.
|
// Update xmlHost and scheme with the chosen endpoint.
|
||||||
u, err := url.Parse(ep)
|
u, err := url.Parse(ep)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("supplied endpoint %q is not valid: %w", ep, err)
|
return nil, fmt.Errorf("supplied endpoint %q is not valid: %w", ep, err)
|
||||||
|
|
@ -132,7 +132,7 @@ func newHTTPStorageClient(ctx context.Context, opts ...storageOption) (storageCl
|
||||||
return &httpStorageClient{
|
return &httpStorageClient{
|
||||||
creds: creds,
|
creds: creds,
|
||||||
hc: hc,
|
hc: hc,
|
||||||
readHost: u.Host,
|
xmlHost: u.Host,
|
||||||
raw: rawService,
|
raw: rawService,
|
||||||
scheme: u.Scheme,
|
scheme: u.Scheme,
|
||||||
settings: s,
|
settings: s,
|
||||||
|
|
@ -347,6 +347,7 @@ func (c *httpStorageClient) ListObjects(ctx context.Context, bucket string, q *Q
|
||||||
req.EndOffset(it.query.EndOffset)
|
req.EndOffset(it.query.EndOffset)
|
||||||
req.Versions(it.query.Versions)
|
req.Versions(it.query.Versions)
|
||||||
req.IncludeTrailingDelimiter(it.query.IncludeTrailingDelimiter)
|
req.IncludeTrailingDelimiter(it.query.IncludeTrailingDelimiter)
|
||||||
|
req.MatchGlob(it.query.MatchGlob)
|
||||||
if selection := it.query.toFieldSelection(); selection != "" {
|
if selection := it.query.toFieldSelection(); selection != "" {
|
||||||
req.Fields("nextPageToken", googleapi.Field(selection))
|
req.Fields("nextPageToken", googleapi.Field(selection))
|
||||||
}
|
}
|
||||||
|
|
@ -791,8 +792,9 @@ func (c *httpStorageClient) NewRangeReader(ctx context.Context, params *newRange
|
||||||
func (c *httpStorageClient) newRangeReaderXML(ctx context.Context, params *newRangeReaderParams, s *settings) (r *Reader, err error) {
|
func (c *httpStorageClient) newRangeReaderXML(ctx context.Context, params *newRangeReaderParams, s *settings) (r *Reader, err error) {
|
||||||
u := &url.URL{
|
u := &url.URL{
|
||||||
Scheme: c.scheme,
|
Scheme: c.scheme,
|
||||||
Host: c.readHost,
|
Host: c.xmlHost,
|
||||||
Path: fmt.Sprintf("/%s/%s", params.bucket, params.object),
|
Path: fmt.Sprintf("/%s/%s", params.bucket, params.object),
|
||||||
|
RawPath: fmt.Sprintf("/%s/%s", params.bucket, url.PathEscape(params.object)),
|
||||||
}
|
}
|
||||||
verb := "GET"
|
verb := "GET"
|
||||||
if params.length == 0 {
|
if params.length == 0 {
|
||||||
|
|
@ -1373,6 +1375,8 @@ func parseReadResponse(res *http.Response, params *newRangeReaderParams, reopen
|
||||||
|
|
||||||
remain := res.ContentLength
|
remain := res.ContentLength
|
||||||
body := res.Body
|
body := res.Body
|
||||||
|
// If the user requested zero bytes, explicitly close and remove the request
|
||||||
|
// body.
|
||||||
if params.length == 0 {
|
if params.length == 0 {
|
||||||
remain = 0
|
remain = 0
|
||||||
body.Close()
|
body.Close()
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,6 @@
|
||||||
//
|
//
|
||||||
// Lets you store and retrieve potentially-large, immutable data objects.
|
// Lets you store and retrieve potentially-large, immutable data objects.
|
||||||
//
|
//
|
||||||
// NOTE: This package is in alpha. It is not stable, and is likely to change.
|
|
||||||
//
|
|
||||||
// # General documentation
|
// # General documentation
|
||||||
//
|
//
|
||||||
// For information about setting deadlines, reusing contexts, and more
|
// For information about setting deadlines, reusing contexts, and more
|
||||||
|
|
@ -64,13 +62,18 @@
|
||||||
//
|
//
|
||||||
// req := &storagepb.DeleteBucketRequest{
|
// req := &storagepb.DeleteBucketRequest{
|
||||||
// // TODO: Fill request struct fields.
|
// // TODO: Fill request struct fields.
|
||||||
// // See https://pkg.go.dev/cloud.google.com/go/storage/internal/apiv2/stubs#DeleteBucketRequest.
|
// // See https://pkg.go.dev/cloud.google.com/go/storage/internal/apiv2/storagepb#DeleteBucketRequest.
|
||||||
// }
|
// }
|
||||||
// err = c.DeleteBucket(ctx, req)
|
// err = c.DeleteBucket(ctx, req)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// // TODO: Handle error.
|
// // TODO: Handle error.
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
|
// # Inspecting errors
|
||||||
|
//
|
||||||
|
// To see examples of how to inspect errors returned by this package please reference
|
||||||
|
// [Inspecting errors](https://pkg.go.dev/cloud.google.com/go#hdr-Inspecting_errors).
|
||||||
|
//
|
||||||
// # Use of Context
|
// # Use of Context
|
||||||
//
|
//
|
||||||
// The ctx passed to NewClient is used for authentication requests and
|
// The ctx passed to NewClient is used for authentication requests and
|
||||||
|
|
@ -82,11 +85,6 @@ package storage // import "cloud.google.com/go/storage/internal/apiv2"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"os"
|
|
||||||
"runtime"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"unicode"
|
|
||||||
|
|
||||||
"google.golang.org/api/option"
|
"google.golang.org/api/option"
|
||||||
"google.golang.org/grpc/metadata"
|
"google.golang.org/grpc/metadata"
|
||||||
|
|
@ -117,16 +115,6 @@ func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
|
||||||
return metadata.NewOutgoingContext(ctx, out)
|
return metadata.NewOutgoingContext(ctx, out)
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkDisableDeadlines() (bool, error) {
|
|
||||||
raw, ok := os.LookupEnv("GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE")
|
|
||||||
if !ok {
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
b, err := strconv.ParseBool(raw)
|
|
||||||
return b, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
|
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
|
||||||
func DefaultAuthScopes() []string {
|
func DefaultAuthScopes() []string {
|
||||||
return []string{
|
return []string{
|
||||||
|
|
@ -137,40 +125,3 @@ func DefaultAuthScopes() []string {
|
||||||
"https://www.googleapis.com/auth/devstorage.read_write",
|
"https://www.googleapis.com/auth/devstorage.read_write",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// versionGo returns the Go runtime version. The returned string
|
|
||||||
// has no whitespace, suitable for reporting in header.
|
|
||||||
func versionGo() string {
|
|
||||||
const develPrefix = "devel +"
|
|
||||||
|
|
||||||
s := runtime.Version()
|
|
||||||
if strings.HasPrefix(s, develPrefix) {
|
|
||||||
s = s[len(develPrefix):]
|
|
||||||
if p := strings.IndexFunc(s, unicode.IsSpace); p >= 0 {
|
|
||||||
s = s[:p]
|
|
||||||
}
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
||||||
notSemverRune := func(r rune) bool {
|
|
||||||
return !strings.ContainsRune("0123456789.", r)
|
|
||||||
}
|
|
||||||
|
|
||||||
if strings.HasPrefix(s, "go1") {
|
|
||||||
s = s[2:]
|
|
||||||
var prerelease string
|
|
||||||
if p := strings.IndexFunc(s, notSemverRune); p >= 0 {
|
|
||||||
s, prerelease = s[:p], s[p:]
|
|
||||||
}
|
|
||||||
if strings.HasSuffix(s, ".") {
|
|
||||||
s += "0"
|
|
||||||
} else if strings.Count(s, ".") < 2 {
|
|
||||||
s += ".0"
|
|
||||||
}
|
|
||||||
if prerelease != "" {
|
|
||||||
s += "-" + prerelease
|
|
||||||
}
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
return "UNKNOWN"
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -23,15 +23,17 @@ import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
iampb "cloud.google.com/go/iam/apiv1/iampb"
|
iampb "cloud.google.com/go/iam/apiv1/iampb"
|
||||||
storagepb "cloud.google.com/go/storage/internal/apiv2/stubs"
|
storagepb "cloud.google.com/go/storage/internal/apiv2/storagepb"
|
||||||
gax "github.com/googleapis/gax-go/v2"
|
gax "github.com/googleapis/gax-go/v2"
|
||||||
"google.golang.org/api/iterator"
|
"google.golang.org/api/iterator"
|
||||||
"google.golang.org/api/option"
|
"google.golang.org/api/option"
|
||||||
"google.golang.org/api/option/internaloption"
|
"google.golang.org/api/option/internaloption"
|
||||||
gtransport "google.golang.org/api/transport/grpc"
|
gtransport "google.golang.org/api/transport/grpc"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
|
"google.golang.org/grpc/codes"
|
||||||
"google.golang.org/grpc/metadata"
|
"google.golang.org/grpc/metadata"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
@ -86,36 +88,394 @@ func defaultGRPCClientOptions() []option.ClientOption {
|
||||||
|
|
||||||
func defaultCallOptions() *CallOptions {
|
func defaultCallOptions() *CallOptions {
|
||||||
return &CallOptions{
|
return &CallOptions{
|
||||||
DeleteBucket: []gax.CallOption{},
|
DeleteBucket: []gax.CallOption{
|
||||||
GetBucket: []gax.CallOption{},
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
CreateBucket: []gax.CallOption{},
|
gax.WithRetry(func() gax.Retryer {
|
||||||
ListBuckets: []gax.CallOption{},
|
return gax.OnCodes([]codes.Code{
|
||||||
LockBucketRetentionPolicy: []gax.CallOption{},
|
codes.DeadlineExceeded,
|
||||||
GetIamPolicy: []gax.CallOption{},
|
codes.Unavailable,
|
||||||
SetIamPolicy: []gax.CallOption{},
|
}, gax.Backoff{
|
||||||
TestIamPermissions: []gax.CallOption{},
|
Initial: 1000 * time.Millisecond,
|
||||||
UpdateBucket: []gax.CallOption{},
|
Max: 60000 * time.Millisecond,
|
||||||
DeleteNotificationConfig: []gax.CallOption{},
|
Multiplier: 2.00,
|
||||||
GetNotificationConfig: []gax.CallOption{},
|
})
|
||||||
CreateNotificationConfig: []gax.CallOption{},
|
}),
|
||||||
ListNotificationConfigs: []gax.CallOption{},
|
},
|
||||||
ComposeObject: []gax.CallOption{},
|
GetBucket: []gax.CallOption{
|
||||||
DeleteObject: []gax.CallOption{},
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
CancelResumableWrite: []gax.CallOption{},
|
gax.WithRetry(func() gax.Retryer {
|
||||||
GetObject: []gax.CallOption{},
|
return gax.OnCodes([]codes.Code{
|
||||||
ReadObject: []gax.CallOption{},
|
codes.DeadlineExceeded,
|
||||||
UpdateObject: []gax.CallOption{},
|
codes.Unavailable,
|
||||||
WriteObject: []gax.CallOption{},
|
}, gax.Backoff{
|
||||||
ListObjects: []gax.CallOption{},
|
Initial: 1000 * time.Millisecond,
|
||||||
RewriteObject: []gax.CallOption{},
|
Max: 60000 * time.Millisecond,
|
||||||
StartResumableWrite: []gax.CallOption{},
|
Multiplier: 2.00,
|
||||||
QueryWriteStatus: []gax.CallOption{},
|
})
|
||||||
GetServiceAccount: []gax.CallOption{},
|
}),
|
||||||
CreateHmacKey: []gax.CallOption{},
|
},
|
||||||
DeleteHmacKey: []gax.CallOption{},
|
CreateBucket: []gax.CallOption{
|
||||||
GetHmacKey: []gax.CallOption{},
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
ListHmacKeys: []gax.CallOption{},
|
gax.WithRetry(func() gax.Retryer {
|
||||||
UpdateHmacKey: []gax.CallOption{},
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
ListBuckets: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
LockBucketRetentionPolicy: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
GetIamPolicy: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
SetIamPolicy: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
TestIamPermissions: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
UpdateBucket: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
DeleteNotificationConfig: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
GetNotificationConfig: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
CreateNotificationConfig: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
ListNotificationConfigs: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
ComposeObject: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
DeleteObject: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
CancelResumableWrite: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
GetObject: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
ReadObject: []gax.CallOption{
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
UpdateObject: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
WriteObject: []gax.CallOption{
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
ListObjects: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
RewriteObject: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
StartResumableWrite: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
QueryWriteStatus: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
GetServiceAccount: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
CreateHmacKey: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
DeleteHmacKey: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
GetHmacKey: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
ListHmacKeys: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
UpdateHmacKey: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -296,13 +656,24 @@ func (c *Client) ComposeObject(ctx context.Context, req *storagepb.ComposeObject
|
||||||
return c.internalClient.ComposeObject(ctx, req, opts...)
|
return c.internalClient.ComposeObject(ctx, req, opts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteObject deletes an object and its metadata. Deletions are permanent if versioning
|
// DeleteObject deletes an object and its metadata.
|
||||||
// is not enabled for the bucket, or if the generation parameter is used.
|
//
|
||||||
|
// Deletions are normally permanent when versioning is disabled or whenever
|
||||||
|
// the generation parameter is used. However, if soft delete is enabled for
|
||||||
|
// the bucket, deleted objects can be restored using RestoreObject until the
|
||||||
|
// soft delete retention period has passed.
|
||||||
func (c *Client) DeleteObject(ctx context.Context, req *storagepb.DeleteObjectRequest, opts ...gax.CallOption) error {
|
func (c *Client) DeleteObject(ctx context.Context, req *storagepb.DeleteObjectRequest, opts ...gax.CallOption) error {
|
||||||
return c.internalClient.DeleteObject(ctx, req, opts...)
|
return c.internalClient.DeleteObject(ctx, req, opts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CancelResumableWrite cancels an in-progress resumable upload.
|
// CancelResumableWrite cancels an in-progress resumable upload.
|
||||||
|
//
|
||||||
|
// Any attempts to write to the resumable upload after cancelling the upload
|
||||||
|
// will fail.
|
||||||
|
//
|
||||||
|
// The behavior for currently in progress write operations is not guaranteed -
|
||||||
|
// they could either complete before the cancellation or fail if the
|
||||||
|
// cancellation completes first.
|
||||||
func (c *Client) CancelResumableWrite(ctx context.Context, req *storagepb.CancelResumableWriteRequest, opts ...gax.CallOption) (*storagepb.CancelResumableWriteResponse, error) {
|
func (c *Client) CancelResumableWrite(ctx context.Context, req *storagepb.CancelResumableWriteRequest, opts ...gax.CallOption) (*storagepb.CancelResumableWriteResponse, error) {
|
||||||
return c.internalClient.CancelResumableWrite(ctx, req, opts...)
|
return c.internalClient.CancelResumableWrite(ctx, req, opts...)
|
||||||
}
|
}
|
||||||
|
|
@ -369,6 +740,9 @@ func (c *Client) UpdateObject(ctx context.Context, req *storagepb.UpdateObjectRe
|
||||||
// incur a performance cost over resuming at the correct write offset.
|
// incur a performance cost over resuming at the correct write offset.
|
||||||
// This behavior can make client-side handling simpler in some cases.
|
// This behavior can make client-side handling simpler in some cases.
|
||||||
//
|
//
|
||||||
|
// Clients must only send data that is a multiple of 256 KiB per message,
|
||||||
|
// unless the object is being finished with finish_write set to true.
|
||||||
|
//
|
||||||
// The service will not view the object as complete until the client has
|
// The service will not view the object as complete until the client has
|
||||||
// sent a WriteObjectRequest with finish_write set to true. Sending any
|
// sent a WriteObjectRequest with finish_write set to true. Sending any
|
||||||
// requests on a stream after sending a request with finish_write set to
|
// requests on a stream after sending a request with finish_write set to
|
||||||
|
|
@ -455,9 +829,6 @@ type gRPCClient struct {
|
||||||
// Connection pool of gRPC connections to the service.
|
// Connection pool of gRPC connections to the service.
|
||||||
connPool gtransport.ConnPool
|
connPool gtransport.ConnPool
|
||||||
|
|
||||||
// flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE
|
|
||||||
disableDeadlines bool
|
|
||||||
|
|
||||||
// Points back to the CallOptions field of the containing Client
|
// Points back to the CallOptions field of the containing Client
|
||||||
CallOptions **CallOptions
|
CallOptions **CallOptions
|
||||||
|
|
||||||
|
|
@ -503,11 +874,6 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error
|
||||||
clientOpts = append(clientOpts, hookOpts...)
|
clientOpts = append(clientOpts, hookOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
disableDeadlines, err := checkDisableDeadlines()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...)
|
connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -516,7 +882,6 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error
|
||||||
|
|
||||||
c := &gRPCClient{
|
c := &gRPCClient{
|
||||||
connPool: connPool,
|
connPool: connPool,
|
||||||
disableDeadlines: disableDeadlines,
|
|
||||||
client: storagepb.NewStorageClient(connPool),
|
client: storagepb.NewStorageClient(connPool),
|
||||||
CallOptions: &client.CallOptions,
|
CallOptions: &client.CallOptions,
|
||||||
}
|
}
|
||||||
|
|
@ -539,7 +904,7 @@ func (c *gRPCClient) Connection() *grpc.ClientConn {
|
||||||
// the `x-goog-api-client` header passed on each request. Intended for
|
// the `x-goog-api-client` header passed on each request. Intended for
|
||||||
// use by Google-written clients.
|
// use by Google-written clients.
|
||||||
func (c *gRPCClient) setGoogleClientInfo(keyval ...string) {
|
func (c *gRPCClient) setGoogleClientInfo(keyval ...string) {
|
||||||
kv := append([]string{"gl-go", versionGo()}, keyval...)
|
kv := append([]string{"gl-go", gax.GoVersion}, keyval...)
|
||||||
kv = append(kv, "gapic", getVersionClient(), "gax", gax.Version, "grpc", grpc.Version)
|
kv = append(kv, "gapic", getVersionClient(), "gax", gax.Version, "grpc", grpc.Version)
|
||||||
c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
|
c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -15,4 +15,4 @@
|
||||||
package internal
|
package internal
|
||||||
|
|
||||||
// Version is the current tagged release of the library.
|
// Version is the current tagged release of the library.
|
||||||
const Version = "1.30.1"
|
const Version = "1.31.0"
|
||||||
|
|
|
||||||
|
|
@ -76,9 +76,14 @@ func setRetryHeaderHTTP(req interface{ Header() http.Header }) func(string, int)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
header := req.Header()
|
header := req.Header()
|
||||||
|
// TODO(b/274504690): Consider dropping gccl-invocation-id key since it
|
||||||
|
// duplicates the X-Goog-Gcs-Idempotency-Token header (added in v1.31.0).
|
||||||
invocationHeader := fmt.Sprintf("gccl-invocation-id/%v gccl-attempt-count/%v", invocationID, attempts)
|
invocationHeader := fmt.Sprintf("gccl-invocation-id/%v gccl-attempt-count/%v", invocationID, attempts)
|
||||||
xGoogHeader := strings.Join([]string{invocationHeader, xGoogDefaultHeader}, " ")
|
xGoogHeader := strings.Join([]string{invocationHeader, xGoogDefaultHeader}, " ")
|
||||||
header.Set("x-goog-api-client", xGoogHeader)
|
header.Set("x-goog-api-client", xGoogHeader)
|
||||||
|
// Also use the invocationID for the idempotency token header, which will
|
||||||
|
// enable idempotent retries for more operations.
|
||||||
|
header.Set("x-goog-gcs-idempotency-token", invocationID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ import (
|
||||||
"regexp"
|
"regexp"
|
||||||
|
|
||||||
"cloud.google.com/go/internal/trace"
|
"cloud.google.com/go/internal/trace"
|
||||||
storagepb "cloud.google.com/go/storage/internal/apiv2/stubs"
|
"cloud.google.com/go/storage/internal/apiv2/storagepb"
|
||||||
raw "google.golang.org/api/storage/v1"
|
raw "google.golang.org/api/storage/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ func WithJSONReads() option.ClientOption {
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithXMLReads is an option that may be passed to a Storage Client on creation.
|
// WithXMLReads is an option that may be passed to a Storage Client on creation.
|
||||||
// It sets the client to use the JSON API for object reads.
|
// It sets the client to use the XML API for object reads.
|
||||||
//
|
//
|
||||||
// This is the current default.
|
// This is the current default.
|
||||||
func WithXMLReads() option.ClientOption {
|
func WithXMLReads() option.ClientOption {
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,12 @@ type PostPolicyV4Options struct {
|
||||||
// Optional.
|
// Optional.
|
||||||
Conditions []PostPolicyV4Condition
|
Conditions []PostPolicyV4Condition
|
||||||
|
|
||||||
|
// Hostname sets the host of the signed post policy. This field overrides
|
||||||
|
// any endpoint set on a storage Client or through STORAGE_EMULATOR_HOST.
|
||||||
|
// Only compatible with PathStyle URLStyle.
|
||||||
|
// Optional.
|
||||||
|
Hostname string
|
||||||
|
|
||||||
shouldHashSignBytes bool
|
shouldHashSignBytes bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -128,6 +134,7 @@ func (opts *PostPolicyV4Options) clone() *PostPolicyV4Options {
|
||||||
Fields: opts.Fields,
|
Fields: opts.Fields,
|
||||||
Conditions: opts.Conditions,
|
Conditions: opts.Conditions,
|
||||||
shouldHashSignBytes: opts.shouldHashSignBytes,
|
shouldHashSignBytes: opts.shouldHashSignBytes,
|
||||||
|
Hostname: opts.Hostname,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -370,7 +377,7 @@ func GenerateSignedPostPolicyV4(bucket, object string, opts *PostPolicyV4Options
|
||||||
u := &url.URL{
|
u := &url.URL{
|
||||||
Path: path,
|
Path: path,
|
||||||
RawPath: pathEncodeV4(path),
|
RawPath: pathEncodeV4(path),
|
||||||
Host: opts.Style.host(bucket),
|
Host: opts.Style.host(opts.Hostname, bucket),
|
||||||
Scheme: scheme,
|
Scheme: scheme,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ import (
|
||||||
"cloud.google.com/go/internal/optional"
|
"cloud.google.com/go/internal/optional"
|
||||||
"cloud.google.com/go/internal/trace"
|
"cloud.google.com/go/internal/trace"
|
||||||
"cloud.google.com/go/storage/internal"
|
"cloud.google.com/go/storage/internal"
|
||||||
storagepb "cloud.google.com/go/storage/internal/apiv2/stubs"
|
"cloud.google.com/go/storage/internal/apiv2/storagepb"
|
||||||
"github.com/googleapis/gax-go/v2"
|
"github.com/googleapis/gax-go/v2"
|
||||||
"golang.org/x/oauth2/google"
|
"golang.org/x/oauth2/google"
|
||||||
"google.golang.org/api/googleapi"
|
"google.golang.org/api/googleapi"
|
||||||
|
|
@ -109,8 +109,8 @@ type Client struct {
|
||||||
raw *raw.Service
|
raw *raw.Service
|
||||||
// Scheme describes the scheme under the current host.
|
// Scheme describes the scheme under the current host.
|
||||||
scheme string
|
scheme string
|
||||||
// ReadHost is the default host used on the reader.
|
// xmlHost is the default host used for XML requests.
|
||||||
readHost string
|
xmlHost string
|
||||||
// May be nil.
|
// May be nil.
|
||||||
creds *google.Credentials
|
creds *google.Credentials
|
||||||
retry *retryConfig
|
retry *retryConfig
|
||||||
|
|
@ -199,7 +199,7 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("storage client: %w", err)
|
return nil, fmt.Errorf("storage client: %w", err)
|
||||||
}
|
}
|
||||||
// Update readHost and scheme with the chosen endpoint.
|
// Update xmlHost and scheme with the chosen endpoint.
|
||||||
u, err := url.Parse(ep)
|
u, err := url.Parse(ep)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("supplied endpoint %q is not valid: %w", ep, err)
|
return nil, fmt.Errorf("supplied endpoint %q is not valid: %w", ep, err)
|
||||||
|
|
@ -214,7 +214,7 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error
|
||||||
hc: hc,
|
hc: hc,
|
||||||
raw: rawService,
|
raw: rawService,
|
||||||
scheme: u.Scheme,
|
scheme: u.Scheme,
|
||||||
readHost: u.Host,
|
xmlHost: u.Host,
|
||||||
creds: creds,
|
creds: creds,
|
||||||
tc: tc,
|
tc: tc,
|
||||||
}, nil
|
}, nil
|
||||||
|
|
@ -262,13 +262,13 @@ const (
|
||||||
SigningSchemeV4
|
SigningSchemeV4
|
||||||
)
|
)
|
||||||
|
|
||||||
// URLStyle determines the style to use for the signed URL. pathStyle is the
|
// URLStyle determines the style to use for the signed URL. PathStyle is the
|
||||||
// default. All non-default options work with V4 scheme only. See
|
// default. All non-default options work with V4 scheme only. See
|
||||||
// https://cloud.google.com/storage/docs/request-endpoints for details.
|
// https://cloud.google.com/storage/docs/request-endpoints for details.
|
||||||
type URLStyle interface {
|
type URLStyle interface {
|
||||||
// host should return the host portion of the signed URL, not including
|
// host should return the host portion of the signed URL, not including
|
||||||
// the scheme (e.g. storage.googleapis.com).
|
// the scheme (e.g. storage.googleapis.com).
|
||||||
host(bucket string) string
|
host(hostname, bucket string) string
|
||||||
|
|
||||||
// path should return the path portion of the signed URL, which may include
|
// path should return the path portion of the signed URL, which may include
|
||||||
// both the bucket and object name or only the object name depending on the
|
// both the bucket and object name or only the object name depending on the
|
||||||
|
|
@ -284,7 +284,11 @@ type bucketBoundHostname struct {
|
||||||
hostname string
|
hostname string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s pathStyle) host(bucket string) string {
|
func (s pathStyle) host(hostname, bucket string) string {
|
||||||
|
if hostname != "" {
|
||||||
|
return stripScheme(hostname)
|
||||||
|
}
|
||||||
|
|
||||||
if host := os.Getenv("STORAGE_EMULATOR_HOST"); host != "" {
|
if host := os.Getenv("STORAGE_EMULATOR_HOST"); host != "" {
|
||||||
return stripScheme(host)
|
return stripScheme(host)
|
||||||
}
|
}
|
||||||
|
|
@ -292,7 +296,7 @@ func (s pathStyle) host(bucket string) string {
|
||||||
return "storage.googleapis.com"
|
return "storage.googleapis.com"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s virtualHostedStyle) host(bucket string) string {
|
func (s virtualHostedStyle) host(_, bucket string) string {
|
||||||
if host := os.Getenv("STORAGE_EMULATOR_HOST"); host != "" {
|
if host := os.Getenv("STORAGE_EMULATOR_HOST"); host != "" {
|
||||||
return bucket + "." + stripScheme(host)
|
return bucket + "." + stripScheme(host)
|
||||||
}
|
}
|
||||||
|
|
@ -300,7 +304,7 @@ func (s virtualHostedStyle) host(bucket string) string {
|
||||||
return bucket + ".storage.googleapis.com"
|
return bucket + ".storage.googleapis.com"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s bucketBoundHostname) host(bucket string) string {
|
func (s bucketBoundHostname) host(_, bucket string) string {
|
||||||
return s.hostname
|
return s.hostname
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -321,7 +325,10 @@ func (s bucketBoundHostname) path(bucket, object string) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// PathStyle is the default style, and will generate a URL of the form
|
// PathStyle is the default style, and will generate a URL of the form
|
||||||
// "storage.googleapis.com/<bucket-name>/<object-name>".
|
// "<host-name>/<bucket-name>/<object-name>". By default, <host-name> is
|
||||||
|
// storage.googleapis.com, but setting an endpoint on the storage Client or
|
||||||
|
// through STORAGE_EMULATOR_HOST overrides this. Setting Hostname on
|
||||||
|
// SignedURLOptions or PostPolicyV4Options overrides everything else.
|
||||||
func PathStyle() URLStyle {
|
func PathStyle() URLStyle {
|
||||||
return pathStyle{}
|
return pathStyle{}
|
||||||
}
|
}
|
||||||
|
|
@ -442,6 +449,12 @@ type SignedURLOptions struct {
|
||||||
// Scheme determines the version of URL signing to use. Default is
|
// Scheme determines the version of URL signing to use. Default is
|
||||||
// SigningSchemeV2.
|
// SigningSchemeV2.
|
||||||
Scheme SigningScheme
|
Scheme SigningScheme
|
||||||
|
|
||||||
|
// Hostname sets the host of the signed URL. This field overrides any
|
||||||
|
// endpoint set on a storage Client or through STORAGE_EMULATOR_HOST.
|
||||||
|
// Only compatible with PathStyle URLStyle.
|
||||||
|
// Optional.
|
||||||
|
Hostname string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (opts *SignedURLOptions) clone() *SignedURLOptions {
|
func (opts *SignedURLOptions) clone() *SignedURLOptions {
|
||||||
|
|
@ -458,6 +471,7 @@ func (opts *SignedURLOptions) clone() *SignedURLOptions {
|
||||||
Style: opts.Style,
|
Style: opts.Style,
|
||||||
Insecure: opts.Insecure,
|
Insecure: opts.Insecure,
|
||||||
Scheme: opts.Scheme,
|
Scheme: opts.Scheme,
|
||||||
|
Hostname: opts.Hostname,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -716,7 +730,7 @@ func signedURLV4(bucket, name string, opts *SignedURLOptions, now time.Time) (st
|
||||||
fmt.Fprintf(buf, "%s\n", escapedQuery)
|
fmt.Fprintf(buf, "%s\n", escapedQuery)
|
||||||
|
|
||||||
// Fill in the hostname based on the desired URL style.
|
// Fill in the hostname based on the desired URL style.
|
||||||
u.Host = opts.Style.host(bucket)
|
u.Host = opts.Style.host(opts.Hostname, bucket)
|
||||||
|
|
||||||
// Fill in the URL scheme.
|
// Fill in the URL scheme.
|
||||||
if opts.Insecure {
|
if opts.Insecure {
|
||||||
|
|
@ -850,7 +864,7 @@ func signedURLV2(bucket, name string, opts *SignedURLOptions) (string, error) {
|
||||||
}
|
}
|
||||||
encoded := base64.StdEncoding.EncodeToString(b)
|
encoded := base64.StdEncoding.EncodeToString(b)
|
||||||
u.Scheme = "https"
|
u.Scheme = "https"
|
||||||
u.Host = PathStyle().host(bucket)
|
u.Host = PathStyle().host(opts.Hostname, bucket)
|
||||||
q := u.Query()
|
q := u.Query()
|
||||||
q.Set("GoogleAccessId", opts.GoogleAccessID)
|
q.Set("GoogleAccessId", opts.GoogleAccessID)
|
||||||
q.Set("Expires", fmt.Sprintf("%d", opts.Expires.Unix()))
|
q.Set("Expires", fmt.Sprintf("%d", opts.Expires.Unix()))
|
||||||
|
|
@ -893,7 +907,9 @@ func (o *ObjectHandle) Generation(gen int64) *ObjectHandle {
|
||||||
}
|
}
|
||||||
|
|
||||||
// If returns a new ObjectHandle that applies a set of preconditions.
|
// If returns a new ObjectHandle that applies a set of preconditions.
|
||||||
// Preconditions already set on the ObjectHandle are ignored.
|
// Preconditions already set on the ObjectHandle are ignored. The supplied
|
||||||
|
// Conditions must have at least one field set to a non-default value;
|
||||||
|
// otherwise an error will be returned from any operation on the ObjectHandle.
|
||||||
// Operations on the new handle will return an error if the preconditions are not
|
// Operations on the new handle will return an error if the preconditions are not
|
||||||
// satisfied. See https://cloud.google.com/storage/docs/generations-preconditions
|
// satisfied. See https://cloud.google.com/storage/docs/generations-preconditions
|
||||||
// for more details.
|
// for more details.
|
||||||
|
|
@ -1163,7 +1179,7 @@ func (uattrs *ObjectAttrsToUpdate) toProtoObject(bucket, object string) *storage
|
||||||
o.Acl = toProtoObjectACL(uattrs.ACL)
|
o.Acl = toProtoObjectACL(uattrs.ACL)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(cathyo): Handle metadata. Pending b/230510191.
|
o.Metadata = uattrs.Metadata
|
||||||
|
|
||||||
return o
|
return o
|
||||||
}
|
}
|
||||||
|
|
@ -1484,6 +1500,8 @@ type Query struct {
|
||||||
// aside from the prefix, contain delimiter will have their name,
|
// aside from the prefix, contain delimiter will have their name,
|
||||||
// truncated after the delimiter, returned in prefixes.
|
// truncated after the delimiter, returned in prefixes.
|
||||||
// Duplicate prefixes are omitted.
|
// Duplicate prefixes are omitted.
|
||||||
|
// Must be set to / when used with the MatchGlob parameter to filter results
|
||||||
|
// in a directory-like mode.
|
||||||
// Optional.
|
// Optional.
|
||||||
Delimiter string
|
Delimiter string
|
||||||
|
|
||||||
|
|
@ -1497,9 +1515,9 @@ type Query struct {
|
||||||
Versions bool
|
Versions bool
|
||||||
|
|
||||||
// attrSelection is used to select only specific fields to be returned by
|
// attrSelection is used to select only specific fields to be returned by
|
||||||
// the query. It is set by the user calling calling SetAttrSelection. These
|
// the query. It is set by the user calling SetAttrSelection. These
|
||||||
// are used by toFieldMask and toFieldSelection for gRPC and HTTP/JSON
|
// are used by toFieldMask and toFieldSelection for gRPC and HTTP/JSON
|
||||||
// clients repsectively.
|
// clients respectively.
|
||||||
attrSelection []string
|
attrSelection []string
|
||||||
|
|
||||||
// StartOffset is used to filter results to objects whose names are
|
// StartOffset is used to filter results to objects whose names are
|
||||||
|
|
@ -1525,6 +1543,12 @@ type Query struct {
|
||||||
// true, they will also be included as objects and their metadata will be
|
// true, they will also be included as objects and their metadata will be
|
||||||
// populated in the returned ObjectAttrs.
|
// populated in the returned ObjectAttrs.
|
||||||
IncludeTrailingDelimiter bool
|
IncludeTrailingDelimiter bool
|
||||||
|
|
||||||
|
// MatchGlob is a glob pattern used to filter results (for example, foo*bar). See
|
||||||
|
// https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-object-glob
|
||||||
|
// for syntax details. When Delimiter is set in conjunction with MatchGlob,
|
||||||
|
// it must be set to /.
|
||||||
|
MatchGlob string
|
||||||
}
|
}
|
||||||
|
|
||||||
// attrToFieldMap maps the field names of ObjectAttrs to the underlying field
|
// attrToFieldMap maps the field names of ObjectAttrs to the underlying field
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ type Writer struct {
|
||||||
// cancellation.
|
// cancellation.
|
||||||
ChunkRetryDeadline time.Duration
|
ChunkRetryDeadline time.Duration
|
||||||
|
|
||||||
// ProgressFunc can be used to monitor the progress of a large write.
|
// ProgressFunc can be used to monitor the progress of a large write
|
||||||
// operation. If ProgressFunc is not nil and writing requires multiple
|
// operation. If ProgressFunc is not nil and writing requires multiple
|
||||||
// calls to the underlying service (see
|
// calls to the underlying service (see
|
||||||
// https://cloud.google.com/storage/docs/json_api/v1/how-tos/resumable-upload),
|
// https://cloud.google.com/storage/docs/json_api/v1/how-tos/resumable-upload),
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
{
|
{
|
||||||
"v2": "2.10.0"
|
"v2": "2.11.0"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,17 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [2.11.0](https://github.com/googleapis/gax-go/compare/v2.10.0...v2.11.0) (2023-06-13)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **v2:** add GoVersion package variable ([#283](https://github.com/googleapis/gax-go/issues/283)) ([26553cc](https://github.com/googleapis/gax-go/commit/26553ccadb4016b189881f52e6c253b68bb3e3d5))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **v2:** handle space in non-devel go version ([#288](https://github.com/googleapis/gax-go/issues/288)) ([fd7bca0](https://github.com/googleapis/gax-go/commit/fd7bca029a1c5e63def8f0a5fd1ec3f725d92f75))
|
||||||
|
|
||||||
## [2.10.0](https://github.com/googleapis/gax-go/compare/v2.9.1...v2.10.0) (2023-05-30)
|
## [2.10.0](https://github.com/googleapis/gax-go/compare/v2.9.1...v2.10.0) (2023-05-30)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,73 @@
|
||||||
|
|
||||||
package gax
|
package gax
|
||||||
|
|
||||||
import "bytes"
|
import (
|
||||||
|
"bytes"
|
||||||
|
"runtime"
|
||||||
|
"strings"
|
||||||
|
"unicode"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// GoVersion is a header-safe representation of the current runtime
|
||||||
|
// environment's Go version. This is for GAX consumers that need to
|
||||||
|
// report the Go runtime version in API calls.
|
||||||
|
GoVersion string
|
||||||
|
// version is a package internal global variable for testing purposes.
|
||||||
|
version = runtime.Version
|
||||||
|
)
|
||||||
|
|
||||||
|
// versionUnknown is only used when the runtime version cannot be determined.
|
||||||
|
const versionUnknown = "UNKNOWN"
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
GoVersion = goVersion()
|
||||||
|
}
|
||||||
|
|
||||||
|
// goVersion returns a Go runtime version derived from the runtime environment
|
||||||
|
// that is modified to be suitable for reporting in a header, meaning it has no
|
||||||
|
// whitespace. If it is unable to determine the Go runtime version, it returns
|
||||||
|
// versionUnknown.
|
||||||
|
func goVersion() string {
|
||||||
|
const develPrefix = "devel +"
|
||||||
|
|
||||||
|
s := version()
|
||||||
|
if strings.HasPrefix(s, develPrefix) {
|
||||||
|
s = s[len(develPrefix):]
|
||||||
|
if p := strings.IndexFunc(s, unicode.IsSpace); p >= 0 {
|
||||||
|
s = s[:p]
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
} else if p := strings.IndexFunc(s, unicode.IsSpace); p >= 0 {
|
||||||
|
s = s[:p]
|
||||||
|
}
|
||||||
|
|
||||||
|
notSemverRune := func(r rune) bool {
|
||||||
|
return !strings.ContainsRune("0123456789.", r)
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.HasPrefix(s, "go1") {
|
||||||
|
s = s[2:]
|
||||||
|
var prerelease string
|
||||||
|
if p := strings.IndexFunc(s, notSemverRune); p >= 0 {
|
||||||
|
s, prerelease = s[:p], s[p:]
|
||||||
|
}
|
||||||
|
if strings.HasSuffix(s, ".") {
|
||||||
|
s += "0"
|
||||||
|
} else if strings.Count(s, ".") < 2 {
|
||||||
|
s += ".0"
|
||||||
|
}
|
||||||
|
if prerelease != "" {
|
||||||
|
// Some release candidates already have a dash in them.
|
||||||
|
if !strings.HasPrefix(prerelease, "-") {
|
||||||
|
prerelease = "-" + prerelease
|
||||||
|
}
|
||||||
|
s += prerelease
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
return "UNKNOWN"
|
||||||
|
}
|
||||||
|
|
||||||
// XGoogHeader is for use by the Google Cloud Libraries only.
|
// XGoogHeader is for use by the Google Cloud Libraries only.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -30,4 +30,4 @@
|
||||||
package internal
|
package internal
|
||||||
|
|
||||||
// Version is the current tagged release of the library.
|
// Version is the current tagged release of the library.
|
||||||
const Version = "2.10.0"
|
const Version = "2.11.0"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# cloud.google.com/go v0.110.0
|
# cloud.google.com/go v0.110.2
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
cloud.google.com/go/internal
|
cloud.google.com/go/internal
|
||||||
cloud.google.com/go/internal/optional
|
cloud.google.com/go/internal/optional
|
||||||
|
|
@ -10,16 +10,16 @@ cloud.google.com/go/compute/internal
|
||||||
# cloud.google.com/go/compute/metadata v0.2.3
|
# cloud.google.com/go/compute/metadata v0.2.3
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
cloud.google.com/go/compute/metadata
|
cloud.google.com/go/compute/metadata
|
||||||
# cloud.google.com/go/iam v0.13.0
|
# cloud.google.com/go/iam v1.1.0
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
cloud.google.com/go/iam
|
cloud.google.com/go/iam
|
||||||
cloud.google.com/go/iam/apiv1/iampb
|
cloud.google.com/go/iam/apiv1/iampb
|
||||||
# cloud.google.com/go/storage v1.30.1
|
# cloud.google.com/go/storage v1.31.0
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
cloud.google.com/go/storage
|
cloud.google.com/go/storage
|
||||||
cloud.google.com/go/storage/internal
|
cloud.google.com/go/storage/internal
|
||||||
cloud.google.com/go/storage/internal/apiv2
|
cloud.google.com/go/storage/internal/apiv2
|
||||||
cloud.google.com/go/storage/internal/apiv2/stubs
|
cloud.google.com/go/storage/internal/apiv2/storagepb
|
||||||
# github.com/Azure/azure-pipeline-go v0.2.3
|
# github.com/Azure/azure-pipeline-go v0.2.3
|
||||||
## explicit; go 1.14
|
## explicit; go 1.14
|
||||||
github.com/Azure/azure-pipeline-go/pipeline
|
github.com/Azure/azure-pipeline-go/pipeline
|
||||||
|
|
@ -600,7 +600,7 @@ github.com/google/uuid
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
github.com/googleapis/enterprise-certificate-proxy/client
|
github.com/googleapis/enterprise-certificate-proxy/client
|
||||||
github.com/googleapis/enterprise-certificate-proxy/client/util
|
github.com/googleapis/enterprise-certificate-proxy/client/util
|
||||||
# github.com/googleapis/gax-go/v2 v2.10.0
|
# github.com/googleapis/gax-go/v2 v2.11.0
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
github.com/googleapis/gax-go/v2
|
github.com/googleapis/gax-go/v2
|
||||||
github.com/googleapis/gax-go/v2/apierror
|
github.com/googleapis/gax-go/v2/apierror
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue