# Пакеты, обновления и подготовка выпусков

Elang — предварительная версия 0.1 для разработки. Все восемнадцать пакетов индексируются в Packagist как `dev-main` с псевдонимом ветки `0.1.x-dev`. Проверены чистые установки всех девяти пакетов приложений и глобального установщика. Это не означает стабильный выпуск или обязательство долгосрочной поддержки.

Во всех восемнадцати официальных репозиториях настроены активные подписанные push-webhook GitHub для Packagist. Обновления проверены по метаданным Composer после реальных push; учётных данных в URL webhook нет. Если раньше вы добавили собственный источник глобально, удалите прежнюю настройку командой `composer global config --unset repositories.elang` перед обновлением установщика из Packagist.

## Пакеты для установки из терминала

```bash
composer create-project elang/elang app dev-main
composer create-project elang/saas workspace dev-main
```

Дистрибутив включает фреймворк, каркас приложения, установщик, пример доски задач, стартовые проекты аутентификации, блога, панели управления и API, стартовые проекты полного стека React/Next, рабочую область SaaS и необязательный пакет среды выполнения Workerman. Composer может внутри скачивать архивы; пользователи устанавливают всё обычными командами терминала с разрешением зависимостей.

Для необязательной глобальной команды `elang new` установите версию установщика для разработки непосредственно из Packagist:

```bash
composer global require elang/installer:dev-main
elang new my-app --starter=saas
```

Добавьте глобальный каталог исполняемых файлов Composer в PATH, если `elang` не найден. `composer global config bin-dir --absolute` показывает его. Настройка для операционных систем приведена в [установке](/docs/v0.1/installation). Проекты используют обычный файл фиксации Composer; добавляйте его в репозиторий для воспроизводимой установки приложения, а `.env` и файлы vendor и времени выполнения держите вне Git.

## Сборка артефактов дистрибутива

Сопровождающие выполняют:

```bash
php bin/build-packages --output=/absolute/private/build-output --base-url=https://elangphp.com/packages
```

Сборщик подготавливает явные файлы фреймворка и исходного кода и очищенные деревья стартовых проектов, исключает vendor, секреты, базы данных, данные времени выполнения, зависимости интерфейса и каталоги скомпилированных сборок, затем генерирует метаданные Composer с URL архивов, адресуемыми по содержимому. Сохраняйте старые неизменяемые архивы, на которые ссылаются существующие файлы фиксации. Публикуйте новые метаданные только после проверки каждого пакета через новую установку `composer create-project` или `composer require` с подготовленным индексом.

Официальный сайт предоставляет метаданные пакетов и разрешённые имена архивов из закрытого хранилища. Он никогда не открывает рабочую копию исходного кода или `.env`. Отделяйте публикацию пакетов от рабочей копии с незавершёнными изменениями, чтобы пользователи не могли установить непроверенную промежуточную сборку.

## Публикация в Packagist

Packagist размещает один корневой пакет Composer на исходный репозиторий. Поэтому дереву исходников с несколькими пакетами нужны проверенные репозитории дистрибутивов или документированный процесс разделения. Подготовьте очищенные деревья пакетов, проверьте их манифесты Composer, опубликуйте проверенные теги Git, затем отправьте каждый предназначенный для этого репозиторий через авторизованную учётную запись Packagist. После этого настройте webhook GitHub или интеграцию обновлений.

Официальное пространство имён `elang/*` и восемнадцать репозиториев дистрибутивов контролируются сопровождающим проекта. Версии `dev-main` проверены по метаданным Composer и реальным установкам. Новые имена и будущие выпуски по-прежнему требуют явной авторизации сопровождающего. Не помещайте учётные данные в исходники, URL или журналы.

## Публикация через панель администратора

