mirror of
https://github.com/zrepl/zrepl.git
synced 2024-12-23 15:38:49 +01:00
61af396fdd
* reproducible tarball * includes go version * sha512sum The sha512 sum file should be signed manually, don't want that in the Makefile because we may build in docker.
107 lines
3.1 KiB
Makefile
107 lines
3.1 KiB
Makefile
.PHONY: generate build test vet cover release docs docs-clean clean vendordeps
|
|
.DEFAULT_GOAL := build
|
|
|
|
ROOT := github.com/zrepl/zrepl
|
|
SUBPKGS := cmd logger rpc util zfs
|
|
|
|
_TESTPKGS := $(ROOT) $(foreach p,$(SUBPKGS),$(ROOT)/$(p))
|
|
|
|
ARTIFACTDIR := artifacts
|
|
|
|
ifndef ZREPL_VERSION
|
|
ZREPL_VERSION := $(shell git describe --dirty 2>/dev/null || echo "ZREPL_BUILD_INVALID_VERSION" )
|
|
ifeq ($(ZREPL_VERSION),ZREPL_BUILD_INVALID_VERSION) # can't use .SHELLSTATUS because Debian Stretch is still on gmake 4.1
|
|
$(error cannot infer variable ZREPL_VERSION using git and variable is not overriden by make invocation)
|
|
endif
|
|
endif
|
|
GO_LDFLAGS := "-X github.com/zrepl/zrepl/cmd.zreplVersion=$(ZREPL_VERSION)"
|
|
|
|
GO_BUILD := go build -ldflags $(GO_LDFLAGS)
|
|
|
|
RELEASE_BINS := $(ARTIFACTDIR)/zrepl-freebsd-amd64 $(ARTIFACTDIR)/zrepl-linux-amd64
|
|
RELEASE_NOARCH := $(ARTIFACTDIR)/zrepl-noarch.tar
|
|
THIS_PLATFORM_RELEASE_BIN := $(shell bash -c 'source <(go env) && echo "zrepl-$${GOOS}-$${GOARCH}"' )
|
|
|
|
vendordeps:
|
|
dep ensure -v -vendor-only
|
|
|
|
generate: #not part of the build, must do that manually
|
|
@for pkg in $(_TESTPKGS); do\
|
|
go generate "$$pkg" || exit 1; \
|
|
done;
|
|
|
|
build:
|
|
@echo "INFO: In case of missing dependencies, run 'make vendordeps'"
|
|
$(GO_BUILD) -o "$(ARTIFACTDIR)/zrepl"
|
|
|
|
test:
|
|
@for pkg in $(_TESTPKGS); do \
|
|
echo "Testing $$pkg"; \
|
|
go test "$$pkg" || exit 1; \
|
|
done;
|
|
|
|
vet:
|
|
@for pkg in $(_TESTPKGS); do \
|
|
echo "Vetting $$pkg"; \
|
|
go vet "$$pkg" || exit 1; \
|
|
done;
|
|
|
|
cover: artifacts
|
|
@for pkg in $(_TESTPKGS); do \
|
|
profile="$(ARTIFACTDIR)/cover-$$(basename $$pkg).out"; \
|
|
go test -coverprofile "$$profile" $$pkg || exit 1; \
|
|
if [ -f "$$profile" ]; then \
|
|
go tool cover -html="$$profile" -o "$${profile}.html" || exit 2; \
|
|
fi; \
|
|
done;
|
|
|
|
$(ARTIFACTDIR):
|
|
mkdir -p "$@"
|
|
|
|
$(ARTIFACTDIR)/docs: $(ARTIFACTDIR)
|
|
mkdir -p "$@"
|
|
|
|
$(ARTIFACTDIR)/bash_completion: $(RELEASE_BINS)
|
|
artifacts/$(THIS_PLATFORM_RELEASE_BIN) bashcomp "$@"
|
|
|
|
$(ARTIFACTDIR)/go_version.txt:
|
|
go version > $@
|
|
|
|
docs: $(ARTIFACTDIR)/docs
|
|
make -C docs \
|
|
html \
|
|
BUILDDIR=../artifacts/docs \
|
|
|
|
docs-clean:
|
|
make -C docs \
|
|
clean \
|
|
BUILDDIR=../artifacts/docs
|
|
|
|
|
|
.PHONY: $(RELEASE_BINS)
|
|
# TODO: two wildcards possible
|
|
$(RELEASE_BINS): $(ARTIFACTDIR)/zrepl-%-amd64: generate $(ARTIFACTDIR) vet test
|
|
@echo "INFO: In case of missing dependencies, run 'make vendordeps'"
|
|
GOOS=$* GOARCH=amd64 $(GO_BUILD) -o "$(ARTIFACTDIR)/zrepl-$*-amd64"
|
|
|
|
$(RELEASE_NOARCH): docs $(ARTIFACTDIR)/bash_completion $(ARTIFACTDIR)/go_version.txt
|
|
tar --mtime='1970-01-01' --sort=name \
|
|
--transform 's/$(ARTIFACTDIR)/zrepl-$(ZREPL_VERSION)-noarch/' \
|
|
-acf $@ \
|
|
$(ARTIFACTDIR)/docs/html \
|
|
$(ARTIFACTDIR)/bash_completion \
|
|
$(ARTIFACTDIR)/go_version.txt
|
|
|
|
release: $(RELEASE_BINS) $(RELEASE_NOARCH)
|
|
rm -rf "$(ARTIFACTDIR)/release"
|
|
mkdir -p "$(ARTIFACTDIR)/release"
|
|
cp $^ "$(ARTIFACTDIR)/release"
|
|
cd "$(ARTIFACTDIR)/release" && sha512sum $$(ls | sort) > sha512sum.txt
|
|
@if echo "$(ZREPL_VERSION)" | grep dirty > /dev/null; then\
|
|
echo '[WARN] Do not publish the artifacts, make variable ZREPL_VERSION=$(ZREPL_VERSION) indicates they are dirty!'; \
|
|
exit 1; \
|
|
fi
|
|
|
|
clean: docs-clean
|
|
rm -rf "$(ARTIFACTDIR)"
|