Skip to content

Публикация и Premium

После того как ваша тема собрана и упакована, вы можете поделиться ею со всем миром — бесплатно или как премиум (платную) тему. Эта страница описывает, как её выпустить, как автоматизировать весь процесс и как работает премиум-защита.

Если вы ещё не собрали тему, начните с Сборки и упаковки.

Версионирование

Каждый выпуск вашей темы имеет номер версии (например, 1.0.0). Это позволяет серверам понимать, что доступно обновление.

Если вы используете автоматизацию ниже, вы не повышаете версию вручную. Вместо этого версии определяются из ваших commit-сообщений, которые должны следовать формату Conventional Commits — простому формату, где каждый commit начинается со слова вроде feat: (новая функция), fix: (исправление ошибки) или chore: (обслуживание). Эти слова управляют и номером версии, и генерируемым списком изменений.

Распространение

Темы Pano распространяются через:

  • GitHub Releases — загружаемый .zip, прикреплённый к тегированному выпуску в вашем репозитории.
  • Официальный Pano Marketplace — где владельцы серверов просматривают и устанавливают темы.

Чтобы выпустить вручную на GitHub:

  1. Поставьте тег на ваш commit.
  2. Создайте новый Release.
  3. Загрузите .zip из шага package.

На практике вы почти всегда доверите это автоматизации ниже.

Автоматизация через GitHub Actions

Pano поставляет переиспользуемый workflow, который выполняет весь выпуск за вас: запускает проверки, собирает вашу тему, упаковывает детерминированный .zip и создаёт выпуск на GitHub с прикреплённым файлом. Вы лишь добавляете в репозиторий крошечный «вызывающий» (caller) workflow, который на него указывает.

Создайте .github/workflows/release.yml:

yaml
name: Release

on:
  push:
    branches: [main, dev]

jobs:
  release:
    uses: PanoMC/sdk/.github/workflows/theme-release.yml@dev
    with:
      theme-id: my-theme
    secrets:
      TOKEN_GITHUB: ${{ secrets.GITHUB_TOKEN }}

Это весь файл. Когда вы делаете push, общий workflow:

  1. Запускает sync + check (страховочная сеть из Упаковки).
  2. Собирает вашу тему.
  3. Упаковывает детерминированный .zip.
  4. Создаёт выпуск на GitHub и автоматически прикрепляет этот .zip.

Замените my-theme на значение id вашей темы из manifest.json.

TIP

GITHUB_TOKEN предоставляется GitHub Actions автоматически — создавать его не нужно. Просто передайте его, как показано.

Публикация на официальном Pano Marketplace

Marketplace на panomc.com — это место, где владельцы серверов находят и устанавливают темы прямо из своей панели. Публикация там занимает три шага: создать учётную запись, создать ресурс, затем загружать версии (вручную или автоматически).

1. Создайте учётную запись и ресурс

  1. Зарегистрируйтесь (или войдите) на panomc.com.
  2. Откройте Create Resource.
  3. Выберите тип Theme, выберите категорию, заполните заголовок и описание и загрузите хотя бы один скриншот — скриншоты обязательны для тем, поскольку именно по ним люди оценивают тему с первого взгляда.
  4. Выберите цену: бесплатно или платно, если планируете её продавать (см. раздел про премиум ниже).

Когда ресурс создан, он получает resource ID (длинный уникальный код, UUID). Свои ресурсы и их ID вы найдёте позже под Profile → Resources. Этот ID — то, как инструменты выпуска ссылаются на вашу тему на Marketplace, держите его под рукой.

Два разных ID

id в вашем manifest.json (вроде my-theme) идентифицирует сам пакет темы. Resource ID Marketplace (UUID) идентифицирует страницу в магазине вашей темы на panomc.com. Это разные вещи, и автоматизации выпуска нужен UUID.

2. Загружайте версии — вручную или автоматически

