added controller
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user