From 61a7a1a15cb4d946691ab18e323876a3bf6b8a37 Mon Sep 17 00:00:00 2001 From: Dan Sun Date: Sun, 30 Aug 2020 03:13:16 -0400 Subject: [PATCH 1/9] Add travis ci --- .travis.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..c40e9f4e54 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,17 @@ +jobs: + include: + - name: "Go unit tests, gofmt, golint and coveralls" + language: go + go: "1.14.2" + go_import_path: github.com/kubeflow/kfserving + install: + - os=$(go env GOOS) + - arch=$(go env GOARCH) + - curl -L -O "https://go.kubebuilder.io/dl/2.3.1/${os}/${arch}" | tar -xz -C /tmp/ + - sudo mv kubebuilder_2.3.1_${os}_${arch} /usr/local/kubebuilder + - export PATH=$PATH:/usr/local/kubebuilder/bin + # get coveralls.io support + - go get github.com/mattn/goveralls + script: + - make test + - goveralls -coverprofile=coverage.out From 2100b1e8598b2f10f09c8355ce22b1bac786ba26 Mon Sep 17 00:00:00 2001 From: Dan Sun Date: Sun, 30 Aug 2020 03:16:21 -0400 Subject: [PATCH 2/9] Download kubebuilder --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c40e9f4e54..ee7730f82e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ jobs: install: - os=$(go env GOOS) - arch=$(go env GOARCH) - - curl -L -O "https://go.kubebuilder.io/dl/2.3.1/${os}/${arch}" | tar -xz -C /tmp/ + - curl -L "https://go.kubebuilder.io/dl/2.3.1/${os}/${arch}" | tar -xz -C /tmp/ - sudo mv kubebuilder_2.3.1_${os}_${arch} /usr/local/kubebuilder - export PATH=$PATH:/usr/local/kubebuilder/bin # get coveralls.io support From 722e546d58188b1370c93ad69fd254db2811722d Mon Sep 17 00:00:00 2001 From: Dan Sun Date: Sun, 30 Aug 2020 03:30:45 -0400 Subject: [PATCH 3/9] Fix mv dir --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ee7730f82e..7dfd863995 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,7 @@ jobs: - os=$(go env GOOS) - arch=$(go env GOARCH) - curl -L "https://go.kubebuilder.io/dl/2.3.1/${os}/${arch}" | tar -xz -C /tmp/ - - sudo mv kubebuilder_2.3.1_${os}_${arch} /usr/local/kubebuilder + - sudo mv /tmp/kubebuilder_2.3.1_${os}_${arch} /usr/local/kubebuilder - export PATH=$PATH:/usr/local/kubebuilder/bin # get coveralls.io support - go get github.com/mattn/goveralls From 2284b830bfccbc5df7afdd0411be9daec4e6a9c3 Mon Sep 17 00:00:00 2001 From: Dan Sun Date: Sun, 30 Aug 2020 03:47:37 -0400 Subject: [PATCH 4/9] Add go coverage --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 6094d76793..5647f9988c 100644 --- a/Makefile +++ b/Makefile @@ -22,7 +22,7 @@ all: test manager logger batcher # Run tests test: fmt vet manifests - go test ./pkg/... ./cmd/... -coverprofile cover.out + go test ./pkg/... ./cmd/... -coverprofile coverage.out # Build manager binary manager: generate fmt vet lint From 0cebdde96a81e495c7195502716112251067df49 Mon Sep 17 00:00:00 2001 From: Dan Sun Date: Sun, 30 Aug 2020 04:01:32 -0400 Subject: [PATCH 5/9] Create go.yml --- .github/workflows/go.yml | 37 +++++++++++++++++++++++++++++++++++++ Makefile | 15 ++++++++++++++- go.sum | 1 + 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/go.yml diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml new file mode 100644 index 0000000000..5d0c0be10a --- /dev/null +++ b/.github/workflows/go.yml @@ -0,0 +1,37 @@ +name: Go + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + + build: + name: Build + runs-on: ubuntu-latest + steps: + + - name: Set up Go 1.x + uses: actions/setup-go@v2 + with: + go-version: ^1.14 + id: go + + - name: Check out code into the Go module directory + uses: actions/checkout@v2 + + - name: Get dependencies + run: | + go get -v -t -d ./... + if [ -f Gopkg.toml ]; then + curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh + dep ensure + fi + + - name: Test + run: | + export GOPATH=/home/runner/go + export PATH=$PATH:/usr/local/kubebuilder/bin + make test diff --git a/Makefile b/Makefile index 5647f9988c..6b043cdad8 100644 --- a/Makefile +++ b/Makefile @@ -94,7 +94,7 @@ undeploy-dev: kubectl delete mutatingwebhookconfigurations.admissionregistration.k8s.io inferenceservice.serving.kubeflow.org # Generate manifests e.g. CRD, RBAC etc. -manifests: controller-gen +manifests: controller-gen kubebuilder $(CONTROLLER_GEN) $(CRD_OPTIONS) paths=./pkg/apis/serving/v1alpha2/... output:crd:dir=config/crd $(CONTROLLER_GEN) rbac:roleName=kfserving-manager-role paths=./pkg/controller/... output:rbac:artifacts:config=config/rbac $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths=./pkg/apis/serving/v1alpha2 @@ -184,6 +184,19 @@ docker-build-storageInitializer: docker-push-storageInitializer: docker-build-storageInitializer docker push ${KO_DOCKER_REPO}/${STORAGE_INIT_IMG} +kubebuilder: +ifeq (, $(shell which kubebuilder)) + @{ \ + set -e ;\ + os=$$(go env GOOS) ; \ + arch=$$(go env GOARCH) ;\ + curl -L "https://go.kubebuilder.io/dl/2.3.1/$${os}/$${arch}" | tar -xz -C /tmp/ ;\ + sudo mkdir -p /usr/local/kubebuilder/bin/ ;\ + sudo mv /tmp/kubebuilder_2.3.1_$${os}_$${arch}/bin/* /usr/local/kubebuilder/bin/ ;\ + echo "Add /usr/local/kubebuilder/bin/ to your PATH!!" ;\ + } +endif + controller-gen: ifeq (, $(shell which controller-gen)) @{ \ diff --git a/go.sum b/go.sum index b2b40268fe..7dbe26df03 100644 --- a/go.sum +++ b/go.sum @@ -133,6 +133,7 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/getkin/kin-openapi v0.2.0 h1:PbHHtYZpjKwZtGlIyELgA2DploRrsaXztoNNx9HjwNY= github.com/getkin/kin-openapi v0.2.0/go.mod h1:V1z9xl9oF5Wt7v32ne4FmiF1alpS4dM6mNzoywPOXlk= From 3f67078e4257f864ef37451a759ca15872b34628 Mon Sep 17 00:00:00 2001 From: Dan Sun Date: Sun, 30 Aug 2020 05:39:10 -0400 Subject: [PATCH 6/9] Use github action for unit test --- .travis.yml | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 7dfd863995..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -jobs: - include: - - name: "Go unit tests, gofmt, golint and coveralls" - language: go - go: "1.14.2" - go_import_path: github.com/kubeflow/kfserving - install: - - os=$(go env GOOS) - - arch=$(go env GOARCH) - - curl -L "https://go.kubebuilder.io/dl/2.3.1/${os}/${arch}" | tar -xz -C /tmp/ - - sudo mv /tmp/kubebuilder_2.3.1_${os}_${arch} /usr/local/kubebuilder - - export PATH=$PATH:/usr/local/kubebuilder/bin - # get coveralls.io support - - go get github.com/mattn/goveralls - script: - - make test - - goveralls -coverprofile=coverage.out From 47cd30c149128d411d5983da442bef706b1a4a9e Mon Sep 17 00:00:00 2001 From: Dan Sun Date: Tue, 1 Sep 2020 19:27:52 -0400 Subject: [PATCH 7/9] Move unit test to github action --- .github/workflows/go.yml | 4 ---- test/workflows/components/workflows.libsonnet | 4 ---- 2 files changed, 8 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 5d0c0be10a..4bef00acd4 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -25,10 +25,6 @@ jobs: - name: Get dependencies run: | go get -v -t -d ./... - if [ -f Gopkg.toml ]; then - curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh - dep ensure - fi - name: Test run: | diff --git a/test/workflows/components/workflows.libsonnet b/test/workflows/components/workflows.libsonnet index 5a036c0711..2d8277eaa9 100644 --- a/test/workflows/components/workflows.libsonnet +++ b/test/workflows/components/workflows.libsonnet @@ -205,10 +205,6 @@ template: "checkout", }], [ - { - name: "unit-test", - template: "unit-test", - }, { name: "sdk-test", template: "sdk-test", From 0d6730b283a104a2692c5d6ebf28a7d8b10be75c Mon Sep 17 00:00:00 2001 From: Dan Sun Date: Tue, 1 Sep 2020 20:16:19 -0400 Subject: [PATCH 8/9] Remove kubebuilder dep for manifests gen --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 6b043cdad8..56b299f15c 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ $(shell perl -pi -e 's/memory:.*/memory: $(KFSERVING_CONTROLLER_MEMORY_LIMIT)/' all: test manager logger batcher # Run tests -test: fmt vet manifests +test: fmt vet manifests kubebuilder go test ./pkg/... ./cmd/... -coverprofile coverage.out # Build manager binary @@ -94,7 +94,7 @@ undeploy-dev: kubectl delete mutatingwebhookconfigurations.admissionregistration.k8s.io inferenceservice.serving.kubeflow.org # Generate manifests e.g. CRD, RBAC etc. -manifests: controller-gen kubebuilder +manifests: controller-gen $(CONTROLLER_GEN) $(CRD_OPTIONS) paths=./pkg/apis/serving/v1alpha2/... output:crd:dir=config/crd $(CONTROLLER_GEN) rbac:roleName=kfserving-manager-role paths=./pkg/controller/... output:rbac:artifacts:config=config/rbac $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths=./pkg/apis/serving/v1alpha2 From b24ada5e7804affec6b44eb600fb4aa74b1644d0 Mon Sep 17 00:00:00 2001 From: Dan Sun Date: Tue, 1 Sep 2020 20:32:55 -0400 Subject: [PATCH 9/9] Add retry on update --- cmd/manager/main.go | 14 +++++++------- pkg/controller/inferenceservice/controller_test.go | 10 ++++++++-- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/cmd/manager/main.go b/cmd/manager/main.go index 60c58e6adc..49ae01b034 100644 --- a/cmd/manager/main.go +++ b/cmd/manager/main.go @@ -18,6 +18,10 @@ package main import ( "flag" + "github.com/kubeflow/kfserving/pkg/apis/serving/v1alpha2" + "github.com/kubeflow/kfserving/pkg/apis/serving/v1beta1" + v1alph2controller "github.com/kubeflow/kfserving/pkg/controller/inferenceservice" + trainedmodelcontroller "github.com/kubeflow/kfserving/pkg/controller/v1beta1/trainedmodel" "github.com/kubeflow/kfserving/pkg/controller/v1beta1/trainedmodel/reconcilers/modelconfig" "github.com/kubeflow/kfserving/pkg/webhook/admission/inferenceservice" "github.com/kubeflow/kfserving/pkg/webhook/admission/pod" @@ -26,20 +30,16 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/kubernetes" typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1" + _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" "k8s.io/client-go/tools/record" + knservingv1 "knative.dev/serving/pkg/apis/serving/v1" "os" ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/webhook" - "github.com/kubeflow/kfserving/pkg/apis/serving/v1alpha2" - "github.com/kubeflow/kfserving/pkg/apis/serving/v1beta1" - v1alph2controller "github.com/kubeflow/kfserving/pkg/controller/inferenceservice" - trainedmodelcontroller "github.com/kubeflow/kfserving/pkg/controller/v1beta1/trainedmodel" - _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" - knservingv1 "knative.dev/serving/pkg/apis/serving/v1" "sigs.k8s.io/controller-runtime/pkg/client/config" "sigs.k8s.io/controller-runtime/pkg/manager" logf "sigs.k8s.io/controller-runtime/pkg/runtime/log" "sigs.k8s.io/controller-runtime/pkg/runtime/signals" + "sigs.k8s.io/controller-runtime/pkg/webhook" ) var ( diff --git a/pkg/controller/inferenceservice/controller_test.go b/pkg/controller/inferenceservice/controller_test.go index 14ff31b04b..0e9ba1a0bd 100644 --- a/pkg/controller/inferenceservice/controller_test.go +++ b/pkg/controller/inferenceservice/controller_test.go @@ -18,6 +18,7 @@ package service import ( "fmt" + "k8s.io/client-go/util/retry" "reflect" "sort" "time" @@ -846,7 +847,9 @@ var _ = Describe("test inference service controller", func() { // Canary service should be removed during reconcile canaryUpdate.Spec.Canary = nil canaryUpdate.Spec.CanaryTrafficPercent = 0 - g.Expect(k8sClient.Update(context.TODO(), canaryUpdate)).NotTo(gomega.HaveOccurred()) + err := retry.RetryOnConflict(retry.DefaultRetry, func() error { + return k8sClient.Update(context.TODO(), canaryUpdate) + }) // Need to wait for update propagate back to controller before checking canaryDelete := &kfserving.InferenceService{} g.Eventually(func() bool { @@ -856,7 +859,10 @@ var _ = Describe("test inference service controller", func() { return canaryDelete.Spec.Canary == nil }, timeout).Should(gomega.BeTrue()) // Trigger another reconcile - g.Expect(k8sClient.Update(context.TODO(), canaryDelete)).NotTo(gomega.HaveOccurred()) + err = retry.RetryOnConflict(retry.DefaultRetry, func() error { + return k8sClient.Update(context.TODO(), canaryDelete) + }) + g.Expect(err).NotTo(gomega.HaveOccurred()) defaultService = &knservingv1.Service{} g.Eventually(func() error { return k8sClient.Get(context.TODO(), defaultPredictor, defaultService) }, timeout).