From 9d616e1f4f233c8056ae4b975d98e818dc398761 Mon Sep 17 00:00:00 2001 From: protokey Date: Wed, 14 Oct 2026 01:21:24 +0400 Subject: [PATCH] =?UTF-8?q?chore:=20make=20release=20=E2=80=94=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=B7=D1=8B=20=D0=B2=20=D1=80=D0=B5=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D1=80=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB?= =?UTF-8?q?=D1=87=D0=B0=D0=BD=D0=B8=D1=8E,=20=D0=B0=D1=80=D1=85=D0=B8?= =?UTF-8?q?=D0=B2=20=D0=BF=D0=BE=20out=3Dfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - out=registry (по умолчанию): release зависит от push, в build// — только compose, .env и README с docker compose pull. - out=file: как раньше — образы и rabbitmq/redis/postgres в .tar.gz. Co-Authored-By: Claude Opus 5.5 --- Makefile | 29 ++++++++++++++++++++--------- README.md | 3 ++- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 1bda020..e7f51b7 100644 --- a/Makefile +++ b/Makefile @@ -45,7 +45,8 @@ help: @echo "make clean - удалить $(WHEELS_DIR)/" @echo "make build [ver=latest] - собрать образы $(API_IMAGE): и $(WORKER_IMAGE):" @echo "make push ver= - собрать образы и отправить в $(REGISTRY)" - @echo "make release ver= - собрать образы и пакет для деплоя в build// (compose, .env, образы .tar.gz)" + @echo "make release ver= [out=registry|file] - собрать образы и пакет для деплоя в build// (compose, .env);" + @echo " образы: registry — push в $(REGISTRY) (по умолчанию), file — архив .tar.gz" @echo "make up - собрать и запустить локально: api, worker, rabbitmq, redis" @echo "make down - остановить локальный стенд" @echo "make logs - логи api и worker" @@ -158,33 +159,43 @@ test-browser: build xvfb-run -a --server-args="-screen 0 1920x1080x24" python -m pytest -m browser -p no:cacheprovider -s' RELEASE_DIR := build/$(ver) +# куда деваются образы при make release: registry — push в $(REGISTRY), file — архив .tar.gz в $(RELEASE_DIR)/ +out ?= registry ifneq ($(filter release push,$(MAKECMDGOALS)),) ifeq ($(ver),latest) $(error Укажите версию: make release ver=v0.0.2) endif +ifeq ($(filter $(out),registry file),) +$(error out=registry или out=file, а не "$(out)") +endif endif -release: build - @echo "make release $(ver) -> $(RELEASE_DIR)/" +ifeq ($(out),file) +RELEASE_RUN := docker load -i robotex-$(ver).tar.gz +else +RELEASE_RUN := docker compose pull +endif + +release: $(if $(filter file,$(out)),build,push) + @echo "make release $(ver) [out=$(out)] -> $(RELEASE_DIR)/" @mkdir -p $(RELEASE_DIR) sed -e 's|image: .*$(API_IMAGE):.*|image: $(REGISTRY)/$(API_IMAGE):$(ver)|' \ -e 's|image: .*$(WORKER_IMAGE):.*|image: $(REGISTRY)/$(WORKER_IMAGE):$(ver)|' \ docker-compose.prod.yml > $(RELEASE_DIR)/docker-compose.yml cp dot_env $(RELEASE_DIR)/.env +ifeq ($(out),file) +# сторонние образы (rabbitmq, redis, postgres) кладутся в архив; при out=registry сервер берёт их с Docker Hub for img in $(DEPS_IMAGES); do docker image inspect $$img >/dev/null 2>&1 || docker pull $$img; done - # TODO: я хочу парамтером управлять сохранить в файл или отправить в свой реджестри - # if produce == file: - docker tag $(API_IMAGE):$(ver) $(REGISTRY)/$(API_IMAGE):$(ver) + docker tag $(API_IMAGE):$(ver) $(REGISTRY)/$(API_IMAGE):$(ver) docker tag $(WORKER_IMAGE):$(ver) $(REGISTRY)/$(WORKER_IMAGE):$(ver) docker save $(REGISTRY)/$(API_IMAGE):$(ver) $(REGISTRY)/$(WORKER_IMAGE):$(ver) $(DEPS_IMAGES) | gzip > $(RELEASE_DIR)/robotex-$(ver).tar.gz - # else: - # docker push docker.sokolab.xyz/$(API_IMAGE):$(ver) docker.sokolab.xyz/$(WORKER_IMAGE):$(ver) docker.sokolab.xyz/$(DEPS_IMAGES) +endif @printf '%s\n' \ '# Robotex $(ver)' \ '' \ '```bash' \ - 'docker load -i robotex-$(ver).tar.gz' \ + '$(RELEASE_RUN)' \ 'docker compose up -d' \ '```' \ '' \ diff --git a/README.md b/README.md index a3d6df2..495ca2d 100644 --- a/README.md +++ b/README.md @@ -204,7 +204,8 @@ Releases: ```bash make build ver=v0.1.0 # docker images robotex-api:v0.1.0 and robotex-worker:v0.1.0 -make release ver=v0.1.0 # images + deploy bundle in build/v0.1.0/ (compose, .env, images .tar.gz) +make release ver=v0.1.0 # push images to docker.sokolab.xyz + deploy bundle in build/v0.1.0/ (compose, .env) +make release ver=v0.1.0 out=file # same, but images go to build/v0.1.0/robotex-v0.1.0.tar.gz instead of the registry ``` Details (Xvfb, tini, `/dev/shm`, env settings, load measurements) — [docs/Deployment.md](docs/Deployment.md).