Files
ARMStrong.Vision/Makefile
T
2026-06-08 22:55:30 +04:00

185 lines
6.3 KiB
Makefile

# ------------------------------------------------------------------------------
# Пути
# ------------------------------------------------------------------------------
API_DIR := api
FRONTEND_DIR := frontend
# Секунды ожидания для `docker compose up --wait` (healthcheck Postgres + API).
WAIT_TIMEOUT ?= 300
DOCKER_UP := docker compose up -d --wait --wait-timeout $(WAIT_TIMEOUT)
# После `make prepare` / `make dev`: вызвать `rails db:seed` в backend (0 — не вызывать).
SEED_ON_PREPARE ?= 1
# ------------------------------------------------------------------------------
# Локальная разработка: Postgres + Rails на хосте (без Docker)
# ------------------------------------------------------------------------------
LOCAL_PG_HOST ?= localhost
LOCAL_PG_PORT ?= 5432
LOCAL_PG_USER ?= postgres
LOCAL_PG_PASSWORD ?= postgres
LOCAL_PG_DB ?= app_development
LOCAL_PG_ENV := PGPASSWORD=$(LOCAL_PG_PASSWORD) PGHOST=$(LOCAL_PG_HOST) PGPORT=$(LOCAL_PG_PORT) PGUSER=$(LOCAL_PG_USER)
LOCAL_RAILS_ENV := DATABASE_HOSTNAME=$(LOCAL_PG_HOST) DATABASE_PORT=$(LOCAL_PG_PORT) DATABASE_USERNAME=$(LOCAL_PG_USER) DATABASE_PASSWORD=$(LOCAL_PG_PASSWORD)
# Команда для local-rails: make local-rails RAILS_CMD="db:migrate"
RAILS_CMD ?= console
.DEFAULT_GOAL := help
.PHONY: help prepare setup dev \
restart build start stop logs bash \
rails bundle yarn npm \
up \
db db-console db-migrate db-rollback db-reset db-seed db-prepare \
db-create db-drop db-docker-recreate \
db-create-user db-grant-user \
local-bundle local-rails local-console local-server \
local-db-create local-db-drop local-db-migrate local-db-rollback \
local-db-reset local-db-seed local-db-prepare local-db-console
help:
@echo "Быстрый старт (Docker: БД + API + фронтенд)"
@echo " make prepare # сборка, up, затем db:seed (если SEED_ON_PREPARE=1; то же: make setup)"
@echo " make dev # prepare, затем логи всех сервисов (Ctrl+C — только выход из просмотра логов)"
@echo " make up # поднять стек (ждёт готовности Postgres и API)"
@echo " make stop # docker compose down"
@echo ""
@echo "Прочие команды Docker"
@echo " make restart|build|logs"
@echo " make bash # оболочка в контейнере backend"
@echo " make rails CMD=... # например: make rails CMD=db:migrate"
@echo " make bundle CMD=... # bundle в контейнере backend"
@echo " make yarn CMD=... # yarn в контейнере frontend"
@echo " make db-console # psql в контейнере БД (синоним: make db)"
@echo " make db-migrate|db-rollback|db-reset|db-seed|db-prepare"
@echo " make db-create|db-drop # rails db:create / db:drop в backend"
@echo " make db-docker-recreate # пустая БД в контейнере Postgres (dropdb + createdb)"
@echo ""
@echo "Локально на хосте (Postgres + Rails без Docker)"
@echo " make local-bundle && make local-db-prepare && make local-server"
@echo " Параметры БД: переменные LOCAL_PG_* в начале этого Makefile"
# ------------------------------------------------------------------------------
# Docker Compose — подготовка и жизненный цикл
# ------------------------------------------------------------------------------
prepare setup:
docker compose build
$(DOCKER_UP)
ifneq ($(SEED_ON_PREPARE),0)
docker compose exec -T backend ./bin/rails db:seed
endif
@echo ""
@echo "Готово:"
@echo " API http://localhost:3000"
@echo " Фронтенд http://localhost:5173"
@echo " Postgres localhost:5432, БД app_development, пользователь postgres"
dev: prepare
docker compose logs -f
restart:
docker compose down
docker compose up -d --build --wait --wait-timeout $(WAIT_TIMEOUT)
build:
docker compose build
start up:
$(DOCKER_UP)
stop:
docker compose down
logs:
docker compose logs -f
bash:
docker compose exec backend bash
rails:
docker compose exec backend ./bin/rails $(CMD)
bundle:
docker compose exec backend bundle $(CMD)
yarn:
docker compose exec frontend yarn $(CMD)
npm:
docker compose exec frontend npm $(CMD)
db-console db:
docker compose exec database psql -U postgres -d app_development
db-migrate:
docker compose exec backend ./bin/rails db:migrate
db-rollback:
docker compose exec backend ./bin/rails db:rollback
db-reset:
docker compose exec backend ./bin/rails db:reset
db-seed:
docker compose exec -T backend ./bin/rails db:seed
db-prepare:
docker compose exec backend ./bin/rails db:prepare
db-create:
docker compose exec backend ./bin/rails db:create
db-drop:
docker compose exec backend ./bin/rails db:drop
db-docker-recreate:
docker compose exec database dropdb --if-exists -U postgres app_development
docker compose exec database createdb -U postgres app_development
db-create-user:
docker compose exec database psql -U postgres -c "CREATE USER app_development WITH PASSWORD 'app_development';"
db-grant-user:
docker compose exec database psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE app_development TO app_development;"
# ------------------------------------------------------------------------------
# Локально: Bundler + Rails + psql к Postgres на хосте
# ------------------------------------------------------------------------------
local-bundle:
cd $(API_DIR) && bundle install
local-rails:
cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails $(RAILS_CMD)
local-console:
$(MAKE) local-rails RAILS_CMD=console
local-server:
cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails server -b 0.0.0.0 -p 3000
local-db-create:
cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails db:create
local-db-drop:
cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails db:drop
local-db-migrate:
cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails db:migrate
local-db-rollback:
cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails db:rollback
local-db-reset:
cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails db:reset
local-db-seed:
cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails db:seed
local-db-prepare:
cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails db:prepare
local-db-console:
$(LOCAL_PG_ENV) psql -d $(LOCAL_PG_DB)