Makefile 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. export GO111MODULE=on
  2. ARCH ?= $(shell uname -m)
  3. BIN := yay
  4. DESTDIR :=
  5. GO ?= go
  6. PKGNAME := yay
  7. PREFIX := /usr/local
  8. MAJORVERSION := 9
  9. MINORVERSION := 3
  10. PATCHVERSION := 3
  11. VERSION ?= ${MAJORVERSION}.${MINORVERSION}.${PATCHVERSION}
  12. GOFLAGS := -v -mod=vendor
  13. EXTRA_GOFLAGS ?=
  14. LDFLAGS := $(LDFLAGS) -X "main.version=${VERSION}"
  15. RELEASE_DIR := ${PKGNAME}_${VERSION}_${ARCH}
  16. PACKAGE := $(RELEASE_DIR).tar.gz
  17. SOURCES ?= $(shell find . -name "*.go" -type f ! -path "./vendor/*")
  18. .PHONY: default
  19. default: build
  20. .PHONY: all
  21. all: | clean release
  22. .PHONY: clean
  23. clean:
  24. $(GO) clean $(GOFLAGS) -i ./...
  25. rm -rf $(BIN) $(PKGNAME)_$(VERSION)_*
  26. .PHONY: test
  27. test:
  28. $(GO) vet $(GOFLAGS) ./...
  29. @test -z "$$(gofmt -l *.go)" || (echo "Files need to be linted. Use make fmt" && false)
  30. $(GO) test $(GOFLAGS) --race -covermode=atomic . ./pkg/...
  31. .PHONY: build
  32. build: $(BIN)
  33. .PHONY: release
  34. release: $(PACKAGE)
  35. $(BIN): $(SOURCES)
  36. $(GO) build $(GOFLAGS) -ldflags '-s -w $(LDFLAGS)' $(EXTRA_GOFLAGS) -o $@
  37. $(RELEASE_DIR):
  38. mkdir $(RELEASE_DIR)
  39. $(PACKAGE): $(BIN) $(RELEASE_DIR)
  40. cp -t $(RELEASE_DIR) ${BIN} doc/${PKGNAME}.8 completions/*
  41. tar -czvf $(PACKAGE) $(RELEASE_DIR)
  42. .PHONY: docker-release-all
  43. docker-release-all:
  44. make docker-release ARCH=x86_64
  45. make docker-release ARCH=armv7h
  46. make docker-release ARCH=aarch64
  47. .PHONY: docker-release
  48. docker-release:
  49. docker build --target builder_env --build-arg BUILD_ARCH="$(ARCH)" -t yay-$(ARCH):${VERSION} .
  50. docker run -e="ARCH=$(ARCH)" --name yay-$(ARCH) yay-$(ARCH):${VERSION} make release
  51. docker cp yay-$(ARCH):/app/${PACKAGE} $(PACKAGE)
  52. docker container rm yay-$(ARCH)
  53. .PHONY: docker-build
  54. docker-build:
  55. docker build --target builder --build-arg BUILD_ARCH="$(ARCH)" -t yay-build-$(ARCH):${VERSION} .
  56. docker run -e="ARCH=$(ARCH)" --name yay-build-${ARCH} yay-build-${ARCH}:${VERSION} /bin/sh
  57. docker cp yay-build-${ARCH}:/app/${BIN} ${BIN}
  58. docker container rm yay-build-${ARCH}
  59. .PHONY: test-vendor
  60. test-vendor: vendor
  61. @diff=$$(git diff vendor/); \
  62. if [ -n "$$diff" ]; then \
  63. echo "Please run 'make vendor' and commit the result:"; \
  64. echo "$${diff}"; \
  65. exit 1; \
  66. fi;
  67. .PHONY: lint
  68. lint:
  69. golangci-lint run
  70. golint -set_exit_status . ./pkg/...
  71. .PHONY: fmt
  72. fmt:
  73. #go fmt -mod=vendor $(GOFILES) ./... Doesn't work yet but will be supported soon
  74. gofmt -s -w $(SOURCES)
  75. .PHONY: vendor
  76. vendor:
  77. $(GO) mod tidy && $(GO) mod vendor
  78. .PHONY: install
  79. install:
  80. install -Dm755 ${BIN} $(DESTDIR)$(PREFIX)/bin/${BIN}
  81. install -Dm644 doc/${PKGNAME}.8 $(DESTDIR)$(PREFIX)/share/man/man8/${PKGNAME}.8
  82. install -Dm644 completions/bash $(DESTDIR)$(PREFIX)/share/bash-completion/completions/${PKGNAME}
  83. install -Dm644 completions/zsh $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_${PKGNAME}
  84. install -Dm644 completions/fish $(DESTDIR)$(PREFIX)/share/fish/vendor_completions.d/${PKGNAME}.fish
  85. .PHONY: uninstall
  86. uninstall:
  87. rm -f $(DESTDIR)$(PREFIX)/bin/${BIN}
  88. rm -f $(DESTDIR)$(PREFIX)/share/man/man8/${PKGNAME}.8
  89. rm -f $(DESTDIR)$(PREFIX)/share/bash-completion/completions/${PKGNAME}
  90. rm -f $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_${PKGNAME}
  91. rm -f $(DESTDIR)$(PREFIX)/share/fish/vendor_completions.d/${PKGNAME}.fish