feat: simplify config toml, add local after commands
This commit is contained in:
@@ -49,7 +49,7 @@ Deploy successful! (total 2.3s)
|
||||
ищется по обычной цепочке, так что временный локальный `./deploy.toml`
|
||||
переопределяет глобальный — создали файл, задеплоились, удалили.
|
||||
|
||||
Схема:
|
||||
Схема — **один проект = один блок**, все параметры точечными ключами:
|
||||
|
||||
```toml
|
||||
[servers.my-vps] # профиль сервера: описывается один раз
|
||||
@@ -60,29 +60,65 @@ key_path = "~/.ssh/id_ed25519"
|
||||
base_dir = "/var/www/pages" # корень для относительных sync target
|
||||
|
||||
[projects.my-node-app]
|
||||
server = "my-vps" # ссылка на профиль
|
||||
workdir = "~/code/my-node-app" # где выполнять локальные команды (~ разворачивается)
|
||||
|
||||
[projects.my-node-app.env] # переменные для локальных команд сборки
|
||||
PUBLIC_BASE_PATH = "/my-node-app"
|
||||
|
||||
[projects.my-node-app.local] # шаги сборки на вашей машине
|
||||
commands = ["npm ci", "npm run build"]
|
||||
|
||||
[[projects.my-node-app.sync]] # что заливать на сервер
|
||||
source = "dist" # файл или папка (относительно workdir)
|
||||
target = "my-node-app" # относительный -> base_dir сервера;
|
||||
# абсолютный "/path" используется как есть
|
||||
|
||||
[projects.my-node-app.remote] # команды управления на сервере
|
||||
commands = ["pm2 restart pages"]
|
||||
server = "my-vps" # ссылка на профиль SSH
|
||||
workdir = 'C:\code\my-node-app' # где выполнять локальные команды (~ разворачивается)
|
||||
branch = "main" # опционально: защита от деплоя чужой ветки
|
||||
env.PUBLIC_BASE_PATH = "/my-node-app" # переменные для локальной сборки
|
||||
local.commands = ["npm ci", "npm run build"] # шаги сборки на вашей машине
|
||||
sync = "dist" # залить dist -> <base_dir>/my-node-app
|
||||
remote.commands = ["pm2 restart pages"] # команды управления по SSH
|
||||
```
|
||||
|
||||
### Поле `sync`
|
||||
|
||||
Три формы — выбирай по смыслу:
|
||||
|
||||
```toml
|
||||
sync = "dist" # один источник; target = имя проекта
|
||||
sync = ["dist", "static"] # несколько источников; target = имя проекта
|
||||
sync = [{ source = "web/build", target = "/opt/static" }] # полные правила
|
||||
```
|
||||
|
||||
Во всех формах `target` без `/` на конце резолвится через `base_dir` сервера
|
||||
(`"my-node-app"` → `/var/www/pages/my-node-app`). Абсолютный target
|
||||
(`"/opt/static"`) используется как есть. Отдельных блоков `[[...sync]]`,
|
||||
`[projects.x.env]`, `[projects.x.local]`, `[projects.x.remote]` больше нет —
|
||||
это не нужно помнить и копировать, всё в блоке проекта.
|
||||
|
||||
Проект может задать параметры подключения и напрямую (`host`, `user`, `port`,
|
||||
`key_path` вместо `server`) — тогда они имеют приоритет над профилем.
|
||||
|
||||
Приоритет параметров SSH: проект → `[servers.<name>]` → `~/.ssh/config` → дефолт.
|
||||
|
||||
### Локальные команды после деплоя (`local_after`)
|
||||
|
||||
Выполняются на вашей машине **после** sync + remote и **всегда** — и при
|
||||
успехе, и после любого упавшего шага (deploy всё равно упадёт). Для очистки
|
||||
артефактов или вебхука с результатом:
|
||||
|
||||
```toml
|
||||
[projects.my-node-app]
|
||||
server = "my-vps"
|
||||
workdir = 'C:\code\my-node-app'
|
||||
local.commands = ["npm run build"]
|
||||
sync = "dist"
|
||||
remote.commands = ["pm2 restart pages"]
|
||||
|
||||
[projects.my-node-app.local_after]
|
||||
commands = [
|
||||
'del /q dist',
|
||||
'curl -s -X POST https://example.com/hook -d "result=%XBP_DEPLOY_RESULT%"',
|
||||
]
|
||||
```
|
||||
|
||||
Внутри доступны переменные (в cmd — `%VAR%`, в sh — `$VAR`):
|
||||
|
||||
- `XBP_DEPLOY_RESULT` — `success` либо `failed`;
|
||||
- `XBP_ERROR` — текст ошибки (только при `failed`).
|
||||
|
||||
Эти же переменные доступны в `--dry-run`, где показываются в плане без
|
||||
выполнения.
|
||||
|
||||
### Windows-нюанс TOML
|
||||
|
||||
В basic-строках `"..."` бэкслеши — escape-символы, путь `C:\Users` сломает парсинг.
|
||||
|
||||
Reference in New Issue
Block a user