Repository: knative/operator
Pull request #1397 (2023-04-09 14:51:28)

Fixed the installation issue of istio in prows

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

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

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

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:

- ~~[OWNERS](https://github.com/knative/operator/blob/main/OWNERS)~~ [houshengbo]

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[bot]: @houshengbo: The following test **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
eventing-upgrade-tests_operator_main | e3516b352efda1232a4f41747146b0333d648c76 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_operator/1397/eventing-upgrade-tests_operator_main/1645076980221087744) | true | `/test eventing-upgrade-tests`

[Your PR dashboard](https://prow.knative.dev/pr).

<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 -->
knative-prow[bot]: @houshengbo: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
eventing-upgrade-tests_operator_main | e3516b352efda1232a4f41747146b0333d648c76 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_operator/1397/eventing-upgrade-tests_operator_main/1645076980221087744) | true | `/test eventing-upgrade-tests`
upgrade-tests_operator_main | e3516b352efda1232a4f41747146b0333d648c76 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_operator/1397/upgrade-tests_operator_main/1645076980070092800) | true | `/test upgrade-tests`

[Your PR dashboard](https://prow.knative.dev/pr).

<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 -->
knative-prow[bot]: @houshengbo: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
eventing-upgrade-tests_operator_main | e3516b352efda1232a4f41747146b0333d648c76 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_operator/1397/eventing-upgrade-tests_operator_main/1645076980221087744) | true | `/test eventing-upgrade-tests`
upgrade-tests_operator_main | e3516b352efda1232a4f41747146b0333d648c76 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_operator/1397/upgrade-tests_operator_main/1645076980070092800) | true | `/test upgrade-tests`
serving-upgrade-tests_operator_main | e3516b352efda1232a4f41747146b0333d648c76 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_operator/1397/serving-upgrade-tests_operator_main/1645076980162367488) | true | `/test serving-upgrade-tests`

[Your PR dashboard](https://prow.knative.dev/pr).

<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 -->
knative-prow[bot]: @houshengbo: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
eventing-upgrade-tests_operator_main | e3516b352efda1232a4f41747146b0333d648c76 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_operator/1397/eventing-upgrade-tests_operator_main/1645076980221087744) | true | `/test eventing-upgrade-tests`
upgrade-tests_operator_main | e3516b352efda1232a4f41747146b0333d648c76 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_operator/1397/upgrade-tests_operator_main/1645076980070092800) | true | `/test upgrade-tests`
serving-upgrade-tests_operator_main | e3516b352efda1232a4f41747146b0333d648c76 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_operator/1397/serving-upgrade-tests_operator_main/1645076980162367488) | true | `/test serving-upgrade-tests`
integration-tests_operator_main | e3516b352efda1232a4f41747146b0333d648c76 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_operator/1397/integration-tests_operator_main/1645076979998789632) | true | `/test integration-tests`

