zee-solution/Makefile
ulflow_phattt2901 f8957e0d95
Some checks failed
CI Pipeline / Security Scan (push) Successful in 5m1s
CI Pipeline / Lint (push) Failing after 6m9s
CI Pipeline / Test (push) Has been skipped
CI Pipeline / Build (push) Has been skipped
CI Pipeline / Notification (push) Successful in 1s
chore:update docker
2025-06-06 19:11:07 +07:00

202 lines
7.2 KiB
Makefile

# ULFlow Golang Starter Kit Makefile
# Provides common commands for development, testing, and deployment
# Load environment variables from .env file
ifneq (,$(wildcard ./.env))
include .env
export
endif
.PHONY: help init dev test lint build clean docker-build docker-run docker-clean docker-prune docker-compose-up docker-compose-down docker-compose-prod-up docker-compose-prod-down ci setup-git all
# Default target executed when no arguments are given to make.
default: help
# Show help message for all Makefile commands
help:
@echo "ULFlow Golang Starter Kit"
@echo ""
@echo "Usage:"
@echo " make <target>"
@echo ""
@echo "Targets:"
@echo " init - Initialize project dependencies and tools"
@echo " dev - Start development server with hot reload (Air Tomb)"
@echo " test - Run all tests"
@echo " lint - Run linters and code quality tools"
@echo " build - Build the application binary"
@echo " clean - Clean temporary files, build artifacts, and cache"
@echo " docker-build - Build Docker image"
@echo " docker-run - Run application in Docker container"
@echo " docker-clean - Remove project Docker containers"
@echo " docker-prune - Remove all unused Docker resources"
@echo " docker-compose-up - Start all services with Docker Compose for local development"
@echo " docker-compose-down - Stop all services started with Docker Compose"
@echo " docker-compose-prod-up - Start all services with Docker Compose for production"
@echo " docker-compose-prod-down - Stop all production services"
@echo " ci - Run CI workflow locally"
@echo " setup-git - Configure Git with commit message template and hooks"
@echo " all - Run lint, test, and build"
# Initialize project dependencies and tools
init:
@echo "Installing project dependencies and tools..."
go mod tidy
go install github.com/air-verse/air@latest
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
@echo "Creating necessary directories..."
if not exist tmp mkdir tmp
if not exist logs mkdir logs
@echo "Copying .env file if not exists..."
@if not exist ".env" (if exist "templates\.env.example" (copy "templates\.env.example" ".env" & echo Created .env file from example) else (echo Warning: Could not create .env file)) else (echo .env file already exists, skipping)
@echo "Initialization complete!"
# Start development server with hot reload
dev:
@echo "Starting development server with Air Tomb..."
air
# Run all tests
test:
@echo "Running tests..."
go test -v -cover ./...
# Run linters and code quality tools
lint:
@echo "Running linters..."
golangci-lint run ./...
# Build the application binary
build:
@echo "Building application..."
go build -o bin/app cmd/app/main.go
# Clean temporary files, build artifacts, and cache
clean:
@echo "Cleaning project..."
if exist tmp rmdir /s /q tmp
if exist bin rmdir /s /q bin
if exist logs rmdir /s /q logs
go clean -cache -testcache -modcache
@echo "Project cleaned!"
# Build Docker image
docker-build:
@echo "Building Docker image..."
docker build -t ulflow-zee:latest .
# Build Docker image for development
docker-build-dev:
@echo "Building Docker image for development..."
docker-compose -f docker-compose.dev.yml up --build
# Run application in Docker container
docker-run:
@echo "Running application in Docker container..."
@if not exist .env (
@echo "Warning: .env file not found. Running with default environment variables..."
docker run -p 3000:3000 ulflow-zee:latest
) else (
docker run -p 3000:3000 --env-file .env ulflow-zee:latest
)
docker-up-dev:
@echo "Starting all services with Docker Compose for local development..."
docker-compose -f docker-compose.dev.yml up
docker-down-dev:
@echo "Stopping all development services..."
docker-compose -f docker-compose.dev.yml down -v
# Run Docker Compose for local development
docker-compose-up:
@echo "Starting all services with Docker Compose for local development..."
docker-compose up -d
@echo "Services started! API is available at http://localhost:3000"
# Stop Docker Compose services for local development
docker-compose-down:
@echo "Stopping all development services..."
docker-compose down -v
# Run Docker Compose for production
docker-compose-prod-up:
@echo "Starting all services with Docker Compose for production..."
docker-compose -f docker-compose.prod.yml up -d
@echo "Production services started! API is available at http://localhost:3000"
# Stop Docker Compose services for production
docker-compose-prod-down:
@echo "Stopping all production services..."
docker-compose -f docker-compose.prod.yml down
# Setup Git configuration
setup-git-hooks:
@echo "Setting up Git hooks..."
git config --local commit.template .gitea/commit-template.txt
@REM Kiểm tra và tạo thư mục .git/hooks nếu chưa tồn tại
@if not exist .git\hooks (mkdir .git\hooks)
@REM Sao chép các Git hooks
@echo Copying pre-commit hook...
@copy /Y .gitea\hooks\pre-commit .git\hooks\pre-commit >nul || (echo Warning: Could not copy pre-commit hook & exit /b 1)
@echo Copying prepare-commit-msg hook...
@copy /Y .gitea\hooks\prepare-commit-msg .git\hooks\prepare-commit-msg >nul || (echo Warning: Could not copy prepare-commit-msg hook & exit /b 1)
@echo "Git setup complete!"
# Create git message template
setup-git-message:
@echo "Creating Git commit message template..."
git config --local commit.template .gitea/commit-template.txt
@echo "Git commit message template created!"
# Prune all unused Docker resources
docker-prune:
@echo "Pruning unused Docker resources..."
docker system prune -af --volumes
@echo "Docker resources pruned!"
# Run local CI simulation
ci:
@echo "Running CI workflow locally..."
make lint
make test
make build
make docker-build
@echo "CI simulation completed!"
# Create a new migration
migrate-create:
@read -p "Enter migration name: " name; \
migrate create -ext sql -dir migrations -seq $$name
# Run migrations up
m-up:
@echo "Running migrations with user: $(DATABASE_USERNAME)"
@echo "Database: $(DATABASE_NAME) on $(DATABASE_HOST):$(DATABASE_PORT)"
@echo "Using connection string: postgres://$(DATABASE_USERNAME):*****@$(DATABASE_HOST):$(DATABASE_PORT)/$(DATABASE_NAME)?sslmode=disable"
@migrate -path migrations -database "postgres://$(DATABASE_USERNAME):$(DATABASE_PASSWORD)@$(DATABASE_HOST):$(DATABASE_PORT)/$(DATABASE_NAME)?sslmode=disable" up
# Run migrations down
m-down:
@echo "Reverting migrations..."
@migrate -path migrations -database "postgres://$(DATABASE_USERNAME):$(DATABASE_PASSWORD)@$(DATABASE_HOST):$(DATABASE_PORT)/$(DATABASE_NAME)?sslmode=disable" down
# Reset database (drop all tables and re-run migrations)
m-reset: m-down m-up
@echo "Database reset complete!"
# Show migration status
m-status:
@migrate -path migrations -database "postgres://$(DATABASE_USERNAME):$(DATABASE_PASSWORD)@$(DATABASE_HOST):$(DATABASE_PORT)/$(DATABASE_NAME)?sslmode=disable" version
# Force migration to specific version (fix dirty state)
m-force:
@echo "Forcing migration to version $(version)..."
@migrate -path migrations -database "postgres://$(DATABASE_USERNAME):$(DATABASE_PASSWORD)@$(DATABASE_HOST):$(DATABASE_PORT)/$(DATABASE_NAME)?sslmode=disable" force $(version)
# Run application (default: without hot reload)
run:
go run ./cmd/app/main.go