Files
daily-timer/Makefile
2026-02-10 15:39:17 +03:00

134 lines
4.4 KiB
Makefile

.PHONY: dev build clean install frontend
# Get version from git tag
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")
LDFLAGS := -X 'daily-timer/internal/version.Version=$(VERSION)' -X 'daily-timer/internal/version.GitCommit=$(GIT_COMMIT)' -X 'daily-timer/internal/version.BuildTime=$(BUILD_TIME)'
# Development (fixed ports: Vite 5173, Wails DevServer 34115)
dev:
wails dev -devserver localhost:34115
# Build for macOS
build: lint
wails build -clean -ldflags "$(LDFLAGS)"
@xattr -cr "build/bin/Daily Timer.app" 2>/dev/null || true
# Build for macOS (universal binary)
build-universal: lint
wails build -clean -platform darwin/universal -ldflags "$(LDFLAGS)"
@xattr -cr "build/bin/Daily Timer.app" 2>/dev/null || true
# Install frontend dependencies
frontend:
cd frontend && npm install
# Generate Go bindings
generate:
wails generate module
# Clean build artifacts
clean:
rm -rf build/bin
rm -rf frontend/dist
rm -rf frontend/node_modules
# Run tests
test:
go test ./...
# Format code
fmt:
go fmt ./...
cd frontend && npm run format 2>/dev/null || true
# Lint
lint:
golangci-lint run ./...
# Install dependencies
deps:
go mod download
go mod tidy
cd frontend && npm install
# Initialize project (first time setup)
init: deps frontend
@echo "Project initialized. Run 'make dev' to start development."
# Release - build and package
release: lint
@echo "Building release $(VERSION)..."
wails build -clean -ldflags "$(LDFLAGS)"
@xattr -cr "build/bin/Daily Timer.app" 2>/dev/null || true
@mkdir -p dist
cd build/bin && zip -r "../../dist/Daily-Timer-$(VERSION)-macos-arm64.zip" "Daily Timer.app"
@echo "Release package: dist/Daily-Timer-$(VERSION)-macos-arm64.zip"
@ls -lh dist/*.zip
# Release for both architectures
release-all: lint
@echo "Building release $(VERSION) for all platforms..."
@mkdir -p dist
GOOS=darwin GOARCH=arm64 wails build -clean -o daily-timer-arm64
cd build/bin && zip -r "../../dist/Daily-Timer-$(VERSION)-macos-arm64.zip" "Daily Timer.app"
GOOS=darwin GOARCH=amd64 wails build -clean -o daily-timer-amd64
cd build/bin && zip -r "../../dist/Daily-Timer-$(VERSION)-macos-amd64.zip" "Daily Timer.app"
@echo "Release packages:"
@ls -lh dist/*.zip
# Upload release to Gitea (requires GITEA_TOKEN env var)
release-upload:
@if [ -z "$(GITEA_TOKEN)" ]; then echo "Error: GITEA_TOKEN not set"; exit 1; fi
@echo "Creating release $(VERSION) on Gitea..."
@RELEASE_ID=$$(curl -s -X POST \
-H "Authorization: token $(GITEA_TOKEN)" \
-H "Content-Type: application/json" \
"https://git.movida.biz/api/v1/repos/bell/daily-timer/releases" \
-d '{"tag_name": "$(VERSION)", "name": "$(VERSION)", "body": "Release $(VERSION)"}' \
| jq -r '.id'); \
echo "Created release ID: $$RELEASE_ID"; \
for file in dist/*.zip; do \
filename=$$(basename "$$file"); \
echo "Uploading $$filename..."; \
curl -s -X POST \
-H "Authorization: token $(GITEA_TOKEN)" \
-F "attachment=@$$file" \
"https://git.movida.biz/api/v1/repos/bell/daily-timer/releases/$$RELEASE_ID/assets?name=$$filename"; \
done
@echo "Done!"
# Full release cycle: build + upload
release-publish: release release-upload
# Help
help:
@echo "Daily Timer - Makefile Commands"
@echo ""
@echo "Development:"
@echo " make dev - Start development server with hot reload"
@echo " make build - Build production binary for macOS"
@echo " make build-universal - Build universal binary (Intel + Apple Silicon)"
@echo ""
@echo "Release:"
@echo " make release - Build and package for current arch"
@echo " make release-all - Build for all macOS architectures"
@echo " make release-upload - Upload dist/*.zip to Gitea (needs GITEA_TOKEN)"
@echo " make release-publish - Full cycle: build + upload"
@echo ""
@echo "Setup:"
@echo " make init - Initialize project (install all dependencies)"
@echo " make deps - Install Go and frontend dependencies"
@echo " make frontend - Install frontend dependencies only"
@echo ""
@echo "Maintenance:"
@echo " make clean - Remove build artifacts"
@echo " make fmt - Format Go and frontend code"
@echo " make lint - Run linters"
@echo " make test - Run tests"
@echo ""
@echo "Misc:"
@echo " make generate - Regenerate Wails bindings"
@echo " make help - Show this help"