# EdgeGuard — Build-System. # Cross-Compile für Debian 13 + Ubuntu 24.04 auf amd64 und arm64. # CGO_ENABLED=0 (statische Binaries, keine libre2-/CGO-Abhängigkeit in v1). GO ?= $(shell which go || echo /usr/local/go/bin/go) MODULE := git.netcell-it.de/projekte/edgeguard-native BINARIES := edgeguard-api edgeguard-scheduler edgeguard-ctl VERSION := $(shell cat VERSION 2>/dev/null || echo 0.0.1-dev) LDFLAGS := -s -w -X main.version=$(VERSION) GOFLAGS := -trimpath -mod=readonly export CGO_ENABLED ?= 0 .PHONY: all help build test lint tidy clean ui \ build-linux-amd64 build-linux-arm64 \ deb deb-amd64 deb-arm64 \ publish publish-amd64 publish-arm64 all: build help: @echo "EdgeGuard build targets:" @echo " build Build all binaries for the host architecture (build/host/)" @echo " build-linux-amd64 Cross-compile all binaries for linux/amd64 (build/amd64/)" @echo " build-linux-arm64 Cross-compile all binaries for linux/arm64 (build/arm64/)" @echo " test go test ./..." @echo " lint go vet + staticcheck (if installed)" @echo " tidy go mod tidy" @echo " ui Build management-ui (vite)" @echo " deb-amd64 Cross-compile + build edgeguard__amd64.deb" @echo " deb-arm64 Cross-compile + build edgeguard__arm64.deb" @echo " deb Build both amd64 and arm64 .deb packages" @echo " publish-amd64 Build amd64 deb AND upload to Gitea" @echo " publish-arm64 Same for arm64" @echo " publish publish-amd64 + publish-arm64" @echo " clean Remove build artifacts" build: @mkdir -p build/host @for bin in $(BINARIES); do \ echo " -> build/host/$$bin"; \ $(GO) build $(GOFLAGS) -ldflags '$(LDFLAGS)' \ -o build/host/$$bin ./cmd/$$bin || exit 1; \ done build-linux-amd64: @mkdir -p build/amd64 @for bin in $(BINARIES); do \ echo " -> build/amd64/$$bin"; \ GOOS=linux GOARCH=amd64 $(GO) build $(GOFLAGS) -ldflags '$(LDFLAGS)' \ -o build/amd64/$$bin ./cmd/$$bin || exit 1; \ done build-linux-arm64: @mkdir -p build/arm64 @for bin in $(BINARIES); do \ echo " -> build/arm64/$$bin"; \ GOOS=linux GOARCH=arm64 $(GO) build $(GOFLAGS) -ldflags '$(LDFLAGS)' \ -o build/arm64/$$bin ./cmd/$$bin || exit 1; \ done test: $(GO) test $(GOFLAGS) ./... lint: $(GO) vet ./... @command -v staticcheck >/dev/null && staticcheck ./... || echo "staticcheck not installed, skipping" tidy: $(GO) mod tidy ui: @echo " -> management-ui (vite build, version $(VERSION))" @cd management-ui && \ if [ -x "$$(command -v bun)" ]; then bun install --silent && bun run build; \ else npm install --silent && npm run build; fi deb-amd64: build-linux-amd64 ui @./scripts/apt-repo/build-package.sh amd64 $(VERSION) deb-arm64: build-linux-arm64 ui @./scripts/apt-repo/build-package.sh arm64 $(VERSION) deb: deb-amd64 deb-arm64 GITEA_DEB_URL := https://git.netcell-it.de/api/packages/projekte/debian/pool/trixie/main/upload publish-amd64: deb-amd64 @TOK="$$(cat $$HOME/.gitea-token | tr -d '\n')"; \ if [ -z "$$TOK" ]; then echo "publish: ~/.gitea-token is empty"; exit 1; fi; \ for f in edgeguard-api_$(VERSION)_amd64.deb edgeguard-ui_$(VERSION)_all.deb edgeguard_$(VERSION)_all.deb; do \ echo " -> publish $$f"; \ curl -sS -H "Authorization: token $$TOK" --upload-file build/deb/$$f $(GITEA_DEB_URL); \ echo ""; \ done publish-arm64: deb-arm64 @TOK="$$(cat $$HOME/.gitea-token | tr -d '\n')"; \ if [ -z "$$TOK" ]; then echo "publish: ~/.gitea-token is empty"; exit 1; fi; \ echo " -> publish edgeguard-api_$(VERSION)_arm64.deb"; \ curl -sS -H "Authorization: token $$TOK" \ --upload-file build/deb/edgeguard-api_$(VERSION)_arm64.deb \ $(GITEA_DEB_URL) publish: publish-amd64 publish-arm64 clean: rm -rf build/