From c324b4732fec8e908f53ffc49d7ed30868539b7d Mon Sep 17 00:00:00 2001 From: Alexandr Date: Fri, 3 Apr 2026 14:41:15 +0300 Subject: [PATCH] =?UTF-8?q?ci:=20deploy=20=E2=80=94=20=D0=BD=D0=BE=D1=80?= =?UTF-8?q?=D0=BC=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20refs/h?= =?UTF-8?q?eads/*=20=D0=B8=20refs/tags/*=20(Forgejo=20main)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .gitea/workflows/deploy.yml | 14 ++++++++++++-- docs/CICD.md | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 69f78d6..87d6495 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -21,16 +21,26 @@ jobs: env: RAW_REF: ${{ inputs.ref }} run: | + # Forgejo иногда подставляет refs/heads/main вместо main — иначе нет origin/refs/heads/main. + normalize_ref() { + case "$1" in + refs/heads/*) echo "${1#refs/heads/}" ;; + refs/tags/*) echo "${1#refs/tags/}" ;; + *) echo "$1" ;; + esac + } if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then R=$(printf '%s' "$RAW_REF" | tr -d '\r\n' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') - # Теги в git: v1.7.0; если ввели 1.7.0 — подставляем v (иначе checkout не находит ref). + R=$(normalize_ref "$R") + # Теги в git: v1.7.0; если ввели 1.7.0 — подставляем v. if echo "$R" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then echo "::notice::Указано $R без префикса v — деплой на v${R}" R="v${R}" fi echo "ref=$R" >> "$GITHUB_OUTPUT" else - echo "ref=${{ github.ref_name }}" >> "$GITHUB_OUTPUT" + R=$(normalize_ref "${{ github.ref_name }}") + echo "ref=$R" >> "$GITHUB_OUTPUT" fi # Без секретов appleboy/ssh-action падает с «missing server host» — даём явную подсказку. diff --git a/docs/CICD.md b/docs/CICD.md index eeb002d..5bdbd64 100644 --- a/docs/CICD.md +++ b/docs/CICD.md @@ -110,6 +110,7 @@ curl -s http://127.0.0.1:8080/health - **SSH fails** — `ssh -i key root@DEPLOY_HOST` с машины runner; `known_hosts` при необходимости добавьте в экшен (расширение `appleboy/ssh-action` / `ssh-keyscan`). - **`git checkout` fails** — выполните на сервере `git fetch --tags` вручную, проверьте remote URL и ключ. - **`fatal: ambiguous argument 'origin/v1.x.x'`** при ручном деплое — у **тегов** нет ref вида `origin/имя-тега`, только `refs/tags/…`. После `git fetch && git checkout v1.x.x` делайте `git reset --hard v1.x.x`, а не `origin/v1.x.x`. В `.gitea/workflows/deploy.yml` это уже учтено (ветка `origin/` только для **веток**). +- **Deploy остаётся на старом коммите (напр. v1.6.0), в логе `REF=refs/heads/main`** — UI Forgejo может подставлять полный ref. Workflow приводит `refs/heads/main` → `main`, чтобы выполнялся `git reset --hard origin/main` и подтягивался актуальный `main` с Forgejo. - **База недоступна из контейнера** — в `DATABASE_URL` укажите хост, доступный **из Docker** (не `127.0.0.1` хоста, если БД на хосте — используйте IP хоста или `host.docker.internal` где поддерживается). См. также [VERSIONING.md](VERSIONING.md) и [IRM.md](IRM.md).