Skip to content
This repository has been archived by the owner on Sep 16, 2023. It is now read-only.

feat: Add ability to configure BuildTriggers to create Builds that require approval before executing and ApproveBuild API to approve or reject pending Builds #574

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 3 additions & 3 deletions README.md
Expand Up @@ -49,20 +49,20 @@ If you are using Maven without BOM, add this to your dependencies:
If you are using Gradle 5.x or later, add this to your dependencies

```Groovy
implementation platform('com.google.cloud:libraries-bom:20.9.0')
implementation platform('com.google.cloud:libraries-bom:21.0.0')

compile 'com.google.cloud:google-cloud-build'
```
If you are using Gradle without BOM, add this to your dependencies

```Groovy
compile 'com.google.cloud:google-cloud-build:3.0.0'
compile 'com.google.cloud:google-cloud-build:3.0.1'
```

If you are using SBT, add this to your dependencies

```Scala
libraryDependencies += "com.google.cloud" % "google-cloud-build" % "3.0.0"
libraryDependencies += "com.google.cloud" % "google-cloud-build" % "3.0.1"
```

## Authentication
Expand Down
Expand Up @@ -29,6 +29,8 @@
import com.google.api.gax.rpc.UnaryCallable;
import com.google.cloud.devtools.cloudbuild.v1.stub.CloudBuildStub;
import com.google.cloud.devtools.cloudbuild.v1.stub.CloudBuildStubSettings;
import com.google.cloudbuild.v1.ApprovalResult;
import com.google.cloudbuild.v1.ApproveBuildRequest;
import com.google.cloudbuild.v1.Build;
import com.google.cloudbuild.v1.BuildOperationMetadata;
import com.google.cloudbuild.v1.BuildTrigger;
Expand Down Expand Up @@ -818,6 +820,121 @@ public final UnaryCallable<RetryBuildRequest, Operation> retryBuildCallable() {
return stub.retryBuildCallable();
}

// AUTO-GENERATED DOCUMENTATION AND METHOD.
/**
* Approves or rejects a pending build.
*
* <p>If approved, the returned LRO will be analogous to the LRO returned from a CreateBuild call.
*
* <p>If rejected, the returned LRO will be immediately done.
*
* <p>Sample code:
*
* <pre>{@code
* try (CloudBuildClient cloudBuildClient = CloudBuildClient.create()) {
* String name = "name3373707";
* ApprovalResult approvalResult = ApprovalResult.newBuilder().build();
* Build response = cloudBuildClient.approveBuildAsync(name, approvalResult).get();
* }
* }</pre>
*
* @param name Required. Name of the target build. For example:
* "projects/{$project_id}/builds/{$build_id}"
* @param approvalResult Approval decision and metadata.
* @throws com.google.api.gax.rpc.ApiException if the remote call fails
*/
public final OperationFuture<Build, BuildOperationMetadata> approveBuildAsync(
String name, ApprovalResult approvalResult) {
ApproveBuildRequest request =
ApproveBuildRequest.newBuilder().setName(name).setApprovalResult(approvalResult).build();
return approveBuildAsync(request);
}

// AUTO-GENERATED DOCUMENTATION AND METHOD.
/**
* Approves or rejects a pending build.
*
* <p>If approved, the returned LRO will be analogous to the LRO returned from a CreateBuild call.
*
* <p>If rejected, the returned LRO will be immediately done.
*
* <p>Sample code:
*
* <pre>{@code
* try (CloudBuildClient cloudBuildClient = CloudBuildClient.create()) {
* ApproveBuildRequest request =
* ApproveBuildRequest.newBuilder()
* .setName("name3373707")
* .setApprovalResult(ApprovalResult.newBuilder().build())
* .build();
* Build response = cloudBuildClient.approveBuildAsync(request).get();
* }
* }</pre>
*
* @param request The request object containing all of the parameters for the API call.
* @throws com.google.api.gax.rpc.ApiException if the remote call fails
*/
public final OperationFuture<Build, BuildOperationMetadata> approveBuildAsync(
ApproveBuildRequest request) {
return approveBuildOperationCallable().futureCall(request);
}

// AUTO-GENERATED DOCUMENTATION AND METHOD.
/**
* Approves or rejects a pending build.
*
* <p>If approved, the returned LRO will be analogous to the LRO returned from a CreateBuild call.
*
* <p>If rejected, the returned LRO will be immediately done.
*
* <p>Sample code:
*
* <pre>{@code
* try (CloudBuildClient cloudBuildClient = CloudBuildClient.create()) {
* ApproveBuildRequest request =
* ApproveBuildRequest.newBuilder()
* .setName("name3373707")
* .setApprovalResult(ApprovalResult.newBuilder().build())
* .build();
* OperationFuture<Build, BuildOperationMetadata> future =
* cloudBuildClient.approveBuildOperationCallable().futureCall(request);
* // Do something.
* Build response = future.get();
* }
* }</pre>
*/
public final OperationCallable<ApproveBuildRequest, Build, BuildOperationMetadata>
approveBuildOperationCallable() {
return stub.approveBuildOperationCallable();
}

