dragonfly/Makefile

496 lines
17 KiB
Makefile

# Copyright The Dragonfly Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
PROJECT_NAME := "d7y.io/dragonfly/v2"
DFGET_NAME := "dfget"
DFCACHE_NAME := "dfcache"
DFSTORE_NAME := "dfstore"
SEMVER := "2.0.9"
VERSION_RELEASE := "1"
PKG := "$(PROJECT_NAME)"
PKG_LIST := $(shell go list ${PKG}/... | grep -v /vendor/ | grep -v '\(/test/\)')
GIT_COMMIT := $(shell git rev-parse --verify HEAD --short=7)
GIT_COMMIT_LONG := $(shell git rev-parse --verify HEAD)
DFGET_ARCHIVE_PREFIX := "$(DFGET_NAME)_$(SEMVER)-$(VERSION_RELEASE)_$(GIT_COMMIT)"
DFCACHE_ARCHIVE_PREFIX := "$(DFCACHE_NAME)_$(SEMVER)-$(VERSION_RELEASE)_$(GIT_COMMIT)"
DFSTORE_ARCHIVE_PREFIX := "$(DFSTORE_NAME)_$(SEMVER)-$(VERSION_RELEASE)_$(GIT_COMMIT)"
all: help
# Prepare required folders for build.
build-dirs:
@mkdir -p ./bin
.PHONY: build-dirs
# Build dragonlfy.
docker-build: docker-build-dfdaemon docker-build-scheduler docker-build-manager docker-build-trainer
@echo "Build image done."
.PHONY: docker-build
# Push dragonfly images.
docker-push: docker-push-dfdaemon docker-push-scheduler docker-push-manager docker-build-trainer
@echo "Push image done."
.PHONY: docker-push
# Build dfdaemon image.
docker-build-dfdaemon:
@echo "Begin to use docker build dfdaemon image."
./hack/docker-build.sh dfdaemon
.PHONY: docker-build-dfdaemon
# Build scheduler image.
docker-build-scheduler:
@echo "Begin to use docker build scheduler image."
./hack/docker-build.sh scheduler
.PHONY: docker-build-scheduler
# Build manager image.
docker-build-manager:
@echo "Begin to use docker build manager image."
./hack/docker-build.sh manager
.PHONY: docker-build-manager
# Build trainer image.
docker-build-trainer:
@echo "Begin to use docker build trainer image."
./hack/docker-build.sh trainer
.PHONY: docker-build-trainer
# Build testing tools image.
docker-build-testing-tools: build-dirs
@echo "Begin to testing tools image."
./test/tools/no-content-length/build.sh
.PHONY: docker-build-testing-tools
# Push dfdaemon image.
docker-push-dfdaemon: docker-build-dfdaemon
@echo "Begin to push dfdaemon docker image."
./hack/docker-push.sh dfdaemon
.PHONY: docker-push-dfdaemon
# Push scheduler image.
docker-push-scheduler: docker-build-scheduler
@echo "Begin to push scheduler docker image."
./hack/docker-push.sh scheduler
.PHONY: docker-push-scheduler
# Push manager image.
docker-push-manager: docker-build-manager
@echo "Begin to push manager docker image."
./hack/docker-push.sh manager
.PHONY: docker-push-manager
# Push trainer image.
docker-push-trainer: docker-build-trainer
@echo "Begin to push trainer docker image."
./hack/docker-push.sh trainer
.PHONY: docker-push-trainer
# Build dragonfly.
build: build-manager build-scheduler build-trainer build-dfget build-dfcache build-dfstore
.PHONY: build
# Build dfget.
build-dfget: build-dirs
@echo "Begin to build dfget."
./hack/build.sh dfget
.PHONY: build-dfget
# Build linux dfget.
build-linux-dfget: build-dirs
@echo "Begin to build linux dfget."
GOOS=linux GOARCH=amd64 ./hack/build.sh dfget
.PHONY: build-linux-dfget
# Build dfcache.
build-dfcache: build-dirs
@echo "Begin to build dfcache."
./hack/build.sh dfcache
.PHONY: build-dfcache
# Build linux dfcache.
build-linux-dfcache: build-dirs
@echo "Begin to build linux dfcache."
GOOS=linux GOARCH=amd64 ./hack/build.sh dfcache
.PHONY: build-linux-dfcache
# Build dfstore.
build-dfstore: build-dirs
@echo "Begin to build dfstore."
./hack/build.sh dfstore
.PHONY: build-dfstore
# Build linux dfcache.
build-linux-dfstore: build-dirs
@echo "Begin to build linux dfstore."
GOOS=linux GOARCH=amd64 ./hack/build.sh dfstore
.PHONY: build-linux-dfstore
# Build scheduler.
build-scheduler: build-dirs
@echo "Begin to build scheduler."
./hack/build.sh scheduler
.PHONY: build-scheduler
# Build manager.
build-manager: build-dirs build-manager-console
@echo "Begin to build manager."
make build-manager-server
.PHONY: build-manager
# Build manager server.
build-manager-server: build-dirs
@echo "Begin to build manager server."
./hack/build.sh manager
.PHONY: build-manager
# Build manager console.
build-manager-console: build-dirs
@echo "Begin to build manager console."
./hack/build.sh manager-console
.PHONY: build-manager-console
# Build trainer.
build-trainer: build-dirs
@echo "Begin to build trainer."
./hack/build.sh trainer
.PHONY: build-trainer
# Install dfget.
install-dfget:
@echo "Begin to install dfget."
./hack/install.sh install dfget
.PHONY: install-dfget
# Install scheduler.
install-scheduler:
@echo "Begin to install scheduler."
./hack/install.sh install scheduler
.PHONY: install-scheduler
# Install manager.
install-manager:
@echo "Begin to install manager."
./hack/install.sh install manager
.PHONY: install-manager
# Install trainer.
install-trainer:
@echo "Begin to install trainer."
./hack/install.sh install trainer
.PHONY: install-trainer
# Build rpm dfget.
build-rpm-dfget: build-linux-dfget
@echo "Begin to build rpm dfget."
@docker run --rm \
-v "$(PWD)/build:/root/build" \
-v "$(PWD)/build/package/docs:/root/docs" \
-v "$(PWD)/LICENSE:/root/License" \
-v "$(PWD)/CHANGELOG.md:/root/CHANGELOG.md" \
-v "$(PWD)/bin:/root/bin" \
-e "SEMVER=$(SEMVER)" \
-e "VERSION_RELEASE=$(VERSION_RELEASE)" \
goreleaser/nfpm pkg \
--config /root/build/package/nfpm/dfget.yaml \
--target /root/bin/$(DFGET_ARCHIVE_PREFIX)_linux_amd64.rpm
@echo "Build package output: ./bin/$(DFGET_ARCHIVE_PREFIX)_linux_amd64.rpm"
.PHONY: build-rpm-dfget
# Build rpm dfcache.
build-rpm-dfcache: build-linux-dfcache build-dfcache-man-page
@echo "Begin to build rpm dfcache."
@docker run --rm \
-v "$(PWD)/build:/root/build" \
-v "$(PWD)/build/package/docs:/root/docs" \
-v "$(PWD)/LICENSE:/root/License" \
-v "$(PWD)/CHANGELOG.md:/root/CHANGELOG.md" \
-v "$(PWD)/bin:/root/bin" \
-e "SEMVER=$(SEMVER)" \
-e "VERSION_RELEASE=$(VERSION_RELEASE)" \
goreleaser/nfpm pkg \
--config /root/build/package/nfpm/dfcache.yaml \
--target /root/bin/$(DFCACHE_ARCHIVE_PREFIX)_linux_amd64.rpm
@echo "Build package output: ./bin/$(DFCACHE_ARCHIVE_PREFIX)_linux_amd64.rpm"
.PHONY: build-rpm-dfcache
# Build rpm dfstore.
build-rpm-dfstore: build-linux-dfstore
@echo "Begin to build rpm dfstore."
@docker run --rm \
-v "$(PWD)/build:/root/build" \
-v "$(PWD)/build/package/docs:/root/docs" \
-v "$(PWD)/LICENSE:/root/License" \
-v "$(PWD)/CHANGELOG.md:/root/CHANGELOG.md" \
-v "$(PWD)/bin:/root/bin" \
-e "SEMVER=$(SEMVER)" \
-e "VERSION_RELEASE=$(VERSION_RELEASE)" \
goreleaser/nfpm pkg \
--config /root/build/package/nfpm/dfstore.yaml \
--target /root/bin/$(DFSTORE_ARCHIVE_PREFIX)_linux_amd64.rpm
@echo "Build package output: ./bin/$(DFSTORE_ARCHIVE_PREFIX)_linux_amd64.rpm"
.PHONY: build-rpm-dfstore
# Build deb dfget.
build-deb-dfget: build-linux-dfget
@echo "Begin to build deb dfget."
@docker run --rm \
-v "$(PWD)/build:/root/build" \
-v "$(PWD)/build/package/docs:/root/docs" \
-v "$(PWD)/LICENSE:/root/License" \
-v "$(PWD)/CHANGELOG.md:/root/CHANGELOG.md" \
-v "$(PWD)/bin:/root/bin" \
-e "SEMVER=$(SEMVER)" \
-e "VERSION_RELEASE=$(VERSION_RELEASE)" \
goreleaser/nfpm pkg \
--config /root/build/package/nfpm/dfget.yaml \
--target /root/bin/$(DFGET_ARCHIVE_PREFIX)_linux_amd64.deb
@echo "Build package output: ./bin/$(DFGET_ARCHIVE_PREFIX)_linux_amd64.deb"
.PHONY: build-deb-dfget
# Build deb dfcache.
build-deb-dfcache: build-linux-dfcache build-dfcache-man-page
@echo "Begin to build deb dfcache."
@docker run --rm \
-v "$(PWD)/build:/root/build" \
-v "$(PWD)/build/package/docs:/root/docs" \
-v "$(PWD)/LICENSE:/root/License" \
-v "$(PWD)/CHANGELOG.md:/root/CHANGELOG.md" \
-v "$(PWD)/bin:/root/bin" \
-e "SEMVER=$(SEMVER)" \
-e "VERSION_RELEASE=$(VERSION_RELEASE)" \
goreleaser/nfpm pkg \
--config /root/build/package/nfpm/dfcache.yaml \
--target /root/bin/$(DFCACHE_ARCHIVE_PREFIX)_linux_amd64.deb
@echo "Build package output: ./bin/$(DFCACHE_ARCHIVE_PREFIX)_linux_amd64.deb"
.PHONY: build-deb-dfcache
# Build deb dfstore
build-deb-dfstore: build-linux-dfstore
@echo "Begin to build deb dfstore"
@docker run --rm \
-v "$(PWD)/build:/root/build" \
-v "$(PWD)/build/package/docs:/root/docs" \
-v "$(PWD)/LICENSE:/root/License" \
-v "$(PWD)/CHANGELOG.md:/root/CHANGELOG.md" \
-v "$(PWD)/bin:/root/bin" \
-e "SEMVER=$(SEMVER)" \
-e "VERSION_RELEASE=$(VERSION_RELEASE)" \
goreleaser/nfpm pkg \
--config /root/build/package/nfpm/dfstore.yaml \
--target /root/bin/$(DFSTORE_ARCHIVE_PREFIX)_linux_amd64.deb
@echo "Build package output: ./bin/$(DFSTORE_ARCHIVE_PREFIX)_linux_amd64.deb"
.PHONY: build-deb-dfstore
# Generate man page.
build-man-page: build-dfget-man-page build-dfcache-man-page build-dfstore-man-page
.PHONY: build-man-page
# Generate dfget man page.
build-dfget-man-page:
@pandoc -s -t man ./build/package/docs/dfget.1.md -o ./build/package/docs/dfget.1
.PHONY: build-dfget-man-page
# Genrate dfcache man pages.
build-dfcache-man-page:
@pandoc -s -t man ./build/package/docs/dfcache/dfcache.md -o ./build/package/docs/dfcache/dfcache.1
@pandoc -s -t man ./build/package/docs/dfcache/dfcache_delete.md -o ./build/package/docs/dfcache/dfcache-delete.1
@pandoc -s -t man ./build/package/docs/dfcache/dfcache_doc.md -o ./build/package/docs/dfcache/dfcache-doc.1
@pandoc -s -t man ./build/package/docs/dfcache/dfcache_export.md -o ./build/package/docs/dfcache/dfcache-export.1
@pandoc -s -t man ./build/package/docs/dfcache/dfcache_import.md -o ./build/package/docs/dfcache/dfcache-import.1
@pandoc -s -t man ./build/package/docs/dfcache/dfcache_plugin.md -o ./build/package/docs/dfcache/dfcache-plugin.1
@pandoc -s -t man ./build/package/docs/dfcache/dfcache_stat.md -o ./build/package/docs/dfcache/dfcache-stat.1
@pandoc -s -t man ./build/package/docs/dfcache/dfcache_version.md -o ./build/package/docs/dfcache/dfcache-version.1
.PHONY: build-dfcache-man-page
# Genrate dfstore man pages.
build-dfstore-man-page:
@pandoc -s -t man ./build/package/docs/dfstore/dfstore.md -o ./build/package/docs/dfstore/dfstore.1
@pandoc -s -t man ./build/package/docs/dfstore/dfstore_copy.md -o ./build/package/docs/dfstore/dfstore-copy.1
@pandoc -s -t man ./build/package/docs/dfstore/dfstore_remove.md -o ./build/package/docs/dfstore/dfstore-remove.1
@pandoc -s -t man ./build/package/docs/dfstore/dfstore_version.md -o ./build/package/docs/dfstore/dfstore-version.1
.PHONY: build-dfstore-man-page
# Generate e2e sha256sum.
build-e2e-sha256sum:
@GOOS=linux GOARCH=amd64 go build -o /tmp/sha256sum-offset test/tools/sha256sum-offset/main.go
.PHONY: build-e2e-sha256sum
# Generate e2e download grpc test binary.
build-e2e-download-grpc-test:
@GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o /tmp/download-grpc-test test/tools/download-grpc-test/main.go
.PHONY: build-e2e-download-grpc-test
# Run unittests.
test:
@go test -v -race -short ${PKG_LIST}
.PHONY: test
# Run tests with coverage.
test-coverage:
@go test -v -race -short ${PKG_LIST} -coverprofile cover.out -covermode=atomic
@cat cover.out >> coverage.txt
.PHONY: test-coverage
# Run github actions E2E tests with coverage.
actions-e2e-test-coverage:
@ginkgo -v -r --race --fail-fast --cover --trace --progress test/e2e
@cat coverprofile.out >> coverage.txt
.PHONY: actions-e2e-test-coverage
# Install E2E tests environment.
install-e2e-test:
@./hack/install-e2e-test.sh
.PHONY: install-e2e-test
# Run E2E tests.
e2e-test: install-e2e-test build-e2e-sha256sum build-e2e-download-grpc-test
@ginkgo -v -r --race --fail-fast --cover --trace --progress test/e2e
.PHONY: e2e-test
# Run E2E tests with coverage.
e2e-test-coverage: install-e2e-test build-e2e-sha256sum build-e2e-download-grpc-test
@ginkgo -v -r --race --fail-fast --cover --trace --progress test/e2e
@cat coverprofile.out >> coverage.txt
.PHONY: e2e-test-coverage
# Clean E2E tests.
clean-e2e-test:
@kind delete cluster
@echo "cleaning log file."
@rm -rf test/e2e/*.log
.PHONY: clean-e2e-test
# Kind load dragonlfy.
kind-load: kind-load-scheduler kind-load-dfdaemon kind-load-manager kind-load-trainer kind-load-testing-tools
@echo "Kind load image done."
.PHONY: kind-load
# Run kind load docker scheduler.
kind-load-scheduler:
@./hack/kind-load.sh scheduler
.PHONY: kind-load-scheduler
# Run kind load docker dfget.
kind-load-dfdaemon:
@./hack/kind-load.sh dfdaemon
.PHONY: kind-load-dfget
# Run kind load docker manager.
kind-load-manager:
@./hack/kind-load.sh manager
.PHONY: kind-load-manager
# Run kind load docker trainer.
kind-load-trainer:
@./hack/kind-load.sh trainer
.PHONY: kind-load-trainer
# Run kind load docker testing tools.
kind-load-testing-tools:
@./hack/kind-load.sh no-content-length
.PHONY: kind-load-testing-tools
# Run code lint.
lint: markdownlint
@echo "Begin to golangci-lint."
@golangci-lint run
.PHONY: lint
# Run markdown lint.
markdownlint:
@echo "Begin to markdownlint."
@./hack/markdownlint.sh
.PHONY: markdownlint
# Run go generate.
generate:
@go generate ${PKG_LIST}
.PHONY: generate
# Generate swagger files.
swag:
@swag init --parseDependency --parseInternal -g cmd/manager/main.go -o api/manager
# Generate changelog.
changelog:
@git-chglog -o CHANGELOG.md
.PHONY: changelog
# Clear compiled files.
clean:
@go clean
@rm -rf bin .go .cache
.PHONY: clean
help:
@echo "make build-dirs prepare required folders for build"
@echo "make docker-build build dragonfly image"
@echo "make docker-push push dragonfly image"
@echo "make docker-build-dfdaemon build dfdaemon image"
@echo "make docker-build-scheduler build scheduler image"
@echo "make docker-build-manager build manager image"
@echo "make docker-build-trainer build trainer image"
@echo "make docker-push-dfdaemon push dfdaemon image"
@echo "make docker-push-scheduler push scheduler image"
@echo "make docker-push-manager push manager image"
@echo "make docker-push-trainer push trainer image"
@echo "make build build dragonfly"
@echo "make build-dfget build dfget"
@echo "make build-linux-dfget build linux dfget"
@echo "make build-dfcache build dfcache"
@echo "make build-linux-dfcache build linux dfcache"
@echo "make build-dfstore build dfstore"
@echo "make build-linux-dfstore build linux dfstore"
@echo "make build-scheduler build scheduler"
@echo "make build-manager build manager"
@echo "make build-manager-server build manager server"
@echo "make build-manager-console build manager console"
@echo "make build-trainer build trainer"
@echo "make build-e2e-sha256sum build sha256sum test tool"
@echo "make build-e2e-download-grpc-test build download grpc test tool"
@echo "make install-dfget install dfget"
@echo "make install-scheduler install scheduler"
@echo "make install-manager install manager"
@echo "make install-trainer install trainer"
@echo "make build-rpm-dfget build rpm dfget"
@echo "make build-rpm-dfcache build rpm dfcache"
@echo "make build-rpm-dfstore build rpm dfstore"
@echo "make build-deb-dfget build deb dfget"
@echo "make build-deb-dfcache build deb dfcache"
@echo "make build-deb-dfstore build deb dfstore"
@echo "make build-man-page generate man page"
@echo "make build-dfget-man-page generate dfget man page"
@echo "make build-dfcache-man-page generate dfcache man page"
@echo "make build-dfstore-man-page generate dfstore man page"
@echo "make test run unit tests"
@echo "make test-coverage run tests with coverage"
@echo "make actions-e2e-test-coverage run github actons E2E tests with coverage"
@echo "make install-e2e-test install E2E tests environment"
@echo "make e2e-test run e2e tests"
@echo "make e2e-test-coverage run e2e tests with coverage"
@echo "make clean-e2e-test clean e2e tests"
@echo "make kind-load kind load docker image"
@echo "make kind-load-scheduler kind load scheduler docker image"
@echo "make kind-load-dfdaemon kind load dfdaemon docker image"
@echo "make kind-load-manager kind load manager docker image"
@echo "make kind-load-trainer kind load trainer docker image"
@echo "make kind-load-testing-tools kind load testing tools docker image"
@echo "make lint run code lint"
@echo "make markdownlint run markdown lint"
@echo "make generate run go generate"
@echo "make swag generate swagger api docs"
@echo "make changelog generate CHANGELOG.md"
@echo "make clean clean"