Repository: GoogleContainerTools/skaffold
Pull request #7550 (2022-06-14 19:06:34)

feat: add `hostPlatform` and `targetPlatforms` to event APIs
Modified:
`/v1/events:`
```
{
    "buildEvent": {
        "artifact": "skaffold-example",
        "status": "In Progress",
        "err": "",
        "errCode": "OK",
        "actionableErr": null,
        "hostPlatform": "darwin/arm64/v8",
        "targetPlatforms": "linux/arm64"
    }
}
```

`/v2/events:`

```
{
    "buildSubtaskEvent": {
        "id": "skaffold-example",
        "task_id": "Build-1",
        "artifact": "skaffold-example",
        "step": "Build",
        "status": "Succeeded",
        "actionableErr": null,
        "hostPlatform": "darwin/arm64/v8",
        "targetPlatforms": "linux/arm64"
    }
}
```


Patch:
diff --git a/docs-v2/content/en/api-v2/skaffold.swagger.json b/docs-v2/content/en/api-v2/skaffold.swagger.json
index cb5aa1685..7bfb89863 100644
--- a/docs-v2/content/en/api-v2/skaffold.swagger.json
+++ b/docs-v2/content/en/api-v2/skaffold.swagger.json
@@ -748,6 +748,12 @@
         },
         "actionableErr": {
           "$ref": "#/definitions/v2ActionableErr"
+        },
+        "hostPlatform": {
+          "type": "string"
+        },
+        "targetPlatforms": {
+          "type": "string"
         }
       },
       "description": "`BuildSubtaskvent` describes the build status per artifact, and will be emitted by Skaffold anytime a build starts or finishes, successfully or not.\nIf the build fails, an error will be attached to the event."
diff --git a/docs-v2/content/en/api/skaffold.swagger.json b/docs-v2/content/en/api/skaffold.swagger.json
index 220b6378e..1baf7a217 100644
--- a/docs-v2/content/en/api/skaffold.swagger.json
+++ b/docs-v2/content/en/api/skaffold.swagger.json
@@ -549,6 +549,18 @@
             "required": false,
             "type": "string"
           },
+          {
+            "name": "event.buildEvent.hostPlatform",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "event.buildEvent.targetPlatforms",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
           {
             "name": "event.deployEvent.status",
             "in": "query",
@@ -3508,6 +3520,12 @@
         },
         "actionableErr": {
           "$ref": "#/definitions/protoActionableErr"
+        },
+        "hostPlatform": {
+          "type": "string"
+        },
+        "targetPlatforms": {
+          "type": "string"
         }
       },
       "description": "`BuildEvent` describes the build status per artifact, and will be emitted by Skaffold anytime a build starts or finishes, successfully or not.\nIf the build fails, an error will be attached to the event."