// AUTO-GENERATED DOCUMENTATION AND METHOD.
/**
* Approves or rejects a pending build.
*
* <p>If approved, the returned LRO will be analogous to the LRO returned from a CreateBuild call.
*
* <p>If rejected, the returned LRO will be immediately done.
*
* <p>Sample code:
*
* <pre>{@code
* try (CloudBuildClient cloudBuildClient = CloudBuildClient.create()) {
* ApproveBuildRequest request =
* ApproveBuildRequest.newBuilder()
* .setName("name3373707")
* .setApprovalResult(ApprovalResult.newBuilder().build())
* .build();
* ApiFuture<Operation> future = cloudBuildClient.approveBuildCallable().futureCall(request);
* // Do something.
* Operation response = future.get();
* }
* }</pre>
*/
public final UnaryCallable<ApproveBuildRequest, Operation> approveBuildCallable() {
return stub.approveBuildCallable();
}

// AUTO-GENERATED DOCUMENTATION AND METHOD.
/**
* Creates a new `BuildTrigger`.
Expand Down
Expand Up @@ -33,6 +33,7 @@
import com.google.api.gax.rpc.TransportChannelProvider;
import com.google.api.gax.rpc.UnaryCallSettings;
import com.google.cloud.devtools.cloudbuild.v1.stub.CloudBuildStubSettings;
import com.google.cloudbuild.v1.ApproveBuildRequest;
import com.google.cloudbuild.v1.Build;
import com.google.cloudbuild.v1.BuildOperationMetadata;
import com.google.cloudbuild.v1.BuildTrigger;
Expand Down Expand Up @@ -139,6 +140,17 @@ public UnaryCallSettings<RetryBuildRequest, Operation> retryBuildSettings() {
return ((CloudBuildStubSettings) getStubSettings()).retryBuildOperationSettings();
}

/** Returns the object with the settings used for calls to approveBuild. */
public UnaryCallSettings<ApproveBuildRequest, Operation> approveBuildSettings() {
return ((CloudBuildStubSettings) getStubSettings()).approveBuildSettings();
}

/** Returns the object with the settings used for calls to approveBuild. */
public OperationCallSettings<ApproveBuildRequest, Build, BuildOperationMetadata>
approveBuildOperationSettings() {
return ((CloudBuildStubSettings) getStubSettings()).approveBuildOperationSettings();
}

/** Returns the object with the settings used for calls to createBuildTrigger. */
public UnaryCallSettings<CreateBuildTriggerRequest, BuildTrigger> createBuildTriggerSettings() {
return ((CloudBuildStubSettings) getStubSettings()).createBuildTriggerSettings();
Expand Down Expand Up @@ -364,6 +376,17 @@ public UnaryCallSettings.Builder<RetryBuildRequest, Operation> retryBuildSetting
return getStubSettingsBuilder().retryBuildOperationSettings();
}

/** Returns the builder for the settings used for calls to approveBuild. */
public UnaryCallSettings.Builder<ApproveBuildRequest, Operation> approveBuildSettings() {
return getStubSettingsBuilder().approveBuildSettings();
}

/** Returns the builder for the settings used for calls to approveBuild. */
public OperationCallSettings.Builder<ApproveBuildRequest, Build, BuildOperationMetadata>
approveBuildOperationSettings() {
return getStubSettingsBuilder().approveBuildOperationSettings();
}

