mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 05:21:57 +00:00
118 lines
3.2 KiB
Makefile
118 lines
3.2 KiB
Makefile
# --- Load .env kalau ada, dan export ke shell child ---
|
|
ifneq (,$(wildcard .env))
|
|
include .env
|
|
export
|
|
endif
|
|
|
|
# --- Konfigurasi umum ---
|
|
COMPOSE ?= docker compose -f docker-compose.local.yml
|
|
NETWORK ?= lti-api_go-network
|
|
MIGRATE_IMAGE ?= migrate/migrate
|
|
MIGRATIONS_DIR := $(PWD)/internal/database/migrations
|
|
|
|
# Fallback agar tetap jalan meski .env kosong
|
|
DB_HOST ?= postgresdb
|
|
DB_PORT ?= 5432
|
|
DB_USER ?= postgres
|
|
DB_PASSWORD ?= postgres
|
|
DB_NAME ?= db_lti_erp
|
|
|
|
DB_URL := postgres://$(DB_USER):$(DB_PASSWORD)@$(DB_HOST):$(DB_PORT)/$(DB_NAME)?sslmode=disable
|
|
|
|
# Tunggu DB ready memakai pg_isready dari image postgres
|
|
WAIT_DB := docker run --rm --network $(NETWORK) postgres:alpine \
|
|
sh -c 'until pg_isready -h $(DB_HOST) -p $(DB_PORT) -U $(DB_USER) -d $(DB_NAME); do echo "waiting for postgres..."; sleep 1; done'
|
|
|
|
# Default target
|
|
.DEFAULT_GOAL := start
|
|
|
|
# --- Daftar phony targets ---
|
|
.PHONY: start build lint gen \
|
|
db-up wait-db \
|
|
migration-% migrate-up migrate-down migrate-fresh \
|
|
seed \
|
|
docker-local docker-down docker-nuke docker-cache psql
|
|
|
|
# --- Go workflow ---
|
|
start:
|
|
@go run cmd/api/main.go
|
|
|
|
build:
|
|
@go build -o tmp/app ./cmd/api
|
|
|
|
lint:
|
|
@golangci-lint run
|
|
|
|
# --- Compose / DB helpers ---
|
|
db-up:
|
|
@$(COMPOSE) up -d postgresdb
|
|
|
|
wait-db:
|
|
@$(WAIT_DB)
|
|
|
|
# --- Migration (pembuatan file) ---
|
|
# Contoh: make migration-create_users_table
|
|
# ":" akan diubah ke "_" (biar aman untuk nama file)
|
|
migration-%:
|
|
@migrate create -ext sql -dir internal/database/migrations $(subst :,_,$*)
|
|
|
|
# --- Migration (apply via docker image 'migrate') ---
|
|
migrate-up: db-up wait-db
|
|
@docker run --rm -v $(MIGRATIONS_DIR):/migrations --network $(NETWORK) \
|
|
$(MIGRATE_IMAGE) -path=/migrations/ -database "$(DB_URL)" up
|
|
|
|
# Contoh:
|
|
# make migrate-down step=2 → rollback 2 step
|
|
# make migrate-down → rollback semua
|
|
|
|
migrate-down: db-up wait-db
|
|
@if [ -n "$(step)" ]; then \
|
|
echo "⬇️ Migrating down $(step) step(s)..."; \
|
|
docker run --rm -v $(MIGRATIONS_DIR):/migrations --network $(NETWORK) \
|
|
$(MIGRATE_IMAGE) -path=/migrations/ -database "$(DB_URL)" down $(step); \
|
|
else \
|
|
echo "⬇️ Migrating down ALL steps..."; \
|
|
docker run --rm -v $(MIGRATIONS_DIR):/migrations --network $(NETWORK) \
|
|
$(MIGRATE_IMAGE) -path=/migrations/ -database "$(DB_URL)" down -all; \
|
|
fi
|
|
|
|
migrate-fresh: migrate-down migrate-up
|
|
@true
|
|
|
|
# Pakai: make migrate-force v=20250917120000
|
|
migrate-force:
|
|
@docker run --rm -v $(MIGRATIONS_DIR):/migrations --network $(NETWORK) \
|
|
$(MIGRATE_IMAGE) -path=/migrations/ -database "$(DB_URL)" force $(v)
|
|
|
|
|
|
# --- Seeder ---
|
|
seed: db-up wait-db
|
|
@$(COMPOSE) run --rm app go run cmd/seed/main.go
|
|
|
|
# --- Docker orchestration convenience ---
|
|
docker-local:
|
|
@$(COMPOSE) up --build -d
|
|
|
|
docker-down:
|
|
@$(COMPOSE) down --remove-orphans
|
|
|
|
# ⚠️ Akan menghapus container, images dan volumes.
|
|
docker-nuke:
|
|
@$(COMPOSE) down --rmi all --volumes --remove-orphans
|
|
|
|
docker-cache:
|
|
@docker builder prune -f
|
|
|
|
# --- PSQL shell ke DB di container ---
|
|
psql: db-up
|
|
@$(COMPOSE) exec -it postgresdb psql -U $(DB_USER) -d $(DB_NAME)
|
|
|
|
# Single feature
|
|
# example: make gen feat=product-category
|
|
|
|
# Sub feature
|
|
# make gen feat=master/area
|
|
gen:
|
|
@go run tools/gen.go $(feat)
|
|
# @goimports -w internal
|