github.com/psrajat/prototool@v1.3.0/Makefile (about)

     1  SRCS := $(shell find . -name '*.go' | grep -v ^\.\/vendor\/ | grep -v ^\.\/example\/ | grep -v \/gen\/grpcpb\/)
     2  PKGS := $(shell go list ./... | grep -v github.com\/uber\/prototool\/example | grep -v \/gen\/grpcpb)
     3  BINS := github.com/uber/prototool/internal/cmd/prototool
     4  
     5  DOCKER_IMAGE := golang:1.10.3
     6  
     7  .PHONY: all
     8  all: lint cover
     9  
    10  .PHONY: ci
    11  ci: init lint codecov
    12  
    13  .PHONY: init
    14  init:
    15  	go get github.com/Masterminds/glide
    16  	rm -rf vendor
    17  	glide install
    18  
    19  .PHONY: vendor
    20  vendor:
    21  	go get github.com/Masterminds/glide
    22  	rm -rf vendor
    23  	glide update
    24  
    25  .PHONY: install
    26  install:
    27  	go install \
    28  		-ldflags "-X 'github.com/uber/prototool/internal/vars.GitCommit=$(shell git rev-list -1 HEAD)' -X 'github.com/uber/prototool/internal/vars.BuiltTimestamp=$(shell date -u)'" \
    29  		$(BINS)
    30  
    31  .PHONY: license
    32  license:
    33  	@go install ./vendor/go.uber.org/tools/update-license
    34  	update-license $(SRCS)
    35  
    36  .PHONY: golden
    37  golden: install
    38  	for file in $(shell find internal/cmd/testdata/format -name '*.proto.golden'); do \
    39  		rm -f $${file}; \
    40  	done
    41  	for file in $(shell find internal/cmd/testdata/format -name '*.proto'); do \
    42  		prototool format $${file} > $${file}.golden || true; \
    43  	done
    44  	for file in $(shell find internal/cmd/testdata/format-fix -name '*.proto.golden'); do \
    45  		rm -f $${file}; \
    46  	done
    47  	for file in $(shell find internal/cmd/testdata/format-fix -name '*.proto'); do \
    48  		prototool format --fix $${file} > $${file}.golden || true; \
    49  	done
    50  
    51  .PHONY: example
    52  example: install
    53  	@go install ./vendor/github.com/gogo/protobuf/protoc-gen-gogoslick
    54  	@go install ./vendor/github.com/golang/protobuf/protoc-gen-go
    55  	@go install ./vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
    56  	@go install ./vendor/go.uber.org/yarpc/encoding/protobuf/protoc-gen-yarpc-go
    57  	rm -rf example/gen
    58  	prototool all example/idl/uber
    59  	touch ./example/gen/proto/go/foo/.nocover
    60  	touch ./example/gen/proto/go/sub/.nocover
    61  	go build ./example/gen/proto/go/foo
    62  	go build ./example/gen/proto/go/sub
    63  	go build ./example/cmd/excited/main.go
    64  	prototool lint etc/style
    65  
    66  .PHONY: internalgen
    67  internalgen: install
    68  	prototool generate internal/cmd/testdata/grpc
    69  	rm -f etc/config/example/prototool.yaml
    70  	prototool config init etc/config/example --uncomment
    71  
    72  .PHONY: generate
    73  generate: license golden example internalgen
    74  
    75  .PHONY: checknodiffgenerated
    76  checknodiffgenerated:
    77  	$(eval CHECKNODIFFGENERATED_PRE := $(shell mktemp -t checknodiffgenerated_pre.XXXXX))
    78  	$(eval CHECKNODIFFGENERATED_POST := $(shell mktemp -t checknodiffgenerated_post.XXXXX))
    79  	$(eval CHECKNODIFFGENERATED_DIFF := $(shell mktemp -t checknodiffgenerated_diff.XXXXX))
    80  	git status --short > $(CHECKNODIFFGENERATED_PRE)
    81  	$(MAKE) generate
    82  	git status --short > $(CHECKNODIFFGENERATED_POST)
    83  	@diff $(CHECKNODIFFGENERATED_PRE) $(CHECKNODIFFGENERATED_POST) > $(CHECKNODIFFGENERATED_DIFF) || true
    84  	@[ ! -s "$(CHECKNODIFFGENERATED_DIFF)" ] || (echo "make generate produced a diff, make sure to check these in:" | cat - $(CHECKNODIFFGENERATED_DIFF) && false)
    85  
    86  .PHONY: golint
    87  golint:
    88  	@go install ./vendor/github.com/golang/lint/golint
    89  	for file in $(SRCS); do \
    90  		golint $${file}; \
    91  		if [ -n "$$(golint $${file})" ]; then \
    92  			exit 1; \
    93  		fi; \
    94  	done
    95  
    96  .PHONY: vet
    97  vet:
    98  	go vet $(PKGS)
    99  
   100  .PHONY:
   101  errcheck:
   102  	@go install ./vendor/github.com/kisielk/errcheck
   103  	errcheck -ignoretests $(PKGS)
   104  
   105  .PHONY: staticcheck
   106  staticcheck:
   107  	@go install ./vendor/honnef.co/go/tools/cmd/staticcheck
   108  	staticcheck --tests=false $(PKGS)
   109  
   110  .PHONY: unused
   111  unused:
   112  	@go install ./vendor/honnef.co/go/tools/cmd/unused
   113  	unused --tests=false $(PKGS)
   114  
   115  .PHONY: checklicense
   116  checklicense: install
   117  	@go install ./vendor/go.uber.org/tools/update-license
   118  	@echo update-license --dry $(SRCS)
   119  	@if [ -n "$$(update-license --dry $(SRCS))" ]; then \
   120  		echo "These files need to have their license updated by running make license:"; \
   121  		update-license --dry $(SRCS); \
   122  		exit 1; \
   123  	fi
   124  
   125  .PHONY: lint
   126  lint: checknodiffgenerated golint vet errcheck staticcheck unused checklicense
   127  
   128  .PHONY: test
   129  test:
   130  	go test -race $(PKGS)
   131  
   132  .PHONY: cover
   133  cover:
   134  	@go install ./vendor/golang.org/x/tools/cmd/cover
   135  	@go install ./vendor/github.com/wadey/gocovmerge
   136  	./etc/bin/cover.sh $(PKGS)
   137  	go tool cover -html=coverage.txt -o cover.html
   138  	go tool cover -func=coverage.txt | grep total
   139  
   140  .PHONY: codecov
   141  codecov: SHELL := /bin/bash
   142  codecov: cover
   143  	bash <(curl -s https://codecov.io/bash) -c -f coverage.txt
   144  
   145  .PHONY: releasegen
   146  releasegen: internalgen
   147  	docker run \
   148  		--volume "$(CURDIR):/go/src/github.com/uber/prototool" \
   149  		--workdir "/go/src/github.com/uber/prototool" \
   150  		$(DOCKER_IMAGE) \
   151  		bash -x etc/bin/releasegen.sh
   152  
   153  .PHONY: brewgen
   154  brewgen:
   155  	sh etc/bin/brewgen.sh
   156  
   157  .PHONY: releaseinstall
   158  releaseinstall: releasegen releaseclean
   159  	tar -C /usr/local --strip-components 1 -xzf release/prototool-$(shell uname -s)-$(shell uname -m).tar.gz
   160  
   161  .PHONY: releaseclean
   162  releaseclean:
   163  	rm -f /usr/local/bin/prototool
   164  	rm -f /usr/local/etc/bash_completion.d/prototool
   165  	rm -f /usr/local/etc/zsh_completion.d/prototool
   166  	rm -f /usr/local/share/man/man1/prototool*
   167  
   168  .PHONY: clean
   169  clean:
   170  	go clean -i $(PKGS)
   171  	git clean -xdf --exclude vendor
   172  
   173  .PHONY: cleanall
   174  cleanall: clean releaseclean