|
| 1 | +SHELL := /bin/bash |
| 2 | + |
| 3 | +# name of the binary created |
| 4 | +TARGET := goad |
| 5 | + |
| 6 | +# Prepend our vendor directory to the system GOPATH |
| 7 | +# so that import path resolution will prioritize |
| 8 | +# our third party snapshots. |
| 9 | +GOPATH := ${PWD}/vendor:${GOPATH} |
| 10 | +export GOPATH |
| 11 | + |
| 12 | +# These will be provided to the target |
| 13 | +VERSION := 1.3.0 |
| 14 | +BUILD := `git rev-parse HEAD` |
| 15 | + |
| 16 | +# Timestamp of last commit to allow for reproducable builds |
| 17 | +TIMESTAMP := `git log -1 --date=format:%Y%m%d%H%M --pretty=format:%cd` |
| 18 | + |
| 19 | +# Use linker flags to provide version/build settings to the target |
| 20 | +LDFLAGS = -ldflags "-X=github.com/goadapp/goad/version.version=$(VERSION) -X=github.com/goadapp/goad/version.build=$(BUILD)" |
| 21 | + |
| 22 | +# go source files, ignore vendor directory |
| 23 | +SRC = $(shell find . -type f -name '*.go' -not -path "./vendor/*") |
| 24 | + |
| 25 | +# go source folders to test |
| 26 | +TEST = $(shell go list ./... | grep -v /vendor/) |
| 27 | + |
| 28 | +# $(GO-BUILD) command |
| 29 | +GO-BUILD = go build $(LDFLAGS) |
| 30 | + |
| 31 | +# $(ZIP) command ignoring timestamps and using UTC timezone |
| 32 | +ZIP = TZ=UTC zip -jrX |
| 33 | + |
| 34 | +.PHONY: lambda bindata clean all-zip all linux osx windows check fmt test install uninstall |
| 35 | + |
1 | 36 | all: osx linux windows |
2 | 37 |
|
3 | | -test: |
4 | | - go test ./... |
| 38 | +test: bindata |
| 39 | + @go test $(TEST) |
5 | 40 |
|
6 | 41 | lambda: |
7 | | - GOOS=linux GOARCH=amd64 go build -o data/lambda/goad-lambda ./lambda |
8 | | - zip -jr data/lambda data/lambda |
| 42 | + @GOOS=linux GOARCH=amd64 $(GO-BUILD) -o data/lambda/goad-lambda ./lambda |
| 43 | + @find data/lambda -exec touch -t $(TIMESTAMP) {} \; # strip timestamp |
| 44 | + @$(ZIP) data/lambda data/lambda |
9 | 45 |
|
10 | 46 | bindata: lambda |
11 | | - go get github.com/jteeuwen/go-bindata/... |
12 | | - go-bindata -nocompress -pkg infrastructure -o infrastructure/bindata.go data/lambda.zip |
| 47 | + @go get -u github.com/jteeuwen/go-bindata/... |
| 48 | + @go-bindata -modtime $(TIMESTAMP) -nocompress -pkg infrastructure -o infrastructure/bindata.go data/lambda.zip |
13 | 49 |
|
14 | 50 | linux: bindata |
15 | | - GOOS=linux GOARCH=amd64 go build -o ./build/linux/x86-64/goad ./cli |
16 | | - GOOS=linux GOARCH=386 go build -o ./build/linux/x86/goad ./cli |
| 51 | + @GOOS=linux GOARCH=amd64 $(GO-BUILD) -o build/linux/x86-64/$(TARGET) |
| 52 | + @GOOS=linux GOARCH=386 $(GO-BUILD) -o build/linux/x86/$(TARGET) |
17 | 53 |
|
18 | 54 | osx: bindata |
19 | | - GOOS=darwin GOARCH=amd64 go build -o ./build/osx/x86-64/goad ./cli |
| 55 | + @GOOS=darwin GOARCH=amd64 $(GO-BUILD) -o build/osx/x86-64/$(TARGET) |
20 | 56 |
|
21 | 57 | windows: bindata |
22 | | - GOOS=windows GOARCH=amd64 go build -o ./build/windows/x86-64/goad ./cli |
23 | | - GOOS=windows GOARCH=386 go build -o ./build/windows/x86/goad ./cli |
| 58 | + @GOOS=windows GOARCH=amd64 $(GO-BUILD) -o build/windows/x86-64/$(TARGET) |
| 59 | + @GOOS=windows GOARCH=386 $(GO-BUILD) -o build/windows/x86/$(TARGET) |
24 | 60 |
|
25 | 61 | clean: |
26 | | - rm -rf data/lambda/goad-lambda |
27 | | - rm -rf data/lambda.zip |
28 | | - rm -rf build |
| 62 | + @rm -rf data/lambda/goad-lambda |
| 63 | + @rm -rf data/lambda.zip |
| 64 | + @rm -rf build |
| 65 | + @rm -rf infrastructure/bindata.go |
| 66 | + |
| 67 | +build: bindata |
| 68 | + @$(GO-BUILD) $(LDFLAGS) -o build/$(TARGET) |
| 69 | + |
| 70 | +install: bindata |
| 71 | + @go install $(LDFLAGS) |
| 72 | + |
| 73 | +uninstall: clean |
| 74 | + @go clean -i |
| 75 | + |
| 76 | +fmt: |
| 77 | + @gofmt -l -w $(SRC) |
| 78 | + |
| 79 | +simplify: |
| 80 | + @gofmt -s -l -w $(SRC) |
| 81 | + |
| 82 | +check: |
| 83 | + @test -z $(shell gofmt -l main.go | tee /dev/stderr) || echo "[WARN] Fix formatting issues with 'make fmt'" |
| 84 | + @for d in $$(go list ./... | grep -v /vendor/); do golint $${d}; done |
| 85 | + @go tool vet ${SRC} |
29 | 86 |
|
30 | 87 | all-zip: all |
31 | | - mkdir ./build/zip |
32 | | - zip -jr ./build/zip/goad-osx-x86-64 ./build/osx/x86-64/goad |
33 | | - zip -jr ./build/zip/goad-linux-x86-64 ./build/linux/x86-64/goad |
34 | | - zip -jr ./build/zip/goad-linux-x86 ./build/linux/x86/goad |
35 | | - zip -jr ./build/zip/goad-windows-x86-64 ./build/windows/x86-64/goad |
36 | | - zip -jr ./build/zip/goad-windows-x86 ./build/windows/x86/goad |
37 | | - |
38 | | -.PHONY: lambda bindata |
| 88 | + @mkdir -p ./build/zip |
| 89 | + @find build -exec touch -t $(TIMESTAMP) {} \; # strip timestamp |
| 90 | + @$(ZIP) ./build/zip/goad-osx-x86-64 ./build/osx/x86-64/goad |
| 91 | + @$(ZIP) ./build/zip/goad-linux-x86-64 ./build/linux/x86-64/goad |
| 92 | + @$(ZIP) ./build/zip/goad-linux-x86 ./build/linux/x86/goad |
| 93 | + @$(ZIP) ./build/zip/goad-windows-x86-64 ./build/windows/x86-64/goad |
| 94 | + @$(ZIP) ./build/zip/goad-windows-x86 ./build/windows/x86/goad |
0 commit comments