diff --git a/Makefile b/Makefile index 57ee33bf6..5d798782f 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,10 @@ -.PHONY: build check-clean clean build-lattice cover cover-viz default docker docker-build docker-test docker-tag-push generate generate-protoc generate-pql generate-statik gometalinter install install-build-deps install-golangci-lint install-gometalinter install-protoc install-protoc-gen-gofast install-peg install-statik release release-build test testv testv-race testvsub testvsub-race test-txstore-rbf - -CLONE_URL=github.com/pilosa/pilosa +.PHONY: build clean build-lattice cover cover-viz default docker docker-build docker-tag-push generate generate-protoc generate-pql generate-statik generate-stringer install install-protoc-gen-gofast install-protoc install-statik install-peg test VERSION := $(shell git describe --tags 2> /dev/null || echo unknown) VARIANT = Molecula GO=go GOOS=$(shell $(GO) env GOOS) GOARCH=$(shell $(GO) env GOARCH) VERSION_ID=$(if $(TRIAL_DEADLINE),trial-$(TRIAL_DEADLINE)-,)$(VERSION)-$(GOOS)-$(GOARCH) -BRANCH := $(if $(CIRCLE_BRANCH),$(CIRCLE_BRANCH),$(shell git rev-parse --abbrev-ref HEAD)) -BRANCH_ID := $(BRANCH)-$(GOOS)-$(GOARCH) BUILD_TIME := $(shell date -u +%FT%T%z) COMMIT := $(shell git describe --exact-match >/dev/null 2>&1 || git rev-parse --short HEAD) LDFLAGS="-X github.com/featurebasedb/featurebase/v3.Version=$(VERSION) -X github.com/featurebasedb/featurebase/v3.BuildTime=$(BUILD_TIME) -X github.com/featurebasedb/featurebase/v3.Variant=$(VARIANT) -X github.com/featurebasedb/featurebase/v3.Commit=$(COMMIT) -X github.com/featurebasedb/featurebase/v3.TrialDeadline=$(TRIAL_DEADLINE)" @@ -16,14 +12,8 @@ GO_VERSION=1.19 DOCKER_BUILD= # set to 1 to use `docker-build` instead of `build` when creating a release BUILD_TAGS += TEST_TAGS = roaringparanoia -UNAME := $(shell uname -s) TEST_TIMEOUT=10m RACE_TEST_TIMEOUT=10m -ifeq ($(UNAME), Darwin) - IS_MACOS:=1 -else - IS_MACOS:=0 -endif export GO111MODULE=on export GOPRIVATE=github.com/molecula @@ -84,6 +74,7 @@ testvsub-race: echo; echo "999 done testing subpkg $$pkg"; \ done + bench: $(GO) test $(GOPACKAGES) -bench=. -run=NoneZ -timeout=127m $(TESTFLAGS) @@ -100,43 +91,6 @@ cover-viz: cover build: $(GO) build -tags='$(BUILD_TAGS)' -ldflags $(LDFLAGS) $(FLAGS) ./cmd/featurebase -# Create a single release build under the build directory -release-build: - $(MAKE) $(if $(DOCKER_BUILD),docker-)build FLAGS="-o build/featurebase-$(VERSION_ID)/featurebase" - cp NOTICE install/featurebase.conf install/featurebase*.service build/featurebase-$(VERSION_ID) - tar -cvz -C build -f build/featurebase-$(VERSION_ID).tar.gz featurebase-$(VERSION_ID)/ - @echo Created release build: build/featurebase-$(VERSION_ID).tar.gz - -test-release-build: docker-build - mv build/featurebase-$(VERSION_ID).tar.gz install/ - cd install && docker build -t featurebase:test_installation \ - -f test_installation.Dockerfile \ - --build-arg release_tarball=featurebase-$(VERSION_ID).tar.gz . - mv install/featurebase-$(VERSION_ID).tar.gz build/ - docker run -it -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ - featurebase:test_installation - -# Error out if there are untracked changes in Git -check-clean: -ifndef SKIP_CHECK_CLEAN - $(if $(shell git status --porcelain),$(error Git status is not clean! Please commit or checkout/reset changes.)) -endif - -# Create release build tarballs for all supported platforms. DEPRECATED: Use `docker-release` -release: check-clean generate-statik-docker - $(MAKE) release-build GOOS=darwin GOARCH=amd64 - $(MAKE) release-build GOOS=darwin GOARCH=arm64 - $(MAKE) release-build GOOS=linux GOARCH=amd64 - $(MAKE) release-build GOOS=linux GOARCH=arm64 - -# Create release build tarballs for all supported platforms. Same as `release`, but without embedded Lattice UI. -release-sans-ui: check-clean - rm -f statik/statik.go - $(MAKE) release-build GOOS=darwin GOARCH=amd64 - $(MAKE) release-build GOOS=darwin GOARCH=arm64 - $(MAKE) release-build GOOS=linux GOARCH=amd64 - $(MAKE) release-build GOOS=linux GOARCH=arm64 - package: go build -o featurebase ./cmd/featurebase GOARCH=$(GOARCH) VERSION=$(VERSION) nfpm package --packager deb --target featurebase.$(VERSION).$(GOARCH).deb @@ -168,17 +122,10 @@ authclustertests: vendor PROJECT=$(PROJECT) ENABLE_AUTH=1 $(DOCKER_COMPOSE) -f internal/clustertests/docker-compose.yml run client1 CLUSTERTESTS_FB_ARGS=$(AUTH_ARGS) $(DOCKER_COMPOSE) -f internal/clustertests/docker-compose.yml down -# Install Pilosa +# Install FeatureBase install: $(GO) install -tags='$(BUILD_TAGS)' -ldflags $(LDFLAGS) $(FLAGS) ./cmd/featurebase -# Install the single-node PLG version of FeatureBase -plg: - $(GO) build -tags='plg $(BUILD_TAGS)' -ldflags $(LDFLAGS) $(FLAGS) ./cmd/featurebase - -install-bench: - $(GO) install -tags='$(BUILD_TAGS)' -ldflags $(LDFLAGS) $(FLAGS) ./cmd/pilosa-bench - # Build the lattice assets build-lattice: docker build -t lattice:build ./lattice @@ -265,36 +212,6 @@ docker-idk-tag-push: docker push registry.gitlab.com/molecula/featurebase/idk:$(VERSION_ID) @echo Pushed docker image: registry.gitlab.com/molecula/featurebase/idk:$(VERSION_ID) -# Install diagnostic pilosa-keydump tool. Allows viewing the keys in a transaction-engine directory. -pilosa-keydump: - $(GO) install -tags='$(BUILD_TAGS)' -ldflags $(LDFLAGS) $(FLAGS) ./cmd/pilosa-keydump - -# Install diagnostic pilosa-chk tool for string translations and fragment checksums. -pilosa-chk: - $(GO) install -tags='$(BUILD_TAGS)' -ldflags $(LDFLAGS) $(FLAGS) ./cmd/pilosa-chk - -pilosa-fsck: - cd ./cmd/pilosa-fsck && make install && make release - -# Run Pilosa tests inside Docker container -docker-test: - docker run --rm -v $(PWD):/go/src/$(CLONE_URL) -w /go/src/$(CLONE_URL) golang:$(GO_VERSION) go test -tags='$(BUILD_TAGS) $(TEST_TAGS)' $(TESTFLAGS) -timeout $(TEST_TIMEOUT) $(GOPACKAGES) - -# Must use bash in order to -o pipefail; otherwise the tee will hide red tests. -# run top tests, not subdirs. print summary red/green after. -# The \-\-\- FAIL avoids counting the extra two FAIL strings at then bottom of log.topt. -topt: - mv log.topt.roar log.topt.roar.prev || true - $(eval SHELL:=/bin/bash) set -o pipefail; $(GO) test -v -timeout $(RACE_TEST_TIMEOUT) -tags='$(BUILD_TAGS) $(TEST_TAGS)' $(TESTFLAGS) 2>&1 | tee log.topt.roar - @echo " log.topt.roar green: \c"; cat log.topt.roar | grep PASS |wc -l - @echo " log.topt.roar red: \c"; cat log.topt.roar | grep '\-\-\- FAIL' | wc -l - -topt-race: - mv log.topt.race log.topt.race.prev || true - $(eval SHELL:=/bin/bash) set -o pipefail; CGO_ENABLED=1 $(GO) test -race -timeout $(RACE_TEST_TIMEOUT) -v -tags='$(BUILD_TAGS) $(TEST_TAGS)' $(TESTFLAGS) 2>&1 | tee log.topt.race - @echo " log.topt.race green: \c"; cat log.topt.race | grep PASS |wc -l - @echo " log.topt.race red: \c"; cat log.topt.race | grep '\-\-\- FAIL' | wc -l - # Run golangci-lint golangci-lint: require-golangci-lint golangci-lint run --timeout 3m --skip-files '.*\.peg\.go' @@ -305,31 +222,6 @@ linter: golangci-lint # Better alias ocd: golangci-lint -# Run gometalinter with custom flags -# Note the "./..." in gometalinter is still allowed, because we do want -# linting to reach IDK pagkages. -gometalinter: require-gometalinter vendor - GO111MODULE=off gometalinter --vendor --disable-all \ - --deadline=300s \ - --enable=deadcode \ - --enable=gochecknoinits \ - --enable=gofmt \ - --enable=goimports \ - --enable=gotype \ - --enable=gotypex \ - --enable=ineffassign \ - --enable=interfacer \ - --enable=maligned \ - --enable=misspell \ - --enable=nakedret \ - --enable=staticcheck \ - --enable=unconvert \ - --enable=unparam \ - --enable=vet \ - --exclude "^internal/.*\.pb\.go" \ - --exclude "^pql/pql.peg.go" \ - ./... - ###################### # Build dependencies # ###################### @@ -340,20 +232,14 @@ require-%: $(info Verified build dependency "$*" is installed.),\ $(error Build dependency "$*" not installed. To install, try `make install-$*`)) -install-build-deps: install-protoc-gen-gofast install-protoc install-statik install-stringer install-peg +install-build-deps: install-protoc-gen-gofast install-protoc install-statik install-peg install-statik: go install github.com/rakyll/statik@latest -install-stringer: - GO111MODULE=off $(GO) get -u golang.org/x/tools/cmd/stringer - install-protoc-gen-gofast: GO111MODULE=off $(GO) get -u github.com/gogo/protobuf/protoc-gen-gofast -install-protoc-gen-go: - GO111MODULE=off $(GO) get -u github.com/golang/protobuf/protoc-gen-go - install-protoc: @echo This tool cannot automatically install protoc. Please download and install protoc from https://google.github.io/proto-lens/installing-protoc.html @echo On mac, brew install protobuf seems to work. @@ -367,11 +253,6 @@ install-peg: install-golangci-lint: GO111MODULE=off $(GO) get github.com/golangci/golangci-lint/cmd/golangci-lint -install-gometalinter: - GO111MODULE=off $(GO) get -u github.com/alecthomas/gometalinter - GO111MODULE=off gometalinter --install - GO111MODULE=off $(GO) get github.com/remyoudompheng/go-misc/deadcode - test-external-lookup: $(GO) test . -tags='$(BUILD_TAGS) $(TEST_TAGS)' $(TESTFLAGS) -run ^TestExternalLookup$$ -externalLookupDSN $(EXTERNAL_LOOKUP_DSN)