ADR 0005 supersedes ADR 0002. The "sidecar vs app" split was load-bearing on Go-vs-Dart being a meaningful boundary. Going all-Dart collapses that — the daemon becomes clide --daemon mode of the same AOT binary the CLI lives in, both sharing lib/ with the Flutter app. The one native gap (Dart's multi-threaded VM can't safely fork+exec) is filled by a small C supporter tool — ptyc, Project Terminal Controller, peer of pql — rather than introducing a second core language. ADR 0006 defines the CLI/event surface on top of that Dart core: subsystem list (pane/tab/editor/panel/tree/git/pql/canvas/graph/ theme/settings/project), command shape, versioned JSON event schema, pql-parity exit codes, and command-event duality as the operational form of user/Claude parity. Deleted: sidecar/cmd, sidecar/go.mod, every sidecar/internal package. Rewritten: Makefile (dart compile exe, flutter analyze/format/test, build-linux/build-macos, ptyc-build), ci/*.sh, .githooks/pre-push (no more GOBIN PATH dance), .gitignore (Flutter/Dart at repo root, ptyc section), project.yaml (drop module: and go_version:), CLAUDE.md (guardrails, dependencies, commands refreshed). Co-Authored-By: Claude <noreply@anthropic.com>
151 lines
4.6 KiB
Makefile
151 lines
4.6 KiB
Makefile
# clide — local dev targets. CI scripts in ci/ shell out to these.
|
|
#
|
|
# One toolchain: Flutter + Dart. Native supporter tools (`ptyc`, future
|
|
# peers) live in their own directories with their own build targets and
|
|
# compose in under `make build`.
|
|
|
|
INSTALL_DIR ?= $(HOME)/.local/bin
|
|
|
|
# Version stamping. Source of truth: project.yaml `version:` field. Local
|
|
# builds augment with git short SHA + dirty marker (semver build metadata).
|
|
VERSION_BASE ?= $(shell awk -F': *' '/^version:/ {gsub(/[" ]/,"",$$2); print $$2; exit}' project.yaml)
|
|
COMMIT ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo unknown)
|
|
DIRTY := $(shell git diff --quiet HEAD 2>/dev/null || echo .dirty)
|
|
VERSION ?= $(VERSION_BASE)+$(COMMIT)$(DIRTY)
|
|
DATE ?= $(shell date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
|
|
.PHONY: help
|
|
help: ## Show this help.
|
|
@awk 'BEGIN {FS = ":.*##"} /^[a-zA-Z0-9_-]+:.*##/ {printf " \033[36m%-22s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
|
|
|
|
# -- app + core (Flutter / Dart) ----------------------------------------
|
|
|
|
# App and core targets gracefully noop if the Dart package isn't
|
|
# scaffolded yet (pre-Tier-0 state) or if flutter isn't installed
|
|
# locally.
|
|
APP_PRESENT := $(shell test -f pubspec.yaml && echo yes || echo no)
|
|
HAS_FLUTTER := $(shell command -v flutter >/dev/null && echo yes || echo no)
|
|
|
|
.PHONY: build
|
|
build: ## Build the Dart AOT `clide` binary (CLI + --daemon modes in one binary).
|
|
ifeq ($(APP_PRESENT),yes)
|
|
dart compile exe bin/clide.dart -o bin/clide \
|
|
--define=clideVersion=$(VERSION) \
|
|
--define=clideCommit=$(COMMIT) \
|
|
--define=clideDate=$(DATE)
|
|
else
|
|
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
endif
|
|
|
|
.PHONY: install
|
|
install: build ## Install bin/clide into $(INSTALL_DIR).
|
|
ifeq ($(APP_PRESENT),yes)
|
|
install -m 0755 bin/clide $(INSTALL_DIR)/clide
|
|
else
|
|
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
endif
|
|
|
|
.PHONY: pubget
|
|
pubget: ## flutter pub get (hydrate the pub cache).
|
|
ifeq ($(APP_PRESENT),yes)
|
|
flutter pub get
|
|
else
|
|
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
endif
|
|
|
|
.PHONY: analyze
|
|
analyze: ## dart analyze / flutter analyze.
|
|
ifeq ($(APP_PRESENT),yes)
|
|
flutter analyze
|
|
else
|
|
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
endif
|
|
|
|
.PHONY: format
|
|
format: ## dart format --set-exit-if-changed.
|
|
ifeq ($(APP_PRESENT),yes)
|
|
dart format --set-exit-if-changed .
|
|
else
|
|
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
endif
|
|
|
|
.PHONY: test
|
|
test: ## flutter test (unit + widget).
|
|
ifeq ($(APP_PRESENT),yes)
|
|
flutter test
|
|
else
|
|
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
endif
|
|
|
|
.PHONY: test-integration
|
|
test-integration: build ## Integration tests (daemon + CLI + fixture repos).
|
|
ifeq ($(APP_PRESENT),yes)
|
|
flutter test integration_test || echo "(no integration_test suite yet)"
|
|
else
|
|
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
endif
|
|
|
|
.PHONY: build-linux
|
|
build-linux: ## flutter build linux (desktop bundle).
|
|
ifeq ($(APP_PRESENT),yes)
|
|
flutter build linux
|
|
else
|
|
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
endif
|
|
|
|
.PHONY: build-macos
|
|
build-macos: ## flutter build macos (desktop bundle).
|
|
ifeq ($(APP_PRESENT),yes)
|
|
flutter build macos
|
|
else
|
|
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
endif
|
|
|
|
# -- ptyc (C supporter tool) --------------------------------------------
|
|
|
|
# Compiled alongside the main binary. Tiny, no deps beyond libc.
|
|
PTYX_PRESENT := $(shell test -f ptyc/Makefile && echo yes || echo no)
|
|
|
|
.PHONY: ptyc-build
|
|
ptyc-build: ## Build the ptyc PTY-spawn helper.
|
|
ifeq ($(PTYX_PRESENT),yes)
|
|
$(MAKE) -C ptyc
|
|
else
|
|
@echo "(ptyc/ not scaffolded yet; skipping)"
|
|
endif
|
|
|
|
.PHONY: ptyc-clean
|
|
ptyc-clean: ## Clean ptyc build artefacts.
|
|
ifeq ($(PTYX_PRESENT),yes)
|
|
$(MAKE) -C ptyc clean
|
|
else
|
|
@echo "(ptyc/ not scaffolded yet; skipping)"
|
|
endif
|
|
|
|
# -- security ------------------------------------------------------------
|
|
|
|
.PHONY: security
|
|
security: ## Dart advisory review + ptyc source review (manual — no floating deps).
|
|
@echo "security: Dart advisories reviewed manually before pubspec.yaml bumps;"
|
|
@echo " ptyc is reviewed by reading it (tiny libc-only C)."
|
|
@echo " Automated Dart CVE tooling lands here when a reliable option exists."
|
|
|
|
# -- pre-push gate -------------------------------------------------------
|
|
|
|
.PHONY: push-check
|
|
push-check: analyze format test ## Full pre-push gate — everything that must pass before a push.
|
|
|
|
.PHONY: hooks
|
|
hooks: ## Install the repo's git hooks (points core.hooksPath at .githooks/).
|
|
git config core.hooksPath .githooks
|
|
@echo "hooks installed (core.hooksPath = .githooks)"
|
|
|
|
# -- housekeeping --------------------------------------------------------
|
|
|
|
.PHONY: clean
|
|
clean: ## Remove build artefacts.
|
|
rm -rf bin build .dart_tool
|
|
$(MAKE) ptyc-clean
|
|
|
|
.DEFAULT_GOAL := help
|