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