Skip to content

Commit

Permalink
🎉 desired component controller
Browse files Browse the repository at this point in the history
  • Loading branch information
phantomnat authored and Pohfy123 committed Mar 17, 2020
1 parent 9e61e11 commit 11a1e6e
Show file tree
Hide file tree
Showing 73 changed files with 4,532 additions and 56 deletions.
109 changes: 75 additions & 34 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,46 +12,108 @@ commands:
circleci step halt
fi
version: 2
version: 2.1
jobs:
build:
docker:
- image: circleci/golang:1.12

working_directory: /go/src/github.com/agoda-com/samsahai
machine:
image: ubuntu-1604:201903-01

environment:
K8S_VERSION: v1.13.7
KUBECONFIG: /home/circleci/.kube/config
MINIKUBE_VERSION: v1.1.1
MINIKUBE_WANTUPDATENOTIFICATION: false
MINIKUBE_WANTREPORTERRORPROMPT: false
MINIKUBE_HOME: /home/circleci
CHANGE_MINIKUBE_NONE_USER: true
GOPATH: /home/circleci/go
POD_NAMESPACE: default
GOVERSION: 1.12.5
OS: linux
ARCH: amd64

working_directory: /home/circleci/go/src/github.com/agoda-com/samsahai
steps:

- checkout
- setup_remote_docker

- run:
name: install Go
command: |
go version
go env GOROOT
mkdir tmp
cd tmp
sudo rm -rf /usr/local/go
wget https://storage.googleapis.com/golang/go$GOVERSION.$OS-$ARCH.tar.gz
sudo tar -C /usr/local -xzf go$GOVERSION.$OS-$ARCH.tar.gz
go version
- run:
name: Prepared Env vars.
command: |
echo 'export docker_user="$QUAY_DOCKER_USER"' >> $BASH_ENV
echo 'export docker_registry="$QUAY_DOCKER_REGISTRY"' >> $BASH_ENV
echo 'export docker_image_repo="phantomnat/samsahai"' >> $BASH_ENV
# echo 'export docker_image_tag="latest"' >> $BASH_ENV
- run:
name: "get required projects"
name: "install dependencies"
command: |
make install-dep
make dep-kubebuilder-linux
echo 'export GO111MODULE="on"' >> $BASH_ENV
echo 'export PATH=$PATH:/usr/local/kubebuilder/bin:$(go env GOPATH)/bin' >> $BASH_ENV
export GO111MODULE=on
go mod tidy
- run:
name: "install dependencies"
name: "unit env"
command: |
go mod tidy
echo PATH=$PATH
ls -al $(go env GOPATH)/bin | grep goimports
ls -al $(go env GOPATH)/bin | grep govvv
# - run:
# name: "run unit test"
# command: |
# echo KUBECONFIG=${KUBECONFIG}
# echo GO111MODULE=${GO111MODULE}
# make unit-test

