github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/Makefile (about) 1 .PHONY: test install git.commit git.branch default 2 all: install 3 4 app=$(notdir $(shell pwd)) 5 appVersion := 1.0.0 6 goVersion := $(shell go version | sed 's/go version //'|sed 's/ /_/') 7 # e.g. 2021-10-28T11:49:52+0800 8 buildTime := $(shell date +%FT%T%z) 9 # https://git-scm.com/docs/git-rev-list#Documentation/git-rev-list.txt-emaIem 10 # e.g. ffd23d3@2022-04-06T18:07:14+08:00 11 gitCommit := $(shell [ -f git.commit ] && cat git.commit || git log --format=format:'%h@%aI' -1) 12 gitBranch := $(shell [ -f git.branch ] && cat git.branch || git rev-parse --abbrev-ref HEAD) 13 gitInfo = $(gitBranch)-$(gitCommit) 14 #gitCommit := $(shell git rev-list -1 HEAD) 15 # https://stackoverflow.com/a/47510909 16 pkg := github.com/bingoohuang/gg/pkg/v 17 18 extldflags := -extldflags -static 19 # https://ms2008.github.io/2018/10/08/golang-build-version/ 20 # https://github.com/kubermatic/kubeone/blob/master/Makefile 21 flags1 = -s -w -X $(pkg).BuildTime=$(buildTime) -X $(pkg).AppVersion=$(appVersion) -X $(pkg).GitCommit=$(gitInfo) -X $(pkg).GoVersion=$(goVersion) 22 flags2 = ${extldflags} ${flags1} 23 buildTags = $(if $(TAGS),-tags=$(TAGS),) 24 buildFlags = ${buildTags} -trimpath -ldflags="'${flags1}'" 25 goinstall_target = $(if $(TARGET),$(TARGET),./...) 26 27 goinstall = go install ${buildTags} -trimpath -ldflags='${flags1}' ${goinstall_target} 28 gobin := $(shell go env GOBIN) 29 # try $GOPATN/bin if $gobin is empty 30 gobin := $(if $(gobin),$(gobin),$(shell go env GOPATH)/bin) 31 32 export GOPROXY=https://mirrors.aliyun.com/goproxy/,https://goproxy.cn,https://goproxy.io,direct 33 # Active module mode, as we use go modules to manage dependencies 34 export GO111MODULE=on 35 36 # usage: t=$(mktemp); echo $t; echo "set -x; go build -o build/rig_linux_arm64 $(make -f ~/github/gg/Makefile build.flags) ./cmd/rig" > $t && sh $t 37 build.flags: 38 @echo ${buildFlags} 39 40 git.commit: 41 echo ${gitCommit} > git.commit 42 echo ${gitBranch} > git.branch 43 44 sec: 45 @gosec ./... 46 @echo "[OK] Go security check was completed!" 47 48 init: 49 50 lint-all: 51 golangci-lint run --enable-all 52 53 lint: 54 golangci-lint run ./... 55 56 fmt-update: 57 go install mvdan.cc/gofumpt@latest 58 go install golang.org/x/tools/cmd/...@latest # for goimports 59 # go install github.com/mgechev/revive@master 60 go install github.com/daixiang0/gci@latest 61 go install github.com/google/osv-scanner/cmd/osv-scanner@latest 62 go install github.com/polyfloyd/go-errorlint@latest 63 go install github.com/dkorunic/betteralign/cmd/betteralign@latest 64 go install -v github.com/go-critic/go-critic/cmd/gocritic@latest 65 # Use right mirror functions for string/[]byte performance bust 66 go install github.com/butuzov/mirror/cmd/mirror@latest 67 go install golang.org/x/vuln/cmd/govulncheck@latest 68 go install github.com/securego/gosec/v2/cmd/gosec@latest 69 go install go.uber.org/nilaway/cmd/nilaway@latest 70 71 fmt: 72 gofumpt -l -w . 73 gofmt -s -w . 74 go mod tidy 75 go fmt ./... 76 revive . 77 goimports -w . 78 gci write . 79 osv-scanner -r . 80 go-errorlint ./... 81 gocritic check ./... 82 betteralign ./... 83 nilaway ./... 84 # Use right mirror functions for string/[]byte performance bust 85 # too slow 86 # mirror ./... 87 govulncheck ./... 88 89 align: 90 betteralign -apply ./... 91 92 install-upx: init 93 ${goinstall} 94 upx --best --lzma ${gobin}/${app}* 95 ls -lh ${gobin}/${app}* 96 97 install: init 98 ${goinstall} 99 ls -lh ${gobin}/${app}* 100 101 linux: init 102 GOOS=linux GOARCH=amd64 ${goinstall} 103 ls -lh ${gobin}/linux_amd64/${app}* 104 linux-upx: init 105 GOOS=linux GOARCH=amd64 ${goinstall} 106 upx --best --lzma ${gobin}/linux_amd64/${app}* 107 ls -lh ${gobin}/linux_amd64/${app}* 108 windows: init 109 GOOS=windows GOARCH=amd64 ${goinstall} 110 ls -lh ${gobin}/windows_amd64/${app}* 111 windows-upx: init 112 GOOS=windows GOARCH=amd64 ${goinstall} 113 upx --best --lzma ${gobin}/windows_amd64/${app}* 114 ls -lh ${gobin}/windows_amd64/${app}* 115 arm: init 116 GOOS=linux GOARCH=arm64 ${goinstall} 117 ls -lh ${gobin}/linux_arm64/${app}* 118 arm-upx: init 119 GOOS=linux GOARCH=arm64 ${goinstall} 120 upx --best --lzma ${gobin}/linux_arm64/${app}* 121 ls -lh ${gobin}/linux_arm64/${app}* 122 mac-arm: init 123 GOOS=darwin GOARCH=arm64 ${goinstall} 124 # upx --best --lzma ${gobin}/darwin_arm64/${app}* 125 ls -lh ${gobin}/darwin_arm64/${app}* 126 127 upx: 128 ls -lh ${gobin}/${app}* 129 upx ${gobin}/${app}* 130 ls -lh ${gobin}/${app}* 131 ls -lh ${gobin}/linux_amd64/${app}* 132 upx ${gobin}/linux_amd64/${app}* 133 ls -lh ${gobin}/linux_amd64/${app}* 134 135 test: init 136 #go test -v ./... 137 go test -v -race ./... 138 139 bench: init 140 #go test -bench . ./... 141 go test -tags bench -benchmem -bench . ./... 142 143 clean: 144 rm coverage.out 145 146 cover: 147 go test -v -race -coverpkg=./... -coverprofile=coverage.out ./... 148 149 coverview: 150 go tool cover -html=coverage.out 151 152 # https://hub.docker.com/_/golang 153 # docker run --rm -v "$PWD":/usr/src/myapp -v "$HOME/dockergo":/go -w /usr/src/myapp golang make docker 154 # docker run --rm -it -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang bash 155 # ιζθΏζ₯ glibc 156 docker: 157 mkdir -p ~/dockergo 158 docker run --rm -v "$$PWD":/usr/src/myapp -v "$$HOME/dockergo":/go -w /usr/src/myapp golang make dockerinstall 159 #upx ~/dockergo/bin/${app} 160 gzip -f ~/dockergo/bin/${app} 161 162 dockerinstall: 163 go install -v -x -a -ldflags=${flags} ./... 164 165 targz: 166 find . -name ".DS_Store" -delete 167 find . -type f -name '\.*' -print 168 cd .. && rm -f ${app}.tar.gz && tar czvf ${app}.tar.gz --exclude .git --exclude .idea ${app} 169