diff --git a/.gitignore b/.gitignore index 2474b01..b8ebbbb 100644 --- a/.gitignore +++ b/.gitignore @@ -17,5 +17,4 @@ config.yml # Output binary minitor -minitor-linux-* -minitor-darwin-amd64 +dist/ diff --git a/Dockerfile b/Dockerfile index dd3a9f6..8f7c475 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,7 @@ RUN chmod -R 755 /app/scripts # Copy minitor in ARG ARCH=amd64 -COPY ./minitor-linux-${ARCH} ./minitor +COPY ./dist/minitor-linux-${ARCH} ./minitor # Drop to non-root user USER minitor diff --git a/Makefile b/Makefile index e5c5791..76c8f04 100644 --- a/Makefile +++ b/Makefile @@ -1,36 +1,44 @@ DOCKER_TAG ?= minitor-go-${USER} GIT_TAG_NAME := $(shell git tag -l --contains HEAD) GIT_SHA := $(shell git rev-parse HEAD) -VERSION := $(if $(GIT_TAG_NAME),$(GIT_TAG_NAME),$(GIT_SHA)) +export VERSION := $(if $(GIT_TAG_NAME),$(GIT_TAG_NAME),$(GIT_SHA)) +GOFILES = *.go +# Multi-arch targets are generated from this +TARGET_ALIAS = minitor-linux-amd64 minitor-linux-arm minitor-linux-arm64 minitor-darwin-amd64 +TARGETS = $(addprefix dist/,$(TARGET_ALIAS)) +# Default make target will run tests +.DEFAULT_GOAL = test +# Build all static Minitor binaries .PHONY: all -all: minitor-linux-amd64 minitor-linux-arm minitor-linux-arm64 +all: $(TARGETS) -.PHONY: default -default: test +# Build all static Linux Minitor binaries. Used in Docker images +.PHONY: all-linux +all-linux: $(filter dist/minitor-linux-%,$(TARGETS)) + +# Build minitor for the current machine +minitor: $(GOFILES) + @echo Version: $(VERSION) + go build -ldflags '-X "main.version=${VERSION}"' -o minitor .PHONY: build build: minitor -minitor: - @echo Version: $(VERSION) - go build -ldflags '-X "main.version=${VERSION}"' -o minitor - +# Run minitor for the current machine .PHONY: run -run: minitor build +run: minitor ./minitor -debug .PHONY: run-metrics -run-metrics: minitor build +run-metrics: minitor ./minitor -debug -metrics +# Run all tests .PHONY: test test: go test -coverprofile=coverage.out - @echo go tool cover -func=coverage.out - @echo - @# Check min coverage percentage @go tool cover -func=coverage.out | awk -v target=80.0% \ '/^total:/ { print "Total coverage: " $$3 " Minimum coverage: " target; if ($$3+0.0 >= target+0.0) print "ok"; else { print "fail"; exit 1; } }' @@ -47,9 +55,8 @@ check: .PHONY: clean clean: rm -f ./minitor - rm -f ./minitor-linux-* - rm -f ./minitor-darwin-amd64 rm -f ./coverage.out + rm -fr ./dist .PHONY: docker-build docker-build: @@ -60,35 +67,23 @@ docker-run: docker-build docker run --rm -v $(shell pwd)/config.yml:/root/config.yml $(DOCKER_TAG) ## Multi-arch targets +$(TARGETS): $(GOFILES) + mkdir -p ./dist + GOOS=$(word 2, $(subst -, ,$(@))) GOARCH=$(word 3, $(subst -, ,$(@))) CGO_ENABLED=0 \ + go build -ldflags '-X "main.version=${VERSION}"' -a -installsuffix nocgo \ + -o $@ -# Arch specific go build targets -minitor-darwin-amd64: - GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 \ - go build -ldflags '-X "main.version=${VERSION}"' -a -installsuffix nocgo \ - -o minitor-darwin-amd64 - -minitor-linux-amd64: - GOOS=linux GOARCH=amd64 CGO_ENABLED=0 \ - go build -ldflags '-X "main.version=${VERSION}"' -a -installsuffix nocgo \ - -o minitor-linux-amd64 - -minitor-linux-arm: - GOOS=linux GOARCH=arm CGO_ENABLED=0 \ - go build -ldflags '-X "main.version=${VERSION}"' -a -installsuffix nocgo \ - -o minitor-linux-arm - -minitor-linux-arm64: - GOOS=linux GOARCH=arm64 CGO_ENABLED=0 \ - go build -ldflags '-X "main.version=${VERSION}"' -a -installsuffix nocgo \ - -o minitor-linux-arm64 +.PHONY: $(TARGET_ALIAS) +$(TARGET_ALIAS): + $(MAKE) $(addprefix dist/,$@) # Arch specific docker build targets .PHONY: docker-build-arm -docker-build-arm: minitor-linux-arm +docker-build-arm: dist/minitor-linux-arm docker build --build-arg REPO=arm32v7 --build-arg ARCH=arm . -t ${DOCKER_TAG}-linux-arm -.PHONY: docker-build-arm -docker-build-arm64: minitor-linux-arm64 +.PHONY: docker-build-arm64 +docker-build-arm64: dist/minitor-linux-arm64 docker build --build-arg REPO=arm64v8 --build-arg ARCH=arm64 . -t ${DOCKER_TAG}-linux-arm64 # Cross run on host architechture