diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..efac077 --- /dev/null +++ b/Makefile @@ -0,0 +1,80 @@ +# spacesh — local build helpers (macOS). +# `make` or `make help` lists targets. + +APP_DIR := app +TAURI_TARGET := universal-apple-darwin +DMG_DIR := $(APP_DIR)/src-tauri/target/$(TAURI_TARGET)/release/bundle/dmg +NATIVE_DMG_DIR := $(APP_DIR)/src-tauri/target/release/bundle/dmg +APP_VERSION := $(shell node -p "require('./$(APP_DIR)/src-tauri/tauri.conf.json').version" 2>/dev/null || echo 0.0.0) + +LANDING_IMAGE := spacesh-landing +LANDING_VERSION := $(shell cat landing/VERSION 2>/dev/null || echo 0.0.0) +REGISTRY ?= git.realmanual.ru +REPO ?= spacesh + +.DEFAULT_GOAL := help + +.PHONY: help +help: ## show this help + @echo "spacesh — make targets (app v$(APP_VERSION)):" + @grep -hE '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) | \ + awk 'BEGIN{FS=":.*?## "}{printf " \033[36m%-16s\033[0m %s\n", $$1, $$2}' + +# ---- App / DMG (macOS) ---- + +.PHONY: deps +deps: ## install frontend deps (npm ci) + cd $(APP_DIR) && npm ci + +.PHONY: targets +targets: ## add rust targets for the universal build + rustup target add aarch64-apple-darwin x86_64-apple-darwin + +.PHONY: dmg +dmg: targets ## build the universal (Intel + Apple Silicon) .dmg — UNSIGNED + cd $(APP_DIR) && npm run tauri build -- --target $(TAURI_TARGET) + @echo "→ $(DMG_DIR)" && ls -lh $(DMG_DIR)/*.dmg + +.PHONY: dmg-native +dmg-native: ## build a .dmg for the current arch only (faster) + cd $(APP_DIR) && npm run tauri build + @ls -lh $(NATIVE_DMG_DIR)/*.dmg + +.PHONY: dev +dev: ## run the app in dev mode (tauri dev) + cd $(APP_DIR) && npm run tauri dev + +.PHONY: daemon +daemon: ## build & run the daemon + cargo run -p spaceshd + +# ---- Tests ---- + +.PHONY: test +test: ## run all tests (cargo + tsc) + cargo test + cd $(APP_DIR) && npx tsc --noEmit + +# ---- Landing ---- + +.PHONY: landing-image +landing-image: ## build the landing nginx image + docker build -t $(LANDING_IMAGE):$(LANDING_VERSION) -t $(LANDING_IMAGE):latest landing + +.PHONY: landing-run +landing-run: landing-image ## serve the landing locally on http://localhost:8088 + docker run --rm -p 8088:80 $(LANDING_IMAGE):latest + +.PHONY: landing-push +landing-push: landing-image ## tag & push the landing image to the registry + docker tag $(LANDING_IMAGE):latest $(REGISTRY)/$(REPO)/$(LANDING_IMAGE):$(LANDING_VERSION) + docker tag $(LANDING_IMAGE):latest $(REGISTRY)/$(REPO)/$(LANDING_IMAGE):latest + docker push $(REGISTRY)/$(REPO)/$(LANDING_IMAGE):$(LANDING_VERSION) + docker push $(REGISTRY)/$(REPO)/$(LANDING_IMAGE):latest + +# ---- Clean ---- + +.PHONY: clean +clean: ## remove build artifacts + cargo clean + rm -rf $(APP_DIR)/dist