Repository: knative/client
Pull request #542 (2019-12-09 18:33:05)

feature(source cronjobs): Implementation of CronJobSource management
Contains create/delete/update/describe but not tests yet.

Still todo:

 * Think how to provide a namespace for the sink
 * Support for more sinks
 * Synchronous mode for create & update
 * Add list (or implement "source list")

googlebot: All (the pull request submitter and all commit authors) CLAs are signed, **but** one or more commits were authored or co-authored by someone other than the pull request submitter.

We need to confirm that all authors are ok with their commits being contributed to this project.  Please have them confirm that by leaving a comment that contains only `@googlebot I consent.` in this pull request.

*Note to project maintainer:* There may be cases where the author cannot leave a comment, or the comment is not properly detected as consent.  In those cases, you can manually confirm consent of the commit author(s), and set the `cla` label to `yes` (if enabled on your project).

ℹ️ **Googlers: [Go here](https://goto.google.com/prinfo/https%3A%2F%2Fgithub.com%2Fknative%2Fclient%2Fpull%2F542) for more info**.

<!-- need_author_consent -->
knative-prow-robot: [APPROVALNOTIFIER] This PR is **APPROVED**

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

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

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/client/blob/master/OWNERS)~~ [rhuss]

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":[]} -->
rhuss: Still todo: Adding tests.

This PR is based on #499 which should be merged first.
knative-prow-robot: @rhuss: The following test **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-integration-tests | 96b017d69086767146d62170aa1967eec8598dfe | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204106771556208640) | `/test pull-knative-client-integration-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-metrics-robot: The following is the coverage report on the affected files.
Say `/test pull-knative-client-go-coverage` to re-run this coverage report

File | Old Coverage | New Coverage | Delta
---- |:------------:|:------------:|:-----:
[pkg/eventing/sources/v1alpha1/client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204106771581374464/artifacts/line-cov.html#file0) | Do not exist | 62.5% | 

knative-prow-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-integration-tests | 96b017d69086767146d62170aa1967eec8598dfe | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204106771556208640) | `/test pull-knative-client-integration-tests`
pull-knative-client-integration-tests-latest-release | 96b017d69086767146d62170aa1967eec8598dfe | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204106771535237120) | `/test pull-knative-client-integration-tests-latest-release`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-integration-tests | 96b017d69086767146d62170aa1967eec8598dfe | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204106771556208640) | `/test pull-knative-client-integration-tests`
pull-knative-client-integration-tests-latest-release | 96b017d69086767146d62170aa1967eec8598dfe | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204106771535237120) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-unit-tests | 96b017d69086767146d62170aa1967eec8598dfe | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-unit-tests/1204106771585568768) | `/test pull-knative-client-unit-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-integration-tests | 96b017d69086767146d62170aa1967eec8598dfe | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204106771556208640) | `/test pull-knative-client-integration-tests`
pull-knative-client-integration-tests-latest-release | 96b017d69086767146d62170aa1967eec8598dfe | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204106771535237120) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-unit-tests | 96b017d69086767146d62170aa1967eec8598dfe | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-unit-tests/1204106771585568768) | `/test pull-knative-client-unit-tests`
pull-knative-client-build-tests | 96b017d69086767146d62170aa1967eec8598dfe | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204106771539431424) | `/test pull-knative-client-build-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-integration-tests-latest-release | 96b017d69086767146d62170aa1967eec8598dfe | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204106771535237120) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-unit-tests | 96b017d69086767146d62170aa1967eec8598dfe | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-unit-tests/1204106771585568768) | `/test pull-knative-client-unit-tests`
pull-knative-client-build-tests | 96b017d69086767146d62170aa1967eec8598dfe | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204106771539431424) | `/test pull-knative-client-build-tests`
pull-knative-client-integration-tests | a6f2bb12164726f5602085febd333556c7530179 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204110798654279681) | `/test pull-knative-client-integration-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-unit-tests | 96b017d69086767146d62170aa1967eec8598dfe | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-unit-tests/1204106771585568768) | `/test pull-knative-client-unit-tests`
pull-knative-client-build-tests | 96b017d69086767146d62170aa1967eec8598dfe | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204106771539431424) | `/test pull-knative-client-build-tests`
pull-knative-client-integration-tests | a6f2bb12164726f5602085febd333556c7530179 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204110798654279681) | `/test pull-knative-client-integration-tests`
pull-knative-client-integration-tests-latest-release | a6f2bb12164726f5602085febd333556c7530179 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204110798658473984) | `/test pull-knative-client-integration-tests-latest-release`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-metrics-robot: The following is the coverage report on the affected files.
Say `/test pull-knative-client-go-coverage` to re-run this coverage report

File | Old Coverage | New Coverage | Delta
---- |:------------:|:------------:|:-----:
[pkg/eventing/sources/v1alpha1/client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204110798658473985/artifacts/line-cov.html#file0) | Do not exist | 62.5% | 

knative-prow-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-build-tests | 96b017d69086767146d62170aa1967eec8598dfe | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204106771539431424) | `/test pull-knative-client-build-tests`
pull-knative-client-integration-tests | a6f2bb12164726f5602085febd333556c7530179 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204110798654279681) | `/test pull-knative-client-integration-tests`
pull-knative-client-integration-tests-latest-release | a6f2bb12164726f5602085febd333556c7530179 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204110798658473984) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-unit-tests | a6f2bb12164726f5602085febd333556c7530179 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-unit-tests/1204110798654279680) | `/test pull-knative-client-unit-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-integration-tests | a6f2bb12164726f5602085febd333556c7530179 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204110798654279681) | `/test pull-knative-client-integration-tests`
pull-knative-client-integration-tests-latest-release | a6f2bb12164726f5602085febd333556c7530179 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204110798658473984) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-unit-tests | a6f2bb12164726f5602085febd333556c7530179 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-unit-tests/1204110798654279680) | `/test pull-knative-client-unit-tests`
pull-knative-client-build-tests | a6f2bb12164726f5602085febd333556c7530179 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204110798654279682) | `/test pull-knative-client-build-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-metrics-robot: The following is the coverage report on the affected files.
Say `/test pull-knative-client-go-coverage` to re-run this coverage report

File | Old Coverage | New Coverage | Delta
---- |:------------:|:------------:|:-----:
[pkg/eventing/sources/v1alpha1/client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204319054475563008/artifacts/line-cov.html#file0) | Do not exist | 62.5% | 
[pkg/kn/commands/source/apiserver/apiserver.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204319054475563008/artifacts/line-cov.html#file1) | Do not exist | 100.0% | 
[pkg/kn/commands/source/apiserver/create.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204319054475563008/artifacts/line-cov.html#file2) | Do not exist | 81.2% | 
[pkg/kn/commands/source/apiserver/create_flag.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204319054475563008/artifacts/line-cov.html#file3) | Do not exist | 95.2% | 
[pkg/kn/commands/source/apiserver/delete.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204319054475563008/artifacts/line-cov.html#file4) | Do not exist | 76.5% | 
[pkg/kn/commands/testing_helper.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204319054475563008/artifacts/line-cov.html#file5) | 58.3% | 58.8% | 0.5
[pkg/kn/core/root.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204319054475563008/artifacts/line-cov.html#file6) | 60.4% | 60.8% | 0.4

knative-prow-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-integration-tests-latest-release | a6f2bb12164726f5602085febd333556c7530179 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204110798658473984) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-integration-tests | 6b517f89206664949c2dc968e943ad73c0c84667 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204319054475563009) | `/test pull-knative-client-integration-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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 -->
googlebot: CLAs look good, thanks!

ℹ️ **Googlers: [Go here](https://goto.google.com/prinfo/https%3A%2F%2Fgithub.com%2Fknative%2Fclient%2Fpull%2F542) for more info**.

<!-- ok -->
knative-prow-robot: @rhuss: The following test **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-build-tests | a71d4f56c3197fd5d2201f34cf6fa7e27e9e43bd | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204418717077737472) | `/test pull-knative-client-build-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-build-tests | a71d4f56c3197fd5d2201f34cf6fa7e27e9e43bd | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204418717077737472) | `/test pull-knative-client-build-tests`
pull-knative-client-integration-tests-latest-release | a71d4f56c3197fd5d2201f34cf6fa7e27e9e43bd | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204418717081931776) | `/test pull-knative-client-integration-tests-latest-release`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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 -->
daisy-ycguo: @rhuss Here is a short discussion about sdk: https://github.com/knative/client/issues/375. I would strongly suggest that we put all server (serving+eventing) side functions together in a separated folder of command lines.

For end users, it will be very hard for them to use Knative API directly. Knative needs a sdk-go for end users to manage the server side objects, using simple type parameters, not complicated K8s type of objects. In the future, when community decide to have a knative sdk-go, Knative Client could easily separate the server side methods and the command lines, and easily create the basic version of knative sdk-go.
rhuss: > For end users, it will be very hard for them to use Knative API directly because of the complex K8s CRD types. Knative needs a sdk-go for end-users to manage the server-side objects, using simple type parameters, not complicated K8s types. In the future, when community decide to have a knative sdk-go, Knative Client could easily separate the server side methods and the command lines, and easily create the basic version of knative sdk-go.

Even our API are using "complex CRD types", actually the same as the Knative client SDKs. The benefit of a client-side SDK is not so much hiding the Knative types (there are already a simplification over the standard K8s CRs), but to provide extra, client-related features like:

* CRD version alignment to also work with older clusters (still to implement, currently we send v1alpha1 objects to server but we could adapt this depending on the cluster's version).
* Some syntactic sugar, like creating the client for a specific namespace or some easy way to provide list options.

So not really much (except maybe the version negotiation to come which is probably quite helpful for supporting multiple cluster versions), but I'm not sure if this is what you have in mind. How would a `kn` based Go library much simpler to use than the generated sdk libraries from knative-serving and knative-eventing that kn is using internally? Do you have an example in mind? If you mean to translate all CRDs field to method arguments, I would be strongly against this. Nobody wants methods with 20+ arguments. Maybe we could help with a kind of builder patterns, but at the end, complexity just does not go simply away.
googlebot: All (the pull request submitter and all commit authors) CLAs are signed, **but** one or more commits were authored or co-authored by someone other than the pull request submitter.

We need to confirm that all authors are ok with their commits being contributed to this project.  Please have them confirm that by leaving a comment that contains only `@googlebot I consent.` in this pull request.

*Note to project maintainer:* There may be cases where the author cannot leave a comment, or the comment is not properly detected as consent.  In those cases, you can manually confirm consent of the commit author(s), and set the `cla` label to `yes` (if enabled on your project).

ℹ️ **Googlers: [Go here](https://goto.google.com/prinfo/https%3A%2F%2Fgithub.com%2Fknative%2Fclient%2Fpull%2F542) for more info**.

<!-- need_author_consent -->
knative-prow-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-integration-tests-latest-release | a71d4f56c3197fd5d2201f34cf6fa7e27e9e43bd | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204418717081931776) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-build-tests | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204808928798445569) | `/test pull-knative-client-build-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-build-tests | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204808928798445569) | `/test pull-knative-client-build-tests`
pull-knative-client-integration-tests-latest-release | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204808928794251264) | `/test pull-knative-client-integration-tests-latest-release`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-build-tests | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204808928798445569) | `/test pull-knative-client-build-tests`
pull-knative-client-integration-tests-latest-release | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204808928794251264) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-integration-tests | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204808928798445568) | `/test pull-knative-client-integration-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-build-tests | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204808928798445569) | `/test pull-knative-client-build-tests`
pull-knative-client-integration-tests-latest-release | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204808928794251264) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-integration-tests | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204808928798445568) | `/test pull-knative-client-integration-tests`
pull-knative-client-unit-tests | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-unit-tests/1204808928798445570) | `/test pull-knative-client-unit-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-build-tests | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204808928798445569) | `/test pull-knative-client-build-tests`
pull-knative-client-integration-tests-latest-release | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204808928794251264) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-integration-tests | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204808928798445568) | `/test pull-knative-client-integration-tests`
pull-knative-client-unit-tests | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-unit-tests/1204808928798445570) | `/test pull-knative-client-unit-tests`
pull-knative-client-go-coverage | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204808928794251265) | `/test pull-knative-client-go-coverage`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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 -->
googlebot: CLAs look good, thanks!

ℹ️ **Googlers: [Go here](https://goto.google.com/prinfo/https%3A%2F%2Fgithub.com%2Fknative%2Fclient%2Fpull%2F542) for more info**.

<!-- ok -->
knative-prow-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-build-tests | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204808928798445569) | `/test pull-knative-client-build-tests`
pull-knative-client-integration-tests-latest-release | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204808928794251264) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-integration-tests | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204808928798445568) | `/test pull-knative-client-integration-tests`
pull-knative-client-go-coverage | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204808928794251265) | `/test pull-knative-client-go-coverage`
pull-knative-client-unit-tests | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-unit-tests/1204820882728423424) | `/test pull-knative-client-unit-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-build-tests | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204808928798445569) | `/test pull-knative-client-build-tests`
pull-knative-client-integration-tests-latest-release | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204808928794251264) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-go-coverage | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204808928794251265) | `/test pull-knative-client-go-coverage`
pull-knative-client-unit-tests | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-unit-tests/1204820882728423424) | `/test pull-knative-client-unit-tests`
pull-knative-client-integration-tests | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204820882728423425) | `/test pull-knative-client-integration-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-build-tests | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204808928798445569) | `/test pull-knative-client-build-tests`
pull-knative-client-go-coverage | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204808928794251265) | `/test pull-knative-client-go-coverage`
pull-knative-client-unit-tests | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-unit-tests/1204820882728423424) | `/test pull-knative-client-unit-tests`
pull-knative-client-integration-tests | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204820882728423425) | `/test pull-knative-client-integration-tests`
pull-knative-client-integration-tests-latest-release | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204820882732617728) | `/test pull-knative-client-integration-tests-latest-release`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-build-tests | a0397bf63935fd9987214e3a4383788e7e2b4be3 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204808928798445569) | `/test pull-knative-client-build-tests`
pull-knative-client-unit-tests | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-unit-tests/1204820882728423424) | `/test pull-knative-client-unit-tests`
pull-knative-client-integration-tests | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204820882728423425) | `/test pull-knative-client-integration-tests`
pull-knative-client-integration-tests-latest-release | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204820882732617728) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-go-coverage | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204820882732617729) | `/test pull-knative-client-go-coverage`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-unit-tests | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-unit-tests/1204820882728423424) | `/test pull-knative-client-unit-tests`
pull-knative-client-integration-tests | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204820882728423425) | `/test pull-knative-client-integration-tests`
pull-knative-client-integration-tests-latest-release | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204820882732617728) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-go-coverage | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204820882732617729) | `/test pull-knative-client-go-coverage`
pull-knative-client-build-tests | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204820882732617730) | `/test pull-knative-client-build-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-unit-tests | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-unit-tests/1204820882728423424) | `/test pull-knative-client-unit-tests`
pull-knative-client-integration-tests | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204820882728423425) | `/test pull-knative-client-integration-tests`
pull-knative-client-integration-tests-latest-release | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204820882732617728) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-go-coverage | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204820882732617729) | `/test pull-knative-client-go-coverage`
pull-knative-client-build-tests | f2ff609153a7ecb0ef1182353050dc2628f0969e | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204825418067087360) | `/test pull-knative-client-build-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-metrics-robot: The following is the coverage report on the affected files.
Say `/test pull-knative-client-go-coverage` to re-run this coverage report

File | Old Coverage | New Coverage | Delta
---- |:------------:|:------------:|:-----:
[pkg/eventing/sources/v1alpha1/apiserver_client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204825418071281665/artifacts/line-cov.html#file0) | Do not exist | 62.5% | 
[pkg/eventing/sources/v1alpha1/client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204825418071281665/artifacts/line-cov.html#file1) | 62.5% | 66.7% | 4.2
[pkg/eventing/sources/v1alpha1/cronjob_client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204825418071281665/artifacts/line-cov.html#file2) | Do not exist | 0.0% | 
[pkg/kn/commands/source/cronjob/create.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204825418071281665/artifacts/line-cov.html#file6) | Do not exist | 84.0% | 
[pkg/kn/commands/source/cronjob/cronjob.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204825418071281665/artifacts/line-cov.html#file7) | Do not exist | 57.1% | 
[pkg/kn/commands/source/cronjob/delete.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204825418071281665/artifacts/line-cov.html#file8) | Do not exist | 21.4% | 
[pkg/kn/commands/source/cronjob/describe.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204825418071281665/artifacts/line-cov.html#file9) | Do not exist | 11.6% | 
[pkg/kn/commands/source/cronjob/flags.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204825418071281665/artifacts/line-cov.html#file10) | Do not exist | 100.0% | 
[pkg/kn/commands/source/cronjob/update.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204825418071281665/artifacts/line-cov.html#file11) | Do not exist | 30.4% | 

knative-prow-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-integration-tests | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204820882728423425) | `/test pull-knative-client-integration-tests`
pull-knative-client-integration-tests-latest-release | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204820882732617728) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-build-tests | f2ff609153a7ecb0ef1182353050dc2628f0969e | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204825418067087360) | `/test pull-knative-client-build-tests`
pull-knative-client-go-coverage | f2ff609153a7ecb0ef1182353050dc2628f0969e | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204825418071281665) | `/test pull-knative-client-go-coverage`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-integration-tests | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204820882728423425) | `/test pull-knative-client-integration-tests`
pull-knative-client-integration-tests-latest-release | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204820882732617728) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-go-coverage | f2ff609153a7ecb0ef1182353050dc2628f0969e | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204825418071281665) | `/test pull-knative-client-go-coverage`
pull-knative-client-build-tests | fea1da29273345a0bea294c6a78926d6c157d456 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204829187060273153) | `/test pull-knative-client-build-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-metrics-robot: The following is the coverage report on the affected files.
Say `/test pull-knative-client-go-coverage` to re-run this coverage report

