Files
wrapped/Makefile
T
inecs f35144ed28
devops-tools/wrapped/wrapped-deploy/pipeline/head This commit looks good
Исправлен VERSION до 0.1.3; убран авто-bump из make push.
Упрощён экран «Токен выдан»: чеклист/trust убраны, Share и Download QR — иконки под QR.
2026-07-29 14:15:07 +03:00

173 lines
5.8 KiB
Makefile

.PHONY: help env build up down restart logs shell migrate revision release buildx-setup helm-package helm-lint clean ps push bump-patch bump-minor version-commit
COMPOSE ?= docker compose
IMAGE_NAME ?= wrapped
# SemVer from VERSION (source of truth); override: make release IMAGE_TAG=1.2.3
IMAGE_TAG ?= $(shell cat VERSION 2>/dev/null || echo 0.1.0)
# Docker Hub namespace → image: $(RELEASE_REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG)
# Example: inecs/wrapped:0.1.0
RELEASE_REGISTRY ?= inecs
FULL_IMAGE := $(RELEASE_REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG)
# Multi-arch platforms for make release (Docker Hub manifest list)
RELEASE_PLATFORMS ?= linux/amd64,linux/arm64
BUILDX_BUILDER ?= wrapped-release
# Set PUSH=0 to build only (no docker push; image stays in buildx cache)
PUSH ?= 1
APP_PORT ?= 8000
help:
@echo "Wrapped — make targets"
@echo ""
@echo " make env Copy .env.example -> .env (if missing)"
@echo " make build Build app image"
@echo " make up Start dev stack (app + Postgres + MinIO)"
@echo " make down Stop stack"
@echo " make restart Restart app service"
@echo " make logs Tail app logs"
@echo " make ps Show compose status"
@echo " make shell Shell into app container"
@echo " make migrate Run alembic upgrade head"
@echo " make revision m=\"msg\" Create alembic revision"
@echo " make bump-patch VERSION +0.0.1 (pyproject + Helm)"
@echo " make bump-minor VERSION +0.1.0"
@echo " make release Multi-arch build & push $(FULL_IMAGE)"
@echo " platforms: $(RELEASE_PLATFORMS)"
@echo " make push git add/commit (prompt) + push (без auto-bump)"
@echo " make helm-lint Lint Helm chart"
@echo " make helm-package Package Helm chart"
@echo " make clean Remove containers, volumes, local image"
@echo ""
@echo "Version: $$(cat VERSION 2>/dev/null || echo 0.1.0)"
@echo "Release examples:"
@echo " make release # tag from VERSION"
@echo " make release IMAGE_TAG=1.2.3"
@echo " make release PUSH=0"
@echo " make release RELEASE_PLATFORMS=linux/arm64"
env:
@test -f .env || cp .env.example .env
@echo ".env ready"
build: env
$(COMPOSE) build app
up: env
$(COMPOSE) up -d --build
@echo ""
@echo "Wrapped: http://localhost:$(APP_PORT)"
@echo "MinIO console: http://localhost:9001 (wrappedminio / wrappedminio123)"
@echo "Admin: http://localhost:$(APP_PORT)/admin"
down:
$(COMPOSE) down
restart:
$(COMPOSE) restart app
logs:
$(COMPOSE) logs -f app
ps:
$(COMPOSE) ps
shell:
$(COMPOSE) exec app sh
migrate:
$(COMPOSE) exec app alembic upgrade head
revision:
@test -n "$(m)" || (echo 'Usage: make revision m="message"' && exit 1)
$(COMPOSE) exec app alembic revision --autogenerate -m "$(m)"
buildx-setup:
@command -v docker >/dev/null 2>&1 || (echo "docker is required" >&2; exit 1)
@docker buildx version >/dev/null 2>&1 || (echo "docker buildx is required" >&2; exit 1)
@docker buildx inspect $(BUILDX_BUILDER) >/dev/null 2>&1 || \
docker buildx create --name $(BUILDX_BUILDER) --driver docker-container --use
@docker buildx use $(BUILDX_BUILDER)
@docker buildx inspect --bootstrap >/dev/null
# Multi-arch release: linux/amd64 + linux/arm64 → Docker Hub manifest list.
# PUSH=1 (default): buildx --push. PUSH=0: build only (cache; cannot --load multi-arch).
# Only tag $(FULL_IMAGE) — a bare "$(IMAGE_NAME):tag" would push to docker.io/library/...
release: env buildx-setup
@echo "Building $(FULL_IMAGE) [$(RELEASE_PLATFORMS)]"
@if [ "$(PUSH)" = "1" ]; then \
docker buildx build \
--platform $(RELEASE_PLATFORMS) \
--provenance=false \
--sbom=false \
-t $(FULL_IMAGE) \
--push \
. \
&& echo "Pushed $(FULL_IMAGE) (multi-arch)" \
&& docker buildx imagetools inspect $(FULL_IMAGE) | sed -n '1,40p'; \
else \
docker buildx build \
--platform $(RELEASE_PLATFORMS) \
--provenance=false \
--sbom=false \
-t $(FULL_IMAGE) \
. \
&& echo "PUSH=0 — multi-arch built into buildx cache (not pushed, not loaded locally)"; \
fi
@$(MAKE) helm-package IMAGE_TAG=$(IMAGE_TAG)
helm-lint:
helm lint ./helm/wrapped
# Helm chart --version must be SemVer; non-semver IMAGE_TAG (e.g. latest) → 0.0.0-<tag>
helm-package:
@mkdir -p dist
@tag="$(IMAGE_TAG)"; \
if echo "$$tag" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+([.+].*)?$$'; then \
chart_ver="$$tag"; \
else \
chart_ver="0.0.0-$$tag"; \
echo "IMAGE_TAG '$$tag' is not SemVer — helm chart version=$$chart_ver"; \
fi; \
helm package ./helm/wrapped --destination dist --version "$$chart_ver" --app-version "$$tag"
@echo "Helm chart in dist/"
clean:
$(COMPOSE) down -v --remove-orphans
-docker rmi $(IMAGE_NAME):$(IMAGE_TAG) $(FULL_IMAGE) 2>/dev/null || true
-docker buildx rm $(BUILDX_BUILDER) 2>/dev/null || true
rm -rf dist
# Ручной SemVer (не вызывается из make push).
bump-patch:
@PYTHONPATH=. python3 scripts/bump_version.py patch
@echo "VERSION → $$(cat VERSION)"
bump-minor:
@PYTHONPATH=. python3 scripts/bump_version.py minor
@echo "VERSION → $$(cat VERSION)"
version-commit:
@git add VERSION pyproject.toml helm/wrapped/Chart.yaml helm/wrapped/values.yaml
@if git diff --cached --quiet; then \
echo "Version unchanged — no version commit"; \
else \
git commit -m "Bump version to $$(cat VERSION)."; \
fi
push:
@set -e; \
git add .; \
echo "=== staged ==="; \
git status --short; \
echo; \
if git diff --cached --quiet; then \
echo "Nothing to commit — pushing current branch."; \
else \
echo "Enter commit message (multiline OK), then Ctrl-D:"; \
msg=$$(cat </dev/tty); \
if [ -z "$$msg" ]; then echo "Empty commit message, aborting." >&2; exit 1; fi; \
printf '%s\n' "$$msg" | git commit -F -; \
fi; \
echo "Pushing to both remotes:"; \
git remote get-url --push --all origin | sed 's/^/ - /'; \
git push origin HEAD