Эта статья является продолжением статьи Настраиваем CI в GitVerse и входит в цикл статей Пишем свою библиотеку с нуля и публикуем её в PyPI (GitVerse)
В прошлой статье настроили CI в GitVerse.
В этой статье мы сначала пакет соберём и руками загрузим его в PyPI GitVerse.
А потом настроим автоматический процесс CI\CD.
Используемые технологии
ОС: Windows 10
Язык: Python 3.14
Подготовка файла .pypirc
Опираемся на официальную документацию
Заходим в домашнюю папку: C:\Users\Пользователь
Создаём файл .pypirc и заполняем данными по аналогии:
Устанавливаем зависимости
Заходим в виртуальное окружение и устанавливаем нужные библиотеки
cd bnkc
venv\Scripts\activate
py -m pip install build
py -m pip install twine
pip freeze > requirements.txt
deactivate
Дополним pyproject.toml
В разделе[project.optional-dependencies] добавим новый блок build
build = [
"build>=1.4.0",
"twine>=6.2.0",
]
Указываем стандартный инструмент для сборки Python-пакетов.
[build-system]
requires = ["setuptools>=80"]
build-backend = "setuptools.build_meta"
Указываем, где искать Python-пакеты для включения в дистрибутив.
[tool.setuptools.packages.find]
where = ["."]
include = ["bnkc*"]
exclude = ["tests*", "venv*", "*.egg-info*"]
Указываем, какие не-Python файлы включить в пакет.
[tool.setuptools.package-data]
"*" = ["py.typed"]
Зачем нужен этот файл, отсылаю к предыдущей статье этого цикла.
Исходники для билда
Собираем проект
py -m build
У вас должна сформироваться папка: \bnkc\dist
Грузим проект в PyPI
py -m twine upload --repository gitverse dist/*
Заходим в пользователя или, как в моем случае, в организации на GitVerse.
В разделе Пакеты должны увидеть свой пакет, который только что мы загрузили.
Заходим в пакет. Нажимаем редактировать.
И выбираем, в каком репозитории отображать пакет:
Теперь наш пакет доступен для импорта:
pip install --index-url https://gitverse.ru/api/packages/pytechnotes/pypi/simple/ bnkc
ПОЗДРАВЛЯЮ вас с пакетом в PyPI на GitVerse!
и продолжим...
Делаем CI\CD
Вариантов, как настроить CI/CD, множество. Тут я сильно мудрить не буду.
Правим файл pyproject.toml
Нам надо либо удалить созданный ранее пакет из GitVerse. Либо имитируем, якобы у нас обновилась версия программы.
В файле pyproject.toml правим версию:
version = "2.0.0"
Можете указать любую версию: 1.0.1, 1.1.0 или, как я, 2.0.0. Это сейчас не имеет смысла.
Получается так: нам надо либо обновить версию, либо удалить ранее созданный пакет с той версией, которую мы будем грузить заново. Т.к. нельзя загрузить пакет с ранее залитой версией.
Добавляем файл .pypirc в проект
Ранее в этой статье мы создавали файл в домашней папке. Копируем этот файл в корень нашего проекта.
Правим файл \bnkc\.pypirc
Заменяем в файле пароль на запись:
password = ${PYPI_GITVERSE_TOKEN}
Вместо PYPI_GITVERSE_TOKEN вы можете выбрать любое другое слово.
Создаём секрет в GitVerse
Опираемся на официальную документацию
Открываем репозиторий — нажимаем «Настройки» — нажимаем «Секреты и переменные» — добавляем секрет.
Добавляем секрет PYPI_GITVERSE_TOKEN и в значении указываем пароль от аккаунта (который указан в оригинальном файле .pypirc)
Создаем новый workflow
В папке \bnkc\.gitverse\workflows\ создаем новый файл publish.yaml (название может быть любым)
Указываем, что публикация будет происходить при двух условиях одновременно:
1) будет задан тег с версией
2) только при загрузке в ветку master
Также указываем переменную с версией Python
И создаем job, в котором устанавливаем python, устанавливаем зависимости из файла pyproject.toml, собираем пакет, добавляем секрет в файл .pypirc и сохраняем файл по адресу ~/.pypirc, и с помощью twine грузим пакет в PyPI.
Правим файл gitverse-ci.yaml
Давайте в файл gitverse-ci.yaml добавим новый job, который будет заранее производить сборку проекта и проверять, а не упадет ли build или twine.
Отправляем изменения в репозиторий
Отправляем данные в удаленный репозиторий
git checkout -b dev
git add .
git commit -m "ci cd"
git tag -a v2.0.0 -m "v2.0.0"
git push -u origin dev --tags
Обратите внимание на новые команды. На этот раз мы добавляем теги к нашему коммиту
Открываем репозиторий в GitVerse — нажимаем на «Ветки».
Нажимаем на пул-реквест.
Оставляем всё как есть. Нажимаем «Создать запрос».
Оставляем всё как есть и нажимаем «Создать коммит на слияние».
Будут созданы два workflow
По итогу в Пакета появится обновленная версия пакета
Конечно, можно было бы лучше написать ci/cd, убрать дубли проверок, но это всё мелочи. Главное — показать принцип, а тонкая настройка у каждого своя на проекте.
На этом всё! Спасибо, что дочитали. :)
Только в README.md поправим, что библиотека устанавливается не как
pip install bnkc
а так
pip install --index-url https://gitverse.ru/api/packages/pytechnotes/pypi/simple/ bnkc
Исходники проекта
Подписывайтесь на Дзен, а также приглашаю в мой телеграмм канал, там публикую другой, но не менее интересный контент.