aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile56
1 files changed, 56 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..40c3ad2
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,56 @@
+.POSIX:
+DESTDIR=$(HOME)
+PREFIX=/.local
+INSTALL_PATH=$(DESTDIR)$(PREFIX)/bin
+BIN=prognosis
+DIST=dist
+
+.PHONY: help build install uninstall test vet fmt ci cross clean
+
+help: ## show this help
+ @grep -E '^[a-z-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[1m%-16s\033[0m %s\n", $$1, $$2}'
+
+build: ## build the Go binary into ./$(BIN)
+ go build -trimpath -ldflags "-s -w" -o $(BIN) ./cmd/prognosis
+
+install: build ## build and install the Go binary
+ mkdir -p $(INSTALL_PATH)
+ # rm first: the target may be a symlink into this repo (see `link`), and cp
+ # follows symlinks -- it would write the binary over bin/prognosis itself.
+ rm -f $(INSTALL_PATH)/$(BIN)
+ cp $(BIN) $(INSTALL_PATH)/$(BIN)
+ chmod 755 $(INSTALL_PATH)/$(BIN)
+ @echo "Installed. Config: $$($(INSTALL_PATH)/$(BIN) -config)"
+
+
+
+uninstall: ## remove the installed binary
+ rm -f $(INSTALL_PATH)/$(BIN)
+
+test: ## run the tests
+ go test ./...
+
+vet: ## go vet
+ go vet ./...
+
+fmt: ## gofmt the tree
+ gofmt -w .
+
+ci: ## pre-push gate: gofmt clean, vet, tests, no third-party deps
+ @test -z "$$(gofmt -l .)" || { echo "gofmt needed:"; gofmt -l .; exit 1; }
+ go vet ./...
+ go test ./...
+ @deps=$$(go list -deps ./... | grep -E '^[a-z0-9-]+\.[a-z]+/' | grep -v '^github.com/lukaszkasprzak/prognosis' || true); \
+ test -z "$$deps" || { echo "third-party dependencies crept in:"; echo "$$deps"; exit 1; }
+ @echo "ci ok"
+
+cross: ## cross-compile into $(DIST)/ -- android/arm64 is the phone
+ mkdir -p $(DIST)
+ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags "-s -w" -o $(DIST)/$(BIN)-linux-amd64 ./cmd/prognosis
+ CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -trimpath -ldflags "-s -w" -o $(DIST)/$(BIN)-linux-arm64 ./cmd/prognosis
+ CGO_ENABLED=0 GOOS=android GOARCH=arm64 go build -trimpath -ldflags "-s -w" -o $(DIST)/$(BIN)-android-arm64 ./cmd/prognosis
+ @ls -la $(DIST)
+
+
+clean: ## remove build artifacts
+ rm -rf $(BIN) $(DIST)