From c17eb9584b8b21debe5767dfd323bb96cbec3a93 Mon Sep 17 00:00:00 2001 From: austnv Date: Fri, 26 Jun 2026 13:06:13 +0300 Subject: [PATCH] fix: add docker push step to build.yml --- .gitea/workflows/build.yml | 30 ++++++++++++++++++++++++++---- Dockerfile | 17 +++++++++++++++++ pyproject.toml | 2 +- 3 files changed, 44 insertions(+), 5 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 09be865..156b244 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -14,6 +14,8 @@ jobs: # 1. Клонируем код - name: Checkout code uses: actions/checkout@v4 + with: + fetch-depth: 0 # Важно для получения всех тегов # 2. Настраиваем Docker Buildx - name: Set up Docker Buildx @@ -27,6 +29,23 @@ jobs: username: ${{ gitea.repository_owner }} password: ${{ secrets.ACCESS_TOKEN }} + # 4. Собираем и пушим Docker образ + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: | + git.uvpn.shop/${{ gitea.repository }}:latest + git.uvpn.shop/${{ gitea.repository }}:${{ gitea.ref_name }} + cache-from: type=gha + cache-to: type=gha,mode=max + build-args: | + BUILD_VERSION=${{ gitea.ref_name }} + BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') + VCS_REF=${{ github.sha }} + + # 5. Создаем Gitea Release через API - name: Create Gitea Release via API run: | # Получаем описание из тега (если есть) @@ -40,7 +59,7 @@ jobs: { "tag_name": "${{ gitea.ref_name }}", "name": "Release ${{ gitea.ref_name }}", - "body": "## Релиз ${{ gitea.ref_name }}\n\n📝 ${TAG_MESSAGE_ESCAPED}\n\n---\n\n**🏷️ Тег:** \`${{ gitea.ref_name }}\`\n**👤 Автор:** @${{ gitea.actor }}\n\n✅ Автоматически собрано и развёрнуто", + "body": "## Релиз ${{ gitea.ref_name }}\n\n📝 ${TAG_MESSAGE_ESCAPED}\n\n---\n\n**🏷️ Тег:** \`${{ gitea.ref_name }}\`\n**👤 Автор:** @${{ gitea.actor }}\n**📦 Образ:** \`git.uvpn.shop/${{ gitea.repository }}:${{ gitea.ref_name }}\`\n\n✅ Автоматически собрано и развёрнуто", "draft": false, "prerelease": false } @@ -70,13 +89,13 @@ jobs: exit 1 fi - # 5. Устанавливаем SSH-ключ для деплоя + # 6. Устанавливаем SSH-ключ для деплоя - name: Install SSH key uses: webfactory/ssh-agent@v0.9.0 with: ssh-private-key: ${{ secrets.DEPLOY_SSH_KEY }} - # 6. Деплой на сервер + # 7. Деплой на сервер - name: Deploy on server run: | ssh -o StrictHostKeyChecking=no ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }} << 'EOF' @@ -86,7 +105,7 @@ jobs: # Логинимся в реестр Gitea (чтобы docker pull мог скачать образ) echo "${{ secrets.ACCESS_TOKEN }}" | docker login git.uvpn.shop -u ${{ gitea.repository_owner }} --password-stdin - # Скачиваем свежий образ + # Скачиваем свежий образ с тегом latest или конкретным тегом docker compose pull # Перезапускаем контейнер с новым образом @@ -95,4 +114,7 @@ jobs: # Очищаем неиспользуемые образы docker image prune -f + + # Проверяем статус контейнера + docker compose ps EOF \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 42c1859..20b4015 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,12 @@ FROM ghcr.io/astral-sh/uv:python3.12-alpine AS builder ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy WORKDIR /app + +# Аргументы для метаданных +ARG BUILD_VERSION=unknown +ARG BUILD_DATE=unknown +ARG VCS_REF=unknown + RUN --mount=type=cache,target=/root/.cache/uv \ --mount=type=bind,source=uv.lock,target=uv.lock \ --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ @@ -8,7 +14,18 @@ RUN --mount=type=cache,target=/root/.cache/uv \ FROM python:3.12-alpine WORKDIR /app + +# Метки для образа +LABEL org.opencontainers.image.title="uVPN Backend" +LABEL org.opencontainers.image.description="uVPN Shop Backend Service" +LABEL org.opencontainers.image.version="${BUILD_VERSION}" +LABEL org.opencontainers.image.created="${BUILD_DATE}" +LABEL org.opencontainers.image.revision="${VCS_REF}" +LABEL org.opencontainers.image.source="https://git.uvpn.shop/${{ gitea.repository }}" +LABEL org.opencontainers.image.licenses="MIT" + COPY --from=builder /app/.venv /app/.venv COPY . /app + ENV PATH="/app/.venv/bin:$PATH" CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/pyproject.toml b/pyproject.toml index 69f0ab3..201b143 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "uvpn-backend" -version = "0.7.5" +version = "0.7.6" description = "FastAPI backend with Docker for uvpn.shop" readme = "README.md" requires-python = ">=3.12"