SOURCE ?= file go_bindata github aws_s3 google_cloud_storage godoc_vfs gitlab DATABASE ?= postgres mysql redshift cassandra spanner cockroachdb clickhouse mongodb sqlserver VERSION ?= $(shell git describe --tags 2>/dev/null | cut -c 2-) TEST_FLAGS ?= REPO_OWNER ?= $(shell cd .. && basename "$$(pwd)") COVERAGE_DIR ?= .coverage build-cli: clean -mkdir ./cli/build cd ./cmd/migrate && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o ../../cli/build/migrate.linux-amd64 -ldflags='-X main.Version=$(VERSION) -extldflags "-static"' -tags '$(DATABASE) $(SOURCE)' . cd ./cmd/migrate && CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -a -o ../../cli/build/migrate.darwin-amd64 -ldflags='-X main.Version=$(VERSION) -extldflags "-static"' -tags '$(DATABASE) $(SOURCE)' . cd ./cmd/migrate && CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -a -o ../../cli/build/migrate.windows-amd64.exe -ldflags='-X main.Version=$(VERSION) -extldflags "-static"' -tags '$(DATABASE) $(SOURCE)' . cd ./cli/build && find . -name 'migrate*' | xargs -I{} tar czf {}.tar.gz {} cd ./cli/build && shasum -a 256 * > sha256sum.txt cat ./cli/build/sha256sum.txt clean: -rm -r ./cli/build test-short: make test-with-flags --ignore-errors TEST_FLAGS='-short' test: @-rm -r $(COVERAGE_DIR) @mkdir $(COVERAGE_DIR) make test-with-flags TEST_FLAGS='-v -race -covermode atomic -coverprofile $$(COVERAGE_DIR)/_$$(RAND).txt -bench=. -benchmem -timeout 20m' @echo 'mode: atomic' > $(COVERAGE_DIR)/combined.txt @cat $(COVERAGE_DIR)/_*.txt | grep -v 'mode: atomic' >> $(COVERAGE_DIR)/combined.txt test-with-flags: @echo SOURCE: $(SOURCE) @echo DATABASE: $(DATABASE) @go test $(TEST_FLAGS) . @go test $(TEST_FLAGS) ./cli/... @go test $(TEST_FLAGS) ./database @go test $(TEST_FLAGS) ./testing/... @echo -n '$(SOURCE)' | tr -s ' ' '\n' | xargs -I{} go test $(TEST_FLAGS) ./source/{} @go test $(TEST_FLAGS) ./source/testing/... @go test $(TEST_FLAGS) ./source/stub/... @echo -n '$(DATABASE)' | tr -s ' ' '\n' | xargs -I{} go test $(TEST_FLAGS) ./database/{} @go test $(TEST_FLAGS) ./database/testing/... @go test $(TEST_FLAGS) ./database/stub/... kill-orphaned-docker-containers: docker rm -f $(shell docker ps -aq --filter label=migrate_test) html-coverage: go tool cover -html=$(COVERAGE_DIR)/combined.txt list-external-deps: $(call external_deps,'.') $(call external_deps,'./cli/...') $(call external_deps,'./testing/...') $(foreach v, $(SOURCE), $(call external_deps,'./source/$(v)/...')) $(call external_deps,'./source/testing/...') $(call external_deps,'./source/stub/...') $(foreach v, $(DATABASE), $(call external_deps,'./database/$(v)/...')) $(call external_deps,'./database/testing/...') $(call external_deps,'./database/stub/...') restore-import-paths: find . -name '*.go' -type f -execdir sed -i '' s%\"github.com/$(REPO_OWNER)/migrate%\"github.com/mattes/migrate%g '{}' \; rewrite-import-paths: find . -name '*.go' -type f -execdir sed -i '' s%\"github.com/mattes/migrate%\"github.com/$(REPO_OWNER)/migrate%g '{}' \; # example: fswatch -0 --exclude .godoc.pid --event Updated . | xargs -0 -n1 -I{} make docs docs: -make kill-docs nohup godoc -play -http=127.0.0.1:6064 /dev/null 2>&1 & echo $$! > .godoc.pid cat .godoc.pid kill-docs: @cat .godoc.pid kill -9 $$(cat .godoc.pid) rm .godoc.pid open-docs: open http://localhost:6064/pkg/github.com/$(REPO_OWNER)/migrate # example: make release V=0.0.0 release: git tag v$(V) @read -p "Press enter to confirm and push to origin ..." && git push origin v$(V) define external_deps @echo '-- $(1)'; go list -f '{{join .Deps "\n"}}' $(1) | grep -v github.com/$(REPO_OWNER)/migrate | xargs go list -f '{{if not .Standard}}{{.ImportPath}}{{end}}' endef .PHONY: build-cli clean test-short test test-with-flags html-coverage \ restore-import-paths rewrite-import-paths list-external-deps release \ docs kill-docs open-docs kill-orphaned-docker-containers SHELL = /bin/bash RAND = $(shell echo $$RANDOM)