Показаны сообщения с ярлыком Gitlab. Показать все сообщения
Показаны сообщения с ярлыком Gitlab. Показать все сообщения

четверг, 26 июня 2025 г.

Woorkflow, VsCode, Gitlab, CI, Giga, Makefile

Woorkflow, VsCode, Gitlab, CI, Giga, Makefile

https://giga.chat/link/gcsWxJqDsl

I. ЛОКАЛЬНАЯ РАБОТА (VSCode):

Интеграция инструментов в VSCode поможет тебе получать немедленную обратную связь и

автоматически исправлять ошибки,

делая код чище и качественнее.

Настройка VSCode:

  1. Форматирование с помощью Black:
    • Скачай расширение Python от Microsoft (официальное).
    • В настройках (Ctrl + ,) найди раздел Python > Formatting: Provider и выбери Black.
    • Теперь при сохранении файла (Ctrl+S) или нажатии сочетания клавиш (Shift+Alt+F)
    • код будет автоматически переформатирован.
  2. Автоформатирование на сохранение:
    • Включить автоприменение форматирования при сохранении можно,
    • включив опцию Editor: Format On Save.
  3. Linter (flake8):
    • Тот же самый Python extension поддерживает встроенный линтер Flake8.
    • Настройте его в VSCode, найдя раздел Python > Linting: Engine и выберите Flake8.
    • Сразу увидите предупреждения и ошибки в коде, не покидая редактор.
  4. Type Checking (mypy & pyright):
    • Есть официальные расширения для VSCode для mypy и pyright.
    • Эти расширения предоставляют статическую проверку типов прямо в редакторе,
    • выделяя ошибки и несоответствия.
  5. Импорт Sorter (isort):
    • Isort можно запускать вручную, но для постоянного эффекта можно подключить через форматирование.
    • Через настройки VSCode (Python > Formatting: Additional Arguments)
    • можно задать аргументы для запуска isort совместно с Black.

II. НАСТРОЙКА CI НА GITLAB:

Работа с CI (Continuous Integration) полезна для того, чтобы постоянно следить за качеством кода,

даже когда изменения вносятся несколькими людьми.

Конфигурация .gitlab-ci.yml:

Рассмотрим настройку CI с учётом инструментов, которые ты упомянул.

image: python:3.12-slim-buster

before_script:
  - pip install poetry
  - poetry config virtualenvs.create false
  - poetry install --no-root

stages:
  - lint
  - format
  - type-check

format-code:
  stage: format
  script:
    - poetry run black src/annotation_ci_proj
    - poetry run isort src/annotation_ci_proj

type-check-mypy:
  stage: type-check
  script:
    - poetry run mypy src/annotation_ci_proj

type-check-pyright:
  stage: type-check
  script:
    - poetry run pyright src/annotation_ci_proj

lint-check:
  stage: lint
  script:
    - poetry run flake8 src/annotation_ci_proj

Подробности по каждому шагу:

  1. Stage: format:
    • Запускает Black и isort для переформатирования и очистки импорта.
    • Если найденные изменения значительные, то лучше остановить билд и попросить автора поправить код вручную.
  2. Stage: type-check:
    • Параллельный запуск mypy и pyright для проверки аннотаций типов.
    • Это помогает поймать ошибки раньше и увеличить уверенность в работоспособности кода.
  3. Stage: lint:
    • Запуск Flake8 для обнаружения стилистических ошибок и плохого кода.

III. Автоматика и стратегия работы:

Лучше всего комбинировать оба подхода:

  • Местная разработка (VSCode): быстрое получение обратной связи и автоисправления.
  • GitLab CI: регулярная проверка при каждом коммите или пушинге, гарантирующая высокий уровень качества кода.

IV. Алгоритм дальнейших действий:

  1. Подготовь .gitignore,
  2. чтобы сохранять чистые локальные изменения
  3. (не допускать попадания временных файлов).
  4. Настрой Makefile для локального запуска всех инструментов сразу:
.PHONY: clean lint types help help: @echo "Available commands:" @echo " make clean Remove all generated files" @echo " make lint Run linters on the project" @echo " make types Check type annotations using mypy/pyright" clean: poetry lock --no-update poetry cache clear --all lint: poetry run flake8 src/annotation_ci_proj types: poetry run mypy src/annotation_ci_proj poetry run pyright src/annotation_ci_proj

  1. Запускай локально через Makefile:
make lint
make types

Заключение:

Такое сочетание локальной интеграции в VSCode и постоянной проверки через CI гарантирует,

что твой код будет оставаться качественным, красивым и безопасным для будущих модификаций.

Black, isort, flake8, mypy, pyright, giga, gitlab,ci

Black, isort, flake8, mypy, pyright, giga, gitlab,ci

Процесс работы GitLab CI

Шаг 1: Отправка коммита

Когда ты отправляешь новый коммит в GitLab, GitLab CI автоматически запускает все этапы, описанные в файле .gitlab-ci.yml.

Шаг 2: Начало работы CI