Официальный сайт предоставляет защищённую страницу `/admin/integrations`. Войдите под подтверждённой учётной записью администратора, смените временный пароль, если он есть, и проверьте каждый подготовленный репозиторий и коммит исходного кода перед отправкой. Откройте [профиль Packagist](https://packagist.org/profile/) и скопируйте **основной API-токен** в эту HTTPS-форму, никогда не отправляя его в чат или публичную задачу. При сохранении подтвердите текущий пароль учётной записи. Сервер шифрует подключение в закрытом хранилище, а форма больше не отображает токен.

Каждая кнопка «Отправить пакет» отправляет только указанный официальный репозиторий. Средство публикации отказывается заменять пакет, существующий исходный код которого принадлежит другому репозиторию. Учётные данные передаются в заголовке Authorization, а не в URL. Успешный ответ API означает **отправку на индексирование**; убедитесь, что версия разработки появилась в Packagist, прежде чем менять публичные инструкции установки. После первой отправки настройте автоматические обработчики обновления GitHub в Packagist.

Сопровождающие могут подготовить очищенные деревья исходного кода командой:

```bash
php bin/export-packages --output=/absolute/private/release-trees
```

Packagist разрешает `dev-main` и псевдоним `0.1.x-dev`. Собственный репозиторий `https://elangphp.com/packages` остаётся явно выбираемой альтернативой для снимков `0.1.0-dev`; не смешивайте эту метку с версиями веток Packagist. Экспортированные манифесты Packagist не содержат закрытого репозитория сборки. Токены, данные времени выполнения и ключи приложения не должны попадать в отдельный репозиторий.

## Политика совместимости

Во время разработки `0.x` рассматривайте каждое изменение как потенциально нарушающее совместимость. Срок LTS или поддержки безопасности не объявлен. Стабильный выпуск требует документированного публичного API, руководства по обновлению, матрицы поддерживаемых PHP, баз данных и сред выполнения, постоянного CI, проверки зависимостей и безопасности, воспроизводимых артефактов, репетиций отката и чёткой политики сообщения об уязвимостях.

CI проверяет PHP 8.3/8.4, временные базы SQL, поведение Redis, статический анализ, предупреждения об уязвимостях зависимостей, контракты и сборки интерфейса. Разрешение минимальных и текущих зависимостей следует проверять в изолированных заданиях; запуск только по файлу фиксации не охватывает все разрешённые ограничения Composer. Файлы фиксации интерфейса и требования среды выполнения проверяются отдельно.

## Безопасное обновление приложения

1. Прочитайте версионированную документацию, примечания к выпуску, изменённые схемы и изменения публичного API.
2. Создайте резервные копии SQL, объектного хранилища при необходимости и ключей шифрования; подтвердите восстановление в изолированном окружении.
3. Выполните обновление в ветке, проверьте изменения файлов фиксации Composer/npm и запустите собственные тесты проекта.
4. Отрепетируйте миграции на восстановленной копии; `platform:setup` выполняет добавочную настройку и не заменяет проверенный план миграций развёртывания.
5. Разверните неизменяемый выпуск, перезапустите обработчики очереди и WebSocket и отслеживайте частоту ошибок, задержку очереди и накопление outbox.
6. Сохраняйте выпуск для отката и решение об откате базы данных или исправлении вперёд. Возврат исходного кода не отменяет схему или внешний побочный эффект.

Никогда не меняйте `APP_KEY` при обычном обновлении: от него зависят секреты MFA, закрытая почта разработки, зашифрованные сообщения очереди, подписанные URL файлов и проверка аудита. Планируйте ротацию ключа как отдельную миграцию с явной стратегией восстановления.

## Проверка утверждений доказательствами

При оценке производительности используйте аутентифицированные нагрузки API с базой данных, реалистичные размеры запросов, конкурирующих арендаторов, побочные действия очереди и рассылку в реальном времени. Фиксируйте оборудование, настройки PHP/opcache, версию базы данных, параллелизм, прогрев, длительность, ошибки и распределение задержек. Пустой тест «hello world» не может установить готовность к банковской деятельности или превосходство над любым фреймворком.

Точные проверки, выполненные для выпуска, приведены в разделах [тестирования](/docs/v0.1/testing), [развёртывания](/docs/v0.1/deployment) и отчёте валидации репозитория.
