-
-
Notifications
You must be signed in to change notification settings - Fork 136
Expand file tree
/
Copy pathMakefile
More file actions
129 lines (92 loc) · 3.38 KB
/
Makefile
File metadata and controls
129 lines (92 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
SHELL=/bin/sh
CMD=./cmd/slackdump
OUTPUT=slackdump
EXECUTABLE=slackdump
BUILD=$(shell git describe --tags)
COMMIT=$(shell git rev-parse --short HEAD)
ifeq ($(BUILD_DATE),)
BUILD_DATE=$(shell TZ=UTC date -u '+%Y-%m-%d %H:%M:%SZ')
endif
PKG=github.com/rusq/slackdump/v4
# Use podman if docker is not available
CONTAINER_CMD=$(shell command -v docker podman 2>/dev/null | head -1)
LDFLAGS="-s -w -X 'main.commit=$(COMMIT)' -X 'main.version=$(BUILD)' -X 'main.date=$(BUILD_DATE)'"
LDFLAGS_DEBUG="-X 'main.commit=$(COMMIT)' -X 'main.version=$(BUILD)' -X 'main.date=$(BUILD_DATE)'"
OSES=linux darwin windows
DISTFILES=README.md LICENSE
ZIPFILES=$(foreach s,$(OSES),$(OUTPUT)-$s.zip)
.PHONY: dist all
# special guest.
$(OUTPUT)-windows.zip: EXECUTABLE=$(OUTPUT).exe
$(foreach s,$(OSES),$(eval $(OUTPUT)-$s.zip: GOOS=$s))
$(foreach s,$(OSES),$(eval $(OUTPUT)-$s.zip: $(EXECUTABLE)))
# rules
%.ps: %.1
man -t ./$< > $@
%.pdf: %.ps
ps2pdf $< $@
all: ## Build the executable (incremental - Go handles changes)
GOARCH=$(GOARCH) GOOS=$(GOOS) go build -ldflags=$(LDFLAGS) -o $(EXECUTABLE) $(CMD)
dist: ## Build distribution archives for all platforms
$(MAKE) $(ZIPFILES)
%.zip:
7z a $@ $(EXECUTABLE) $(DISTFILES)
rm $(EXECUTABLE)
$(OUTPUT).exe: GOOS=windows
$(OUTPUT).exe: $(OUTPUT)
$(OUTPUT):
GOARCH=$(GOARCH) GOOS=$(GOOS) go build -ldflags=$(LDFLAGS) -o $(EXECUTABLE) $(CMD)
debug: ## Build with debug symbols (no stripping)
GOARCH=$(GOARCH) GOOS=$(GOOS) go build -ldflags=$(LDFLAGS_DEBUG) -o $(EXECUTABLE) $(CMD)
.PHONY: debug
x86_%:
GOARCH=amd64 go build -ldflags=$(LDFLAGS) -o $@ $(CMD)
arm_%:
GOARCH=arm64 go build -ldflags=$(LDFLAGS) -o $@ $(CMD)
clean: ## Remove built artifacts
-rm slackdump slackdump.exe $(wildcard *.zip)
-rm -rf slackdump_$(shell date +%Y)*
.PHONY: clean
# Via http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
help: ## help
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
.PHONY: help
docker_test: ## Build container image for testing
$(CONTAINER_CMD) build .
callvis: ## Generate call graph visualization
go-callvis -group pkg,type -limit $(PKG) $(PKG)/cmd/slackdump
goreleaser: ## Run goreleaser for snapshot release
goreleaser check
goreleaser release --snapshot --clean
tags: ## Generate tags file for editors
gotags -R *.go > $@
generate: | install_tools ## Run go generate for all packages
go generate ./...
.PHONY:generate
install_tools: ## Install required development tools (mockgen, stringer)
go install go.uber.org/mock/mockgen@latest
go install golang.org/x/tools/cmd/stringer@latest
.PHONY: install_tools
slackdump.pdf: slackdump.ps
slackdump.ps: slackdump.1
# =============================================================================
# Test targets
# =============================================================================
test: ## Run tests
go test -race -cover ./...
.PHONY: test
vet: ## Run go vet
go vet ./...
.PHONY: vet
fmt: ## Check code formatting
@gofmt -d .
.PHONY: fmt
lint: ## Run golangci-lint
golangci-lint run ./...
.PHONY: lint
aurtest: ## Test AUR package build flags
GOFLAGS="-buildmode=pie -trimpath -ldflags=-linkmode=external -mod=readonly -modcacherw" go build -o 'deleteme' ./cmd/slackdump
rm deleteme
.PHONY: aurtest
test-all: fmt vet test aurtest lint ## Run all tests (fmt, vet, tests, AUR build, lint (slow))
.PHONY: test-all