Each push previously burned ~21 billable GitHub Actions minutes because the Windows POS build cost 10 (5 real × 2x Windows multiplier). That gives us ~95 pushes/month on the 2000-minute free tier — too tight for active dev. - POS job now gates on `startsWith(github.ref, 'refs/tags/v')` OR workflow_dispatch. Every-commit CI stays Linux-only. - CI trigger adds `tags: ['v*']` and workflow_dispatch so releases can build the .exe on demand. - docs/24x7.md: new table with per-job minute/multiplier breakdown and the break-even point where a self-hosted runner becomes cheaper (~200 commits/mo). Post-change estimate: ~11 billable min/commit → fits 180 commits/month in the free tier. Windows minutes only spent when tagging a release. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7.5 KiB
7.5 KiB
24/7 автономный workflow
Картина: твой Mac/iPhone даёт команду → Claude работает → всё запускается в облаке независимо от твоего устройства.
┌──────────────┐ ┌──────────────┐
│ Mac / iPhone │ │ Твой Proxmox │
│ (даёшь команду)│ │ VM (будущее) │
└───────┬──────┘ └───────┬──────┘
│ │
│ Claude Code │ Claude Code 24/7
│ (когда открыт) │ (когда поднимем VM)
▼ ▼
┌──────────────────────────────────────┐
│ GitHub (main branch) │
└──────┬──────────────────────────┬────┘
│ push │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ CI workflow │ │Docker workflow│
│ (backend+web │ │(api+web images│
│ +POS builds) │ │ на ghcr.io) │
└──────┬──────┘ └──────┬──────┘
│ │
│ artifacts: │ images pulled by
│ web-dist, POS .exe │ stage / prod compose
▼ ▼
┌──────────────┐ ┌──────────────┐
│ GitHub │ │ Proxmox-VM │
│ Releases │ │ stage/prod │
│ (.exe, APK) │ │ (docker-compose)│
└──────────────┘ └──────────────┘
Что где живёт
| Компонент | Где | Когда работает | Зависит от Mac? |
|---|---|---|---|
| Claude Code (текущая сессия) | твой Mac | пока открыта app + Mac не спит | Да |
| Claude Code (будущее 24/7) | Proxmox VM | всегда | Нет |
| GitHub (код) | github.com | всегда | Нет |
| GitHub Actions CI | github.com | срабатывает на push / cron | Нет |
| Docker images | ghcr.io | всегда | Нет |
| Тестовый стенд (stage) | Proxmox VM | всегда | Нет |
| DB бэкапы | Proxmox VM → локальный диск + S3 (опц.) | cron nightly | Нет |
Сценарии
Ты заказал фичу → уснул
- (Днём) запустил Claude, дал команду «сделай X», Claude работает
- Перед сном Claude коммитит и пушит то что успел
- GitHub Actions автоматически собирает backend+web+POS, прогоняет тесты
- Docker-образы уходят в ghcr.io
- (Если stage настроен) — stage автопулит образ → перезапускается → готов к тесту
- Telegram-бот шлёт тебе «готово, проверь stage.food-market.xxx»
- Утром ты смотришь, ревьюишь, делаешь merge/revert
Ты дал команду с iPhone
- Открыл Claude на iPhone, сказал «обнови UI страницы X»
- Claude работает, пушит
- GitHub Actions → ghcr.io → stage → Telegram → ты проверяешь прямо с iPhone
Что-то пошло не так
- Каждый коммит = одна точка отката.
git revert <sha>за 10 секунд. - БД: ежедневный pg_dump
.sql.gz, 30 дней ротации, скриптdeploy/backup.sh. - Критические операции (миграции с удалением данных, force-push на main) — всегда спрошу тебя.
GitHub Actions бюджет (free: 2000 мин/мес на приватный репо)
| Job | Runner | Мин/запуск | Множитель | Биллинговых мин | Когда |
|---|---|---|---|---|---|
| backend | Linux | 3 | 1× | 3 | каждый push/PR |
| web | Linux | 2 | 1× | 2 | каждый push/PR |
| pos | Windows | 5 | 2× | 10 | только на теги v* + ручной запуск |
| docker-api | Linux | 3 | 1× | 3 | только push в main (с изм. кода) |
| docker-web | Linux | 3 | 1× | 3 | только push в main (с изм. кода) |
Оценка: ~11 бил.мин на обычный коммит. Лимит 2000 мин ≈ 180 коммитов в месяц или 6 в день. На теге релиза +10 за POS.
Когда упрёмся (ориентир: 200+ коммитов/мес): поднимем self-hosted runner на Proxmox-VM (Ubuntu, 2 CPU/2 GB). В workflow: runs-on: [self-hosted, linux] вместо ubuntu-latest. Безлимит по времени.
Что нужно для полноценного 24/7 (ещё не сделано)
- GitHub Actions для CI (backend/web/POS) — готов
.github/workflows/ci.yml - Docker workflow — готов
.github/workflows/docker.yml - docker-compose для стенда — готов
deploy/docker-compose.yml - DB backup скрипт — готов
deploy/backup.sh - Proxmox-VM
food-market-stage— ждёт кредов от тебя - Proxmox-VM
claude-runner(чтобы я не жил на твоём Mac) — ждёт кредов - SSH-ключ для деплоя в GitHub Secrets
- Telegram bot + chat_id в GitHub Secrets
- FTP для APK (если нужен) в GitHub Secrets
- Домен + SSL для stage (опц., Cloudflare)
Секреты: безопасно передать мне
Пока твой Mac — единственное место, куда Claude Code имеет доступ. Безопасный путь:
- Создай папку:
mkdir -p ~/.food-market-secrets && chmod 700 ~/.food-market-secrets - Положи туда файлы (я буду читать только по твоей команде и не буду вставлять значения в чат):
~/.food-market-secrets/proxmox.env— ssh creds для Proxmox API/VM~/.food-market-secrets/ftp.env— FTP для APK~/.food-market-secrets/telegram.env—BOT_TOKEN=...+CHAT_ID=...
- Пришли в чат: "Секреты в ~/.food-market-secrets/"
- Я прочитаю, прокину в GitHub Secrets через
gh secret set, больше нигде не сохраню.
Настройка Mac чтобы не засыпал ночью (временно, пока нет remote runner)
# Заблокировать sleep на время работы Claude (Ctrl+C чтобы отменить)
caffeinate -i -d
Или в System Settings → Lock Screen → «Turn display off after: Never» + «Prevent automatic sleeping when the display is off».
После того как поднимем claude-runner VM — этот обход больше не нужен.