Makefile 3.7 KB

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