From ce99072937f831ea0500821c8e8d298d563d6f2f Mon Sep 17 00:00:00 2001 From: Denozordec Date: Mon, 23 Mar 2026 17:39:54 +0700 Subject: [PATCH] Update README and Docker workflow to clarify registry login process and handling of secrets. Added explanation for why certain steps are not skipped in workflows, and improved the logic for logging in and pushing to the Container Registry. --- .gitea/workflows/docker.yml | 50 +++++++++++++++++++++---------------- README.md | 2 ++ 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/.gitea/workflows/docker.yml b/.gitea/workflows/docker.yml index fb8bba0..3e03eb8 100644 --- a/.gitea/workflows/docker.yml +++ b/.gitea/workflows/docker.yml @@ -19,30 +19,37 @@ jobs: - name: Build image run: docker build -t cloudflare-balancer:ci . - # Опционально: публикация в Container Registry Gitea. - # Секреты репозитория: - # REGISTRY_URL — хост Gitea (https://gitea.example.com допустимо) - # REGISTRY_USER — имя пользователя Gitea (логин) - # PACKAGE_TOKEN — токен для push в пакеты / registry (основной; пароль в docker login) - # REGISTRY_PASSWORD — запасной вариант, если PACKAGE_TOKEN не задан - - name: Log in to registry - if: ${{ secrets.REGISTRY_USER != '' && secrets.REGISTRY_URL != '' && (secrets.PACKAGE_TOKEN != '' || secrets.REGISTRY_PASSWORD != '') }} + # Публикация в registry: не используйте `if: secrets.X != ''` — в Gitea/GitHub + # проверка «пустой ли секрет» в выражениях часто всегда ложна, шаги пропускаются. + # Секреты пробрасываем в env и проверяем в bash. + # + # Секреты: REGISTRY_URL, REGISTRY_USER, PACKAGE_TOKEN (или REGISTRY_PASSWORD) + - name: Login and push to Container Registry (optional) + env: + REGISTRY_URL: ${{ secrets.REGISTRY_URL }} + REGISTRY_USER: ${{ secrets.REGISTRY_USER }} + PACKAGE_TOKEN: ${{ secrets.PACKAGE_TOKEN }} + REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }} run: | - REG="${{ secrets.REGISTRY_URL }}" - REG="${REG#https://}" - REG="${REG#http://}" - REG="${REG%/}" - PASS="${{ secrets.PACKAGE_TOKEN }}" - if [ -z "$PASS" ]; then PASS="${{ secrets.REGISTRY_PASSWORD }}"; fi - echo "$PASS" | docker login "$REG" -u "${{ secrets.REGISTRY_USER }}" --password-stdin - - - name: Tag and push - if: ${{ secrets.REGISTRY_USER != '' && secrets.REGISTRY_URL != '' && (secrets.PACKAGE_TOKEN != '' || secrets.REGISTRY_PASSWORD != '') }} - run: | - REG="${{ secrets.REGISTRY_URL }}" - REG="${REG#https://}" + set -e + if [ "${GITHUB_EVENT_NAME:-}" = "pull_request" ]; then + echo "Pull request: push в registry не выполняется (только сборка)." + exit 0 + fi + if [ -z "${REGISTRY_URL:-}" ] || [ -z "${REGISTRY_USER:-}" ]; then + echo "Пропуск registry: задайте секреты REGISTRY_URL и REGISTRY_USER." + exit 0 + fi + PASS="${PACKAGE_TOKEN:-}" + if [ -z "$PASS" ]; then PASS="${REGISTRY_PASSWORD:-}"; fi + if [ -z "$PASS" ]; then + echo "Пропуск registry: задайте PACKAGE_TOKEN или REGISTRY_PASSWORD." + exit 0 + fi + REG="${REGISTRY_URL#https://}" REG="${REG#http://}" REG="${REG%/}" + echo "$PASS" | docker login "$REG" -u "$REGISTRY_USER" --password-stdin IMG="cloudflare-balancer" OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') TAG="${GITHUB_SHA:0:12}" @@ -51,3 +58,4 @@ jobs: docker tag cloudflare-balancer:ci "${REG}/${OWNER_LOWER}/${IMG}:latest" docker push "${REG}/${OWNER_LOWER}/${IMG}:${TAG}" docker push "${REG}/${OWNER_LOWER}/${IMG}:latest" + echo "Опубликовано: ${REG}/${OWNER_LOWER}/${IMG}:${TAG}" diff --git a/README.md b/README.md index a1aff0f..04dc27f 100644 --- a/README.md +++ b/README.md @@ -251,6 +251,8 @@ docker logs -f > В Gitea создайте **Personal Access Token** (или токен с нужным scope) с доступом к **пакетам** / записи в Container Registry и сохраните его в секрете **`PACKAGE_TOKEN`**. +> **Почему шаги не «Skipped»:** в workflow нет условия `if: secrets.… != ''` — в Gitea Actions (как и в GitHub) такие проверки часто **всегда ложны**, и публикация молча пропускается. Вместо этого один шаг всегда выполняется: при отсутствии секретов он выводит причину и завершается с кодом 0. На **pull request** push в registry намеренно не делается (только `docker build`). + --- ## Безопасность