volcano.sh/volcano@v1.9.0/Makefile (about) 1 # Copyright 2019 The Volcano Authors. 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # you may not use this file except in compliance with the License. 5 # You may obtain a copy of the License at 6 # 7 # http://www.apache.org/licenses/LICENSE-2.0 8 # 9 # Unless required by applicable law or agreed to in writing, software 10 # distributed under the License is distributed on an "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 15 BIN_DIR=_output/bin 16 RELEASE_DIR=_output/release 17 REPO_PATH=volcano.sh/volcano 18 IMAGE_PREFIX=volcanosh 19 CRD_OPTIONS ?= "crd:crdVersions=v1,generateEmbeddedObjectMeta=true" 20 CRD_OPTIONS_EXCLUDE_DESCRIPTION=${CRD_OPTIONS}",maxDescLen=0" 21 CC ?= "gcc" 22 SUPPORT_PLUGINS ?= "no" 23 CRD_VERSION ?= v1 24 BUILDX_OUTPUT_TYPE ?= "docker" 25 26 # Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) 27 ifeq (,$(shell go env GOBIN)) 28 GOBIN=$(shell go env GOPATH)/bin 29 else 30 GOBIN=$(shell go env GOBIN) 31 endif 32 33 OS=$(shell uname -s) 34 35 # Get OS architecture 36 OSARCH=$(shell uname -m) 37 ifeq ($(OSARCH),x86_64) 38 GOARCH?=amd64 39 else ifeq ($(OSARCH),x64) 40 GOARCH?=amd64 41 else ifeq ($(OSARCH),aarch64) 42 GOARCH?=arm64 43 else ifeq ($(OSARCH),aarch64_be) 44 GOARCH?=arm64 45 else ifeq ($(OSARCH),armv8b) 46 GOARCH?=arm64 47 else ifeq ($(OSARCH),armv8l) 48 GOARCH?=arm64 49 else ifeq ($(OSARCH),i386) 50 GOARCH?=x86 51 else ifeq ($(OSARCH),i686) 52 GOARCH?=x86 53 else ifeq ($(OSARCH),arm) 54 GOARCH?=arm 55 else 56 GOARCH?=$(OSARCH) 57 endif 58 59 # Run `make images DOCKER_PLATFORMS="linux/amd64,linux/arm64" BUILDX_OUTPUT_TYPE=registry IMAGE_PREFIX=[yourregistry]` to push multi-platform 60 DOCKER_PLATFORMS ?= "linux/${GOARCH}" 61 62 GOOS ?= linux 63 64 include Makefile.def 65 66 .EXPORT_ALL_VARIABLES: 67 68 all: vc-scheduler vc-controller-manager vc-webhook-manager vcctl command-lines 69 70 init: 71 mkdir -p ${BIN_DIR} 72 mkdir -p ${RELEASE_DIR} 73 74 vc-scheduler: init 75 if [ ${SUPPORT_PLUGINS} = "yes" ];then\ 76 CC=${CC} CGO_ENABLED=1 go build -ldflags ${LD_FLAGS} -o ${BIN_DIR}/vc-scheduler ./cmd/scheduler;\ 77 else\ 78 CC=${CC} CGO_ENABLED=0 go build -ldflags ${LD_FLAGS} -o ${BIN_DIR}/vc-scheduler ./cmd/scheduler;\ 79 fi; 80 81 vc-controller-manager: init 82 CC=${CC} CGO_ENABLED=0 go build -ldflags ${LD_FLAGS} -o ${BIN_DIR}/vc-controller-manager ./cmd/controller-manager 83 84 vc-webhook-manager: init 85 CC=${CC} CGO_ENABLED=0 go build -ldflags ${LD_FLAGS} -o ${BIN_DIR}/vc-webhook-manager ./cmd/webhook-manager 86 87 vcctl: init 88 if [ ${OS} = 'Darwin' ];then\ 89 CC=${CC} CGO_ENABLED=0 GOOS=darwin go build -ldflags ${LD_FLAGS} -o ${BIN_DIR}/vcctl ./cmd/cli;\ 90 else\ 91 CC=${CC} CGO_ENABLED=0 go build -ldflags ${LD_FLAGS} -o ${BIN_DIR}/vcctl ./cmd/cli;\ 92 fi; 93 94 image_bins: vc-scheduler vc-controller-manager vc-webhook-manager 95 96 images: 97 for name in controller-manager scheduler webhook-manager; do\ 98 docker buildx build -t "${IMAGE_PREFIX}/vc-$$name:$(TAG)" . -f ./installer/dockerfile/$$name/Dockerfile --output=type=${BUILDX_OUTPUT_TYPE} --platform ${DOCKER_PLATFORMS} --build-arg APK_MIRROR=${APK_MIRROR}; \ 99 done 100 101 generate-code: 102 ./hack/update-gencode.sh 103 104 # Generate manifests e.g. CRD, RBAC etc. 105 manifests: controller-gen 106 go mod vendor 107 # volcano crd base 108 $(CONTROLLER_GEN) $(CRD_OPTIONS) paths="./vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1;./vendor/volcano.sh/apis/pkg/apis/batch/v1alpha1;./vendor/volcano.sh/apis/pkg/apis/bus/v1alpha1;./vendor/volcano.sh/apis/pkg/apis/nodeinfo/v1alpha1" output:crd:artifacts:config=config/crd/volcano/bases 109 # generate volcano job crd yaml without description to avoid yaml size limit when using `kubectl apply` 110 $(CONTROLLER_GEN) $(CRD_OPTIONS_EXCLUDE_DESCRIPTION) paths="./vendor/volcano.sh/apis/pkg/apis/batch/v1alpha1" output:crd:artifacts:config=config/crd/volcano/bases 111 # volcano crd v1beta1 112 $(CONTROLLER_GEN) "crd:crdVersions=v1beta1" paths="./vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1;./vendor/volcano.sh/apis/pkg/apis/batch/v1alpha1;./vendor/volcano.sh/apis/pkg/apis/bus/v1alpha1;./vendor/volcano.sh/apis/pkg/apis/nodeinfo/v1alpha1" output:crd:artifacts:config=config/crd/volcano/v1beta1 113 # generate volcano job crd yaml without description to avoid yaml size limit when using `kubectl apply` 114 $(CONTROLLER_GEN) "crd:maxDescLen=0,crdVersions=v1beta1" paths="./vendor/volcano.sh/apis/pkg/apis/batch/v1alpha1" output:crd:artifacts:config=config/crd/volcano/v1beta1 115 # jobflow crd base 116 $(CONTROLLER_GEN) $(CRD_OPTIONS) paths="./vendor/volcano.sh/apis/pkg/apis/flow/v1alpha1" output:crd:artifacts:config=config/crd/jobflow/bases 117 # generate volcano jobflow crd yaml without description to avoid yaml size limit when using `kubectl apply` 118 $(CONTROLLER_GEN) $(CRD_OPTIONS_EXCLUDE_DESCRIPTION) paths="./vendor/volcano.sh/apis/pkg/apis/flow/v1alpha1" output:crd:artifacts:config=config/crd/jobflow/bases 119 120 unit-test: 121 go clean -testcache 122 if [ ${OS} = 'Darwin' ];then\ 123 GOOS=darwin go list ./... | grep -v "/e2e" | xargs go test;\ 124 else\ 125 go test -p 8 -race $$(find pkg cmd -type f -name '*_test.go' | sed -r 's|/[^/]+$$||' | sort | uniq | sed "s|^|volcano.sh/volcano/|");\ 126 fi; 127 128 e2e: images 129 ./hack/run-e2e-kind.sh 130 131 e2e-test-schedulingbase: images 132 E2E_TYPE=SCHEDULINGBASE ./hack/run-e2e-kind.sh 133 134 e2e-test-schedulingaction: images 135 E2E_TYPE=SCHEDULINGACTION ./hack/run-e2e-kind.sh 136 137 e2e-test-jobp: images 138 E2E_TYPE=JOBP ./hack/run-e2e-kind.sh 139 140 e2e-test-jobseq: images 141 E2E_TYPE=JOBSEQ ./hack/run-e2e-kind.sh 142 143 e2e-test-vcctl: vcctl images 144 E2E_TYPE=VCCTL ./hack/run-e2e-kind.sh 145 146 e2e-test-stress: images 147 E2E_TYPE=STRESS ./hack/run-e2e-kind.sh 148 149 generate-yaml: init manifests 150 ./hack/generate-yaml.sh TAG=${RELEASE_VER} CRD_VERSION=${CRD_VERSION} 151 152 generate-charts: init manifests 153 ./hack/generate-charts.sh 154 155 release-env: 156 ./hack/build-env.sh release 157 158 dev-env: 159 ./hack/build-env.sh dev 160 161 release: images generate-yaml 162 ./hack/publish.sh 163 164 clean: 165 rm -rf _output/ 166 rm -f *.log 167 168 verify: 169 hack/verify-gofmt.sh 170 hack/verify-gencode.sh 171 # this verify is deprecated and use make lint-licenses instead. 172 #hack/verify-vendor-licenses.sh 173 174 lint: ## Lint the files 175 hack/verify-golangci-lint.sh 176 177 verify-generated-yaml: 178 ./hack/check-generated-yaml.sh 179 180 command-lines: 181 go build -ldflags ${LD_FLAGS} -o=${BIN_DIR}/vcancel ./cmd/cli/vcancel 182 go build -ldflags ${LD_FLAGS} -o=${BIN_DIR}/vresume ./cmd/cli/vresume 183 go build -ldflags ${LD_FLAGS} -o=${BIN_DIR}/vsuspend ./cmd/cli/vsuspend 184 go build -ldflags ${LD_FLAGS} -o=${BIN_DIR}/vjobs ./cmd/cli/vjobs 185 go build -ldflags ${LD_FLAGS} -o=${BIN_DIR}/vqueues ./cmd/cli/vqueues 186 go build -ldflags ${LD_FLAGS} -o=${BIN_DIR}/vsub ./cmd/cli/vsub 187 188 # find or download controller-gen 189 # download controller-gen if necessary 190 controller-gen: 191 ifeq (, $(shell which controller-gen)) 192 @{ \ 193 set -e ;\ 194 CONTROLLER_GEN_TMP_DIR=$$(mktemp -d) ;\ 195 cd $$CONTROLLER_GEN_TMP_DIR ;\ 196 go mod init tmp ;\ 197 go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.6.0 ;\ 198 rm -rf $$CONTROLLER_GEN_TMP_DIR ;\ 199 } 200 CONTROLLER_GEN=$(GOBIN)/controller-gen 201 else 202 CONTROLLER_GEN=$(shell which controller-gen) 203 endif 204 205 update-development-yaml: 206 make generate-yaml TAG=v1.9.0 RELEASE_DIR=installer 207 mv installer/volcano-v1.9.0.yaml installer/volcano-development.yaml 208 209 mod-download-go: 210 @-GOFLAGS="-mod=readonly" find -name go.mod -execdir go mod download \; 211 # go mod tidy is needed with Golang 1.16+ as go mod download affects go.sum 212 # https://github.com/golang/go/issues/43994 213 # exclude docs folder 214 @find . -path ./docs -prune -o -name go.mod -execdir go mod tidy \; 215 216 .PHONY: mirror-licenses 217 mirror-licenses: mod-download-go; \ 218 go install istio.io/tools/cmd/license-lint@1.19.7; \ 219 cd licenses; \ 220 rm -rf `ls ./ | grep -v LICENSE`; \ 221 cd -; \ 222 license-lint --mirror 223 224 .PHONY: lint-licenses 225 lint-licenses: 226 @if test -d licenses; then license-lint --config config/license-lint.yaml; fi 227 228 .PHONY: licenses-check 229 licenses-check: mirror-licenses; \ 230 hack/licenses-check.sh