diff --git a/docs-v2/content/en/docs/references/api-v2/grpc.md b/docs-v2/content/en/docs/references/api-v2/grpc.md
index cf23b2243..3dc09f9e7 100644
--- a/docs-v2/content/en/docs/references/api-v2/grpc.md
+++ b/docs-v2/content/en/docs/references/api-v2/grpc.md
@@ -186,6 +186,8 @@ If the build fails, an error will be attached to the event.
 | step | [string](#string) |  | which step of the build for the artifact oneof: Cache, Build, Push |
 | status | [string](#string) |  | artifact build status oneof: InProgress, Completed, Failed |
 | actionableErr | [ActionableErr](#proto.v2.ActionableErr) |  | actionable error message |
+| hostPlatform | [string](#string) |  | platform of the host machine. For example `linux/amd64` |
+| targetPlatforms | [string](#string) |  | comma-delimited list of build target platforms. For example `linux/amd64,linux/arm64` |
 
 
 
diff --git a/docs-v2/content/en/docs/references/api/grpc.md b/docs-v2/content/en/docs/references/api/grpc.md
index 6395b6433..eecb61e00 100644
--- a/docs-v2/content/en/docs/references/api/grpc.md
+++ b/docs-v2/content/en/docs/references/api/grpc.md
@@ -82,6 +82,8 @@ If the build fails, an error will be attached to the event.
 | err | [string](#string) |  | Deprecated. Use actionableErr.message. error when build status is Failed. |
 | errCode | [enums.StatusCode](#proto.enums.StatusCode) |  | Deprecated. Use actionableErr.errCode. status code representing success or failure |
 | actionableErr | [ActionableErr](#proto.ActionableErr) |  | actionable error message |
+| hostPlatform | [string](#string) |  | architecture of the host machine. For example `linux/amd64` |
+| targetPlatforms | [string](#string) |  | comma-delimited list of build target architectures. For example `linux/amd64,linux/arm64` |
 
 
 
diff --git a/docs-v2/content/en/samples/builders/ko-platforms.yaml b/docs-v2/content/en/samples/builders/ko-platforms.yaml
index d2e365a58..3e8a0e303 100644
--- a/docs-v2/content/en/samples/builders/ko-platforms.yaml
+++ b/docs-v2/content/en/samples/builders/ko-platforms.yaml
@@ -1,7 +1,5 @@
 build:
+  platforms: ["linux/amd64", "linux/arm64"]
   artifacts:
   - image: foo
-    ko: {}
-    platforms:
-    - linux/amd64
-    - linux/arm64
\ No newline at end of file
+    ko: {}
\ No newline at end of file
diff --git a/docs/content/en/api-v2/skaffold.swagger.json b/docs/content/en/api-v2/skaffold.swagger.json
index cb5aa1685..7bfb89863 100644
--- a/docs/content/en/api-v2/skaffold.swagger.json
+++ b/docs/content/en/api-v2/skaffold.swagger.json
@@ -748,6 +748,12 @@
         },
         "actionableErr": {
           "$ref": "#/definitions/v2ActionableErr"
+        },
+        "hostPlatform": {
+          "type": "string"
+        },
+        "targetPlatforms": {
+          "type": "string"
         }
       },
       "description": "`BuildSubtaskvent` describes the build status per artifact, and will be emitted by Skaffold anytime a build starts or finishes, successfully or not.\nIf the build fails, an error will be attached to the event."
diff --git a/docs/content/en/api/skaffold.swagger.json b/docs/content/en/api/skaffold.swagger.json
index 220b6378e..1baf7a217 100644
--- a/docs/content/en/api/skaffold.swagger.json
+++ b/docs/content/en/api/skaffold.swagger.json
@@ -549,6 +549,18 @@
             "required": false,
             "type": "string"
           },
+          {
+            "name": "event.buildEvent.hostPlatform",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "event.buildEvent.targetPlatforms",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
           {
             "name": "event.deployEvent.status",
             "in": "query",
@@ -3508,6 +3520,12 @@
         },
         "actionableErr": {
           "$ref": "#/definitions/protoActionableErr"
+        },
+        "hostPlatform": {
+          "type": "string"
+        },
+        "targetPlatforms": {
+          "type": "string"
         }
       },
       "description": "`BuildEvent` describes the build status per artifact, and will be emitted by Skaffold anytime a build starts or finishes, successfully or not.\nIf the build fails, an error will be attached to the event."
diff --git a/docs/content/en/docs/references/api-v2/grpc.md b/docs/content/en/docs/references/api-v2/grpc.md
index cf23b2243..3dc09f9e7 100644
--- a/docs/content/en/docs/references/api-v2/grpc.md
+++ b/docs/content/en/docs/references/api-v2/grpc.md
@@ -186,6 +186,8 @@ If the build fails, an error will be attached to the event.
 | step | [string](#string) |  | which step of the build for the artifact oneof: Cache, Build, Push |
 | status | [string](#string) |  | artifact build status oneof: InProgress, Completed, Failed |
 | actionableErr | [ActionableErr](#proto.v2.ActionableErr) |  | actionable error message |
+| hostPlatform | [string](#string) |  | platform of the host machine. For example `linux/amd64` |
+| targetPlatforms | [string](#string) |  | comma-delimited list of build target platforms. For example `linux/amd64,linux/arm64` |
 
 
 
diff --git a/docs/content/en/docs/references/api/grpc.md b/docs/content/en/docs/references/api/grpc.md
index 6395b6433..eecb61e00 100644
--- a/docs/content/en/docs/references/api/grpc.md
+++ b/docs/content/en/docs/references/api/grpc.md
@@ -82,6 +82,8 @@ If the build fails, an error will be attached to the event.
 | err | [string](#string) |  | Deprecated. Use actionableErr.message. error when build status is Failed. |
 | errCode | [enums.StatusCode](#proto.enums.StatusCode) |  | Deprecated. Use actionableErr.errCode. status code representing success or failure |
 | actionableErr | [ActionableErr](#proto.ActionableErr) |  | actionable error message |
+| hostPlatform | [string](#string) |  | architecture of the host machine. For example `linux/amd64` |
+| targetPlatforms | [string](#string) |  | comma-delimited list of build target architectures. For example `linux/amd64,linux/arm64` |
 
 
 
diff --git a/docs/content/en/samples/builders/ko-platforms.yaml b/docs/content/en/samples/builders/ko-platforms.yaml
index 080560735..3e8a0e303 100644
--- a/docs/content/en/samples/builders/ko-platforms.yaml
+++ b/docs/content/en/samples/builders/ko-platforms.yaml
@@ -1,7 +1,5 @@
 build:
+  platforms: ["linux/amd64", "linux/arm64"]
   artifacts:
   - image: foo
-    ko:
-      platforms:
-      - linux/amd64
-      - linux/arm64
\ No newline at end of file
+    ko: {}
\ No newline at end of file
diff --git a/integration/examples/helm-deployment/skaffold.yaml b/integration/examples/helm-deployment/skaffold.yaml
index 897d88caa..31a013ff6 100644
--- a/integration/examples/helm-deployment/skaffold.yaml
+++ b/integration/examples/helm-deployment/skaffold.yaml
@@ -3,7 +3,7 @@ kind: Config
 build:
   artifacts:
   - image: skaffold-helm
-deploy:
+manifests:
   helm:
     releases:
     - name: skaffold-helm
diff --git a/pkg/skaffold/build/cache/retrieve.go b/pkg/skaffold/build/cache/retrieve.go
index 7d5f72418..f7c816426 100644
--- a/pkg/skaffold/build/cache/retrieve.go
+++ b/pkg/skaffold/build/cache/retrieve.go
@@ -61,7 +61,7 @@ func (c *cache) Build(ctx context.Context, out io.Writer, tags tag.ImageTags, ar
 	var needToBuild []*latest.Artifact
 	var alreadyBuilt []graph.Artifact
 	for i, artifact := range artifacts {
-		eventV2.CacheCheckInProgress(artifact.ImageName)
+		eventV2.CacheCheckInProgress(artifact.ImageName, platforms.GetPlatforms(artifact.ImageName).String())
 		out, ctx := output.WithEventContext(ctx, out, constants.Build, artifact.ImageName)
 		output.Default.Fprintf(out, " - %s: ", artifact.ImageName)
 
@@ -73,14 +73,14 @@ func (c *cache) Build(ctx context.Context, out io.Writer, tags tag.ImageTags, ar
 			return nil, result.err
 
 		case needsBuilding:
-			eventV2.CacheCheckMiss(artifact.ImageName)
+			eventV2.CacheCheckMiss(artifact.ImageName, platforms.GetPlatforms(artifact.ImageName).String())
 			output.Yellow.Fprintln(out, "Not found. Building")
 			hashByName[artifact.ImageName] = result.Hash()
 			needToBuild = append(needToBuild, artifact)
 			continue
 
 		case needsTagging:
-			eventV2.CacheCheckHit(artifact.ImageName)
+			eventV2.CacheCheckHit(artifact.ImageName, platforms.GetPlatforms(artifact.ImageName).String())
 			output.Green.Fprintln(out, "Found. Tagging")
 			if err := result.Tag(ctx, c, platforms); err != nil {
 				endTrace(instrumentation.TraceEndError(err))
@@ -88,7 +88,7 @@ func (c *cache) Build(ctx context.Context, out io.Writer, tags tag.ImageTags, ar
 			}
 
 		case needsPushing:
-			eventV2.CacheCheckHit(artifact.ImageName)
+			eventV2.CacheCheckHit(artifact.ImageName, platforms.GetPlatforms(artifact.ImageName).String())
 			output.Green.Fprintln(out, "Found. Pushing")
 			if err := result.Push(ctx, out, c); err != nil {
 				endTrace(instrumentation.TraceEndError(err))
@@ -97,7 +97,7 @@ func (c *cache) Build(ctx context.Context, out io.Writer, tags tag.ImageTags, ar
 			}
 
 		default:
-			eventV2.CacheCheckHit(artifact.ImageName)
+			eventV2.CacheCheckHit(artifact.ImageName, platforms.GetPlatforms(artifact.ImageName).String())
 			isLocal, err := c.isLocalImage(artifact.ImageName)
 			if err != nil {
 				endTrace(instrumentation.TraceEndError(err))
diff --git a/pkg/skaffold/build/scheduler.go b/pkg/skaffold/build/scheduler.go
index 787af82d0..0edf680f1 100644
--- a/pkg/skaffold/build/scheduler.go
+++ b/pkg/skaffold/build/scheduler.go
@@ -92,15 +92,15 @@ func (s *scheduler) build(ctx context.Context, tags tag.ImageTags, platforms pla
 	err := n.waitForDependencies(ctx)
 	if err != nil {
 		// `waitForDependencies` only returns `context.Canceled` error
-		event.BuildCanceled(a.ImageName)
-		eventV2.BuildCanceled(a.ImageName, err)
+		event.BuildCanceled(a.ImageName, platforms.GetPlatforms(a.ImageName).String())
+		eventV2.BuildCanceled(a.ImageName, platforms.GetPlatforms(a.ImageName).String(), err)
 		return err
 	}
 	release := s.concurrencySem.acquire()
 	defer release()
 
-	event.BuildInProgress(a.ImageName)
-	eventV2.BuildInProgress(a.ImageName)
+	event.BuildInProgress(a.ImageName, platforms.GetPlatforms(a.ImageName).String())
+	eventV2.BuildInProgress(a.ImageName, platforms.GetPlatforms(a.ImageName).String())
 	ctx, endTrace := instrumentation.StartTrace(ctx, "build_BuildInProgress", map[string]string{
 		"ArtifactNumber": strconv.Itoa(i),
 		"ImageName":      instrumentation.PII(a.ImageName),
@@ -109,8 +109,8 @@ func (s *scheduler) build(ctx context.Context, tags tag.ImageTags, platforms pla
 
 	w, closeFn, err := s.logger.GetWriter(ctx)
 	if err != nil {
-		event.BuildFailed(a.ImageName, err)
-		eventV2.BuildFailed(a.ImageName, err)
+		event.BuildFailed(a.ImageName, platforms.GetPlatforms(a.ImageName).String(), err)
+		eventV2.BuildFailed(a.ImageName, platforms.GetPlatforms(a.ImageName).String(), err)
 		endTrace(instrumentation.TraceEndError(err))
 		return err
 	}
@@ -120,25 +120,25 @@ func (s *scheduler) build(ctx context.Context, tags tag.ImageTags, platforms pla
 	output.Default.Fprintf(w, "Building [%s]...\n", a.ImageName)
 	finalTag, err := performBuild(ctx, w, tags, platforms, a, s.artifactBuilder)
 	if err != nil {
-		event.BuildFailed(a.ImageName, err)
+		event.BuildFailed(a.ImageName, platforms.GetPlatforms(a.ImageName).String(), err)
 		endTrace(instrumentation.TraceEndError(err))
 		if errors.Is(ctx.Err(), context.Canceled) {
 			output.Yellow.Fprintf(w, "Build [%s] was canceled\n", a.ImageName)
-			eventV2.BuildCanceled(a.ImageName, err)
+			eventV2.BuildCanceled(a.ImageName, platforms.GetPlatforms(a.ImageName).String(), err)
 			return err
 		}
 		if s.reportFailure {
 			output.Red.Fprintf(w, "Build [%s] failed: %v\n", a.ImageName, err)
 		}
-		eventV2.BuildFailed(a.ImageName, err)
+		eventV2.BuildFailed(a.ImageName, platforms.GetPlatforms(a.ImageName).String(), err)
 		return fmt.Errorf("build [%s] failed: %w", a.ImageName, err)
 	}
 
 	output.Default.Fprintf(w, "Build [%s] succeeded\n", a.ImageName)
 	s.results.Record(a, finalTag)
 	n.markComplete()
-	event.BuildComplete(a.ImageName)
-	eventV2.BuildSucceeded(a.ImageName)
+	event.BuildComplete(a.ImageName, platforms.GetPlatforms(a.ImageName).String())
+	eventV2.BuildSucceeded(a.ImageName, platforms.GetPlatforms(a.ImageName).String())
 	return nil
 }
 
diff --git a/pkg/skaffold/event/event.go b/pkg/skaffold/event/event.go
index 02b90f732..5f5a9c49c 100644
--- a/pkg/skaffold/event/event.go
+++ b/pkg/skaffold/event/event.go
@@ -31,6 +31,7 @@ import (
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/constants"
 	sErrors "github.com/GoogleContainerTools/skaffold/pkg/skaffold/errors"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/instrumentation"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/platform"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/util"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/version"
 	"github.com/GoogleContainerTools/skaffold/proto/v1"
@@ -309,29 +310,47 @@ func DeployComplete() {
 }
 
 // BuildInProgress notifies that a build has been started.
-func BuildInProgress(imageName string) {
-	handler.handleBuildEvent(&proto.BuildEvent{Artifact: imageName, Status: InProgress})
+func BuildInProgress(imageName, platforms string) {
+	handler.handleBuildEvent(&proto.BuildEvent{
+		Artifact:        imageName,
+		TargetPlatforms: platforms,
+		HostPlatform:    platform.Host.String(),
+		Status:          InProgress,
+	})
 }
 
 // BuildCanceled notifies that a build has been canceled.
-func BuildCanceled(imageName string) {
-	handler.handleBuildEvent(&proto.BuildEvent{Artifact: imageName, Status: Canceled})
+func BuildCanceled(imageName, platforms string) {
+	handler.handleBuildEvent(&proto.BuildEvent{
+		Artifact:        imageName,
+		TargetPlatforms: platforms,
+		HostPlatform:    platform.Host.String(),
+		Status:          Canceled,
+	})
 }
 
 // BuildFailed notifies that a build has failed.
-func BuildFailed(imageName string, err error) {
+func BuildFailed(imageName, platforms string, err error) {
 	aiErr := sErrors.ActionableErr(handler.cfg, constants.Build, err)
 	handler.handleBuildEvent(&proto.BuildEvent{
-		Artifact:      imageName,
-		Status:        Failed,
-		Err:           err.Error(),
-		ErrCode:       aiErr.ErrCode,
-		ActionableErr: aiErr})
+		Artifact:        imageName,
+		TargetPlatforms: platforms,
+		HostPlatform:    platform.Host.String(),
+		Status:          Failed,
+		Err:             err.Error(),
+		ErrCode:         aiErr.ErrCode,
+		ActionableErr:   aiErr,
+	})
 }
 
 // BuildComplete notifies that a build has completed.
-func BuildComplete(imageName string) {
-	handler.handleBuildEvent(&proto.BuildEvent{Artifact: imageName, Status: Complete})
+func BuildComplete(imageName, platforms string) {
+	handler.handleBuildEvent(&proto.BuildEvent{
+		Artifact:        imageName,
+		TargetPlatforms: platforms,
+		HostPlatform:    platform.Host.String(),
+		Status:          Complete,
+	})
 }
 
 // TestInProgress notifies that a test has been started.
@@ -654,6 +673,9 @@ func (ev *eventHandler) handleExec(f firedEvent) {
 		rse := e.ResourceStatusCheckEvent
 		rseName := rse.Resource
 		ev.stateLock.Lock()
+		if ev.state.StatusCheckState.Resources == nil {
+			ev.state.StatusCheckState.Resources = map[string]string{}
+		}
 		ev.state.StatusCheckState.Resources[rseName] = rse.Status
 		ev.stateLock.Unlock()
 		switch rse.Status {
diff --git a/pkg/skaffold/event/v2/build.go b/pkg/skaffold/event/v2/build.go
index 0637666ec..22b1d6179 100644
--- a/pkg/skaffold/event/v2/build.go
+++ b/pkg/skaffold/event/v2/build.go
@@ -21,6 +21,7 @@ import (
 
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/constants"
 	sErrors "github.com/GoogleContainerTools/skaffold/pkg/skaffold/errors"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/platform"
 	proto "github.com/GoogleContainerTools/skaffold/proto/v2"
 )
 
@@ -29,47 +30,49 @@ const (
 	Build = "Build"
 )
 
-func CacheCheckInProgress(artifact string) {
-	buildSubtaskEvent(artifact, Cache, InProgress, nil)
+func CacheCheckInProgress(artifact, platforms string) {
+	buildSubtaskEvent(artifact, platforms, Cache, InProgress, nil)
 }
 
-func CacheCheckMiss(artifact string) {
-	buildSubtaskEvent(artifact, Cache, Failed, nil)
+func CacheCheckMiss(artifact, platforms string) {
+	buildSubtaskEvent(artifact, platforms, Cache, Failed, nil)
 }
 
-func CacheCheckHit(artifact string) {
-	buildSubtaskEvent(artifact, Cache, Succeeded, nil)
+func CacheCheckHit(artifact, platforms string) {
+	buildSubtaskEvent(artifact, platforms, Cache, Succeeded, nil)
 }
 
-func BuildInProgress(artifact string) {
-	buildSubtaskEvent(artifact, Build, InProgress, nil)
+func BuildInProgress(artifact, platforms string) {
+	buildSubtaskEvent(artifact, platforms, Build, InProgress, nil)
 }
 
-func BuildFailed(artifact string, err error) {
-	buildSubtaskEvent(artifact, Build, Failed, err)
+func BuildFailed(artifact, platforms string, err error) {
+	buildSubtaskEvent(artifact, platforms, Build, Failed, err)
 }
 
-func BuildSucceeded(artifact string) {
-	buildSubtaskEvent(artifact, Build, Succeeded, nil)
+func BuildSucceeded(artifact, platforms string) {
+	buildSubtaskEvent(artifact, platforms, Build, Succeeded, nil)
 }
 
-func BuildCanceled(artifact string, err error) {
-	buildSubtaskEvent(artifact, Build, Canceled, err)
+func BuildCanceled(artifact, platforms string, err error) {
+	buildSubtaskEvent(artifact, platforms, Build, Canceled, err)
 }
 
-func buildSubtaskEvent(artifact, step, status string, err error) {
+func buildSubtaskEvent(artifact, platforms, step, status string, err error) {
 	var aErr *proto.ActionableErr
 	if err != nil {
 		aErr = sErrors.ActionableErrV2(handler.cfg, constants.Build, err)
 		handler.sendErrorMessage(constants.Build, artifact, err)
 	}
 	handler.handleBuildSubtaskEvent(&proto.BuildSubtaskEvent{
-		Id:            artifact,
-		TaskId:        fmt.Sprintf("%s-%d", constants.Build, handler.iteration),
-		Artifact:      artifact,
-		Step:          step,
-		Status:        status,
-		ActionableErr: aErr,
+		Id:              artifact,
+		TaskId:          fmt.Sprintf("%s-%d", constants.Build, handler.iteration),
+		Artifact:        artifact,
+		TargetPlatforms: platforms,
+		HostPlatform:    platform.Host.String(),
+		Step:            step,
+		Status:          status,
+		ActionableErr:   aErr,
 	})
 }
 
diff --git a/pkg/skaffold/initializer/config.go b/pkg/skaffold/initializer/config.go
index 308389116..49bc7f5a5 100644
--- a/pkg/skaffold/initializer/config.go
+++ b/pkg/skaffold/initializer/config.go
@@ -25,6 +25,7 @@ import (
 
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/build"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/deploy"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/render"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/output/log"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/warnings"
@@ -35,7 +36,7 @@ var (
 	getWd = os.Getwd
 )
 
-func generateSkaffoldConfig(b build.Initializer, d deploy.Initializer) *latest.SkaffoldConfig {
+func generateSkaffoldConfig(b build.Initializer, r render.Initializer, d deploy.Initializer) *latest.SkaffoldConfig {
 	// if we're here, the user has no skaffold yaml so we need to generate one
 	// if the user doesn't have any k8s yamls, generate one for each dockerfile
 	log.Entry(context.TODO()).Info("generating skaffold config")
@@ -45,8 +46,9 @@ func generateSkaffoldConfig(b build.Initializer, d deploy.Initializer) *latest.S
 		warnings.Printf("Couldn't generate default config name: %s", err.Error())
 	}
 
-	deploy, profiles := d.DeployConfig()
-	build, portForward := b.BuildConfig()
+	renderConfig, profiles := r.RenderConfig()
+	deployConfig := d.DeployConfig()
+	buildConfig, portForward := b.BuildConfig()
 
 	return &latest.SkaffoldConfig{
 		APIVersion: latest.Version,
@@ -55,8 +57,9 @@ func generateSkaffoldConfig(b build.Initializer, d deploy.Initializer) *latest.S
 			Name: name,
 		},
 		Pipeline: latest.Pipeline{
-			Build:       build,
-			Deploy:      deploy,
+			Build:       buildConfig,
+			Render:      renderConfig,
+			Deploy:      deployConfig,
 			PortForward: portForward,
 		},
 		Profiles: profiles,
diff --git a/pkg/skaffold/initializer/deploy/helm.go b/pkg/skaffold/initializer/deploy/helm.go
index f14442426..8fb5ca62e 100644
--- a/pkg/skaffold/initializer/deploy/helm.go
+++ b/pkg/skaffold/initializer/deploy/helm.go
@@ -20,16 +20,12 @@ import (
 	"context"
 	"io/ioutil"
 	"os"
-	"os/exec"
 	"path/filepath"
 	"strings"
 
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/analyze"
-	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/errors"
-	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/kubernetes"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/output/log"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
-	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/yaml"
 )
 
@@ -39,9 +35,7 @@ const (
 
 // for testing
 var (
-	readFile    = ioutil.ReadFile
-	tempDir     = ioutil.TempDir
-	osRemoveAll = os.RemoveAll
+	readFile = ioutil.ReadFile
 )
 
 // helm implements deploymentInitializer for the helm deployer.
@@ -76,7 +70,7 @@ func newHelmInitializer(chartValuesMap map[string][]string) helm {
 
 // DeployConfig implements the Initializer interface and generates
 // a helm configuration
-func (h helm) DeployConfig() (latest.DeployConfig, []latest.Profile) {
+func (h helm) DeployConfig() latest.DeployConfig {
 	releases := []latest.HelmRelease{}
 	for _, ch := range h.charts {
 		// to make skaffold.yaml more portable across OS-es we should always generate /-delimited filePaths
@@ -100,59 +94,7 @@ func (h helm) DeployConfig() (latest.DeployConfig, []latest.Profile) {
 				Releases: releases,
 			},
 		},
-	}, nil
-}
-
-// Validate implements the Initializer interface and ensures
-// we have at least one manifest before generating a config
-func (h helm) Validate() error {
-	if len(h.charts) == 0 {
-		return errors.NoHelmChartsErr{}
 	}
-	return nil
-}
-
-// we don't generate manifests for helm
-func (h helm) AddManifestForImage(string, string) {}
-
-// GetImages return an empty string for helm.
-func (h helm) GetImages() []string {
-	// Run helm template in each top level dir.
-	// Parse templated manifest files and then get image names.
-	artifacts := []string{}
-	td, err := tempDir("", "skaffold_")
-	if err != nil {
-		log.Entry(context.TODO()).Fatalf("cannot create temporary directory. Encountered error: %s", err)
-	}
-	defer osRemoveAll(td)
-	for _, ch := range h.charts {
-		args := []string{"template", ch.path}
-		for _, v := range ch.valueFiles {
-			args = append(args, "-f", v)
-		}
-		o, err := tempDir(td, ch.name)
-		if err != nil {
-			log.Entry(context.TODO()).Fatalf("cannot create temporary directory. Encountered error: %s", err)
-		}
-		args = append(args, "--output-dir", o)
-		cmd := exec.Command("helm", args...)
-		err = util.RunCmd(context.TODO(), cmd)
-		if err != nil {
-			log.Entry(context.TODO()).Warnf("could not initialize builders for helm chart %q.\nCommand %q encountered error: %s", ch.name, cmd, err)
-			continue
-		}
-		// read all templates generated
-		files := getAllFiles(o)
-		for _, file := range files {
-			images, err := kubernetes.ParseImagesFromKubernetesYaml(file)
-			if err != nil {
-				log.Entry(context.TODO()).Warnf("could not initialize builder for helm chart %q.\nCould not parse %q output due to error: %s", ch.name, cmd, err)
-			} else {
-				artifacts = append(artifacts, images...)
-			}
-		}
-	}
-	return artifacts
 }
 
 func parseChartValues(fp string) (map[string]interface{}, error) {
@@ -193,21 +135,3 @@ func getVersion(m map[string]interface{}) string {
 	}
 	return ""
 }
-
-func getAllFiles(o string) []string {
-	var files []string
-	err := filepath.Walk(o, func(path string, info os.FileInfo, err error) error {
-		if err != nil {
-			return err
-		}
-		if info.IsDir() {
-			return nil
-		}
-		files = append(files, path)
-		return nil
-	})
-	if err != nil {
-		log.Entry(context.TODO()).Fatalf("could not walk directory %q due to error: %s", o, err)
-	}
-	return files
-}
diff --git a/pkg/skaffold/initializer/deploy/init.go b/pkg/skaffold/initializer/deploy/init.go
index b540521f8..1903c8dbd 100644
--- a/pkg/skaffold/initializer/deploy/init.go
+++ b/pkg/skaffold/initializer/deploy/init.go
@@ -19,80 +19,30 @@ package deploy
 import (
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/analyze"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/config"
-	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/errors"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
 )
 
 // Initializer detects a deployment type and is able to extract image names from it
 type Initializer interface {
-	// deployConfig generates Deploy Config for skaffold configuration.
-	DeployConfig() (latest.DeployConfig, []latest.Profile)
-	// GetImages fetches all the images defined in the manifest files.
-	GetImages() []string
-	// Validate ensures preconditions are met before generating a skaffold config
-	Validate() error
-	// AddManifestForImage adds a provided manifest for a given image to the initializer
-	AddManifestForImage(string, string)
+	// DeployConfig generates Deploy Config for skaffold configuration.
+	DeployConfig() latest.DeployConfig
 }
 
-type cliDeployInit struct {
-	cliKubernetesManifests []string
-}
-
-func (c *cliDeployInit) DeployConfig() (latest.DeployConfig, []latest.Profile) {
-	return latest.DeployConfig{
-		DeployType: latest.DeployType{
-			KubectlDeploy: &latest.KubectlDeploy{
-				Manifests: c.cliKubernetesManifests,
-			},
-		},
-	}, nil
-}
-
-func (c *cliDeployInit) GetImages() []string {
-	return nil
-}
-
-func (c *cliDeployInit) Validate() error {
-	if len(c.cliKubernetesManifests) == 0 {
-		return errors.NoManifestErr{}
-	}
-	return nil
-}
-
-func (c *cliDeployInit) AddManifestForImage(string, string) {}
-
 type emptyDeployInit struct {
 }
 
-func (e *emptyDeployInit) DeployConfig() (latest.DeployConfig, []latest.Profile) {
-	return latest.DeployConfig{}, nil
-}
-
-func (e *emptyDeployInit) GetImages() []string {
-	return nil
+func (e *emptyDeployInit) DeployConfig() latest.DeployConfig {
+	return latest.DeployConfig{}
 }
 
-func (e *emptyDeployInit) Validate() error {
-	return nil
-}
-
-func (e *emptyDeployInit) AddManifestForImage(string, string) {}
-
-// if any CLI manifests are provided, we always use those as part of a kubectl deploy first
-// if not, then if a kustomization yaml is found, we use that next
-// otherwise, default to a kubectl deploy.
-func NewInitializer(manifests, bases, kustomizations []string, h analyze.HelmChartInfo, c config.Config) Initializer {
+// NewInitializer if any helm charts are provided we use HelmInitializer, otherwise we use empty initializer.
+func NewInitializer(h analyze.HelmChartInfo, c config.Config) Initializer {
 	switch {
 	case c.SkipDeploy:
 		return &emptyDeployInit{}
-	case len(c.CliKubernetesManifests) > 0:
-		return &cliDeployInit{c.CliKubernetesManifests}
-	case len(kustomizations) > 0:
-		return newKustomizeInitializer(c.DefaultKustomization, bases, kustomizations, manifests)
 	case len(h.Charts()) > 0:
 		return newHelmInitializer(h.Charts())
 	default:
-		return newKubectlInitializer(manifests)
+		return &emptyDeployInit{}
 	}
 }
diff --git a/pkg/skaffold/initializer/init.go b/pkg/skaffold/initializer/init.go
index 2d23fc4b8..c91b23092 100644
--- a/pkg/skaffold/initializer/init.go
+++ b/pkg/skaffold/initializer/init.go
@@ -28,6 +28,7 @@ import (
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/config"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/deploy"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/prompt"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/render"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/yaml"
 )
@@ -67,8 +68,9 @@ func AnalyzeProject(c config.Config) (*analyze.ProjectAnalysis, error) {
 // Initialize uses the information gathered by the analyzer to create a skaffold config and generate kubernetes manifests.
 // The returned map[string][]byte represents a mapping from generated config name to its respective manifest data held in a []byte
 func Initialize(out io.Writer, c config.Config, a *analyze.ProjectAnalysis) (*latest.SkaffoldConfig, map[string][]byte, error) {
-	deployInitializer := deploy.NewInitializer(a.Manifests(), a.KustomizeBases(), a.KustomizePaths(), a.HelmChartInfo(), c)
-	images := deployInitializer.GetImages()
+	renderInitializer := render.NewInitializer(a.Manifests(), a.KustomizeBases(), a.KustomizePaths(), a.HelmChartInfo(), c)
+	deployInitializer := deploy.NewInitializer(a.HelmChartInfo(), c)
+	images := renderInitializer.GetImages()
 
 	buildInitializer := build.NewInitializer(a.Builders(), c)
 	if err := buildInitializer.ProcessImages(images); err != nil {
@@ -79,19 +81,19 @@ func Initialize(out io.Writer, c config.Config, a *analyze.ProjectAnalysis) (*la
 		return nil, nil, buildInitializer.PrintAnalysis(out)
 	}
 
-	newManifests, err := generateManifests(out, c, buildInitializer, deployInitializer)
+	newManifests, err := generateManifests(out, c, buildInitializer, renderInitializer)
 	if err != nil {
 		return nil, nil, err
 	}
 
-	if errV := deployInitializer.Validate(); errV != nil {
+	if errV := renderInitializer.Validate(); errV != nil {
 		return nil, nil, errV
 	}
 
-	return generateSkaffoldConfig(buildInitializer, deployInitializer), newManifests, nil
+	return generateSkaffoldConfig(buildInitializer, renderInitializer, deployInitializer), newManifests, nil
 }
 
-func generateManifests(out io.Writer, c config.Config, bInitializer build.Initializer, dInitializer deploy.Initializer) (map[string][]byte, error) {
+func generateManifests(out io.Writer, c config.Config, bInitializer build.Initializer, rInitializer render.Initializer) (map[string][]byte, error) {
 	var generatedManifests map[string][]byte
 
 	generatedManifestPairs, err := bInitializer.GenerateManifests(out, c.Force, c.EnableManifestGeneration)
@@ -100,7 +102,7 @@ func generateManifests(out io.Writer, c config.Config, bInitializer build.Initia
 	}
 	generatedManifests = make(map[string][]byte, len(generatedManifestPairs))
 	for pair, manifest := range generatedManifestPairs {
-		dInitializer.AddManifestForImage(pair.ManifestPath, pair.ImageName)
+		rInitializer.AddManifestForImage(pair.ManifestPath, pair.ImageName)
 		generatedManifests[pair.ManifestPath] = manifest
 	}
 
diff --git a/pkg/skaffold/initializer/render/helm.go b/pkg/skaffold/initializer/render/helm.go
new file mode 100644
index 000000000..da451b2f9
--- /dev/null
+++ b/pkg/skaffold/initializer/render/helm.go
@@ -0,0 +1,188 @@
+/*
+Copyright 2022 The Skaffold Authors
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package render
+
+import (
+	"context"
+	"io/ioutil"
+	"os"
+	"os/exec"
+	"path/filepath"
+
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/analyze"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/errors"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/kubernetes"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/output/log"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/yaml"
+)
+
+const (
+	nameKey = "name"
+)
+
+// for testing
+var (
+	readFile    = ioutil.ReadFile
+	tempDir     = ioutil.TempDir
+	osRemoveAll = os.RemoveAll
+)
+
+// helm implements deploymentInitializer for the helm deployer.
+type helm struct {
+	charts []chart
+}
+
+type chart struct {
+	name        string
+	chartValues map[string]interface{}
+	path        string
+	valueFiles  []string
+	version     string
+}
+
+// newHelmInitializer returns a helm config generator.
+func newHelmInitializer(chartValuesMap map[string][]string) helm {
+	var charts []chart
+	for chDir, vfs := range chartValuesMap {
+		chFile := filepath.Join(chDir, analyze.ChartYaml)
+		parsed, err := parseChartValues(chFile)
+		if err != nil {
+			log.Entry(context.TODO()).Infof("Skipping chart dir %s, as %s could not be parsed as valid yaml", chDir, chFile)
+			continue
+		}
+		charts = append(charts, buildChart(parsed, chDir, vfs))
+	}
+	return helm{
+		charts: charts,
+	}
+}
+
+func (h helm) AddManifestForImage(string, string) {}
+
+// RenderConfig implements the Initializer interface and generates
+// skaffold kubectl render config.
+func (h helm) RenderConfig() (latest.RenderConfig, []latest.Profile) {
+	return latest.RenderConfig{}, nil
+}
+
+// Validate implements the Initializer interface and ensures
+// we have at least one manifest before generating a config
+func (h helm) Validate() error {
+	if len(h.charts) == 0 {
+		return errors.NoHelmChartsErr{}
+	}
+	return nil
+}
+
+// GetImages return an empty string for helm.
+func (h helm) GetImages() []string {
+	// Run helm template in each top level dir.
+	// Parse templated manifest files and then get image names.
+	artifacts := []string{}
+	td, err := tempDir("", "skaffold_")
+	if err != nil {
+		log.Entry(context.TODO()).Fatalf("cannot create temporary directory. Encountered error: %s", err)
+	}
+	defer osRemoveAll(td)
+	for _, ch := range h.charts {
+		args := []string{"template", ch.path}
+		for _, v := range ch.valueFiles {
+			args = append(args, "-f", v)
+		}
+		o, err := tempDir(td, ch.name)
+		if err != nil {
+			log.Entry(context.TODO()).Fatalf("cannot create temporary directory. Encountered error: %s", err)
+		}
+		args = append(args, "--output-dir", o)
+		cmd := exec.Command("helm", args...)
+		err = util.RunCmd(context.TODO(), cmd)
+		if err != nil {
+			log.Entry(context.TODO()).Warnf("could not initialize builders for helm chart %q.\nCommand %q encountered error: %s", ch.name, cmd, err)
+			continue
+		}
+		// read all templates generated
+		files := getAllFiles(o)
+		for _, file := range files {
+			images, err := kubernetes.ParseImagesFromKubernetesYaml(file)
+			if err != nil {
+				log.Entry(context.TODO()).Warnf("could not initialize builder for helm chart %q.\nCould not parse %q output due to error: %s", ch.name, cmd, err)
+			} else {
+				artifacts = append(artifacts, images...)
+			}
+		}
+	}
+	return artifacts
+}
+
+func parseChartValues(fp string) (map[string]interface{}, error) {
+	in, err := readFile(fp)
+	if err != nil {
+		return nil, err
+	}
+	m := map[string]interface{}{}
+	if errY := yaml.UnmarshalStrict(in, &m); errY != nil {
+		return nil, errY
+	}
+	return m, nil
+}
+
+func getChartName(parsed map[string]interface{}, chDir string) string {
+	if v, ok := parsed[nameKey]; ok {
+		return v.(string)
+	}
+	return filepath.Base(chDir)
+}
+
+func buildChart(parsed map[string]interface{}, chDir string, vfs []string) chart {
+	ch := chart{
+		chartValues: parsed,
+		name:        getChartName(parsed, chDir),
+		path:        chDir,
+		valueFiles:  vfs,
+	}
+	if v := getVersion(parsed); v != "" {
+		ch.version = v
+	}
+	return ch
+}
+
+func getVersion(m map[string]interface{}) string {
+	if v, ok := m["version"]; ok {
+		return v.(string)
+	}
+	return ""
+}
+
+func getAllFiles(o string) []string {
+	var files []string
+	err := filepath.Walk(o, func(path string, info os.FileInfo, err error) error {
+		if err != nil {
+			return err
+		}
+		if info.IsDir() {
+			return nil
+		}
+		files = append(files, path)
+		return nil
+	})
+	if err != nil {
+		log.Entry(context.TODO()).Fatalf("could not walk directory %q due to error: %s", o, err)
+	}
+	return files
+}
diff --git a/pkg/skaffold/initializer/render/init.go b/pkg/skaffold/initializer/render/init.go
new file mode 100644
index 000000000..4ce9d2dcd
--- /dev/null
+++ b/pkg/skaffold/initializer/render/init.go
@@ -0,0 +1,75 @@
+/*
+Copyright 2022 The Skaffold Authors
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package render
+
+import (
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/analyze"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/config"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/errors"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
+)
+
+// Initializer detects a deployment type and is able to extract image names from it
+type Initializer interface {
+	// renderConfig generates Render Config for skaffold configuration.
+	RenderConfig() (latest.RenderConfig, []latest.Profile)
+	// GetImages fetches all the images defined in the manifest files.
+	GetImages() []string
+	// Validate ensures preconditions are met before generating a skaffold config
+	Validate() error
+	// AddManifestForImage adds a provided manifest for a given image to the initializer
+	AddManifestForImage(string, string)
+}
+
+type cliManifestsInit struct {
+	cliKubernetesManifests []string
+}
+
+func (c *cliManifestsInit) RenderConfig() (latest.RenderConfig, []latest.Profile) {
+	return latest.RenderConfig{
+		Generate: latest.Generate{RawK8s: c.cliKubernetesManifests},
+	}, nil
+}
+
+func (c *cliManifestsInit) GetImages() []string {
+	return nil
+}
+
+func (c *cliManifestsInit) Validate() error {
+	if len(c.cliKubernetesManifests) == 0 {
+		return errors.NoManifestErr{}
+	}
+	return nil
+}
+
+func (c *cliManifestsInit) AddManifestForImage(string, string) {}
+
+// if any CLI manifests are provided, we always use those as part of a kubectl render first
+// if not, then if a kustomization yaml is found, we use that next
+// otherwise, default to a kubectl render.
+func NewInitializer(manifests, bases, kustomizations []string, h analyze.HelmChartInfo, c config.Config) Initializer {
+	switch {
+	case len(c.CliKubernetesManifests) > 0:
+		return &cliManifestsInit{c.CliKubernetesManifests}
+	case len(kustomizations) > 0:
+		return newKustomizeInitializer(c.DefaultKustomization, bases, kustomizations, manifests)
+	case len(h.Charts()) > 0:
+		return newHelmInitializer(h.Charts())
+	default:
+		return newKubectlInitializer(manifests)
+	}
+}
diff --git a/pkg/skaffold/initializer/deploy/kubectl.go b/pkg/skaffold/initializer/render/kubectl.go
similarity index 81%
rename from pkg/skaffold/initializer/deploy/kubectl.go
rename to pkg/skaffold/initializer/render/kubectl.go
index 7c732e6b0..c3ffa32fa 100644
--- a/pkg/skaffold/initializer/deploy/kubectl.go
+++ b/pkg/skaffold/initializer/render/kubectl.go
@@ -1,5 +1,5 @@
 /*
-Copyright 2019 The Skaffold Authors
+Copyright 2022 The Skaffold Authors
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
-package deploy
+package render
 
 import (
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/errors"
@@ -22,7 +22,7 @@ import (
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
 )
 
-// kubectl implements deploymentInitializer for the kubectl deployer.
+// kubectl implements render Initializer for the kubectl renderer.
 type kubectl struct {
 	configs []string // the k8s manifest files present in the project
 	images  []string // the images parsed from the k8s manifest files
@@ -44,14 +44,12 @@ func newKubectlInitializer(potentialConfigs []string) *kubectl {
 	}
 }
 
-// deployConfig implements the Initializer interface and generates
-// skaffold kubectl deployment config.
-func (k *kubectl) DeployConfig() (latest.DeployConfig, []latest.Profile) {
-	return latest.DeployConfig{
-		DeployType: latest.DeployType{
-			KubectlDeploy: &latest.KubectlDeploy{
-				Manifests: k.configs,
-			},
+// RenderConfig implements the Initializer interface and generates
+// skaffold kubectl render config.
+func (k *kubectl) RenderConfig() (latest.RenderConfig, []latest.Profile) {
+	return latest.RenderConfig{
+		Generate: latest.Generate{
+			RawK8s: k.configs,
 		},
 	}, nil
 }
diff --git a/pkg/skaffold/initializer/deploy/kustomize.go b/pkg/skaffold/initializer/render/kustomize.go
similarity index 74%
rename from pkg/skaffold/initializer/deploy/kustomize.go
rename to pkg/skaffold/initializer/render/kustomize.go
index 1903e978c..f67a59c10 100644
--- a/pkg/skaffold/initializer/deploy/kustomize.go
+++ b/pkg/skaffold/initializer/render/kustomize.go
@@ -1,5 +1,5 @@
 /*
-Copyright 2020 The Skaffold Authors
+Copyright 2022 The Skaffold Authors
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
@@ -14,13 +14,12 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
-package deploy
+package render
 
 import (
 	"context"
 	"path/filepath"
 
-	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/deploy/kustomize/constants"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/initializer/errors"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/kubernetes"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/output/log"
@@ -52,25 +51,20 @@ func newKustomizeInitializer(defaultKustomization string, bases, kustomizations,
 	}
 }
 
-// deployConfig implements the Initializer interface and generates
+// RenderConfig implements the Initializer interface and generates
 // a kustomize deployment config.
-func (k *kustomize) DeployConfig() (latest.DeployConfig, []latest.Profile) {
-	var kustomizeConfig *latest.KustomizeDeploy
+func (k *kustomize) RenderConfig() (latest.RenderConfig, []latest.Profile) {
+	var kustomizeConfig *latest.Kustomize
 	var profiles []latest.Profile
 
-	// if there's only one kustomize path, either leave it blank (if it's the default path),
-	// or generate a config with that single path and return it
+	// if there's only one kustomize path, generate a config with that single path and return it
 	if len(k.kustomizations) == 1 {
-		if k.kustomizations[0] == constants.DefaultKustomizePath {
-			kustomizeConfig = &latest.KustomizeDeploy{}
-		} else {
-			kustomizeConfig = &latest.KustomizeDeploy{
-				KustomizePaths: k.kustomizations,
-			}
+		kustomizeConfig = &latest.Kustomize{
+			Paths: k.kustomizations,
 		}
-		return latest.DeployConfig{
-			DeployType: latest.DeployType{
-				KustomizeDeploy: kustomizeConfig,
+		return latest.RenderConfig{
+			Generate: latest.Generate{
+				Kustomize: kustomizeConfig,
 			},
 		}, nil
 	}
@@ -105,17 +99,17 @@ func (k *kustomize) DeployConfig() (latest.DeployConfig, []latest.Profile) {
 
 	for _, kustomization := range k.kustomizations {
 		if kustomization == defaultKustomization {
-			kustomizeConfig = &latest.KustomizeDeploy{
-				KustomizePaths: []string{defaultKustomization},
+			kustomizeConfig = &latest.Kustomize{
+				Paths: []string{defaultKustomization},
 			}
 		} else {
 			profiles = append(profiles, latest.Profile{
 				Name: filepath.Base(kustomization),
 				Pipeline: latest.Pipeline{
-					Deploy: latest.DeployConfig{
-						DeployType: latest.DeployType{
-							KustomizeDeploy: &latest.KustomizeDeploy{
-								KustomizePaths: []string{kustomization},
+					Render: latest.RenderConfig{
+						Generate: latest.Generate{
+							Kustomize: &latest.Kustomize{
+								Paths: []string{kustomization},
 							},
 						},
 					},
@@ -124,9 +118,9 @@ func (k *kustomize) DeployConfig() (latest.DeployConfig, []latest.Profile) {
 		}
 	}
 
-	return latest.DeployConfig{
-		DeployType: latest.DeployType{
-			KustomizeDeploy: kustomizeConfig,
+	return latest.RenderConfig{
+		Generate: latest.Generate{
+			Kustomize: kustomizeConfig,
 		},
 	}, profiles
 }
@@ -146,5 +140,4 @@ func (k *kustomize) Validate() error {
 	return nil
 }
 
-// we don't generate k8s manifests for a kustomize deploy
 func (k *kustomize) AddManifestForImage(string, string) {}
diff --git a/proto/v1/skaffold.pb.go b/proto/v1/skaffold.pb.go
index 7355f8f74..9a60b3cd0 100644
--- a/proto/v1/skaffold.pb.go
+++ b/proto/v1/skaffold.pb.go
@@ -1641,11 +1641,13 @@ type BuildEvent struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Artifact      string           `protobuf:"bytes,1,opt,name=artifact,proto3" json:"artifact,omitempty"`                            // artifact name
-	Status        string           `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`                                // artifact build status oneof: InProgress, Completed, Failed
-	Err           string           `protobuf:"bytes,3,opt,name=err,proto3" json:"err,omitempty"`                                      // Deprecated. Use actionableErr.message. error when build status is Failed.
-	ErrCode       enums.StatusCode `protobuf:"varint,4,opt,name=errCode,proto3,enum=proto.enums.StatusCode" json:"errCode,omitempty"` // Deprecated. Use actionableErr.errCode. status code representing success or failure
-	ActionableErr *ActionableErr   `protobuf:"bytes,5,opt,name=actionableErr,proto3" json:"actionableErr,omitempty"`                  // actionable error message
+	Artifact        string           `protobuf:"bytes,1,opt,name=artifact,proto3" json:"artifact,omitempty"`                            // artifact name
+	Status          string           `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`                                // artifact build status oneof: InProgress, Completed, Failed
+	Err             string           `protobuf:"bytes,3,opt,name=err,proto3" json:"err,omitempty"`                                      // Deprecated. Use actionableErr.message. error when build status is Failed.
+	ErrCode         enums.StatusCode `protobuf:"varint,4,opt,name=errCode,proto3,enum=proto.enums.StatusCode" json:"errCode,omitempty"` // Deprecated. Use actionableErr.errCode. status code representing success or failure
+	ActionableErr   *ActionableErr   `protobuf:"bytes,5,opt,name=actionableErr,proto3" json:"actionableErr,omitempty"`                  // actionable error message
+	HostPlatform    string           `protobuf:"bytes,6,opt,name=hostPlatform,proto3" json:"hostPlatform,omitempty"`                    // architecture of the host machine. For example `linux/amd64`
+	TargetPlatforms string           `protobuf:"bytes,7,opt,name=targetPlatforms,proto3" json:"targetPlatforms,omitempty"`              // comma-delimited list of build target architectures. For example `linux/amd64,linux/arm64`
 }
 
 func (x *BuildEvent) Reset() {
@@ -1715,6 +1717,20 @@ func (x *BuildEvent) GetActionableErr() *ActionableErr {
 	return nil
 }
 
+func (x *BuildEvent) GetHostPlatform() string {
+	if x != nil {
+		return x.HostPlatform
+	}
+	return ""
+}
+
+func (x *BuildEvent) GetTargetPlatforms() string {
+	if x != nil {
+		return x.TargetPlatforms
+	}
+	return ""
+}
+
 // `TestEvent` represents the status of a test, and is emitted by Skaffold
 // anytime a test starts or completes, successfully or not.
 type TestEvent struct {
@@ -3150,7 +3166,7 @@ var file_v1_skaffold_proto_rawDesc = []byte{
 	0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x2b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
 	0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
 	0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
-	0x61, 0x74, 0x61, 0x22, 0xc1, 0x01, 0x0a, 0x0a, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x45, 0x76, 0x65,
+	0x61, 0x74, 0x61, 0x22, 0x8f, 0x02, 0x0a, 0x0a, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x45, 0x76, 0x65,
 	0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x01,
 	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x16,
 	0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
@@ -3162,195 +3178,200 @@ var file_v1_skaffold_proto_rawDesc = []byte{
 	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x05, 0x20, 0x01,
 	0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f,
 	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-	0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0x5f, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 0x45,
+	0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x6f, 0x73, 0x74, 0x50,
+	0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x68,
+	0x6f, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x28, 0x0a, 0x0f, 0x74,
+	0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x07,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x74,
+	0x66, 0x6f, 0x72, 0x6d, 0x73, 0x22, 0x5f, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65,
+	0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3a, 0x0a, 0x0d, 0x61, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61,
+	0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xa6, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x70, 0x6c, 0x6f,
+	0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10,
+	0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x65, 0x72, 0x72,
+	0x12, 0x31, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e,
+	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43,
+	0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c,
+	0x65, 0x45, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72,
+	0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22,
+	0xc5, 0x01, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45,
 	0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3a, 0x0a, 0x0d,
-	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69,
-	0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f,
-	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xa6, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x70,
-	0x6c, 0x6f, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x12, 0x10, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x65,
-	0x72, 0x72, 0x12, 0x31, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x6e, 0x75, 0x6d,
-	0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x65, 0x72,
-	0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61,
-	0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45,
-	0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72,
-	0x72, 0x22, 0xc5, 0x01, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x65, 0x63,
-	0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18,
-	0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x65, 0x72, 0x72, 0x12, 0x31, 0x0a, 0x07, 0x65, 0x72,
-	0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x43, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a,
-	0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x05,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74,
-	0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69,
-	0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xef, 0x01, 0x0a, 0x18, 0x52, 0x65,
-	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x65, 0x63,
-	0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
-	0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
-	0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65,
-	0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73,
-	0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x03, 0x65, 0x72, 0x72, 0x12, 0x37, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x43, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43,
-	0x6f, 0x64, 0x65, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12,
-	0x3a, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72,
-	0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41,
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63,
-	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xd9, 0x02, 0x0a, 0x09,
-	0x50, 0x6f, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x63,
-	0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6c, 0x6f,
-	0x63, 0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74,
-	0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x6d,
-	0x6f, 0x74, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61,
-	0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d,
-	0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61,
-	0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
-	0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73,
-	0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65,
-	0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d,
-	0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d,
-	0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70,
-	0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
-	0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
-	0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73,
-	0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64,
-	0x72, 0x65, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72,
-	0x65, 0x73, 0x73, 0x12, 0x32, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x72,
-	0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x49, 0x6e, 0x74, 0x4f, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x74, 0x61, 0x72,
-	0x67, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xdc, 0x01, 0x0a, 0x0d, 0x46, 0x69, 0x6c, 0x65,
-	0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x6c,
-	0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x69,
-	0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a,
-	0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73,
-	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x03, 0x65, 0x72, 0x72, 0x12, 0x31, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07,
+	0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x03, 0x65, 0x72, 0x72, 0x12, 0x31, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x43,
+	0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f,
+	0x64, 0x65, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x61,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xef, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x73, 0x6f,
+	0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45,
+	0x76, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+	0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x03, 0x65, 0x72, 0x72, 0x12, 0x37, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f,
 	0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
 	0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64,
-	0x65, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x61, 0x63,
-	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-	0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61,
-	0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xf4, 0x02, 0x0a, 0x17, 0x44, 0x65, 0x62, 0x75, 0x67,
-	0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x65,
-	0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f,
-	0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64,
-	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65,
-	0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e,
-	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61,
-	0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e,
-	0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x69,
-	0x66, 0x61, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x72, 0x74, 0x69,
-	0x66, 0x61, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18,
-	0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1e,
-	0x0a, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4e,
-	0x0a, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67,
-	0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x65,
-	0x6e, 0x74, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74,
-	0x72, 0x79, 0x52, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x1a, 0x3d,
-	0x0a, 0x0f, 0x44, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72,
-	0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
-	0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7e, 0x0a,
-	0x08, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d,
-	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
-	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
-	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
-	0x61, 0x6d, 0x70, 0x12, 0x22, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74,
-	0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3a, 0x0a,
-	0x11, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e,
-	0x74, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3b, 0x0a, 0x0e, 0x54, 0x72, 0x69,
-	0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x73,
-	0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52,
-	0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65,
-	0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65,
-	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c,
-	0x65, 0x64, 0x42, 0x05, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x22, 0x64, 0x0a, 0x06, 0x49, 0x6e, 0x74,
-	0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x08, 0x52, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x79, 0x6e,
-	0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x16, 0x0a,
-	0x06, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64,
-	0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x6c, 0x6f, 0x6f, 0x70,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x76, 0x6c, 0x6f, 0x6f, 0x70, 0x22,
-	0x69, 0x0a, 0x0a, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a,
-	0x0e, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x6e,
-	0x75, 0x6d, 0x73, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f,
-	0x64, 0x65, 0x52, 0x0e, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f,
-	0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x0b, 0x49, 0x6e,
-	0x74, 0x4f, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70,
-	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a,
-	0x06, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69,
-	0x6e, 0x74, 0x56, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x32, 0xb9, 0x05,
-	0x0a, 0x0f, 0x53, 0x6b, 0x61, 0x66, 0x66, 0x6f, 0x6c, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e,
-	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
-	0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74,
-	0x61, 0x74, 0x65, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, 0x31,
-	0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x47, 0x0a, 0x08, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c,
-	0x6f, 0x67, 0x12, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e,
-	0x74, 0x72, 0x79, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x45,
-	0x6e, 0x74, 0x72, 0x79, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x76,
-	0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x28, 0x01, 0x30, 0x01, 0x12,
-	0x47, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
-	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
+	0x65, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a,
+	0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xd9, 0x02, 0x0a, 0x09, 0x50, 0x6f,
+	0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+	0x50, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61,
+	0x6c, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50,
+	0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74,
+	0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+	0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65,
+	0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+	0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+	0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18,
+	0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+	0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54,
+	0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e,
+	0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75,
+	0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65,
+	0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
+	0x73, 0x12, 0x32, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x18,
+	0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e,
+	0x74, 0x4f, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65,
+	0x74, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xdc, 0x01, 0x0a, 0x0d, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x79,
+	0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x43,
+	0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65,
+	0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x03, 0x65, 0x72, 0x72, 0x12, 0x31, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,
+	0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52,
+	0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62,
+	0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c,
+	0x65, 0x45, 0x72, 0x72, 0x22, 0xf4, 0x02, 0x0a, 0x17, 0x44, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69,
+	0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74,
+	0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x4e,
+	0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61,
+	0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e,
+	0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61,
+	0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65,
+	0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d,
+	0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61,
+	0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61,
+	0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a,
+	0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4e, 0x0a, 0x0a,
+	0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69,
+	0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74,
+	0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
+	0x52, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x1a, 0x3d, 0x0a, 0x0f,
+	0x44, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
+	0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
+	0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d,
+	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7e, 0x0a, 0x08, 0x4c,
+	0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
+	0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
+	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
+	0x70, 0x12, 0x22, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05,
+	0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3a, 0x0a, 0x11, 0x55,
+	0x73, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x25, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x0d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52,
+	0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3b, 0x0a, 0x0e, 0x54, 0x72, 0x69, 0x67, 0x67,
+	0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61,
+	0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73,
+	0x74, 0x61, 0x74, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x53,
+	0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64,
+	0x42, 0x05, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x22, 0x64, 0x0a, 0x06, 0x49, 0x6e, 0x74, 0x65, 0x6e,
+	0x74, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x64,
+	0x65, 0x70, 0x6c, 0x6f, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x65, 0x70,
+	0x6c, 0x6f, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x6c, 0x6f, 0x6f, 0x70, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x76, 0x6c, 0x6f, 0x6f, 0x70, 0x22, 0x69, 0x0a,
+	0x0a, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x0e, 0x73,
+	0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x6e, 0x75, 0x6d,
+	0x73, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65,
+	0x52, 0x0e, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65,
+	0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x0b, 0x49, 0x6e, 0x74, 0x4f,
+	0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69,
+	0x6e, 0x74, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x74,
+	0x56, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x32, 0xb9, 0x05, 0x0a, 0x0f,
+	0x53, 0x6b, 0x61, 0x66, 0x66, 0x6f, 0x6c, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
+	0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
+	0x70, 0x74, 0x79, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74,
+	0x65, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x73,
+	0x74, 0x61, 0x74, 0x65, 0x12, 0x47, 0x0a, 0x08, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67,
+	0x12, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72,
 	0x79, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74,
-	0x72, 0x79, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f,
-	0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x30, 0x01, 0x12, 0x58, 0x0a, 0x07, 0x45, 0x78, 0x65, 0x63,
-	0x75, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72,
-	0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e,
-	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
-	0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x0b, 0x2f,
-	0x76, 0x31, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x06, 0x69, 0x6e, 0x74, 0x65,
-	0x6e, 0x74, 0x12, 0x61, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x6f, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12,
+	0x72, 0x79, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x76, 0x31, 0x2f,
+	0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x28, 0x01, 0x30, 0x01, 0x12, 0x47, 0x0a,
+	0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a,
+	0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79,
+	0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76,
+	0x65, 0x6e, 0x74, 0x73, 0x30, 0x01, 0x12, 0x58, 0x0a, 0x07, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
+	0x65, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e,
+	0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
+	0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x0b, 0x2f, 0x76, 0x31,
+	0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+	0x12, 0x61, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x6f, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x15, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x25, 0x82, 0xd3,
+	0xe4, 0x93, 0x02, 0x1f, 0x1a, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f,
+	0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x05, 0x73, 0x74,
+	0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x08, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x79, 0x6e, 0x63, 0x12,
 	0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52,
 	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x25,
-	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x1a, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x69, 0x6c,
-	0x64, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x05,
-	0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x08, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x79, 0x6e,
-	0x63, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65,
-	0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
-	0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x1a, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x79,
-	0x6e, 0x63, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a,
-	0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x65,
-	0x70, 0x6c, 0x6f, 0x79, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x72, 0x69,
-	0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
-	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
-	0x70, 0x74, 0x79, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x1a, 0x17, 0x2f, 0x76, 0x31,
-	0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65,
-	0x63, 0x75, 0x74, 0x65, 0x3a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x06, 0x48,
-	0x61, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x76,
-	0x65, 0x6e, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4,
-	0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f,
-	0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x42, 0x30, 0x5a, 0x2e, 0x67, 0x69, 0x74,
-	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x6f,
-	0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x73, 0x6b, 0x61,
-	0x66, 0x66, 0x6f, 0x6c, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x03, 0x62, 0x06, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24,
+	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x1a, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x79, 0x6e, 0x63,
+	0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x05, 0x73,
+	0x74, 0x61, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x65, 0x70, 0x6c,
+	0x6f, 0x79, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67,
+	0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
+	0x79, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x1a, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x64,
+	0x65, 0x70, 0x6c, 0x6f, 0x79, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75,
+	0x74, 0x65, 0x3a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x06, 0x48, 0x61, 0x6e,
+	0x64, 0x6c, 0x65, 0x12, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x76, 0x65, 0x6e,
+	0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02,
+	0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x68, 0x61,
+	0x6e, 0x64, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x42, 0x30, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75,
+	0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74,
+	0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x73, 0x6b, 0x61, 0x66, 0x66,
+	0x6f, 0x6c, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x03, 0x62, 0x06, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x33,
 }
 
 var (
diff --git a/proto/v1/skaffold.proto b/proto/v1/skaffold.proto
index 7fa3acab6..3f13ac981 100644
--- a/proto/v1/skaffold.proto
+++ b/proto/v1/skaffold.proto
@@ -175,7 +175,8 @@ message BuildEvent {
     string err = 3; // Deprecated. Use actionableErr.message. error when build status is Failed.
     enums.StatusCode errCode = 4; // Deprecated. Use actionableErr.errCode. status code representing success or failure
     ActionableErr actionableErr = 5; // actionable error message
-
+    string hostPlatform = 6; // architecture of the host machine. For example `linux/amd64`
+    string targetPlatforms = 7; // comma-delimited list of build target architectures. For example `linux/amd64,linux/arm64`
 }
 
 // `TestEvent` represents the status of a test, and is emitted by Skaffold
diff --git a/proto/v2/skaffold.pb.go b/proto/v2/skaffold.pb.go
index b5b00ab38..a0b0208b5 100644
--- a/proto/v2/skaffold.pb.go
+++ b/proto/v2/skaffold.pb.go
@@ -2055,12 +2055,14 @@ type BuildSubtaskEvent struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Id            string         `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`                       // id of the subtask which will be used in SkaffoldLog
-	TaskId        string         `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` // id of the task of skaffold that this event came from
-	Artifact      string         `protobuf:"bytes,3,opt,name=artifact,proto3" json:"artifact,omitempty"`           // artifact name
-	Step          string         `protobuf:"bytes,4,opt,name=step,proto3" json:"step,omitempty"`                   // which step of the build for the artifact oneof: Cache, Build, Push
-	Status        string         `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`               // artifact build status oneof: InProgress, Completed, Failed
-	ActionableErr *ActionableErr `protobuf:"bytes,6,opt,name=actionableErr,proto3" json:"actionableErr,omitempty"` // actionable error message
+	Id              string         `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`                           // id of the subtask which will be used in SkaffoldLog
+	TaskId          string         `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"`     // id of the task of skaffold that this event came from
+	Artifact        string         `protobuf:"bytes,3,opt,name=artifact,proto3" json:"artifact,omitempty"`               // artifact name
+	Step            string         `protobuf:"bytes,4,opt,name=step,proto3" json:"step,omitempty"`                       // which step of the build for the artifact oneof: Cache, Build, Push
+	Status          string         `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`                   // artifact build status oneof: InProgress, Completed, Failed
+	ActionableErr   *ActionableErr `protobuf:"bytes,6,opt,name=actionableErr,proto3" json:"actionableErr,omitempty"`     // actionable error message
+	HostPlatform    string         `protobuf:"bytes,7,opt,name=hostPlatform,proto3" json:"hostPlatform,omitempty"`       // platform of the host machine. For example `linux/amd64`
+	TargetPlatforms string         `protobuf:"bytes,8,opt,name=targetPlatforms,proto3" json:"targetPlatforms,omitempty"` // comma-delimited list of build target platforms. For example `linux/amd64,linux/arm64`
 }
 
 func (x *BuildSubtaskEvent) Reset() {
@@ -2137,6 +2139,20 @@ func (x *BuildSubtaskEvent) GetActionableErr() *ActionableErr {
 	return nil
 }
 
+func (x *BuildSubtaskEvent) GetHostPlatform() string {
+	if x != nil {
+		return x.HostPlatform
+	}
+	return ""
+}
+
+func (x *BuildSubtaskEvent) GetTargetPlatforms() string {
+	if x != nil {
+		return x.TargetPlatforms
+	}
+	return ""
+}
+
 // `TestSubtaskEvent` represents the status of a test, and is emitted by Skaffold
 // anytime a test starts or completes, successfully or not.
 type TestSubtaskEvent struct {
@@ -3781,7 +3797,7 @@ var file_v2_skaffold_proto_rawDesc = []byte{
 	0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
 	0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72,
 	0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22,
-	0xc3, 0x01, 0x0a, 0x11, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b,
+	0x91, 0x02, 0x0a, 0x11, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b,
 	0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
 	0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64,
 	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1a,
@@ -3793,26 +3809,12 @@ var file_v2_skaffold_proto_rawDesc = []byte{
 	0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61,
 	0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62,
-	0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0x92, 0x01, 0x0a, 0x10, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75,
-	0x62, 0x74, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61,
-	0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73,
-	0x6b, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3d, 0x0a, 0x0d, 0x61,
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63,
-	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74,
-	0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x52,
-	0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e,
-	0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
-	0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74,
-	0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x12, 0x3d, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65,
-	0x45, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45,
-	0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72,
-	0x72, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x53, 0x75, 0x62, 0x74,
+	0x6c, 0x65, 0x45, 0x72, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x6f, 0x73, 0x74, 0x50, 0x6c, 0x61,
+	0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x68, 0x6f, 0x73,
+	0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x28, 0x0a, 0x0f, 0x74, 0x61, 0x72,
+	0x67, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f,
+	0x72, 0x6d, 0x73, 0x22, 0x92, 0x01, 0x0a, 0x10, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x62, 0x74,
 	0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
 	0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b,
 	0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49,
@@ -3821,8 +3823,8 @@ var file_v2_skaffold_proto_rawDesc = []byte{
 	0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
 	0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69,
 	0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f,
-	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x70,
-	0x6c, 0x6f, 0x79, 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12,
+	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x6e,
+	0x64, 0x65, 0x72, 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12,
 	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12,
 	0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
 	0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
@@ -3831,164 +3833,183 @@ var file_v2_skaffold_proto_rawDesc = []byte{
 	0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
 	0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72,
 	0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22,
-	0x88, 0x02, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53,
-	0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
-	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74,
-	0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61,
-	0x73, 0x6b, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
-	0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73,
-	0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
-	0x67, 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65,
-	0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,
-	0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52,
-	0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x0d, 0x61,
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x07, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63,
-	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74,
-	0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xec, 0x02, 0x0a, 0x10, 0x50,
-	0x6f, 0x72, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12,
-	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12,
-	0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61,
-	0x6c, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6c, 0x6f, 0x63,
-	0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d,
-	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65,
-	0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d,
-	0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
-	0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
-	0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73,
-	0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65,
-	0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65,
-	0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65,
-	0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
-	0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
-	0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f,
-	0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72,
-	0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65,
-	0x73, 0x73, 0x12, 0x35, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74,
-	0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76,
-	0x32, 0x2e, 0x49, 0x6e, 0x74, 0x4f, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x74,
-	0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xc3, 0x01, 0x0a, 0x0d, 0x46, 0x69,
-	0x6c, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
-	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74,
-	0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61,
-	0x73, 0x6b, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e,
-	0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x75,
-	0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x12, 0x3d, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72,
-	0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72,
-	0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22,
-	0xa0, 0x03, 0x0a, 0x17, 0x44, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e,
-	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
-	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74,
-	0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61,
-	0x73, 0x6b, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07,
-	0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70,
-	0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
-	0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63,
-	0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09,
-	0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72,
-	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x72,
-	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d,
-	0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65,
-	0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x09,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72,
-	0x12, 0x51, 0x0a, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x0a,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e,
-	0x44, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
-	0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72,
-	0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f,
-	0x72, 0x74, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x44, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74,
-	0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
-	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
-	0x38, 0x01, 0x22, 0x3d, 0x0a, 0x11, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e,
-	0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x76, 0x32, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e,
-	0x74, 0x22, 0x3e, 0x0a, 0x0e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x72,
-	0x69, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74,
-	0x65, 0x22, 0x31, 0x0a, 0x0c, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74,
-	0x65, 0x12, 0x1a, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x08, 0x48, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x05, 0x0a,
-	0x03, 0x76, 0x61, 0x6c, 0x22, 0x64, 0x0a, 0x06, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14,
-	0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x62,
-	0x75, 0x69, 0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x08, 0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x70, 0x6c,
-	0x6f, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79,
-	0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x6c, 0x6f, 0x6f, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x08, 0x52, 0x07, 0x64, 0x65, 0x76, 0x6c, 0x6f, 0x6f, 0x70, 0x22, 0x69, 0x0a, 0x0a, 0x53, 0x75,
-	0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x0e, 0x73, 0x75, 0x67, 0x67,
-	0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e,
-	0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x53,
-	0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0e, 0x73,
-	0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a,
-	0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61,
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x0b, 0x49, 0x6e, 0x74, 0x4f, 0x72, 0x53, 0x74,
-	0x72, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x56,
-	0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c,
-	0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x32, 0xdf, 0x05, 0x0a, 0x11, 0x53, 0x6b, 0x61,
-	0x66, 0x66, 0x6f, 0x6c, 0x64, 0x56, 0x32, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x46,
-	0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f,
-	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70,
-	0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74,
-	0x61, 0x74, 0x65, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, 0x32,
-	0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x47, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73,
+	0x94, 0x01, 0x0a, 0x12, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x53, 0x75, 0x62, 0x74, 0x61, 0x73,
+	0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12,
+	0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3d, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61,
+	0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x70, 0x6c, 0x6f,
+	0x79, 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a,
+	0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a,
+	0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3d,
+	0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32,
+	0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d,
+	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0x88, 0x02,
+	0x0a, 0x17, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x62,
+	0x74, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73,
+	0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b,
+	0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16,
+	0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+	0x12, 0x37, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x6e, 0x75,
+	0x6d, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x73,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x0d, 0x61, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xec, 0x02, 0x0a, 0x10, 0x50, 0x6f, 0x72,
+	0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a,
+	0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a,
+	0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x50,
+	0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+	0x50, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24,
+	0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18,
+	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72,
+	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+	0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+	0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22,
+	0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x08,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79,
+	0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61,
+	0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
+	0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
+	0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+	0x12, 0x35, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x0b,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e,
+	0x49, 0x6e, 0x74, 0x4f, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x74, 0x61, 0x72,
+	0x67, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xc3, 0x01, 0x0a, 0x0d, 0x46, 0x69, 0x6c, 0x65,
+	0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73,
+	0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b,
+	0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74,
+	0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3d,
+	0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18,
+	0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32,
+	0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d,
+	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xa0, 0x03,
+	0x0a, 0x17, 0x44, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61,
+	0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73,
+	0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b,
+	0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f,
+	0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64,
+	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65,
+	0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e,
+	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61,
+	0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e,
+	0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x69,
+	0x66, 0x61, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x72, 0x74, 0x69,
+	0x66, 0x61, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18,
+	0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1e,
+	0x0a, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x09, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x51,
+	0x0a, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65,
+	0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72,
+	0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74,
+	0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x44, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45,
+	0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
+	0x22, 0x3d, 0x0a, 0x11, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32,
+	0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22,
+	0x3e, 0x0a, 0x0e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x2c, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x72, 0x69, 0x67,
+	0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22,
+	0x31, 0x0a, 0x0c, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12,
+	0x1a, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08,
+	0x48, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x05, 0x0a, 0x03, 0x76,
+	0x61, 0x6c, 0x22, 0x64, 0x0a, 0x06, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05,
+	0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x62, 0x75, 0x69,
+	0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x18,
+	0x0a, 0x07, 0x64, 0x65, 0x76, 0x6c, 0x6f, 0x6f, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x07, 0x64, 0x65, 0x76, 0x6c, 0x6f, 0x6f, 0x70, 0x22, 0x69, 0x0a, 0x0a, 0x53, 0x75, 0x67, 0x67,
+	0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x0e, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73,
+	0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x53, 0x75, 0x67,
+	0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0e, 0x73, 0x75, 0x67,
+	0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x0b, 0x49, 0x6e, 0x74, 0x4f, 0x72, 0x53, 0x74, 0x72, 0x69,
+	0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x12, 0x16,
+	0x0a, 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x32, 0xdf, 0x05, 0x0a, 0x11, 0x53, 0x6b, 0x61, 0x66, 0x66,
+	0x6f, 0x6c, 0x64, 0x56, 0x32, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x08,
+	0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
+	0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74,
+	0x65, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, 0x32, 0x2f, 0x73,
+	0x74, 0x61, 0x74, 0x65, 0x12, 0x47, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76,
+	0x32, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12,
+	0x0a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x30, 0x01, 0x12, 0x59, 0x0a,
+	0x0f, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73,
 	0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
 	0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x76, 0x32, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02,
-	0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x30, 0x01, 0x12,
-	0x59, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f,
-	0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1b, 0x82, 0xd3, 0xe4,
-	0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x07, 0x45, 0x78,
-	0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32,
-	0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93,
-	0x02, 0x15, 0x22, 0x0b, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a,
-	0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x64, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x6f, 0x42,
-	0x75, 0x69, 0x6c, 0x64, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e,
-	0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
-	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
-	0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x1a, 0x16,
-	0x2f, 0x76, 0x32, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65,
-	0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x62, 0x0a,
-	0x08, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4,
-	0x93, 0x02, 0x1e, 0x1a, 0x15, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x79, 0x6e, 0x63, 0x2f, 0x61, 0x75,
-	0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x05, 0x73, 0x74, 0x61, 0x74,
-	0x65, 0x12, 0x66, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12,
-	0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67,
-	0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
-	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
-	0x79, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x1a, 0x17, 0x2f, 0x76, 0x32, 0x2f, 0x64,
-	0x65, 0x70, 0x6c, 0x6f, 0x79, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75,
-	0x74, 0x65, 0x3a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x48, 0x61, 0x6e,
-	0x64, 0x6c, 0x65, 0x12, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x45,
-	0x76, 0x65, 0x6e, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1c, 0x82, 0xd3,
-	0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73,
-	0x2f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x42, 0x33, 0x5a, 0x31, 0x67, 0x69,
-	0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43,
-	0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x73, 0x6b,
-	0x61, 0x66, 0x66, 0x6f, 0x6c, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x32, 0x50,
-	0x03, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x2e, 0x76, 0x32, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02,
+	0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x07, 0x45, 0x78, 0x65, 0x63,
+	0x75, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x55,
+	0x73, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15,
+	0x22, 0x0b, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x06, 0x69,
+	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x64, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x6f, 0x42, 0x75, 0x69,
+	0x6c, 0x64, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x72,
+	0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
+	0x6d, 0x70, 0x74, 0x79, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x1a, 0x16, 0x2f, 0x76,
+	0x32, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65,
+	0x63, 0x75, 0x74, 0x65, 0x3a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x62, 0x0a, 0x08, 0x41,
+	0x75, 0x74, 0x6f, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x76, 0x32, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02,
+	0x1e, 0x1a, 0x15, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x79, 0x6e, 0x63, 0x2f, 0x61, 0x75, 0x74, 0x6f,
+	0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12,
+	0x66, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x18, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
+	0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x1a, 0x17, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x70,
+	0x6c, 0x6f, 0x79, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65,
+	0x3a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x48, 0x61, 0x6e, 0x64, 0x6c,
+	0x65, 0x12, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x76, 0x65,
+	0x6e, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93,
+	0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x68,
+	0x61, 0x6e, 0x64, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x42, 0x33, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68,
+	0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x6f, 0x6e,
+	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x73, 0x6b, 0x61, 0x66,
+	0x66, 0x6f, 0x6c, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x32, 0x50, 0x03, 0x62,
+	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
diff --git a/proto/v2/skaffold.proto b/proto/v2/skaffold.proto
index a85c71023..1fc8f813a 100644
--- a/proto/v2/skaffold.proto
+++ b/proto/v2/skaffold.proto
@@ -232,6 +232,8 @@ message BuildSubtaskEvent {
     string step = 4; // which step of the build for the artifact oneof: Cache, Build, Push
     string status = 5; // artifact build status oneof: InProgress, Completed, Failed
     ActionableErr actionableErr = 6; // actionable error message
+    string hostPlatform = 7; // platform of the host machine. For example `linux/amd64`
+    string targetPlatforms = 8; // comma-delimited list of build target platforms. For example `linux/amd64,linux/arm64`
 }
 
 // `TestSubtaskEvent` represents the status of a test, and is emitted by Skaffold


Test patch:
diff --git a/integration/apply_test.go b/integration/apply_test.go
index 3a6f2c89e..c32922657 100644
--- a/integration/apply_test.go
+++ b/integration/apply_test.go
@@ -25,9 +25,6 @@ import (
 )
 
 func TestDiagnoseRenderApply(t *testing.T) {
-	// TODO: This test shall pass once render v2 is completed.
-	t.SkipNow()
-
 	// This test verifies that `skaffold apply` can consume the output of both `skaffold render` and `skaffold diagnose`.
 
 	// 1. Run `skaffold diagnose --yaml-only` to resolve and combine skaffold configs for a multi-config project
@@ -59,9 +56,6 @@ func TestDiagnoseRenderApply(t *testing.T) {
 }
 
 func TestRenderApplyHelmDeployment(t *testing.T) {
-	// TODO: This test shall pass once render v2 is completed.
-	t.SkipNow()
-
 	testutil.Run(t, "DiagnoseRenderApply", func(t *testutil.T) {
 		MarkIntegrationTest(t.T, NeedsGcp)
 		ns, client := SetupNamespace(t.T)
diff --git a/pkg/skaffold/event/event_test.go b/pkg/skaffold/event/event_test.go
index f2795d190..99072d260 100644
--- a/pkg/skaffold/event/event_test.go
+++ b/pkg/skaffold/event/event_test.go
@@ -167,7 +167,7 @@ func TestBuildInProgress(t *testing.T) {
 	}}}, "test"))
 
 	wait(t, func() bool { return handler.getState().BuildState.Artifacts["img"] == NotStarted })
-	BuildInProgress("img")
+	BuildInProgress("img", "")
 	wait(t, func() bool { return handler.getState().BuildState.Artifacts["img"] == InProgress })
 }
 
@@ -182,7 +182,7 @@ func TestBuildFailed(t *testing.T) {
 	}}}, "test"))
 
 	wait(t, func() bool { return handler.getState().BuildState.Artifacts["img"] == NotStarted })
-	BuildFailed("img", errors.New("BUG"))
+	BuildFailed("img", "", errors.New("BUG"))
 	wait(t, func() bool {
 		bState := handler.getState().BuildState
 		return bState.Artifacts["img"] == Failed
@@ -200,7 +200,7 @@ func TestBuildComplete(t *testing.T) {
 	}}}, "test"))
 
 	wait(t, func() bool { return handler.getState().BuildState.Artifacts["img"] == NotStarted })
-	BuildComplete("img")
+	BuildComplete("img", "")
 	wait(t, func() bool { return handler.getState().BuildState.Artifacts["img"] == Complete })
 }
 
@@ -237,6 +237,24 @@ func TestPortForwarded_handleNil(t *testing.T) {
 	wait(t, func() bool { return handler.getState().ForwardedPorts[8080] != nil })
 }
 
+func TestResourceCheckEvent_handleNil(t *testing.T) {
+	defer func() { handler = newHandler() }()
+
+	handler = newHandler()
+	handler.state = emptyState(mockCfg([]latest.Pipeline{{}}, "test"))
+	handler.setState(handler.getState())
+
+	if handler.getState().StatusCheckState.Resources != nil {
+		t.Error("Resources should be a nil map")
+	}
+	resourceStatusCheckEventSucceeded("pods")
+	// Resources will be reset to map[string]string{} in handleExec
+	wait(t, func() bool {
+		_, ok := handler.getState().StatusCheckState.Resources["pods"]
+		return ok
+	})
+}
+
 func TestStatusCheckEventStarted(t *testing.T) {
 	defer func() { handler = newHandler() }()
 
diff --git a/pkg/skaffold/initializer/config_test.go b/pkg/skaffold/initializer/config_test.go
index defe805dc..37fa54c10 100644
--- a/pkg/skaffold/initializer/config_test.go
+++ b/pkg/skaffold/initializer/config_test.go
@@ -29,23 +29,30 @@ import (
 )
 
 type stubDeploymentInitializer struct {
-	config   latest.DeployConfig
+	config latest.DeployConfig
+}
+
+func (s stubDeploymentInitializer) DeployConfig() latest.DeployConfig {
+	return s.config
+}
+
+type stubRendererInitializer struct {
+	config   latest.RenderConfig
 	profiles []latest.Profile
 }
 
-func (s stubDeploymentInitializer) DeployConfig() (latest.DeployConfig, []latest.Profile) {
+func (s stubRendererInitializer) RenderConfig() (latest.RenderConfig, []latest.Profile) {
 	return s.config, s.profiles
 }
-
-func (s stubDeploymentInitializer) GetImages() []string {
+func (s stubRendererInitializer) GetImages() []string {
 	panic("implement me")
 }
 
-func (s stubDeploymentInitializer) Validate() error {
+func (s stubRendererInitializer) Validate() error {
 	panic("no thanks")
 }
 
-func (s stubDeploymentInitializer) AddManifestForImage(string, string) {
+func (s stubRendererInitializer) AddManifestForImage(string, string) {
 	panic("don't call me")
 }
 
@@ -76,6 +83,7 @@ func TestGenerateSkaffoldConfig(t *testing.T) {
 		name                   string
 		expectedSkaffoldConfig *latest.SkaffoldConfig
 		deployConfig           latest.DeployConfig
+		renderConfig           latest.RenderConfig
 		profiles               []latest.Profile
 		builderConfigInfos     []build.ArtifactInfo
 		getWd                  func() (string, error)
@@ -84,6 +92,7 @@ func TestGenerateSkaffoldConfig(t *testing.T) {
 			name:               "empty",
 			builderConfigInfos: []build.ArtifactInfo{},
 			deployConfig:       latest.DeployConfig{},
+			renderConfig:       latest.RenderConfig{},
 			getWd: func() (s string, err error) {
 				return filepath.Join("rootDir", "testConfig"), nil
 			},
@@ -92,7 +101,7 @@ func TestGenerateSkaffoldConfig(t *testing.T) {
 				Kind:       "Config",
 				Metadata:   latest.Metadata{Name: "testconfig"},
 				Pipeline: latest.Pipeline{
-					Deploy: latest.DeployConfig{},
+					Render: latest.RenderConfig{},
 				},
 			},
 		},
@@ -107,6 +116,7 @@ func TestGenerateSkaffoldConfig(t *testing.T) {
 				},
 			},
 			deployConfig: latest.DeployConfig{},
+			renderConfig: latest.RenderConfig{},
 			getWd: func() (s string, err error) {
 				return string(filepath.Separator), nil
 			},
@@ -126,6 +136,7 @@ func TestGenerateSkaffoldConfig(t *testing.T) {
 							},
 						},
 					},
+					Render: latest.RenderConfig{},
 					Deploy: latest.DeployConfig{},
 				},
 			},
@@ -134,6 +145,7 @@ func TestGenerateSkaffoldConfig(t *testing.T) {
 			name:               "error working dir",
 			builderConfigInfos: []build.ArtifactInfo{},
 			deployConfig:       latest.DeployConfig{},
+			renderConfig:       latest.RenderConfig{},
 			getWd: func() (s string, err error) {
 				return "", errors.New("testError")
 			},
@@ -149,13 +161,16 @@ func TestGenerateSkaffoldConfig(t *testing.T) {
 		testutil.Run(t, test.name, func(t *testutil.T) {
 			deploymentInitializer := stubDeploymentInitializer{
 				test.deployConfig,
-				test.profiles,
 			}
 			buildInitializer := stubBuildInitializer{
 				test.builderConfigInfos,
 			}
+			rendererInitializer := stubRendererInitializer{
+				test.renderConfig,
+				test.profiles,
+			}
 			t.Override(&getWd, test.getWd)
-			config := generateSkaffoldConfig(buildInitializer, deploymentInitializer)
+			config := generateSkaffoldConfig(buildInitializer, rendererInitializer, deploymentInitializer)
 			t.CheckDeepEqual(config, test.expectedSkaffoldConfig)
 		})
 	}
diff --git a/pkg/skaffold/initializer/deploy/helm_test.go b/pkg/skaffold/initializer/deploy/helm_test.go
index 5fb671ac4..1500cb43b 100644
--- a/pkg/skaffold/initializer/deploy/helm_test.go
+++ b/pkg/skaffold/initializer/deploy/helm_test.go
@@ -17,15 +17,9 @@ limitations under the License.
 package deploy
 
 import (
-	"errors"
-	"fmt"
 	"testing"
 
-	logrustest "github.com/sirupsen/logrus/hooks/test"
-
-	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/output/log"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
-	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
 	"github.com/GoogleContainerTools/skaffold/testutil"
 )
 
@@ -79,118 +73,8 @@ func TestDeployConfig(t *testing.T) {
 				return []byte{}, nil
 			})
 			h := newHelmInitializer(test.input)
-			d, _ := h.DeployConfig()
+			d := h.DeployConfig()
 			CheckHelmInitStruct(t, test.expected, d.LegacyHelmDeploy.Releases)
 		})
 	}
 }
-
-func TestGetImages(t *testing.T) {
-	tests := []struct {
-		description string
-		values      []string
-		templates   []string
-		cmd         string
-		err         error
-		shouldMatch string
-		expected    []string
-	}{
-		{
-			description: "helm templates multiple value files",
-			templates:   []string{backendTemp},
-			values:      []string{"backend/val.yml", "backend/values.yaml"},
-			cmd:         "helm template backend -f backend/val.yml -f backend/values.yaml",
-			expected:    []string{"go-guestbook-backend"},
-		},
-		{
-			description: "no values files",
-			values:      []string{},
-			cmd:         "helm template backend",
-			templates:   []string{backendTemp},
-			expected:    []string{"go-guestbook-backend"},
-		},
-		{
-			description: "err parsing template",
-			values:      []string{"backend/values.yaml"},
-			cmd:         "helm template backend -f backend/values.yaml",
-			templates:   []string{"invalid"},
-			shouldMatch: "reading Kubernetes YAML: yaml: unmarshal errors:\n  line 1: cannot unmarshal !!str `invalid` into kubernetes.yamlObject",
-		},
-		{
-			description: "err when running helm template",
-			values:      []string{"backend/values.yaml"},
-			cmd:         "helm template backend -f backend/values.yaml",
-			err:         errors.New("invalid"),
-			shouldMatch: "encountered error: invalid",
-			expected:    []string{},
-		},
-	}
-	for _, test := range tests {
-		testutil.Run(t, test.description, func(t *testutil.T) {
-			t.Override(&readFile, func(_ string) ([]byte, error) {
-				return []byte{}, nil
-			})
-			h := newHelmInitializer(map[string][]string{"backend": test.values})
-			hook := &logrustest.Hook{}
-			log.AddHook(hook)
-			tmpDir := t.NewTempDir()
-			for i, contents := range test.templates {
-				tmpDir.Write(fmt.Sprintf("template/template_%d.yaml", i), contents)
-			}
-			cmd := fmt.Sprintf("%s --output-dir %s", test.cmd, tmpDir.Path("template"))
-			t.Override(&util.DefaultExecCommand, testutil.CmdRunErr(cmd, test.err))
-			t.Override(&tempDir, func(dir, pattern string) (name string, err error) {
-				return tmpDir.Path("template"), nil
-			})
-			images := h.GetImages()
-			t.CheckElementsMatch(test.expected, images)
-			t.CheckMatches(test.shouldMatch, lastEntryHook(hook))
-		})
-	}
-}
-
-func lastEntryHook(hook *logrustest.Hook) string {
-	for _, entry := range hook.AllEntries() {
-		return entry.Message
-	}
-	return ""
-}
-
-var backendTemp = `---
-# Source: backend/templates/service.yaml
-apiVersion: v1
-kind: Service
-metadata:
-  name: backend
-  labels:
-    app: backend
-    tier: backend
-spec:
-  type: ClusterIP
-  selector:
-    app: backend
-    tier: backend
-  ports:
-  - port: 8080
-    targetPort: http-server
----
-# Source: backend/templates/deployment.yaml
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: backend
-  labels:
-    app: backend
-spec:
-  selector:
-    matchLabels:
-      app: backend
-  replicas: 2
-  template:
-    metadata:
-      labels:
-        app: backend
-    spec:
-      containers:
-      - name: backend
-        image: go-guestbook-backend`
diff --git a/pkg/skaffold/initializer/helm_test.go b/pkg/skaffold/initializer/helm_test.go
index cf02fec67..c4423ada1 100644
--- a/pkg/skaffold/initializer/helm_test.go
+++ b/pkg/skaffold/initializer/helm_test.go
@@ -109,8 +109,8 @@ spec:
 			a := analyze.NewAnalyzer(config)
 			err := a.Analyze(".")
 			t.CheckError(test.shouldErr, err)
-			d := deploy.NewInitializer(a.Manifests(), a.KustomizeBases(), a.KustomizePaths(), a.HelmChartInfo(), config)
-			dc, _ := d.DeployConfig()
+			d := deploy.NewInitializer(a.HelmChartInfo(), config)
+			dc := d.DeployConfig()
 			deploy.CheckHelmInitStruct(t, test.expected, dc.LegacyHelmDeploy.Releases)
 		})
 	}
diff --git a/pkg/skaffold/initializer/render/helm_test.go b/pkg/skaffold/initializer/render/helm_test.go
new file mode 100644
index 000000000..f06734caa
--- /dev/null
+++ b/pkg/skaffold/initializer/render/helm_test.go
@@ -0,0 +1,139 @@
+/*
+Copyright 2022 The Skaffold Authors
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package render
+
+import (
+	"errors"
+	"fmt"
+	"testing"
+
+	logrustest "github.com/sirupsen/logrus/hooks/test"
+
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/output/log"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
+	"github.com/GoogleContainerTools/skaffold/testutil"
+)
+
+func TestGetImages(t *testing.T) {
+	tests := []struct {
+		description string
+		values      []string
+		templates   []string
+		cmd         string
+		err         error
+		shouldMatch string
+		expected    []string
+	}{
+		{
+			description: "helm templates multiple value files",
+			templates:   []string{backendTemp},
+			values:      []string{"backend/val.yml", "backend/values.yaml"},
+			cmd:         "helm template backend -f backend/val.yml -f backend/values.yaml",
+			expected:    []string{"go-guestbook-backend"},
+		},
+		{
+			description: "no values files",
+			values:      []string{},
+			cmd:         "helm template backend",
+			templates:   []string{backendTemp},
+			expected:    []string{"go-guestbook-backend"},
+		},
+		{
+			description: "err parsing template",
+			values:      []string{"backend/values.yaml"},
+			cmd:         "helm template backend -f backend/values.yaml",
+			templates:   []string{"invalid"},
+			shouldMatch: "reading Kubernetes YAML: yaml: unmarshal errors:\n  line 1: cannot unmarshal !!str `invalid` into kubernetes.yamlObject",
+		},
+		{
+			description: "err when running helm template",
+			values:      []string{"backend/values.yaml"},
+			cmd:         "helm template backend -f backend/values.yaml",
+			err:         errors.New("invalid"),
+			shouldMatch: "encountered error: invalid",
+			expected:    []string{},
+		},
+	}
+	for _, test := range tests {
+		testutil.Run(t, test.description, func(t *testutil.T) {
+			t.Override(&readFile, func(_ string) ([]byte, error) {
+				return []byte{}, nil
+			})
+			h := newHelmInitializer(map[string][]string{"backend": test.values})
+			hook := &logrustest.Hook{}
+			log.AddHook(hook)
+			tmpDir := t.NewTempDir()
+			for i, contents := range test.templates {
+				tmpDir.Write(fmt.Sprintf("template/template_%d.yaml", i), contents)
+			}
+			cmd := fmt.Sprintf("%s --output-dir %s", test.cmd, tmpDir.Path("template"))
+			t.Override(&util.DefaultExecCommand, testutil.CmdRunErr(cmd, test.err))
+			t.Override(&tempDir, func(dir, pattern string) (name string, err error) {
+				return tmpDir.Path("template"), nil
+			})
+			images := h.GetImages()
+			t.CheckElementsMatch(test.expected, images)
+			t.CheckMatches(test.shouldMatch, lastEntryHook(hook))
+		})
+	}
+}
+
+func lastEntryHook(hook *logrustest.Hook) string {
+	for _, entry := range hook.AllEntries() {
+		return entry.Message
+	}
+	return ""
+}
+
+var backendTemp = `---
+# Source: backend/templates/service.yaml
+apiVersion: v1
+kind: Service
+metadata:
+  name: backend
+  labels:
+    app: backend
+    tier: backend
+spec:
+  type: ClusterIP
+  selector:
+    app: backend
+    tier: backend
+  ports:
+  - port: 8080
+    targetPort: http-server
+---
+# Source: backend/templates/deployment.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: backend
+  labels:
+    app: backend
+spec:
+  selector:
+    matchLabels:
+      app: backend
+  replicas: 2
+  template:
+    metadata:
+      labels:
+        app: backend
+    spec:
+      containers:
+      - name: backend
+        image: go-guestbook-backend`
diff --git a/pkg/skaffold/initializer/deploy/kubectl_test.go b/pkg/skaffold/initializer/render/kubectl_test.go
similarity index 93%
rename from pkg/skaffold/initializer/deploy/kubectl_test.go
rename to pkg/skaffold/initializer/render/kubectl_test.go
index 311a44e1f..9c487e112 100644
--- a/pkg/skaffold/initializer/deploy/kubectl_test.go
+++ b/pkg/skaffold/initializer/render/kubectl_test.go
@@ -1,5 +1,5 @@
 /*
-Copyright 2019 The Skaffold Authors
+Copyright 2022 The Skaffold Authors
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
-package deploy
+package render
 
 import (
 	"testing"
@@ -40,15 +40,13 @@ spec:
 
 	k := newKubectlInitializer([]string{filename})
 
-	expectedConfig := latest.DeployConfig{
-		DeployType: latest.DeployType{
-			KubectlDeploy: &latest.KubectlDeploy{
-				Manifests: []string{filename},
-			},
+	expectedConfig := latest.RenderConfig{
+		Generate: latest.Generate{
+			RawK8s: []string{filename},
 		},
 	}
-	deployConfig, profiles := k.DeployConfig()
-	testutil.CheckDeepEqual(t, expectedConfig, deployConfig)
+	renderConfig, profiles := k.RenderConfig()
+	testutil.CheckDeepEqual(t, expectedConfig, renderConfig)
 	if profiles != nil {
 		t.Errorf("generated profiles should be nil, but got: %+v\n", profiles)
 	}
diff --git a/pkg/skaffold/initializer/deploy/kustomize_test.go b/pkg/skaffold/initializer/render/kustomize_test.go
similarity index 79%
rename from pkg/skaffold/initializer/deploy/kustomize_test.go
rename to pkg/skaffold/initializer/render/kustomize_test.go
index 27f34f04e..a8611e17f 100644
--- a/pkg/skaffold/initializer/deploy/kustomize_test.go
+++ b/pkg/skaffold/initializer/render/kustomize_test.go
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
-package deploy
+package render
 
 import (
 	"path/filepath"
@@ -80,10 +80,10 @@ func TestGenerateKustomizePipeline(t *testing.T) {
 			overlays:          []overlay{{"dev", overlayDeployment, overlayKustomization}},
 			expectedConfig: latest.SkaffoldConfig{
 				Pipeline: latest.Pipeline{
-					Deploy: latest.DeployConfig{
-						DeployType: latest.DeployType{
-							KustomizeDeploy: &latest.KustomizeDeploy{
-								KustomizePaths: []string{filepath.Join("overlays", "dev")},
+					Render: latest.RenderConfig{
+						Generate: latest.Generate{
+							Kustomize: &latest.Kustomize{
+								Paths: []string{filepath.Join("overlays", "dev")},
 							},
 						},
 					},
@@ -101,10 +101,10 @@ func TestGenerateKustomizePipeline(t *testing.T) {
 			},
 			expectedConfig: latest.SkaffoldConfig{
 				Pipeline: latest.Pipeline{
-					Deploy: latest.DeployConfig{
-						DeployType: latest.DeployType{
-							KustomizeDeploy: &latest.KustomizeDeploy{
-								KustomizePaths: []string{filepath.Join("overlays", "foo")},
+					Render: latest.RenderConfig{
+						Generate: latest.Generate{
+							Kustomize: &latest.Kustomize{
+								Paths: []string{filepath.Join("overlays", "foo")},
 							},
 						},
 					},
@@ -113,10 +113,10 @@ func TestGenerateKustomizePipeline(t *testing.T) {
 					{
 						Name: "bar",
 						Pipeline: latest.Pipeline{
-							Deploy: latest.DeployConfig{
-								DeployType: latest.DeployType{
-									KustomizeDeploy: &latest.KustomizeDeploy{
-										KustomizePaths: []string{filepath.Join("overlays", "bar")},
+							Render: latest.RenderConfig{
+								Generate: latest.Generate{
+									Kustomize: &latest.Kustomize{
+										Paths: []string{filepath.Join("overlays", "bar")},
 									},
 								},
 							},
@@ -125,10 +125,10 @@ func TestGenerateKustomizePipeline(t *testing.T) {
 					{
 						Name: "baz",
 						Pipeline: latest.Pipeline{
-							Deploy: latest.DeployConfig{
-								DeployType: latest.DeployType{
-									KustomizeDeploy: &latest.KustomizeDeploy{
-										KustomizePaths: []string{filepath.Join("overlays", "baz")},
+							Render: latest.RenderConfig{
+								Generate: latest.Generate{
+									Kustomize: &latest.Kustomize{
+										Paths: []string{filepath.Join("overlays", "baz")},
 									},
 								},
 							},
@@ -157,8 +157,8 @@ func TestGenerateKustomizePipeline(t *testing.T) {
 
 			k := newKustomizeInitializer("", []string{test.base}, overlays, manifests)
 
-			deployConfig, profiles := k.DeployConfig()
-			testutil.CheckDeepEqual(t, test.expectedConfig.Pipeline.Deploy, deployConfig)
+			renderConfig, profiles := k.RenderConfig()
+			testutil.CheckDeepEqual(t, test.expectedConfig.Pipeline.Render, renderConfig)
 			testutil.CheckDeepEqual(t, test.expectedConfig.Profiles, profiles)
 		})
 	}
diff --git a/pkg/skaffold/initializer/testdata/init/allcli/skaffold.yaml b/pkg/skaffold/initializer/testdata/init/allcli/skaffold.yaml
index 1d485f15b..9a75d7433 100644
--- a/pkg/skaffold/initializer/testdata/init/allcli/skaffold.yaml
+++ b/pkg/skaffold/initializer/testdata/init/allcli/skaffold.yaml
@@ -7,8 +7,7 @@ build:
     - image: passed-in-artifact
       docker:
         dockerfile: Dockerfile
-deploy:
-  kubectl:
-    manifests:
-      - manifest-placeholder1.yaml
-      - manifest-placeholder2.yaml
+manifests:
+  rawYaml:
+    - manifest-placeholder1.yaml
+    - manifest-placeholder2.yaml
diff --git a/pkg/skaffold/initializer/testdata/init/getting-started-kustomize/skaffold.yaml b/pkg/skaffold/initializer/testdata/init/getting-started-kustomize/skaffold.yaml
index b20f3507f..7c8fd6c9e 100644
--- a/pkg/skaffold/initializer/testdata/init/getting-started-kustomize/skaffold.yaml
+++ b/pkg/skaffold/initializer/testdata/init/getting-started-kustomize/skaffold.yaml
@@ -7,5 +7,8 @@ build:
   - image: hello-world
     docker:
       dockerfile: Dockerfile
-deploy:
-  kustomize: {}
+manifests:
+  kustomize:
+    paths:
+      - "."
+
diff --git a/pkg/skaffold/initializer/testdata/init/hello/skaffold.yaml b/pkg/skaffold/initializer/testdata/init/hello/skaffold.yaml
index 0dd247b6a..c771e01bc 100644
--- a/pkg/skaffold/initializer/testdata/init/hello/skaffold.yaml
+++ b/pkg/skaffold/initializer/testdata/init/hello/skaffold.yaml
@@ -7,7 +7,6 @@ build:
   - image: skaffold-example
     docker:
       dockerfile: Dockerfile
-deploy:
-  kubectl:
-    manifests:
-    - k8s-pod.yaml
+manifests:
+  rawYaml:
+  - k8s-pod.yaml
diff --git a/pkg/skaffold/initializer/testdata/init/ignore-tags/skaffold.yaml b/pkg/skaffold/initializer/testdata/init/ignore-tags/skaffold.yaml
index 9b218f5ca..21f5d75a7 100644
--- a/pkg/skaffold/initializer/testdata/init/ignore-tags/skaffold.yaml
+++ b/pkg/skaffold/initializer/testdata/init/ignore-tags/skaffold.yaml
@@ -7,7 +7,6 @@ build:
   - image: gcr.io/k8s-skaffold/skaffold-example
     docker:
       dockerfile: Dockerfile
-deploy:
-  kubectl:
-    manifests:
+manifests:
+  rawYaml:
     - k8s-pod.yaml
diff --git a/pkg/skaffold/initializer/testdata/init/microservices/skaffold.yaml b/pkg/skaffold/initializer/testdata/init/microservices/skaffold.yaml
index 737ea4393..8290f5064 100644
--- a/pkg/skaffold/initializer/testdata/init/microservices/skaffold.yaml
+++ b/pkg/skaffold/initializer/testdata/init/microservices/skaffold.yaml
@@ -12,8 +12,7 @@ build:
     context: leeroy-web
     docker:
       dockerfile: Dockerfile
-deploy:
-  kubectl:
-    manifests:
+manifests:
+  rawYaml:
     - leeroy-app/kubernetes/deployment.yaml
     - leeroy-web/kubernetes/deployment.yaml
diff --git a/pkg/skaffold/initializer/testdata/init/windows/skaffold.yaml b/pkg/skaffold/initializer/testdata/init/windows/skaffold.yaml
index e35ebace4..78541ddeb 100644
--- a/pkg/skaffold/initializer/testdata/init/windows/skaffold.yaml
+++ b/pkg/skaffold/initializer/testdata/init/windows/skaffold.yaml
@@ -8,7 +8,6 @@ build:
     context: apps/web
     docker:
       dockerfile: build/Dockerfile
-deploy:
-  kubectl:
-    manifests:
+manifests:
+  rawYaml:
     - apps/web/deployment.yaml
diff --git a/pkg/skaffold/schema/validation/samples_test.go b/pkg/skaffold/schema/validation/samples_test.go
index 9f71409f7..44c49c657 100644
--- a/pkg/skaffold/schema/validation/samples_test.go
+++ b/pkg/skaffold/schema/validation/samples_test.go
@@ -47,9 +47,6 @@ var (
 // Test that every example can be parsed and produces a valid
 // Skaffold configuration.
 func TestParseExamples(t *testing.T) {
-	// TODO: add examples for v2
-	t.SkipNow()
-
 	parseConfigFiles(t, "../../../../examples")
 	parseConfigFiles(t, "../../../../integration/examples")
 	parseConfigFiles(t, "../../../../integration/testdata/regressions")
@@ -58,9 +55,6 @@ func TestParseExamples(t *testing.T) {
 // Samples are skaffold.yaml fragments that are used
 // in the documentation.
 func TestParseSamples(t *testing.T) {
-	// TODO: add sample for v2
-	t.SkipNow()
-
 	paths, err := walk.From(samplesRoot).WhenIsFile().CollectPaths()
 	if err != nil {
 		t.Fatalf("unable to list samples in %q", samplesRoot)
@@ -102,7 +96,6 @@ func checkSkaffoldConfig(t *testutil.T, yaml []byte) {
 	t.CheckNoError(err)
 }
 
-//nolint:golint,unused
 func parseConfigFiles(t *testing.T, root string) {
 	groupedPaths, err := walk.From(root).WhenHasName("skaffold.yaml").CollectPathsGrouped(1)
 	if err != nil {