/Makefile

https://github.com/vrothberg/vgrep · Makefile · 120 lines · 92 code · 26 blank · 2 comment · 6 complexity · 78d89113ae7dbd201c10b0c1675ca970 MD5 · raw file

  1. export GOPROXY=https://proxy.golang.org
  2. SHELL= /bin/bash
  3. GO ?= go
  4. BUILD_DIR := ./build
  5. PREFIX := /usr/local
  6. BIN_DIR := $(PREFIX)/bin/
  7. NAME := vgrep
  8. PROJECT := github.com/vrothberg/vgrep
  9. VERSION := $(shell cat ./VERSION)
  10. COMMIT := $(shell git rev-parse HEAD 2> /dev/null || true)
  11. CONTAINER_RUNTIME := $(shell command -v podman 2> /dev/null || echo docker)
  12. GO_SRC=$(shell find . -name \*.go)
  13. GO_BUILD=$(GO) build
  14. # Go module support: set `-mod=vendor` to use the vendored sources
  15. ifeq ($(shell go help mod >/dev/null 2>&1 && echo true), true)
  16. GO_BUILD=GO111MODULE=on $(GO) build -mod=vendor
  17. endif
  18. COVERAGE_PATH ?= $(shell pwd)/.coverage
  19. COVERAGE_PROFILE ?= $(shell pwd)/coverage.txt
  20. export COVERAGE_PATH
  21. export COVERAGE_PROFILE
  22. $(shell mkdir -p ${COVERAGE_PATH})
  23. all: check build
  24. .PHONY: build
  25. build: $(GO_SRC)
  26. $(GO_BUILD) -buildmode=pie -o $(BUILD_DIR)/$(NAME) -ldflags "-s -w -X main.version=${VERSION}-$(COMMIT)"
  27. .PHONY: build.coverage
  28. build.coverage: $(GO_SRC)
  29. $(GO) test \
  30. -covermode=count \
  31. -coverpkg=./... \
  32. -mod=vendor \
  33. -tags coverage \
  34. -buildmode=pie -c -o $(BUILD_DIR)/$(NAME) \
  35. -ldflags "-s -w -X main.version=${VERSION}-$(COMMIT)"
  36. .PHONY: codecov
  37. codecov:
  38. bash <(curl -s https://codecov.io/bash) -v -s $(COVERAGE_PATH) -f "coverprofile.integration.*"
  39. .PHONY: release
  40. release: $(GO_SRC)
  41. $(GO_BUILD) -buildmode=pie -o $(BUILD_DIR)/$(NAME) -ldflags "-s -w -X main.version=${VERSION}"
  42. .PHONY: clean
  43. clean:
  44. rm -rf $(BUILD_DIR)
  45. .PHONY: deps
  46. deps:
  47. $(GO) get -u ./...
  48. .PHONY: check
  49. check: $(GO_SRC)
  50. ${BUILD_DIR}/golangci-lint run
  51. .PHONY: test
  52. test: test-integration
  53. .PHONY: test-integration
  54. test-integration:
  55. export PATH=./test/bin:$$PATH; bats test/*.bats
  56. .PHONY: test-integration.coverage
  57. test-integration.coverage:
  58. export PATH=./test/bin:$$PATH; export COVERAGE=1; bats test/*.bats
  59. .PHONY: vendor
  60. vendor:
  61. GO111MODULE=on go mod tidy
  62. GO111MODULE=on go mod vendor
  63. GO111MODULE=on go mod verify
  64. .install.tools:
  65. export \
  66. VERSION=v1.26.0 \
  67. URL=https://raw.githubusercontent.com/golangci/golangci-lint \
  68. BINDIR=${BUILD_DIR} && \
  69. curl -sfL $$URL/$$VERSION/install.sh | sh -s $$VERSION
  70. VERSION=v1.1.0 ./hack/install_bats.sh
  71. curl -L https://github.com/BurntSushi/ripgrep/releases/download/12.0.1/ripgrep-12.0.1-x86_64-unknown-linux-musl.tar.gz | tar xz
  72. mkdir -p ./test/bin && mv ripgrep-12.0.1-x86_64-unknown-linux-musl/rg ./test/bin/ && rm -rf ripgrep-12.0.1-x86_64-unknown-linux-musl
  73. .PHONY: install
  74. install:
  75. cp $(BUILD_DIR)/$(NAME) $(BIN_DIR)
  76. chmod 755 $(BIN_DIR)/$(NAME)
  77. .PHONY: uninstall
  78. uninstall:
  79. rm $(BIN_DIR)/$(NAME)
  80. # CONTAINER MAKE TARGETS
  81. CONTAINER_IMAGE := vgrepdev
  82. CONTAINER_RUNCMD := run --rm --privileged -v `pwd`:/go/src/$(PROJECT)
  83. .PHONY: container-image
  84. container-image:
  85. $(CONTAINER_RUNTIME) build -f Dockerfile -t $(CONTAINER_IMAGE) --build-arg PROJECT=$(PROJECT) .
  86. .PHONY: container-build
  87. container-build: container-image
  88. $(CONTAINER_RUNTIME) $(CONTAINER_RUNCMD) $(CONTAINER_IMAGE) make build
  89. .PHONY: container-release
  90. container-release: container-image
  91. $(CONTAINER_RUNTIME) $(CONTAINER_RUNCMD) $(CONTAINER_IMAGE) make release
  92. .PHONY: container-shell
  93. container-shell: container-image
  94. $(CONTAINER_RUNTIME) $(CONTAINER_RUNCMD) -it $(CONTAINER_IMAGE) sh