Giter Site home page Giter Site logo

github_for_goto's Introduction

Учимся командной работе в GitHub.

В репозитории лежит тестовый проект для изменений.

  • Починить ошибки, сделать код запускаемым
  • Добавить класс Like, использовать его в main
  • Добавить типы
  • Добавить комментарии
  • Исправить все ошибки flake8 и mypy

Задачи

  1. Прочитать весь README.md (этот большой текст) до конца.
  2. Кто-то из группы форкает этот репозиторий и делится со всеми в группе.
  3. Каждый участник берёт себе по задаче и создаёт отдельную ветку.
  4. После решения задачи в своей ветке, участники делают Pull Request в главную ветку (main).
  5. Участники проверяют реквесты друг друга, и, если всё хорошо, то подтверждают пулл реквест. 4.1. Если что-то не так, то оставляют комментарий и требуют доработки.

Теория

GitHub flow, или как использовать GitHub в команде

Если просто всем скачать ветку main и пушить сразу в неё все изменения без каких либо проверок, то:

  1. Код рано или поздно сломается из-за упущенной баги.
  2. Кодобаза начнёт загрязняться, так как стиль добавляемого кода никем не проверяется.

Чтобы избежать этого, многие команды используют т.н. GitHub flow - особый процесс работы с GitHub репозиторием, который обеспечивает больше уровней проверки кода и позволяет поддерживать более высокое качество кодобазы.

Процесс

  1. При появлении желания внести в код какое-то изменение (например, исправление бага или новая фича), создаётся новая ветка (с наглядным названием, вроде feature-add-new-userclass или fix-connetion-lag), и человек начинает работать в ней.
  2. После внесения всех изменений, человек пушит свои изменение на GitHub (всё ещё в свою ветку), а затем создаёт Pull Request в основную ветку.

Pull Request (пулл реквест) - запрос на внесение изменений из другой ветки. Чтобы внести изменения, один из разработчиков должен проверить код и подтвердить что всё хорошо. В ином случае, можно оставить комментарий с указаниями проблем прямо в коде.

  1. Pull Request проверяется другими разработчиками, они оставляют замечания и просят исправить код.
  2. Разработчки исправляет указанные замечания, коммитит и пушит в свою ветку. Коммит автоматически присоединяется к Pull Request.
  3. После финальной проверки, Pull Request подтверждают и начинается процесс внесения изменений (merge).
  4. Если новый и старый код расходятся в чём-то кроме внесённых разработчиком изменений, то нужно вручную выбрать правильную версию. Если такого нет - то всё произойдёт автоматически.
  5. Остаётся только удалить ветку в которой происходила разработка.

Поддержка кода

В командной разработке очень важно поддерживать читаемый и чистый код, чтобы любой мог быстро разобраться, что в нём происходит.

Как этого добиться?

  • Хорошая структура кода, например SOLID.

  • Хороший кодстайл (PEP8, Google Style Guide).

  • Комментарии к коду

  • requirements.txt - файл с версиями библиотек, которые используются в коде.

  • Типизация

Как себе помочь?

  • Использовать виртуальное окружение (для воспроизводимости кода).
python -m venv .venv
source .venv/bin/activate
  • Использовать pipreqs для наполнения requirements.txt. Альтернатива - poetry

  • Генерировать шаблоны для комментариев с помощью IDE (плагин для VS Code)

  • Использовать линтеры (программы, которые проходятся по всему коды и находят плохие и вредные практики). Например, flake8 + плагины.

    pip install flake8
    flake8 ./mycode.py 
  • Использовать type checker (проверщик типов, помогает находить баги в коде) - mypy.

    pip install mypy
    mypy ./mycode.py 
  • Использовать форматировщики кода (black). Как использовать - см. ниже.

    pip install black
    black ./mycode.py 
  • pre-commit хуки (позволяют при каждом коммите/пуше автоматически производить операции над кодом, например, применять к нему последовательно black, flake8 и mypy). Список хуков.

    pip install pre-commit
    pre-commit install
    pre-commit run --all-files
  • GitHub Actions (позволяет автоматизировать любые действия при заливке кода на гитхаб (линтинг, форматтирование, тестирование, сборка, ...).

  • GitHub Copilot (пишет код за тебя по текстовому описанию) [требует перепроверки!].

Гайды

Pre-commit

Для включения pre-commit, нужно добавить в корневую папку файл .pre-commit-config.yaml. Он описывает, какие действия нужно производить над кодом при коммите. Пример начинки файла:

repos:
   # форматирует код
-   repo: https://github.com/psf/black
   rev: 22.10.0
   hooks:
   - id: black
     args: ["-S"]
     types: [python]


   # удаляет лишние импорты
-   repo: https://github.com/PyCQA/autoflake
   rev: v2.0.0
   hooks:
   -   id: autoflake
       types: [python]
       
   # сортирует импорты
-   repo: https://github.com/pycqa/isort
   rev: 5.10.1
   hooks:
     - id: isort
       args: ["--profile", "black"]
       types: [python]

   # дополнительные проверки и исправления
-   repo: https://github.com/pre-commit/pre-commit-hooks
   rev: v4.3.0
   hooks:
   - id: check-added-large-files
   - id: detect-private-key
   - id: double-quote-string-fixer
   - id: end-of-file-fixer

   # линтер
-   repo: https://gitlab.com/pycqa/flake8
   rev: 5.0.0
   hooks:
     - id: flake8
       additional_dependencies: ["flake8-bugbear==22.9.23","flake8-bandit==4.1.1"]
       types: [python]

   # проверяет ошибки типизации
-   repo: local
   hooks:
     - id: mypy
       name: mypy
       entry: mypy
       language: system
       types: [python]

После этого можно выполнить pre-commit install чтобы установить эти хуки. Затем, можно запустить их ко всем файлам репозитория с помощью команды pre-commit run --all-files

GitHub Actions

Чтобы использовать GitHub Actions для дополнительной проверки кода, нужно создать в корне репозитория папки и файл .github/workflows/<имя файла>.yaml. Пример начинки такого файла (применяет к коду flake8 и mypy):

name: Проверка
on: [push]
jobs:
 linter:
   name: Линтер
   runs-on: ubuntu-latest
   steps:
   - uses: actions/checkout@v3
   - name: Установка Python
     uses: actions/setup-python@v4
     with:
       python-version: '3.10'
   - name: Установка зависимостей
     run: |
       python -m pip install --upgrade pip
       pip install -r requirements.txt
       pip install mypy==0.991 flake8==6.0.0
   - name: Flake8
     run: flake8 $(git ls-files '*.py')
   - name: MyPy
     run: mypy $(git ls-files '*.py')

После этого, при пуше изменений на гитхаб, возле иконки коммита будет загораться красный или зелёный огонёк, в зависимости от того, прошёл ли код все проверки.

github_for_goto's People

Contributors

barahlush avatar

Watchers

 avatar

Forkers

met1moffey

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.