KarelWintersky

KarelWintersky / satisfactory-cli.md

Last active 2 days ago

Like 0

Revision 5e44e0dea514a9f393e761db573ec1e592174f54

satisfactory-cli.md Raw

Сейчас satisfactory-cli.php сломается, если нет папки vendor (чего не бывает, когда сервис собран в PHAR и запущен на сервере). У меня два решения - мы либо собираем отдельный satisfactory-cli.phar, либо добавляем кли-команды к основному server.php / satisfactory.phar - но тогда надо менять механизм вызовов. Например, вызывать сервер с ключом --serve (то есть satisfactory.phar --serve --config=/path/to/config --verbose), а cli-команды - без --serve . Что думаешь?

Ключевой факт: внутри satisfactory.phar уже есть всё, что нужно CLI — app/*.php (AppConfig/Database/Setup) и vendor/ (включая arris.toolkit.cli-console — он в require). В phar не попадает только сам файл satisfactory-cli.php (~180 строк задач). Поэтому:

Моё мнение: вариант 2 (CLI в основном phar). Отдельный satisfactory-cli.phar дублирует весь код (server + app + vendor ≈ тот же размер) ради 180 строк — два артефакта, две сборки в build.sh, два файла в DEB и makefile install. Никакого выигрыша по размеру или изоляции.

Но с одной поправкой к твоей схеме. Если сделать --serve обязательным, то после обновления phar без синхронного обновления юнита сервис молча падает: текущий ExecStart в debian/satisfactory.service--config=... --verbose без --serve → попадёт в CLI-режим «нет задач» → exit(1). Это футган на деплое (на боевой машине юнит обновляется отдельно от phar).

Предлагаю обратную диспетчеризацию — сервер остаётся дефолтом, CLI маркируется своими флагами:

  • satisfactory.phar --serve --config=... --verbose → сервер (явно)
  • satisfactory.phar --config=... --verbose → сервер (старый юнит продолжает работать без правок)
  • satisfactory.phar --delete=vendor/pkg / --clear / --help → CLI (и --config общий для обоих режимов)

Реализация тривиальная: перенести deletePackage/clearCache/removeTree в app/CLI.php (finder box.json подхватит автоматически), а в server.php сделать роутинг по флагам перед стартом сервера. App::init() и так уже грузит+валидирует конфиг — CLI переиспользует его.

Если ок — реализую. Если принципиально «--serve обязателен», тогда аккуратно поправим debian/satisfactory.service и README в той же итерации, но живой юнит на сервере всё равно придётся обновить руками.