# mGPUmanager build + deploy targets.
#
# `make build`   — compile the Go binary into ./bin/mgpumanager.
# `make test`    — go test ./...
# `make run`     — run locally against ./config/consumers.yaml.
# `make deploy`  — rsync binary + config + user-unit to mRock and
#                  (re)start it under `systemctl --user`.

BIN := bin/mgpumanager
PKG := ./cmd/mgpumanager

GO ?= go
HOST ?= mrock
REMOTE_DIR ?= /home/m/dev/mGPUmanager
USER_UNIT_DIR ?= /home/m/.config/systemd/user

.PHONY: build test run deploy clean

build:
	mkdir -p bin
	$(GO) build -trimpath -ldflags="-s -w" -o $(BIN) $(PKG)

test:
	$(GO) test ./...

run: build
	./$(BIN) --config config/consumers.yaml --log-level debug

# Deploys to mRock as a user unit (systemd --user). User lingering must
# be enabled on the target host: `sudo loginctl enable-linger m`.
deploy: build
	rsync -a --mkpath $(BIN) $(HOST):$(REMOTE_DIR)/$(BIN)
	rsync -a --mkpath config/consumers.yaml $(HOST):$(REMOTE_DIR)/config/consumers.yaml
	rsync -a --mkpath systemd/mgpumanager.service $(HOST):$(USER_UNIT_DIR)/mgpumanager.service
	ssh $(HOST) "systemctl --user daemon-reload && systemctl --user enable mgpumanager.service && systemctl --user restart mgpumanager.service && systemctl --user status mgpumanager.service --no-pager -l"

clean:
	rm -rf bin