[Your PR dashboard](https://prow.knative.dev/pr).

<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 -->
codecov[bot]: ## [Codecov](https://codecov.io/gh/knative/operator/pull/1397?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative) Report
Patch and project coverage have no change.
> Comparison is base [(`cbd12f2`)](https://codecov.io/gh/knative/operator/commit/cbd12f2784a420ddff69bbb0866feb867e0b364b?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative) 79.84% compared to head [(`e3516b3`)](https://codecov.io/gh/knative/operator/pull/1397?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative) 79.84%.

<details><summary>Additional details and impacted files</summary>


```diff
@@           Coverage Diff           @@
##             main    #1397   +/-   ##
=======================================
  Coverage   79.84%   79.84%           
=======================================
  Files          38       38           
  Lines        1761     1761           
=======================================
  Hits         1406     1406           
  Misses        257      257           
  Partials       98       98           
```



Help us with your feedback. Take ten seconds to tell us [how you rate us](https://about.codecov.io/nps?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative). Have a feature suggestion? [Share it here.](https://app.codecov.io/gh/feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative)

</details>

[:umbrella: View full report in Codecov by Sentry](https://codecov.io/gh/knative/operator/pull/1397?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative).   
:loudspeaker: Do you have feedback about the report comment? [Let us know in this issue](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative).

houshengbo: @l-qing Cloud you rebase this pr?
l-qing: /retest
l-qing: > @l-qing Cloud you rebase this pr?

My PR has been merged. 😁 https://github.com/knative/operator/pull/1391
knative-prow[bot]: @houshengbo: The following test **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
eventing-upgrade-tests_operator_main | e3516b352efda1232a4f41747146b0333d648c76 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_operator/1397/eventing-upgrade-tests_operator_main/1645645572842983424) | true | `/test eventing-upgrade-tests`

[Your PR dashboard](https://prow.knative.dev/pr).

<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 -->
knative-prow[bot]: @houshengbo: The following test **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
eventing-upgrade-tests_operator_main | 232fde216b289335636e14521d78e52ffaf616a5 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_operator/1397/eventing-upgrade-tests_operator_main/1651022928696840192) | true | `/test eventing-upgrade-tests`

[Your PR dashboard](https://prow.knative.dev/pr).

<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 -->
houshengbo: /test eventing-upgrade-tests
knative-prow[bot]: @houshengbo: The following test **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
eventing-upgrade-tests_operator_main | 232fde216b289335636e14521d78e52ffaf616a5 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_operator/1397/eventing-upgrade-tests_operator_main/1651201597155315712) | true | `/test eventing-upgrade-tests`

[Your PR dashboard](https://prow.knative.dev/pr).

<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/cmd/operator/kodata/eventing-source/1.10/github/github.yaml b/cmd/operator/kodata/eventing-source/1.10/github/github.yaml
new file mode 100644
index 000000000..de31323ce
--- /dev/null
+++ b/cmd/operator/kodata/eventing-source/1.10/github/github.yaml
@@ -0,0 +1,1341 @@
+# Copyright 2019 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.
+
+apiVersion: v1
+kind: Namespace
+metadata:
+  name: knative-sources
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+
+---
+# Copyright 2019 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.
+
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: github-controller-manager
+  namespace: knative-sources
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+
+---
+# Copyright 2019 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.
+
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: github-webhook
+  namespace: knative-sources
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+
+---
+# Copyright 2019 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.
+
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+  name: eventing-sources-github-controller
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+rules:
+  # Sources admin
+  - apiGroups:
+      - sources.knative.dev
+    resources:
+      - githubsources
+    verbs: &everything
+      - get
+      - list
+      - watch
+      - create
+      - update
+      - patch
+      - delete
+  # Sources finalizer
+  - apiGroups:
+      - sources.knative.dev
+    resources:
+      - githubsources/finalizers
+    verbs: *everything
+  # Source statuses update
+  - apiGroups:
+      - sources.knative.dev
+    resources:
+      - githubsources/status
+    verbs:
+      - get
+      - update
+      - patch
+  # Deployments admin
+  - apiGroups:
+      - apps
+    resources:
+      - deployments
+    verbs: *everything
+  # Knative Services admin
+  - apiGroups:
+      - serving.knative.dev
+    resources:
+      - services
+    verbs: *everything
+  # Secrets read
+  - apiGroups:
+      - ""
+    resources:
+      - secrets
+      - services
+    verbs:
+      - get
+      - list
+      - watch
+  # Events admin
+  - apiGroups:
+      - ""
+    resources:
+      - events
+      - configmaps
+    verbs: *everything
+  - apiGroups:
+      - coordination.k8s.io
+    resources:
+      - leases
+    verbs: *everything
+
+---
+# Copyright 2019 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.
+
+# The role is needed for the aggregated role source-observer in knative-eventing to provide readonly access to "Sources".
+# Ref: https://github.com/knative/eventing/tree/master/config/core/rolessource-observer-clusterrole.yaml.
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: eventing-contrib-github-source-observer
+  labels:
+    eventing.knative.dev/release: devel
+    duck.knative.dev/source: "true"
+rules:
+  - apiGroups:
+      - "sources.knative.dev"
+    resources:
+      - "githubsources"
+    verbs:
+      - get
+      - list
+      - watch
+
+---
+# Copyright 2019 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.
+
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: eventing-sources-github-addressable-resolver
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+subjects:
+  - kind: ServiceAccount
+    name: github-controller-manager
+    namespace: knative-sources
+# An aggregated ClusterRole for all Addressable CRDs.
+# Ref: https://github.com/knative/eventing/tree/master/config/core/rolesaddressable-resolvers-clusterrole.yaml
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: addressable-resolver
+
+---
+# Copyright 2019 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.
+
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: eventing-sources-github-controller
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+subjects:
+  - kind: ServiceAccount
+    name: github-controller-manager
+    namespace: knative-sources
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: eventing-sources-github-controller
+
+---
+# Copyright 2019 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.
+
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: eventing-sources-github-podspecable-binding
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+subjects:
+  - kind: ServiceAccount
+    name: github-webhook
+    namespace: knative-sources
+roleRef:
+  kind: ClusterRole
+  name: podspecable-binding
+  apiGroup: rbac.authorization.k8s.io
+
+---
+# Copyright 2019 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.
+
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: eventing-sources-github-webhook
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+subjects:
+  - kind: ServiceAccount
+    name: github-webhook
+    namespace: knative-sources
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: github-webhook
+
+---
+# Copyright 2020 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.
+
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+  name: github-webhook
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+rules:
+  # Sources admin
+  - apiGroups:
+      - sources.knative.dev
+    resources:
+      - githubsources
+    verbs: &everything
+      - get
+      - list
+      - watch
+      - create
+      - update
+      - patch
+      - delete
+  # Sources finalizer
+  - apiGroups:
+      - sources.knative.dev
+    resources:
+      - githubsources/finalizers
+    verbs: *everything
+  # Source statuses update
+  - apiGroups:
+      - sources.knative.dev
+    resources:
+      - githubsources/status
+    verbs:
+      - get
+      - update
+      - patch
+  # Deployments admin
+  - apiGroups:
+      - apps
+    resources:
+      - deployments
+    verbs: *everything
+  # Knative Services admin
+  - apiGroups:
+      - serving.knative.dev
+    resources:
+      - services
+    verbs: *everything
+  # Secrets read
+  - apiGroups:
+      - ""
+    resources:
+      - secrets
+      - services
+    verbs:
+      - get
+      - list
+      - watch
+  # Namespace labelling for webhook
+  - apiGroups:
+      - ""
+    resources:
+      - namespaces
+    verbs:
+      - get
+      - list
+      - watch
+      - patch
+  # Events admin
+  - apiGroups:
+      - ""
+    resources:
+      - events
+      - configmaps
+    verbs: *everything
+  # EventTypes admin
+  - apiGroups:
+      - eventing.knative.dev
+    resources:
+      - eventtypes
+    verbs: *everything
+  # For manipulating certs into secrets.
+  - apiGroups:
+      - ""
+    resources:
+      - "secrets"
+    verbs:
+      - "get"
+      - "create"
+      - "update"
+      - "list"
+      - "watch"
+  # For actually registering our webhook.
+  - apiGroups:
+      - "admissionregistration.k8s.io"
+    resources:
+      - "mutatingwebhookconfigurations"
+      - "validatingwebhookconfigurations"
+    verbs: *everything
+  # Bindings admin
+  - apiGroups:
+      - bindings.knative.dev
+    resources:
+      - githubbindings
+    verbs: &everything
+      - get
+      - list
+      - watch
+      - create
+      - update
+      - patch
+      - delete
+  # Bindings finalizer
+  - apiGroups:
+      - bindings.knative.dev
+    resources:
+      - githubbindings/finalizers
+    verbs: *everything
+  # Source statuses update
+  - apiGroups:
+      - bindings.knative.dev
+    resources:
+      - githubbindings/status
+    verbs:
+      - get
+      - update
+      - patch
+  # For leader election
+  - apiGroups:
+      - "coordination.k8s.io"
+    resources:
+      - "leases"
+    verbs: *everything
+
+---
+# Copyright 2020 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.
+
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+    duck.knative.dev/binding: "true"
+    knative.dev/crd-install: "true"
+  name: githubbindings.bindings.knative.dev
+spec:
+  group: bindings.knative.dev
+  names:
+    categories:
+      - all
+      - knative
+      - eventing
+      - bindings
+    kind: GitHubBinding
+    plural: githubbindings
+  scope: Namespaced
+  versions:
+    - name: v1alpha1
+      served: true
+      storage: true
+      subresources:
+        status: {}
+      schema:
+        openAPIV3Schema:
+          type: object
+          x-kubernetes-preserve-unknown-fields: true
+      additionalPrinterColumns:
+        - name: Ready
+          type: string
+          jsonPath: ".status.conditions[?(@.type=='Ready')].status"
+        - name: Reason
+          type: string
+          jsonPath: ".status.conditions[?(@.type=='Ready')].reason"
+
+---
+# Copyright 2019 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.
+
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+  name: githubsources.sources.knative.dev
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+    eventing.knative.dev/source: "true"
+    duck.knative.dev/source: "true"
+    knative.dev/crd-install: "true"
+  annotations:
+    # TODO add schemas and descriptions
+    registry.knative.dev/eventTypes: |
+      [
+        { "type": "dev.knative.source.github.check_suite" },
+        { "type": "dev.knative.source.github.commit_comment" },
+        { "type": "dev.knative.source.github.create" },
+        { "type": "dev.knative.source.github.delete" },
+        { "type": "dev.knative.source.github.deployment" },
+        { "type": "dev.knative.source.github.deployment_status" },
+        { "type": "dev.knative.source.github.fork" },
+        { "type": "dev.knative.source.github.gollum" },
+        { "type": "dev.knative.source.github.installation" },
+        { "type": "dev.knative.source.github.integration_installation" },
+        { "type": "dev.knative.source.github.issue_comment" },
+        { "type": "dev.knative.source.github.issues" },
+        { "type": "dev.knative.source.github.label" },
+        { "type": "dev.knative.source.github.member" },
+        { "type": "dev.knative.source.github.membership" },
+        { "type": "dev.knative.source.github.milestone" },
+        { "type": "dev.knative.source.github.organization" },
+        { "type": "dev.knative.source.github.org_block" },
+        { "type": "dev.knative.source.github.page_build" },
+        { "type": "dev.knative.source.github.ping" },
+        { "type": "dev.knative.source.github.project_card" },
+        { "type": "dev.knative.source.github.project_column" },
+        { "type": "dev.knative.source.github.project" },
+        { "type": "dev.knative.source.github.public" },
+        { "type": "dev.knative.source.github.pull_request" },
+        { "type": "dev.knative.source.github.pull_request_review" },
+        { "type": "dev.knative.source.github.pull_request_review_comment" },
+        { "type": "dev.knative.source.github.push" },
+        { "type": "dev.knative.source.github.release" },
+        { "type": "dev.knative.source.github.repository" },
+        { "type": "dev.knative.source.github.status" },
+        { "type": "dev.knative.source.github.team" },
+        { "type": "dev.knative.source.github.team_add" },
+        { "type": "dev.knative.source.github.watch" }
+      ]
+spec:
+  group: sources.knative.dev
+  names:
+    categories:
+      - all
+      - knative
+      - eventing
+      - sources
+    kind: GitHubSource
+    plural: githubsources
+  scope: Namespaced
+  versions:
+    - name: v1alpha1
+      served: true
+      storage: true
+      subresources:
+        status: {}
+      additionalPrinterColumns:
+        - name: Ready
+          type: string
+          jsonPath: ".status.conditions[?(@.type=='Ready')].status"
+        - name: Reason
+          type: string
+          jsonPath: ".status.conditions[?(@.type=='Ready')].reason"
+        - name: Sink
+          type: string
+          jsonPath: ".status.sinkUri"
+        - name: Age
+          type: date
+          jsonPath: .metadata.creationTimestamp
+      schema:
+        openAPIV3Schema:
+          type: object
+          properties:
+            spec:
+              properties:
+                githubAPIURL:
+                  description: URL for enterprise GitHub
+                  type: string
+                ownerAndRepository:
+                  description: Reference to the GitHub repository to receive events from, in the format user/repository.
+                  type: string
+                  minLength: 1
+                eventTypes:
+                  description: List of webhooks to enable on the selected GitHub repository.
+                  type: array
+                  items:
+                    enum:
+                      - check_suite
+                      - commit_comment
+                      - create
+                      - delete
+                      - deployment
+                      - deployment_status
+                      - fork
+                      - gollum
+                      - installation
+                      - integration_installation
+                      - issue_comment
+                      - issues
+                      - label
+                      - member
+                      - membership
+                      - milestone
+                      - organization
+                      - org_block
+                      - page_build
+                      - ping
+                      - project_card
+                      - project_column
+                      - project
+                      - public
+                      - pull_request
+                      - pull_request_review
+                      - pull_request_review_comment
+                      - push
+                      - release
+                      - repository
+                      - status
+                      - team
+                      - team_add
+                      - watch
+                    type: string
+                  minItems: 1
+                accessToken:
+                  description: Access token for the GitHub API.
+                  type: object
+                  properties:
+                    secretKeyRef:
+                      description: A reference to a Kubernetes Secret object containing a GitHub access token.
+                      type: object
+                      properties:
+                        name:
+                          description: The name of the Kubernetes Secret object which contains the GitHub access token.
+                          type: string
+                        key:
+                          description: The key which contains the GitHub access token within the Kubernetes Secret object referenced by name.
+                          type: string
+                      required:
+                        - name
+                        - key
+                secretToken:
+                  description: Arbitrary token used to validate requests to webhooks.
+                  type: object
+                  properties:
+                    secretKeyRef:
+                      description: A reference to a Kubernetes Secret object containing the webhook token.
+                      type: object
+                      properties:
+                        name:
+                          description: The name of the Kubernetes Secret object which contains the webhook token.
+                          type: string
+                        key:
+                          description: The key which contains the webhook token within the Kubernetes Secret object referenced by name.
+                          type: string
+                      required:
+                        - name
+                        - key
+                ceOverrides:
+                  type: object
+                  description: Defines overrides to control modifications of the event sent to the sink.
+                  properties:
+                    extensions:
+                      type: object
+                      additionalProperties:
+                        type: string
+                        minLength: 1
+                  required:
+                    - extensions
+                serviceAccountName:
+                  type: string
+                sink:
+                  description: The destination of events received from webhooks.
+                  type: object
+                  properties:
+                    ref:
+                      description: Reference to an addressable Kubernetes object to be used as the destination of events.
+                      type: object
+                      properties:
+                        apiVersion:
+                          type: string
+                          minLength: 1
+                        kind:
+                          type: string
+                          minLength: 1
+                        namespace:
+                          type: string
+                          minLength: 1
+                        name:
+                          type: string
+                          minLength: 1
+                      required:
+                        - apiVersion
+                        - kind
+                        - name
+                    uri:
+                      description: URI to use as the destination of events.
+                      type: string
+                      format: uri
+                  oneOf:
+                    - required: [ref]
+                    - required: [uri]
+              required:
+                - ownerAndRepository
+                - eventTypes
+                - accessToken
+                - secretToken
+              type: object
+            status:
+              properties:
+                conditions:
+                  items:
+                    properties:
+                      lastTransitionTime:
+                        # we use a string in the stored object but a wrapper object
+                        # at runtime.
+                        type: string
+                      message:
+                        type: string
+                      reason:
+                        type: string
+                      severity:
+                        type: string
+                      status:
+                        type: string
+                      type:
+                        type: string
+                    required:
+                      - type
+                      - status
+                    type: object
+                  type: array
+                sinkUri:
+                  type: string
+                webhookIDKey:
+                  type: string
+              type: object
+
+---
+# Copyright 2019 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.
+
+apiVersion: v1
+kind: Service
+metadata:
+  name: github-controller
+  namespace: knative-sources
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+    control-plane: github-controller-manager
+spec:
+  selector:
+    control-plane: github-controller-manager
+  ports:
+    - name: https-github
+      port: 443
+
+---
+# Copyright 2019 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.
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: github-controller-manager
+  namespace: knative-sources
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+    control-plane: github-controller-manager
+spec:
+  selector:
+    matchLabels: &labels
+      control-plane: github-controller-manager
+  serviceName: github-controller-manager
+  template:
+    metadata:
+      labels: *labels
+    spec:
+      serviceAccountName: github-controller-manager
+      containers:
+        - image: gcr.io/knative-releases/knative.dev/eventing-github/cmd/controller@sha256:d7447999e0a2030f6ab5d7958aebb470dacc33ba0faaec215a883c09c87f67ec
+          name: manager
+          env:
+            - name: SYSTEM_NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+            - name: CONFIG_LOGGING_NAME
+              value: config-logging
+            - name: CONFIG_OBSERVABILITY_NAME
+              value: config-observability
+            - name: CONFIG_LEADERELECTION_NAME
+              value: config-leader-election-github
+            - name: METRICS_DOMAIN
+              value: knative.dev/sources
+            - name: GH_RA_IMAGE
+              value: gcr.io/knative-releases/knative.dev/eventing-github/cmd/receive_adapter@sha256:3e8a20a2e985bbdfc74b27363bc5b930dc62c017fb9d0d545af1d58e3a505432
+          resources:
+            requests:
+              cpu: 100m
+              memory: 100Mi
+            limits:
+              cpu: 1000m
+              memory: 1000Mi
+      terminationGracePeriodSeconds: 10
+
+---
+# Copyright 2019 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
+#
+#     https://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.
+
+apiVersion: admissionregistration.k8s.io/v1
+kind: MutatingWebhookConfiguration
+metadata:
+  name: defaulting.webhook.github.sources.knative.dev
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+webhooks:
+  - admissionReviewVersions:
+      - v1beta1
+    clientConfig:
+      service:
+        name: github-webhook
+        namespace: knative-sources
+    failurePolicy: Fail
+    name: defaulting.webhook.github.sources.knative.dev
+    sideEffects: None
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: ValidatingWebhookConfiguration
+metadata:
+  name: validation.webhook.github.sources.knative.dev
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+webhooks:
+  - admissionReviewVersions:
+      - v1beta1
+    clientConfig:
+      service:
+        name: github-webhook
+        namespace: knative-sources
+    failurePolicy: Fail
+    name: validation.webhook.github.sources.knative.dev
+    sideEffects: None
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: MutatingWebhookConfiguration
+metadata:
+  name: githubbindings.webhook.github.sources.knative.dev
+  labels:
+    samples.knative.dev/release: devel
+webhooks:
+  - admissionReviewVersions:
+      - v1beta1
+    clientConfig:
+      service:
+        name: github-webhook
+        namespace: knative-sources
+    failurePolicy: Fail
+    name: githubbindings.webhook.github.sources.knative.dev
+    sideEffects: None
+---
+apiVersion: v1
+kind: Secret
+metadata:
+  name: github-webhook-certs
+  namespace: knative-sources
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+# The data is populated at install time.
+
+---
+# Copyright 2020 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
+#
+#     https://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.
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: github-webhook
+  namespace: knative-sources
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+spec:
+  replicas: 1
+  selector:
+    matchLabels: &labels
+      app: github-webhook
+      role: github-webhook
+  template:
+    metadata:
+      annotations:
+        sidecar.istio.io/inject: "false"
+      labels: *labels
+    spec:
+      serviceAccountName: github-webhook
+      containers:
+        - name: github-webhook
+          terminationMessagePolicy: FallbackToLogsOnError
+          image: gcr.io/knative-releases/knative.dev/eventing-github/cmd/webhook@sha256:f3400f7489c85822c98c1940acb07036d71edca09d4584a807a19f5c388ceb90
+          env:
+            - name: SYSTEM_NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+            - name: CONFIG_LOGGING_NAME
+              value: config-logging
+            - name: METRICS_DOMAIN
+              value: knative.dev/eventing
+            - name: WEBHOOK_NAME
+              value: github-webhook
+          ports:
+            - containerPort: 9090
+              name: metrics
+          # TODO set proper resource limits.
+
+          readinessProbe: &probe
+            periodSeconds: 1
+            httpGet:
+              scheme: HTTPS
+              port: 8443
+              httpHeaders:
+                - name: k-kubelet-probe
+                  value: "webhook"
+          livenessProbe: *probe
+---
+apiVersion: v1
+kind: Service
+metadata:
+  labels:
+    eventing.knative.dev/release: devel
+    role: github-webhook
+  name: github-webhook
+  namespace: knative-sources
+spec:
+  ports:
+    - name: https-webhook
+      port: 443
+      targetPort: 8443
+  selector:
+    role: github-webhook
+
+---
+# Copyright 2020 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
+#
+#     https://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.
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: config-leader-election-github
+  namespace: knative-sources
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+data:
+  # An inactive but valid configuration follows; see example.
+  resourceLock: "leases"
+  leaseDuration: "15s"
+  renewDeadline: "10s"
+  retryPeriod: "2s"
+  _example: |
+    ################################
+    #                              #
+    #    EXAMPLE CONFIGURATION     #
+    #                              #
+    ################################
+
+    # This block is not actually functional configuration,
+    # but serves to illustrate the available configuration
+    # options and document them in a way that is accessible
+    # to users that `kubectl edit` this config map.
+    #
+    # These sample configuration options may be copied out of
+    # this example block and unindented to be in the data block
+    # to actually change the configuration.
+
+    # resourceLock controls which API resource is used as the basis for the
+    # leader election lock. Valid values are:
+    #
+    # - leases -> use the coordination API
+    # - configmaps -> use configmaps
+    # - endpoints -> use endpoints
+    resourceLock: "leases"
+
+    # leaseDuration is how long non-leaders will wait to try to acquire the
+    # lock; 15 seconds is the value used by core kubernetes controllers.
+    leaseDuration: "15s"
+    # renewDeadline is how long a leader will try to renew the lease before
+    # giving up; 10 seconds is the value used by core kubernetes controllers.
+    renewDeadline: "10s"
+    # retryPeriod is how long the leader election client waits between tries of
+    # actions; 2 seconds is the value used by core kuberntes controllers.
+    retryPeriod: "2s"
+    # enabledComponents is a comma-delimited list of component names for which
+    # leader election is enabled. Valid values are:
+    #
+    # - github-controller
+    enabledComponents: "github-controller"
+
+---
+# Copyright 2019 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
+#
+#     https://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.
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: config-logging
+  namespace: knative-sources
+data:
+  # Common configuration for all Knative codebase
+  zap-logger-config: |
+    {
+      "level": "info",
+      "development": false,
+      "outputPaths": ["stdout"],
+      "errorOutputPaths": ["stderr"],
+      "encoding": "json",
+      "encoderConfig": {
+        "timeKey": "ts",
+        "levelKey": "level",
+        "nameKey": "logger",
+        "callerKey": "caller",
+        "messageKey": "msg",
+        "stacktraceKey": "stacktrace",
+        "lineEnding": "",
+        "levelEncoder": "",
+        "timeEncoder": "iso8601",
+        "durationEncoder": "",
+        "callerEncoder": ""
+      }
+    }
+  # Log level overrides
+  # For all components changes are be picked up immediately.
+  loglevel.controller: "info"
+  loglevel.webhook: "info"
+
+---
+# Copyright 2019 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
+#
+#     https://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.
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: config-observability
+  namespace: knative-sources
+data:
+  _example: |
+    ################################
+    #                              #
+    #    EXAMPLE CONFIGURATION     #
+    #                              #
+    ################################
+
+    # This block is not actually functional configuration,
+    # but serves to illustrate the available configuration
+    # options and document them in a way that is accessible
+    # to users that `kubectl edit` this config map.
+    #
+    # These sample configuration options may be copied out of
+    # this example block and unindented to be in the data block
+    # to actually change the configuration.
+
+    # logging.enable-var-log-collection defaults to false.
+    # A fluentd sidecar will be set up to collect var log if
+    # this flag is true.
+    logging.enable-var-log-collection: false
+
+    # logging.fluentd-sidecar-image provides the fluentd sidecar image
+    # to inject as a sidecar to collect logs from /var/log.
+    # Must be presented if logging.enable-var-log-collection is true.
+    logging.fluentd-sidecar-image: registry.k8s.io/fluentd-elasticsearch:v2.0.4
+
+    # logging.fluentd-sidecar-output-config provides the configuration
+    # for the fluentd sidecar, which will be placed into a configmap and
+    # mounted into the fluentd sidecar image.
+    logging.fluentd-sidecar-output-config: |
+      # Parse json log before sending to Elastic Search
+      <filter **>
+        @type parser
+        key_name log
+        <parse>
+          @type multi_format
+          <pattern>
+            format json
+            time_key fluentd-time # fluentd-time is reserved for structured logs
+            time_format %Y-%m-%dT%H:%M:%S.%NZ
+          </pattern>
+          <pattern>
+            format none
+            message_key log
+          </pattern>
+        </parse>
+      </filter>
+      # Send to Elastic Search
+      <match **>
+        @id elasticsearch
+        @type elasticsearch
+        @log_level info
+        include_tag_key true
+        # Elasticsearch service is in monitoring namespace.
+        host elasticsearch-logging.knative-monitoring
+        port 9200
+        logstash_format true
+        <buffer>
+          @type file
+          path /var/log/fluentd-buffers/kubernetes.system.buffer
+          flush_mode interval
+          retry_type exponential_backoff
+          flush_thread_count 2
+          flush_interval 5s
+          retry_forever
+          retry_max_interval 30
+          chunk_limit_size 2M
+          queue_limit_length 8
+          overflow_action block
+        </buffer>
+      </match>
+
+    # logging.revision-url-template provides a template to use for producing the
+    # logging URL that is injected into the status of each Revision.
+    # This value is what you might use the the Knative monitoring bundle, and provides
+    # access to Kibana after setting up kubectl proxy.
+    logging.revision-url-template: |
+      http://localhost:8001/api/v1/namespaces/knative-monitoring/services/kibana-logging/proxy/app/kibana#/discover?_a=(query:(match:(kubernetes.labels.knative-dev%2FrevisionUID:(query:'${REVISION_UID}',type:phrase))))
+
+    # If non-empty, this enables queue proxy writing request logs to stdout.
+    # The value determines the shape of the request logs and it must be a valid go text/template.
+    # It is important to keep this as a single line. Multiple lines are parsed as separate entities
+    # by most collection agents and will split the request logs into multiple records.
+    #
+    # The following fields and functions are available to the template:
+    #
+    # Request: An http.Request (see https://golang.org/pkg/net/http/#Request)
+    # representing an HTTP request received by the server.
+    #
+    # Response:
+    # struct {
+    #   Code    int       // HTTP status code (see https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml)
+    #   Size    int       // An int representing the size of the response.
+    #   Latency float64   // A float64 representing the latency of the response in seconds.
+    # }
+    #
+    # Revision:
+    # struct {
+    #   Name          string  // Knative revision name
+    #   Namespace     string  // Knative revision namespace
+    #   Service       string  // Knative service name
+    #   Configuration string  // Knative configuration name
+    #   PodName       string  // Name of the pod hosting the revision
+    #   PodIP         string  // IP of the pod hosting the revision
+    # }
+    #
+    logging.request-log-template: '{"httpRequest": {"requestMethod": "{{.Request.Method}}", "requestUrl": "{{js .Request.RequestURI}}", "requestSize": "{{.Request.ContentLength}}", "status": {{.Response.Code}}, "responseSize": "{{.Response.Size}}", "userAgent": "{{js .Request.UserAgent}}", "remoteIp": "{{js .Request.RemoteAddr}}", "serverIp": "{{.Revision.PodIP}}", "referer": "{{js .Request.Referer}}", "latency": "{{.Response.Latency}}s", "protocol": "{{.Request.Proto}}"}, "traceId": "{{index .Request.Header "X-B3-Traceid"}}"}'
+
+    # metrics.backend-destination field specifies the system metrics destination.
+    # It supports either prometheus (the default) or stackdriver.
+    # Note: Using stackdriver will incur additional charges
+    metrics.backend-destination: prometheus
+
+    # metrics.request-metrics-backend-destination specifies the request metrics
+    # destination. If non-empty, it enables queue proxy to send request metrics.
+    # Currently supported values: prometheus, stackdriver.
+    metrics.request-metrics-backend-destination: prometheus
+
+    # metrics.stackdriver-project-id field specifies the stackdriver project ID. This
+    # field is optional. When running on GCE, application default credentials will be
+    # used if this field is not provided.
+    metrics.stackdriver-project-id: "<your stackdriver project id>"
+
+    # metrics.allow-stackdriver-custom-metrics indicates whether it is allowed to send metrics to
+    # Stackdriver using "global" resource type and custom metric type if the
+    # metrics are not supported by "knative_revision" resource type. Setting this
+    # flag to "true" could cause extra Stackdriver charge.
+    # If metrics.backend-destination is not Stackdriver, this is ignored.
+    metrics.allow-stackdriver-custom-metrics: "false"
+
+---
+# Copyright 2019 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
+#
+#     https://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.
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: config-tracing
+  namespace: knative-sources
+  labels:
+    eventing.knative.dev/release: devel
+    knative.dev/config-propagation: original
+    knative.dev/config-category: eventing
+data:
+  _example: |
+    ################################
+    #                              #
+    #    EXAMPLE CONFIGURATION     #
+    #                              #
+    ################################
+    # This block is not actually functional configuration,
+    # but serves to illustrate the available configuration
+    # options and document them in a way that is accessible
+    # to users that `kubectl edit` this config map.
+    #
+    # These sample configuration options may be copied out of
+    # this example block and unindented to be in the data block
+    # to actually change the configuration.
+    #
+    # This may be "zipkin" or "stackdriver", the default is "none"
+    backend: "none"
+
+    # URL to zipkin collector where traces are sent.
+    # This must be specified when backend is "zipkin"
+    zipkin-endpoint: "http://zipkin.istio-system.svc.cluster.local:9411/api/v2/spans"
+
+    # The GCP project into which stackdriver metrics will be written
+    # when backend is "stackdriver".  If unspecified, the project-id
+    # is read from GCP metadata when running on GCP.
+    stackdriver-project-id: "my-project"
+
+    # Enable zipkin debug mode. This allows all spans to be sent to the server
+    # bypassing sampling.
+    debug: "false"
+
+    # Percentage (0-1) of requests to trace
+    sample-rate: "0.1"
+
+---
diff --git a/cmd/operator/kodata/eventing-source/1.10/gitlab/gitlab.yaml b/cmd/operator/kodata/eventing-source/1.10/gitlab/gitlab.yaml
new file mode 100644
index 000000000..3fafaab31
--- /dev/null
+++ b/cmd/operator/kodata/eventing-source/1.10/gitlab/gitlab.yaml
@@ -0,0 +1,982 @@
+# Copyright 2020 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.
+
+apiVersion: v1
+kind: Namespace
+metadata:
+  name: knative-sources
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+
+---
+# Copyright 2020 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.
+
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: gitlab-controller-manager
+  namespace: knative-sources
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: gitlab-webhook
+  namespace: knative-sources
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+
+---
+# Copyright 2020 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.
+
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+  name: gitlabsource-manager-role
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+rules:
+  - apiGroups:
+      - sources.knative.dev
+    resources:
+      - gitlabsources
+    verbs: &everything
+      - get
+      - list
+      - watch
+      - create
+      - update
+      - patch
+      - delete
+  - apiGroups:
+      - sources.knative.dev
+    resources:
+      - gitlabsources/status
+    verbs:
+      - get
+      - update
+      - patch
+  - apiGroups:
+      - sources.knative.dev
+    resources:
+      - gitlabsources/finalizers
+    verbs: *everything
+  - apiGroups:
+      - serving.knative.dev
+    resources:
+      - services
+    verbs: *everything
+  - apiGroups:
+      - ""
+    resources:
+      - services
+      - secrets
+    verbs:
+      - get
+      - list
+      - watch
+      # Webhook controller needs it to update certs in secret
+      - update
+  # Deployments admin
+  - apiGroups:
+      - apps
+    resources:
+      - deployments
+    verbs: *everything
+  # Events admin
+  - apiGroups:
+      - ""
+    resources:
+      - events
+      - configmaps
+    verbs: *everything
+  # Acquire leases for leader election
+  - apiGroups:
+      - coordination.k8s.io
+    resources:
+      - leases
+    verbs:
+      - get
+      - create
+      - update
+---
+# The role is needed for the aggregated role source-observer in knative-eventing to provide readonly access to "Sources".
+# See https://knative.dev/eventing/blob/master/config/200-source-observer-clusterrole.yaml.
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: eventing-contrib-gitlab-source-observer
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+    duck.knative.dev/source: "true"
+rules:
+  - apiGroups:
+      - "sources.knative.dev"
+    resources:
+      - "gitlabsources"
+    verbs:
+      - get
+      - list
+      - watch
+
+---
+# Copyright 2020 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.
+
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: gitlabsource-manager-rolebinding
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: gitlabsource-manager-role
+subjects:
+  - kind: ServiceAccount
+    name: gitlab-controller-manager
+    namespace: knative-sources
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: eventing-sources-gitlab-addressable-resolver
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+subjects:
+  - kind: ServiceAccount
+    name: gitlab-controller-manager
+    namespace: knative-sources
+# An aggregated ClusterRole for all Addressable CRDs.
+# Ref: https://github.com/knative/eventing/tree/master/config/core/rolesaddressable-resolvers-clusterrole.yaml
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: addressable-resolver
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: eventing-sources-gitlab-webhook
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+subjects:
+  - kind: ServiceAccount
+    name: gitlab-webhook
+    namespace: knative-sources
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: gitlab-webhook
+
+---
+# Copyright 2020 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.
+
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+  name: gitlab-webhook
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+rules:
+  # Sources admin
+  - apiGroups:
+      - sources.knative.dev
+    resources:
+      - gitlabsources
+    verbs: &everything
+      - get
+      - list
+      - watch
+      - create
+      - update
+      - patch
+      - delete
+  # Sources finalizer
+  - apiGroups:
+      - sources.knative.dev
+    resources:
+      - gitlabsources/finalizers
+    verbs: *everything
+  # Source statuses update
+  - apiGroups:
+      - sources.knative.dev
+    resources:
+      - gitlabsources/status
+    verbs:
+      - get
+      - update
+      - patch
+  # Deployments admin
+  - apiGroups:
+      - apps
+    resources:
+      - deployments
+    verbs: *everything
+  # Knative Services admin
+  - apiGroups:
+      - serving.knative.dev
+    resources:
+      - services
+    verbs: *everything
+  # Secrets read
+  - apiGroups:
+      - ""
+    resources:
+      - secrets
+      - services
+    verbs:
+      - get
+      - list
+      - watch
+  # Events admin
+  - apiGroups:
+      - ""
+    resources:
+      - events
+      - configmaps
+    verbs: *everything
+  # EventTypes admin
+  - apiGroups:
+      - eventing.knative.dev
+    resources:
+      - eventtypes
+    verbs: *everything
+  # For manipulating certs into secrets.
+  - apiGroups:
+      - ""
+    resources:
+      - "secrets"
+    verbs:
+      - "get"
+      - "create"
+      - "update"
+      - "list"
+      - "watch"
+  # Namespace labelling for webhook
+  - apiGroups:
+      - ""
+    resources:
+      - namespaces
+    verbs:
+      - get
+      - create
+      - update
+      - list
+      - watch
+      - patch
+  # For actually registering our webhook.
+  - apiGroups:
+      - "admissionregistration.k8s.io"
+    resources:
+      - "mutatingwebhookconfigurations"
+      - "validatingwebhookconfigurations"
+    verbs: *everything
+  # Bindings admin
+  - apiGroups:
+      - bindings.knative.dev
+    resources:
+      - gitlabbindings
+    verbs: &everything
+      - get
+      - list
+      - watch
+      - create
+      - update
+      - patch
+      - delete
+  # Bindings finalizer
+  - apiGroups:
+      - bindings.knative.dev
+    resources:
+      - gitlabbindings/finalizers
+    verbs: *everything
+  # Source statuses update
+  - apiGroups:
+      - bindings.knative.dev
+    resources:
+      - gitlabbindings/status
+    verbs:
+      - get
+      - update
+      - patch
+      # For leader election
+  - apiGroups:
+      - "coordination.k8s.io"
+    resources:
+      - "leases"
+    verbs: *everything
+
+---
+# Copyright 2020 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.
+
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+  name: gitlabbindings.bindings.knative.dev
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+    duck.knative.dev/binding: "true"
+    knative.dev/crd-install: "true"
+spec:
+  group: bindings.knative.dev
+  scope: Namespaced
+  names:
+    kind: GitLabBinding
+    plural: gitlabbindings
+    categories:
+      - all
+      - knative
+      - eventing
+      - bindings
+  versions:
+    - name: v1alpha1
+      served: true
+      storage: true
+      subresources:
+        status: {}
+      schema:
+        openAPIV3Schema:
+          type: object
+          properties:
+            spec:
+              type: object
+              properties:
+                accessToken:
+                  type: object
+                  properties:
+                    secretKeyRef:
+                      type: object
+                      properties:
+                        name:
+                          type: string
+                        key:
+                          type: string
+                      required:
+                        - name
+                        - key
+                subject:
+                  type: object
+                  properties:
+                    apiVersion:
+                      type: string
+                    kind:
+                      type: string
+                    name:
+                      type: string
+                    selector:
+                      type: object
+                      properties:
+                        matchLabels:
+                          type: object
+                          additionalProperties:
+                            type: string
+                      required:
+                        - matchLabels
+                  oneOf:
+                    - required:
+                        - apiVersion
+                        - kind
+                        - name
+                    - required:
+                        - apiVersion
+                        - kind
+                        - selector
+            status:
+              type: object
+              properties:
+                observedGeneration:
+                  type: integer
+                  format: int64
+                conditions:
+                  type: array
+                  items:
+                    type: object
+                    properties:
+                      type:
+                        type: string
+                      status:
+                        type: string
+                        enum: ['True', 'False', Unknown]
+                      severity:
+                        type: string
+                        enum: [Error, Warning, Info]
+                      reason:
+                        type: string
+                      message:
+                        type: string
+                      lastTransitionTime:
+                        type: string
+                        format: date-time
+                    required:
+                      - type
+                      - status
+      additionalPrinterColumns:
+        - name: Ready
+          type: string
+          jsonPath: .status.conditions[?(@.type=='Ready')].status
+        - name: Reason
+          type: string
+          jsonPath: .status.conditions[?(@.type=='Ready')].reason
+        - name: Age
+          type: date
+          jsonPath: .metadata.creationTimestamp
+
+---
+# Copyright 2021 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.
+
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+  name: gitlabsources.sources.knative.dev
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+    eventing.knative.dev/source: "true"
+    duck.knative.dev/source: "true"
+    knative.dev/crd-install: "true"
+  annotations:
+    # Webhook event types as documented at https://docs.gitlab.com/ee/user/project/integrations/webhooks.html#events.
+    # NOTE(antoineco): GitLab doesn't currently provide schemas for those events (gitlab-org/gitlab#208924)
+    registry.knative.dev/eventTypes: |
+      [
+        {
+          "type": "dev.knative.sources.gitlab.build",
+          "description": "Triggered on status change of a job."
+        },
+        {
+          "type": "dev.knative.sources.gitlab.deployment",
+          "description": "Triggered when a deployment starts, succeeds, fails, or is cancelled."
+        },
+        {
+          "type": "dev.knative.sources.gitlab.issue",
+          "description": "Triggered when a new issue is created or an existing issue was updated/closed/reopened."
+        },
+        {
+          "type": "dev.knative.sources.gitlab.merge_request",
+          "description": "Triggered when a merge request is created/updated/merged/closed or a commit is added in the source branch."
+        },
+        {
+          "type": "dev.knative.sources.gitlab.note",
+          "description": "Triggered when a new comment is made on commits, merge requests, issues, and code snippets."
+        },
+        {
+          "type": "dev.knative.sources.gitlab.pipeline",
+          "description": "Triggered on status change of Pipeline."
+        },
+        {
+          "type": "dev.knative.sources.gitlab.push",
+          "description": "Triggered when you push to the repository except when pushing tags."
+        },
+        {
+          "type": "dev.knative.sources.gitlab.tag_push",
+          "description": "Triggered when you create (or delete) tags to the repository."
+        },
+        {
+          "type": "dev.knative.sources.gitlab.wiki_page",
+          "description": "Triggered when a wiki page is created, updated or deleted."
+        }
+      ]
+spec:
+  group: sources.knative.dev
+  scope: Namespaced
+  names:
+    kind: GitLabSource
+    plural: gitlabsources
+    categories:
+      - all
+      - knative
+      - eventing
+      - sources
+  versions:
+    - name: v1alpha1
+      served: true
+      storage: true
+      subresources:
+        status: {}
+      schema:
+        openAPIV3Schema:
+          type: object
+          properties:
+            spec:
+              description: Desired state of the event source.
+              type: object
+              properties:
+                projectUrl:
+                  description: URL of the GitLab project to receive events from.
+                  type: string
+                  format: uri
+                eventTypes:
+                  description: List of webhooks to enable on the selected GitLab project. Those correspond to the attributes enumerated at https://docs.gitlab.com/ee/api/projects.html#add-project-hook
+                  type: array
+                  items:
+                    type: string
+                    enum:
+                      - confidential_issues_events
+                      - confidential_note_events
+                      - deployment_events
+                      - issues_events
+                      - job_events
+                      - merge_requests_events
+                      - note_events
+                      - pipeline_events
+                      - push_events
+                      - tag_push_events
+                      - wiki_page_events
+                  minItems: 1
+                accessToken:
+                  description: Access token for the GitLab API.
+                  type: object
+                  properties:
+                    secretKeyRef:
+                      description: A reference to a Kubernetes Secret object containing a GitLab access token.
+                      type: object
+                      properties:
+                        name:
+                          description: The name of the Kubernetes Secret object which contains the GitLab access token.
+                          type: string
+                        key:
+                          description: The key which contains the GitLab access token within the Kubernetes Secret object referenced by name.
+                          type: string
+                      required:
+                        - name
+                        - key
+                secretToken:
+                  description: Arbitrary token used to validate requests to webhooks.
+                  type: object
+                  properties:
+                    secretKeyRef:
+                      description: A reference to a Kubernetes Secret object containing the webhook token.
+                      type: object
+                      properties:
+                        name:
+                          description: The name of the Kubernetes Secret object which contains the webhook token.
+                          type: string
+                        key:
+                          description: The key which contains the webhook token within the Kubernetes Secret object referenced by name.
+                          type: string
+                      required:
+                        - name
+                        - key
+                sslverify:
+                  description: Whether requests to webhooks should be made over SSL.
+                  type: boolean
+                serviceAccountName:
+                  description: Service Account the receive adapter Pod should be using.
+                  type: string
+                sink:
+                  description: The destination of events received from webhooks.
+                  type: object
+                  properties:
+                    ref:
+                      description: Reference to an addressable Kubernetes object to be used as the destination of events.
+                      type: object
+                      properties:
+                        apiVersion:
+                          type: string
+                        kind:
+                          type: string
+                        namespace:
+                          type: string
+                        name:
+                          type: string
+                      required:
+                        - apiVersion
+                        - kind
+                        - name
+                    uri:
+                      description: URI to use as the destination of events.
+                      type: string
+                      format: uri
+                  oneOf:
+                    - required: ['ref']
+                    - required: ['uri']
+              required:
+                - projectUrl
+                - eventTypes
+                - accessToken
+                - secretToken
+                - sink
+            status:
+              type: object
+              properties:
+                webhookID:
+                  description: ID of the project hook registered with GitLab
+                  type: integer
+                sinkUri:
+                  type: string
+                  format: uri
+                ceAttributes:
+                  type: array
+                  items:
+                    type: object
+                    properties:
+                      type:
+                        type: string
+                      source:
+                        type: string
+                    required:
+                      - type
+                      - source
+                observedGeneration:
+                  type: integer
+                  format: int64
+                conditions:
+                  type: array
+                  items:
+                    type: object
+                    properties:
+                      type:
+                        type: string
+                      status:
+                        type: string
+                        enum: ['True', 'False', Unknown]
+                      severity:
+                        type: string
+                        enum: [Error, Warning, Info]
+                      reason:
+                        type: string
+                      message:
+                        type: string
+                      lastTransitionTime:
+                        type: string
+                        format: date-time
+                    required:
+                      - type
+                      - status
+      additionalPrinterColumns:
+        - name: Ready
+          type: string
+          jsonPath: .status.conditions[?(@.type=='Ready')].status
+        - name: Reason
+          type: string
+          jsonPath: .status.conditions[?(@.type=='Ready')].reason
+        - name: Sink
+          type: string
+          jsonPath: .status.sinkUri
+        - name: Age
+          type: date
+          jsonPath: .metadata.creationTimestamp
+
+---
+# Copyright 2020 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.
+
+apiVersion: v1
+kind: Service
+metadata:
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+    control-plane: gitlab-controller-manager
+  name: gitlab-controller-manager-service
+  namespace: knative-sources
+spec:
+  ports:
+    - name: https-gitlab
+      port: 443
+      targetPort: 8443
+  selector:
+    control-plane: gitlab-controller-manager
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+    control-plane: gitlab-controller-manager
+  name: gitlab-controller-manager
+  namespace: knative-sources
+spec:
+  selector:
+    matchLabels:
+      control-plane: gitlab-controller-manager
+  template:
+    metadata:
+      labels:
+        control-plane: gitlab-controller-manager
+    spec:
+      serviceAccountName: gitlab-controller-manager
+      containers:
+        - name: manager
+          env:
+            - name: SYSTEM_NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+            - name: CONFIG_LOGGING_NAME
+              value: config-logging
+            - name: CONFIG_OBSERVABILITY_NAME
+              value: config-observability
+            - name: METRICS_DOMAIN
+              value: knative.dev/sources
+            - name: GL_RA_IMAGE
+              value: gcr.io/knative-releases/knative.dev/eventing-gitlab/cmd/receive_adapter@sha256:8955193152ce488ad0456e40fdc72d64b21df6d7432b5ba3a1db04bb9e1035ab
+            - name: POD_NAME
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.name
+          image: gcr.io/knative-releases/knative.dev/eventing-gitlab/cmd/controller@sha256:5c8034ef99d7f0c919600ff871134d4bc91039fa5d8eb6777f60393e5139efca
+          resources:
+            limits:
+              cpu: 100m
+              memory: 30Mi
+            requests:
+              cpu: 100m
+              memory: 20Mi
+      terminationGracePeriodSeconds: 10
+
+---
+# Copyright 2020 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
+#
+#     https://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.
+
+apiVersion: admissionregistration.k8s.io/v1
+kind: MutatingWebhookConfiguration
+metadata:
+  name: defaulting.webhook.gitlab.sources.knative.dev
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+webhooks:
+  - admissionReviewVersions:
+      - v1beta1
+    clientConfig:
+      service:
+        name: gitlab-webhook
+        namespace: knative-sources
+    sideEffects: None
+    failurePolicy: Fail
+    name: defaulting.webhook.gitlab.sources.knative.dev
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: ValidatingWebhookConfiguration
+metadata:
+  name: validation.webhook.gitlab.sources.knative.dev
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+webhooks:
+  - admissionReviewVersions:
+      - v1beta1
+    clientConfig:
+      service:
+        name: gitlab-webhook
+        namespace: knative-sources
+    sideEffects: None
+    failurePolicy: Fail
+    name: validation.webhook.gitlab.sources.knative.dev
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: MutatingWebhookConfiguration
+metadata:
+  name: gitlabbindings.webhook.gitlab.sources.knative.dev
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+webhooks:
+  - admissionReviewVersions:
+      - v1beta1
+    clientConfig:
+      service:
+        name: gitlab-webhook
+        namespace: knative-sources
+    sideEffects: None
+    failurePolicy: Fail
+    name: gitlabbindings.webhook.gitlab.sources.knative.dev
+
+---
+# Copyright 2020 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
+#
+#     https://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.
+
+apiVersion: v1
+kind: Secret
+metadata:
+  name: gitlab-webhook-certs
+  namespace: knative-sources
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+# The data is populated at install time.
+---
+apiVersion: v1
+kind: Service
+metadata:
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+    role: webhook
+  name: gitlab-webhook
+  namespace: knative-sources
+spec:
+  ports:
+    - name: https-webhook
+      port: 443
+      targetPort: 8443
+  selector:
+    role: gitlab-webhook
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: gitlab-webhook
+  namespace: knative-sources
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+spec:
+  replicas: 1
+  selector:
+    matchLabels: &labels
+      app: gitlab-webhook
+      role: gitlab-webhook
+  template:
+    metadata:
+      labels: *labels
+    spec:
+      serviceAccountName: gitlab-webhook
+      containers:
+        - name: gitlab-webhook
+          terminationMessagePolicy: FallbackToLogsOnError
+          image: gcr.io/knative-releases/knative.dev/eventing-gitlab/cmd/webhook@sha256:af85b144e49e8c6fc6ca21dbc08dde3e05d5f898e86624ac3ac8468124370ddd
+          env:
+            - name: SYSTEM_NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+            - name: CONFIG_LOGGING_NAME
+              value: config-logging
+            - name: METRICS_DOMAIN
+              value: knative.dev/eventing
+            - name: WEBHOOK_NAME
+              value: gitlab-webhook
+            - name: POD_NAME
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.name
+          ports:
+            - containerPort: 9090
+              name: metrics
+          # TODO set proper resource limits.
+
+          readinessProbe: &probe
+            periodSeconds: 1
+            httpGet:
+              scheme: HTTPS
+              port: 8443
+              httpHeaders:
+                - name: k-kubelet-probe
+                  value: "webhook"
+          livenessProbe:
+            !!merge <<: *probe
+            initialDelaySeconds: 20
+
+---
diff --git a/cmd/operator/kodata/eventing-source/1.10/redis/redis-source.yaml b/cmd/operator/kodata/eventing-source/1.10/redis/redis-source.yaml
new file mode 100644
index 000000000..5790ef40c
--- /dev/null
+++ b/cmd/operator/kodata/eventing-source/1.10/redis/redis-source.yaml
@@ -0,0 +1,997 @@
+# Copyright 2019 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.
+
+apiVersion: v1
+kind: Namespace
+metadata:
+  name: knative-sources
+
+---
+# Copyright 2020 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.
+
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+  name: knative-sources-redisstream-adapter
+  labels:
+    eventing.knative.dev/release: devel
+rules: []
+
+---
+# Copyright 2019 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.
+
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: redis-controller-manager
+  namespace: knative-sources
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: redis-webhook
+  namespace: knative-sources
+  labels:
+    eventing.knative.dev/release: devel
+
+---
+# Copyright 2019 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.
+
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+  name: redis-controller
+rules:
+  - apiGroups:
+      - apps
+    resources:
+      - deployments
+      - statefulsets
+    verbs: &everything
+      - get
+      - list
+      - watch
+      - create
+      - update
+      - patch
+      - delete
+  - apiGroups:
+      - rbac.authorization.k8s.io
+    resources:
+      - clusterroles
+    verbs:
+      - list
+  - apiGroups:
+      - rbac.authorization.k8s.io
+    resources:
+      - rolebindings
+    verbs: *everything
+  - apiGroups:
+      - ""
+    resources:
+      - events
+      - serviceaccounts
+    verbs:
+      - get
+      - list
+      - watch
+      - create
+      - update
+      - patch
+      - delete
+  - apiGroups:
+      - sources.knative.dev
+    resources:
+      - redisstreamsources
+    verbs:
+      - get
+      - list
+      - watch
+      - create
+      - update
+      - patch
+      - delete
+  - apiGroups:
+      - sources.knative.dev
+    resources:
+      - redisstreamsources/status
+      - redisstreamsources/finalizers
+    verbs:
+      - get
+      - update
+      - patch
+  - apiGroups:
+      - ""
+    resources:
+      - secrets
+      - configmaps
+    verbs:
+      - get
+      - list
+      - watch
+  - apiGroups:
+      - coordination.k8s.io
+    resources:
+      - leases
+    verbs: *everything
+---
+# The role is needed for the aggregated role source-observer in knative-eventing to provide readonly access to "Sources".
+# Ref: https://github.com/knative/eventing/tree/master/config/core/rolessource-observer-clusterrole.yaml.
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: eventing-redis-source-observer
+  labels:
+    eventing.knative.dev/release: devel
+    duck.knative.dev/source: "true"
+rules:
+  - apiGroups:
+      - "sources.knative.dev"
+    resources:
+      - "redisstreamsources"
+    verbs:
+      - get
+      - list
+      - watch
+
+---
+# Copyright 2019 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.
+
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+  name: redis-webhook
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+rules:
+  # For watching logging configuration and getting certs.
+  - apiGroups:
+      - ""
+    resources:
+      - "configmaps"
+    verbs:
+      - "get"
+      - "list"
+      - "watch"
+  # For manipulating certs into secrets.
+  - apiGroups:
+      - ""
+    resources:
+      - "secrets"
+    verbs:
+      - "get"
+      - "create"
+  # For getting our Deployment so we can decorate with ownerref.
+  - apiGroups:
+      - "apps"
+    resources:
+      - "deployments"
+    verbs:
+      - "get"
+  - apiGroups:
+      - "apps"
+    resources:
+      - "deployments/finalizers"
+    verbs:
+      - update
+  # For actually registering our webhook.
+  - apiGroups:
+      - "admissionregistration.k8s.io"
+    resources:
+      - "mutatingwebhookconfigurations"
+    verbs:
+      - "get"
+      - "list"
+      - "create"
+      - "update"
+      - "delete"
+      - "patch"
+      - "watch"
+  # Our own resources and statuses we care about.
+  - apiGroups:
+      - "sources.knative.dev"
+    resources:
+      - "redisstreamsources"
+      - "redisstreamsources/status"
+    verbs:
+      - "get"
+      - "list"
+      - "watch"
+
+---
+# Copyright 2019 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.
+
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: redis-controller-rolebinding
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: redis-controller
+subjects:
+  - kind: ServiceAccount
+    name: redis-controller-manager
+    namespace: knative-sources
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: eventing-sources-redis-controller-addressable-resolver
+subjects:
+  - kind: ServiceAccount
+    name: redis-controller-manager
+    namespace: knative-sources
+# An aggregated ClusterRole for all Addressable CRDs.
+# Ref: https://github.com/knative/eventing/tree/master/config/core/rolesaddressable-resolvers-clusterrole.yaml
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: addressable-resolver
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: redis-webhook
+  labels:
+    eventing.knative.dev/release: devel
+subjects:
+  - kind: ServiceAccount
+    name: redis-webhook
+    namespace: knative-sources
+roleRef:
+  kind: ClusterRole
+  name: redis-webhook
+  apiGroup: rbac.authorization.k8s.io
+
+---
+# Copyright 2019 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.
+
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+  name: redisstreamsources.sources.knative.dev
+  labels:
+    eventing.knative.dev/release: devel
+    knative.dev/crd-install: "true"
+    duck.knative.dev/addressable: "true"
+spec:
+  group: sources.knative.dev
+  versions:
+    - name: v1alpha1
+      served: true
+      storage: true
+      subresources:
+        status: {}
+        scale:
+          # specReplicasPath defines the JSONPath inside of a custom resource that corresponds to Scale.Spec.Replicas.
+          specReplicasPath: .spec.consumers
+          # statusReplicasPath defines the JSONPath inside of a custom resource that corresponds to Scale.Status.Replicas.
+          statusReplicasPath: .status.consumers
+      schema:
+        openAPIV3Schema:
+          type: object
+          properties:
+            spec:
+              type: object
+              properties:
+                address:
+                  description: Address is the Redis TCP address
+                  type: string
+                ceOverrides:
+                  description: CloudEventOverrides defines overrides to control the output format and modifications of the event sent to the sink.
+                  type: object
+                  properties:
+                    extensions:
+                      description: Extensions specify what attribute are added or overridden on the outbound event. Each `Extensions` key-value pair are set on the event as an attribute extension independently.
+                      type: object
+                      x-kubernetes-preserve-unknown-fields: true
+                dialOptions:
+                  description: Options are the connection options
+                  type: object
+                  properties:
+                    caCert:
+                      description: CACert is the Kubernetes secret containing the server CA cert.
+                      type: object
+                      required:
+                        - secretKeyRef
+                      properties:
+                        secretKeyRef:
+                          description: The Secret key to select from.
+                          type: object
+                          properties:
+                            key:
+                              description: The key of the secret to select from.  Must be a valid secret key.
+                              type: string
+                            name:
+                              description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                              type: string
+                            optional:
+                              description: Specify whether the Secret or its key must be defined
+                              type: boolean
+                    cert:
+                      description: Cert is the Kubernetes secret containing the client certificate.
+                      type: object
+                      required:
+                        - secretKeyRef
+                      properties:
+                        secretKeyRef:
+                          description: The Secret key to select from.
+                          type: object
+                          properties:
+                            key:
+                              description: The key of the secret to select from.  Must be a valid secret key.
+                              type: string
+                            name:
+                              description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                              type: string
+                            optional:
+                              description: Specify whether the Secret or its key must be defined
+                              type: boolean
+                    key:
+                      description: Key is the Kubernetes secret containing the client key.
+                      type: object
+                      required:
+                        - secretKeyRef
+                      properties:
+                        secretKeyRef:
+                          description: The Secret key to select from.
+                          type: object
+                          properties:
+                            key:
+                              description: The key of the secret to select from.  Must be a valid secret key.
+                              type: string
+                            name:
+                              description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                              type: string
+                            optional:
+                              description: Specify whether the Secret or its key must be defined
+                              type: boolean
+                    password:
+                      description: Password to use for connecting to Redis
+                      type: object
+                      properties:
+                        apiVersion:
+                          description: API version of the referent.
+                          type: string
+                        fieldPath:
+                          description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.'
+                          type: string
+                        kind:
+                          description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+                          type: string
+                        name:
+                          description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                          type: string
+                        namespace:
+                          description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
+                          type: string
+                        resourceVersion:
+                          description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
+                          type: string
+                        uid:
+                          description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
+                          type: string
+                    skipVerify:
+                      description: SkipVerify indicates whether to skip TLS verification or not
+                      type: boolean
+                    useTLS:
+                      description: UseTLS indicates whether to use TLS or not
+                      type: boolean
+                group:
+                  description: Group is the name of the consumer group associated to this source. When left empty, a group is automatically created for this source and deleted when this source is deleted.
+                  type: string
+                consumers:
+                  description: Consumers is a pointer to the number of desired consumers running in the consumer group.
+                  type: integer
+                  format: int32
+                sink:
+                  description: Sink is a reference to an object that will resolve to a uri to use as the sink.
+                  type: object
+                  properties:
+                    ref:
+                      description: Ref points to an Addressable.
+                      type: object
+                      properties:
+                        apiVersion:
+                          description: API version of the referent.
+                          type: string
+                        kind:
+                          description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+                          type: string
+                        name:
+                          description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                          type: string
+                        namespace:
+                          description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.'
+                          type: string
+                    uri:
+                      description: URI can be an absolute URL(non-empty scheme and non-empty host) pointing to the target or a relative URI. Relative URIs will be resolved using the base URI retrieved from Ref.
+                      type: string
+                stream:
+                  description: Stream is the name of the stream.
+                  type: string
+            status:
+              type: object
+              properties:
+                annotations:
+                  description: Annotations is additional Status fields for the Resource to save some additional State as well as convey more information to the user. This is roughly akin to Annotations on any k8s resource, just the reconciler conveying richer information outwards.
+                  type: object
+                  x-kubernetes-preserve-unknown-fields: true
+                ceAttributes:
+                  description: CloudEventAttributes are the specific attributes that the Source uses as part of its CloudEvents.
+                  type: array
+                  items:
+                    type: object
+                    properties:
+                      source:
+                        description: Source is the CloudEvents source attribute.
+                        type: string
+                      type:
+                        description: Type refers to the CloudEvent type attribute.
+                        type: string
+                conditions:
+                  description: Conditions the latest available observations of a resource's current state.
+                  type: array
+                  items:
+                    type: object
+                    required:
+                      - type
+                      - status
+                    properties:
+                      lastTransitionTime:
+                        description: LastTransitionTime is the last time the condition transitioned from one status to another. We use VolatileTime in place of metav1.Time to exclude this from creating equality.Semantic differences (all other things held constant).
+                        type: string
+                      message:
+                        description: A human readable message indicating details about the transition.
+                        type: string
+                      reason:
+                        description: The reason for the condition's last transition.
+                        type: string
+                      severity:
+                        description: Severity with which to treat failures of this type of condition. When this is not specified, it defaults to Error.
+                        type: string
+                      status:
+                        description: Status of the condition, one of True, False, Unknown.
+                        type: string
+                      type:
+                        description: Type of condition.
+                        type: string
+                observedGeneration:
+                  description: ObservedGeneration is the 'Generation' of the Service that was last processed by the controller.
+                  type: integer
+                  format: int64
+                sinkUri:
+                  description: SinkURI is the current active sink URI that has been configured for the Source.
+                  type: string
+                consumers:
+                  description: Consumers is the number of desired consumers running in the consumer group.
+                  type: integer
+                  format: int32
+      additionalPrinterColumns:
+        - name: Sink
+          type: string
+          jsonPath: .status.sinkUri
+        - name: Age
+          type: date
+          jsonPath: .metadata.creationTimestamp
+        - name: Ready
+          type: string
+          jsonPath: ".status.conditions[?(@.type=='Ready')].status"
+        - name: Reason
+          type: string
+          jsonPath: ".status.conditions[?(@.type=='Ready')].reason"
+  names:
+    categories:
+      - all
+      - knative
+      - eventing
+      - sources
+    kind: RedisStreamSource
+    plural: redisstreamsources
+    singular: redisstreamsource
+  scope: Namespaced
+
+---
+# Copyright 2019 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.
+
+apiVersion: v1
+kind: Service
+metadata:
+  labels:
+    control-plane: redis-controller-manager
+  name: redis-controller-manager
+  namespace: knative-sources
+spec:
+  selector:
+    control-plane: redis-controller-manager
+  ports:
+    - name: https-redis
+      port: 443
+
+---
+# Copyright 2018 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
+#
+#     https://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.
+
+apiVersion: v1
+kind: Service
+metadata:
+  labels:
+    eventing.knative.dev/release: devel
+    role: redis-webhook
+  name: redis-webhook
+  namespace: knative-sources
+spec:
+  ports:
+    - name: https-webhook
+      port: 443
+      targetPort: 8443
+  selector:
+    role: redis-webhook
+
+---
+# Copyright 2019 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.
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: redis-controller-manager
+  namespace: knative-sources
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+    control-plane: redis-controller-manager
+spec:
+  selector:
+    matchLabels: &labels
+      control-plane: redis-controller-manager
+  serviceName: redis-controller-manager
+  template:
+    metadata:
+      labels: *labels
+    spec:
+      serviceAccountName: redis-controller-manager
+      containers:
+        - image: gcr.io/knative-releases/knative.dev/eventing-redis/cmd/source/controller@sha256:4e06b4198db06e41c746d26050960d8bc754d82a8b05d21a823b7db322d2f091
+          name: manager
+          env:
+            - name: SYSTEM_NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+            - name: CONFIG_LOGGING_NAME
+              value: config-logging
+            - name: CONFIG_OBSERVABILITY_NAME
+              value: config-observability
+            - name: METRICS_DOMAIN
+              value: knative.dev/sources
+            - name: CONFIG_LEADERELECTION_NAME
+              value: config-leader-election-redis
+            - name: STREAMSOURCE_RA_IMAGE
+              value: gcr.io/knative-releases/knative.dev/eventing-redis/cmd/source/receive_adapter@sha256:ba3c69727ccd6fc2bf1026a1890b77d9d4d185318241f615e2143966bf359147
+            - name: CONFIG_REDIS_NUMCONSUMERS
+              value: config-redis
+            - name: SECRET_TLS_TLSCERTIFICATE
+              value: tls-secret
+      terminationGracePeriodSeconds: 10
+
+---
+# Copyright 2020 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
+#
+#     https://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.
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: config-leader-election-redis
+  namespace: knative-sources
+  labels:
+    contrib.eventing.knative.dev/release: "v1.10.0"
+data:
+  # An inactive but valid configuration follows; see example.
+  resourceLock: "leases"
+  leaseDuration: "15s"
+  renewDeadline: "10s"
+  retryPeriod: "2s"
+  _example: |
+    ################################
+    #                              #
+    #    EXAMPLE CONFIGURATION     #
+    #                              #
+    ################################
+
+    # This block is not actually functional configuration,
+    # but serves to illustrate the available configuration
+    # options and document them in a way that is accessible
+    # to users that `kubectl edit` this config map.
+    #
+    # These sample configuration options may be copied out of
+    # this example block and unindented to be in the data block
+    # to actually change the configuration.
+
+    # resourceLock controls which API resource is used as the basis for the
+    # leader election lock. Valid values are:
+    #
+    # - leases -> use the coordination API
+    # - configmaps -> use configmaps
+    # - endpoints -> use endpoints
+    resourceLock: "leases"
+
+    # leaseDuration is how long non-leaders will wait to try to acquire the
+    # lock; 15 seconds is the value used by core kubernetes controllers.
+    leaseDuration: "15s"
+    # renewDeadline is how long a leader will try to renew the lease before
+    # giving up; 10 seconds is the value used by core kubernetes controllers.
+    renewDeadline: "10s"
+    # retryPeriod is how long the leader election client waits between tries of
+    # actions; 2 seconds is the value used by core kuberntes controllers.
+    retryPeriod: "2s"
+    # enabledComponents is a comma-delimited list of component names for which
+    # leader election is enabled. Valid values are:
+    #
+    # - couchdb-controller
+    enabledComponents: "couchdb-controller"
+
+---
+# Copyright 2019 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
+#
+#     https://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.
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: config-logging
+  namespace: knative-sources
+data:
+  # Common configuration for all Knative codebase
+  zap-logger-config: |
+    {
+      "level": "info",
+      "development": false,
+      "outputPaths": ["stdout"],
+      "errorOutputPaths": ["stderr"],
+      "encoding": "json",
+      "encoderConfig": {
+        "timeKey": "ts",
+        "levelKey": "level",
+        "nameKey": "logger",
+        "callerKey": "caller",
+        "messageKey": "msg",
+        "stacktraceKey": "stacktrace",
+        "lineEnding": "",
+        "levelEncoder": "",
+        "timeEncoder": "iso8601",
+        "durationEncoder": "",
+        "callerEncoder": ""
+      }
+    }
+  # Log level overrides
+  # For all components changes are be picked up immediately.
+  loglevel.controller: "info"
+  loglevel.webhook: "info"
+
+---
+# Copyright 2019 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
+#
+#     https://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.
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: config-observability
+  namespace: knative-sources
+data:
+  _example: |
+    ################################
+    #                              #
+    #    EXAMPLE CONFIGURATION     #
+    #                              #
+    ################################
+
+    # This block is not actually functional configuration,
+    # but serves to illustrate the available configuration
+    # options and document them in a way that is accessible
+    # to users that `kubectl edit` this config map.
+    #
+    # These sample configuration options may be copied out of
+    # this example block and unindented to be in the data block
+    # to actually change the configuration.
+
+    # logging.enable-var-log-collection defaults to false.
+    # A fluentd sidecar will be set up to collect var log if
+    # this flag is true.
+    logging.enable-var-log-collection: false
+
+    # logging.fluentd-sidecar-image provides the fluentd sidecar image
+    # to inject as a sidecar to collect logs from /var/log.
+    # Must be presented if logging.enable-var-log-collection is true.
+    logging.fluentd-sidecar-image: registry.k8s.io/fluentd-elasticsearch:v2.0.4
+
+    # logging.fluentd-sidecar-output-config provides the configuration
+    # for the fluentd sidecar, which will be placed into a configmap and
+    # mounted into the fluentd sidecar image.
+    logging.fluentd-sidecar-output-config: |
+      # Parse json log before sending to Elastic Search
+      <filter **>
+        @type parser
+        key_name log
+        <parse>
+          @type multi_format
+          <pattern>
+            format json
+            time_key fluentd-time # fluentd-time is reserved for structured logs
+            time_format %Y-%m-%dT%H:%M:%S.%NZ
+          </pattern>
+          <pattern>
+            format none
+            message_key log
+          </pattern>
+        </parse>
+      </filter>
+      # Send to Elastic Search
+      <match **>
+        @id elasticsearch
+        @type elasticsearch
+        @log_level info
+        include_tag_key true
+        # Elasticsearch service is in monitoring namespace.
+        host elasticsearch-logging.knative-monitoring
+        port 9200
+        logstash_format true
+        <buffer>
+          @type file
+          path /var/log/fluentd-buffers/kubernetes.system.buffer
+          flush_mode interval
+          retry_type exponential_backoff
+          flush_thread_count 2
+          flush_interval 5s
+          retry_forever
+          retry_max_interval 30
+          chunk_limit_size 2M
+          queue_limit_length 8
+          overflow_action block
+        </buffer>
+      </match>
+
+    # logging.revision-url-template provides a template to use for producing the
+    # logging URL that is injected into the status of each Revision.
+    # This value is what you might use the the Knative monitoring bundle, and provides
+    # access to Kibana after setting up kubectl proxy.
+    logging.revision-url-template: |
+      http://localhost:8001/api/v1/namespaces/knative-monitoring/services/kibana-logging/proxy/app/kibana#/discover?_a=(query:(match:(kubernetes.labels.knative-dev%2FrevisionUID:(query:'${REVISION_UID}',type:phrase))))
+
+    # If non-empty, this enables queue proxy writing request logs to stdout.
+    # The value determines the shape of the request logs and it must be a valid go text/template.
+    # It is important to keep this as a single line. Multiple lines are parsed as separate entities
+    # by most collection agents and will split the request logs into multiple records.
+    #
+    # The following fields and functions are available to the template:
+    #
+    # Request: An http.Request (see https://golang.org/pkg/net/http/#Request)
+    # representing an HTTP request received by the server.
+    #
+    # Response:
+    # struct {
+    #   Code    int       // HTTP status code (see https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml)
+    #   Size    int       // An int representing the size of the response.
+    #   Latency float64   // A float64 representing the latency of the response in seconds.
+    # }
+    #
+    # Revision:
+    # struct {
+    #   Name          string  // Knative revision name
+    #   Namespace     string  // Knative revision namespace
+    #   Service       string  // Knative service name
+    #   Configuration string  // Knative configuration name
+    #   PodName       string  // Name of the pod hosting the revision
+    #   PodIP         string  // IP of the pod hosting the revision
+    # }
+    #
+    logging.request-log-template: '{"httpRequest": {"requestMethod": "{{.Request.Method}}", "requestUrl": "{{js .Request.RequestURI}}", "requestSize": "{{.Request.ContentLength}}", "status": {{.Response.Code}}, "responseSize": "{{.Response.Size}}", "userAgent": "{{js .Request.UserAgent}}", "remoteIp": "{{js .Request.RemoteAddr}}", "serverIp": "{{.Revision.PodIP}}", "referer": "{{js .Request.Referer}}", "latency": "{{.Response.Latency}}s", "protocol": "{{.Request.Proto}}"}, "traceId": "{{index .Request.Header "X-B3-Traceid"}}"}'
+
+    # metrics.backend-destination field specifies the system metrics destination.
+    # It supports either prometheus (the default) or stackdriver.
+    # Note: Using stackdriver will incur additional charges
+    metrics.backend-destination: prometheus
+
+    # metrics.request-metrics-backend-destination specifies the request metrics
+    # destination. If non-empty, it enables queue proxy to send request metrics.
+    # Currently supported values: prometheus, stackdriver.
+    metrics.request-metrics-backend-destination: prometheus
+
+    # metrics.stackdriver-project-id field specifies the stackdriver project ID. This
+    # field is optional. When running on GCE, application default credentials will be
+    # used if this field is not provided.
+    metrics.stackdriver-project-id: "<your stackdriver project id>"
+
+    # metrics.allow-stackdriver-custom-metrics indicates whether it is allowed to send metrics to
+    # Stackdriver using "global" resource type and custom metric type if the
+    # metrics are not supported by "knative_revision" resource type. Setting this
+    # flag to "true" could cause extra Stackdriver charge.
+    # If metrics.backend-destination is not Stackdriver, this is ignored.
+    metrics.allow-stackdriver-custom-metrics: "false"
+
+---
+# Copyright 2019 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
+#
+#     https://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.
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: config-redis
+  namespace: knative-sources
+data:
+  # Configure the receive adapter with the number of consumers in a group
+  numConsumers: "500"
+
+---
+apiVersion: v1
+kind: Secret
+metadata:
+  name: tls-secret
+  namespace: knative-sources
+stringData:
+  # the data is abbreviated in this example
+  TLS_CERT: |
+    -----BEGIN CERTIFICATE-----
+    -----END CERTIFICATE-----
+
+---
diff --git a/go.mod b/go.mod
index 34216f05d..7f3fc6c0d 100644
--- a/go.mod
+++ b/go.mod
@@ -8,7 +8,7 @@ require (
 	github.com/google/go-github/v33 v33.0.0
 	github.com/hashicorp/golang-lru v0.5.4
 	github.com/manifestival/client-go-client v0.5.0
-	github.com/manifestival/manifestival v0.7.2
+	github.com/manifestival/manifestival v0.7.1
 	go.uber.org/zap v1.21.0
 	gocloud.dev v0.22.0
 	golang.org/x/mod v0.6.0
@@ -24,7 +24,7 @@ require (
 	knative.dev/caching v0.0.0-20230418150356-05a86ad5d7db
 	knative.dev/eventing v0.37.0
 	knative.dev/hack v0.0.0-20230417170854-f591fea109b3
-	knative.dev/pkg v0.0.0-20230420071539-300df436f953
+	knative.dev/pkg v0.0.0-20230418073056-dfad48eaa5d0
 	knative.dev/serving v0.37.0
 	sigs.k8s.io/yaml v1.3.0
 )
diff --git a/go.sum b/go.sum
index fffbc97dd..18f9ac134 100644
--- a/go.sum
+++ b/go.sum
@@ -595,8 +595,8 @@ github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJ
 github.com/manifestival/client-go-client v0.5.0 h1:LZUidASM6rwTEI40wtxYDKi+VHhDRnYT4xuYuLjExp4=
 github.com/manifestival/client-go-client v0.5.0/go.mod h1:sDehep6aHdIEdUKnRSvueGf2TbQfd653Sn2picTeQqM=
 github.com/manifestival/manifestival v0.6.0/go.mod h1:3Qq9cnPy7sv7FVhg2Kvw0ebb35R4OdctS4UjTjHlHm4=
-github.com/manifestival/manifestival v0.7.2 h1:l4uFdWX/xQK4QcRfqGoMtBvaZeWPEuwD6hVsCwUqZY4=
-github.com/manifestival/manifestival v0.7.2/go.mod h1:nl3T6HlfHCeidooWVTMI9vYNTBkQ1GdhLNb+smozbdk=
+github.com/manifestival/manifestival v0.7.1 h1:3y2bhqOV4YjW9p5MXXTomoFzgVu0i5ptI29XT3NXSJ8=
+github.com/manifestival/manifestival v0.7.1/go.mod h1:nl3T6HlfHCeidooWVTMI9vYNTBkQ1GdhLNb+smozbdk=
 github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
 github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI=
 github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E=
@@ -1417,8 +1417,8 @@ knative.dev/hack v0.0.0-20230417170854-f591fea109b3 h1:+W4WBOq83tfGXKhtv8OB/uJeY
 knative.dev/hack v0.0.0-20230417170854-f591fea109b3/go.mod h1:yk2OjGDsbEnQjfxdm0/HJKS2WqTLEFg/N6nUs6Rqx3Q=
 knative.dev/networking v0.0.0-20230419144338-e5d04e805e50 h1:X9rPBYr7Vrm075q0iXTr7/0oklkYoyqvlnrUwNzcUhI=
 knative.dev/networking v0.0.0-20230419144338-e5d04e805e50/go.mod h1:o2MyGpGfU5DoSAWCE2f/jnSC9GjGOplCslbA99yDkGo=
-knative.dev/pkg v0.0.0-20230420071539-300df436f953 h1:GAB1JB35FWv5zqypwzmO7v4EPY8xXsomPtHEtb8xdx4=
-knative.dev/pkg v0.0.0-20230420071539-300df436f953/go.mod h1:2qWPP9Gjh9Q7ETti+WRHnBnGCSCq+6q7m3p/nmUQviE=
+knative.dev/pkg v0.0.0-20230418073056-dfad48eaa5d0 h1:EFQcoUo8I4bc+U3y6tR1B3ONYZSHWUdAfI7Vh7dae8g=
+knative.dev/pkg v0.0.0-20230418073056-dfad48eaa5d0/go.mod h1:2qWPP9Gjh9Q7ETti+WRHnBnGCSCq+6q7m3p/nmUQviE=
 knative.dev/serving v0.37.0 h1:hp/HconGRzv0kh2az9I/af1K1DY3NG3zcyiVc2rHyOk=
 knative.dev/serving v0.37.0/go.mod h1:v0Xbfp7olb0Gljm5l4qNuLsIf8/2p1rIt/mphxvx1z0=
 nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0=
diff --git a/vendor/github.com/manifestival/manifestival/CHANGELOG.md b/vendor/github.com/manifestival/manifestival/CHANGELOG.md
index 7a369f35c..442e3054f 100644
--- a/vendor/github.com/manifestival/manifestival/CHANGELOG.md
+++ b/vendor/github.com/manifestival/manifestival/CHANGELOG.md
@@ -12,15 +12,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
 ### Removed
 
 
-## [0.7.2] - 2022-11-08
-
-### Changed
-
-- No longer ignoring errors resulting from invalid YAML manifests [#88](https://github.com/manifestival/manifestival/issues/88)
-- No longer preventing cluster-scoped resources from being owned [#90](https://github.com/manifestival/manifestival/issues/90)
-- Fixed panic when unexpected errors occur during deletion [#92](https://github.com/manifestival/manifestival/issues/92)
-
-
 ## [0.7.1] - 2022-01-19
 
 ### Changed
@@ -281,8 +272,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
 
 [controller-runtime]: https://github.com/manifestival/controller-runtime-client
 [client-go]: https://github.com/manifestival/client-go-client
-[Unreleased]: https://github.com/manifestival/manifestival/compare/v0.7.2...HEAD
-[0.7.2]: https://github.com/manifestival/manifestival/compare/v0.7.1...v0.7.2
+[Unreleased]: https://github.com/manifestival/manifestival/compare/v0.7.1...HEAD
 [0.7.1]: https://github.com/manifestival/manifestival/compare/v0.7.0...v0.7.1
 [0.7.0]: https://github.com/manifestival/manifestival/compare/v0.6.1...v0.7.0
 [0.6.1]: https://github.com/manifestival/manifestival/compare/v0.6.0...v0.6.1
diff --git a/vendor/github.com/manifestival/manifestival/internal/sources/yaml.go b/vendor/github.com/manifestival/manifestival/internal/sources/yaml.go
index c4f2b98c5..c9d226fe9 100644
--- a/vendor/github.com/manifestival/manifestival/internal/sources/yaml.go
+++ b/vendor/github.com/manifestival/manifestival/internal/sources/yaml.go
@@ -15,10 +15,10 @@ func Decode(reader io.Reader) ([]unstructured.Unstructured, error) {
 	for {
 		out := unstructured.Unstructured{}
 		err = decoder.Decode(&out)
-		if err != nil {
+		if err == io.EOF {
 			break
 		}
-		if len(out.Object) == 0 {
+		if err != nil || len(out.Object) == 0 {
 			continue
 		}
 		objs = append(objs, out)
diff --git a/vendor/github.com/manifestival/manifestival/manifestival.go b/vendor/github.com/manifestival/manifestival/manifestival.go
index b8d07b8bc..daac026ac 100644
--- a/vendor/github.com/manifestival/manifestival/manifestival.go
+++ b/vendor/github.com/manifestival/manifestival/manifestival.go
@@ -172,15 +172,14 @@ func (m Manifest) update(live, spec *unstructured.Unstructured, opts ...ApplyOpt
 // delete removes the specified object
 func (m Manifest) delete(spec *unstructured.Unstructured, opts ...DeleteOption) error {
 	current, err := m.get(spec)
-    if err != nil {
-        return err
-    }
-	if current == nil {
+	if current == nil && err == nil {
 		return nil
 	}
+
 	if !okToDelete(current) {
 		return nil
 	}
+
 	m.logResource("Deleting", spec)
 	return m.Client.Delete(spec, opts...)
 }
diff --git a/vendor/github.com/manifestival/manifestival/transform.go b/vendor/github.com/manifestival/manifestival/transform.go
index b1f9102cc..93679d211 100644
--- a/vendor/github.com/manifestival/manifestival/transform.go
+++ b/vendor/github.com/manifestival/manifestival/transform.go
@@ -90,11 +90,16 @@ func InjectNamespace(ns string) Transformer {
 	}
 }
 
-// InjectOwner creates a Transformer which adds an OwnerReference
-// pointing to `owner`
+// InjectOwner creates a Tranformer which adds an OwnerReference pointing to
+// `owner` to namespace-scoped objects.
 func InjectOwner(owner Owner) Transformer {
 	return func(u *unstructured.Unstructured) error {
-		u.SetOwnerReferences([]v1.OwnerReference{*v1.NewControllerRef(owner, owner.GroupVersionKind())})
+		if !isClusterScoped(u.GetKind()) {
+			// apparently reference counting for cluster-scoped
+			// resources is broken, so trust the GC only for ns-scoped
+			// dependents
+			u.SetOwnerReferences([]v1.OwnerReference{*v1.NewControllerRef(owner, owner.GroupVersionKind())})
+		}
 		return nil
 	}
 }
diff --git a/vendor/knative.dev/pkg/apis/duck/v1/knative_reference.go b/vendor/knative.dev/pkg/apis/duck/v1/knative_reference.go
index 4d03b6b97..c723c147a 100644
--- a/vendor/knative.dev/pkg/apis/duck/v1/knative_reference.go
+++ b/vendor/knative.dev/pkg/apis/duck/v1/knative_reference.go
@@ -128,12 +128,3 @@ func isKReferenceGroupAllowed(ctx context.Context) bool {
 func KReferenceGroupAllowed(ctx context.Context) context.Context {
 	return context.WithValue(ctx, isGroupAllowed{}, struct{}{})
 }
-
-func (kr *KReference) String() string {
-	address := ""
-	if kr.Address != nil {
-		address = *kr.Address
-	}
-	return fmt.Sprintf("Kind = %s, Namespace = %s, Name = %s, APIVersion = %s, Group = %s, Address = %s",
-		kr.Kind, kr.Namespace, kr.Name, kr.APIVersion, kr.Group, address)
-}
diff --git a/vendor/knative.dev/pkg/resolver/addressable_resolver.go b/vendor/knative.dev/pkg/resolver/addressable_resolver.go
index c53a13d39..d6995947a 100644
--- a/vendor/knative.dev/pkg/resolver/addressable_resolver.go
+++ b/vendor/knative.dev/pkg/resolver/addressable_resolver.go
@@ -26,7 +26,6 @@ import (
 
 	"knative.dev/pkg/client/injection/ducks/duck/v1/addressable"
 	"knative.dev/pkg/controller"
-	"knative.dev/pkg/network"
 
 	corev1 "k8s.io/api/core/v1"
 	apierrs "k8s.io/apimachinery/pkg/api/errors"
@@ -36,6 +35,7 @@ import (
 	pkgapisduck "knative.dev/pkg/apis/duck"
 	duckv1 "knative.dev/pkg/apis/duck/v1"
 	duckv1beta1 "knative.dev/pkg/apis/duck/v1beta1"
+	"knative.dev/pkg/network"
 	"knative.dev/pkg/tracker"
 )
 
@@ -74,9 +74,9 @@ func NewURIResolverFromTracker(ctx context.Context, t tracker.Interface, resolve
 
 // URIFromDestination resolves a v1beta1.Destination into a URI string.
 func (r *URIResolver) URIFromDestination(ctx context.Context, dest duckv1beta1.Destination, parent interface{}) (string, error) {
-	var deprecatedObjectReference *duckv1.KReference
+	var deprecatedObjectReference *corev1.ObjectReference
 	if !(dest.DeprecatedAPIVersion == "" && dest.DeprecatedKind == "" && dest.DeprecatedName == "" && dest.DeprecatedNamespace == "") {
-		deprecatedObjectReference = &duckv1.KReference{
+		deprecatedObjectReference = &corev1.ObjectReference{
 			Kind:       dest.DeprecatedKind,
 			APIVersion: dest.DeprecatedAPIVersion,
 			Name:       dest.DeprecatedName,
@@ -86,64 +86,41 @@ func (r *URIResolver) URIFromDestination(ctx context.Context, dest duckv1beta1.D
 	if dest.Ref != nil && deprecatedObjectReference != nil {
 		return "", errors.New("ref and [apiVersion, kind, name] can't be both present")
 	}
-
-	var ref *duckv1.KReference
+	var ref *corev1.ObjectReference
 	if dest.Ref != nil {
-		ref = &duckv1.KReference{
-			Kind:       dest.Ref.Kind,
-			Namespace:  dest.Ref.Namespace,
-			Name:       dest.Ref.Name,
-			APIVersion: dest.Ref.APIVersion,
-		}
+		ref = dest.Ref
 	} else {
 		ref = deprecatedObjectReference
 	}
-
-	u, err := r.URIFromDestinationV1(ctx, duckv1.Destination{Ref: ref, URI: dest.URI, CACerts: dest.CACerts}, parent)
-	if err != nil {
-		return "", err
-	}
-	return u.String(), nil
-}
-
-// URIFromDestinationV1 resolves a v1.Destination into a URL.
-func (r *URIResolver) URIFromDestinationV1(ctx context.Context, dest duckv1.Destination, parent interface{}) (*apis.URL, error) {
-	addr, err := r.AddressableFromDestinationV1(ctx, dest, parent)
-	if err != nil {
-		return nil, err
+	if ref != nil {
+		url, err := r.URIFromObjectReference(ctx, ref, parent)
+		if err != nil {
+			return "", err
+		}
+		if dest.URI != nil {
+			if dest.URI.URL().IsAbs() {
+				return "", errors.New("absolute URI is not allowed when Ref or [apiVersion, kind, name] exists")
+			}
+			return url.ResolveReference(dest.URI).String(), nil
+		}
+		return url.URL().String(), nil
 	}
-	return addr.URL, nil
-}
 
-func (r *URIResolver) URIFromKReference(ctx context.Context, ref *duckv1.KReference, parent interface{}) (*apis.URL, error) {
-	dest := duckv1.Destination{
-		Ref: ref,
-	}
-	addr, err := r.AddressableFromDestinationV1(ctx, dest, parent)
-	if err != nil {
-		return nil, err
+	if dest.URI != nil {
+		// IsAbs check whether the URL has a non-empty scheme. Besides the non non-empty scheme, we also require dest.URI has a non-empty host
+		if !dest.URI.URL().IsAbs() || dest.URI.Host == "" {
+			return "", fmt.Errorf("URI is not absolute (both scheme and host should be non-empty): %q", dest.URI.String())
+		}
+		return dest.URI.String(), nil
 	}
-	return addr.URL, nil
-}
 
-// URIFromObjectReference resolves an ObjectReference to a URI string.
-func (r *URIResolver) URIFromObjectReference(ctx context.Context, ref *corev1.ObjectReference, parent interface{}) (*apis.URL, error) {
-	if ref == nil {
-		return nil, apierrs.NewBadRequest("ref is nil")
-	}
-	dest := duckv1.KReference{
-		Kind:       ref.Kind,
-		Namespace:  ref.Namespace,
-		Name:       ref.Name,
-		APIVersion: ref.APIVersion,
-	}
-	return r.URIFromKReference(ctx, &dest, parent)
+	return "", errors.New("destination missing Ref, [apiVersion, kind, name] and URI, expected at least one")
 }
 
-// AddressableFromDestinationV1 resolves a v1.Destination into a duckv1.Addressable.
-func (r *URIResolver) AddressableFromDestinationV1(ctx context.Context, dest duckv1.Destination, parent interface{}) (*duckv1.Addressable, error) {
+// URIFromDestinationV1 resolves a v1.Destination into a URL.
+func (r *URIResolver) URIFromDestinationV1(ctx context.Context, dest duckv1.Destination, parent interface{}) (*apis.URL, error) {
 	if dest.Ref != nil {
-		addr, err := r.addressableFromDestinationRef(ctx, dest, parent)
+		url, err := r.URIFromKReference(ctx, dest.Ref, parent)
 		if err != nil {
 			return nil, err
 		}
@@ -151,60 +128,50 @@ func (r *URIResolver) AddressableFromDestinationV1(ctx context.Context, dest duc
 			if dest.URI.URL().IsAbs() {
 				return nil, errors.New("absolute URI is not allowed when Ref or [apiVersion, kind, name] exists")
 			}
-			addr.URL = addr.URL.ResolveReference(dest.URI)
-			return addr, nil
+			return url.ResolveReference(dest.URI), nil
 		}
-		return addr, nil
+		return url, nil
 	}
 
 	if dest.URI != nil {
 		// IsAbs check whether the URL has a non-empty scheme. Besides the non non-empty scheme, we also require dest.URI has a non-empty host
 		if !dest.URI.URL().IsAbs() || dest.URI.Host == "" {
-			return nil, fmt.Errorf("URI is not absolute (both scheme and host should be non-empty): %q", dest.URI.String())
+			return nil, fmt.Errorf("URI is not absolute(both scheme and host should be non-empty): %q", dest.URI.String())
 		}
-		return &duckv1.Addressable{
-			URL:     dest.URI,
-			CACerts: dest.CACerts,
-		}, nil
+		return dest.URI, nil
 	}
 
 	return nil, errors.New("destination missing Ref and URI, expected at least one")
 }
 
-func (r *URIResolver) addressableFromDestinationRef(ctx context.Context, dest duckv1.Destination, parent interface{}) (*duckv1.Addressable, error) {
-	if dest.Ref == nil {
-		return nil, apierrs.NewBadRequest("ref is nil")
-	}
+func (r *URIResolver) URIFromKReference(ctx context.Context, ref *duckv1.KReference, parent interface{}) (*apis.URL, error) {
+	return r.URIFromObjectReference(ctx, &corev1.ObjectReference{Name: ref.Name, Namespace: ref.Namespace, APIVersion: ref.APIVersion, Kind: ref.Kind}, parent)
+}
 
-	or := &corev1.ObjectReference{
-		Kind:       dest.Ref.Kind,
-		Namespace:  dest.Ref.Namespace,
-		Name:       dest.Ref.Name,
-		APIVersion: dest.Ref.APIVersion,
+// URIFromObjectReference resolves an ObjectReference to a URI string.
+func (r *URIResolver) URIFromObjectReference(ctx context.Context, ref *corev1.ObjectReference, parent interface{}) (*apis.URL, error) {
+	if ref == nil {
+		return nil, apierrs.NewBadRequest("ref is nil")
 	}
 
 	// try custom resolvers first
 	for _, resolver := range r.resolvers {
-		handled, url, err := resolver(ctx, or)
+		handled, url, err := resolver(ctx, ref)
 		if handled {
-			return &duckv1.Addressable{
-				Name:    dest.Ref.Address,
-				URL:     url,
-				CACerts: dest.CACerts,
-			}, err
+			return url, err
 		}
 
 		// when handled is false, both url and err are ignored.
 	}
 
-	gvr, _ := meta.UnsafeGuessKindToResource(or.GroupVersionKind())
+	gvr, _ := meta.UnsafeGuessKindToResource(ref.GroupVersionKind())
 	if err := r.tracker.TrackReference(tracker.Reference{
-		APIVersion: dest.Ref.APIVersion,
-		Kind:       dest.Ref.Kind,
-		Namespace:  dest.Ref.Namespace,
-		Name:       dest.Ref.Name,
+		APIVersion: ref.APIVersion,
+		Kind:       ref.Kind,
+		Namespace:  ref.Namespace,
+		Name:       ref.Name,
 	}, parent); err != nil {
-		return nil, fmt.Errorf("failed to track reference %s %s/%s: %w", gvr.String(), dest.Ref.Namespace, dest.Ref.Name, err)
+		return nil, fmt.Errorf("failed to track reference %s %s/%s: %w", gvr.String(), ref.Namespace, ref.Name, err)
 	}
 
 	lister, err := r.listerFactory(gvr)
@@ -212,80 +179,35 @@ func (r *URIResolver) addressableFromDestinationRef(ctx context.Context, dest du
 		return nil, fmt.Errorf("failed to get lister for %s: %w", gvr.String(), err)
 	}
 
-	obj, err := lister.ByNamespace(dest.Ref.Namespace).Get(dest.Ref.Name)
+	obj, err := lister.ByNamespace(ref.Namespace).Get(ref.Name)
 	if err != nil {
-		return nil, fmt.Errorf("failed to get object %s/%s: %w", dest.Ref.Namespace, dest.Ref.Name, err)
+		return nil, fmt.Errorf("failed to get object %s/%s: %w", ref.Namespace, ref.Name, err)
 	}
 
 	// K8s Services are special cased. They can be called, even though they do not satisfy the
 	// Callable interface.
-	if dest.Ref.APIVersion == "v1" && dest.Ref.Kind == "Service" {
+	if ref.APIVersion == "v1" && ref.Kind == "Service" {
 		url := &apis.URL{
 			Scheme: "http",
-			Host:   network.GetServiceHostname(dest.Ref.Name, dest.Ref.Namespace),
+			Host:   network.GetServiceHostname(ref.Name, ref.Namespace),
 			Path:   "",
 		}
-		if dest.CACerts != nil && *dest.CACerts != "" {
-			url.Scheme = "https"
-		}
-		return &duckv1.Addressable{
-			Name:    dest.Ref.Address,
-			URL:     url,
-			CACerts: dest.CACerts,
-		}, nil
+		return url, nil
 	}
 
 	addressable, ok := obj.(*duckv1.AddressableType)
 	if !ok {
-		return nil, apierrs.NewBadRequest(fmt.Sprintf("%s(%T) is not an AddressableType", dest.Ref, dest.Ref))
+		return nil, apierrs.NewBadRequest(fmt.Sprintf("%+v (%T) is not an AddressableType", ref, ref))
 	}
-
-	addr, err := r.selectAddress(dest, addressable)
-	if err != nil {
-		return nil, err
+	if addressable.Status.Address == nil {
+		return nil, apierrs.NewBadRequest(fmt.Sprintf("address not set for %+v", ref))
 	}
-	// Do not modify informer copy.
-	addr = addr.DeepCopy()
-
-	if addr.URL == nil {
-		return nil, apierrs.NewBadRequest(fmt.Sprintf("URL missing in address of %s", dest.Ref))
+	url := addressable.Status.Address.URL
+	if url == nil {
+		return nil, apierrs.NewBadRequest(fmt.Sprintf("URL missing in address of %+v", ref))
 	}
-	if addr.URL.Host == "" {
-		return nil, apierrs.NewBadRequest(fmt.Sprintf("hostname missing in address of %s", dest.Ref))
+	if url.Host == "" {
+		return nil, apierrs.NewBadRequest(fmt.Sprintf("hostname missing in address of %+v", ref))
 	}
-
-	if addr.CACerts == nil {
-		addr.CACerts = dest.CACerts
-	}
-
-	return addr, nil
-}
-
-// selectAddress selects a single address from the given AddressableType
-func (r *URIResolver) selectAddress(dest duckv1.Destination, addressable *duckv1.AddressableType) (*duckv1.Addressable, error) {
-	if len(addressable.Status.Addresses) == 0 && addressable.Status.Address == nil {
-		return nil, apierrs.NewBadRequest(fmt.Sprintf("address not set for %s", dest.Ref))
-	}
-
-	// if dest.ref.address is specified:
-	// - select the first (in order) address from status.addresses with name == dest.ref.address
-	// - If no address is found return an error explaining that the address with name dest.ref.address
-	//   cannot be found/resolved
-	if dest.Ref.Address != nil && *dest.Ref.Address != "" {
-		for _, addr := range addressable.Status.Addresses {
-			if addr.Name != nil && *addr.Name == *dest.Ref.Address {
-				return &addr, nil
-			}
-		}
-		return nil, apierrs.NewBadRequest(fmt.Sprintf("address with name %q not found for %s", *dest.Ref.Address, dest.Ref))
-	}
-
-	// if dest.ref.address is not specified:
-	// - select the first (in order) address from status.addresses
-	// - If no address is found in addresses use status.address
-	if len(addressable.Status.Addresses) > 0 {
-		return &addressable.Status.Addresses[0], nil
-	}
-
-	return addressable.Status.Address, nil
+	return url, nil
 }
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 906d5e116..02c220fd5 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -298,7 +298,7 @@ github.com/mailru/easyjson/jwriter
 ## explicit; go 1.15
 github.com/manifestival/client-go-client
 github.com/manifestival/client-go-client/pkg/dynamic
-# github.com/manifestival/manifestival v0.7.2
+# github.com/manifestival/manifestival v0.7.1
 ## explicit; go 1.15
 github.com/manifestival/manifestival
 github.com/manifestival/manifestival/fake
@@ -1313,7 +1313,7 @@ knative.dev/networking/pkg/http/probe
 knative.dev/networking/pkg/http/proxy
 knative.dev/networking/pkg/http/stats
 knative.dev/networking/pkg/k8s
-# knative.dev/pkg v0.0.0-20230420071539-300df436f953
+# knative.dev/pkg v0.0.0-20230418073056-dfad48eaa5d0
 ## explicit; go 1.18
 knative.dev/pkg/apiextensions/storageversion
 knative.dev/pkg/apiextensions/storageversion/cmd/migrate


Test patch:
diff --git a/pkg/reconciler/common/extensions_test.go b/pkg/reconciler/common/extensions_test.go
index d5d233963..6e78abdee 100644
--- a/pkg/reconciler/common/extensions_test.go
+++ b/pkg/reconciler/common/extensions_test.go
@@ -78,25 +78,22 @@ func TestExtensions(t *testing.T) {
 			if ext != nil {
 				transformers := ext.Transformers(nil)
 				if len(transformers) != test.length {
-					t.Errorf("Unexpected transformers length. Expected %d, got %d", test.length, len(transformers))
+					t.Error("Unexpected result")
 				}
-				if err := ext.Reconcile(context.TODO(), nil); err != nil {
-					t.Errorf("Extensions reconcile failed. error: %v", err)
+				if ext.Reconcile(context.TODO(), nil) != nil {
+					t.Error("Unexpected result")
 				}
 				if test.length == 1 {
 					manifests, err := test.platform.Manifests(nil)
 					if err != nil {
-						t.Errorf("Extensions manifests failed. error: %v", err)
-					}
-					if len(manifests) == 0 {
-						t.Fatal("manifests is empty")
+						t.Error("Unexpected result")
 					}
 					if err := Transform(context.TODO(), &manifests[0], &v1beta1.KnativeServing{}, transformers...); err != nil {
-						t.Errorf("Transform failed. error: %v", err)
+						t.Error("Unexpected result")
 					}
 					for _, r := range manifests[0].Resources() {
 						if r.GetNamespace() != string(ext.(TestExtension)) {
-							t.Logf("Expected namespace: %s, got: %s", string(ext.(TestExtension)), r.GetNamespace())
+							t.Error("Unexpected result")
 						}
 					}
 				}
diff --git a/pkg/reconciler/common/testdata/kodata/additional-manifests/additional-sa.yaml b/pkg/reconciler/common/testdata/kodata/additional-manifests/additional-sa.yaml
index 8dddd674a..ecf638968 100644
--- a/pkg/reconciler/common/testdata/kodata/additional-manifests/additional-sa.yaml
+++ b/pkg/reconciler/common/testdata/kodata/additional-manifests/additional-sa.yaml
@@ -1,5 +1,5 @@
 apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: eventing-controller
-  namespace: default
+  kind: ServiceAccount
+  metadata:
+    name: eventing-controller
+    namespace: default
diff --git a/test/e2e-tests.sh b/test/e2e-tests.sh
index 27d3ba301..b5123ad1c 100755
--- a/test/e2e-tests.sh
+++ b/test/e2e-tests.sh
@@ -29,9 +29,6 @@
 source $(dirname $0)/e2e-common.sh
 
 function knative_setup() {
-  if is_ingress_class istio; then
-    install_istio || fail_test "Istio installation failed"
-  fi
   create_namespace
   install_operator
 }