99 lines
3.0 KiB
Makefile
99 lines
3.0 KiB
Makefile
# felhom-controller Makefile
|
|
# Build targets for amd64 (N100 mini PCs) and arm64 (Raspberry Pi)
|
|
|
|
VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
|
|
GIT_COMMIT ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
|
BUILD_TIME ?= $(shell date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
|
|
BINARY = felhom-controller
|
|
REGISTRY ?= gitea.dooplex.hu/admin
|
|
IMAGE = $(REGISTRY)/felhom-controller
|
|
|
|
LDFLAGS = -ldflags="-s -w \
|
|
-X main.Version=$(VERSION) \
|
|
-X main.BuildTime=$(BUILD_TIME) \
|
|
-X main.GitCommit=$(GIT_COMMIT)"
|
|
|
|
.PHONY: all build build-amd64 build-arm64 build-all test lint clean \
|
|
docker-build docker-push docker-buildx run sync-assets
|
|
|
|
# Default: build for current platform
|
|
all: build
|
|
|
|
build:
|
|
go build $(LDFLAGS) -o bin/$(BINARY) ./cmd/controller/
|
|
|
|
build-amd64:
|
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build $(LDFLAGS) -o bin/$(BINARY)-linux-amd64 ./cmd/controller/
|
|
|
|
build-arm64:
|
|
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build $(LDFLAGS) -o bin/$(BINARY)-linux-arm64 ./cmd/controller/
|
|
|
|
build-all: build-amd64 build-arm64
|
|
|
|
# Run locally (for development)
|
|
run:
|
|
go run ./cmd/controller/ --config configs/controller.yaml.example
|
|
|
|
# Tests
|
|
test:
|
|
go test -v ./...
|
|
|
|
test-cover:
|
|
go test -coverprofile=coverage.out ./...
|
|
go tool cover -html=coverage.out -o coverage.html
|
|
|
|
# Lint (requires golangci-lint)
|
|
lint:
|
|
golangci-lint run ./...
|
|
|
|
# Docker image (current platform)
|
|
docker-build:
|
|
docker build \
|
|
--build-arg VERSION=$(VERSION) \
|
|
--build-arg GIT_COMMIT=$(GIT_COMMIT) \
|
|
-t $(IMAGE):$(VERSION) \
|
|
-t $(IMAGE):latest \
|
|
.
|
|
|
|
# Docker multi-arch build (requires docker buildx)
|
|
docker-buildx:
|
|
docker buildx build \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--build-arg VERSION=$(VERSION) \
|
|
--build-arg GIT_COMMIT=$(GIT_COMMIT) \
|
|
-t $(IMAGE):$(VERSION) \
|
|
-t $(IMAGE):latest \
|
|
--push \
|
|
.
|
|
|
|
# Push docker image
|
|
docker-push:
|
|
docker push $(IMAGE):$(VERSION)
|
|
docker push $(IMAGE):latest
|
|
|
|
# Sync app assets from felhom.eu website repo
|
|
# Override with: make sync-assets WEBSITE_ASSETS_DIR=/path/to/website/assets
|
|
WEBSITE_ASSETS_DIR ?= ../felhom.eu/website/assets
|
|
|
|
sync-assets:
|
|
@echo "Syncing assets from $(WEBSITE_ASSETS_DIR)..."
|
|
@if [ ! -d "$(WEBSITE_ASSETS_DIR)" ]; then \
|
|
echo "ERROR: $(WEBSITE_ASSETS_DIR) not found."; \
|
|
echo "Set WEBSITE_ASSETS_DIR to the path containing app logos and screenshots."; \
|
|
exit 1; \
|
|
fi
|
|
@cp -v $(WEBSITE_ASSETS_DIR)/*-logo.svg assets/ 2>/dev/null || echo "No SVG logo files found"
|
|
@cp -v $(WEBSITE_ASSETS_DIR)/*-logo.png assets/ 2>/dev/null || echo "No PNG logo files found"
|
|
@cp -v $(WEBSITE_ASSETS_DIR)/*-screenshot-*.webp assets/ 2>/dev/null || echo "No screenshot files found"
|
|
@echo "Assets synced: $$(ls assets/*.svg assets/*.png assets/*.webp 2>/dev/null | wc -l) files"
|
|
|
|
# Generate bcrypt password hash (usage: make password PASS=mypassword)
|
|
password:
|
|
@go run -mod=mod golang.org/x/crypto/bcrypt 2>/dev/null || \
|
|
echo '$$2a$$10$$...' && echo "Install htpasswd or use: go run scripts/hashpass.go $(PASS)"
|
|
|
|
# Clean build artifacts
|
|
clean:
|
|
rm -rf bin/ coverage.out coverage.html
|