143 lines
3.6 KiB
Makefile
143 lines
3.6 KiB
Makefile
SHELL ?= /bin/bash
|
|
NAME = $(shell echo $(PACKAGE) | rev | cut -d/ -f1 | rev)
|
|
PLATFORM ?= linux darwin windows
|
|
DOCKER = $(shell command -v docker 2>/dev/null)
|
|
REPORTS_DIR ?= .reports
|
|
PREFIX ?= gcr.io/salto-containers
|
|
BUILD_TAGS ?=
|
|
SANITY_CHECKING_CONFIG ?= .go-builder/.golangci.yml
|
|
|
|
# Overridable by CI
|
|
|
|
COMMIT_SHORT ?= $(shell git rev-parse --verify --short HEAD)
|
|
VERSION ?= v0.0.0-sha.$(COMMIT_SHORT)
|
|
VERSION_NOPREFIX ?= $(shell echo $(VERSION) | sed -e 's/^[[v]]*//')
|
|
|
|
#
|
|
# Common methodology based targets
|
|
#
|
|
|
|
prepare_targets = mod-download
|
|
sanity_check_targets = check-sync golangci-lint mod-verify mod-check
|
|
build_targets = go-build
|
|
test_targets =
|
|
release_targets =
|
|
clean_targets = app-clean
|
|
|
|
# If there's a build container then also run the docker build and release
|
|
ifneq ("$(wildcard build/container/Dockerfile)","")
|
|
build_targets += docker-build
|
|
release_targets += docker-push
|
|
endif
|
|
|
|
#
|
|
# Global checks
|
|
#
|
|
|
|
ifndef PACKAGE
|
|
$(error You must define the mandatory PACKAGE variable)
|
|
endif
|
|
|
|
ifndef PKG
|
|
$(error You must define the mandatory PKG variable)
|
|
endif
|
|
|
|
ifndef APP
|
|
$(error You must define the mandatory APP variable)
|
|
endif
|
|
|
|
#
|
|
# Custom project related targets
|
|
#
|
|
|
|
.PHONY: mod-download
|
|
mod-download:
|
|
@echo "Running mod download..."
|
|
@go mod download
|
|
|
|
.PHONY: golangci-lint
|
|
golangci-lint:
|
|
@echo "Running golangci-lint..."
|
|
@golangci-lint run $(PKG) --timeout 30m -v --config=$(SANITY_CHECKING_CONFIG)
|
|
|
|
|
|
# Another modules verification apart from mod-verify step should be to ensure that go mod tidy has been run on dev box when this gets fixed:
|
|
# https://github.com/golang/go/issues/27005
|
|
.PHONY: mod-verify
|
|
mod-verify:
|
|
@echo "Running mod verify..."
|
|
@go mod verify
|
|
|
|
# Replace this temporary "hack" with `go mod check` feature once implemented:
|
|
# https://github.com/golang/go/issues/27005
|
|
.PHONY: mod-check
|
|
mod-check:
|
|
@echo "Running mod check..."
|
|
@go mod tidy && git diff --exit-code -- 'go.mod' 'go.sum' > /dev/null \
|
|
|| (echo "mod-check failed, run \"go mod tidy\", commit the \"go.mod\" and/or \"go.sum\" files and try again"; exit 1)
|
|
|
|
.PHONY: go-build
|
|
go-build:
|
|
@for app in $(APP) ; do \
|
|
for os in $(PLATFORM) ; do \
|
|
ext=""; \
|
|
if [ "$$os" == "windows" ]; then \
|
|
ext=".exe"; \
|
|
fi; \
|
|
GOOS=$$os GOARCH=amd64 CGO_ENABLED=0 \
|
|
go build \
|
|
-a -x -tags "$(BUILD_TAGS)" -installsuffix cgo -installsuffix netgo \
|
|
-ldflags " \
|
|
-X main.Version=$(VERSION_NOPREFIX) \
|
|
-X main.GitRev=$(COMMIT_SHORT) \
|
|
" \
|
|
-o ./bin/$$app-$(VERSION_NOPREFIX)-$$os-amd64$$ext \
|
|
./cmd/$$app; \
|
|
done; \
|
|
done
|
|
|
|
.PHONY: docker-build
|
|
docker-build:
|
|
@echo "Building docker image..."
|
|
@for app in $(APP) ; do \
|
|
cp bin/$$app-$(VERSION_NOPREFIX)-linux-amd64 build/container/$$app-linux-amd64; \
|
|
chmod 0755 build/container/$$app-linux-amd64; \
|
|
done; \
|
|
"$(DOCKER)" build \
|
|
-f build/container/Dockerfile \
|
|
-t $(PREFIX)/$(NAME):$(VERSION) \
|
|
build/container/
|
|
|
|
.PHONY: docker-push
|
|
docker-push:
|
|
@echo "Pushing docker image..."
|
|
"$(DOCKER)" push $(PREFIX)/$(NAME):$(VERSION); \
|
|
|
|
.PHONY: app-clean
|
|
app-clean:
|
|
rm -f ./bin/*
|
|
@for app in $(APP) ; do \
|
|
rm -f cmd/$$app/*-linux-amd64; \
|
|
done
|
|
|
|
.PHONY: check-sync
|
|
check-sync:
|
|
@echo "Checking if everything is in sync..."
|
|
@.go-builder/scripts/check-sync.sh
|
|
|
|
.PHONY: sync-local
|
|
sync-local:
|
|
@echo "Synchronizing..."
|
|
@mv .go-builder .go-builder-tmp
|
|
@if docker run -v $(shell pwd):/workspace --rm -it $(shell docker build -q -f Dockerfile.build . | head -n 1) cp -r /etc/go-builder /workspace/.go-builder; then \
|
|
rm -r .go-builder-tmp; \
|
|
else \
|
|
mv .go-builder-tmp .go-builder; \
|
|
fi
|
|
|
|
#
|
|
# Debug any makefile variable
|
|
# Usage: print-<VAR>
|
|
#
|
|
print-% : ; @echo $* = $($*)
|