ci: deploy — нормализация refs/heads/* и refs/tags/* (Forgejo main)
All checks were successful
CI / test (push) Successful in 38s
All checks were successful
CI / test (push) Successful in 38s
Made-with: Cursor
This commit is contained in:
@ -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» — даём явную подсказку.
|
||||
|
||||
@ -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/<ref>` только для **веток**).
|
||||
- **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).
|
||||
|
||||
Reference in New Issue
Block a user