Недавно, просматривая реестр библиотек и программ, с которым работает известная в кругах программистов на D утилита dub, я заметил, что кто-то выложил в реестр небольшое приложение, которое умеет вставлять файлы в виде массивов байтов внутрь некоторого программного проекта (а об этом в блоге уже писалось, в статье про создание своей валентинки на D).
Меня такая ситуация немного расстроила, так как кто-то меня уже опередил, хотя я уже давно написал нечто похожее, и даже вроде упоминал эту утилитку в одной из статей этого блога…
Но сдаваться и уступать у меня совершенно не было намерений и потому, я решился попробовать опубликовать свою версию утилитки в реестре dub, несмотря на существование аналога. По ходу работы, пришлось столкнуться с рядом некоторых сложностей, но все-таки мне удалось разместить свое приложения и именно в связи с этим, я подумал, а почему бы не рассказать о том, как поместить свой пакет на code.dlang.org и заодно сделать его доступным для быстрого скачивания и сборки практически на любом компьютере.
Сама по себе публикация — это вообще не проблема, хотя может показаться, что некоторые шаги представляют собой нетривиальные действия.
Для того, чтобы разместить свой код в реестре, потребуется наличие аккаунта на GitHub, а также установленной и рабочей утилиты dub.
Первым делом (предполагается, что вы уже знакомы с GitHub и умеете пользоваться утилитой git или аналогичной системой контроля версий) создайте на сайте GitHub репозиторий, имя которого совпадает с именем будущего пакета, а затем выполните из командной строки вашей операционной системы вот такую команду:
dub init <имя пакета>
Команда, как уже вам должно быть известно, создаст каркас проекта и по сути дела сделает все необходимое, для начальной инициализации проекта, подготовив вас к шагу внесения описания в сам состав проекта. Поэтому, следующий шаг, который надо проделать — создание описание пакета, для чего открываете файл dub.json (или, если используете последнюю версию dub, то открываете файл dub.sdl) и правите его, заполняя необходимые сведения об авторе пакета, имени пакета и, возможно, данные о других аспектах.
В моем случае, это был файл dub.sdl, который выглядел так:
name "dinclusion" description "Simple file inclusion in D programs." copyright "Copyright © 2015, aquaratixc" authors "aquaratixc" license "ESL-1.0" targetType "executable"
Как видите, формат описания данных описывается весьма просто и является интуитивно понятным каждому, кто хоть как-то изучал английский язык (хм, я изучал немецкий язык, но меня это не остановило).
Далее, следует подготовить исходный код (написать его и протестировать выполнение), после чего, в какую-нибудь чистую и свежесозданную папку, склонировать созданный вами репозиторий GitHub в эту папку, применив команду:
git clone <адрес вашего репозитория>
В склонированный в папку репозиторий, стоит аккуратно перенести весь созданный dub-проект, удалив из него бинарные файлы приложения или библиотеки, которые получились на шаге тестирования и испытания, после чего убедившись, что все перенесено корректно, выполняете команду:
git status
И в этом случае, мы увидим, какие файлы репозитория подверглись изменениям, после чего фиксируем эти самые изменения командой вот такой командой git:
git add .
Делаем простой коммит в репозиторий (возможно, вас попросят ввести описание сделанных изменений, которые рекомендуем описывать в простой и краткой манере и обязательно на английском. Например, в нашем случае с отправкой всего пакета можно в качестве описания написать что-то наподобие «Adding project files»):
git commit -a
И отправляем эти изменения в текущую ветвь репозитория GitHub выполнив:
git push
А теперь необходимо добавить так называемый тэг, то есть некоторое описание текущей версии пакета, которое составляется исходя из принятой сегодня системы именования версий SemVer (по сути дела, необходимо составить краткое название версии в таком формате: vX.Y.Z; где X.Y.Z — это некоторые цифры, обозначающие порядок версии):
git tag -a <тэг версии>
в моем случае, тег версии выглядел вот так — v1.0.0
А дальше просто отправляем сведение об изменившемся тэге:
git push origin --tags
И на этом, работа с git можно сказать окончена.
Теперь необходимо зарегистрироваться на сайте реестра dub, для чего переходим на сайт и нажимаем надпись Register в верхнем правом углу и вводим свои данные:
После чего, зайдя на сайт под созданной только что учетной записью (кликаем на надпись Login), выбираем пункт из красивой верхней полосы сайта с надписью My Packages, после чего появляется нечто похожее на изображенное на скриншоте:
И тут нас интересует кнопка Register new package, после нажатия на которую появляется вот такая форма для заполнения, в которую в текстовое поле Repository owner вписываем имя аккаунта на GitHub, а в поле Repository name вводим имя проекта.
В моем случае это выглядело так:
На этом работа окончена и ваш пакет уже помещен в реестр, однако, расслабились вы зря, так как я крайне рекомендую дописать файл README.md, лежащий в вашем репозитории GitHub, и внести туда краткое описание и краткую инструкцию по использованию (естественно, не стоит описание и инструкцию писать на русском языке, хотя вы вполне можете, дополнить введенные на английском сведения дублированнным текстом на русском языке).
И, кстати, вот мой первый пакет и теперь вы можете им пользоваться прямо из dub!
P.S: Не советую полагаться на описанное, как на подробную инструкцию. Лучше реально перед опробованием всего вышеописанного прочитайте про git и познакомьтесь с таким сервисом, как GitHub. А еще лучше, попробуйте пройти ряд тренингов по использованию систем контроля версий, например, вот этот.