tuqo
npx @tuqo/cli · без установки · Node 18+

Деплой из терминала и из CI

Одна команда публикует папку сборки. Файлы уходят поштучно по хешу, поэтому повторный деплой не гоняет фотографии заново, а в CI хватает секрета с ключом и одной строки.

TUQO_API_KEY=tqk_… npx @tuqo/cli deploy ./dist --site <site_id> --wait

Команды

deploy <dir>
загрузить папку по манифесту: в stdout deploy_id, с --wait второй строкой — боевой адрес
deploy
без аргументов — все сайты из tuqo.json одной командой; по строке на сайт
preview <deploy_id>
секретная ссылка на сборку, сделанную с --no-activate (с тарифа «Старт»)
promote <deploy_id>
опубликовать сборку; та же команда — откат на прошлую версию

Флаги

--site <id>
site_id из панели, whoami или create_site; либо маппинг в tuqo.json
--wait
дождаться публикации и напечатать боевой адрес; exit 1, если сборка упала — удобно в CI
--no-activate
собрать без публикации: боевой адрес не меняется, версия ждёт preview / promote
--key <tqk_…>
ключ проекта; лучше переменная TUQO_API_KEY (алиас TUQO_KEY), чтобы ключ не попал в историю шелла
--config <file>
путь к tuqo.json (по умолчанию ./tuqo.json)
--api <url>
адрес API, по умолчанию https://api.tuqo.ru

stdout машиночитаемый: deploy_id, с --wait второй строкой — боевой адрес. Логи и прогресс — в stderr, так что вывод можно подставлять в скрипты.

Рецепты для CI

Ключ — в секретах CI, идентификатор сайта — в переменных. Сборка проекта остаётся вашей: Tuqo получает готовую папку.

GitHub Actions

name: Deploy to Tuqo
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 20 }
      - run: npm ci && npm run build
      - run: npx @tuqo/cli deploy ./dist --site ${{ vars.TUQO_SITE_ID }} --wait
        env:
          TUQO_API_KEY: ${{ secrets.TUQO_API_KEY }}

GitLab CI

deploy:
  image: node:20
  stage: deploy
  only: [main]
  script:
    - npm ci && npm run build
    - npx @tuqo/cli deploy ./dist --site "$TUQO_SITE_ID" --wait
  # TUQO_API_KEY и TUQO_SITE_ID — в Settings → CI/CD → Variables (ключ — masked)

Репозиторий на GitHub, GitLab, Gitea, GitVerse или GitFlic без своего CI? Проще Git CD: Tuqo сам соберёт и опубликует по push.

Показать версию до публикации

Сборка с --no-activate не встаёт на боевой адрес: посетители видят прежнюю версию, а заказчик — секретную ссылку. Согласовали — опубликовали одной командой. Та же команда откатывает на любую хранимую версию.

D=$(npx @tuqo/cli deploy ./dist --site <site_id> --no-activate --wait)
npx @tuqo/cli preview "$D"    # секретная ссылка для заказчика
npx @tuqo/cli promote "$D"    # опубликовать, когда согласовали

Подробнее — Предпросмотр сборки.

Несколько сайтов из одного репозитория

Локали, бренды, лендинги кампаний: положите tuqo.json в корень и деплойте всё командой npx @tuqo/cli deploy без аргументов. Файл коммитится в репозиторий, поэтому ключа в нём быть не должно — CLI это проверяет.

{ "sites": { "site/ru": "<site_id_ru>", "site/en": "<site_id_en>" } }

CLI — частые вопросы

Чем CLI отличается от загрузки архива? +

Архив уходит целиком, даже если поменялась одна строка. CLI сначала спрашивает у сервера, каких файлов ещё нет по sha256, и загружает только их: правка текста не трогает фотографии, а повторный деплой того же сайта почти мгновенный. Лимита на размер тела запроса нет — файлы идут поштучно.

Нужно ли что-то устанавливать? +

Нет: npx @tuqo/cli скачает пакет при первом запуске. Нужен Node.js 18 или новее. Пакет без зависимостей.

Как это работает с нейросетями? +

Claude Code, Cursor и другие агенты с доступом к терминалу вызывают ту же команду. Байты читаются с диска и не проходят через контекст модели — тяжёлый сайт с фотографиями публикуется без расхода токенов на base64. В браузерном чате без файловой системы агент публикует через MCP, а CLI — там, где есть диск.

Где взять ключ? +

Панель → проект → «API-ключи» → создать ключ с правами editor (для деплоя достаточно) или full. Ключ показывается один раз; для CI положите его в секрет репозитория, не в tuqo.json — CLI откажется работать, если найдёт ключ в конфиге.

Как показать версию заказчику до публикации? +

deploy --no-activate --wait вернёт deploy_id, preview <id> выдаст секретную ссылку, promote <id> опубликует. Ссылка открывается без пароля, даже если сайт закрыт, — давайте её только тем, кому доверяете. Доступно с тарифа «Старт».

Какие лимиты? +

До 2000 файлов и до 50 МБ на файл; суммарно — в пределах квоты хранилища тарифа. В корне папки должен быть index.html. Что Tuqo проверит при публикации — на странице «Проверки при публикации».

А если репозиторий на GitVerse или GitFlic? +

Там проще без CLI: подключите Git CD в панели — Tuqo сам соберёт и опубликует сайт по push. CLI нужен, когда сборка идёт в вашем CI или на вашей машине.

Одна команда — и сайт в проде

CLI — обёртка над публичным REST API манифест-деплоя: то же самое можно собрать на любом языке.