File | Old Coverage | New Coverage | Delta
---- |:------------:|:------------:|:-----:
[pkg/eventing/sources/v1alpha1/apiserver_client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204829187056078850/artifacts/line-cov.html#file0) | Do not exist | 62.5% | 
[pkg/eventing/sources/v1alpha1/client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204829187056078850/artifacts/line-cov.html#file1) | 62.5% | 66.7% | 4.2
[pkg/eventing/sources/v1alpha1/cronjob_client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204829187056078850/artifacts/line-cov.html#file2) | Do not exist | 0.0% | 
[pkg/kn/commands/source/cronjob/create.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204829187056078850/artifacts/line-cov.html#file6) | Do not exist | 84.0% | 
[pkg/kn/commands/source/cronjob/cronjob.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204829187056078850/artifacts/line-cov.html#file7) | Do not exist | 57.1% | 
[pkg/kn/commands/source/cronjob/delete.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204829187056078850/artifacts/line-cov.html#file8) | Do not exist | 21.4% | 
[pkg/kn/commands/source/cronjob/describe.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204829187056078850/artifacts/line-cov.html#file9) | Do not exist | 11.6% | 
[pkg/kn/commands/source/cronjob/flags.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204829187056078850/artifacts/line-cov.html#file10) | Do not exist | 100.0% | 
[pkg/kn/commands/source/cronjob/update.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204829187056078850/artifacts/line-cov.html#file11) | Do not exist | 30.4% | 

knative-prow-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-integration-tests | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204820882728423425) | `/test pull-knative-client-integration-tests`
pull-knative-client-integration-tests-latest-release | 92843992ed7740dae9dffc50557db8a6fe8fb4bc | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1204820882732617728) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-build-tests | fea1da29273345a0bea294c6a78926d6c157d456 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204829187060273153) | `/test pull-knative-client-build-tests`
pull-knative-client-go-coverage | fea1da29273345a0bea294c6a78926d6c157d456 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204829187056078850) | `/test pull-knative-client-go-coverage`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-metrics-robot: The following is the coverage report on the affected files.
Say `/test pull-knative-client-go-coverage` to re-run this coverage report

File | Old Coverage | New Coverage | Delta
---- |:------------:|:------------:|:-----:
[pkg/eventing/sources/v1alpha1/apiserver_client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204850203383828480/artifacts/line-cov.html#file0) | Do not exist | 62.5% | 
[pkg/eventing/sources/v1alpha1/client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204850203383828480/artifacts/line-cov.html#file1) | 62.5% | 66.7% | 4.2
[pkg/eventing/sources/v1alpha1/cronjob_client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204850203383828480/artifacts/line-cov.html#file2) | Do not exist | 0.0% | 
[pkg/eventing/sources/v1alpha1/cronjob_client_mock.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204850203383828480/artifacts/line-cov.html#file3) | Do not exist | 89.5% | 
[pkg/kn/commands/source/cronjob/create.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204850203383828480/artifacts/line-cov.html#file6) | Do not exist | 84.0% | 
[pkg/kn/commands/source/cronjob/cronjob.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204850203383828480/artifacts/line-cov.html#file7) | Do not exist | 57.1% | 
[pkg/kn/commands/source/cronjob/delete.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204850203383828480/artifacts/line-cov.html#file8) | Do not exist | 21.4% | 
[pkg/kn/commands/source/cronjob/describe.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204850203383828480/artifacts/line-cov.html#file9) | Do not exist | 11.6% | 
[pkg/kn/commands/source/cronjob/flags.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204850203383828480/artifacts/line-cov.html#file10) | Do not exist | 100.0% | 
[pkg/kn/commands/source/cronjob/update.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204850203383828480/artifacts/line-cov.html#file11) | Do not exist | 30.4% | 

knative-prow-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-build-tests | fea1da29273345a0bea294c6a78926d6c157d456 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204829187060273153) | `/test pull-knative-client-build-tests`
pull-knative-client-go-coverage | 7e416d07aeb1e6b51386f40492e455a23c5d6010 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204850203383828480) | `/test pull-knative-client-go-coverage`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-go-coverage | 7e416d07aeb1e6b51386f40492e455a23c5d6010 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204850203383828480) | `/test pull-knative-client-go-coverage`
pull-knative-client-build-tests | 7e416d07aeb1e6b51386f40492e455a23c5d6010 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204850203367051264) | `/test pull-knative-client-build-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-go-coverage | 7e416d07aeb1e6b51386f40492e455a23c5d6010 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204850203383828480) | `/test pull-knative-client-go-coverage`
pull-knative-client-build-tests | 7e416d07aeb1e6b51386f40492e455a23c5d6010 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204850203367051264) | `/test pull-knative-client-build-tests`
pull-knative-client-integration-tests | 7e416d07aeb1e6b51386f40492e455a23c5d6010 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204850203362856960) | `/test pull-knative-client-integration-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-metrics-robot: The following is the coverage report on the affected files.
Say `/test pull-knative-client-go-coverage` to re-run this coverage report

File | Old Coverage | New Coverage | Delta
---- |:------------:|:------------:|:-----:
[pkg/eventing/sources/v1alpha1/apiserver_client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204854983627902977/artifacts/line-cov.html#file0) | Do not exist | 62.5% | 
[pkg/eventing/sources/v1alpha1/client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204854983627902977/artifacts/line-cov.html#file1) | 62.5% | 66.7% | 4.2
[pkg/eventing/sources/v1alpha1/cronjob_client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204854983627902977/artifacts/line-cov.html#file2) | Do not exist | 0.0% | 
[pkg/eventing/sources/v1alpha1/cronjob_client_mock.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204854983627902977/artifacts/line-cov.html#file3) | Do not exist | 89.5% | 
[pkg/kn/commands/source/cronjob/create.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204854983627902977/artifacts/line-cov.html#file6) | Do not exist | 84.0% | 
[pkg/kn/commands/source/cronjob/cronjob.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204854983627902977/artifacts/line-cov.html#file7) | Do not exist | 57.1% | 
[pkg/kn/commands/source/cronjob/delete.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204854983627902977/artifacts/line-cov.html#file8) | Do not exist | 21.4% | 
[pkg/kn/commands/source/cronjob/describe.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204854983627902977/artifacts/line-cov.html#file9) | Do not exist | 11.6% | 
[pkg/kn/commands/source/cronjob/flags.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204854983627902977/artifacts/line-cov.html#file10) | Do not exist | 100.0% | 
[pkg/kn/commands/source/cronjob/update.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204854983627902977/artifacts/line-cov.html#file11) | Do not exist | 30.4% | 

knative-prow-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-build-tests | 7e416d07aeb1e6b51386f40492e455a23c5d6010 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204850203367051264) | `/test pull-knative-client-build-tests`
pull-knative-client-integration-tests | 7e416d07aeb1e6b51386f40492e455a23c5d6010 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204850203362856960) | `/test pull-knative-client-integration-tests`
pull-knative-client-go-coverage | 361c99c460024fa1598708645d63d0be6dd8a60a | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204854983627902977) | `/test pull-knative-client-go-coverage`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-integration-tests | 7e416d07aeb1e6b51386f40492e455a23c5d6010 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests/1204850203362856960) | `/test pull-knative-client-integration-tests`
pull-knative-client-go-coverage | 361c99c460024fa1598708645d63d0be6dd8a60a | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204854983627902977) | `/test pull-knative-client-go-coverage`
pull-knative-client-build-tests | 361c99c460024fa1598708645d63d0be6dd8a60a | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204854983632097282) | `/test pull-knative-client-build-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-metrics-robot: The following is the coverage report on the affected files.
Say `/test pull-knative-client-go-coverage` to re-run this coverage report

File | Old Coverage | New Coverage | Delta
---- |:------------:|:------------:|:-----:
[pkg/eventing/sources/v1alpha1/apiserver_client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204867694445203457/artifacts/line-cov.html#file0) | Do not exist | 62.5% | 
[pkg/eventing/sources/v1alpha1/client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204867694445203457/artifacts/line-cov.html#file1) | 62.5% | 66.7% | 4.2
[pkg/eventing/sources/v1alpha1/cronjob_client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204867694445203457/artifacts/line-cov.html#file2) | Do not exist | 0.0% | 
[pkg/eventing/sources/v1alpha1/cronjob_client_mock.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204867694445203457/artifacts/line-cov.html#file3) | Do not exist | 89.5% | 
[pkg/kn/commands/source/cronjob/create.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204867694445203457/artifacts/line-cov.html#file6) | Do not exist | 84.0% | 
[pkg/kn/commands/source/cronjob/cronjob.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204867694445203457/artifacts/line-cov.html#file7) | Do not exist | 57.1% | 
[pkg/kn/commands/source/cronjob/delete.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204867694445203457/artifacts/line-cov.html#file8) | Do not exist | 21.4% | 
[pkg/kn/commands/source/cronjob/describe.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204867694445203457/artifacts/line-cov.html#file9) | Do not exist | 11.6% | 
[pkg/kn/commands/source/cronjob/flags.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204867694445203457/artifacts/line-cov.html#file10) | Do not exist | 100.0% | 
[pkg/kn/commands/source/cronjob/update.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204867694445203457/artifacts/line-cov.html#file11) | Do not exist | 30.4% | 

knative-prow-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-build-tests | 361c99c460024fa1598708645d63d0be6dd8a60a | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204854983632097282) | `/test pull-knative-client-build-tests`
pull-knative-client-go-coverage | 435d9fd4fad589d9e8dd8c0e06a44c2be2549e30 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204867694445203457) | `/test pull-knative-client-go-coverage`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-go-coverage | 435d9fd4fad589d9e8dd8c0e06a44c2be2549e30 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1204867694445203457) | `/test pull-knative-client-go-coverage`
pull-knative-client-build-tests | 435d9fd4fad589d9e8dd8c0e06a44c2be2549e30 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204867694449397760) | `/test pull-knative-client-build-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-metrics-robot: The following is the coverage report on the affected files.
Say `/test pull-knative-client-go-coverage` to re-run this coverage report

File | Old Coverage | New Coverage | Delta
---- |:------------:|:------------:|:-----:
[pkg/eventing/sources/v1alpha1/apiserver_client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205117616847327234/artifacts/line-cov.html#file0) | Do not exist | 62.5% | 
[pkg/eventing/sources/v1alpha1/client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205117616847327234/artifacts/line-cov.html#file1) | 62.5% | 66.7% | 4.2
[pkg/eventing/sources/v1alpha1/cronjob_client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205117616847327234/artifacts/line-cov.html#file2) | Do not exist | 0.0% | 
[pkg/eventing/sources/v1alpha1/cronjob_client_mock.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205117616847327234/artifacts/line-cov.html#file3) | Do not exist | 89.5% | 
[pkg/kn/commands/source/cronjob/create.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205117616847327234/artifacts/line-cov.html#file6) | Do not exist | 92.0% | 
[pkg/kn/commands/source/cronjob/cronjob.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205117616847327234/artifacts/line-cov.html#file7) | Do not exist | 57.1% | 
[pkg/kn/commands/source/cronjob/delete.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205117616847327234/artifacts/line-cov.html#file8) | Do not exist | 85.7% | 
[pkg/kn/commands/source/cronjob/describe.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205117616847327234/artifacts/line-cov.html#file9) | Do not exist | 83.7% | 
[pkg/kn/commands/source/cronjob/flags.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205117616847327234/artifacts/line-cov.html#file10) | Do not exist | 100.0% | 
[pkg/kn/commands/source/cronjob/update.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205117616847327234/artifacts/line-cov.html#file11) | Do not exist | 75.8% | 

knative-prow-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-build-tests | 435d9fd4fad589d9e8dd8c0e06a44c2be2549e30 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1204867694449397760) | `/test pull-knative-client-build-tests`
pull-knative-client-go-coverage | 69f443d4aa6c32bc5605bab9739aae61d8b6184d | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205117616847327234) | `/test pull-knative-client-go-coverage`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-go-coverage | 69f443d4aa6c32bc5605bab9739aae61d8b6184d | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205117616847327234) | `/test pull-knative-client-go-coverage`
pull-knative-client-build-tests | 69f443d4aa6c32bc5605bab9739aae61d8b6184d | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1205117616843132928) | `/test pull-knative-client-build-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-go-coverage | 69f443d4aa6c32bc5605bab9739aae61d8b6184d | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205117616847327234) | `/test pull-knative-client-go-coverage`
pull-knative-client-build-tests | 69f443d4aa6c32bc5605bab9739aae61d8b6184d | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1205117616843132928) | `/test pull-knative-client-build-tests`
pull-knative-client-integration-tests-latest-release | 69f443d4aa6c32bc5605bab9739aae61d8b6184d | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1205117616843132929) | `/test pull-knative-client-integration-tests-latest-release`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-metrics-robot: The following is the coverage report on the affected files.
Say `/test pull-knative-client-go-coverage` to re-run this coverage report

File | Old Coverage | New Coverage | Delta
---- |:------------:|:------------:|:-----:
[pkg/eventing/sources/v1alpha1/apiserver_client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205141651689836545/artifacts/line-cov.html#file0) | Do not exist | 62.5% | 
[pkg/eventing/sources/v1alpha1/client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205141651689836545/artifacts/line-cov.html#file1) | 62.5% | 66.7% | 4.2
[pkg/eventing/sources/v1alpha1/cronjob_client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205141651689836545/artifacts/line-cov.html#file2) | Do not exist | 0.0% | 
[pkg/eventing/sources/v1alpha1/cronjob_client_mock.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205141651689836545/artifacts/line-cov.html#file3) | Do not exist | 89.5% | 
[pkg/kn/commands/source/cronjob/create.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205141651689836545/artifacts/line-cov.html#file6) | Do not exist | 92.0% | 
[pkg/kn/commands/source/cronjob/cronjob.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205141651689836545/artifacts/line-cov.html#file7) | Do not exist | 57.1% | 
[pkg/kn/commands/source/cronjob/delete.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205141651689836545/artifacts/line-cov.html#file8) | Do not exist | 85.7% | 
[pkg/kn/commands/source/cronjob/describe.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205141651689836545/artifacts/line-cov.html#file9) | Do not exist | 83.7% | 
[pkg/kn/commands/source/cronjob/flags.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205141651689836545/artifacts/line-cov.html#file10) | Do not exist | 100.0% | 
[pkg/kn/commands/source/cronjob/update.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205141651689836545/artifacts/line-cov.html#file11) | Do not exist | 75.8% | 

knative-prow-robot: @rhuss: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-client-build-tests | 69f443d4aa6c32bc5605bab9739aae61d8b6184d | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-build-tests/1205117616843132928) | `/test pull-knative-client-build-tests`
pull-knative-client-integration-tests-latest-release | 69f443d4aa6c32bc5605bab9739aae61d8b6184d | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-integration-tests-latest-release/1205117616843132929) | `/test pull-knative-client-integration-tests-latest-release`
pull-knative-client-go-coverage | 3d449df05846b44893e91120b0a34f33482c10f1 | [link](https://prow.knative.dev/view/gcs/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205141651689836545) | `/test pull-knative-client-go-coverage`

[Full PR test history](https://gubernator.knative.dev/pr/knative_client/542). [Your PR dashboard](https://gubernator.knative.dev/pr/rhuss).

<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-metrics-robot: The following is the coverage report on the affected files.
Say `/test pull-knative-client-go-coverage` to re-run this coverage report

File | Old Coverage | New Coverage | Delta
---- |:------------:|:------------:|:-----:
[pkg/eventing/sources/v1alpha1/apiserver_client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205171225811226626/artifacts/line-cov.html#file0) | Do not exist | 62.5% | 
[pkg/eventing/sources/v1alpha1/client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205171225811226626/artifacts/line-cov.html#file1) | 62.5% | 100.0% | 37.5
[pkg/eventing/sources/v1alpha1/cronjob_client.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205171225811226626/artifacts/line-cov.html#file2) | Do not exist | 100.0% | 
[pkg/eventing/sources/v1alpha1/cronjob_client_mock.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205171225811226626/artifacts/line-cov.html#file3) | Do not exist | 89.5% | 
[pkg/kn/commands/source/cronjob/create.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205171225811226626/artifacts/line-cov.html#file6) | Do not exist | 92.0% | 
[pkg/kn/commands/source/cronjob/cronjob.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205171225811226626/artifacts/line-cov.html#file7) | Do not exist | 57.1% | 
[pkg/kn/commands/source/cronjob/delete.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205171225811226626/artifacts/line-cov.html#file8) | Do not exist | 85.7% | 
[pkg/kn/commands/source/cronjob/describe.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205171225811226626/artifacts/line-cov.html#file9) | Do not exist | 83.7% | 
[pkg/kn/commands/source/cronjob/flags.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205171225811226626/artifacts/line-cov.html#file10) | Do not exist | 100.0% | 
[pkg/kn/commands/source/cronjob/update.go](https://storage.cloud.google.com/knative-prow/pr-logs/pull/knative_client/542/pull-knative-client-go-coverage/1205171225811226626/artifacts/line-cov.html#file11) | Do not exist | 75.8% | 


Patch:
diff --git a/docs/cmd/kn.md b/docs/cmd/kn.md
index 47ff5bd7..b52df1ab 100644
--- a/docs/cmd/kn.md
+++ b/docs/cmd/kn.md
@@ -27,6 +27,6 @@ Manage your Knative building blocks:
 * [kn revision](kn_revision.md)	 - Revision command group
 * [kn route](kn_route.md)	 - Route command group
 * [kn service](kn_service.md)	 - Service command group
-* [kn source](kn_source.md)	 - Event Source command group
+* [kn source](kn_source.md)	 - Event source command group
 * [kn version](kn_version.md)	 - Prints the client version
 
diff --git a/docs/cmd/kn_source.md b/docs/cmd/kn_source.md
index 7386e2f8..559c9720 100644
--- a/docs/cmd/kn_source.md
+++ b/docs/cmd/kn_source.md
@@ -1,10 +1,10 @@
 ## kn source
 
-Event Source command group
+Event source command group
 
 ### Synopsis
 
-Event Source command group
+Event source command group
 
 ```
 kn source [flags]
@@ -28,5 +28,6 @@ kn source [flags]
 
 * [kn](kn.md)	 - Knative client
 * [kn source apiserver](kn_source_apiserver.md)	 - Kubernetes API Server Event Source command group
+* [kn source cronjob](kn_source_cronjob.md)	 - CronJob source command group
 * [kn source list-types](kn_source_list-types.md)	 - List available source types
 
diff --git a/docs/cmd/kn_source_apiserver.md b/docs/cmd/kn_source_apiserver.md
index 8755556b..0b9de677 100644
--- a/docs/cmd/kn_source_apiserver.md
+++ b/docs/cmd/kn_source_apiserver.md
@@ -26,7 +26,7 @@ kn source apiserver [flags]
 
 ### SEE ALSO
 
-* [kn source](kn_source.md)	 - Event Source command group
+* [kn source](kn_source.md)	 - Event source command group
 * [kn source apiserver create](kn_source_apiserver_create.md)	 - Create an ApiServerSource, which watches for Kubernetes events and forwards them to a sink
 * [kn source apiserver delete](kn_source_apiserver_delete.md)	 - Delete an ApiServerSource.
 
diff --git a/docs/cmd/kn_source_cronjob.md b/docs/cmd/kn_source_cronjob.md
new file mode 100644
index 00000000..db6d84f8
--- /dev/null
+++ b/docs/cmd/kn_source_cronjob.md
@@ -0,0 +1,34 @@
+## kn source cronjob
+
+CronJob source command group
+
+### Synopsis
+
+CronJob source command group
+
+```
+kn source cronjob [flags]
+```
+
+### Options
+
+```
+  -h, --help   help for cronjob
+```
+
+### Options inherited from parent commands
+
+```
+      --config string       kn config file (default is $HOME/.kn/config.yaml)
+      --kubeconfig string   kubectl config file (default is $HOME/.kube/config)
+      --log-http            log http traffic
+```
+
+### SEE ALSO
+
+* [kn source](kn_source.md)	 - Event source command group
+* [kn source cronjob create](kn_source_cronjob_create.md)	 - Create a CronJob source.
+* [kn source cronjob delete](kn_source_cronjob_delete.md)	 - Delete a CronJob source.
+* [kn source cronjob describe](kn_source_cronjob_describe.md)	 - Describe a CronJob source.
+* [kn source cronjob update](kn_source_cronjob_update.md)	 - Update a CronJob source.
+
diff --git a/docs/cmd/kn_source_cronjob_create.md b/docs/cmd/kn_source_cronjob_create.md
new file mode 100644
index 00000000..84711679
--- /dev/null
+++ b/docs/cmd/kn_source_cronjob_create.md
@@ -0,0 +1,42 @@
+## kn source cronjob create
+
+Create a CronJob source.
+
+### Synopsis
+
+Create a CronJob source.
+
+```
+kn source cronjob create NAME --schedule SCHEDULE --sink SINK --data DATA [flags]
+```
+
+### Examples
+
+```
+
+  # Create a crontab scheduler 'my-cron-trigger' which fires every minute and sends 'ping' to service 'mysvc' as a cloudevent
+  kn source cronjob create my-cron-trigger --schedule "* * * * */1" --data "ping" --sink svc:mysvc
+```
+
+### Options
+
+```
+  -d, --data string        String data to send
+  -h, --help               help for create
+  -n, --namespace string   Specify the namespace to operate in.
+      --schedule string    Schedule specification in crontab format (e.g. '* * * * */2' for every two minutes
+  -s, --sink string        Addressable sink for events
+```
+
+### Options inherited from parent commands
+
+```
+      --config string       kn config file (default is $HOME/.kn/config.yaml)
+      --kubeconfig string   kubectl config file (default is $HOME/.kube/config)
+      --log-http            log http traffic
+```
+
+### SEE ALSO
+
+* [kn source cronjob](kn_source_cronjob.md)	 - CronJob source command group
+
diff --git a/docs/cmd/kn_source_cronjob_delete.md b/docs/cmd/kn_source_cronjob_delete.md
new file mode 100644
index 00000000..7d867abf
--- /dev/null
+++ b/docs/cmd/kn_source_cronjob_delete.md
@@ -0,0 +1,39 @@
+## kn source cronjob delete
+
+Delete a CronJob source.
+
+### Synopsis
+
+Delete a CronJob source.
+
+```
+kn source cronjob delete NAME [flags]
+```
+
+### Examples
+
+```
+
+  # Delete a CronJob source 'my-cron-trigger'
+  kn source cronjob delete my-cron-trigger
+```
+
+### Options
+
+```
+  -h, --help               help for delete
+  -n, --namespace string   Specify the namespace to operate in.
+```
+
+### Options inherited from parent commands
+
+```
+      --config string       kn config file (default is $HOME/.kn/config.yaml)
+      --kubeconfig string   kubectl config file (default is $HOME/.kube/config)
+      --log-http            log http traffic
+```
+
+### SEE ALSO
+
+* [kn source cronjob](kn_source_cronjob.md)	 - CronJob source command group
+
diff --git a/docs/cmd/kn_source_cronjob_describe.md b/docs/cmd/kn_source_cronjob_describe.md
new file mode 100644
index 00000000..fe57faf9
--- /dev/null
+++ b/docs/cmd/kn_source_cronjob_describe.md
@@ -0,0 +1,40 @@
+## kn source cronjob describe
+
+Describe a CronJob source.
+
+### Synopsis
+
+Describe a CronJob source.
+
+```
+kn source cronjob describe NAME [flags]
+```
+
+### Examples
+
+```
+
+  # Describe a cronjob source with name 'my-cron-trigger'
+  kn source cronjob describe my-cron-trigger
+```
+
+### Options
+
+```
+  -h, --help               help for describe
+  -n, --namespace string   Specify the namespace to operate in.
+  -v, --verbose            More output.
+```
+
+### Options inherited from parent commands
+
+```
+      --config string       kn config file (default is $HOME/.kn/config.yaml)
+      --kubeconfig string   kubectl config file (default is $HOME/.kube/config)
+      --log-http            log http traffic
+```
+
+### SEE ALSO
+
+* [kn source cronjob](kn_source_cronjob.md)	 - CronJob source command group
+
diff --git a/docs/cmd/kn_source_cronjob_update.md b/docs/cmd/kn_source_cronjob_update.md
new file mode 100644
index 00000000..c3ebf204
--- /dev/null
+++ b/docs/cmd/kn_source_cronjob_update.md
@@ -0,0 +1,42 @@
+## kn source cronjob update
+
+Update a CronJob source.
+
+### Synopsis
+
+Update a CronJob source.
+
+```
+kn source cronjob update NAME --schedule SCHEDULE --sink SERVICE --data DATA [flags]
+```
+
+### Examples
+
+```
+
+  # Update the schedule of a crontab source 'my-cron-trigger' to fire every minute
+  kn source cronjob update my-cron-trigger --schedule "* * * * */1"
+```
+
+### Options
+
+```
+  -d, --data string        String data to send
+  -h, --help               help for update
+  -n, --namespace string   Specify the namespace to operate in.
+      --schedule string    Schedule specification in crontab format (e.g. '* * * * */2' for every two minutes
+  -s, --sink string        Addressable sink for events
+```
+
+### Options inherited from parent commands
+
+```
+      --config string       kn config file (default is $HOME/.kn/config.yaml)
+      --kubeconfig string   kubectl config file (default is $HOME/.kube/config)
+      --log-http            log http traffic
+```
+
+### SEE ALSO
+
+* [kn source cronjob](kn_source_cronjob.md)	 - CronJob source command group
+
diff --git a/docs/cmd/kn_source_list-types.md b/docs/cmd/kn_source_list-types.md
index e45710c1..16136a01 100644
--- a/docs/cmd/kn_source_list-types.md
+++ b/docs/cmd/kn_source_list-types.md
@@ -42,5 +42,5 @@ kn source list-types [flags]
 
 ### SEE ALSO
 
-* [kn source](kn_source.md)	 - Event Source command group
+* [kn source](kn_source.md)	 - Event source command group
 
diff --git a/go.sum b/go.sum
index afa83bd8..425c497a 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,4 @@
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.34.0 h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=
 cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
 cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
@@ -23,7 +22,6 @@ github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jB
 github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
 github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/purell v1.1.0 h1:rmGxhojJlM0tuKtfdvliR84CFHljx9ag64t2xmVkjK4=
 github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
 github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
 github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
@@ -68,7 +66,6 @@ github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5Xh
 github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
 github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
 github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
-github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633 h1:H2pdYOb3KQ1/YsqVWoWNLQO+fusocsw354rqGTZtAgw=
 github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
 github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk=
 github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
@@ -86,38 +83,32 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V
 github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
 github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
 github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
-github.com/go-openapi/jsonpointer v0.19.0 h1:FTUMcX77w5rQkClIzDtTxvn6Bsa894CcrzNj2MMfeg8=
 github.com/go-openapi/jsonpointer v0.19.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
 github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0=
 github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
 github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
 github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
-github.com/go-openapi/jsonreference v0.19.0 h1:BqWKpV1dFd+AuiKlgtddwVIFQsuMpxfBDBHGfM2yNpk=
 github.com/go-openapi/jsonreference v0.19.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
 github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w=
 github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
 github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
-github.com/go-openapi/spec v0.17.2 h1:eb2NbuCnoe8cWAxhtK6CfMWUYmiFEZJ9Hx3Z2WRwJ5M=
 github.com/go-openapi/spec v0.17.2/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
 github.com/go-openapi/spec v0.19.2 h1:SStNd1jRcYtfKCN7R0laGNs80WYYvn5CbBjM2sOmCrE=
 github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY=
 github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
 github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
-github.com/go-openapi/swag v0.17.2 h1:K/ycE/XTUDFltNHSO32cGRUhrVGJD64o8WgAIZNyc3k=
 github.com/go-openapi/swag v0.17.2/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
 github.com/go-openapi/swag v0.19.2 h1:jvO6bCMBEilGwMfHhrd61zIID4oIFdwb76V17SM88dE=
 github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=
 github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
 github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I=
 github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef h1:veQD95Isof8w9/WXiA+pa3tz3fJXkt5B7QaRBrM62gk=
 github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I=
 github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -126,7 +117,6 @@ github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb
 github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
 github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -136,14 +126,12 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z
 github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=
 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-containerregistry v0.0.0-20191029173801-50b26ee28691 h1:9fkqC5Bq8l2FQgcW6FQbPDUeZvExyg7okl+s4Gg9Jrs=
 github.com/google/go-containerregistry v0.0.0-20191029173801-50b26ee28691/go.mod h1:2KrPZhPVc4ttLyBIro34Aw115FerjFuIQMT+u2tmzXo=
 github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
-github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf h1:+RRA9JqSOZFfKrOeqr2z77+8R2RKyh8PG66dcu1V0ck=
 github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
 github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -156,21 +144,18 @@ github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
 github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
 github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM=
 github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
-github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d h1:7XGaL1e6bYS1yIonGp9761ExpPPV1ui0SAC59Yube9k=
 github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
 github.com/googleapis/gnostic v0.2.2 h1:DcFegQ7+ECdmkJMfVwWlC+89I4esJ7p8nkGt9ainGDk=
 github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
 github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4=
 github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
 github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
-github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7 h1:6TSoaYExHper8PYsJu23GWVNOyYRCSnIFyxKgLSZ54w=
 github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
 github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM=
 github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
 github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
 github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
-github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
 github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
@@ -188,7 +173,6 @@ github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht
 github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be h1:AHimNtVIpiBjPUhEF5KNCkrUyqTSA5zWUl8sQ2bfGBE=
 github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo=
 github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
@@ -209,7 +193,6 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
 github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
 github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic=
 github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4=
 github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
@@ -234,16 +217,12 @@ github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8m
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
 github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
-github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c h1:Hww8mOyEKTeON4bZn7FrlLismspbPc1teNRUVH7wLQ8=
 github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw=
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo=
 github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c h1:eSfnfIuwhxZyULg1NNuZycJcYkjYVGYe7FczwQReM6U=
 github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
-github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3 h1:EooPXg51Tn+xmWPXJUGCnJhJSpeuMlBmfJVcqIRmmv8=
 github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
@@ -299,7 +278,6 @@ github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9
 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
 github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
@@ -309,9 +287,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
 github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -320,9 +296,7 @@ github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGr
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
-go.opencensus.io v0.21.0 h1:mU6zScU4U1YAFPHEHYk+3JC4SY7JxgkqS10ZOSyksNg=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
-go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4=
 go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 go.opencensus.io v0.22.1 h1:8dP3SGL7MPB94crU3bEPplMPe83FI4EouesJUeFHv50=
 go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA=
@@ -334,7 +308,6 @@ go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
 go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -372,24 +345,19 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc h1:gkKoSkUmnU6bpS/VhkuO27bzQeSA51uaEfbOW5dNb68=
 golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA=
 golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190912160710-24e19bdeb0f2 h1:4dVFTC832rPn4pomLSz1vA+are2+dU19w1H8OngV7nc=
 golang.org/x/net v0.0.0-20190912160710-24e19bdeb0f2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0K86vlAs/eXGFms2txfJfA=
 golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -399,9 +367,7 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190312061237-fead79001313 h1:pczuHS43Cp2ktBEEmLwScxgjWsBSzdaQiKzUyf3DTTc=
 golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -415,10 +381,8 @@ golang.org/x/sys v0.0.0-20190912141932-bc967efca4b8/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20191010194322-b09406accb47 h1:/XfQ9z7ib8eEJX2hdgFTZJ/ntt0swNk5oYBziWeTCvY=
 golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db h1:6/JqlYfC1CCaLnGceQTI+sDGhC9UBSPAsBqI0Gun6kU=
 golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
@@ -434,7 +398,6 @@ golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGm
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd h1:/e+gpKk9r3dJobndpTytxS2gOy6m5uvpg+ISQoEcusQ=
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
@@ -453,7 +416,6 @@ gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40
 gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
 gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
 google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
-google.golang.org/api v0.7.0 h1:9sdfJOzWlkqPltHAuzT2Cp+yrBeY1KRVYgms8soxMwM=
 google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
 google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
 google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
@@ -461,11 +423,8 @@ google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhE
 google.golang.org/api v0.14.0 h1:uMf5uLi4eQMRrMKhCplNik4U4H8Z6C1br3zOtAa/aDE=
 google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I=
 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
 google.golang.org/appengine v1.6.2 h1:j8RI1yW0SkI+paT6uGwMlrMI/6zwYA6/CFil8rxOzGI=
 google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
@@ -474,7 +433,6 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn
 google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 h1:iKtrH9Y8mcbADOP0YFaEMth7OfuHY9xHOwNj4znpM1A=
 google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51 h1:Ex1mq5jaJof+kRnYi3SlYJ8KKa9Ao3NHyIT5XJ1gF6U=
@@ -493,7 +451,6 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/inf.v0 v0.9.0 h1:3zYtXIO92bvsdS3ggAdA8Gb4Azj0YU+TVY1uGYNFA8o=
 gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
@@ -502,7 +459,6 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkep
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
 gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@@ -528,11 +484,9 @@ k8s.io/code-generator v0.0.0-20191026065352-f361089c127c/go.mod h1:HtDEU3n5Xo1vb
 k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
 k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
 k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
-k8s.io/klog v0.3.1 h1:RVgyDHY/kFKtLqh67NvEWIgkMneNoIrdkN0CxDSQc68=
 k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
 k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
 k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
-k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30 h1:TRb4wNWoBVrH9plmkp2q86FIDppkbrEXdXlxU3a3BMI=
 k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc=
 k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf h1:EYm5AW/UUDbnmnI+gK0TJDVK9qPLhM+sRHYanNKw0EQ=
 k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
diff --git a/pkg/eventing/sources/v1alpha1/apiserver_client.go b/pkg/eventing/sources/v1alpha1/apiserver_client.go
new file mode 100644
index 00000000..0a6b69d2
--- /dev/null
+++ b/pkg/eventing/sources/v1alpha1/apiserver_client.go
@@ -0,0 +1,72 @@
+// 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.
+
+package v1alpha1
+
+import (
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"knative.dev/eventing/pkg/apis/sources/v1alpha1"
+	client_v1alpha1 "knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1alpha1"
+
+	kn_errors "knative.dev/client/pkg/errors"
+)
+
+// Interface for working with ApiServer sources
+type KnApiServerSourcesClient interface {
+
+	// Get an ApiServerSource by object
+	CreateApiServerSource(apisvrsrc *v1alpha1.ApiServerSource) (*v1alpha1.ApiServerSource, error)
+
+	// Delete an ApiServerSource by name
+	DeleteApiServerSource(name string) error
+
+	// Get namespace for this client
+	Namespace() string
+}
+
+// knSourcesClient is a combination of Sources client interface and namespace
+// Temporarily help to add sources dependencies
+// May be changed when adding real sources features
+type apiServerSourcesClient struct {
+	client    client_v1alpha1.ApiServerSourceInterface
+	namespace string
+}
+
+// NewKnSourcesClient is to invoke Eventing Sources Client API to create object
+func newKnApiServerSourcesClient(client client_v1alpha1.ApiServerSourceInterface, namespace string) KnApiServerSourcesClient {
+	return &apiServerSourcesClient{
+		client:    client,
+		namespace: namespace,
+	}
+}
+
+//CreateApiServerSource is used to create an instance of ApiServerSource
+func (c *apiServerSourcesClient) CreateApiServerSource(apisvrsrc *v1alpha1.ApiServerSource) (*v1alpha1.ApiServerSource, error) {
+	ins, err := c.client.Create(apisvrsrc)
+	if err != nil {
+		return nil, kn_errors.GetError(err)
+	}
+	return ins, nil
+}
+
+//DeleteApiServerSource is used to create an instance of ApiServerSource
+func (c *apiServerSourcesClient) DeleteApiServerSource(name string) error {
+	err := c.client.Delete(name, &v1.DeleteOptions{})
+	return err
+}
+
+// Return the client's namespace
+func (c *apiServerSourcesClient) Namespace() string {
+	return c.namespace
+}
diff --git a/pkg/eventing/sources/v1alpha1/client.go b/pkg/eventing/sources/v1alpha1/client.go
index 14dacf2c..74049199 100644
--- a/pkg/eventing/sources/v1alpha1/client.go
+++ b/pkg/eventing/sources/v1alpha1/client.go
@@ -15,58 +15,41 @@
 package v1alpha1
 
 import (
-	apis_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-
-	kn_errors "knative.dev/client/pkg/errors"
-	"knative.dev/eventing/pkg/apis/sources/v1alpha1"
 	client_v1alpha1 "knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1alpha1"
 )
 
 // KnSourcesClient to Eventing Sources. All methods are relative to the
 // namespace specified during construction
 type KnSourcesClient interface {
-	// Namespace in which this client is operating for
-	Namespace() string
-
-	// Get an ApiServerSource by object
-	CreateApiServerSource(apisvrsrc *v1alpha1.ApiServerSource) (*v1alpha1.ApiServerSource, error)
+	// Get client for ApiServer sources
+	ApiServerSourcesClient() KnApiServerSourcesClient
 
-	// Delete an ApiServerSource by name
-	DeleteApiServerSource(name string) error
+	// Get client for CronJob sources
+	CronJobSourcesClient() KnCronJobSourcesClient
 }
 
-// knSourcesClient is a combination of Sources client interface and namespace
+// sourcesClient is a combination of Sources client interface and namespace
 // Temporarily help to add sources dependencies
 // May be changed when adding real sources features
-type knSourcesClient struct {
+type sourcesClient struct {
 	client    client_v1alpha1.SourcesV1alpha1Interface
 	namespace string
 }
 
-// NewKnSourcesClient is to invoke Eventing Sources Client API to create object
+// Create a new client for managing all eventing built-in sources
 func NewKnSourcesClient(client client_v1alpha1.SourcesV1alpha1Interface, namespace string) KnSourcesClient {
-	return &knSourcesClient{
+	return &sourcesClient{
 		client:    client,
 		namespace: namespace,
 	}
 }
 
-//CreateApiServerSource is used to create an instance of ApiServerSource
-func (c *knSourcesClient) CreateApiServerSource(apisvrsrc *v1alpha1.ApiServerSource) (*v1alpha1.ApiServerSource, error) {
-	ins, err := c.client.ApiServerSources(c.namespace).Create(apisvrsrc)
-	if err != nil {
-		return nil, kn_errors.GetError(err)
-	}
-	return ins, nil
-}
-
-//DeleteApiServerSource is used to create an instance of ApiServerSource
-func (c *knSourcesClient) DeleteApiServerSource(name string) error {
-	err := c.client.ApiServerSources(c.namespace).Delete(name, &apis_v1.DeleteOptions{})
-	return err
+// Get the client for dealing with apiserver sources
+func (c *sourcesClient) ApiServerSourcesClient() KnApiServerSourcesClient {
+	return newKnApiServerSourcesClient(c.client.ApiServerSources(c.namespace), c.namespace)
 }
 
-// Return the client's namespace
-func (c *knSourcesClient) Namespace() string {
-	return c.namespace
+// Get the client for dealing with cronjob sources
+func (c *sourcesClient) CronJobSourcesClient() KnCronJobSourcesClient {
+	return newKnCronJobSourcesClient(c.client.CronJobSources(c.namespace), c.namespace)
 }
diff --git a/pkg/eventing/sources/v1alpha1/cronjob_client.go b/pkg/eventing/sources/v1alpha1/cronjob_client.go
new file mode 100644
index 00000000..ad32d448
--- /dev/null
+++ b/pkg/eventing/sources/v1alpha1/cronjob_client.go
@@ -0,0 +1,122 @@
+// 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.
+
+package v1alpha1
+
+import (
+	"fmt"
+
+	meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"knative.dev/eventing/pkg/apis/sources/v1alpha1"
+	client_v1alpha1 "knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1alpha1"
+	duckv1beta1 "knative.dev/pkg/apis/duck/v1beta1"
+)
+
+// Interface for interacting with a cronjob source
+type KnCronJobSourcesClient interface {
+
+	// Get a single cronjob source by name
+	GetCronJobSource(name string) (*v1alpha1.CronJobSource, error)
+
+	// Create a cronjob source by providing the schedule, data and sink
+	CreateCronJobSource(cronjobSource *v1alpha1.CronJobSource) error
+
+	// Update a cronjob source by providing the schedule, data and sink
+	UpdateCronJobSource(cronjobSource *v1alpha1.CronJobSource) error
+
+	// Delete a cronjob source by name
+	DeleteCronJobSource(name string) error
+
+	// Get namespace for this source
+	Namespace() string
+}
+
+// knSourcesClient is a combination of Sources client interface and namespace
+// Temporarily help to add sources dependencies
+// May be changed when adding real sources features
+type cronJobSourcesClient struct {
+	client    client_v1alpha1.CronJobSourceInterface
+	namespace string
+}
+
+// NewKnSourcesClient is to invoke Eventing Sources Client API to create object
+func newKnCronJobSourcesClient(client client_v1alpha1.CronJobSourceInterface, namespace string) KnCronJobSourcesClient {
+	return &cronJobSourcesClient{
+		client:    client,
+		namespace: namespace,
+	}
+}
+
+// Get the namespace for which this client has been created
+func (c *cronJobSourcesClient) Namespace() string {
+	return c.namespace
+}
+
+func (c *cronJobSourcesClient) CreateCronJobSource(cronjobSource *v1alpha1.CronJobSource) error {
+	if cronjobSource.Spec.Sink == nil {
+		return fmt.Errorf("a sink is required for creating a source")
+	}
+	_, err := c.client.Create(cronjobSource)
+	return err
+}
+
+func (c *cronJobSourcesClient) UpdateCronJobSource(cronjobSource *v1alpha1.CronJobSource) error {
+	_, err := c.client.Update(cronjobSource)
+	return err
+}
+
+func (c *cronJobSourcesClient) DeleteCronJobSource(name string) error {
+	return c.client.Delete(name, &meta_v1.DeleteOptions{})
+}
+
+func (c *cronJobSourcesClient) GetCronJobSource(name string) (*v1alpha1.CronJobSource, error) {
+	return c.client.Get(name, meta_v1.GetOptions{})
+}
+
+// Builder for building up cronjob sources
+
+type CronJobSourceBuilder struct {
+	cronjobSource *v1alpha1.CronJobSource
+}
+
+func NewCronJobSourceBuilder(name string) *CronJobSourceBuilder {
+	return &CronJobSourceBuilder{cronjobSource: &v1alpha1.CronJobSource{
+		ObjectMeta: meta_v1.ObjectMeta{
+			Name: name,
+		},
+	}}
+}
+
+func NewCronJobSourceBuilderFromExisting(cronjobsource *v1alpha1.CronJobSource) *CronJobSourceBuilder {
+	return &CronJobSourceBuilder{cronjobSource: cronjobsource.DeepCopy()}
+}
+
+func (b *CronJobSourceBuilder) Schedule(schedule string) *CronJobSourceBuilder {
+	b.cronjobSource.Spec.Schedule = schedule
+	return b
+}
+
+func (b *CronJobSourceBuilder) Data(data string) *CronJobSourceBuilder {
+	b.cronjobSource.Spec.Data = data
+	return b
+}
+
+func (b *CronJobSourceBuilder) Sink(sink *duckv1beta1.Destination) *CronJobSourceBuilder {
+	b.cronjobSource.Spec.Sink = sink
+	return b
+}
+
+func (b *CronJobSourceBuilder) Build() *v1alpha1.CronJobSource {
+	return b.cronjobSource
+}
diff --git a/pkg/eventing/sources/v1alpha1/cronjob_client_mock.go b/pkg/eventing/sources/v1alpha1/cronjob_client_mock.go
new file mode 100644
index 00000000..94610456
--- /dev/null
+++ b/pkg/eventing/sources/v1alpha1/cronjob_client_mock.go
@@ -0,0 +1,108 @@
+// 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.
+
+package v1alpha1
+
+import (
+	"testing"
+
+	"knative.dev/eventing/pkg/apis/sources/v1alpha1"
+
+	"knative.dev/client/pkg/util/mock"
+)
+
+type MockKnCronJobSourceClient struct {
+	t         *testing.T
+	recorder  *CronJobSourcesRecorder
+	namespace string
+}
+
+// NewMockKnCronJobSourceClient returns a new mock instance which you need to record for
+func NewMockKnCronJobSourceClient(t *testing.T, ns ...string) *MockKnCronJobSourceClient {
+	namespace := "default"
+	if len(ns) > 0 {
+		namespace = ns[0]
+	}
+	return &MockKnCronJobSourceClient{
+		t:        t,
+		recorder: &CronJobSourcesRecorder{mock.NewRecorder(t, namespace)},
+	}
+}
+
+// Ensure that the interface is implemented
+var _ KnCronJobSourcesClient = &MockKnCronJobSourceClient{}
+
+// recorder for service
+type CronJobSourcesRecorder struct {
+	r *mock.Recorder
+}
+
+// Recorder returns the recorder for registering API calls
+func (c *MockKnCronJobSourceClient) Recorder() *CronJobSourcesRecorder {
+	return c.recorder
+}
+
+// Namespace of this client
+func (c *MockKnCronJobSourceClient) Namespace() string {
+	return c.recorder.r.Namespace()
+}
+
+// CreateCronJobSource records a call for CreateCronJobSource with the expected error
+func (sr *CronJobSourcesRecorder) CreateCronJobSource(cronjobSource interface{}, err error) {
+	sr.r.Add("CreateCronJobSource", []interface{}{cronjobSource}, []interface{}{err})
+}
+
+// CreateCronJobSource performs a previously recorded action, failing if non has been registered
+func (c *MockKnCronJobSourceClient) CreateCronJobSource(cronjobSource *v1alpha1.CronJobSource) error {
+	call := c.recorder.r.VerifyCall("CreateCronJobSource", cronjobSource)
+	return mock.ErrorOrNil(call.Result[0])
+}
+
+// GetCronJobSource records a call for GetCronJobSource with the expected object or error. Either cronjobsource or err should be nil
+func (sr *CronJobSourcesRecorder) GetCronJobSource(name interface{}, cronjobSource *v1alpha1.CronJobSource, err error) {
+	sr.r.Add("GetCronJobSource", []interface{}{name}, []interface{}{cronjobSource, err})
+}
+
+// GetCronJobSource performs a previously recorded action, failing if non has been registered
+func (c *MockKnCronJobSourceClient) GetCronJobSource(name string) (*v1alpha1.CronJobSource, error) {
+	call := c.recorder.r.VerifyCall("GetCronJobSource", name)
+	return call.Result[0].(*v1alpha1.CronJobSource), mock.ErrorOrNil(call.Result[1])
+}
+
+// UpdateCronJobSource records a call for UpdateCronJobSource with the expected error (nil if none)
+func (sr *CronJobSourcesRecorder) UpdateCronJobSource(cronjobSource interface{}, err error) {
+	sr.r.Add("UpdateCronJobSource", []interface{}{cronjobSource}, []interface{}{err})
+}
+
+// UpdateCronJobSource performs a previously recorded action, failing if non has been registered
+func (c *MockKnCronJobSourceClient) UpdateCronJobSource(cronjobSource *v1alpha1.CronJobSource) error {
+	call := c.recorder.r.VerifyCall("UpdateCronJobSource", cronjobSource)
+	return mock.ErrorOrNil(call.Result[0])
+}
+
+// UpdateCronJobSource records a call for DeleteCronJobSource with the expected error (nil if none)
+func (sr *CronJobSourcesRecorder) DeleteCronJobSource(name interface{}, err error) {
+	sr.r.Add("DeleteCronJobSource", []interface{}{name}, []interface{}{err})
+}
+
+// DeleteCronJobSource performs a previously recorded action, failing if non has been registered
+func (c *MockKnCronJobSourceClient) DeleteCronJobSource(name string) error {
+	call := c.recorder.r.VerifyCall("DeleteCronJobSource", name)
+	return mock.ErrorOrNil(call.Result[0])
+}
+
+// Validates validates whether every recorded action has been called
+func (sr *CronJobSourcesRecorder) Validate() {
+	sr.r.CheckThatAllRecordedMethodsHaveBeenCalled()
+}
diff --git a/pkg/kn/commands/source/apiserver/create.go b/pkg/kn/commands/source/apiserver/create.go
index 65d400ea..dc7be52c 100644
--- a/pkg/kn/commands/source/apiserver/create.go
+++ b/pkg/kn/commands/source/apiserver/create.go
@@ -73,7 +73,7 @@ func NewApiServerCreateCommand(p *commands.KnParams) *cobra.Command {
 			apisrvsrc.Spec.Sink = objectRef
 
 			// create
-			_, err = sourcesClient.CreateApiServerSource(apisrvsrc)
+			_, err = sourcesClient.ApiServerSourcesClient().CreateApiServerSource(apisrvsrc)
 			if err != nil {
 				return fmt.Errorf(
 					"cannot create ApiServerSource '%s' in namespace '%s' "+
diff --git a/pkg/kn/commands/source/apiserver/delete.go b/pkg/kn/commands/source/apiserver/delete.go
index a4d9ea5e..9a6b59d5 100644
--- a/pkg/kn/commands/source/apiserver/delete.go
+++ b/pkg/kn/commands/source/apiserver/delete.go
@@ -46,7 +46,7 @@ func NewApiServerDeleteCommand(p *commands.KnParams) *cobra.Command {
 				return err
 			}
 
-			err = sourcesClient.DeleteApiServerSource(name)
+			err = sourcesClient.ApiServerSourcesClient().DeleteApiServerSource(name)
 			if err != nil {
 				return err
 			}
diff --git a/pkg/kn/commands/source/cronjob/create.go b/pkg/kn/commands/source/cronjob/create.go
new file mode 100644
index 00000000..cb4b28e1
--- /dev/null
+++ b/pkg/kn/commands/source/cronjob/create.go
@@ -0,0 +1,81 @@
+// 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.
+
+package cronjob
+
+import (
+	"errors"
+	"fmt"
+
+	"github.com/spf13/cobra"
+
+	"knative.dev/client/pkg/eventing/sources/v1alpha1"
+	"knative.dev/client/pkg/kn/commands"
+	"knative.dev/client/pkg/kn/commands/flags"
+)
+
+// NewCronJobCreateCommand is for creating CronJob source COs
+func NewCronJobCreateCommand(p *commands.KnParams) *cobra.Command {
+	var cronUpdateFlags cronJobUpdateFlags
+	var sinkFlags flags.SinkFlags
+
+	cmd := &cobra.Command{
+		Use:   "create NAME --schedule SCHEDULE --sink SINK --data DATA",
+		Short: "Create a CronJob source.",
+		Example: `
+  # Create a crontab scheduler 'my-cron-trigger' which fires every minute and sends 'ping' to service 'mysvc' as a cloudevent
+  kn source cronjob create my-cron-trigger --schedule "* * * * */1" --data "ping" --sink svc:mysvc`,
+
+		RunE: func(cmd *cobra.Command, args []string) (err error) {
+			if len(args) != 1 {
+				return errors.New("requires the name of the crobjob source to create as single argument")
+
+			}
+			name := args[0]
+
+			cronSourceClient, err := newCronJobSourceClient(p, cmd)
+			if err != nil {
+				return err
+			}
+
+			servingClient, err := p.NewServingClient(cronSourceClient.Namespace())
+			if err != nil {
+				return err
+			}
+
+			destination, err := sinkFlags.ResolveSink(servingClient)
+			if err != nil {
+				return err
+			}
+
+			err = cronSourceClient.CreateCronJobSource(
+				v1alpha1.NewCronJobSourceBuilder(name).
+					Schedule(cronUpdateFlags.schedule).
+					Data(cronUpdateFlags.data).
+					Sink(destination).
+					Build())
+			if err == nil {
+				fmt.Fprintf(cmd.OutOrStdout(), "CronJob source '%s' created in namespace '%s'.\n", args[0], cronSourceClient.Namespace())
+			}
+			return err
+		},
+	}
+	commands.AddNamespaceFlags(cmd.Flags(), false)
+	cronUpdateFlags.addCronJobFlags(cmd)
+	sinkFlags.Add(cmd)
+	cmd.MarkFlagRequired("schedule")
+	cmd.MarkFlagRequired("sink")
+
+	return cmd
+}
diff --git a/pkg/kn/commands/source/cronjob/cronjob.go b/pkg/kn/commands/source/cronjob/cronjob.go
new file mode 100644
index 00000000..530935fe
--- /dev/null
+++ b/pkg/kn/commands/source/cronjob/cronjob.go
@@ -0,0 +1,66 @@
+// 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.
+
+package cronjob
+
+import (
+	"github.com/spf13/cobra"
+	"k8s.io/client-go/tools/clientcmd"
+	sources_v1alpha1 "knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1alpha1"
+
+	"knative.dev/client/pkg/eventing/sources/v1alpha1"
+	"knative.dev/client/pkg/kn/commands"
+)
+
+// NewCronJobCommand is the root command for all cronjob related commands
+func NewCronJobCommand(p *commands.KnParams) *cobra.Command {
+	cronImporterCmd := &cobra.Command{
+		Use:   "cronjob",
+		Short: "CronJob source command group",
+	}
+	cronImporterCmd.AddCommand(NewCronJobCreateCommand(p))
+	cronImporterCmd.AddCommand(NewCronJobDeleteCommand(p))
+	cronImporterCmd.AddCommand(NewCronJobDescribeCommand(p))
+	cronImporterCmd.AddCommand(NewCronJobUpdateCommand(p))
+	return cronImporterCmd
+}
+
+var cronJobSourceClientFactory func(config clientcmd.ClientConfig, namespace string) (v1alpha1.KnCronJobSourcesClient, error)
+
+func newCronJobSourceClient(p *commands.KnParams, cmd *cobra.Command) (v1alpha1.KnCronJobSourcesClient, error) {
+	namespace, err := p.GetNamespace(cmd)
+	if err != nil {
+		return nil, err
+	}
+
+	if cronJobSourceClientFactory != nil {
+		config, err := p.GetClientConfig()
+		if err != nil {
+			return nil, err
+		}
+		return cronJobSourceClientFactory(config, namespace)
+	}
+
+	clientConfig, err := p.RestConfig()
+	if err != nil {
+		return nil, err
+	}
+
+	client, err := sources_v1alpha1.NewForConfig(clientConfig)
+	if err != nil {
+		return nil, err
+	}
+
+	return v1alpha1.NewKnSourcesClient(client, namespace).CronJobSourcesClient(), nil
+}
diff --git a/pkg/kn/commands/source/cronjob/delete.go b/pkg/kn/commands/source/cronjob/delete.go
new file mode 100644
index 00000000..8f8c6202
--- /dev/null
+++ b/pkg/kn/commands/source/cronjob/delete.go
@@ -0,0 +1,55 @@
+// 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.
+
+package cronjob
+
+import (
+	"errors"
+	"fmt"
+
+	"github.com/spf13/cobra"
+	"knative.dev/client/pkg/kn/commands"
+)
+
+// NewCronJobDeleteCommand is for deleting a CronJob source
+func NewCronJobDeleteCommand(p *commands.KnParams) *cobra.Command {
+	ApiServerDeleteCommand := &cobra.Command{
+		Use:   "delete NAME",
+		Short: "Delete a CronJob source.",
+		Example: `
+  # Delete a CronJob source 'my-cron-trigger'
+  kn source cronjob delete my-cron-trigger`,
+		RunE: func(cmd *cobra.Command, args []string) error {
+			if len(args) != 1 {
+				return errors.New("'requires the name of the crobjob source to delete as single argument")
+			}
+			name := args[0]
+
+			cronSourceClient, err := newCronJobSourceClient(p, cmd)
+			if err != nil {
+				return err
+			}
+
+			err = cronSourceClient.DeleteCronJobSource(name)
+			if err != nil {
+				return err
+			}
+
+			fmt.Fprintf(cmd.OutOrStdout(), "CronJob source '%s' deleted in namespace '%s'.\n", name, cronSourceClient.Namespace())
+			return nil
+		},
+	}
+	commands.AddNamespaceFlags(ApiServerDeleteCommand.Flags(), false)
+	return ApiServerDeleteCommand
+}
diff --git a/pkg/kn/commands/source/cronjob/describe.go b/pkg/kn/commands/source/cronjob/describe.go
new file mode 100644
index 00000000..d404dd12
--- /dev/null
+++ b/pkg/kn/commands/source/cronjob/describe.go
@@ -0,0 +1,109 @@
+// 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.
+
+package cronjob
+
+import (
+	"errors"
+	"fmt"
+
+	"github.com/spf13/cobra"
+	"knative.dev/eventing/pkg/apis/sources/v1alpha1"
+	duckv1beta1 "knative.dev/pkg/apis/duck/v1beta1"
+
+	"knative.dev/client/pkg/kn/commands"
+	"knative.dev/client/pkg/printers"
+)
+
+// NewCronJobDescribeCommand returns a new command for describe a CronJob source object
+func NewCronJobDescribeCommand(p *commands.KnParams) *cobra.Command {
+
+	cronJobDescribe := &cobra.Command{
+		Use:   "describe NAME",
+		Short: "Describe a CronJob source.",
+		Example: `
+  # Describe a cronjob source with name 'my-cron-trigger'
+  kn source cronjob describe my-cron-trigger`,
+		RunE: func(cmd *cobra.Command, args []string) error {
+			if len(args) != 1 {
+				return errors.New("'source cronjob describe' requires the name of the source as single argument")
+			}
+			name := args[0]
+
+			cronSourceClient, err := newCronJobSourceClient(p, cmd)
+			if err != nil {
+				return err
+			}
+
+			cjSource, err := cronSourceClient.GetCronJobSource(name)
+			if err != nil {
+				return err
+			}
+
+			out := cmd.OutOrStdout()
+			dw := printers.NewPrefixWriter(out)
+
+			printDetails, err := cmd.Flags().GetBool("verbose")
+			if err != nil {
+				return err
+			}
+
+			writeCronJobSource(dw, cjSource, printDetails)
+			dw.WriteLine()
+			if err := dw.Flush(); err != nil {
+				return err
+			}
+
+			// Revisions summary info
+			writeSink(dw, cjSource.Spec.Sink)
+			dw.WriteLine()
+			if err := dw.Flush(); err != nil {
+				return err
+			}
+
+			// Condition info
+			commands.WriteConditions(dw, cjSource.Status.Conditions, printDetails)
+			if err := dw.Flush(); err != nil {
+				return err
+			}
+
+			return nil
+		},
+	}
+	flags := cronJobDescribe.Flags()
+	commands.AddNamespaceFlags(flags, false)
+	flags.BoolP("verbose", "v", false, "More output.")
+
+	return cronJobDescribe
+}
+
+func writeSink(dw printers.PrefixWriter, sink *duckv1beta1.Destination) {
+	subWriter := dw.WriteAttribute("Sink", "")
+	subWriter.WriteAttribute("Name", sink.Ref.Name)
+	subWriter.WriteAttribute("Namespace", sink.Ref.Namespace)
+	ref := sink.Ref
+	if ref != nil {
+		subWriter.WriteAttribute("Resource", fmt.Sprintf("%s (%s)", sink.Ref.Kind, sink.Ref.APIVersion))
+	}
+	uri := sink.URI
+	if uri != nil {
+		subWriter.WriteAttribute("URI", uri.String())
+	}
+}
+
+func writeCronJobSource(dw printers.PrefixWriter, source *v1alpha1.CronJobSource, printDetails bool) {
+	commands.WriteMetadata(dw, &source.ObjectMeta, printDetails)
+	dw.WriteAttribute("Schedule", source.Spec.Schedule)
+	dw.WriteAttribute("Data", source.Spec.Data)
+}
diff --git a/pkg/kn/commands/source/cronjob/flags.go b/pkg/kn/commands/source/cronjob/flags.go
new file mode 100644
index 00000000..5ea210a1
--- /dev/null
+++ b/pkg/kn/commands/source/cronjob/flags.go
@@ -0,0 +1,27 @@
+// 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.
+
+package cronjob
+
+import "github.com/spf13/cobra"
+
+type cronJobUpdateFlags struct {
+	schedule string
+	data     string
+}
+
+func (c *cronJobUpdateFlags) addCronJobFlags(cmd *cobra.Command) {
+	cmd.Flags().StringVar(&c.schedule, "schedule", "", "Schedule specification in crontab format (e.g. '* * * * */2' for every two minutes")
+	cmd.Flags().StringVarP(&c.data, "data", "d", "", "String data to send")
+}
diff --git a/pkg/kn/commands/source/cronjob/update.go b/pkg/kn/commands/source/cronjob/update.go
new file mode 100644
index 00000000..3741a3b5
--- /dev/null
+++ b/pkg/kn/commands/source/cronjob/update.go
@@ -0,0 +1,87 @@
+// 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.
+
+package cronjob
+
+import (
+	"errors"
+	"fmt"
+
+	"github.com/spf13/cobra"
+
+	"knative.dev/client/pkg/eventing/sources/v1alpha1"
+	"knative.dev/client/pkg/kn/commands"
+	"knative.dev/client/pkg/kn/commands/flags"
+)
+
+// NewCronJobUpdateCommand prepares the command for a CronJobSource update
+func NewCronJobUpdateCommand(p *commands.KnParams) *cobra.Command {
+	var cronUpdateFlags cronJobUpdateFlags
+	var sinkFlags flags.SinkFlags
+
+	cmd := &cobra.Command{
+		Use:   "update NAME --schedule SCHEDULE --sink SERVICE --data DATA",
+		Short: "Update a CronJob source.",
+		Example: `
+  # Update the schedule of a crontab source 'my-cron-trigger' to fire every minute
+  kn source cronjob update my-cron-trigger --schedule "* * * * */1"`,
+
+		RunE: func(cmd *cobra.Command, args []string) (err error) {
+			if len(args) != 1 {
+				return errors.New("name of cronjob source required")
+			}
+			name := args[0]
+
+			cronSourceClient, err := newCronJobSourceClient(p, cmd)
+			if err != nil {
+				return err
+			}
+
+			servingClient, err := p.NewServingClient(cronSourceClient.Namespace())
+			if err != nil {
+				return err
+			}
+
+			source, err := cronSourceClient.GetCronJobSource(name)
+			if err != nil {
+				return err
+			}
+
+			b := v1alpha1.NewCronJobSourceBuilderFromExisting(source)
+			if cmd.Flags().Changed("schedule") {
+				b.Schedule(cronUpdateFlags.schedule)
+			}
+			if cmd.Flags().Changed("data") {
+				b.Data(cronUpdateFlags.data)
+			}
+			if cmd.Flags().Changed("sink") {
+				destination, err := sinkFlags.ResolveSink(servingClient)
+				if err != nil {
+					return err
+				}
+				b.Sink(destination)
+			}
+			err = cronSourceClient.UpdateCronJobSource(b.Build())
+			if err == nil {
+				fmt.Fprintf(cmd.OutOrStdout(), "CronJob source '%s' updated in namespace '%s'.\n", name, cronSourceClient.Namespace())
+			}
+			return err
+		},
+	}
+	commands.AddNamespaceFlags(cmd.Flags(), false)
+	cronUpdateFlags.addCronJobFlags(cmd)
+	sinkFlags.Add(cmd)
+
+	return cmd
+}
diff --git a/pkg/kn/commands/source/source.go b/pkg/kn/commands/source/source.go
index 6b9323a8..37c07629 100644
--- a/pkg/kn/commands/source/source.go
+++ b/pkg/kn/commands/source/source.go
@@ -19,15 +19,16 @@ import (
 
 	"knative.dev/client/pkg/kn/commands"
 	"knative.dev/client/pkg/kn/commands/source/apiserver"
+	"knative.dev/client/pkg/kn/commands/source/cronjob"
 )
 
-// NewSourceCommand defines and processes the `kn source` event source command group
 func NewSourceCommand(p *commands.KnParams) *cobra.Command {
 	sourceCmd := &cobra.Command{
 		Use:   "source",
-		Short: "Event Source command group",
+		Short: "Event source command group",
 	}
 	sourceCmd.AddCommand(apiserver.NewApiServerCommand(p))
 	sourceCmd.AddCommand(NewListTypesCommand(p))
+	sourceCmd.AddCommand(cronjob.NewCronJobCommand(p))
 	return sourceCmd
 }
diff --git a/pkg/kn/commands/types.go b/pkg/kn/commands/types.go
index 6ba7dcf0..748d80d0 100644
--- a/pkg/kn/commands/types.go
+++ b/pkg/kn/commands/types.go
@@ -75,7 +75,7 @@ func (params *KnParams) Initialize() {
 }
 
 func (params *KnParams) newServingClient(namespace string) (serving_kn_v1alpha1.KnServingClient, error) {
-	restConfig, err := params.prepareRestConfig()
+	restConfig, err := params.RestConfig()
 	if err != nil {
 		return nil, err
 	}
@@ -85,7 +85,7 @@ func (params *KnParams) newServingClient(namespace string) (serving_kn_v1alpha1.
 }
 
 func (params *KnParams) newSourcesClient(namespace string) (sources_kn_v1alpha1.KnSourcesClient, error) {
-	restConfig, err := params.prepareRestConfig()
+	restConfig, err := params.RestConfig()
 	if err != nil {
 		return nil, err
 	}
@@ -95,7 +95,7 @@ func (params *KnParams) newSourcesClient(namespace string) (sources_kn_v1alpha1.
 }
 
 func (params *KnParams) newDynamicClient(namespace string) (dynamic_kn.KnDynamicClient, error) {
-	restConfig, err := params.prepareRestConfig()
+	restConfig, err := params.RestConfig()
 	if err != nil {
 		return nil, err
 	}
@@ -104,8 +104,8 @@ func (params *KnParams) newDynamicClient(namespace string) (dynamic_kn.KnDynamic
 	return dynamic_kn.NewKnDynamicClient(client, namespace), nil
 }
 
-// prepareRestConfig returns REST config, which can be to use to create specific clientset
-func (params *KnParams) prepareRestConfig() (*rest.Config, error) {
+// RestConfig returns REST config, which can be to use to create specific clientset
+func (params *KnParams) RestConfig() (*rest.Config, error) {
 	var err error
 
 	if params.ClientConfig == nil {


Test patch:
diff --git a/pkg/eventing/sources/v1alpha1/client_test.go b/pkg/eventing/sources/v1alpha1/apiserver_client_test.go
similarity index 79%
rename from pkg/eventing/sources/v1alpha1/client_test.go
rename to pkg/eventing/sources/v1alpha1/apiserver_client_test.go
index 33c6d2c4..225f61ae 100644
--- a/pkg/eventing/sources/v1alpha1/client_test.go
+++ b/pkg/eventing/sources/v1alpha1/apiserver_client_test.go
@@ -27,23 +27,23 @@ import (
 	"knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1alpha1/fake"
 )
 
-var testNamespace = "test-ns"
+var testApiServerSourceNamespace = "test-ns"
 
-func setup() (sources fake.FakeSourcesV1alpha1, client KnSourcesClient) {
-	sources = fake.FakeSourcesV1alpha1{Fake: &client_testing.Fake{}}
-	client = NewKnSourcesClient(&sources, testNamespace)
+func setupApiServerSourcesClient() (fakeSources fake.FakeSourcesV1alpha1, client KnApiServerSourcesClient) {
+	fakeSources = fake.FakeSourcesV1alpha1{Fake: &client_testing.Fake{}}
+	client = NewKnSourcesClient(&fakeSources, testApiServerSourceNamespace).ApiServerSourcesClient()
 	return
 }
 
 func TestDeleteApiServerSource(t *testing.T) {
 	var srcName = "new-src"
-	sourcesServer, client := setup()
+	sourcesServer, client := setupApiServerSourcesClient()
 
 	apisourceNew := newApiServerSource(srcName)
 
 	sourcesServer.AddReactor("create", "apiserversources",
 		func(a client_testing.Action) (bool, runtime.Object, error) {
-			assert.Equal(t, testNamespace, a.GetNamespace())
+			assert.Equal(t, testApiServerSourceNamespace, a.GetNamespace())
 			name := a.(client_testing.CreateAction).GetObject().(metav1.Object).GetName()
 			if name == apisourceNew.Name {
 				apisourceNew.Generation = 2
@@ -56,7 +56,7 @@ func TestDeleteApiServerSource(t *testing.T) {
 		ins, err := client.CreateApiServerSource(apisourceNew)
 		assert.NilError(t, err)
 		assert.Equal(t, ins.Name, srcName)
-		assert.Equal(t, ins.Namespace, testNamespace)
+		assert.Equal(t, ins.Namespace, testApiServerSourceNamespace)
 	})
 
 	t.Run("create apiserversource with an error returns an error object", func(t *testing.T) {
@@ -67,13 +67,13 @@ func TestDeleteApiServerSource(t *testing.T) {
 
 func TestCreateApiServerSource(t *testing.T) {
 	var srcName = "new-src"
-	sourcesServer, client := setup()
+	sourcesServer, client := setupApiServerSourcesClient()
 
 	apisourceNew := newApiServerSource(srcName)
 
 	sourcesServer.AddReactor("create", "apiserversources",
 		func(a client_testing.Action) (bool, runtime.Object, error) {
-			assert.Equal(t, testNamespace, a.GetNamespace())
+			assert.Equal(t, testApiServerSourceNamespace, a.GetNamespace())
 			name := a.(client_testing.CreateAction).GetObject().(metav1.Object).GetName()
 			if name == apisourceNew.Name {
 				apisourceNew.Generation = 2
@@ -86,7 +86,7 @@ func TestCreateApiServerSource(t *testing.T) {
 		ins, err := client.CreateApiServerSource(apisourceNew)
 		assert.NilError(t, err)
 		assert.Equal(t, ins.Name, srcName)
-		assert.Equal(t, ins.Namespace, testNamespace)
+		assert.Equal(t, ins.Namespace, testApiServerSourceNamespace)
 	})
 
 	t.Run("create apiserversource with an error returns an error object", func(t *testing.T) {
@@ -99,10 +99,10 @@ func newApiServerSource(name string) *v1alpha1.ApiServerSource {
 	src := &v1alpha1.ApiServerSource{
 		ObjectMeta: metav1.ObjectMeta{
 			Name:      name,
-			Namespace: testNamespace,
+			Namespace: testApiServerSourceNamespace,
 		},
 	}
 	src.Name = name
-	src.Namespace = testNamespace
+	src.Namespace = testApiServerSourceNamespace
 	return src
 }
diff --git a/pkg/eventing/sources/v1alpha1/cronjob_client_mock_test.go b/pkg/eventing/sources/v1alpha1/cronjob_client_mock_test.go
new file mode 100644
index 00000000..5e835c0e
--- /dev/null
+++ b/pkg/eventing/sources/v1alpha1/cronjob_client_mock_test.go
@@ -0,0 +1,43 @@
+// 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.
+
+package v1alpha1
+
+import (
+	"testing"
+
+	"knative.dev/eventing/pkg/apis/sources/v1alpha1"
+)
+
+func TestMockKnClient(t *testing.T) {
+
+	client := NewMockKnCronJobSourceClient(t)
+
+	recorder := client.Recorder()
+
+	// Record all services
+	recorder.GetCronJobSource("hello", nil, nil)
+	recorder.CreateCronJobSource(&v1alpha1.CronJobSource{}, nil)
+	recorder.UpdateCronJobSource(&v1alpha1.CronJobSource{}, nil)
+	recorder.DeleteCronJobSource("hello", nil)
+
+	// Call all service
+	client.GetCronJobSource("hello")
+	client.CreateCronJobSource(&v1alpha1.CronJobSource{})
+	client.UpdateCronJobSource(&v1alpha1.CronJobSource{})
+	client.DeleteCronJobSource("hello")
+
+	// Validate
+	recorder.Validate()
+}
diff --git a/pkg/eventing/sources/v1alpha1/cronjob_client_test.go b/pkg/eventing/sources/v1alpha1/cronjob_client_test.go
new file mode 100644
index 00000000..6653f3ed
--- /dev/null
+++ b/pkg/eventing/sources/v1alpha1/cronjob_client_test.go
@@ -0,0 +1,137 @@
+// 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.
+
+package v1alpha1
+
+import (
+	"fmt"
+	"testing"
+
+	"gotest.tools/assert"
+	v1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/runtime"
+	client_testing "k8s.io/client-go/testing"
+	"knative.dev/eventing/pkg/apis/sources/v1alpha1"
+	"knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1alpha1/fake"
+	"knative.dev/pkg/apis/duck/v1beta1"
+)
+
+func setupCronJobSourcesClient(t *testing.T) (sources fake.FakeSourcesV1alpha1, client KnCronJobSourcesClient) {
+	sources = fake.FakeSourcesV1alpha1{Fake: &client_testing.Fake{}}
+	client = NewKnSourcesClient(&sources, "test-ns").CronJobSourcesClient()
+	assert.Equal(t, client.Namespace(), "test-ns")
+	return
+}
+
+func TestCreateCronJobSource(t *testing.T) {
+	sourcesServer, client := setupCronJobSourcesClient(t)
+
+	sourcesServer.AddReactor("create", "cronjobsources",
+		func(a client_testing.Action) (bool, runtime.Object, error) {
+			newSource := a.(client_testing.CreateAction).GetObject()
+			name := newSource.(metav1.Object).GetName()
+			if name == "errorSource" {
+				return true, nil, fmt.Errorf("error while creating cronjobsource %s", name)
+			}
+			return true, newSource, nil
+		})
+
+	err := client.CreateCronJobSource(newCronJobSource("testsource", "mysvc"))
+	assert.NilError(t, err)
+
+	err = client.CreateCronJobSource(newCronJobSource("testsource", ""))
+	assert.ErrorContains(t, err, "sink")
+	assert.ErrorContains(t, err, "required")
+
+	err = client.CreateCronJobSource(newCronJobSource("errorSource", "mysvc"))
+	assert.ErrorContains(t, err, "errorSource")
+}
+
+func TestUpdateCronJobSource(t *testing.T) {
+	sourcesServer, client := setupCronJobSourcesClient(t)
+
+	sourcesServer.AddReactor("update", "cronjobsources",
+		func(a client_testing.Action) (bool, runtime.Object, error) {
+			newSource := a.(client_testing.UpdateAction).GetObject()
+			name := newSource.(metav1.Object).GetName()
+			if name == "errorSource" {
+				return true, nil, fmt.Errorf("error while updating cronjobsource %s", name)
+			}
+			return true, NewCronJobSourceBuilderFromExisting(newSource.(*v1alpha1.CronJobSource)).Build(), nil
+		})
+
+	err := client.UpdateCronJobSource(newCronJobSource("testsource", ""))
+	assert.NilError(t, err)
+
+	err = client.UpdateCronJobSource(newCronJobSource("errorSource", ""))
+	assert.ErrorContains(t, err, "errorSource")
+}
+
+func TestDeleteCronJobSource(t *testing.T) {
+	sourcesServer, client := setupCronJobSourcesClient(t)
+
+	sourcesServer.AddReactor("delete", "cronjobsources",
+		func(a client_testing.Action) (bool, runtime.Object, error) {
+			name := a.(client_testing.DeleteAction).GetName()
+			if name == "errorSource" {
+				return true, nil, fmt.Errorf("error while updating cronjobsource %s", name)
+			}
+			return true, nil, nil
+		})
+
+	err := client.DeleteCronJobSource("testsource")
+	assert.NilError(t, err)
+
+	err = client.DeleteCronJobSource("errorSource")
+	assert.ErrorContains(t, err, "errorSource")
+}
+
+func TestGetCronJobSource(t *testing.T) {
+	sourcesServer, client := setupCronJobSourcesClient(t)
+
+	sourcesServer.AddReactor("get", "cronjobsources",
+		func(a client_testing.Action) (bool, runtime.Object, error) {
+			name := a.(client_testing.GetAction).GetName()
+			if name == "errorSource" {
+				return true, nil, fmt.Errorf("error while updating cronjobsource %s", name)
+			}
+			return true, newCronJobSource(name, "mysvc"), nil
+		})
+
+	source, err := client.GetCronJobSource("testsource")
+	assert.NilError(t, err)
+	assert.Equal(t, source.Name, "testsource")
+	assert.Equal(t, source.Spec.Sink.Ref.Name, "mysvc")
+
+	_, err = client.GetCronJobSource("errorSource")
+	assert.ErrorContains(t, err, "errorSource")
+}
+
+func newCronJobSource(name string, sink string) *v1alpha1.CronJobSource {
+	b := NewCronJobSourceBuilder(name).
+		Schedule("* * * * *").
+		Data("mydata")
+
+	if sink != "" {
+		b.Sink(
+			&v1beta1.Destination{
+				Ref: &v1.ObjectReference{
+					Kind: "Service",
+					Name: sink,
+				},
+			})
+	}
+	return b.Build()
+}
diff --git a/pkg/kn/commands/source/cronjob/create_test.go b/pkg/kn/commands/source/cronjob/create_test.go
new file mode 100644
index 00000000..badb05c8
--- /dev/null
+++ b/pkg/kn/commands/source/cronjob/create_test.go
@@ -0,0 +1,85 @@
+// 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.
+
+package cronjob
+
+import (
+	"errors"
+	"testing"
+
+	"gotest.tools/assert"
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	serving_v1alpha1 "knative.dev/serving/pkg/apis/serving/v1alpha1"
+
+	v1alpha12 "knative.dev/client/pkg/eventing/sources/v1alpha1"
+	knservingclient "knative.dev/client/pkg/serving/v1alpha1"
+	"knative.dev/client/pkg/util"
+)
+
+func TestSimpleCreateCronJobSource(t *testing.T) {
+
+	servingClient := knservingclient.NewMockKnServiceClient(t)
+	cronjobClient := v1alpha12.NewMockKnCronJobSourceClient(t)
+
+	servingRecorder := servingClient.Recorder()
+	servingRecorder.GetService("mysvc", &serving_v1alpha1.Service{
+		TypeMeta:   v1.TypeMeta{Kind: "Service"},
+		ObjectMeta: v1.ObjectMeta{Name: "mysvc"},
+	}, nil)
+
+	cronJobRecorder := cronjobClient.Recorder()
+	cronJobRecorder.CreateCronJobSource(createCronJobSource("testsource", "* * * * */2", "maxwell", "mysvc"), nil)
+
+	out, err := executeCronJobSourceCommand(cronjobClient, servingClient, "create", "--sink", "svc:mysvc", "--schedule", "* * * * */2", "--data", "maxwell", "testsource")
+	assert.NilError(t, err, "Source should have been created")
+	util.ContainsAll(out, "created", "default", "testsource")
+
+	cronJobRecorder.Validate()
+	servingRecorder.Validate()
+}
+
+func TestNoSinkError(t *testing.T) {
+	servingClient := knservingclient.NewMockKnServiceClient(t)
+	cronjobClient := v1alpha12.NewMockKnCronJobSourceClient(t)
+
+	errorMsg := "no Service mysvc found"
+	servingRecorder := servingClient.Recorder()
+	servingRecorder.GetService("mysvc", nil, errors.New(errorMsg))
+
+	out, err := executeCronJobSourceCommand(cronjobClient, servingClient, "create", "--sink", "svc:mysvc", "--schedule", "* * * * */2", "--data", "maxwell", "testsource")
+	assert.Error(t, err, errorMsg)
+	assert.Assert(t, util.ContainsAll(out, errorMsg, "Usage"))
+	servingRecorder.Validate()
+}
+
+func TestNoSinkGivenError(t *testing.T) {
+	out, err := executeCronJobSourceCommand(nil, nil, "create", "--schedule", "* * * * */2", "--data", "maxwell", "testsource")
+	assert.ErrorContains(t, err, "sink")
+	assert.ErrorContains(t, err, "required")
+	assert.Assert(t, util.ContainsAll(out, "Usage", "not set", "required"))
+}
+
+func TestNoScheduleGivenError(t *testing.T) {
+	out, err := executeCronJobSourceCommand(nil, nil, "create", "--sink", "svc:mysvc", "--data", "maxwell", "testsource")
+	assert.ErrorContains(t, err, "schedule")
+	assert.ErrorContains(t, err, "required")
+	assert.Assert(t, util.ContainsAll(out, "Usage", "not set", "required"))
+}
+
+func TestNoNameGivenError(t *testing.T) {
+	out, err := executeCronJobSourceCommand(nil, nil, "create", "--sink", "svc:mysvc", "--schedule", "* * * * */2")
+	assert.ErrorContains(t, err, "name")
+	assert.ErrorContains(t, err, "require")
+	assert.Assert(t, util.ContainsAll(out, "Usage", "require", "name"))
+}
diff --git a/pkg/kn/commands/source/cronjob/cronjob_test.go b/pkg/kn/commands/source/cronjob/cronjob_test.go
new file mode 100644
index 00000000..e5afa17d
--- /dev/null
+++ b/pkg/kn/commands/source/cronjob/cronjob_test.go
@@ -0,0 +1,90 @@
+// 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.
+
+package cronjob
+
+import (
+	"bytes"
+
+	corev1 "k8s.io/api/core/v1"
+	"k8s.io/client-go/tools/clientcmd"
+	"knative.dev/eventing/pkg/apis/sources/v1alpha1"
+	"knative.dev/pkg/apis/duck/v1beta1"
+
+	source_client_v1alpha1 "knative.dev/client/pkg/eventing/sources/v1alpha1"
+	"knative.dev/client/pkg/kn/commands"
+	serving_client_v1alpha1 "knative.dev/client/pkg/serving/v1alpha1"
+)
+
+// Helper methods
+var blankConfig clientcmd.ClientConfig
+
+// TOOD: Remove that blankConfig hack for tests in favor of overwriting GetConfig()
+// Remove also in service_test.go
+func init() {
+	var err error
+	blankConfig, err = clientcmd.NewClientConfigFromBytes([]byte(`kind: Config
+version: v1
+users:
+- name: u
+clusters:
+- name: c
+  cluster:
+    server: example.com
+contexts:
+- name: x
+  context:
+    user: u
+    cluster: c
+current-context: x
+`))
+	if err != nil {
+		panic(err)
+	}
+}
+
+func executeCronJobSourceCommand(cronJobSourceClient source_client_v1alpha1.KnCronJobSourcesClient, servingClient serving_client_v1alpha1.KnServingClient, args ...string) (string, error) {
+	knParams := &commands.KnParams{}
+	knParams.ClientConfig = blankConfig
+
+	output := new(bytes.Buffer)
+	knParams.Output = output
+	knParams.NewServingClient = func(namespace string) (serving_client_v1alpha1.KnServingClient, error) {
+		return servingClient, nil
+	}
+
+	cmd := NewCronJobCommand(knParams)
+	cmd.SetArgs(args)
+	cmd.SetOutput(output)
+
+	cronJobSourceClientFactory = func(config clientcmd.ClientConfig, namespace string) (source_client_v1alpha1.KnCronJobSourcesClient, error) {
+		return cronJobSourceClient, nil
+	}
+	defer cleanupCronJobMockClient()
+
+	err := cmd.Execute()
+
+	return output.String(), err
+}
+
+func cleanupCronJobMockClient() {
+	cronJobSourceClientFactory = nil
+}
+
+func createCronJobSource(name, schedule, data, service string) *v1alpha1.CronJobSource {
+	sink := &v1beta1.Destination{
+		Ref: &corev1.ObjectReference{Name: service, Kind: "Service"},
+	}
+	return source_client_v1alpha1.NewCronJobSourceBuilder(name).Schedule(schedule).Data(data).Sink(sink).Build()
+}
diff --git a/pkg/kn/commands/source/cronjob/delete_test.go b/pkg/kn/commands/source/cronjob/delete_test.go
new file mode 100644
index 00000000..d587c2bd
--- /dev/null
+++ b/pkg/kn/commands/source/cronjob/delete_test.go
@@ -0,0 +1,53 @@
+// 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.
+
+package cronjob
+
+import (
+	"errors"
+	"testing"
+
+	"gotest.tools/assert"
+
+	v1alpha12 "knative.dev/client/pkg/eventing/sources/v1alpha1"
+	"knative.dev/client/pkg/util"
+)
+
+func TestSimpleDelete(t *testing.T) {
+
+	cronjobClient := v1alpha12.NewMockKnCronJobSourceClient(t, "mynamespace")
+
+	cronJobRecorder := cronjobClient.Recorder()
+	cronJobRecorder.DeleteCronJobSource("testsource", nil)
+
+	out, err := executeCronJobSourceCommand(cronjobClient, nil, "delete", "testsource")
+	assert.NilError(t, err)
+	util.ContainsAll(out, "deleted", "mynamespace", "testsource", "cronjob")
+
+	cronJobRecorder.Validate()
+}
+
+func TestDeleteWithError(t *testing.T) {
+
+	cronjobClient := v1alpha12.NewMockKnCronJobSourceClient(t, "mynamespace")
+
+	cronJobRecorder := cronjobClient.Recorder()
+	cronJobRecorder.DeleteCronJobSource("testsource", errors.New("no such cronjob source testsource"))
+
+	out, err := executeCronJobSourceCommand(cronjobClient, nil, "delete", "testsource")
+	assert.ErrorContains(t, err, "testsource")
+	util.ContainsAll(out, "Usage", "no such", "testsource")
+
+	cronJobRecorder.Validate()
+}
diff --git a/pkg/kn/commands/source/cronjob/describe_test.go b/pkg/kn/commands/source/cronjob/describe_test.go
new file mode 100644
index 00000000..a175284f
--- /dev/null
+++ b/pkg/kn/commands/source/cronjob/describe_test.go
@@ -0,0 +1,78 @@
+// 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.
+
+package cronjob
+
+import (
+	"errors"
+	"testing"
+
+	"gotest.tools/assert"
+	corev1 "k8s.io/api/core/v1"
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"knative.dev/eventing/pkg/apis/sources/v1alpha1"
+	"knative.dev/pkg/apis/duck/v1beta1"
+
+	v1alpha12 "knative.dev/client/pkg/eventing/sources/v1alpha1"
+	"knative.dev/client/pkg/util"
+)
+
+func TestSimpleDescribe(t *testing.T) {
+	cronjobClient := v1alpha12.NewMockKnCronJobSourceClient(t, "mynamespace")
+
+	cronJobRecorder := cronjobClient.Recorder()
+	cronJobRecorder.GetCronJobSource("testsource", getCronJobSource(), nil)
+
+	out, err := executeCronJobSourceCommand(cronjobClient, nil, "describe", "testsource")
+	assert.NilError(t, err)
+	util.ContainsAll(out, "1 2 3 4 5", "honeymoon", "myservicenamespace", "mysvc", "Service", "testsource")
+
+	cronJobRecorder.Validate()
+
+}
+
+func TestDescribeError(t *testing.T) {
+	cronjobClient := v1alpha12.NewMockKnCronJobSourceClient(t, "mynamespace")
+
+	cronJobRecorder := cronjobClient.Recorder()
+	cronJobRecorder.GetCronJobSource("testsource", nil, errors.New("no cronjob source testsource"))
+
+	out, err := executeCronJobSourceCommand(cronjobClient, nil, "describe", "testsource")
+	assert.ErrorContains(t, err, "testsource")
+	util.ContainsAll(out, "Usage", "testsource")
+
+	cronJobRecorder.Validate()
+
+}
+
+func getCronJobSource() *v1alpha1.CronJobSource {
+	return &v1alpha1.CronJobSource{
+		TypeMeta: v1.TypeMeta{},
+		ObjectMeta: v1.ObjectMeta{
+			Name: "testsource",
+		},
+		Spec: v1alpha1.CronJobSourceSpec{
+			Schedule: "1 2 3 4 5",
+			Data:     "honeymoon",
+			Sink: &v1beta1.Destination{
+				Ref: &corev1.ObjectReference{
+					Kind:      "Service",
+					Namespace: "myservicenamespace",
+					Name:      "mysvc",
+				},
+			},
+		},
+		Status: v1alpha1.CronJobSourceStatus{},
+	}
+}
diff --git a/pkg/kn/commands/source/cronjob/update_test.go b/pkg/kn/commands/source/cronjob/update_test.go
new file mode 100644
index 00000000..b01821cd
--- /dev/null
+++ b/pkg/kn/commands/source/cronjob/update_test.go
@@ -0,0 +1,73 @@
+// 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.
+
+package cronjob
+
+import (
+	"errors"
+	"testing"
+
+	"gotest.tools/assert"
+	corev1 "k8s.io/api/core/v1"
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"knative.dev/eventing/pkg/apis/sources/v1alpha1"
+	"knative.dev/pkg/apis/duck/v1beta1"
+
+	v1alpha12 "knative.dev/client/pkg/eventing/sources/v1alpha1"
+	"knative.dev/client/pkg/util"
+)
+
+func TestSimpleUpdate(t *testing.T) {
+
+	cronjobClient := v1alpha12.NewMockKnCronJobSourceClient(t)
+
+	cronJobRecorder := cronjobClient.Recorder()
+	cronJobRecorder.GetCronJobSource("testsource", &v1alpha1.CronJobSource{
+		TypeMeta: v1.TypeMeta{},
+		ObjectMeta: v1.ObjectMeta{
+			Name: "testsource",
+		},
+		Spec: v1alpha1.CronJobSourceSpec{
+			Schedule: "1 2 3 4 5",
+			Data:     "maxwell",
+			Sink: &v1beta1.Destination{
+				Ref: &corev1.ObjectReference{
+					Kind: "Service",
+					Name: "mysvc",
+				},
+			},
+		},
+		Status: v1alpha1.CronJobSourceStatus{},
+	}, nil)
+	cronJobRecorder.UpdateCronJobSource(createCronJobSource("testsource", "* * * * */3", "maxwell", "mysvc"), nil)
+
+	out, err := executeCronJobSourceCommand(cronjobClient, nil, "update", "--schedule", "* * * * */3", "testsource")
+	assert.NilError(t, err)
+	util.ContainsAll(out, "updated", "default", "testsource")
+
+	cronJobRecorder.Validate()
+}
+
+func TestUpdateError(t *testing.T) {
+	cronjobClient := v1alpha12.NewMockKnCronJobSourceClient(t, "mynamespace")
+
+	cronJobRecorder := cronjobClient.Recorder()
+	cronJobRecorder.GetCronJobSource("testsource", nil, errors.New("no cronjob source testsource"))
+
+	out, err := executeCronJobSourceCommand(cronjobClient, nil, "update", "testsource")
+	assert.ErrorContains(t, err, "testsource")
+	util.ContainsAll(out, "Usage", "testsource")
+
+	cronJobRecorder.Validate()
+}
diff --git a/pkg/kn/commands/types_test.go b/pkg/kn/commands/types_test.go
index 559899a3..ca84cb05 100644
--- a/pkg/kn/commands/types_test.go
+++ b/pkg/kn/commands/types_test.go
@@ -80,7 +80,7 @@ func TestPrepareConfig(t *testing.T) {
 			LogHTTP:      tc.logHttp,
 		}
 
-		_, err := p.prepareRestConfig()
+		_, err := p.RestConfig()
 
 		switch len(tc.expectedErrString) {
 		case 0:
@@ -187,7 +187,8 @@ func TestNewSourcesClient(t *testing.T) {
 		}
 
 		if sourcesClient != nil {
-			assert.Assert(t, sourcesClient.Namespace() == namespace)
+			assert.Assert(t, sourcesClient.ApiServerSourcesClient().Namespace() == namespace)
+			assert.Assert(t, sourcesClient.CronJobSourcesClient().Namespace() == namespace)
 		}
 	}
 }
diff --git a/test/e2e/source_apiserver_test.go b/test/e2e/source_apiserver_test.go
new file mode 100644
index 00000000..7666777d
--- /dev/null
+++ b/test/e2e/source_apiserver_test.go
@@ -0,0 +1,86 @@
+// 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 im
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// +build e2e
+// +build !serving
+
+package e2e
+
+import (
+	"fmt"
+	"testing"
+
+	"gotest.tools/assert"
+	"knative.dev/client/pkg/util"
+)
+
+func TestSourceApiServer(t *testing.T) {
+	t.Parallel()
+	test := NewE2eTest(t)
+	test.Setup(t)
+	defer test.Teardown(t)
+
+	test.setupServiceAccountForApiserver(t, "mysa")
+	test.serviceCreate(t, "myservice")
+
+	t.Run("create apiserver source with a sink to a service", func(t *testing.T) {
+		test.apiServerSourceCreate(t, "firstsrc", "Eventing:v1:true", "mysa", "svc:myservice")
+		test.apiServerSourceCreate(t, "secondsrc", "Eventing,Namespace", "mysa", "svc:myservice")
+	})
+
+	t.Run("create apiserver source and delete it", func(t *testing.T) {
+		test.apiServerSourceDelete(t, "firstsrc")
+		test.apiServerSourceDelete(t, "secondsrc")
+	})
+
+	t.Run("create apiserver source with a missing sink service", func(t *testing.T) {
+		test.apiServerSourceCreateMissingSink(t, "wrongsrc", "Eventing:v1:true", "mysa", "svc:unknown")
+	})
+}
+
+func (test *e2eTest) apiServerSourceCreate(t *testing.T, srcName string, resources string, sa string, sink string) {
+	out, err := test.kn.RunWithOpts([]string{"source", "apiserver", "create", srcName,
+		"--resource", resources, "--service-account", sa, "--sink", sink}, runOpts{NoNamespace: false})
+	assert.NilError(t, err)
+	assert.Check(t, util.ContainsAllIgnoreCase(out, "ApiServerSource", srcName, "created", "namespace", test.kn.namespace))
+}
+
+func (test *e2eTest) apiServerSourceCreateMissingSink(t *testing.T, srcName string, resources string, sa string, sink string) {
+	_, err := test.kn.RunWithOpts([]string{"source", "apiserver", "create", srcName,
+		"--resource", resources, "--service-account", sa, "--sink", sink}, runOpts{NoNamespace: false, AllowError: true})
+	assert.ErrorContains(t, err, "services.serving.knative.dev", "not found")
+}
+
+func (test *e2eTest) apiServerSourceDelete(t *testing.T, srcName string) {
+	out, err := test.kn.RunWithOpts([]string{"source", "apiserver", "delete", srcName}, runOpts{NoNamespace: false})
+	assert.NilError(t, err)
+	assert.Check(t, util.ContainsAllIgnoreCase(out, "ApiServerSource", srcName, "deleted", "namespace", test.kn.namespace))
+}
+
+func (test *e2eTest) setupServiceAccountForApiserver(t *testing.T, name string) {
+	kubectl := kubectl{t, Logger{}}
+
+	_, err := kubectl.RunWithOpts([]string{"create", "serviceaccount", name}, runOpts{})
+	if err != nil {
+		t.Fatalf(fmt.Sprintf("Error executing 'kubectl create serviceaccount test-sa'. Error: %s", err.Error()))
+	}
+	_, err = kubectl.RunWithOpts([]string{"create", "clusterrole", "testsa-role", "--verb=get,list,watch", "--resource=events,namespaces"}, runOpts{})
+	if err != nil {
+		t.Fatalf(fmt.Sprintf("Error executing 'kubectl clusterrole testsa-role'. Error: %s", err.Error()))
+	}
+	_, err = kubectl.RunWithOpts([]string{"create", "clusterrolebinding", "testsa-binding", "--clusterrole=testsa-role", "--serviceaccount=" + test.kn.namespace + ":" + name}, runOpts{})
+	if err != nil {
+		t.Fatalf(fmt.Sprintf("Error executing 'kubectl clusterrolebinding testsa-binding'. Error: %s", err.Error()))
+	}
+}