Ian Fijolek
f8e40c643c
All checks were successful
continuous-integration/drone/push Build is passing
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.
97 lines
2.8 KiB
Makefile
97 lines
2.8 KiB
Makefile
DOCKER_TAG ?= minitor-go-${USER}
|
|
GIT_TAG_NAME := $(shell git tag -l --contains HEAD)
|
|
GIT_SHA := $(shell git rev-parse HEAD)
|
|
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: $(TARGETS)
|
|
|
|
# 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
|
|
|
|
# Run minitor for the current machine
|
|
.PHONY: run
|
|
run: minitor
|
|
./minitor -debug
|
|
|
|
.PHONY: run-metrics
|
|
run-metrics: minitor
|
|
./minitor -debug -metrics
|
|
|
|
# Run all tests
|
|
.PHONY: test
|
|
test:
|
|
go test -coverprofile=coverage.out
|
|
go tool cover -func=coverage.out
|
|
@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; } }'
|
|
|
|
# Installs pre-commit hooks
|
|
.PHONY: install-hooks
|
|
install-hooks:
|
|
pre-commit install --install-hooks
|
|
|
|
# Checks files for encryption
|
|
.PHONY: check
|
|
check:
|
|
pre-commit run --all-files
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -f ./minitor
|
|
rm -f ./coverage.out
|
|
rm -fr ./dist
|
|
|
|
.PHONY: docker-build
|
|
docker-build:
|
|
docker build -f ./Dockerfile.multi-stage -t $(DOCKER_TAG)-linux-amd64 .
|
|
|
|
.PHONY: docker-run
|
|
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 $@
|
|
|
|
.PHONY: $(TARGET_ALIAS)
|
|
$(TARGET_ALIAS):
|
|
$(MAKE) $(addprefix dist/,$@)
|
|
|
|
# Arch specific docker build targets
|
|
.PHONY: docker-build-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-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
|
|
.PHONY: docker-run-arm
|
|
docker-run-arm: docker-build-arm
|
|
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock --name $(DOCKER_TAG)-run ${DOCKER_TAG}-linux-arm
|
|
|
|
.PHONY: docker-run-arm64
|
|
docker-run-arm64: docker-build-arm64
|
|
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock --name $(DOCKER_TAG)-run ${DOCKER_TAG}-linux-arm64
|