From 78b2e2a1623af1faa1d23d2592c06e9523fd39cb Mon Sep 17 00:00:00 2001 From: Vassiliy Yegorov Date: Mon, 15 Jun 2026 10:55:48 +0700 Subject: [PATCH] build: Makefile for local builds (DMG, dev, daemon, tests, landing) No macOS CI runner available, so the universal .dmg is built locally: `make dmg` (adds the rust targets + tauri build --target universal-apple-darwin). Also: deps, dmg-native, dev, daemon, test, landing-image/run/push, clean. `make` / `make help` lists targets. Co-Authored-By: Claude Opus 4.8 (1M context) --- Makefile | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 Makefile 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