/** Returns the builder for the settings used for calls to createBuildTrigger. */
public UnaryCallSettings.Builder<CreateBuildTriggerRequest, BuildTrigger>
createBuildTriggerSettings() {
Expand Down
Expand Up @@ -10,6 +10,9 @@
"grpc": {
"libraryClient": "CloudBuildClient",
"rpcs": {
"ApproveBuild": {
"methods": ["approveBuildAsync", "approveBuildAsync", "approveBuildOperationCallable", "approveBuildCallable"]
},
"CancelBuild": {
"methods": ["cancelBuild", "cancelBuild", "cancelBuildCallable"]
},
Expand Down
Expand Up @@ -23,6 +23,7 @@
import com.google.api.gax.core.BackgroundResource;
import com.google.api.gax.rpc.OperationCallable;
import com.google.api.gax.rpc.UnaryCallable;
import com.google.cloudbuild.v1.ApproveBuildRequest;
import com.google.cloudbuild.v1.Build;
import com.google.cloudbuild.v1.BuildOperationMetadata;
import com.google.cloudbuild.v1.BuildTrigger;
Expand Down Expand Up @@ -103,6 +104,15 @@ public UnaryCallable<RetryBuildRequest, Operation> retryBuildCallable() {
throw new UnsupportedOperationException("Not implemented: retryBuildCallable()");
}

public OperationCallable<ApproveBuildRequest, Build, BuildOperationMetadata>
approveBuildOperationCallable() {
throw new UnsupportedOperationException("Not implemented: approveBuildOperationCallable()");
}

public UnaryCallable<ApproveBuildRequest, Operation> approveBuildCallable() {
throw new UnsupportedOperationException("Not implemented: approveBuildCallable()");
}

public UnaryCallable<CreateBuildTriggerRequest, BuildTrigger> createBuildTriggerCallable() {
throw new UnsupportedOperationException("Not implemented: createBuildTriggerCallable()");
}
Expand Down
Expand Up @@ -46,6 +46,7 @@
import com.google.api.gax.rpc.TransportChannelProvider;
import com.google.api.gax.rpc.UnaryCallSettings;
import com.google.api.gax.rpc.UnaryCallable;
import com.google.cloudbuild.v1.ApproveBuildRequest;
import com.google.cloudbuild.v1.Build;
import com.google.cloudbuild.v1.BuildOperationMetadata;
import com.google.cloudbuild.v1.BuildTrigger;
Expand Down Expand Up @@ -132,6 +133,9 @@ public class CloudBuildStubSettings extends StubSettings<CloudBuildStubSettings>
private final UnaryCallSettings<RetryBuildRequest, Operation> retryBuildSettings;
private final OperationCallSettings<RetryBuildRequest, Build, BuildOperationMetadata>
retryBuildOperationSettings;
private final UnaryCallSettings<ApproveBuildRequest, Operation> approveBuildSettings;
private final OperationCallSettings<ApproveBuildRequest, Build, BuildOperationMetadata>
approveBuildOperationSettings;
private final UnaryCallSettings<CreateBuildTriggerRequest, BuildTrigger>
createBuildTriggerSettings;
private final UnaryCallSettings<GetBuildTriggerRequest, BuildTrigger> getBuildTriggerSettings;
Expand Down Expand Up @@ -371,6 +375,17 @@ public UnaryCallSettings<RetryBuildRequest, Operation> retryBuildSettings() {
return retryBuildOperationSettings;
}

/** Returns the object with the settings used for calls to approveBuild. */
public UnaryCallSettings<ApproveBuildRequest, Operation> approveBuildSettings() {
return approveBuildSettings;
}

/** Returns the object with the settings used for calls to approveBuild. */
public OperationCallSettings<ApproveBuildRequest, Build, BuildOperationMetadata>
approveBuildOperationSettings() {
return approveBuildOperationSettings;
}

/** Returns the object with the settings used for calls to createBuildTrigger. */
public UnaryCallSettings<CreateBuildTriggerRequest, BuildTrigger> createBuildTriggerSettings() {
return createBuildTriggerSettings;
Expand Down Expand Up @@ -543,6 +558,8 @@ protected CloudBuildStubSettings(Builder settingsBuilder) throws IOException {
cancelBuildSettings = settingsBuilder.cancelBuildSettings().build();
retryBuildSettings = settingsBuilder.retryBuildSettings().build();
retryBuildOperationSettings = settingsBuilder.retryBuildOperationSettings().build();
approveBuildSettings = settingsBuilder.approveBuildSettings().build();
approveBuildOperationSettings = settingsBuilder.approveBuildOperationSettings().build();
createBuildTriggerSettings = settingsBuilder.createBuildTriggerSettings().build();
getBuildTriggerSettings = settingsBuilder.getBuildTriggerSettings().build();
listBuildTriggersSettings = settingsBuilder.listBuildTriggersSettings().build();
Expand Down Expand Up @@ -575,6 +592,9 @@ public static class Builder extends StubSettings.Builder<CloudBuildStubSettings,
private final UnaryCallSettings.Builder<RetryBuildRequest, Operation> retryBuildSettings;
private final OperationCallSettings.Builder<RetryBuildRequest, Build, BuildOperationMetadata>
retryBuildOperationSettings;
private final UnaryCallSettings.Builder<ApproveBuildRequest, Operation> approveBuildSettings;
private final OperationCallSettings.Builder<ApproveBuildRequest, Build, BuildOperationMetadata>
approveBuildOperationSettings;
private final UnaryCallSettings.Builder<CreateBuildTriggerRequest, BuildTrigger>
createBuildTriggerSettings;
private final UnaryCallSettings.Builder<GetBuildTriggerRequest, BuildTrigger>
Expand Down Expand Up @@ -673,6 +693,8 @@ protected Builder(ClientContext clientContext) {
cancelBuildSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
retryBuildSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
retryBuildOperationSettings = OperationCallSettings.newBuilder();
approveBuildSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
approveBuildOperationSettings = OperationCallSettings.newBuilder();
createBuildTriggerSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
getBuildTriggerSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
listBuildTriggersSettings = PagedCallSettings.newBuilder(LIST_BUILD_TRIGGERS_PAGE_STR_FACT);
Expand All @@ -697,6 +719,7 @@ protected Builder(ClientContext clientContext) {
listBuildsSettings,
cancelBuildSettings,
retryBuildSettings,
approveBuildSettings,
createBuildTriggerSettings,
getBuildTriggerSettings,
listBuildTriggersSettings,
Expand All @@ -722,6 +745,8 @@ protected Builder(CloudBuildStubSettings settings) {
cancelBuildSettings = settings.cancelBuildSettings.toBuilder();
retryBuildSettings = settings.retryBuildSettings.toBuilder();
retryBuildOperationSettings = settings.retryBuildOperationSettings.toBuilder();
approveBuildSettings = settings.approveBuildSettings.toBuilder();
approveBuildOperationSettings = settings.approveBuildOperationSettings.toBuilder();
createBuildTriggerSettings = settings.createBuildTriggerSettings.toBuilder();
getBuildTriggerSettings = settings.getBuildTriggerSettings.toBuilder();
listBuildTriggersSettings = settings.listBuildTriggersSettings.toBuilder();
Expand All @@ -746,6 +771,7 @@ protected Builder(CloudBuildStubSettings settings) {
listBuildsSettings,
cancelBuildSettings,
retryBuildSettings,
approveBuildSettings,
createBuildTriggerSettings,
getBuildTriggerSettings,
listBuildTriggersSettings,
Expand Down Expand Up @@ -799,6 +825,11 @@ private static Builder initDefaults(Builder builder) {
.setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_1_codes"))
.setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_1_params"));

builder
.approveBuildSettings()
.setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_codes"))
.setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_params"));

builder
.createBuildTriggerSettings()
.setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_1_codes"))
Expand Down Expand Up @@ -905,6 +936,30 @@ private static Builder initDefaults(Builder builder) {
.setTotalTimeout(Duration.ofMillis(300000L))
.build()));

builder
.approveBuildOperationSettings()
.setInitialCallSettings(
UnaryCallSettings
.<ApproveBuildRequest, OperationSnapshot>newUnaryCallSettingsBuilder()
.setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_codes"))
.setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_params"))
.build())
.setResponseTransformer(
ProtoOperationTransformers.ResponseTransformer.create(Build.class))
.setMetadataTransformer(
ProtoOperationTransformers.MetadataTransformer.create(BuildOperationMetadata.class))
.setPollingAlgorithm(
OperationTimedPollAlgorithm.create(
RetrySettings.newBuilder()
.setInitialRetryDelay(Duration.ofMillis(5000L))
.setRetryDelayMultiplier(1.5)
.setMaxRetryDelay(Duration.ofMillis(45000L))
.setInitialRpcTimeout(Duration.ZERO)
.setRpcTimeoutMultiplier(1.0)
.setMaxRpcTimeout(Duration.ZERO)
.setTotalTimeout(Duration.ofMillis(300000L))
.build()));

builder
.runBuildTriggerOperationSettings()
.setInitialCallSettings(
Expand Down Expand Up @@ -1064,6 +1119,19 @@ public UnaryCallSettings.Builder<RetryBuildRequest, Operation> retryBuildSetting
return retryBuildOperationSettings;
}

/** Returns the builder for the settings used for calls to approveBuild. */
public UnaryCallSettings.Builder<ApproveBuildRequest, Operation> approveBuildSettings() {
return approveBuildSettings;
}

/** Returns the builder for the settings used for calls to approveBuild. */
@BetaApi(
"The surface for use by generated code is not stable yet and may change in the future.")
public OperationCallSettings.Builder<ApproveBuildRequest, Build, BuildOperationMetadata>
approveBuildOperationSettings() {
return approveBuildOperationSettings;
}

/** Returns the builder for the settings used for calls to createBuildTrigger. */
public UnaryCallSettings.Builder<CreateBuildTriggerRequest, BuildTrigger>
createBuildTriggerSettings() {
Expand Down