From f8e40c643c11e51c0ce7d85b31bc5d79b94e9c48 Mon Sep 17 00:00:00 2001 From: Ian Fijolek Date: Mon, 6 Jul 2020 20:05:12 -0700 Subject: [PATCH] Move static binaries to dist/ for easier publishing This will make it easier to publish them to Github or Gitea releases later. To avoid making the Makefile super complex, this patch also makes use of variables to simplify the Makefile as well. --- .gitignore | 3 +-- Dockerfile | 2 +- Makefile | 71 +++++++++++++++++++++++++----------------------------- 3 files changed, 35 insertions(+), 41 deletions(-) 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