# ============================================================================== # define the default goal # .DEFAULT_GOAL := help .PHONY: all all: tidy gen add-copyright format lint cover build # ============================================================================== # Build set ROOT_PACKAGE=github.com/OpenIMSDK/Open-IM-Server # TODO: This is version control for the future VERSION_PACKAGE=github.com/OpenIMSDK/Open-IM-Server/pkg/version # ============================================================================== # Includes include scripts/make-rules/common.mk # make sure include common.mk at the first include line include scripts/make-rules/golang.mk include scripts/make-rules/image.mk include scripts/make-rules/copyright.mk include scripts/make-rules/gen.mk include scripts/make-rules/dependencies.mk include scripts/make-rules/tools.mk include scripts/make-rules/release.mk include scripts/make-rules/swagger.mk # ============================================================================== # Usage define USAGE_OPTIONS Options: DEBUG Whether or not to generate debug symbols. Default is 0. BINS Binaries to build. Default is all binaries under cmd. This option is available when using: make {build}(.multiarch) Example: make build BINS="openim_api openim_cms_api". PLATFORMS Platform to build for. Default is linux_arm64 and linux_amd64. This option is available when using: make {build}.multiarch Example: make multiarch PLATFORMS="linux_s390x linux_mips64 linux_mips64le darwin_amd64 windows_amd64 linux_amd64 linux_arm64". V Set to 1 enable verbose build. Default is 0. endef export USAGE_OPTIONS # ============================================================================== # Targets ## build: Build binaries by default .PHONY: build build: @$(MAKE) go.build ## multiarch: Build binaries for multiple platforms. See option PLATFORMS. .PHONY: multiarch multiarch: @$(MAKE) go.build.multiarch ## tidy: tidy go.mod .PHONY: tidy tidy: @$(GO) mod tidy ## vendor: vendor go.mod .PHONY: vendor vendor: @$(GO) mod vendor ## style: code style -> fmt,vet,lint .PHONY: style style: fmt vet lint ## fmt: Run go fmt against code. .PHONY: fmt fmt: @$(GO) fmt ./... ## vet: Run go vet against code. .PHONY: vet vet: @$(GO) vet ./... ## lint: Check syntax and styling of go sources. .PHONY: lint lint: @$(MAKE) go.lint ## format: Gofmt (reformat) package sources (exclude vendor dir if existed). .PHONY: format format: @$(MAKE) go.format ## test: Run unit test. .PHONY: test test: @$(MAKE) go.test ## cover: Run unit test and get test coverage. .PHONY: cover cover: @$(MAKE) go.test.cover ## updates: Check for updates to go.mod dependencies .PHONY: updates @$(MAKE) go.updates ## imports: task to automatically handle import packages in Go files using goimports tool .PHONY: imports imports: @$(MAKE) go.imports ## clean: Remove all files that are created by building. .PHONY: clean clean: @$(MAKE) go.clean ## image: Build docker images for host arch. .PHONY: image image: @$(MAKE) image.build ## image.multiarch: Build docker images for multiple platforms. See option PLATFORMS. .PHONY: image.multiarch image.multiarch: @$(MAKE) image.build.multiarch ## push: Build docker images for host arch and push images to registry. .PHONY: push push: @$(MAKE) image.push ## push.multiarch: Build docker images for multiple platforms and push images to registry. .PHONY: push.multiarch push.multiarch: @$(MAKE) image.push.multiarch ## tools: Install dependent tools. .PHONY: tools tools: @$(MAKE) tools.install ## gen: Generate all necessary files. .PHONY: gen gen: @$(MAKE) gen.run ## swagger: Generate swagger document. .PHONY: swagger swagger: @$(MAKE) swagger.run ## serve-swagger: Serve swagger spec and docs. .PHONY: swagger.serve serve-swagger: @$(MAKE) swagger.serve ## verify-copyright: Verify the license headers for all files. .PHONY: verify-copyright verify-copyright: @$(MAKE) copyright.verify ## add-copyright: Add copyright ensure source code files have license headers. .PHONY: add-copyright add-copyright: @$(MAKE) copyright.add ## release: release the project .PHONY: release release: release.verify release.ensure-tag @scripts/release.sh ## help: Show this help info. .PHONY: help help: Makefile $(call makehelp) ## help-all: Show all help details info. .PHONY: help-all help-all: go.help copyright.help tools.help image.help help $(call makeallhelp)