Публикация пакета
Центральный репозиторий пакетов для OCaml называется opam-repository и является GitHub-репозиторием, содержащий файлы манифестов.
Публикация
Чтобы опубликовать ваш проект в opam-репозитории и сделать его общедоступным вам потребуется:
- Во-первых манифест проекта, файл
<название-проекта>.opam
. Самый простой и современный способ его получить — использовать Dune; - Во-вторых GitHub-аккаунт для работы с репозиторием и настроенные SSH-ключи
- sh
$ ssh-keygen -t ed25519 -C "your_email@example.com" $ eval "$(ssh-agent -s)" $ ssh-add ~/.ssh/id_ed25519
- Добавьте содержимое
~/.ssh/id_ed25519.pub
в настройки пользователя
- Ну и Git само собой...
Документация
Рекомендации и возможные ошибки
Чётко указывайте версии зависимостей, в том числе для пакетов-компаньонов вашего проекта. Отнеситесь к этому достаточно дотошно, иначе потратите много времени.
Принцип
Если кратко, то внесение проекта в opam-репозиторий происходит посредством добавления файла манифеста в дерево репозитория. Например, манифест проекта с название xyz
и версией 1.2.3
будет располагаться по пути packages/xyz/xyz.1.2.3/opam
.
У такого манифеста должно быть указано поле url
с информацией откуда достать исходный код проекта:
url {
src: "https://address/of/project.1.0.tar.gz"
checksum: "md5=3ffed1987a040024076c08f4a7af9b21"
}
opam-publish
К счастью, для автоматизации процесса публикации существует специальная утилита opam-publish
, которая является плагином к opam
.
Установка
Рекомендуется установить утилиту в отдельный switch, так как она требовательна к версиям зависимостей и может сделать downgrade многих установленных пакетов.
$ opam switch create publish 5.2.0
$ opam install opam-publish
Для публикации пакета с помощью утилиты необходимо создать тег и сделать его доступным из Интернета. Пример из документации:
$ git tag -a 0.1
$ git push origin 0.1
$ opam publish
После чего утилита попросит ввести GitHub-токен, она сделает форк opam-репозитория и создаст pull-request (PR), где начнется автоматизированное тестирования на сборку платформой ocaml-ci.
Исправление ошибок
$ git tag -f tag
$ git push -f origin tag
Принятие
После того как вы исправите все свои косяки, ваш PR сольют с репозиторием и вы сможете установить пакет обычным opam install
.
Факапы
revdeps
Ошибка при сборки обратных зависимостей.
Пример
Причина
Скорее всего вы сломали API библиотеки, а предыдущие версия в зависимостях имела открытый ограничитель. Например, вы добавляете версию 0.3
вашей библиотеки, где существенно изменили API, а библиотека версии 0.2
имеет зависимость (lib (>= 0.2))
(открытый ограничитель). В результате чего и падает сборка, так как пытается собрать старый пакет с новой версией библиотеки.
Решение
Измените ограничитель прошлых версией библиотек. Пример. Для этого придётся ручками править файлы в репозитории, либо воспользоваться opam admin add-constraint
.
conf-pkg-config.3 failed to build
Пример
Решение
Ждите вмешательство ментейнера, это не ваша ошибка.