added felhom-controller

This commit is contained in:
kisfenyo
2026-02-13 16:51:10 +01:00
parent c2610cc9b8
commit ae4b88a894
9 changed files with 1803 additions and 0 deletions
+98
View File
@@ -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