# spin up minikube
- run:
name: Setup kubectl
command: |
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/${K8S_VERSION}/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
mkdir -p ${HOME}/.kube
touch ${HOME}/.kube/config
- run:
name: Setup minikube
command: |
curl -Lo minikube https://github.com/kubernetes/minikube/releases/download/${MINIKUBE_VERSION}/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
- run:
name: Start minikube
command: |
sudo -E minikube start --vm-driver=none --cpus 2 --memory 4096 --kubernetes-version=${K8S_VERSION}
- run:
name: "e2e verify"
command: |
minikube status
kubectl version
kubectl cluster-info
docker version
# run e2e test
- run:
name: "run test"
name: "run e2e test"
command: |
echo KUBECONFIG=${KUBECONFIG}
echo GO111MODULE=${GO111MODULE}
make coverage
make e2e-test
bash <(curl -s https://codecov.io/bash)
- persist_to_workspace:
root: /
root: /home/circleci/
paths:
- go

Expand Down Expand Up @@ -81,27 +143,6 @@ jobs:
make docker-tag-n-push-latest
fi
# - save_cache:
# key: project-{{ checksum "project.clj" }}
# paths:
# - /go

# code-coverage:
# docker:
# - image: circleci/golang:1.12
#
# working_directory: /go/src/github.com/agoda-com/samsahai
# steps:
# - persist_to_workspace:
# root: /
# paths:
# - go
#
# - run:
# name: codecov
# command: |
# bash <(curl -s https://codecov.io/bash)

publish-github-release:
docker:
- image: circleci/golang:1.12
Expand Down
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
.DS_Store

out/
bin/

vendor/

coverage.out
coverage.txt
coverage.txt
cover.out
17 changes: 17 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Build the manager binary
FROM golang:1.10.3 as builder

# Copy in the go src
WORKDIR /go/src/github.com/agoda-com/samsahai
COPY pkg/ pkg/
COPY cmd/ cmd/
COPY vendor/ vendor/

# Build
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o manager github.com/agoda-com/samsahai/cmd/manager

# Copy the controller-manager into a thin image
FROM ubuntu:latest
WORKDIR /
COPY --from=builder /go/src/github.com/agoda-com/samsahai/manager .
ENTRYPOINT ["/manager"]
87 changes: 75 additions & 12 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ package_name := github.com/agoda-com/samsahai
app_name := samsahai
output_path := ./out
go_ldflags ?= $(shell govvv -flags -pkg $(shell go list ./internal/samsahai))
golangci_lint_version := v1.15.0
golangci_lint_version := 1.17.1
kubebuilder_version := 1.0.8
GO111MODULE ?= on

.PHONY: init
init: tidy install-dep install
Expand All @@ -18,20 +20,64 @@ install-dep:
GO111MODULE=off go get github.com/ahmetb/govvv
GO111MODULE=off go get golang.org/x/tools/cmd/goimports
# install golangci-lint
@curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | \
sh -s -- -b $(shell go env GOPATH)/bin $(golangci_lint_version)
@curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | \
sh -s -- -b $(shell go env GOPATH)/bin v$(golangci_lint_version)

@echo 'done!'

dep-kubebuilder-osx:
@version=$(kubebuilder_version) && \
os=darwin && \
arch=amd64 && \
\
filename=kubebuilder_$${version}_$${os}_$${arch} && \
echo $$filename && \
\
curl -LO "https://github.com/kubernetes-sigs/kubebuilder/releases/download/v$${version}/$${filename}.tar.gz" && \
\
tar -zxvf $${filename}.tar.gz && \
mv $${filename} kubebuilder && \
sudo rm -rf /usr/local/kubebuilder/ && \
sudo mv kubebuilder /usr/local/ && \
rm -f $${filename}

@echo "Please add '/usr/local/kubebuilder/bin' to PATH"

dep-kubebuilder-linux:
@version=$(kubebuilder_version) && \
os=linux && \
arch=amd64 && \
\
filename=kubebuilder_$${version}_$${os}_$${arch} && \
echo $$filename && \
\
curl -LO "https://github.com/kubernetes-sigs/kubebuilder/releases/download/v$${version}/$${filename}.tar.gz" && \
\
tar -zxvf $${filename}.tar.gz && \
mv $${filename} kubebuilder && \
sudo rm -rf /usr/local/kubebuilder/ && \
sudo mv kubebuilder /usr/local/ && \
rm -f $${filename}

.PHONY: format
format:
hash goimports &> /dev/null || go get golang.org/x/tools/cmd/goimports
gofmt -w .
goimports -w .

.PHONY: lint
lint: format
GO111MODULE=on golangci-lint run

.PHONY: build
build: format
GO111MODULE=on go build -ldflags="$(go_ldflags)" -o $(output_path)/$(app_name) cmd/main.go

.PHONY: build-plugin-public-registry-checker
build-plugin-public-registry-checker: plugin_name=publicregistry-checker
build-plugin-public-registry-checker: plugin_path=./plugins/publicregistry/
build-plugin-public-registry-checker: build-plugin

.PHONY: install
install: build
cp $(output_path)/$(app_name) $$GOPATH/bin/$(app_name)
Expand Down Expand Up @@ -59,18 +105,16 @@ golangci-lint-check-version:
exit 1; \
fi

.PHONY: coverage
coverage: format
GO111MODULE=on golangci-lint run
GO111MODULE=on go test -race -v `go list ./internal/... | grep -v cmd` -coverprofile=coverage.txt -covermode=atomic
.PHONY: unit-test
unit-test: format lint
./scripts/unit-test.sh

.PHONY: cover-badge
cover-badge: coverage
gopherbadger \
-covercmd "go tool cover -func=coverage.txt"
.PHONY: e2e-test
e2e-test: install-crds
./scripts/e2e-test.sh

.PHONY: coverage-html
coverage-html: coverage
coverage-html:
go tool cover -html=coverage.txt

.PHONY: docker-login-b64
Expand All @@ -95,3 +139,22 @@ docker-tag-n-push-latest:
docker tag $(docker_registry)/$(docker_image_repo):$(docker_image_tag) $(docker_registry)/$(docker_image_repo):latest; \
docker push $(docker_registry)/$(docker_image_repo):latest; \
fi

# Generate code
generate:
ifndef GOPATH
$(error GOPATH not defined, please define GOPATH. Run "go help gopath" to learn more about GOPATH)
endif
#go mod edit -require k8s.io/code-generator@v0.0.0-20190612125529-c522cb6c26aa
GO111MODULE=off go get k8s.io/code-generator || echo 'ignore error.'
go generate ./internal/apis/...

manifests:
go mod edit -require sigs.k8s.io/controller-tools@v0.1.10
go get sigs.k8s.io/controller-tools
go run $$GOPATH/pkg/mod/sigs.k8s.io/controller-tools@v0.1.10/cmd/controller-gen/main.go crd --apis-path internal/apis
go run $$GOPATH/pkg/mod/sigs.k8s.io/controller-tools@v0.1.10/cmd/controller-gen/main.go rbac \
--name desired-component --input-dir internal/desiredcomponent --output-dir config/rbac/desiredcomponent

install-crds: generate manifests
kubectl apply -f ./config/crds
3 changes: 3 additions & 0 deletions PROJECT
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
version: "1"
domain: samsahai.io
repo: github.com/agoda-com/samsahai
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,3 @@

### Related Projects:
- [`go get github.com/ahmetb/govvv`](https://github.com/ahmetb/govvv) - Add version info to Golang app.
- [`go get github.com/jpoles1/gopherbadger`](https://github.com/jpoles1/gopherbadger) - Generate code coverage badge
Loading

0 comments on commit 11a1e6e

Please sign in to comment.