SHELL := /usr/bin/env bash APP_NAME ?= cpone-middleware GOOS ?= linux GOARCH ?= amd64 CGO_ENABLED ?= 0 BUILD_BINARY ?= dist/$(APP_NAME)-$(GOOS)-$(GOARCH) REMOTE_DIR ?= auto REMOTE_BINARY ?= SERVICE ?= $(APP_NAME).service SERVICE_SCOPE ?= auto RESTART_MODE ?= systemd-kill SSH_OPTIONS ?= -o ConnectTimeout=10 -o ServerAliveInterval=5 -o ServerAliveCountMax=2 SSH_TIMEOUT ?= 45s TRANSFER_TIMEOUT ?= 120s # Supports both `make deploy one@host` and the explicit form # `make deploy DEPLOY_TARGET=one@host`. KNOWN_GOALS := help test vet build check-deploy-target deploy POSITIONAL_TARGET := $(firstword $(filter-out $(KNOWN_GOALS),$(MAKECMDGOALS))) DEPLOY_TARGET ?= $(POSITIONAL_TARGET) .DEFAULT_GOAL := help .PHONY: help test vet build check-deploy-target deploy help: @printf '%s\n' \ 'Usage:' \ ' make deploy one@devcpone.aplikasi.web.id' \ ' make deploy DEPLOY_TARGET=one@devcpone.aplikasi.web.id' \ '' \ 'Optional overrides:' \ ' REMOTE_DIR=auto (default: $${HOME}/apps di server)' \ ' SERVICE=cpone-middleware.service' \ ' SERVICE_SCOPE=auto|user|system' \ ' RESTART_MODE=systemd-kill|systemctl' \ ' SSH_OPTIONS="-p 22 -o ConnectTimeout=10"' \ ' SSH_TIMEOUT=45s TRANSFER_TIMEOUT=120s' test: go test ./... vet: go vet ./... build: test vet @mkdir -p "$$(dirname "$(BUILD_BINARY)")" CGO_ENABLED=$(CGO_ENABLED) GOOS=$(GOOS) GOARCH=$(GOARCH) \ go build -trimpath -ldflags='-s -w' -o "$(BUILD_BINARY)" ./cmd/server @printf 'Built %s\n' "$(BUILD_BINARY)" check-deploy-target: @if [[ -z "$(DEPLOY_TARGET)" ]]; then \ echo 'Error: target server belum diisi.' >&2; \ echo 'Contoh: make deploy one@devcpone.aplikasi.web.id' >&2; \ exit 2; \ fi deploy: check-deploy-target build @APP_NAME="$(APP_NAME)" \ BUILD_BINARY="$(BUILD_BINARY)" \ REMOTE_DIR="$(REMOTE_DIR)" \ REMOTE_BINARY="$(REMOTE_BINARY)" \ SERVICE="$(SERVICE)" \ SERVICE_SCOPE="$(SERVICE_SCOPE)" \ RESTART_MODE="$(RESTART_MODE)" \ SSH_OPTIONS="$(SSH_OPTIONS)" \ SSH_TIMEOUT="$(SSH_TIMEOUT)" \ TRANSFER_TIMEOUT="$(TRANSFER_TIMEOUT)" \ ./scripts/deploy.sh "$(DEPLOY_TARGET)" # Extra command-line words are treated as the positional deploy target. ifneq ($(strip $(POSITIONAL_TARGET)),) .PHONY: $(POSITIONAL_TARGET) $(POSITIONAL_TARGET): @: endif