gendesign/.forgejo/workflows/deploy-obsidian.yml
bot-backend 7505dbc1c6
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
fix(devops): переносим deploy-obsidian.yml в .forgejo/workflows/ (#2416)
Жил в .github/workflows/ с миграции с GitHub (16.05.2026), README называл
это намеренным решением («остался на GitHub») — но живого GitHub-зеркала
с секретами не нашлось: 0 запусков за всю историю Forgejo Actions (12000+
прогонов остальных workflow), контейнер не пересоздавался с 17.05 до
ручного SSH-фикса 04.07 (couchdb healthcheck, #2413).

Anton подтвердил vault живым (CouchDB 200 + gendesign-vault 46830
документов + Obsidian REST MCP листит структуру) и дал добро на перенос.

Перенесено в единственную реально исполняемую директорию + обновлены
self-reference путь в самом workflow, README.md, docs/obsidian-livesync.md
(заодно поправлена соседняя устаревшая строка про main deploy.yml —
тоже давно .forgejo/, не .github/).

Refs #2416
2026-07-05 20:28:28 +05:00

109 lines
4.8 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: Deploy Obsidian
# Деплой ТОЛЬКО obsidian-стека (CouchDB).
# Триггерится при изменениях:
# - docker-compose.obsidian.yml (compose сервиса CouchDB)
# - scripts/setup-couchdb.sh (bootstrap)
# - docs/obsidian-livesync.md (документация — для history-watcher'а)
# - этот workflow
#
# Не пересобирает никаких Docker-образов (CouchDB официальный с DockerHub).
# Не трогает main-стек (backend / frontend / postgres / worker / beat / caddy).
on:
push:
branches: [main]
paths:
- "docker-compose.obsidian.yml"
- "scripts/setup-couchdb.sh"
- "docs/obsidian-livesync.md"
- ".github/workflows/deploy-obsidian.yml"
workflow_dispatch:
concurrency:
group: deploy-obsidian
cancel-in-progress: false
jobs:
deploy-obsidian:
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch' || github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Deploy obsidian stack via SSH
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USER }}
key: ${{ secrets.DEPLOY_SSH_KEY }}
port: ${{ secrets.DEPLOY_PORT || 22 }}
script: |
set -euo pipefail
cd /opt/gendesign
# Свежие конфиги из репо
git fetch origin main
git reset --hard origin/main
# Создать shared network если её ещё нет (idempotent).
docker network inspect gendesign_shared >/dev/null 2>&1 \
|| docker network create gendesign_shared
# Загрузить COUCHDB_USER/PASSWORD из .env.runtime до compose up
# (compose также читает .env.runtime через env_file, но
# `${COUCHDB_PASSWORD:?...}` валидация требует переменную в shell).
if [ -f backend/.env.runtime ]; then
set -a
# shellcheck source=/dev/null
source backend/.env.runtime
set +a
fi
if [ -z "${COUCHDB_PASSWORD:-}" ]; then
echo "ERROR: COUCHDB_PASSWORD не задан в backend/.env.runtime"
exit 1
fi
# Стек CouchDB поднимается с собственным project-name.
docker compose -p gendesign-obsidian \
-f docker-compose.obsidian.yml pull
docker compose -p gendesign-obsidian \
-f docker-compose.obsidian.yml up -d
# Bootstrap CouchDB (CORS, db, лимиты) — idempotent
if [ -f scripts/setup-couchdb.sh ]; then
# Загружаем COUCHDB_PASSWORD из backend/.env.runtime если есть
if [ -f backend/.env.runtime ]; then
set -a; source backend/.env.runtime; set +a
fi
# Ждём CouchDB up, потом bootstrap
for i in $(seq 1 30); do
if docker compose -p gendesign-obsidian \
-f docker-compose.obsidian.yml \
exec -T couchdb curl -fsS http://localhost:5984/_up >/dev/null 2>&1; then
break
fi
sleep 2
done
COUCHDB_HOST=http://localhost:5984 \
COUCHDB_USER="${COUCHDB_USER:-obsidian}" \
COUCHDB_PASSWORD="${COUCHDB_PASSWORD:?must be set in backend/.env.runtime}" \
docker compose -p gendesign-obsidian \
-f docker-compose.obsidian.yml \
exec -T couchdb bash -c "$(cat scripts/setup-couchdb.sh)" \
|| echo "(bootstrap warnings ignored — script is idempotent)"
fi
# Caddy в main-stack — НЕ перезапускаем тут (другой workflow),
# но reload конфига полезен на случай если в Caddyfile добавили
# новый obsidian-route только что (главное: image main caddy уже
# запущен и подключён к gendesign_shared network).
if docker compose -p gendesign -f docker-compose.prod.yml ps caddy --quiet \
| grep -q .; then
docker compose -p gendesign -f docker-compose.prod.yml \
exec -T caddy caddy reload --config /etc/caddy/Caddyfile \
|| echo "(caddy reload skipped — main stack not running)"
fi
sleep 3
curl -fsS https://obsidian.gendsgn.ru/_up | head -c 200 || true