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