3.8 KiB
3.8 KiB
Design: Автодеплой dedinit.ru через Gitea Actions
Архитектура
[пользователь/агент]
│ git push (main) в gitverse.ru (источник истины)
▼
[gitverse.ru] kpa39l/dedinit.ru
│ крон-скрипт: git fetch gitverse && git push gitea (каждые ~10 мин)
▼
[gitea.nixg.ru] estorozhenko/dedinit.ru ← НЕ mirror, Actions включены
│ push в main → Gitea Actions
▼
[bigbox-runner] (gitea-act-runner v3.3.1, label docker27-bash)
│ job-контейнер docker27-bash: checkout → make build → tools/deploy_sftp.py
▼
[kpa39l.myjino.ru:2222:/dedinit.ru/] (SFTP-only, пароль из secrets.SSHPASS)
Шаги
1. Снять mirror-статус у Gitea-репозитория
Раньше репо было pull-mirror (интервал 8ч) с gitverse.ru. На mirror-репо Gitea отключает Actions. Снимаем:
curl -X PATCH "https://gitea.nixg.ru/api/v1/repos/estorozhenko/dedinit.ru" \
-H "Authorization: token $GITEA_NIXG_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mirror": false}'
Проверка: GET /repos/estorozhenko/dedinit.ru → "mirror":false, "has_actions":true.
2. Синхронизация gitverse → gitea крон-скриптом
Создать /opt/gitea.nixg.ru/sync-dedinit.sh:
#!/usr/bin/env bash
set -euo pipefail
cd /opt/dedinit.ru
git fetch gitverse main || git fetch origin main # gitverse = источник истины
# аккуратно: приносим refs/heads/main gitverse → gitea
git push gitea main:main
(детали remote gitea — см. ниже) + cron на bigbox каждые 10 минут.
3. Workflow .gitea/workflows/deploy.yml
name: deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: [ubuntu-24.04] # label раннера bigbox-runner
steps:
- uses: actions/checkout@v4
- name: install hugo
run: |
curl -sL https://api.github.com/repos/gohugoio/hugo/releases/latest \
| grep -oE 'browser_download_url.*_extended.*linux-amd64.tar.gz' | head -1
# распаковать hugo в /usr/local/bin
- name: build
run: make build
- name: deploy
env:
SSHPASS: ${{ secrets.SSHPASS }}
run: make deploy
4. Секрет в Gitea
curl -X PUT "https://gitea.nixg.ru/api/v1/repos/estorozhenko/dedinit.ru/actions/secrets/SSHPASS" \
-H "Authorization: token $GITEA_NIXG_TOKEN" \
-d '{"value": "-Zp4ep747t25"}'
Файлы
.gitea/workflows/deploy.yml— новыйtools/deploy_sftp.py,Makefile— переиспользуются без изменений/opt/gitea.nixg.ru/sync-dedinit.sh(+ cron) — новый- Для SSH-доступа к gitea: remote
gitea=git@gitverseнет; проверю, есть ли SSH/HTTPS-доступ к gitea.nixg.ru, или поднимем родной remote через https+token.
Команды верификации
curl -s https://gitea.nixg.ru/api/v1/repos/estorozhenko/dedinit.ru | grep '"has_actions"'→ trueopenspec validate auto-deploy-dedinit-actions→ valid- После пуша:
curl -s https://gitea.nixg.ru/api/v1/repos/estorozhenko/dedinit.ru/actions/runs | ...→ run существует curl -s -o /dev/null -w '%{http_code}' https://dedinit.ru/→ 200
Rollback
- Вернуть mirror:
PATCH /repos/estorozhenko/dedinit.ru→{"mirror": true} - Убрать workflow:
git rm .gitea/workflows/deploy.yml+ push - Удалить секрет:
DELETE /repos/estorozhenko/dedinit.ru/actions/secrets/SSHPASS - Остановить крон-скрипт синхронизации