From f932a0ef24b987725e5c61fc49ae5516ae1e6ac2 Mon Sep 17 00:00:00 2001 From: appleboy Date: Fri, 4 Oct 2024 15:21:32 +0800 Subject: [PATCH] build: refactor build system and update formatting tools - Change `GOFMT` tool from `gofmt` to `gofumpt` - Remove DockerHub deployment configurations - Add detection and setup for Go environment variables - Add conditional flags and executable naming based on OS - Update `fmt` and `fmt-check` targets to use `gofumpt` - Remove `lint`, `misspell-check`, and `misspell` targets - Update `test` target to remove dependency on `fmt-check` - Change `install` and `build` targets to use `GOFILES` instead of `SOURCES` - Update `$(EXECUTABLE)` target to output to `bin/` - Remove various `release` and `docker` related targets Signed-off-by: appleboy --- Makefile | 110 +++++++++++++++++++------------------------------------ 1 file changed, 37 insertions(+), 73 deletions(-) diff --git a/Makefile b/Makefile index b1c63b7..5f5594f 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,9 @@ DIST := dist EXECUTABLE := drone-jenkins -GOFMT ?= gofmt "-s" +GOFMT ?= gofumpt -l -s -w GO ?= go - -# for dockerhub -DEPLOY_ACCOUNT := appleboy -DEPLOY_IMAGE := $(EXECUTABLE) -ARCHS ?= amd64 386 -TARGETS ?= linux darwin windows -SOURCES ?= $(shell find . -name "*.go" -type f) -TAGS ?= -LDFLAGS ?= -X 'main.Version=$(VERSION)' +GOFILES := $(shell find . -name "*.go" -type f) +HAS_GO = $(shell hash $(GO) > /dev/null 2>&1 && echo "GO" || echo "NOGO" ) ifneq ($(shell uname), Darwin) EXTLDFLAGS = -extldflags "-static" $(null) @@ -18,106 +11,77 @@ else EXTLDFLAGS = endif +ifeq ($(HAS_GO), GO) + GOPATH ?= $(shell $(GO) env GOPATH) + export PATH := $(GOPATH)/bin:$(PATH) + + CGO_EXTRA_CFLAGS := -DSQLITE_MAX_VARIABLE_NUMBER=32766 + CGO_CFLAGS ?= $(shell $(GO) env CGO_CFLAGS) $(CGO_EXTRA_CFLAGS) +endif + +ifeq ($(OS), Windows_NT) + GOFLAGS := -v -buildmode=exe + EXECUTABLE ?= $(EXECUTABLE).exe +else ifeq ($(OS), Windows) + GOFLAGS := -v -buildmode=exe + EXECUTABLE ?= $(EXECUTABLE).exe +else + GOFLAGS := -v + EXECUTABLE ?= $(EXECUTABLE) +endif + ifneq ($(DRONE_TAG),) VERSION ?= $(DRONE_TAG) else VERSION ?= $(shell git describe --tags --always || git rev-parse --short HEAD) endif +TAGS ?= +LDFLAGS ?= -X 'main.Version=$(VERSION)' + all: build fmt: - $(GOFMT) -w $(SOURCES) + @hash gofumpt > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ + $(GO) install mvdan.cc/gofumpt; \ + fi + $(GOFMT) -w $(GOFILES) vet: $(GO) vet ./... -lint: - @hash revive > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ - $(GO) get -u github.com/mgechev/revive; \ - fi - revive -config .revive.toml ./... || exit 1 - -.PHONY: misspell-check -misspell-check: - @hash misspell > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ - $(GO) get -u github.com/client9/misspell/cmd/misspell; \ - fi - misspell -error $(SOURCES) - -.PHONY: misspell -misspell: - @hash misspell > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ - $(GO) get -u github.com/client9/misspell/cmd/misspell; \ - fi - misspell -w $(SOURCES) - .PHONY: fmt-check fmt-check: - @diff=$$($(GOFMT) -d $(SOURCES)); \ + @hash gofumpt > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ + $(GO) install mvdan.cc/gofumpt; \ + fi + @diff=$$($(GOFMT) -d $(GOFILES)); \ if [ -n "$$diff" ]; then \ echo "Please run 'make fmt' and commit the result:"; \ echo "$${diff}"; \ exit 1; \ fi; -test: fmt-check +test: @$(GO) test -v -cover -coverprofile coverage.txt ./... && echo "\n==>\033[32m Ok\033[m\n" || exit 1 -install: $(SOURCES) +install: $(GOFILES) $(GO) install -v -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' build: $(EXECUTABLE) -$(EXECUTABLE): $(SOURCES) - $(GO) build -v -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o $@ - -release: release-dirs release-build release-copy release-check - -release-dirs: - mkdir -p $(DIST)/binaries $(DIST)/release - -release-build: - @which gox > /dev/null; if [ $$? -ne 0 ]; then \ - $(GO) get -u github.com/mitchellh/gox; \ - fi - gox -os="$(TARGETS)" -arch="$(ARCHS)" -tags="$(TAGS)" -ldflags="-s -w $(LDFLAGS)" -output="$(DIST)/binaries/$(EXECUTABLE)-$(VERSION)-{{.OS}}-{{.Arch}}" - -release-copy: - $(foreach file,$(wildcard $(DIST)/binaries/$(EXECUTABLE)-*),cp $(file) $(DIST)/release/$(notdir $(file));) - -release-check: - cd $(DIST)/release; $(foreach file,$(wildcard $(DIST)/release/$(EXECUTABLE)-*),sha256sum $(notdir $(file)) > $(notdir $(file)).sha256;) +$(EXECUTABLE): $(GOFILES) + $(GO) build -v -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o bin/$@ build_linux_amd64: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GO) build -a -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o release/linux/amd64/$(DEPLOY_IMAGE) -build_linux_i386: - CGO_ENABLED=0 GOOS=linux GOARCH=386 $(GO) build -a -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o release/linux/i386/$(DEPLOY_IMAGE) - build_linux_arm64: CGO_ENABLED=0 GOOS=linux GOARCH=arm64 $(GO) build -a -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o release/linux/arm64/$(DEPLOY_IMAGE) build_linux_arm: CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 $(GO) build -a -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o release/linux/arm/$(DEPLOY_IMAGE) -docker_image: - docker build -t $(DEPLOY_ACCOUNT)/$(DEPLOY_IMAGE) . - -docker: docker_image - -docker_deploy: -ifeq ($(tag),) - @echo "Usage: make $@ tag=" - @exit 1 -endif - # deploy image - docker tag $(DEPLOY_ACCOUNT)/$(DEPLOY_IMAGE):latest $(DEPLOY_ACCOUNT)/$(DEPLOY_IMAGE):$(tag) - docker push $(DEPLOY_ACCOUNT)/$(DEPLOY_IMAGE):$(tag) - -coverage: - sed -i '/main.go/d' coverage.txt - clean: $(GO) clean -x -i ./... rm -rf coverage.txt $(EXECUTABLE) $(DIST)