COMPOSE_DEV = docker compose -f docker-compose.yml -f docker-compose.dev.yml

.PHONY: dev-up dev-restart dev-clear rebuild rebuild-worker rebuild-all rebuild-hard

dev-up:
	$(COMPOSE_DEV) up -d app nginx queue

dev-restart:
	$(COMPOSE_DEV) restart app nginx queue

dev-clear:
	$(COMPOSE_DEV) exec app php artisan optimize:clear

# `scheduler` phải có mặt trong mọi lượt dựng lại: nó chạy CÙNG image với `app`, nên bỏ quên
# thì nó cứ chạy mãi code cũ. Nó cũng là thứ duy nhất chạy `zalo:oa-refresh-tokens` mỗi giờ -
# thiếu nó thì refresh token của các OA lặng lẽ chết, đúng như đã xảy ra với một OA trước đây.
rebuild:
	docker compose build app nginx
	docker compose up -d --no-deps app nginx queue scheduler
	docker compose exec app php artisan optimize:clear
	docker compose exec app php artisan view:cache

rebuild-worker:
	docker compose build worker
	docker compose up -d --no-deps worker

rebuild-all:
	docker compose build app nginx worker
	docker compose up -d --no-deps app nginx queue scheduler worker
	docker compose exec app php artisan optimize:clear
	docker compose exec app php artisan view:cache

# Bỏ qua toàn bộ layer cache của Docker. Chỉ dùng khi nghi ngờ cache hỏng (đổi
# composer/npm mà không thấy tác dụng): chậm hơn `rebuild-all` rất nhiều.
rebuild-hard:
	docker compose build --no-cache --pull app nginx worker
	docker compose up -d --no-deps --force-recreate app nginx queue scheduler worker
	docker compose exec app php artisan optimize:clear
	docker compose exec app php artisan view:cache