GitLab CI считывает конфигурацию из .gitlab-ci.yml и начинает выполнение заданий последовательно по стадиям (stages).

Что делает GitLab CI:

Stage: before_script

  • Сначала выполняются общие предварительные операции:
    • Устанавливается Poetry.
    • Деактивируется создание виртуальных сред (так как мы работаем в контейнере).
    • Загружаются зависимости проекта через poetry install --no-root.

Stage: format

  • Этот этап отвечает за форматирование и очистку кода:
    • Black применяет форматирование кода.
    • Isort очищает и упорядочивает импорты.

Stage: type-check

  • Здесь осуществляется проверка аннотаций типов:
    • Mypy проверяет корректность аннотаций и сигнализирует о проблемах.
    • Pyright также осуществляет проверку аннотаций, работая параллельно с Mypy.

Stage: lint

  • Завершается процессом линта, проверяющим стиль и качество кода:
    • Flake8 ищет стилистические ошибки и выдает предупреждения.

Какие результаты можно ожидать:

  1. Лог выполнения:
    • Вся активность CI записывается в журнал.
    • Ты можешь посмотреть отчёт о результатах в панели CI/CD на странице проекта в GitLab.
  2. Уведомления об успехе или неудаче:
    • Если все этапы выполнены успешно, ты увидишь зелёный значок успеха возле последнего коммита.
    • Если какая-то проверка завершилась неудачей, напротив соответствующего этапа появится красный индикатор.
  3. Детализация ошибок:
    • Щёлкнув по этапу, ты можешь изучить детализированный лог ошибок или уведомлений,
    • полученных от каждой утилиты (например, Flake8, Mypy, Pyright).

Просмотр отчётов

После выполнения всех проверок CI на GitLab ты можешь увидеть результаты следующим образом:

  1. Зайди в страницу своего проекта в GitLab.
  2. Перейди в раздел CI/CD -> Pipeline.
  3. Среди последних Pipeline'ов найди последний коммит.
  4. Наведи мышью на каждую стадию и щёлкни по ссылке для просмотра журнала.

В журнале ты увидишь точные уведомления о любых нарушениях, возникающих при проверке,

будь то неправильное форматирование,

нарушение стандартов PEP8 или проблемы с аннотациями типов.

Пример отчёта:

Предположим, ты отправил код с неправильными отступами. Тогда в логе ты увидишь что-то подобное:

src/annotation_ci_proj/basic_any.py:4:1: E302 expected 2 blank lines, found 1

Или, если Mypy нашел проблему с типизацией:

src/annotation_ci_proj/some_module.py:10: error: Argument 1 to "some_function" has incompatible type "float"; expected "int"

Заключение:

Процесс GitLab CI выстроен таким образом,

чтобы обеспечивать высокое качество кода и своевременно реагировать на любые отклонения от стандартов и требований.

Благодаря такому подходу ты будешь получать своевременные уведомления о проблемах и сможете оперативно вносить исправления.

среда, 25 июня 2025 г.

Gitlab, CI/CD, Example

D:\VC25\Otus\Py\projects\ci-pipeline-demo
.gitlab-ci.yml
image: python:latest

variables:
  PYTHON_VERSION: "3.10"  # Указываем версию Python

cache:
  paths:
    - venv/  # Будем кешировать виртуальное окружение

stages:
  - setup
  - lint
  - test

before_script:
  - pip install virtualenv
  - virtualenv venv
  - source venv/bin/activate
  - pip install -r requirements.txt

setup_dependencies:
  stage: setup
  script:
    - pip install flake8  # Необходимо добавить установку flake8
    - pip freeze > installed_packages.txt  # Проверим, что все зависимости установлены
  artifacts:
    paths:
      - venv/

lint:
  stage: lint
  script:
    - flake8 src/**/*.py
    - mypy src/**/*.py

test:
  stage: test
  script:
    - pytest tests/
---------------------------------------------------------------------------------------------
D:\VC25\Otus\Py\projects
.gitlab-ci_02.yml
---------------------------------------------------------------------------------------------
image: python:latest

variables:
  PYTHON_VERSION: "3.10"  # Указываем версию Python

cache:
  paths:
    - venv/  # Будем кешировать виртуальное окружение

stages:
  - setup
  - lint
  - test
  - publish  # Добавляем новый этап publish

before_script:
  - pip install virtualenv
  - virtualenv venv
  - source venv/bin/activate
  - pip install -r requirements.txt

setup_dependencies:
  stage: setup
  script:
    - pip freeze > installed_packages.txt  # Проверим, что все зависимости установлены
  artifacts:
    paths:
      - venv/

lint:
  stage: lint
  script:
    - flake8 src/**/*.py
    - mypy src/**/*.py

test:
  stage: test
  script:
    - pytest tests/

pages:
  stage: publish  # Теперь используем этап publish
  script:
    - mkdir public
    - cp index.html public/index.html  # Пример страницы
  artifacts:
    paths:
      - public
  only:
    - main