Найти в Дзене

[Python] Настраиваем CI в GitVerse

Эта статья является продолжением статьи Добавляем линтеры и тесты в проект и входит в цикл статей Пишем свою библиотеку с нуля и публикуем её в PyPI (GitVerse) В прошлой статье прогоняли код через тесты и линтеры. В этой статье мы автоматизируем проверки тестов и линтеров. В самом начале, когда мы создавали репозиторий, мы указали, что должен создаться файл gitverse-ci.yaml, наконец мы добрались до правок в этом файле. Если вы пушили в гит изменения, которые мы делали в в рамках предыдущих статей, то вы можете у себя в GitVerse увидеть примерно такую картину: Файл gitverse-ci.yaml работал всё это время и флудил в разделе CI/CD. Все эти запуски не нужны, поэтому, если есть желание, их можно удалить. Теперь давайте откроем файл \bnkc\.gitverse\workflows\gitverse-ci.yaml, удалим всё, что там есть, и заполним его заново. Указываем триггеры запуска для веток master и dev: + Ручной запуск (т.е. workflow_dispatch) И указываем версию Python для всего workflow. PYTHON_VERSION: '3.14' Далее со
Оглавление

Эта статья является продолжением статьи Добавляем линтеры и тесты в проект и входит в цикл статей Пишем свою библиотеку с нуля и публикуем её в PyPI (GitVerse)

В прошлой статье прогоняли код через тесты и линтеры.

В этой статье мы автоматизируем проверки тестов и линтеров.

Правим gitverse-ci.yaml

В самом начале, когда мы создавали репозиторий, мы указали, что должен создаться файл gitverse-ci.yaml, наконец мы добрались до правок в этом файле.

Если вы пушили в гит изменения, которые мы делали в в рамках предыдущих статей, то вы можете у себя в GitVerse увидеть примерно такую картину:

-2

Файл gitverse-ci.yaml работал всё это время и флудил в разделе CI/CD.

Все эти запуски не нужны, поэтому, если есть желание, их можно удалить.

Теперь давайте откроем файл \bnkc\.gitverse\workflows\gitverse-ci.yaml, удалим всё, что там есть, и заполним его заново.

-3

Указываем триггеры запуска для веток master и dev:

  • Запуск при Push
  • Запуск при Pull request

+ Ручной запуск (т.е. workflow_dispatch)

И указываем версию Python для всего workflow.

PYTHON_VERSION: '3.14'

Далее создаем первый джоб.

-4

Называем его test-with-coverage (можно любое название придумать)

Проверку будем делать на Ubuntu

runs-on: ubuntu-latest

Клонируем репозиторий в runner. Без этого шага нечего будет тестировать.

uses: actions/checkout@v4

Устанавливаем Python и, что важно, кэшируем pip-пакеты, что ускоряет последующие запуски в пару раз.

cache: 'pip'

Устанавливаем зависимости для теста из блока [project.optional-dependencies] в файле pyproject.toml

pip install ".[test]"

Запуск тестов pytest. Все настройки для тестов также подтягиваются из файла pyproject.toml

python -m pytest

Запуск тестов с покрытием

python -m pytest --cov=bnkc --cov-report=term-missing --cov-fail-under=65

Указываю --cov-fail-under=65, чтоб не было ошибки, т. к., напоминаю, покрытие у нас низкое, был бы реальный проект, надо было устанавливать на 80 или 90.

Далее создаем второй джоб (внутри блока jobs. На одном уровне с test-with-coverage).

-5

Называем его lint-and-type-check

По аналогии с предыдущим job: клонируем файлы, устанавливаем python, устанавливаем зависимости, но на этот раз из блока dev.

И запускаем проверку mypy

python -m mypy --install-types --non-interactive

Для mypy устанавливаем дополнительные проверки (они в текущей реализации не нужны, но с развитием проекта могут пригодиться)

--install-types — автоматически устанавливает stub-пакеты

--non-interactive — не спрашивает подтверждений (важно для CI)

Запускаем проверки black и isort

python -m black --check .
python -m isort --check-only .

Обе проверки мы запускаем с доп флагами, которые только проверяют файлы, но не форматируют. В CI мы не изменяем код, только проверяем.

Запускаем проверки pylint и vulture
python -m pylint bnkc/
python -m vulture bnkc/

Все настройки для проверок линтеров берутся из файла pyproject.toml, который мы заполняли в прошлой статье.

Сохраняем проект в репозитории

Отправляем данные в удаленный репозиторий

git add .
git commit -m "настройка ci"
git push -u origin dev

Если зайдем в GitVerse, то увидим как выполняются/выполнились проверки, которые мы делали в этой статье.

-6

В следующей статье мы загрузим библиотеку в PyPI в GitVerse и реализуем CI\CD.

Исходники проекта

- f09bebef73c09f0b0296adfd758999555357f4bb - pytechnotes/bnkc - Gitverse

Подписывайтесь на Дзен, а также приглашаю в мой телеграмм канал, там публикую другой, но не менее интересный контент.