tuqo

Деплой из GitHub Actions и GitLab CI за три строки

Если сборка уже идёт в вашем CI, отдельный хостинговый пайплайн не нужен — хватает одной строки после npm run build:

npx @tuqo/cli deploy ./dist --site $TUQO_SITE_ID --wait

Ключ лежит в секрете TUQO_API_KEY, идентификатор сайта — в переменной. Всё остальное CLI делает сам: считает sha256 каждого файла, спрашивает у сервера, каких блобов ещё нет, догружает только недостающие и публикует новую версию. Повторный деплой того же сайта почти мгновенный — правка текста не гоняет фотографии заново.

Шаг 1. Ключ с правами editor

Панель → проект → «API-ключи» → создать ключ. Для деплоя достаточно уровня editor (readonly не публикует, full нужен только для управления проектом). Открытый ключ вида tqk_<prefix>_<secret> показывается один раз — скопируйте его сразу, потом останется только перевыпуск.

Создание API-ключа проекта с правами editor

Идентификатор сайта (site_id) виден на странице сайта в панели; его же возвращают whoami и create_site в API.

Шаг 2. Секреты в репозитории

GitHub: Settings → Secrets and variables → Actions → New repository secret → TUQO_API_KEY. Идентификатор сайта секретить незачем — заведите его на вкладке Variables как TUQO_SITE_ID.

GitLab: Settings → CI/CD → Variables → Add variable. Ключу поставьте галочки Masked и Protected, чтобы он не попал в логи задания и не был виден в MR из форков.

Ключ в репозитории хранить нельзя. Если вы пользуетесь мультисайтовым tuqo.json, CLI специально проверяет файл и откажется работать, увидев в нём поле key.

Шаг 3. 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 }}

Шаг 3 (вариант). 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)

Флаг --wait дожидается публикации и печатает боевой адрес второй строкой, а при неудаче возвращает exit 1 — задание в CI покраснеет, а не проскочит «зелёным» с непубликованной версией. Логи и прогресс идут в stderr, поэтому stdout можно смело подставлять в переменные:

URL=$(npx @tuqo/cli deploy ./dist --site "$TUQO_SITE_ID" --wait | tail -n1)
echo "Опубликовано: $URL"

Превью на pull request: —no-activate

Флаг --no-activate собирает версию, но не ставит её на боевой адрес — посетители продолжают видеть прежнюю. На такую сборку выдаётся секретная ссылка, её удобно оставлять комментарием к PR:

name: Preview
on: pull_request
jobs:
  preview:
    runs-on: ubuntu-latest
    env:
      TUQO_API_KEY: ${{ secrets.TUQO_API_KEY }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 20 }
      - run: npm ci && npm run build
      - id: dep
        run: |
          D=$(npx @tuqo/cli deploy ./dist --site ${{ vars.TUQO_SITE_ID }} --no-activate)
          echo "url=$(npx @tuqo/cli preview "$D")" >> "$GITHUB_OUTPUT"
      - run: echo "Превью — ${{ steps.dep.outputs.url }}"

Команда preview идемпотентна: повторный вызов вернёт ту же ссылку. Понравилось — публикуете npx @tuqo/cli promote <deploy_id>; та же команда откатывает сайт на любую хранимую версию. Ссылка предпросмотра не спрашивает пароль, даже если сайт закрыт, — давайте её только тем, кому доверяете, а выключить можно в панели. Возможность доступна с тарифа «Старт» (590 ₽/мес), подробности — на странице предпросмотра сборки.

Чем это отличается от Git CD

CLI в вашем CIGit CD
Кто собираетваш раннер, ваши шагиTuqo: Node 20, npm ci && npm run build
Что нужно настроитьYAML + секрет с ключомпривязку репозитория в панели
Build-минуты тарифане тратятсятратятся на каждую сборку
Тесты, линтеры, кодогенерациялюбыенет, только стандартная сборка
Вебхукне нуженсоздаётся автоматически

Правило простое: нужны свои шаги перед сборкой — CLI из CI. Нужно просто «push → сайт в проде» — Git CD, там ни YAML, ни ключей не требуется. Подробнее — в гайде про автодеплой из Git и CI/CD без GitHub Actions.

Частые вопросы

Нужно ли ставить CLI в образ?

Нет. npx @tuqo/cli скачает пакет при первом запуске; нужен Node.js 18 или новее, сам пакет — без зависимостей. В GitLab достаточно образа node:20.

Какие лимиты у одного деплоя?

До 2000 файлов и до 50 МБ на файл, суммарно — в пределах квоты хранилища тарифа. В корне папки должен быть index.html. Файлы уходят поштучно, поэтому лимита на размер тела запроса нет.

Можно ли выложить несколько сайтов из одного репозитория?

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

Сборка упала в CI, а на сайте что?

Ничего не изменилось: пока версия не опубликована, боевой адрес отдаёт предыдущую. При --wait неуспешный деплой завершает команду кодом 1, так что пайплайн остановится сам.

Все команды и флаги CLI → · Предпросмотр сборки → · Автодеплой из Git →