Автоматизация RuStore: Как отправлять APK в продакшн из терминала
Гайд по использованию open-source утилиты rustore-cli для настройки CI/CD.
Любой Android-разработчик, работающий с российским рынком, рано или поздно сталкивается с рутиной публикации в RuStore. Если выкладывать обновления раз в месяц — веб-консоль вполне терпима. Но если у вас настроен релизный конвейер и вы хотите исключить "человеческий фактор" (или просто лениво кликать мышкой), нужно решение для командной строки.
Недавно я искал способ автоматизировать этот процесс и наткнулся на open-source решение — rustore CLI. Это неофициальный, но вполне рабочий инструмент на Node.js, который закрывает потребность в автоматической выгрузке билдов.
Ниже — пошаговый гайд, как я настроил публикацию приложения, не заходя в браузер.
Подготовка
Инструмент написан на Node.js, поэтому установка стандартная.
1. Установка:
2. Ключи доступа:
Вам всё-таки придется один раз зайти в RuStore Консоль. В разделе настроек нужно получить keyId и Приватный ключ (в формате base64).
3. APK файл:
Билд должен быть подписан релизным ключом.
Шаг 1: Авторизация в CLI
Вместо того чтобы хардкодить токены в скриптах, утилита предлагает команду логина. Она сохраняет сессию локально.
Чтобы проверить, что токен подхватился корректно:
Шаг 2: Поиск приложения
Для автоматизации нам нужен packageName. Если вы поддерживаете несколько приложений и боитесь перепутать пакеты, можно вывести список всех доступных приложений аккаунта в JSON-формате:
Копируем нужный packageName (например, com.dailyfive.fitness).
Шаг 3: Создание черновика (Draft)
Логика RuStore API требует сначала создать "черновик" версии. Это промежуточное состояние перед загрузкой файла.
Нюанс: Команда возвращает JSON. Нам нужно значение из поля body — это versionId. Сохраните его (или распарсите через jq, если пишете bash-скрипт), оно понадобится на следующем шаге.
Шаг 4: Загрузка APK
Имея на руках versionId, мы можем загрузить сам файл.
Примечание: Если ваше приложение использует Huawei Mobile Services (HMS), нужно добавить флаг --servicesType HMS. Для стандартных Android-сборок этот флаг не нужен (или используйте --servicesType Unknown).
Шаг 5: Отправка на модерацию
Финальный аккорд. Черновик создан, файл привязан, отправляем всё это модераторам.
Здесь --priorityUpdate 5 выставляет высокий приоритет обновления (полезно для хотфиксов).
Возможные проблемы (Troubleshooting)
В процессе настройки я столкнулся с парой моментов, которые стоит иметь в виду:
- Путаница с ID: Часто возникает ошибка Version not found, если по привычке передать ID приложения вместо versionId. Важно использовать именно тот ID, который возвращает команда create-draft.
- Дубликаты черновиков: Если вы создали черновик, но не загрузили файл и попытались создать новый — API выдаст ошибку. Нужно либо использовать старый черновик, либо удалить его вручную.
- Размер файла: Лимит на загрузку — 5 ГБ. Для игр с тяжелыми ассетами это может быть критично.
👉 Репозиторий проекта: GitHub: rustore CLI