Найти тему
Computer Pro

Запуск простейшего pytest на GitHub, аналог pipeline GitLab

Вот честное слово - зла не хватает. Скиллбокс преподает курс, читают лекции, а код из лекций повторить нельзя, ибо санкции и создать ПОДТВЕРЖДЕННЫЙ аккаунт на Гитлаб - тот еще @@!"№;%:?:*()!!!

С недавних пользуюсь сервисом gitverse от сбера, для хранения своего кода, мало ли что - потом замучаешься пыль глотать, когда закроют доступ пользователям с российскими ip-адресами. Гитлаб уже частично это сделал. Подтверждение аккаунта не работает в нашей стране и с нашими банковскими картами. Но gitverse, платформа молодая и CI/CD там работает через одно место. Я не смог запустить тоже самое что будет в этой статье.

-2

Итак, у нас есть один единственный python-файл и один тест, которые выглядят вот так:

Хотел сейчас зайти в свой аккаунт на GitHub и не смог, там настроена двух факторная аутентификация, я не могу подтвердить свой аккаунт кодом из смс - телефон то рабочий, и домой я его не ношу. Придется создавать новый аккаунт.

Ну вот, не прошло и получаса как я смог восстановить пароль от почты vk и создать аккаунт на гитхаб. Начнем с создания нового репозитория:

-3
-4

Сразу же сгенерил новый ключ командой: ssh-keygen -t rsa -b 4096 -C "for githubkey" -f .ssh/github_vk и вставил его в новый аккаунт. Свежесозданный репозиторий клонировал в Pycharm. Хотя, по идее можно было и прямо в браузере все сделать... Ибо кода тут немного.

Сразу скопировал .gitignore

-5

Ну и поехали, вот код который будет проверяться нашим тестом:

-6

Теперь напишем тест:

-7

После чего установил pytest и проверил как он тестирует функцию сложения:

-8

Все шикарно, всё работает. Теперь нужно это дело завязать на гитхаб, чтобы после того как туда зальются изменения кода они тут же протестировались. Но в реализации домашней работы там надо чтобы тесты и линтеры запускались после merge_request (в гитхабе он кажется обзывается pull_request).

Пишем скрипт, который будет запускать эти тесты уже на гитхабе. Для этого создаем директорию .github, в которой еще одну - workflows в которой нужно создать файл (имя не имеет значения) с расширением yaml или yml

-9

И теперь, по-идее, после коммита, должен запуститься тест и выполниться непосредственно на гитхабе. Коммитим, пушим и смотрим:

Случилась неприятность, чот мой ssh ключ не сработал... и запушить не получилось:

-10

Пересоздал ключ, только уже безвсяких параметров: ssh-keygen -t rsa

Программа перезаписала существующий id_rsa.pub и приватный ключи, после чего публичный ключ прописал в:

-11

После чего весь мой код успешно запушился и оказался на гитхабе:

-12

А что там стестами спросите вы?! А сейчас посмотрю, тыкаем в кнопочку "Actions"

-13

Как видим, что-то пошло не так!

-14

Открываем ошибку и видим - ну конечно!!! Я же забыл про requirements.txt, для выполнения теста тут достаточно только pytest, так и запишу в файл requirements.txt

-15
-16

Файл с зависимостью создан, снова пушим и смотрим что изменилось:

-17

Второй коммит в очереди...

-18

Выполнено!!!

Ну и что происходило "под капотом":

-19

Ну а теперь дело за малым:

  1. Перенесите код задания по FastAPI в новый репозиторий.
  2. Настройте для этого репозитория gitlab-ci c линтерами и тестами.
  3. Исправьте все ошибки от линтеров в коде.
-20

Продолжение, так сказать, следует...