hub.oscript.io
hub.oscript.io
Войти

openhubОпубликовано доверенным конвейеромпакет

Открытый хаб пакетов OneScript: реестр для opm с каталогом, правами, кэширующим прокси и публикацией из CI

автор: e.ivanovскачиваний: 9репозиторий: github.com/Segate-ekb/openhub

Пакет лежит в основном пуле хаба, а opm знает этот хаб по умолчанию: короткой формы достаточно.

opm install openhub

Скачанный файл ставится командой opm install -f <файл> — сеть для этого уже не нужна.

Описание

OpenHub

Открытый хаб пакетов OneScript. Свой реестр библиотек — с каталогом, правами, кэширующим прокси перед публичным хабом и публикацией из CI. Работает со стоковым opm: ни плагинов, ни патчей клиенту не нужно.

Каталог пакетов OpenHub


Что это

Сервер пакетов для opm, который поднимают у себя: командой или контейнером, на ноутбуке или в кластере. Для команд и компаний, которым нужно:

  • место для своих пакетов — внутренние библиотеки ставятся тем же opm install и видны в каталоге с описанием и версиями;
  • прокси перед публичным хабом — пакет, которого нет у себя, хаб скачивает с hub.oscript.io и оставляет у себя; сборка не зависит от чужой доступности;
  • порядок в доступе — роли на пулах и пакетах, вход через корпоративный SSO, токены с рамками вместо общего пароля;
  • публикация из CI без секрета в репозитории — по короткоживущему id-token, как в PyPI.

Стек: OneScript, ОСень, winow. Из коробки работает на файловой базе и файловом хранилище, без внешних служб.


Быстрый старт

docker run -d --name openhub -p 3333:3333 \
  -v openhub-data:/var/lib/openhub \
  segateekb/openhub

http://localhost:3333 откроет мастер первого запуска: он заводит администратора. На Apple Silicon — с флагами --platform linux/amd64 -e DOTNET_EnableWriteXorExecute=0.

Установка пакетом, файл настроек, первый пул и первая публикация — «Развёртывание».


Возможности

Пулы

Пакеты живут в пуле. Пул — это адрес, видимость, квота, права и, если нужно, внешний источник.

Тип пула Цель для opm Страница пакета Для чего
основной {пакет} /pools/{пул}/packages/{пакет} общий реестр инсталляции, цель opm push по умолчанию
личный {хост}/{логин}/{пакет} /pools/{логин}/packages/{пакет} личное пространство, заводится вместе с учёткой
произвольный {хост}/{пул}/{пакет} /pools/{пул}/packages/{пакет} команда, приватный контур, зеркало чужого хаба

Страницы пула и пакета живут под /pools, поэтому имя пула, логина и пакета с адресами хаба не пересекается. Пул делается приватным, закрывается для публикации без удаления, получает квоту места и права — пользователям и группам.

Пулы в настройках хаба

Кэширующий прокси и зеркала

Пулу задаётся упорядоченный список источников — адресов выдачи чужих хабов. Чего нет у себя, хаб берёт оттуда и оставляет в пуле. Зеркало переносит набор пакетов по расписанию, до первого запроса; в режиме переноса привезённые версии становятся своими — так переезжают с другого хаба. Свои публикации из пула не вытесняются: место уступает только привезённое.

📖 Кэширующий прокси и зеркала

Источники пула

Теги — каналы обновления

Тег помечает набор версий, пакет@тег отдаёт максимальную из них. Каналы stable, prerelease и develop заводит кнопка в настройках пакета или сам пул для новых пакетов. Состав тега набирается руками либо задаётся правилом по версиям.

📖 Теги и каналы обновления

Теги пакета

Вход: пароль, внешний провайдер, токены

Учётка одна, способов входа несколько. Провайдер (GitHub, GitLab, Google или любой OIDC) заводится из интерфейса пресетом, без перезапуска. Группы из IdP раскладываются в группы хаба и сверяются на каждом входе. Парольный вход выключается целиком. opm ходит по токену доступа, выпущенному в кабинете.

📖 Вход через провайдера

Провайдеры входа

Доверенная публикация из CI

Trusted publishing: конвейер не хранит токен хаба, а предъявляет короткоживущий id-token своего провайдера (GitHub Actions, GitLab CI). Хаб проверяет подпись и сверяет репозиторий и реф.

📖 Доверенная публикация

Доверенные конвейеры пакета

Каталог и карточка пакета

Поиск по неточному слову, README пакета как описание, команда установки с кнопкой «копировать», версии тегами и плоским списком, зависимости в обе стороны, счётчик скачиваний. .ospx скачивается файлом со страницы и ставится командой opm install -f <файл>.

Карточка пакета

Эксплуатация

Журнал аудита на каждое изменение, пробы /health и /ready, трассы, метрики и логи OpenTelemetry, вебхуки и подписки на события, HTTP API /api/v1 с описанием OpenAPI.

📖 Эксплуатация · HTTP API

Журнал аудита


Совместимость с opm

Хаб говорит на протоколе выдачи и публикации opm.

Выпущенный opm подключается записью в opm.cfg: готовую запись хаб печатает на странице пакета. Если opm ходит к хабу без настройки клиента, настройка хаба «opm знает этот хаб по умолчанию» снимает эту подсказку с пакетов основного публичного пула.

Адресную форму команд и вход через браузер понимает opm из oscript-library/opm#275:

opm login hub.example.ru/public --browser   # токен через подтверждение в браузере
opm build .
opm push --hub hub.example.ru/public мойпакет-1.0.0.ospx
opm install hub.example.ru/public/мойпакет

Беспрефиксные адреса выдачи и публикации (/download/, /push, /dev-channel/, /pools/{пул}/download/) отвечают наравне с /api/v1: opm.cfg, написанный для обычного хаба, подходит без правок.


Документация

Все статьи — docs/README.md. Чаще всего нужны: развёртывание, настройки, образ Docker, разработка.

Лицензия

MIT.