Простой способ: откройте страницу вашего ресурса и загружайте .zip из bun run package как новую версию всякий раз, когда выпускаете.

Лучший способ — автоматизировать это с помощью semantic-release-pano, чтобы каждый push публиковал на GitHub и на Marketplace за один раз:

  1. На panomc.com создайте API-токен под Profile → Security → API tokens и добавьте его в ваш GitHub-репозиторий как секрет с именем PANO_TOKEN (Settings → Secrets → Actions).
  2. Добавьте semantic-release-pano в вашу конфигурацию выпуска (.releaserc.json), указав ваш resource ID:
json
["semantic-release-pano", {
  "resourceId": "YOUR-RESOURCE-UUID",
  "file": "my-theme-${version}.zip",
  "panoVersion": "1.0.0",
  "useGitHubLink": true,
  "repositoryUrl": "https://github.com/YourName/my-theme.git"
}]

С useGitHubLink бесплатные темы не загружаются дважды: Marketplace ссылается на .zip, уже прикреплённый к вашему выпуску на GitHub (поэтому шаг выпуска на GitHub должен выполниться перед этим плагином). Без него плагин загружает файл на Marketplace напрямую — что и нужно для премиум-тем.

Как сделать тему премиум

Премиум-тема — это тема, которую люди покупают на panomc.com и которая защищена так, чтобы работать только на серверах, действительно её купивших.

Чтобы сделать тему премиум, задайте одно поле в manifest.json:

diff
- "premium": false
+ "premium": true

Это единственное изменение в исходниках. Защита подключена за вас.

Что нужно сборке

Премиум-сборке необходимо получить открытый ключ (public key), чтобы привязать лицензию к вашему пакету. Вы предоставляете его переменной окружения во время сборки:

  • PANO_LICENSE_SERVER — сообщает сборке, с какого сервера получить ключ (например, prod). Переиспользуемый workflow уже задаёт её по вашей ветке (branch), поэтому обычно вы её не трогаете.
  • PANO_LICENSE_PUBLIC_KEY — как альтернатива, вы можете хранить сам ключ как CI-секрет. Когда он задан, сборка читает ключ напрямую и не делает сетевых вызовов. Добавьте его в Settings → Secrets → Actions вашего репозитория.

Для бесплатной темы ("premium": false) эти переменные игнорируются — вреда от них нет.

Как работает защита (простыми словами)

  • Когда вы делаете production-сборку, Pano вычисляет SHA-256-отпечаток вашего пакета и привязывает лицензию именно к этому отпечатку.
  • Чтобы использовать вашу премиум-тему, у сервера в панели должна быть подключена учётная запись panomc.com, и эта учётная запись должна была купить вашу тему. Pano проверяет это как при установке темы, так и во время её работы.
  • Если пакет подделан или переупакован, его отпечаток больше не совпадает с лицензированным, и Pano его отклоняет.
  • Во время bun run dev лицензионный барьер отключён, поэтому вы можете свободно разрабатывать вообще без лицензии. Защита применяется только к production-сборкам.

Никакая защита не абсолютна

Будьте честны с собой в том, что эта система может и чего не может: ни одна система лицензирования не защищает код на 100%. Цель здесь — сделать несанкционированное использование как можно более трудным для подавляющего большинства пользователей, а не сделать его невозможным. Как и любое программное обеспечение, любой код, попадающий в руки конечного пользователя, по своей природе открыт: достаточно решительный и умелый человек всегда может его разобрать. Это верно для любой DRM когда-либо созданной, не только для Pano. Устанавливайте цену и поддерживайте вашу тему с учётом этой реальности.

Продвигайте версии через выпуски

Премиум-лицензия выдаётся на версию + пакет. Если вы отредактируете уже выпущенный .zip, его отпечаток изменится, и он больше не будет лицензирован. Всегда отправляйте изменения как новый выпуск через обычный процесс выше — никогда не редактируйте выпущенный .zip вручную.

Что дальше