# Development

This doc explains how to setup a development environment so you can get started
[contributing](https://www.knative.dev/contributing/) to `Knative Client`.
Also take a look at:

- [The pull request workflow](https://www.knative.dev/contributing/reviewing/)

## Prerequisites

Follow the instructions below to set up your development environment. Once you
meet these requirements, you can make changes and
[build your own version of Knative Client](#building-knative-client)!

Before submitting a PR, see also [contribution guide](https://www.knative.dev/contributing/).

### Sign up for GitHub

Start by creating [a GitHub account](https://github.com/join), then setup
[GitHub access via SSH](https://help.github.com/articles/connecting-to-github-with-ssh/).

### Install requirements

You must install these tools:

1. [`go`](https://golang.org/doc/install): The language `Knative Client` is
   built in (1.11.4 or later)
1. [`git`](https://help.github.com/articles/set-up-git/): For source control
1. [`kubectl`](https://kubernetes.io/docs/tasks/tools/install-kubectl/): For
   managing development environments

### Create a cluster

1. [Set up a Knative](https://www.knative.dev/docs/install/)
   - You can also setup using limited install guides for eg: Minikube/Minishift.

### Checkout your fork

To check out this repository:

1. Create your own [fork of this repo](https://help.github.com/articles/fork-a-repo/)
1. Clone it to your machine:

```sh
git clone git@github.com:${YOUR_GITHUB_USERNAME}/client.git
cd client
git remote add upstream git@github.com:knative/client.git
git remote set-url --push upstream no_push
```

_Adding the `upstream` remote sets you up nicely for regularly
[syncing your fork](https://help.github.com/articles/syncing-a-fork/)._

Once you reach this point you are ready to do a full build and test as
described below.

## Building Knative Client

Once you've [setup your development environment](#prerequisites), let's build
`Knative Client`.

**Dependencies:**

[go mod](https://github.com/golang/go/wiki/Modules#quick-start) is used and required for dependencies.

**Building:**

```sh
$ hack/build.sh
```

It builds `kn` binary in your current directory. You can start playing with it.

**Notes:**

- For building, Go `1.11.4` is required [due to a go mod issue](https://github.com/golang/go/issues/27925).
- If you are building in your `$GOPATH` folder, you need to specify `GO111MODULE` for building it

```sh
# if you are building in your $GOPATH
GO111MODULE=on go build ./cmd/...
```

You can now try updating code for client and test out the changes by building the `kn` binary.
