chore: настроена команда сборки

This commit is contained in:
protokey committed 2026-10-12 14:20:46 +04:00
1 parent b8499e2ce6
commit f58306cbb4
4 files changed
+56 -3

No files matched your search

+1 -1
View File
@@ -5,4 +5,4 @@ __pycache__/
wheels/
docs/*.bkp
docs/*.dtmp
build/
+29 -2
View File
@@ -5,10 +5,10 @@ WHEELS_DIR := wheels
REQUIREMENTS := requirements.txt
ver ?= latest
MAKECMDGOALS_TARGETS := install freeze wheels sync sync-offline clean help
MAKECMDGOALS_TARGETS := install freeze wheels sync sync-offline clean help build release
PKG := $(filter-out $(MAKECMDGOALS_TARGETS),$(MAKECMDGOALS))
.PHONY: install freeze wheels sync sync-offline clean help venv build
.PHONY: install freeze wheels sync sync-offline clean help venv build release
help:
@echo "make install <pkg> [<pkg> ...] - установить пакет(ы) в $(VENV), обновить $(REQUIREMENTS), собрать wheel в $(WHEELS_DIR)/"
@@ -17,6 +17,8 @@ help:
@echo "make freeze - перезаписать $(REQUIREMENTS) текущим состоянием окружения"
@echo "make wheels - собрать wheel для всех пакетов из $(REQUIREMENTS)"
@echo "make clean - удалить $(WHEELS_DIR)/"
@echo "make build [ver=latest] - собрать docker-образ robotex:<ver>"
@echo "make release ver=<ver> - собрать образ и пакет для деплоя в build/<ver>/ (compose, .env, образ .tar.gz)"
venv:
@test -d $(VENV) || python3 -m venv $(VENV)
@@ -51,6 +53,31 @@ build:
@echo "build an application"
docker build -t robotex:$(ver) .
RELEASE_DIR := build/$(ver)
ifneq ($(filter release,$(MAKECMDGOALS)),)
ifeq ($(ver),latest)
$(error Укажите версию: make release ver=v0.0.2)
endif
endif
release: build
@echo "make release $(ver) -> $(RELEASE_DIR)/"
@mkdir -p $(RELEASE_DIR)
sed 's|image: robotex:.*|image: robotex:$(ver)|' docker-compose.prod.yml > $(RELEASE_DIR)/docker-compose.yml
cp dot_env $(RELEASE_DIR)/.env
docker save robotex:$(ver) | gzip > $(RELEASE_DIR)/robotex-$(ver).tar.gz
@printf '%s\n' \
'# Robotex $(ver)' \
'' \
'```bash' \
'docker load -i robotex-$(ver).tar.gz' \
'docker compose up -d' \
'```' \
'' \
'Настройки (порт, CPU, память) — в .env.' > $(RELEASE_DIR)/README.md
@echo "Готово: $(RELEASE_DIR)/"
# позволяет передавать имя пакета как аргумент: make install redis
%:
@:
+22
View File
@@ -0,0 +1,22 @@
services:
api:
image: robotex:v0.0.1
restart: unless-stopped
ports:
- "${API_PORT:-8000}:8000"
env_file:
- path: .env
required: false
volumes:
- api-data:/app/extra
# Chrome активно использует /dev/shm, дефолтных 64MB не хватает
shm_size: "2gb"
# Потолок ресурсов: при переборе OOM-killer прибьёт процесс Chrome внутри контейнера,
# а не соседние сервисы на хосте. Подбирать под сервер вместе с BROWSER_SLOTS.
cpus: ${API_CPUS:-4}
mem_limit: ${API_MEM_LIMIT:-8g}
memswap_limit: ${API_MEM_LIMIT:-8g}
volumes:
api-data:
+4
View File
@@ -0,0 +1,4 @@
API_PORT=
API_CPUS=1
API_MEM_LIMIT=1g
API_MEM_LIMIT=1g