gendesign/.github/workflows/deploy-obsidian.yml
lekss361 d50626b32a fix
2026-05-11 09:57:40 +03:00

109 lines
4.8 KiB
YAML
Raw Permalink 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