5.7 KiB
Contributing
Before You Start
You must install and run the ArgoCD using a local Kubernetes (e.g. Docker for Desktop or Minikube) first. This will help you understand the application, but also get your local environment set-up.
Then, to get a good grounding in Go, try out the tutorial.
Pre-requisites
Install:
- docker
- golang
- dep
- protobuf
- ksonnet
- helm
- kustomize
- go-swagger
- jq
- kubectl
- kubectx
- minikube or Docker for Desktop
Brew users can quickly install the lot:
brew tap go-swagger/go-swagger
brew install go dep protobuf kubectl kubectx ksonnet/tap/ks kubernetes-helm jq go-swagger kustomize
!!! note "Kustomize"
Since Argo CD supports Kustomize v1.0 and v2.0, you will need to install both versions in order for the unit tests to run. The Kustomize 1 unit test expects to find a kustomize1 binary in the path. You can use this link to find the Kustomize 1 currently used by Argo CD and modify the curl command to download the correct OS.
Set up environment variables (e.g. is ~/.bashrc):
export GOPATH=~/go
export PATH=$PATH:$GOPATH/bin
Checkout the code:
go get -u github.com/argoproj/argo-cd
cd ~/go/src/github.com/argoproj/argo-cd
Install go dependencies:
go get github.com/gobuffalo/packr/packr
go get github.com/gogo/protobuf/gogoproto
go get github.com/golang/protobuf/protoc-gen-go
go get github.com/golangci/golangci-lint/cmd/golangci-lint
go get github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
go get github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
go get github.com/jstemmer/go-junit-report
go get github.com/mattn/goreman
go get golang.org/x/tools/cmd/goimports
Building
make
The make command can take a while, and we recommend building the specific component you are working on
make codegen- Builds protobuf and swagger filesmake cli- Make the argocd CLI toolmake server- Make the API/repo/controller servermake argocd-util- Make the administrator's utility, used for certain tasks such as import/export
Running Tests
To run unit tests:
make test
Check out the following documentation for instructions on running the e2e tests.
Running Locally
It is much easier to run and debug if you run ArgoCD on your local machine than in the Kubernetes cluster.
You should scale the deployments to zero:
kubectl -n argocd scale deployment.extensions/argocd-application-controller --replicas 0
kubectl -n argocd scale deployment.extensions/argocd-dex-server --replicas 0
kubectl -n argocd scale deployment.extensions/argocd-repo-server --replicas 0
kubectl -n argocd scale deployment.extensions/argocd-server --replicas 0
kubectl -n argocd scale deployment.extensions/argocd-redis --replicas 0
Then checkout and build the UI next to your code
cd ~/go/src/github.com/argoproj
git clone git@github.com:argoproj/argo-cd-ui.git
Follow the UI's README to build it.
Note: you'll need to use the https://localhost:6443 cluster now.
Then start the services:
cd ~/go/src/github.com/argoproj/argo-cd
make start
You can now execute argocd command against your locally running ArgoCD by appending --server localhost:8080 --plaintext --insecure, e.g.:
argocd app set guestbook --path guestbook --repo https://github.com/argoproj/argocd-example-apps.git --dest-server https://localhost:6443 --dest-namespace default --server localhost:8080 --plaintext --insecure
You can open the UI: http://localhost:8080
Note: you'll need to use the https://kubernetes.default.svc cluster now.
Running Local Containers
You may need to run containers locally, so here's how:
Create login to Docker Hub, then login.
docker login
Add your username as the environment variable, e.g. to your ~/.bash_profile:
export IMAGE_NAMESPACE=alexcollinsintuit
If you have not built the UI image (see the UI README), then do the following:
docker pull argoproj/argocd-ui:latest
docker tag argoproj/argocd-ui:latest $IMAGE_NAMESPACE/argocd-ui:latest
docker push $IMAGE_NAMESPACE/argocd-ui:latest
Build the images:
DOCKER_PUSH=true make image
Update the manifests:
make manifests
Install the manifests:
kubectl -n argocd apply --force -f manifests/install.yaml
Scale your deployments up:
kubectl -n argocd scale deployment.extensions/argocd-application-controller --replicas 1
kubectl -n argocd scale deployment.extensions/argocd-dex-server --replicas 1
kubectl -n argocd scale deployment.extensions/argocd-repo-server --replicas 1
kubectl -n argocd scale deployment.extensions/argocd-server --replicas 1
kubectl -n argocd scale deployment.extensions/argocd-redis --replicas 1
Now you can set-up the port-forwarding and open the UI or CLI.
Pre-commit Checks
Before you commit, make sure you've formatted and linted your code, or your PR will fail CI:
make pre-commit