SHELL := /bin/bash .DEFAULT_GOAL := help PROJECT := compro-mit REPO := repository.promas.id/ComproMIT/compro-mit ENV_FILE := .env ifneq (,$(wildcard $(ENV_FILE))) include $(ENV_FILE) export $(shell sed -n 's/^\([A-Za-z_][A-Za-z0-9_]*\)=.*/\1/p' $(ENV_FILE)) endif # ---- per-environment (env = prod | dev | local) ---- WORK_DIR_prod := /var/www/compro-mit-prod WORK_DIR_dev := /var/www/compro-mit WORK_DIR_local := $(CURDIR) COMPOSE_prod := docker-compose.yml COMPOSE_dev := docker-compose.dev.yml COMPOSE_local := docker-compose.local.yml BRANCH_prod := production BRANCH_dev := main WORK_DIR = $(WORK_DIR_$*) COMPOSE = $(COMPOSE_$*) BRANCH = $(BRANCH_$*) DC = sudo docker compose -f $(COMPOSE) # ---- deploy log ---- LOG_DIR := $(or $(DEPLOY_LOG_DIR),/var/lib/deploy-log) LOG_IMAGE := deploy-log:1 OUT_FILE = $(LOG_DIR)/$(PROJECT)/.last-deploy.out HIST_FILE = $(LOG_DIR)/$(PROJECT)/$*.jsonl LOG = sudo docker run --rm \ -v $(LOG_DIR):/logs -v $(WORK_DIR):/repo:ro \ -e DEPLOY_ACTOR="$$(id -un 2>/dev/null)" $(LOG_IMAGE) .PHONY: help install run-local log-dir status ps help: ## Tampilkan daftar perintah @echo "make (env = prod | dev | local)" @grep -hE '^[a-zA-Z%-]+:.*##' $(MAKEFILE_LIST) \ | sed -e 's/%//' -e 's/:.*## /|/' \ | awk -F'|' '{printf " %-16s %s\n", $$1, $$2}' # ---- deploy ---- deploy-%: log-dir ## Pull + build + up (prod/dev) @$(LOG) start $(PROJECT) $* || true @cd $(WORK_DIR) || exit 1; \ ( \ sudo git pull https://$(GITLAB_USERNAME):$(GITLAB_PASSWORD)@$(REPO) $(BRANCH) && \ $(DC) build --no-cache --progress=plain && \ $(DC) up -d --remove-orphans && \ sudo docker system prune -f \ ) 2>&1 | tee $(OUT_FILE); \ RC=$${PIPESTATUS[0]}; \ if [ "$$RC" = "0" ]; then $(LOG) end $(PROJECT) $* ok || true; \ else $(LOG) end $(PROJECT) $* fail || true; fi; \ exit $$RC # ---- operasional ---- up-%: ## Build + start container @cd $(WORK_DIR) && $(DC) up -d --build --remove-orphans stop-%: ## Stop container @cd $(WORK_DIR) && $(DC) stop restart-%: ## Restart container @cd $(WORK_DIR) && $(DC) restart logs-%: ## Tail log container @cd $(WORK_DIR) && $(DC) logs -f --tail=200 clean-%: ## Down + hapus image + prune @cd $(WORK_DIR) && $(DC) down -v --rmi local && sudo docker system prune -f history-%: ## 10 deploy terakhir @test -s $(HIST_FILE) && tail -n 10 $(HIST_FILE) | tac || echo "belum ada entri" # ---- lokal & utilitas ---- install: ## Install dependency @bun install run-local: ## Jalankan dev server (tanpa docker) @bun run dev status: ## Status container project ini @sudo docker ps -a --filter "name=$(PROJECT)" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" ps: ## Status semua container @sudo docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}" log-dir: @sudo mkdir -p $(LOG_DIR)/$(PROJECT) && sudo touch $(OUT_FILE) \ && sudo chown -R $$(id -u):$$(id -g) $(LOG_DIR)/$(PROJECT)