Repository: knative/serving
Pull request #9364 (2020-09-10 14:56:15)

Fix usage of ErrInvalidKeyName for window validation.
<!--
Request Prow to automatically lint any go code in this PR:

/lint
-->

<!-- Please include the 'why' behind your changes if no issue exists -->
## Proposed Changes

We've been putting the details of the error into the `fieldPath` field rather than into the details. This bends it straight and also fixes the wrong test name.

**Release Note**

<!-- Enter your extended release note in the below block. If the PR requires
additional action from users switching to the new release, include the string
"action required". If no release note is required, write "NONE". -->

```release-note
NONE
```

/assign @vagababov @julz 


knative-prow-robot: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/knative/serving/pull/9364#" title="Author self-approved">markusthoemmes</a>*

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=knative%2Fserving).

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

<details >
Needs approval from an approver in each of these files:

- ~~[pkg/apis/autoscaling/OWNERS](https://github.com/knative/serving/blob/master/pkg/apis/autoscaling/OWNERS)~~ [markusthoemmes]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->
knative-prow-robot: @markusthoemmes: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-serving-unit-tests | 8842329cec9b37469024e16183946cd444285252 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_serving/9364/pull-knative-serving-unit-tests/1304071430815617024) | `/test pull-knative-serving-unit-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_serving/9364). [Your PR dashboard](https://gubernator.knative.dev/pr/markusthoemmes).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->

Patch:
diff --git a/pkg/apis/autoscaling/annotation_validation.go b/pkg/apis/autoscaling/annotation_validation.go
index 5c4e3ac67..1221bcc95 100644
--- a/pkg/apis/autoscaling/annotation_validation.go
+++ b/pkg/apis/autoscaling/annotation_validation.go
@@ -123,7 +123,7 @@ func validateWindow(annotations map[string]string) *apis.FieldError {
 	var errs *apis.FieldError
 	if w, ok := annotations[WindowAnnotationKey]; ok {
 		if annotations[ClassAnnotationKey] == HPA && annotations[MetricAnnotationKey] == CPU {
-			return apis.ErrInvalidKeyName(WindowAnnotationKey, fmt.Sprintf("%s for %s %s", HPA, MetricAnnotationKey, CPU))
+			return apis.ErrInvalidKeyName(WindowAnnotationKey, apis.CurrentField, fmt.Sprintf("%s for %s %s", HPA, MetricAnnotationKey, CPU))
 		}
 		if d, err := time.ParseDuration(w); err != nil {
 			errs = apis.ErrInvalidValue(w, WindowAnnotationKey)
diff --git a/pkg/apis/serving/v1/revision_types.go b/pkg/apis/serving/v1/revision_types.go
index 36696ea15..36cd3a346 100644
--- a/pkg/apis/serving/v1/revision_types.go
+++ b/pkg/apis/serving/v1/revision_types.go
@@ -152,11 +152,11 @@ type RevisionStatus struct {
 	// for both serving and non serving containers.
 	// ref: http://bit.ly/image-digests
 	// +optional
-	ContainerStatuses []ContainerStatuses `json:"containerStatuses,omitempty"`
+	ContainerStatuses []ContainerStatus `json:"containerStatuses,omitempty"`
 }
 
-// ContainerStatuses holds the information of container name and image digest value
-type ContainerStatuses struct {
+// ContainerStatus holds the information of container name and image digest value
+type ContainerStatus struct {
 	Name        string `json:"name,omitempty"`
 	ImageDigest string `json:"imageDigest,omitempty"`
 }
diff --git a/pkg/apis/serving/v1/zz_generated.deepcopy.go b/pkg/apis/serving/v1/zz_generated.deepcopy.go
index a8d09cb10..d1dc8be44 100644
--- a/pkg/apis/serving/v1/zz_generated.deepcopy.go
+++ b/pkg/apis/serving/v1/zz_generated.deepcopy.go
@@ -139,17 +139,17 @@ func (in *ConfigurationStatusFields) DeepCopy() *ConfigurationStatusFields {
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ContainerStatuses) DeepCopyInto(out *ContainerStatuses) {
+func (in *ContainerStatus) DeepCopyInto(out *ContainerStatus) {
 	*out = *in
 	return
 }
 
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerStatuses.
-func (in *ContainerStatuses) DeepCopy() *ContainerStatuses {
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerStatus.
+func (in *ContainerStatus) DeepCopy() *ContainerStatus {
 	if in == nil {
 		return nil
 	}
-	out := new(ContainerStatuses)
+	out := new(ContainerStatus)
 	in.DeepCopyInto(out)
 	return out
 }
@@ -248,7 +248,7 @@ func (in *RevisionStatus) DeepCopyInto(out *RevisionStatus) {
 	in.Status.DeepCopyInto(&out.Status)
 	if in.ContainerStatuses != nil {
 		in, out := &in.ContainerStatuses, &out.ContainerStatuses
-		*out = make([]ContainerStatuses, len(*in))
+		*out = make([]ContainerStatus, len(*in))
 		copy(*out, *in)
 	}
 	return
diff --git a/pkg/apis/serving/v1alpha1/revision_conversion.go b/pkg/apis/serving/v1alpha1/revision_conversion.go
index 37d41cd2b..65535029e 100644
--- a/pkg/apis/serving/v1alpha1/revision_conversion.go
+++ b/pkg/apis/serving/v1alpha1/revision_conversion.go
@@ -76,14 +76,14 @@ func (source *RevisionStatus) ConvertTo(ctx context.Context, sink *v1.RevisionSt
 	sink.ServiceName = source.ServiceName
 	sink.LogURL = source.LogURL
 	sink.DeprecatedImageDigest = source.DeprecatedImageDigest
-	sink.ContainerStatuses = make([]v1.ContainerStatuses, len(source.ContainerStatuses))
+	sink.ContainerStatuses = make([]v1.ContainerStatus, len(source.ContainerStatuses))
 	for i := range source.ContainerStatuses {
 		source.ContainerStatuses[i].ConvertTo(ctx, &sink.ContainerStatuses[i])
 	}
 }
 
 // ConvertTo helps implement apis.Convertible
-func (source *ContainerStatuses) ConvertTo(ctx context.Context, sink *v1.ContainerStatuses) {
+func (source *ContainerStatus) ConvertTo(ctx context.Context, sink *v1.ContainerStatus) {
 	sink.Name = source.Name
 	sink.ImageDigest = source.ImageDigest
 }
@@ -118,14 +118,14 @@ func (sink *RevisionStatus) ConvertFrom(ctx context.Context, source v1.RevisionS
 	sink.ServiceName = source.ServiceName
 	sink.LogURL = source.LogURL
 	sink.DeprecatedImageDigest = source.DeprecatedImageDigest
-	sink.ContainerStatuses = make([]ContainerStatuses, len(source.ContainerStatuses))
+	sink.ContainerStatuses = make([]ContainerStatus, len(source.ContainerStatuses))
 	for i := range sink.ContainerStatuses {
 		sink.ContainerStatuses[i].ConvertFrom(ctx, &source.ContainerStatuses[i])
 	}
 }
 
 // ConvertFrom helps implement apis.Convertible
-func (sink *ContainerStatuses) ConvertFrom(ctx context.Context, source *v1.ContainerStatuses) {
+func (sink *ContainerStatus) ConvertFrom(ctx context.Context, source *v1.ContainerStatus) {
 	sink.Name = source.Name
 	sink.ImageDigest = source.ImageDigest
 }
diff --git a/pkg/apis/serving/v1alpha1/revision_types.go b/pkg/apis/serving/v1alpha1/revision_types.go
index c241604b2..50dcf572c 100644
--- a/pkg/apis/serving/v1alpha1/revision_types.go
+++ b/pkg/apis/serving/v1alpha1/revision_types.go
@@ -176,11 +176,11 @@ type RevisionStatus struct {
 	// for both serving and non serving containers.
 	// ref: http://bit.ly/image-digests
 	// +optional
-	ContainerStatuses []ContainerStatuses `json:"containerStatuses,omitempty"`
+	ContainerStatuses []ContainerStatus `json:"containerStatuses,omitempty"`
 }
 
-// ContainerStatuses holds the information of container name and image digest value
-type ContainerStatuses struct {
+// ContainerStatus holds the information of container name and image digest value
+type ContainerStatus struct {
 	Name        string `json:"name,omitempty"`
 	ImageDigest string `json:"imageDigest,omitempty"`
 }
diff --git a/pkg/apis/serving/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/serving/v1alpha1/zz_generated.deepcopy.go
index 7158264c0..2529b4a69 100644
--- a/pkg/apis/serving/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/serving/v1alpha1/zz_generated.deepcopy.go
@@ -170,17 +170,17 @@ func (in *ConfigurationStatusFields) DeepCopy() *ConfigurationStatusFields {
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ContainerStatuses) DeepCopyInto(out *ContainerStatuses) {
+func (in *ContainerStatus) DeepCopyInto(out *ContainerStatus) {
 	*out = *in
 	return
 }
 
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerStatuses.
-func (in *ContainerStatuses) DeepCopy() *ContainerStatuses {
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerStatus.
+func (in *ContainerStatus) DeepCopy() *ContainerStatus {
 	if in == nil {
 		return nil
 	}
-	out := new(ContainerStatuses)
+	out := new(ContainerStatus)
 	in.DeepCopyInto(out)
 	return out
 }
@@ -329,7 +329,7 @@ func (in *RevisionStatus) DeepCopyInto(out *RevisionStatus) {
 	in.Status.DeepCopyInto(&out.Status)
 	if in.ContainerStatuses != nil {
 		in, out := &in.ContainerStatuses, &out.ContainerStatuses
-		*out = make([]ContainerStatuses, len(*in))
+		*out = make([]ContainerStatus, len(*in))
 		copy(*out, *in)
 	}
 	return
diff --git a/pkg/autoscaler/statserver/server.go b/pkg/autoscaler/statserver/server.go
index b05560060..175fe364a 100644
--- a/pkg/autoscaler/statserver/server.go
+++ b/pkg/autoscaler/statserver/server.go
@@ -37,7 +37,7 @@ const closeCodeServiceRestart = 1012 // See https://www.iana.org/assignments/web
 
 // isBucketHost is the function deciding whether a host of a request is
 // of an Autoscaler bucket service. It is set to bucket.IsBucketHost
-// in production while can be overriden for testing.
+// in production while can be overridden for testing.
 var isBucketHost = bucket.IsBucketHost
 
 // Server receives autoscaler statistics over WebSocket and sends them to a channel.
diff --git a/pkg/reconciler/revision/revision.go b/pkg/reconciler/revision/revision.go
index 4f7d9d61f..f5d5be3d4 100644
--- a/pkg/reconciler/revision/revision.go
+++ b/pkg/reconciler/revision/revision.go
@@ -68,14 +68,14 @@ var _ revisionreconciler.Interface = (*Reconciler)(nil)
 
 func (c *Reconciler) reconcileDigest(ctx context.Context, rev *v1.Revision) error {
 	if rev.Status.ContainerStatuses == nil {
-		rev.Status.ContainerStatuses = make([]v1.ContainerStatuses, 0, len(rev.Spec.Containers))
+		rev.Status.ContainerStatuses = make([]v1.ContainerStatus, 0, len(rev.Spec.Containers))
 	}
 
 	if rev.Status.DeprecatedImageDigest != "" {
 		// Default old revisions to have ContainerStatuses filled in.
 		// This path should only be taken by "old" revisions that have exactly one container.
 		if len(rev.Status.ContainerStatuses) == 0 {
-			rev.Status.ContainerStatuses = append(rev.Status.ContainerStatuses, v1.ContainerStatuses{
+			rev.Status.ContainerStatuses = append(rev.Status.ContainerStatuses, v1.ContainerStatus{
 				Name:        rev.Spec.Containers[0].Name,
 				ImageDigest: rev.Status.DeprecatedImageDigest,
 			})
@@ -99,7 +99,7 @@ func (c *Reconciler) reconcileDigest(ctx context.Context, rev *v1.Revision) erro
 	}
 
 	var digestGrp errgroup.Group
-	containerStatuses := make([]v1.ContainerStatuses, len(rev.Spec.Containers))
+	containerStatuses := make([]v1.ContainerStatus, len(rev.Spec.Containers))
 	for i, container := range rev.Spec.Containers {
 		container := container // Standard Go concurrency pattern.
 		i := i
@@ -117,7 +117,7 @@ func (c *Reconciler) reconcileDigest(ctx context.Context, rev *v1.Revision) erro
 				rev.Status.DeprecatedImageDigest = digest
 			}
 
-			containerStatuses[i] = v1.ContainerStatuses{
+			containerStatuses[i] = v1.ContainerStatus{
 				Name:        container.Name,
 				ImageDigest: digest,
 			}
diff --git a/third_party/cert-manager-0.12.0/net-certmanager.yaml b/third_party/cert-manager-0.12.0/net-certmanager.yaml
index 2c00acbf3..07710d6a1 100644
--- a/third_party/cert-manager-0.12.0/net-certmanager.yaml
+++ b/third_party/cert-manager-0.12.0/net-certmanager.yaml
@@ -18,7 +18,7 @@ metadata:
   # These are the permissions needed by the `cert-manager` `Certificate` implementation.
   name: knative-serving-certmanager
   labels:
-    serving.knative.dev/release: "v20200909-42dae3b"
+    serving.knative.dev/release: "v20200910-93c54e0"
     serving.knative.dev/controller: "true"
     networking.knative.dev/certificate-provider: cert-manager
 rules:
@@ -49,7 +49,7 @@ kind: ValidatingWebhookConfiguration
 metadata:
   name: config.webhook.net-certmanager.networking.internal.knative.dev
   labels:
-    serving.knative.dev/release: "v20200909-42dae3b"
+    serving.knative.dev/release: "v20200910-93c54e0"
 webhooks:
 - admissionReviewVersions:
   - v1beta1
@@ -86,7 +86,7 @@ metadata:
   name: net-certmanager-webhook-certs
   namespace: knative-serving
   labels:
-    serving.knative.dev/release: "v20200909-42dae3b"
+    serving.knative.dev/release: "v20200910-93c54e0"
 
 ---
 # Copyright 2020 The Knative Authors
@@ -109,7 +109,7 @@ metadata:
   name: config-certmanager
   namespace: knative-serving
   labels:
-    serving.knative.dev/release: "v20200909-42dae3b"
+    serving.knative.dev/release: "v20200910-93c54e0"
     networking.knative.dev/certificate-provider: cert-manager
 data:
   _example: |
@@ -156,7 +156,7 @@ metadata:
   name: networking-certmanager
   namespace: knative-serving
   labels:
-    serving.knative.dev/release: "v20200909-42dae3b"
+    serving.knative.dev/release: "v20200910-93c54e0"
     networking.knative.dev/certificate-provider: cert-manager
 spec:
   selector:
@@ -168,14 +168,14 @@ spec:
         cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
       labels:
         app: networking-certmanager
-        serving.knative.dev/release: "v20200909-42dae3b"
+        serving.knative.dev/release: "v20200910-93c54e0"
     spec:
       serviceAccountName: controller
       containers:
       - name: networking-certmanager
         # This is the Go import path for the binary that is containerized
         # and substituted here.
-        image: gcr.io/knative-nightly/knative.dev/net-certmanager/cmd/controller@sha256:78ccda2859dfe4dde83d94d2d838f20e958d38201cae218b4a887a0e152b97b3
+        image: gcr.io/knative-nightly/knative.dev/net-certmanager/cmd/controller@sha256:d18bbc5f1176f1c737633794ee61c668f11cd04e89b794c9c171062dda51177b
         resources:
           requests:
             cpu: 30m
@@ -208,7 +208,7 @@ kind: Service
 metadata:
   labels:
     app: networking-certmanager
-    serving.knative.dev/release: "v20200909-42dae3b"
+    serving.knative.dev/release: "v20200910-93c54e0"
     networking.knative.dev/certificate-provider: cert-manager
   name: networking-certmanager
   namespace: knative-serving
@@ -245,7 +245,7 @@ metadata:
   name: net-certmanager-webhook
   namespace: knative-serving
   labels:
-    serving.knative.dev/release: "v20200909-42dae3b"
+    serving.knative.dev/release: "v20200910-93c54e0"
 spec:
   selector:
     matchLabels:
@@ -258,14 +258,14 @@ spec:
       labels:
         app: net-certmanager-webhook
         role: net-certmanager-webhook
-        serving.knative.dev/release: "v20200909-42dae3b"
+        serving.knative.dev/release: "v20200910-93c54e0"
     spec:
       serviceAccountName: controller
       containers:
       - name: webhook
         # This is the Go import path for the binary that is containerized
         # and substituted here.
-        image: gcr.io/knative-nightly/knative.dev/net-certmanager/cmd/webhook@sha256:59882d31389172e43dab687752655661bc6f896893f407621e4bc1870e2c6607
+        image: gcr.io/knative-nightly/knative.dev/net-certmanager/cmd/webhook@sha256:299586064c04c715fa1911b9513aee751f3d08cb9d1c3fb1e1dea957790461a8
         resources:
           requests:
             cpu: 20m
@@ -319,7 +319,7 @@ metadata:
   namespace: knative-serving
   labels:
     role: net-certmanager-webhook
-    serving.knative.dev/release: "v20200909-42dae3b"
+    serving.knative.dev/release: "v20200910-93c54e0"
 spec:
   ports:
   - # Define metrics and profiling for them to be accessible within service meshes.
diff --git a/third_party/net-istio.yaml b/third_party/net-istio.yaml
index 7581349ee..2fe938b64 100644
--- a/third_party/net-istio.yaml
+++ b/third_party/net-istio.yaml
@@ -18,7 +18,7 @@ metadata:
   # These are the permissions needed by the Istio Ingress implementation.
   name: knative-serving-istio
   labels:
-    serving.knative.dev/release: "v20200909-771dc544"
+    serving.knative.dev/release: "v20200910-f58d9a3c"
     serving.knative.dev/controller: "true"
     networking.knative.dev/ingress-provider: istio
 rules:
@@ -48,7 +48,7 @@ metadata:
   name: knative-ingress-gateway
   namespace: knative-serving
   labels:
-    serving.knative.dev/release: "v20200909-771dc544"
+    serving.knative.dev/release: "v20200910-f58d9a3c"
     networking.knative.dev/ingress-provider: istio
 spec:
   selector:
@@ -85,7 +85,7 @@ metadata:
   name: cluster-local-gateway
   namespace: knative-serving
   labels:
-    serving.knative.dev/release: "v20200909-771dc544"
+    serving.knative.dev/release: "v20200910-f58d9a3c"
     networking.knative.dev/ingress-provider: istio
 spec:
   selector:
@@ -104,7 +104,7 @@ metadata:
   name: knative-local-gateway
   namespace: knative-serving
   labels:
-    serving.knative.dev/release: "v20200909-771dc544"
+    serving.knative.dev/release: "v20200910-f58d9a3c"
     networking.knative.dev/ingress-provider: istio
 spec:
   selector:
@@ -123,7 +123,7 @@ metadata:
   name: knative-local-gateway
   namespace: knative-serving
   labels:
-    serving.knative.dev/release: "v20200909-771dc544"
+    serving.knative.dev/release: "v20200910-f58d9a3c"
     networking.knative.dev/ingress-provider: istio
 spec:
   type: ClusterIP
@@ -181,7 +181,7 @@ kind: MutatingWebhookConfiguration
 metadata:
   name: webhook.istio.networking.internal.knative.dev
   labels:
-    serving.knative.dev/release: "v20200909-771dc544"
+    serving.knative.dev/release: "v20200910-f58d9a3c"
     networking.knative.dev/ingress-provider: istio
 webhooks:
 - admissionReviewVersions:
@@ -217,7 +217,7 @@ kind: ValidatingWebhookConfiguration
 metadata:
   name: config.webhook.istio.networking.internal.knative.dev
   labels:
-    serving.knative.dev/release: "v20200909-771dc544"
+    serving.knative.dev/release: "v20200910-f58d9a3c"
     networking.knative.dev/ingress-provider: istio
 webhooks:
 - admissionReviewVersions:
@@ -255,7 +255,7 @@ metadata:
   name: istio-webhook-certs
   namespace: knative-serving
   labels:
-    serving.knative.dev/release: "v20200909-771dc544"
+    serving.knative.dev/release: "v20200910-f58d9a3c"
     networking.knative.dev/ingress-provider: istio
 
 ---
@@ -279,7 +279,7 @@ metadata:
   name: config-istio
   namespace: knative-serving
   labels:
-    serving.knative.dev/release: "v20200909-771dc544"
+    serving.knative.dev/release: "v20200910-f58d9a3c"
     networking.knative.dev/ingress-provider: istio
 data:
   _example: |
@@ -349,7 +349,7 @@ metadata:
   name: networking-istio
   namespace: knative-serving
   labels:
-    serving.knative.dev/release: "v20200909-771dc544"
+    serving.knative.dev/release: "v20200910-f58d9a3c"
     networking.knative.dev/ingress-provider: istio
 spec:
   selector:
@@ -365,14 +365,14 @@ spec:
         sidecar.istio.io/inject: "false"
       labels:
         app: networking-istio
-        serving.knative.dev/release: "v20200909-771dc544"
+        serving.knative.dev/release: "v20200910-f58d9a3c"
     spec:
       serviceAccountName: controller
       containers:
       - name: networking-istio
         # This is the Go import path for the binary that is containerized
         # and substituted here.
-        image: gcr.io/knative-nightly/knative.dev/net-istio/cmd/controller@sha256:f08906e9578c828513d0ccae5ec2b15e0b6e06a0b36d6bbe8088bc8fbda9e6ef
+        image: gcr.io/knative-nightly/knative.dev/net-istio/cmd/controller@sha256:23456fe8f0365ca2f48d230fb49da6dc492366db65ad4c8a0c69b8530b817b10
         resources:
           requests:
             cpu: 30m
@@ -424,7 +424,7 @@ metadata:
   name: istio-webhook
   namespace: knative-serving
   labels:
-    serving.knative.dev/release: "v20200909-771dc544"
+    serving.knative.dev/release: "v20200910-f58d9a3c"
     networking.knative.dev/ingress-provider: istio
 spec:
   selector:
@@ -438,14 +438,14 @@ spec:
       labels:
         app: istio-webhook
         role: istio-webhook
-        serving.knative.dev/release: "v20200909-771dc544"
+        serving.knative.dev/release: "v20200910-f58d9a3c"
     spec:
       serviceAccountName: controller
       containers:
       - name: webhook
         # This is the Go import path for the binary that is containerized
         # and substituted here.
-        image: gcr.io/knative-nightly/knative.dev/net-istio/cmd/webhook@sha256:e01542da733da5d24d7a7ba84fe077f357dca7ba19e57930e939c52813942dba
+        image: gcr.io/knative-nightly/knative.dev/net-istio/cmd/webhook@sha256:7a10bb651dd7c67b50c9a739a3dc5ff85da3258afd5cbebc428a78da58787faf
         resources:
           requests:
             cpu: 20m
@@ -499,7 +499,7 @@ metadata:
   namespace: knative-serving
   labels:
     role: istio-webhook
-    serving.knative.dev/release: "v20200909-771dc544"
+    serving.knative.dev/release: "v20200910-f58d9a3c"
     networking.knative.dev/ingress-provider: istio
 spec:
   ports:


Test patch:
diff --git a/pkg/apis/autoscaling/annotation_validation_test.go b/pkg/apis/autoscaling/annotation_validation_test.go
index 2e69151a3..19b332553 100644
--- a/pkg/apis/autoscaling/annotation_validation_test.go
+++ b/pkg/apis/autoscaling/annotation_validation_test.go
@@ -24,7 +24,7 @@ import (
 	"github.com/google/go-cmp/cmp"
 )
 
-func TestValidateScaleBoundAnnotations(t *testing.T) {
+func TestValidateAnnotations(t *testing.T) {
 	cases := []struct {
 		name               string
 		annotations        map[string]string
@@ -174,7 +174,7 @@ func TestValidateScaleBoundAnnotations(t *testing.T) {
 	}, {
 		name:        "annotation /window is invalid for class HPA and metric CPU",
 		annotations: map[string]string{WindowAnnotationKey: "7s", ClassAnnotationKey: HPA, MetricAnnotationKey: CPU},
-		expectErr:   fmt.Sprintf(`invalid key name %q: %s for %s %s`, WindowAnnotationKey, HPA, MetricAnnotationKey, CPU),
+		expectErr:   fmt.Sprintf("invalid key name %q: \n%s for %s %s", WindowAnnotationKey, HPA, MetricAnnotationKey, CPU),
 	}, {
 		name:        "annotation /window is valid for class KPA",
 		annotations: map[string]string{WindowAnnotationKey: "7s", ClassAnnotationKey: KPA},
@@ -186,7 +186,7 @@ func TestValidateScaleBoundAnnotations(t *testing.T) {
 	}, {
 		name:        "value too short and invalid class for /window annotation",
 		annotations: map[string]string{WindowAnnotationKey: "1s", ClassAnnotationKey: HPA, MetricAnnotationKey: CPU},
-		expectErr:   fmt.Sprintf(`invalid key name %q: %s for %s %s`, WindowAnnotationKey, HPA, MetricAnnotationKey, CPU),
+		expectErr:   fmt.Sprintf("invalid key name %q: \n%s for %s %s", WindowAnnotationKey, HPA, MetricAnnotationKey, CPU),
 	}, {
 		name:        "value too long and valid class for /window annotation",
 		annotations: map[string]string{WindowAnnotationKey: "365h", ClassAnnotationKey: KPA},
diff --git a/pkg/apis/serving/v1alpha1/revision_conversion_test.go b/pkg/apis/serving/v1alpha1/revision_conversion_test.go
index 875e3dbf2..82009a289 100644
--- a/pkg/apis/serving/v1alpha1/revision_conversion_test.go
+++ b/pkg/apis/serving/v1alpha1/revision_conversion_test.go
@@ -92,7 +92,7 @@ func TestRevisionConversion(t *testing.T) {
 				},
 				ServiceName:       "foo-bar",
 				LogURL:            "http://logger.io",
-				ContainerStatuses: []ContainerStatuses{},
+				ContainerStatuses: []ContainerStatus{},
 			},
 		},
 	}}
@@ -187,7 +187,7 @@ func TestRevisionConversionForMultiContainer(t *testing.T) {
 			},
 			ServiceName:       "foo-bar",
 			LogURL:            "http://logger.io",
-			ContainerStatuses: []ContainerStatuses{},
+			ContainerStatuses: []ContainerStatus{},
 		},
 	}
 	beta := &v1beta1.Revision{}
diff --git a/pkg/reconciler/revision/resources/deploy_test.go b/pkg/reconciler/revision/resources/deploy_test.go
index 459d2b9d4..f617793e7 100644
--- a/pkg/reconciler/revision/resources/deploy_test.go
+++ b/pkg/reconciler/revision/resources/deploy_test.go
@@ -489,7 +489,7 @@ func TestMakePodSpec(t *testing.T) {
 				}},
 				ReadinessProbe: withTCPReadinessProbe(v1.DefaultUserPort),
 			}}),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}}),
 		),
@@ -521,7 +521,7 @@ func TestMakePodSpec(t *testing.T) {
 				}},
 				ReadinessProbe: withTCPReadinessProbe(v1.DefaultUserPort),
 			}}),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}}),
 			func(revision *v1.Revision) {
@@ -569,7 +569,7 @@ func TestMakePodSpec(t *testing.T) {
 				ReadinessProbe: withTCPReadinessProbe(v1.DefaultUserPort),
 			}}),
 			withContainerConcurrency(1),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}}),
 		),
@@ -590,7 +590,7 @@ func TestMakePodSpec(t *testing.T) {
 				Image:          "busybox",
 				ReadinessProbe: withTCPReadinessProbe(v1.DefaultUserPort),
 			}}),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}}),
 		),
@@ -617,7 +617,7 @@ func TestMakePodSpec(t *testing.T) {
 				ReadinessProbe: withTCPReadinessProbe(v1.DefaultUserPort),
 			}}),
 			withContainerConcurrency(121),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}}),
 		),
@@ -640,7 +640,7 @@ func TestMakePodSpec(t *testing.T) {
 			}}),
 			withContainerConcurrency(42),
 			withOwnerReference("parent-config"),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}}),
 		),
@@ -662,7 +662,7 @@ func TestMakePodSpec(t *testing.T) {
 				Image:          "busybox",
 				ReadinessProbe: withHTTPReadinessProbe(v1.DefaultUserPort),
 			}}),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}}),
 		),
@@ -683,7 +683,7 @@ func TestMakePodSpec(t *testing.T) {
 				Image:          "busybox",
 				ReadinessProbe: withTCPReadinessProbe(12345),
 			}}),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}}),
 		),
@@ -704,7 +704,7 @@ func TestMakePodSpec(t *testing.T) {
 				Image:          "busybox",
 				ReadinessProbe: withExecReadinessProbe([]string{"echo", "hello"}),
 			}}),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}}),
 		),
@@ -734,7 +734,7 @@ func TestMakePodSpec(t *testing.T) {
 					},
 				},
 			}}),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}}),
 		),
@@ -769,7 +769,7 @@ func TestMakePodSpec(t *testing.T) {
 						TCPSocket: &corev1.TCPSocketAction{},
 					}}}},
 			),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}}),
 		),
@@ -795,7 +795,7 @@ func TestMakePodSpec(t *testing.T) {
 				Image:          "busybox",
 				ReadinessProbe: withTCPReadinessProbe(v1.DefaultUserPort),
 			}}),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}}),
 			func(revision *v1.Revision) {
@@ -836,7 +836,7 @@ func TestMakePodSpec(t *testing.T) {
 				Name:  "sidecar-container-2",
 				Image: "alpine",
 			}}),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}, {
 				ImageDigest: "ubuntu@sha256:deadbffe",
@@ -898,7 +898,7 @@ func TestMakePodSpec(t *testing.T) {
 				Name:  sidecarContainerName,
 				Image: "ubuntu",
 			}}),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}, {
 				ImageDigest: "ubuntu@sha256:deadbffe",
@@ -1017,7 +1017,7 @@ func TestMakeDeployment(t *testing.T) {
 			}}),
 			withoutLabels,
 			withContainerConcurrency(1),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}, {
 				ImageDigest: "ubuntu@sha256:deadbffe",
@@ -1033,7 +1033,7 @@ func TestMakeDeployment(t *testing.T) {
 			}}),
 			withoutLabels,
 			withOwnerReference("parent-config"),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}})),
 		want: appsv1deployment(),
@@ -1045,7 +1045,7 @@ func TestMakeDeployment(t *testing.T) {
 				Image:          "ubuntu",
 				ReadinessProbe: withTCPReadinessProbe(12345),
 			}}),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}}),
 			withoutLabels, func(revision *v1.Revision) {
@@ -1070,7 +1070,7 @@ func TestMakeDeployment(t *testing.T) {
 				Image:          "ubuntu",
 				ReadinessProbe: withTCPReadinessProbe(12345),
 			}}),
-			WithContainerStatuses([]v1.ContainerStatuses{{
+			WithContainerStatuses([]v1.ContainerStatus{{
 				ImageDigest: "busybox@sha256:deadbeef",
 			}}), withoutLabels),
 		want: appsv1deployment(func(deploy *appsv1.Deployment) {
diff --git a/pkg/reconciler/revision/resources/imagecache_test.go b/pkg/reconciler/revision/resources/imagecache_test.go
index 4b1ce2265..2353a23ec 100644
--- a/pkg/reconciler/revision/resources/imagecache_test.go
+++ b/pkg/reconciler/revision/resources/imagecache_test.go
@@ -57,7 +57,7 @@ func TestMakeImageCache(t *testing.T) {
 				},
 			},
 			Status: v1.RevisionStatus{
-				ContainerStatuses: []v1.ContainerStatuses{{
+				ContainerStatuses: []v1.ContainerStatus{{
 					Name:        "user-container",
 					ImageDigest: "busybox@sha256:deadbeef",
 				}},
@@ -117,7 +117,7 @@ func TestMakeImageCache(t *testing.T) {
 				},
 			},
 			Status: v1.RevisionStatus{
-				ContainerStatuses: []v1.ContainerStatuses{{
+				ContainerStatuses: []v1.ContainerStatus{{
 					Name:        "user-container1",
 					ImageDigest: "ubuntu@sha256:deadbeef1",
 				}, {
@@ -182,7 +182,7 @@ func TestMakeImageCache(t *testing.T) {
 				},
 			},
 			Status: v1.RevisionStatus{
-				ContainerStatuses: []v1.ContainerStatuses{{}},
+				ContainerStatuses: []v1.ContainerStatus{{}},
 			},
 		},
 		containerName: "user-container",
@@ -231,7 +231,7 @@ func TestMakeImageCache(t *testing.T) {
 				},
 			},
 			Status: v1.RevisionStatus{
-				ContainerStatuses: []v1.ContainerStatuses{{
+				ContainerStatuses: []v1.ContainerStatus{{
 					Name:        "user-container",
 					ImageDigest: "busybox@sha256:deadbeef",
 				}},
diff --git a/pkg/reconciler/revision/revision_test.go b/pkg/reconciler/revision/revision_test.go
index 158ec9f02..2faf82500 100644
--- a/pkg/reconciler/revision/revision_test.go
+++ b/pkg/reconciler/revision/revision_test.go
@@ -440,7 +440,7 @@ func TestRevWithImageDigests(t *testing.T) {
 			t.Error("Container statuses do not match the order of containers in spec")
 		}
 	}
-	rev.Status.ContainerStatuses = []v1.ContainerStatuses{}
+	rev.Status.ContainerStatuses = []v1.ContainerStatus{}
 	updateRevision(t, ctx, controller, rev)
 	if len(rev.Status.ContainerStatuses) != 0 {
 		t.Error("Failed to update revision")
diff --git a/pkg/reconciler/revision/table_test.go b/pkg/reconciler/revision/table_test.go
index a4040546c..484717020 100644
--- a/pkg/reconciler/revision/table_test.go
+++ b/pkg/reconciler/revision/table_test.go
@@ -709,7 +709,7 @@ func changeContainers(deploy *appsv1.Deployment) *appsv1.Deployment {
 
 func withDefaultContainerStatuses() RevisionOption {
 	return func(r *v1.Revision) {
-		r.Status.ContainerStatuses = []v1.ContainerStatuses{{
+		r.Status.ContainerStatuses = []v1.ContainerStatus{{
 			Name:        r.Name,
 			ImageDigest: "",
 		}}
diff --git a/pkg/testing/v1/revision.go b/pkg/testing/v1/revision.go
index 28ab37604..7bd4f1248 100644
--- a/pkg/testing/v1/revision.go
+++ b/pkg/testing/v1/revision.go
@@ -227,7 +227,7 @@ func WithRevisionAnn(key, value string) RevisionOption {
 }
 
 // WithContainerStatuses sets the .Status.ContainerStatuses to the Revision.
-func WithContainerStatuses(containerStatus []v1.ContainerStatuses) RevisionOption {
+func WithContainerStatuses(containerStatus []v1.ContainerStatus) RevisionOption {
 	return func(r *v1.Revision) {
 		r.Status.ContainerStatuses = containerStatus
 	}
diff --git a/third_party/contour-latest/net-contour.yaml b/third_party/contour-latest/net-contour.yaml
index 017956bd4..d980e7e1b 100644
--- a/third_party/contour-latest/net-contour.yaml
+++ b/third_party/contour-latest/net-contour.yaml
@@ -35,7 +35,7 @@ metadata:
   namespace: knative-serving
   labels:
     networking.knative.dev/ingress-provider: contour
-    serving.knative.dev/release: "v20200909-7c0a7a7f"
+    serving.knative.dev/release: "v20200910-070b8cc5"
 data:
   _example: |
     ################################
@@ -100,7 +100,7 @@ spec:
       - name: controller
         # This is the Go import path for the binary that is containerized
         # and substituted here.
-        image: gcr.io/knative-nightly/knative.dev/net-contour/cmd/controller@sha256:4b1a016533f40b8e537f1a8260fdb29ab17221271edab84a7eae44934f539e75
+        image: gcr.io/knative-nightly/knative.dev/net-contour/cmd/controller@sha256:154d30968410f830e982e6304e6662ab511c8e0190cc98ca5b5f1003d131b409
         resources:
           requests:
             cpu: 40m
diff --git a/third_party/kourier-latest/kourier.yaml b/third_party/kourier-latest/kourier.yaml
index fc0e8933c..fd4e9a40e 100644
--- a/third_party/kourier-latest/kourier.yaml
+++ b/third_party/kourier-latest/kourier.yaml
@@ -104,7 +104,7 @@ spec:
         app: 3scale-kourier-control
     spec:
       containers:
-      - image: gcr.io/knative-nightly/knative.dev/net-kourier/cmd/kourier@sha256:e714b702827a18a946746417471049d65e63f99f22442457ef383892b855096f
+      - image: gcr.io/knative-nightly/knative.dev/net-kourier/cmd/kourier@sha256:1af376a80a14e06b4e29d5031b2ca4f45612553d4fe7e8a092e469455cdd203b
         imagePullPolicy: Always
         name: kourier-control
         env: