Files
go-winrt/.go-builder/Makefile
2025-08-22 17:42:23 -04:00

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 $* = $($*)