Repository: knative/client
Pull request #1652 (2022-04-13 01:45:25)

[main] Upgrade to latest dependencies
Cron -knative-prow-robot

/cc knative/client-wg-leads
/assign knative/client-wg-leads

Produced by: knative-sandbox/knobots/actions/update-deps

Details:
```
bumping knative.dev/eventing 2222324...1b90ef3:
  > 1b90ef3 Limit the number of exported traces (# 6329)
bumping knative.dev/serving e75bcf0...2de1474:
  > 2de1474 All Hops Encrypted: Activator serving TLS (# 12770)
```

codecov[bot]: # [Codecov](https://codecov.io/gh/knative/client/pull/1652?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative) Report
> Merging [#1652](https://codecov.io/gh/knative/client/pull/1652?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative) (4ca0d66) into [main](https://codecov.io/gh/knative/client/commit/38b1034b12fb9e53537b77ac3adea9a94fc38fb1?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative) (38b1034) will **decrease** coverage by `0.75%`.
> The diff coverage is `n/a`.

```diff
@@            Coverage Diff             @@
##             main    #1652      +/-   ##
==========================================
- Coverage   79.93%   79.17%   -0.76%     
==========================================
  Files         171      171              
  Lines        9116    12876    +3760     
==========================================
+ Hits         7287    10195    +2908     
- Misses       1116     1959     +843     
- Partials      713      722       +9     
```


| [Impacted Files](https://codecov.io/gh/knative/client/pull/1652?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative) | Coverage Δ | |
|---|---|---|
| [pkg/kn/flags/channel\_types.go](https://codecov.io/gh/knative/client/pull/1652/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative#diff-cGtnL2tuL2ZsYWdzL2NoYW5uZWxfdHlwZXMuZ28=) | `86.44% <0.00%> (-6.90%)` | :arrow_down: |
| [pkg/kn/commands/source/list.go](https://codecov.io/gh/knative/client/pull/1652/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative#diff-cGtnL2tuL2NvbW1hbmRzL3NvdXJjZS9saXN0Lmdv) | `55.73% <0.00%> (-5.97%)` | :arrow_down: |
| [pkg/kn/commands/domain/update.go](https://codecov.io/gh/knative/client/pull/1652/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative#diff-cGtnL2tuL2NvbW1hbmRzL2RvbWFpbi91cGRhdGUuZ28=) | `60.86% <0.00%> (-5.80%)` | :arrow_down: |
| [pkg/kn/commands/human\_readable\_flags.go](https://codecov.io/gh/knative/client/pull/1652/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative#diff-cGtnL2tuL2NvbW1hbmRzL2h1bWFuX3JlYWRhYmxlX2ZsYWdzLmdv) | `82.22% <0.00%> (-5.78%)` | :arrow_down: |
| [pkg/kn/commands/trigger/delete.go](https://codecov.io/gh/knative/client/pull/1652/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative#diff-cGtnL2tuL2NvbW1hbmRzL3RyaWdnZXIvZGVsZXRlLmdv) | `70.00% <0.00%> (-5.00%)` | :arrow_down: |
| [pkg/kn/commands/version/version.go](https://codecov.io/gh/knative/client/pull/1652/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative#diff-cGtnL2tuL2NvbW1hbmRzL3ZlcnNpb24vdmVyc2lvbi5nbw==) | `74.32% <0.00%> (-4.99%)` | :arrow_down: |
| [pkg/kn/commands/domain/list.go](https://codecov.io/gh/knative/client/pull/1652/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative#diff-cGtnL2tuL2NvbW1hbmRzL2RvbWFpbi9saXN0Lmdv) | `66.66% <0.00%> (-4.77%)` | :arrow_down: |
| [pkg/kn/commands/trigger/list.go](https://codecov.io/gh/knative/client/pull/1652/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative#diff-cGtnL2tuL2NvbW1hbmRzL3RyaWdnZXIvbGlzdC5nbw==) | `70.73% <0.00%> (-4.27%)` | :arrow_down: |
| [pkg/kn/commands/flags/sink.go](https://codecov.io/gh/knative/client/pull/1652/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative#diff-cGtnL2tuL2NvbW1hbmRzL2ZsYWdzL3NpbmsuZ28=) | `83.33% <0.00%> (-4.17%)` | :arrow_down: |
| [pkg/kn/commands/source/binding/create.go](https://codecov.io/gh/knative/client/pull/1652/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative#diff-cGtnL2tuL2NvbW1hbmRzL3NvdXJjZS9iaW5kaW5nL2NyZWF0ZS5nbw==) | `66.66% <0.00%> (-4.17%)` | :arrow_down: |
| ... and [160 more](https://codecov.io/gh/knative/client/pull/1652/diff?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/knative/client/pull/1652?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/knative/client/pull/1652?src=pr&el=footer&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative). Last update [b4e95db...4ca0d66](https://codecov.io/gh/knative/client/pull/1652?src=pr&el=lastupdated&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative).


Patch:
diff --git a/docs/cmd/kn_broker_delete.md b/docs/cmd/kn_broker_delete.md
index 3abd1d7f..be8c6efd 100644
--- a/docs/cmd/kn_broker_delete.md
+++ b/docs/cmd/kn_broker_delete.md
@@ -25,6 +25,7 @@ kn broker delete NAME
       --no-wait            Do not wait for 'broker delete' operation to be completed. (default true)
       --wait               Wait for 'broker delete' operation to be completed.
       --wait-timeout int   Seconds to wait before giving up on waiting for broker to be deleted. (default 600)
+      --wait-window int    Seconds to wait for broker to be deleted after a false ready condition is returned (default 2)
 ```
 
 ### Options inherited from parent commands
diff --git a/docs/cmd/kn_revision_delete.md b/docs/cmd/kn_revision_delete.md
index c804fcab..81a72573 100644
--- a/docs/cmd/kn_revision_delete.md
+++ b/docs/cmd/kn_revision_delete.md
@@ -30,6 +30,7 @@ kn revision delete NAME [NAME ...]
       --prune-all          Remove all unreferenced revisions in a namespace.
       --wait               Wait for 'revision delete' operation to be completed.
       --wait-timeout int   Seconds to wait before giving up on waiting for revision to be deleted. (default 600)
+      --wait-window int    Seconds to wait for revision to be deleted after a false ready condition is returned (default 2)
 ```
 
 ### Options inherited from parent commands
diff --git a/docs/cmd/kn_service_apply.md b/docs/cmd/kn_service_apply.md
index 978cc4ec..32a49f76 100644
--- a/docs/cmd/kn_service_apply.md
+++ b/docs/cmd/kn_service_apply.md
@@ -68,10 +68,12 @@ kn service apply s0 --filename my-svc.yml
       --scale-utilization int             Percentage of concurrent requests utilization before scaling up. (default 70)
       --scale-window string               Duration to look back for making auto-scaling decisions. The service is scaled to zero if no request was received in during that time. (eg: 10s)
       --service-account string            Service account name to set. An empty argument ("") clears the service account. The referenced service account must exist in the service's namespace.
+      --timeout int                       Duration in seconds that the request routing layer will wait for a request delivered to a container to begin replying (default 300)
       --user int                          The user ID to run the container (e.g., 1001).
       --volume stringArray                Add a volume from a ConfigMap (prefix cm: or config-map:) or a Secret (prefix secret: or sc:). Example: --volume myvolume=cm:myconfigmap or --volume myvolume=secret:mysecret. You can use this flag multiple times. To unset a ConfigMap/Secret reference, append "-" to the name, e.g. --volume myvolume-.
       --wait                              Wait for 'service apply' operation to be completed. (default true)
       --wait-timeout int                  Seconds to wait before giving up on waiting for service to be ready. (default 600)
+      --wait-window int                   Seconds to wait for service to be ready after a false ready condition is returned (default 2)
 ```
 
 ### Options inherited from parent commands
diff --git a/docs/cmd/kn_service_create.md b/docs/cmd/kn_service_create.md
index 1a0c8ca9..50925c26 100644
--- a/docs/cmd/kn_service_create.md
+++ b/docs/cmd/kn_service_create.md
@@ -95,10 +95,12 @@ kn service create NAME --image IMAGE
       --service-account string            Service account name to set. An empty argument ("") clears the service account. The referenced service account must exist in the service's namespace.
       --tag strings                       Set tag (format: --tag revisionRef=tagName) where revisionRef can be a revision or '@latest' string representing latest ready revision. This flag can be specified multiple times.
       --target string                     Work on local directory instead of a remote cluster (experimental)
+      --timeout int                       Duration in seconds that the request routing layer will wait for a request delivered to a container to begin replying (default 300)
       --user int                          The user ID to run the container (e.g., 1001).
       --volume stringArray                Add a volume from a ConfigMap (prefix cm: or config-map:) or a Secret (prefix secret: or sc:). Example: --volume myvolume=cm:myconfigmap or --volume myvolume=secret:mysecret. You can use this flag multiple times. To unset a ConfigMap/Secret reference, append "-" to the name, e.g. --volume myvolume-.
       --wait                              Wait for 'service create' operation to be completed. (default true)
       --wait-timeout int                  Seconds to wait before giving up on waiting for service to be ready. (default 600)
+      --wait-window int                   Seconds to wait for service to be ready after a false ready condition is returned (default 2)
 ```
 
 ### Options inherited from parent commands
diff --git a/docs/cmd/kn_service_delete.md b/docs/cmd/kn_service_delete.md
index 8d64809b..2f026303 100644
--- a/docs/cmd/kn_service_delete.md
+++ b/docs/cmd/kn_service_delete.md
@@ -35,6 +35,7 @@ kn service delete NAME [NAME ...]
       --target string      Work on local directory instead of a remote cluster (experimental)
       --wait               Wait for 'service delete' operation to be completed.
       --wait-timeout int   Seconds to wait before giving up on waiting for service to be deleted. (default 600)
+      --wait-window int    Seconds to wait for service to be deleted after a false ready condition is returned (default 2)
 ```
 
 ### Options inherited from parent commands
diff --git a/docs/cmd/kn_service_import.md b/docs/cmd/kn_service_import.md
index 603cdf53..715aa890 100644
--- a/docs/cmd/kn_service_import.md
+++ b/docs/cmd/kn_service_import.md
@@ -25,6 +25,7 @@ kn service import FILENAME
       --no-wait            Do not wait for 'service import' operation to be completed.
       --wait               Wait for 'service import' operation to be completed. (default true)
       --wait-timeout int   Seconds to wait before giving up on waiting for service to be ready. (default 600)
+      --wait-window int    Seconds to wait for service to be ready after a false ready condition is returned (default 2)
 ```
 
 ### Options inherited from parent commands
diff --git a/docs/cmd/kn_service_update.md b/docs/cmd/kn_service_update.md
index 8c37dee8..5ef26057 100644
--- a/docs/cmd/kn_service_update.md
+++ b/docs/cmd/kn_service_update.md
@@ -82,12 +82,14 @@ kn service update NAME
       --service-account string            Service account name to set. An empty argument ("") clears the service account. The referenced service account must exist in the service's namespace.
       --tag strings                       Set tag (format: --tag revisionRef=tagName) where revisionRef can be a revision or '@latest' string representing latest ready revision. This flag can be specified multiple times.
       --target string                     Work on local directory instead of a remote cluster (experimental)
+      --timeout int                       Duration in seconds that the request routing layer will wait for a request delivered to a container to begin replying (default 300)
       --traffic strings                   Set traffic distribution (format: --traffic revisionRef=percent) where revisionRef can be a revision or a tag or '@latest' string representing latest ready revision. This flag can be given multiple times with percent summing up to 100%.
       --untag strings                     Untag revision (format: --untag tagName). This flag can be specified multiple times.
       --user int                          The user ID to run the container (e.g., 1001).
       --volume stringArray                Add a volume from a ConfigMap (prefix cm: or config-map:) or a Secret (prefix secret: or sc:). Example: --volume myvolume=cm:myconfigmap or --volume myvolume=secret:mysecret. You can use this flag multiple times. To unset a ConfigMap/Secret reference, append "-" to the name, e.g. --volume myvolume-.
       --wait                              Wait for 'service update' operation to be completed. (default true)
       --wait-timeout int                  Seconds to wait before giving up on waiting for service to be ready. (default 600)
+      --wait-window int                   Seconds to wait for service to be ready after a false ready condition is returned (default 2)
 ```
 
 ### Options inherited from parent commands
diff --git a/go.mod b/go.mod
index 1a3c4d9f..a9103c66 100644
--- a/go.mod
+++ b/go.mod
@@ -20,10 +20,10 @@ require (
 	k8s.io/cli-runtime v0.23.4
 	k8s.io/client-go v0.23.5
 	k8s.io/code-generator v0.23.5
-	knative.dev/eventing v0.30.1-0.20220412073008-22223245a4a4
+	knative.dev/eventing v0.30.1-0.20220413070808-1b90ef335226
 	knative.dev/hack v0.0.0-20220411131823-6ffd8417de7c
 	knative.dev/networking v0.0.0-20220412163509-1145ec58c8be
 	knative.dev/pkg v0.0.0-20220412134708-e325df66cb51
-	knative.dev/serving v0.30.1-0.20220412142308-e75bcf0ee860
+	knative.dev/serving v0.30.1-0.20220413003907-2de1474b55ba
 	sigs.k8s.io/yaml v1.3.0
 )
diff --git a/go.sum b/go.sum
index d3d6afed..eea144d3 100644
--- a/go.sum
+++ b/go.sum
@@ -2182,8 +2182,8 @@ k8s.io/utils v0.0.0-20220127004650-9b3446523e65/go.mod h1:jPW/WVKK9YHAvNhRxK0md/
 k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc=
 k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 knative.dev/caching v0.0.0-20220412015107-318083f279be/go.mod h1:FqsgCB99NLJq1c8ZtpHYAb/3Oalgko9i4nF45IiKPio=
-knative.dev/eventing v0.30.1-0.20220412073008-22223245a4a4 h1:037hkBCKqsGcLA95hUVGnLRX5Xviy0hW9Ws8ZBDd83E=
-knative.dev/eventing v0.30.1-0.20220412073008-22223245a4a4/go.mod h1:C1vLgthI00ev8zSqToU/sVgI6LI0ZQgezs0GX9uZ8l8=
+knative.dev/eventing v0.30.1-0.20220413070808-1b90ef335226 h1:InSxj41bc1REMpsz9YR8IwxgO5KpjosBgd1Pwtzwf5k=
+knative.dev/eventing v0.30.1-0.20220413070808-1b90ef335226/go.mod h1:C1vLgthI00ev8zSqToU/sVgI6LI0ZQgezs0GX9uZ8l8=
 knative.dev/hack v0.0.0-20220328133751-f06773764ce3/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
 knative.dev/hack v0.0.0-20220411131823-6ffd8417de7c h1:aXsFXeky/GccNQxwf72CS4NR3EoqTqsCVNKQnblfwr0=
 knative.dev/hack v0.0.0-20220411131823-6ffd8417de7c/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
@@ -2196,8 +2196,8 @@ knative.dev/pkg v0.0.0-20220411234407-00c122e376d0/go.mod h1:0A5D5tOLettuVoi5x+0
 knative.dev/pkg v0.0.0-20220412134708-e325df66cb51 h1:4AmaxeY7+r/PYYz3HS9pMY21Mw3ykO6STLFEk2FoJ2s=
 knative.dev/pkg v0.0.0-20220412134708-e325df66cb51/go.mod h1:j2MeD8s+JoCu1vegX80GbRXV/xd20Jm1NznxBYtVXiM=
 knative.dev/reconciler-test v0.0.0-20220411142808-55eab02440e9/go.mod h1:gH/ghOMDp7c2I2EAAhH4kYh0MI2hJ75OtiAMfeSl85o=
-knative.dev/serving v0.30.1-0.20220412142308-e75bcf0ee860 h1:r6Nim2Kruuu/FugWpwdxfX4Qh0LmR7iRLpfUk4msnAg=
-knative.dev/serving v0.30.1-0.20220412142308-e75bcf0ee860/go.mod h1:b+wL9MBshkUyn8q7SCo+swF6qfrsaWG7cDa/AWuI4Nw=
+knative.dev/serving v0.30.1-0.20220413003907-2de1474b55ba h1:2v3VApF5OipZ58egt6GHS8YY4R5UwUuIH+y40PyUfbo=
+knative.dev/serving v0.30.1-0.20220413003907-2de1474b55ba/go.mod h1:b+wL9MBshkUyn8q7SCo+swF6qfrsaWG7cDa/AWuI4Nw=
 mvdan.cc/gofumpt v0.1.1/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48=
 mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc=
 mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4=
diff --git a/pkg/kn/commands/service/configuration_edit_flags.go b/pkg/kn/commands/service/configuration_edit_flags.go
index f66e9836..17b13e08 100644
--- a/pkg/kn/commands/service/configuration_edit_flags.go
+++ b/pkg/kn/commands/service/configuration_edit_flags.go
@@ -21,8 +21,8 @@ import (
 	"strings"
 
 	"github.com/spf13/cobra"
-
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"knative.dev/serving/pkg/apis/config"
 
 	knflags "knative.dev/client/pkg/kn/flags"
 	servinglib "knative.dev/client/pkg/serving"
@@ -54,6 +54,7 @@ type ConfigurationEditFlags struct {
 	AnnotationsRevision []string
 	ClusterLocal        bool
 	ScaleInit           int
+	TimeoutSeconds      int64
 
 	// Preferences about how to do the action.
 	LockToDigest         bool
@@ -170,6 +171,11 @@ func (p *ConfigurationEditFlags) addSharedFlags(command *cobra.Command) {
 
 	command.Flags().IntVar(&p.ScaleInit, "scale-init", 0, "Initial number of replicas with which a service starts. Can be 0 or a positive integer.")
 	p.markFlagMakesRevision("scale-init")
+
+	command.Flags().Int64Var(&p.TimeoutSeconds, "timeout", config.DefaultRevisionTimeoutSeconds,
+		"Duration in seconds that the request routing layer will wait for a request delivered to a "+""+
+			"container to begin replying")
+	p.markFlagMakesRevision("timeout")
 }
 
 // AddUpdateFlags adds the flags specific to update.
@@ -450,6 +456,10 @@ func (p *ConfigurationEditFlags) Apply(
 		}
 	}
 
+	if cmd.Flags().Changed("timeout") {
+		service.Spec.Template.Spec.TimeoutSeconds = &p.TimeoutSeconds
+	}
+
 	return nil
 }
 
diff --git a/pkg/kn/commands/service/create.go b/pkg/kn/commands/service/create.go
index df52b846..d3d60561 100644
--- a/pkg/kn/commands/service/create.go
+++ b/pkg/kn/commands/service/create.go
@@ -20,6 +20,7 @@ import (
 	"fmt"
 	"io"
 	"os"
+	"time"
 
 	"knative.dev/client/pkg/config"
 	"knative.dev/client/pkg/kn/commands"
@@ -187,7 +188,11 @@ func waitIfRequested(ctx context.Context, client clientservingv1.KnServingClient
 		return nil
 	}
 	fmt.Fprintf(out, "%s service '%s' in namespace '%s':\n", verbDoing, serviceName, client.Namespace())
-	return waitForServiceToGetReady(ctx, client, serviceName, waitFlags.TimeoutInSeconds, verbDone, out)
+	wconfig := clientservingv1.WaitConfig{
+		Timeout:     time.Duration(waitFlags.TimeoutInSeconds) * time.Second,
+		ErrorWindow: time.Duration(waitFlags.ErrorWindowInSeconds) * time.Second,
+	}
+	return waitForServiceToGetReady(ctx, client, serviceName, wconfig, verbDone, out)
 }
 
 func prepareAndUpdateService(ctx context.Context, client clientservingv1.KnServingClient, service *servingv1.Service) (bool, error) {
@@ -220,9 +225,9 @@ func prepareAndUpdateService(ctx context.Context, client clientservingv1.KnServi
 
 }
 
-func waitForServiceToGetReady(ctx context.Context, client clientservingv1.KnServingClient, name string, timeout int, verbDone string, out io.Writer) error {
+func waitForServiceToGetReady(ctx context.Context, client clientservingv1.KnServingClient, name string, wconfig clientservingv1.WaitConfig, verbDone string, out io.Writer) error {
 	fmt.Fprintln(out, "")
-	err := waitForService(ctx, client, name, out, timeout)
+	err := waitForService(ctx, client, name, out, wconfig)
 	if err != nil {
 		return err
 	}
diff --git a/pkg/kn/commands/service/service.go b/pkg/kn/commands/service/service.go
index 9cb15461..f1bc4b95 100644
--- a/pkg/kn/commands/service/service.go
+++ b/pkg/kn/commands/service/service.go
@@ -44,8 +44,8 @@ func NewServiceCommand(p *commands.KnParams) *cobra.Command {
 	return serviceCmd
 }
 
-func waitForService(ctx context.Context, client clientservingv1.KnServingClient, serviceName string, out io.Writer, timeout int) error {
-	err, duration := client.WaitForService(ctx, serviceName, time.Duration(timeout)*time.Second, wait.SimpleMessageCallback(out))
+func waitForService(ctx context.Context, client clientservingv1.KnServingClient, serviceName string, out io.Writer, wconfig clientservingv1.WaitConfig) error {
+	err, duration := client.WaitForService(ctx, serviceName, wconfig, wait.SimpleMessageCallback(out))
 	if err != nil {
 		return err
 	}
diff --git a/pkg/kn/commands/service/update.go b/pkg/kn/commands/service/update.go
index f9c28e7e..5beefaf8 100644
--- a/pkg/kn/commands/service/update.go
+++ b/pkg/kn/commands/service/update.go
@@ -17,6 +17,7 @@ package service
 import (
 	"errors"
 	"fmt"
+	"time"
 
 	"github.com/spf13/cobra"
 	"knative.dev/client/pkg/config"
@@ -135,7 +136,11 @@ func NewServiceUpdateCommand(p *commands.KnParams) *cobra.Command {
 			if waitFlags.Wait && targetFlag == "" {
 				fmt.Fprintf(out, "Updating Service '%s' in namespace '%s':\n", args[0], namespace)
 				fmt.Fprintln(out, "")
-				err := waitForService(cmd.Context(), client, name, out, waitFlags.TimeoutInSeconds)
+				wconfig := clientservingv1.WaitConfig{
+					Timeout:     time.Duration(waitFlags.TimeoutInSeconds) * time.Second,
+					ErrorWindow: time.Duration(waitFlags.ErrorWindowInSeconds) * time.Second,
+				}
+				err := waitForService(cmd.Context(), client, name, out, wconfig)
 				if err != nil {
 					return err
 				}
diff --git a/pkg/kn/commands/wait_flags.go b/pkg/kn/commands/wait_flags.go
index ce4c7d13..d6bca23a 100644
--- a/pkg/kn/commands/wait_flags.go
+++ b/pkg/kn/commands/wait_flags.go
@@ -33,6 +33,8 @@ type WaitFlags struct {
 	TimeoutInSeconds int
 	// If set then apply resources and wait for completion
 	Wait bool
+	// Duration in seconds for waiting between intermediate false ready conditions
+	ErrorWindowInSeconds int
 }
 
 // Add flags which influence the wait/no-wait behaviour when creating or updating
@@ -49,4 +51,7 @@ func (p *WaitFlags) AddConditionWaitFlags(command *cobra.Command, waitTimeoutDef
 	knflags.AddBothBoolFlagsUnhidden(command.Flags(), &p.Wait, "wait", "", waitDefault, waitUsage)
 	timeoutUsage := fmt.Sprintf("Seconds to wait before giving up on waiting for %s to be %s.", what, until)
 	command.Flags().IntVar(&p.TimeoutInSeconds, "wait-timeout", waitTimeoutDefault, timeoutUsage)
+
+	windowUsage := fmt.Sprintf("Seconds to wait for %s to be %s after a false ready condition is returned", what, until)
+	command.Flags().IntVar(&p.ErrorWindowInSeconds, "wait-window", 2, windowUsage)
 }
diff --git a/pkg/serving/v1/client.go b/pkg/serving/v1/client.go
index 1a89ddd6..f5c6e964 100644
--- a/pkg/serving/v1/client.go
+++ b/pkg/serving/v1/client.go
@@ -48,6 +48,11 @@ import (
 // or an error
 type ServiceUpdateFunc func(origService *servingv1.Service) (*servingv1.Service, error)
 
+type WaitConfig struct {
+	Timeout     time.Duration
+	ErrorWindow time.Duration
+}
+
 // Kn interface to serving. All methods are relative to the
 // namespace specified during construction
 type KnServingClient interface {
@@ -89,7 +94,7 @@ type KnServingClient interface {
 
 	// Wait for a service to become ready, but not longer than provided timeout.
 	// Return error and how long has been waited
-	WaitForService(ctx context.Context, name string, timeout time.Duration, msgCallback wait.MessageCallback) (error, time.Duration)
+	WaitForService(ctx context.Context, name string, wconfig WaitConfig, msgCallback wait.MessageCallback) (error, time.Duration)
 
 	// Get a configuration by name
 	GetConfiguration(ctx context.Context, name string) (*servingv1.Configuration, error)
@@ -351,17 +356,17 @@ func (cl *knServingClient) deleteService(ctx context.Context, serviceName string
 }
 
 // Wait for a service to become ready, but not longer than provided timeout
-func (cl *knServingClient) WaitForService(ctx context.Context, name string, timeout time.Duration, msgCallback wait.MessageCallback) (error, time.Duration) {
+func (cl *knServingClient) WaitForService(ctx context.Context, name string, wconfig WaitConfig, msgCallback wait.MessageCallback) (error, time.Duration) {
 	waitForReady := wait.NewWaitForReady("service", cl.WatchServiceWithVersion, serviceConditionExtractor)
 
 	service, err := cl.GetService(ctx, name)
 	if err != nil {
 		if apierrors.IsNotFound(err) {
-			return waitForReady.Wait(ctx, name, "", wait.Options{Timeout: &timeout}, msgCallback)
+			return waitForReady.Wait(ctx, name, "", wait.Options{Timeout: &wconfig.Timeout, ErrorWindow: &wconfig.ErrorWindow}, msgCallback)
 		}
 		return err, 0
 	}
-	return waitForReady.Wait(ctx, name, service.ResourceVersion, wait.Options{Timeout: &timeout}, msgCallback)
+	return waitForReady.Wait(ctx, name, service.ResourceVersion, wait.Options{Timeout: &wconfig.Timeout, ErrorWindow: &wconfig.ErrorWindow}, msgCallback)
 }
 
 // Get the configuration for a service
diff --git a/pkg/serving/v1/client_mock.go b/pkg/serving/v1/client_mock.go
index 22d266c3..ad2a1fb1 100644
--- a/pkg/serving/v1/client_mock.go
+++ b/pkg/serving/v1/client_mock.go
@@ -126,12 +126,12 @@ func (c *MockKnServingClient) DeleteService(ctx context.Context, name string, ti
 }
 
 // Wait for a service to become ready, but not longer than provided timeout
-func (sr *ServingRecorder) WaitForService(name interface{}, timeout interface{}, callback interface{}, err error, duration time.Duration) {
-	sr.r.Add("WaitForService", []interface{}{name, timeout, callback}, []interface{}{err, duration})
+func (sr *ServingRecorder) WaitForService(name interface{}, wconfig interface{}, callback interface{}, err error, duration time.Duration) {
+	sr.r.Add("WaitForService", []interface{}{name, wconfig, callback}, []interface{}{err, duration})
 }
 
-func (c *MockKnServingClient) WaitForService(ctx context.Context, name string, timeout time.Duration, msgCallback wait.MessageCallback) (error, time.Duration) {
-	call := c.recorder.r.VerifyCall("WaitForService", name, timeout, msgCallback)
+func (c *MockKnServingClient) WaitForService(ctx context.Context, name string, wconfig WaitConfig, msgCallback wait.MessageCallback) (error, time.Duration) {
+	call := c.recorder.r.VerifyCall("WaitForService", name, wconfig, msgCallback)
 	return mock.ErrorOrNil(call.Result[0]), call.Result[1].(time.Duration)
 }
 
diff --git a/pkg/serving/v1/gitops.go b/pkg/serving/v1/gitops.go
index 72f1b152..d3b3d057 100644
--- a/pkg/serving/v1/gitops.go
+++ b/pkg/serving/v1/gitops.go
@@ -199,7 +199,7 @@ func (cl *knServingGitOpsClient) DeleteService(ctx context.Context, serviceName
 }
 
 // WaitForService always returns success for this client
-func (cl *knServingGitOpsClient) WaitForService(ctx context.Context, name string, timeout time.Duration, msgCallback wait.MessageCallback) (error, time.Duration) {
+func (cl *knServingGitOpsClient) WaitForService(ctx context.Context, name string, wconfig WaitConfig, msgCallback wait.MessageCallback) (error, time.Duration) {
 	return nil, 1 * time.Second
 }
 
diff --git a/vendor/knative.dev/serving/pkg/networking/constants.go b/vendor/knative.dev/serving/pkg/networking/constants.go
index e85118bf..0fe1e5ea 100644
--- a/vendor/knative.dev/serving/pkg/networking/constants.go
+++ b/vendor/knative.dev/serving/pkg/networking/constants.go
@@ -26,6 +26,9 @@ const (
 	// BackendHTTP2Port is the backend, i.e. `targetPort` that we setup for HTTP/2 services.
 	BackendHTTP2Port = 8013
 
+	// BackendHTTPSPort is the backend. i.e. `targetPort` that we setup for HTTPS services.
+	BackendHTTPSPort = 8112
+
 	// QueueAdminPort specifies the port number for
 	// health check and lifecycle hooks for queue-proxy.
 	QueueAdminPort = 8022
diff --git a/vendor/modules.txt b/vendor/modules.txt
index c54524a3..4a3e2925 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -789,7 +789,7 @@ k8s.io/utils/internal/third_party/forked/golang/net
 k8s.io/utils/net
 k8s.io/utils/pointer
 k8s.io/utils/trace
-# knative.dev/eventing v0.30.1-0.20220412073008-22223245a4a4
+# knative.dev/eventing v0.30.1-0.20220413070808-1b90ef335226
 ## explicit
 knative.dev/eventing/pkg/apis/config
 knative.dev/eventing/pkg/apis/duck
@@ -878,7 +878,7 @@ knative.dev/pkg/tracing/config
 knative.dev/pkg/tracing/propagation
 knative.dev/pkg/tracing/propagation/tracecontextb3
 knative.dev/pkg/tracker
-# knative.dev/serving v0.30.1-0.20220412142308-e75bcf0ee860
+# knative.dev/serving v0.30.1-0.20220413003907-2de1474b55ba
 ## explicit
 knative.dev/serving/pkg/apis/autoscaling
 knative.dev/serving/pkg/apis/autoscaling/v1alpha1


Test patch:
diff --git a/pkg/kn/commands/service/create_mock_test.go b/pkg/kn/commands/service/create_mock_test.go
index 290fb91e..67a83a6f 100644
--- a/pkg/kn/commands/service/create_mock_test.go
+++ b/pkg/kn/commands/service/create_mock_test.go
@@ -478,6 +478,7 @@ func getService(name string) *servingv1.Service {
 			Requests: corev1.ResourceList{},
 		},
 	}}
+
 	return service
 }
 
diff --git a/pkg/kn/commands/service/create_test.go b/pkg/kn/commands/service/create_test.go
index 1a938851..e1e2a1e2 100644
--- a/pkg/kn/commands/service/create_test.go
+++ b/pkg/kn/commands/service/create_test.go
@@ -193,6 +193,17 @@ func TestServiceCreateCommand(t *testing.T) {
 	assert.DeepEqual(t, template.Spec.Containers[0].Command, []string{"sh", "/app/start.sh"})
 }
 
+func TestServiceCreateTimeout(t *testing.T) {
+	action, created, _, err := fakeServiceCreate([]string{
+		"service", "create", "foo", "--image", "gcr.io/foo/bar:baz", "--timeout", "2"}, false)
+	assert.NilError(t, err)
+	assert.Assert(t, action.Matches("create", "services"))
+
+	timeoutSeconds := *created.Spec.Template.Spec.TimeoutSeconds
+	assert.NilError(t, err)
+	assert.DeepEqual(t, int64(2), timeoutSeconds)
+}
+
 func TestServiceCreateArg(t *testing.T) {
 	action, created, _, err := fakeServiceCreate([]string{
 		"service", "create", "foo", "--image", "gcr.io/foo/bar:baz",
diff --git a/pkg/serving/v1/client_mock_test.go b/pkg/serving/v1/client_mock_test.go
index 6f64af6f..2945daae 100644
--- a/pkg/serving/v1/client_mock_test.go
+++ b/pkg/serving/v1/client_mock_test.go
@@ -40,7 +40,10 @@ func TestMockKnClient(t *testing.T) {
 	recorder.UpdateService(&servingv1.Service{}, false, nil)
 	recorder.ApplyService(&servingv1.Service{}, true, nil)
 	recorder.DeleteService("hello", time.Duration(10)*time.Second, nil)
-	recorder.WaitForService("hello", time.Duration(10)*time.Second, wait.NoopMessageCallback(), nil, 10*time.Second)
+	recorder.WaitForService("hello", WaitConfig{
+		Timeout:     time.Duration(10) * time.Second,
+		ErrorWindow: time.Duration(2) * time.Second,
+	}, wait.NoopMessageCallback(), nil, 10*time.Second)
 	recorder.GetRevision("hello", nil, nil)
 	recorder.ListRevisions(mock.Any(), nil, nil)
 	recorder.CreateRevision(&servingv1.Revision{}, nil)
@@ -60,7 +63,10 @@ func TestMockKnClient(t *testing.T) {
 	client.UpdateService(ctx, &servingv1.Service{})
 	client.ApplyService(ctx, &servingv1.Service{})
 	client.DeleteService(ctx, "hello", time.Duration(10)*time.Second)
-	client.WaitForService(ctx, "hello", time.Duration(10)*time.Second, wait.NoopMessageCallback())
+	client.WaitForService(ctx, "hello", WaitConfig{
+		time.Duration(10) * time.Second,
+		time.Duration(2) * time.Second,
+	}, wait.NoopMessageCallback())
 	client.GetRevision(ctx, "hello")
 	client.ListRevisions(ctx, WithName("blub"))
 	client.CreateRevision(ctx, &servingv1.Revision{})
diff --git a/pkg/serving/v1/client_test.go b/pkg/serving/v1/client_test.go
index edaf06ed..480b9dfd 100644
--- a/pkg/serving/v1/client_test.go
+++ b/pkg/serving/v1/client_test.go
@@ -783,17 +783,26 @@ func TestWaitForService(t *testing.T) {
 		})
 
 	t.Run("wait on a service to become ready with success", func(t *testing.T) {
-		err, duration := client.WaitForService(context.Background(), serviceName, 60*time.Second, wait.NoopMessageCallback())
+		err, duration := client.WaitForService(context.Background(), serviceName, WaitConfig{
+			Timeout:     time.Duration(10) * time.Second,
+			ErrorWindow: time.Duration(2) * time.Second,
+		}, wait.NoopMessageCallback())
 		assert.NilError(t, err)
 		assert.Assert(t, duration > 0)
 	})
 	t.Run("wait on a service to become ready with not found error", func(t *testing.T) {
-		err, duration := client.WaitForService(context.Background(), notFoundServiceName, 60*time.Second, wait.NoopMessageCallback())
+		err, duration := client.WaitForService(context.Background(), notFoundServiceName, WaitConfig{
+			Timeout:     time.Duration(10) * time.Second,
+			ErrorWindow: time.Duration(2) * time.Second,
+		}, wait.NoopMessageCallback())
 		assert.NilError(t, err)
 		assert.Assert(t, duration > 0)
 	})
 	t.Run("wait on a service to become ready with internal error", func(t *testing.T) {
-		err, duration := client.WaitForService(context.Background(), internalErrorServiceName, 60*time.Second, wait.NoopMessageCallback())
+		err, duration := client.WaitForService(context.Background(), internalErrorServiceName, WaitConfig{
+			Timeout:     time.Duration(10) * time.Second,
+			ErrorWindow: time.Duration(2) * time.Second,
+		}, wait.NoopMessageCallback())
 		assert.ErrorType(t, err, apierrors.IsInternalError)
 		assert.Assert(t, duration == 0)
 	})
diff --git a/pkg/serving/v1/gitops_test.go b/pkg/serving/v1/gitops_test.go
index 066968f8..b4396236 100644
--- a/pkg/serving/v1/gitops_test.go
+++ b/pkg/serving/v1/gitops_test.go
@@ -69,7 +69,10 @@ func TestGitOpsOperations(t *testing.T) {
 		assert.NilError(t, err)
 	})
 	t.Run("wait for foo service in foo namespace", func(t *testing.T) {
-		err, d := fooclient.WaitForService(context.Background(), "foo", 5*time.Second, nil)
+		err, d := fooclient.WaitForService(context.Background(), "foo", WaitConfig{
+			Timeout:     time.Duration(5) * time.Second,
+			ErrorWindow: time.Duration(2) * time.Second,
+		}, nil)
 		assert.NilError(t, err)
 		assert.Equal(t, 1*time.Second, d)
 	})
diff --git a/vendor/knative.dev/serving/test/e2e-common.sh b/vendor/knative.dev/serving/test/e2e-common.sh
index 9aafaa79..aabb0adf 100644
--- a/vendor/knative.dev/serving/test/e2e-common.sh
+++ b/vendor/knative.dev/serving/test/e2e-common.sh
@@ -34,6 +34,7 @@ export RUN_HTTP01_AUTO_TLS_TESTS=0
 export HTTPS=0
 export SHORT=0
 export ENABLE_HA=0
+export ENABLE_TLS=${ENABLE_TLS:-0}
 export MESH=0
 export PERF=0
 export KIND=${KIND:-0}
@@ -356,6 +357,16 @@ function install() {
     # kubectl -n ${SYSTEM_NAMESPACE} delete leases --all
     wait_for_leader_controller || return 1
   fi
+
+  if (( ENABLE_TLS )); then
+    echo "Generate certificates"
+    bash ${REPO_ROOT_DIR}/test/generate-cert.sh
+
+    echo "Patch to activator to serve TLS"
+    kubectl apply -n ${SYSTEM_NAMESPACE} -f ${REPO_ROOT_DIR}/test/config/tls/config-network.yaml
+    kubectl delete pod -n ${SYSTEM_NAMESPACE} -l app=activator
+  fi
+
 }
 
 # Check if we should use --resolvabledomain.  In case the ingress only has
diff --git a/vendor/knative.dev/serving/test/generate-cert.sh b/vendor/knative.dev/serving/test/generate-cert.sh
new file mode 100644
index 00000000..00d9ce5d
--- /dev/null
+++ b/vendor/knative.dev/serving/test/generate-cert.sh
@@ -0,0 +1,37 @@
+#!/usr/bin/env bash
+
+# Copyright 2022 The Knative 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.
+
+SYSTEM_NAMESPACE="${SYSTEM_NAMESPACE:-knative-serving}"
+TEST_NAMESPACE=serving-tests
+out_dir="$(mktemp -d /tmp/certs-XXX)"
+san="knative"
+
+# Generate Root key and cert.
+openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=Example/CN=Example' -keyout "${out_dir}"/root.key -out "${out_dir}"/root.crt
+
+# Create server key
+openssl req -out "${out_dir}"/tls.csr -newkey rsa:2048 -nodes -keyout "${out_dir}"/tls.key -subj "/CN=Example/O=Example" -addext "subjectAltName = DNS:$san"
+
+# Create server certs
+openssl x509 -req -extfile <(printf "subjectAltName=DNS:$san") -days 365 -in "${out_dir}"/tls.csr -CA "${out_dir}"/root.crt -CAkey "${out_dir}"/root.key -CAcreateserial -out "${out_dir}"/tls.crt
+
+# Create secret
+kubectl create -n ${SYSTEM_NAMESPACE} secret generic serving-ca \
+    --from-file=ca.crt="${out_dir}"/root.crt --dry-run=client -o yaml | kubectl apply -f -
+
+kubectl create -n ${SYSTEM_NAMESPACE} secret tls server-certs \
+    --key="${out_dir}"/tls.key \
+    --cert="${out_dir}"/tls.crt --dry-run=client -o yaml | kubectl apply -f -