Публікація та релізи

Репозиторій і ID аддона

Розміщуйте аддон у публічному GitHub-репозиторії. Поле id у маніфесті має збігатися з шляхом репозиторію на GitHub:

GitHub-репозиторій id у manifest
https://github.com/MyOrg/my-stream-addon "MyOrg/my-stream-addon"
https://github.com/jane/widget-panel "jane/widget-panel"

Формат: ORG/REPO — організація або користувач GitHub, слеш, назва репозиторію.

id не змінюється між релізами. Він використовується в:

Не змінюйте id після першого публічного релізу, якщо лише не публікуєте новий аддон.

Структура GitHub-релізу

Кожну версію публікуйте як GitHub Release. До релізу мають бути додані файли:

Файл релізу Обов'язковий Опис
main.zip Так Архів зі всіма файлами аддона
manifest.json Так Окрема копія маніфесту (також всередині main.zip)
logo.png або logo.svg Так Іконка з поля icon маніфесту (також всередині main.zip)

Рекомендований вміст main.zip:

main.zip
├── manifest.json
├── index.js              # якщо є worker
├── logo.png              # або logo.svg
├── index.html            # якщо використовується web UI
└── ...                   # інші ресурси

Бекенд каталогу StreamKit+ і перевірка оновлень у застосунку читають manifest.json з assets релізу, щоб визначити опубліковану версію. Поле version має збігатися з тегом релізу (наприклад тег v1.2.0"version": "1.2.0"). Файл у assets має бути ідентичним manifest.json всередині main.zip (обов'язково для синхронізації з каталогом).

Чеклист перед публікацією

  1. id у manifest.json дорівнює ORG/REPO вашого GitHub-репозиторію.
  2. version збігається з тегом GitHub-релізу.
  3. У релізі є main.zip, manifest.json і logo.png / logo.svg.
  4. У main.zip є всі файли, необхідні для роботи аддона (включно з manifest.json і іконкою).
  5. Дозволи в маніфесті відповідають реальній поведінці аддона.
  6. Після публікації релізу запустіть синхронізацію з каталогом (на сайті або через API синхронізації), щоб користувачі отримали нові файли.

Кешування файлів у каталозі

Коли аддон додають до каталогу, сайт завантажує файли релізу (manifest.json, logo.png / logo.svg, main.zip) і кешує їх постійно.

Після модерації та схвалення аддона користувачі завантажують саме ті файли, що були перевірені. Зміна файлів у GitHub-релізі без синхронізації не змінює те, що отримують користувачі. Це зроблено навмисно й захищає від тихої підміни файлів після модерації.

Щоб випустити нову версію, опублікуйте новий GitHub-реліз і запустіть синхронізацію.

Перевірки під час синхронізації з каталогом

Під час додавання або синхронізації аддона каталог перевіряє:

  1. У релізі є manifest.json, logo.png (або logo.svg) і main.zip.
  2. Поле id у manifest.json відповідає репозиторію за тими ж правилами, що в manifest.json: ORG/REPO для сторонніх репозиторіїв або REPO (лише назва репозиторію) для аддонів організації RocketMan-StreamKit.
  3. Файл manifest.json у assets релізу ідентичний manifest.json всередині main.zip.

Якщо перевірка не пройдена, додавання або синхронізацію відхиляють із поясненням.

Автоматична синхронізація версії в каталозі

Використовуйте API синхронізації для розробників, щоб оновлювати каталог після кожного GitHub-релізу без ручного натискання Оновити версію на сайті.

Базовий URL у прикладах: https://rocketman-streams.com. Використовуйте домен сайту, на якому опубліковано ваш аддон.

Токен розробника

  1. Відкрийте сторінку Аддони на сайті.
  2. Натисніть кнопку API key зверху.
  3. Скопіюйте токен розробника з модального вікна.

Токен можна перегенерувати в тому ж вікні (з підтвердженням). Перегенерація одразу анулює старий токен — оновіть його всюди, де він використовується.

Тримайте токен у секреті. Будь-хто, хто має його, може запускати оновлення версій ваших аддонів. Зберігайте його як секрет CI/CD (наприклад GitHub Actions secret ROCKETMAN_ADDON_TOKEN) і не комітьте в репозиторій.

API синхронізації

POST https://rocketman-streams.com/api/extensions/dev/sync
Content-Type: application/json
Параметр Обов'язковий Опис
repo так Репозиторій аддона у форматі OWNER/NAME (як github.repository у GitHub Actions). Має збігатися з аддоном вашої власності в каталозі.
token так Токен розробника з модального вікна API key.

Параметри можна передати також як application/x-www-form-urlencoded або query-параметри URL; рекомендується JSON.

У разі успіху ендпоінт знову читає останній GitHub-реліз, перезавантажує й оновлює кешовані файли та зберігає нову версію й метадані, якщо реліз змінився.

Приклад:

curl -X POST "https://rocketman-streams.com/api/extensions/dev/sync" \
  -H "Content-Type: application/json" \
  -d '{"repo":"OWNER/REPO","token":"YOUR_TOKEN"}'

Успішна відповідь:

{
  "status": true,
  "repo": "OWNER/REPO",
  "updated": true,
  "version": "1.2.3"
}

Помилки (HTTP-статус і поле error):

HTTP error Значення
400 token_required Параметр token не передано.
400 invalid_repo Параметр repo не передано або некоректний.
401 invalid_token Токен не належить жодному розробнику аддонів.
403 not_owner Аддон є в каталозі, але не належить власнику токена.
404 addon_not_found У каталозі немає аддона з таким repo.
429 rate_limited_token Забагато запитів для цього токена. Див. retryAfter (секунди).
429 rate_limited_repo Забагато запитів для цього репозиторію. Див. retryAfter (секунди).
502 sync_failed Не вдалося отримати або розібрати GitHub-реліз (див. message).
500 internal_error Непередбачена помилка сервера.

Ліміти запитів

При перевищенні ліміту у відповіді є поле retryAfter (у секундах).

Приклад GitHub Actions

Workflow запускається при кожній публікації релізу й сповіщає каталог. Збережіть як .github/workflows/rocketman-sync.yml у репозиторії аддона й додайте secret ROCKETMAN_ADDON_TOKEN із токеном розробника.

name: Sync addon to RocketMan catalog

on:
  release:
    types: [published]

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - name: Notify catalog about the new release
        run: |
          curl -sS -X POST "https://rocketman-streams.com/api/extensions/dev/sync" \
            -H "Content-Type: application/json" \
            -d "{\"repo\":\"${{ github.repository }}\",\"token\":\"${{ secrets.ROCKETMAN_ADDON_TOKEN }}\"}"

Пов'язані матеріали