178 читања

Ваша прва линија одбране за чист код је унапред посвећена: како га поставити

од стране Alexandre Couedelo8m2025/07/06
Read on Terminal Reader

Предуго; Читати

Pre-commit је алат који аутоматски покреће контролу квалитета кода (као што је форматирање и линтинг) пре него што га компромитујете. користи једноставну конфигурациону датотеку да би ухватио грешке, спречавајући их да икада уђу у базу кода и штедећи вас од неуспелих изградњи цевовода.
featured image - Ваша прва линија одбране за чист код је унапред посвећена: како га поставити
Alexandre Couedelo HackerNoon profile picture

Да ли сте икада случајно гурали тајне у складиште? или можда сте гурали неформатирани код, само да бисте морали да креирате накнадни "линтинг" компромис?Сви смо били тамо.Ове мале грешке могу довести до неуспелих ЦИ / ЦД цевовода и фрустрирајућих кашњења, све због провера које би могле бити покренуте локално.


Git hooks su moćan alat za sprečavanje ovih problema tako što ćete pokrenuti skripte pre nego što preuzmete odgovornost ili pritisnete.


Pre-commit је једноставан за коришћење оквир за управљање и дељење вишејезичних гит хакова, помажући вам да ухватите проблеме пре него што чак и напусте вашу радну станицу.

Početak: Pravo postavljanje

Pre nego što možete da iskoristite moć pre-komitovanja, morate da je instalirate i konfigurišete za svoje projekte.

инсталација

Постоји неколико начина да инсталирате пре-коммит:

  • macOS и Linux:
brew install pre-commit
  • Питон / Пип (преко платформе):
pip install pre-commit
  • Остале методе: За инсталације користећи Цонда или на Виндовсу, молимо погледајте Службену документацију.
Званична документација

Специфично подешавање пројекта (Стандардни начин)

Ово је најчешћи приступ за омогућавање претходног ангажовања у одређеном пројекту:

  1. Create a Configuration File: In the root of your repository, create a file named .pre-commit-config.yaml. This file will define the hooks pre-commit should run. (We’ll cover how to populate this file in the next section).


  2. Install Hooks: Navigate to your repository’s root directory in your terminal and run:

pre-commit install
  1. Ова команда инсталира гит хаоке у .гит/хаокс директоријуму вашег репозиторија. Од сада, пре-коммит ће аутоматски покренути своје провере пре сваког коммиса који направите у овом одређеном репозиторијуму.

Глобално подешавање (метод "Подесите га и заборавите га")

Ако често покрећете нове пројекте или клонирате репозиторије и желите да пре-задатак буде активан подразумевано (ако постоји конфигурација), можете га поставити глобално.init.templateDirФункција је


  1. A Configuration File: All your repository must have a .pre-commit-config.yaml. This file will define the hooks that pre-commit should run. The best would be to use a template repository with a minimal pre-commit file.


  2. Configure Git’s Template Directory: Tell Git to use a specific directory as a template for new repositories:

git config --global init.templateDir ~/.git-template

(Можете да изаберете другачији директоријум ако желите, само се уверите да је конзистентан у следећем кораку.)


Инициализирајте Пре-коммит у директоријуму шаблона: Покрените следећу команду:

pre-commit init-templatedir ~/.git-template

(Ако сте изабрали другачији директоријум у претходном кораку, замените~/.git-templateU skladu sa tim.)


Ово има велику предност: Са овим глобалним подешавањем, било који нови репозиториј који иницијализујете (git init) или ће клон аутоматски имати инсталиран прикључак за пре-комитет..pre-commit-config.yamlдатотеке, пре-задатак једноставно неће учинити ништа, тако да је сигурно омогућити глобално.


Ипак, волим да идем још један корак додавањем подразумеваног кука~/.git-template/hooks/pre-commitsistematski ne bi uspelo ako repozitorijum ne bi imao.pre-commit-config.yamlЕво садржаја хоука.

#!/usr/bin/env bash
if [ -f .pre-commit-config.yaml ]; then
    echo 'pre-commit configuration detected, but `pre-commit install` was never run' 1>&2
    exit 1
fi

Изградња ваше конфигурације (.pre-commit-config.yaml)

Srce predkomiteja je.pre-commit-config.yamlОва датотека, постављена на корен вашег репозиторија, говори пре-коммит који проверава да се покрене.

# https://github.com/xNok/infra-bootstrap-tools/blob/main/.pre-commit-config.yaml
repos:
  # Lint all yam files
  - repo: https://github.com/adrienverge/yamllint.git
    rev: v1.29.0
    hooks:
      - id: yamllint
  # Runs Ansible lint
  - repo: https://github.com/ansible/ansible-lint
    rev: v24.7.0
    hooks:
      - id: ansible-lint
        args:
          - "ansible"
        additional_dependencies:
          - ansible

Основна структура објашњена

Типична конфигурација укључује листу репозиторија, од којих свака има одређене хакове:

  • Репо: Ово је кључ на највишем нивоу који узима листу мапирања репозиторија. Свака ставка на листи одређује Гит репозиторијум који садржи пре-коммит хакове.


  • Репо: УРЛ репозиторијума који хостује хакове (нпр. https://github.com/pre-commit/pre-commit-hooks). Ово је веома леп начин за управљање зависностима. Када знате више о алату, можете ићи у репозиторијум.


  • рев: Она одређује верзију прикључака које треба користити, пинтинг на или Гит таг, СХА, или грана. али препоручује се да увек користите одређену ознаку или СХА (не грана попут мајстора) како бисте осигурали да ваш линтинг не неочекивано прекине када даљински репозиторијум ажурира.


  • куки: Листа испод сваког репо уноса.Свака ставка овде дефинише одређени кук за употребу из тог репозиторија.


  • id: Јединствени идентификатор кука (нпр. trailing-whitespace, check-yaml). Можете пронаћи доступне идентификаторе кука у документацији за складиштење кука. или једноставно .pre-commit-hooks.yaml на корену репо-а.

Практична почетна конфигурација

Ево једног основног.pre-commit-config.yamlZa ovaj primer, savetujem vam da idete na GitHub i pogledatepre-commit/pre-commit-hooks/blob/main/.pre-commit-hooks.yamlОво је листа једноставних хауса којеpre-commitТим је имплементирао, и где можете наћиidод сваког од релевантних хаоса које можда желите користити.

pre-commit/pre-commit-hooks/blob/main/.pre-commit-hooks.yaml


Rekao bihtrailing-whitespaceиend-of-file-fixerзаиста корисни, тако да ће конфигурација изгледати овако.

repos:
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.6.0  # Check for the latest stable version on the pre-commit-hooks repo!
    hooks:
    -   id: trailing-whitespace
    -   id: end-of-file-fixer
# Add other repositories and their specific hooks below
# -   repo: ...
#     rev: ...
#     hooks:
#     -   id: ...

Напомена: Верзије за куке се мењају током времена. Добро је повремено провераватиpre-commit-hooksрепозиторијум (или било који други репозиторијум за причвршћивање који користите) за најновију ознаку стабилне верзије иrevИли имати аутоматизацију на месту, као што је Реновате или Депендабот, да бисте их редовно ажурирали.


Можете наћи велику листу претходно постојећих хакова наPre-commit сајтПо мом искуству, ова листа је далеко од исцрпне; уместо тога, више волим да проверим алате које волим да користим.pre-commit-hooks.yamlПогледајте да ли су хокеји доступни.

Pre-commit сајт

Добро је знати када користити пре-коммит

Jednom kada ste udobni sa osnovama, pre-komit nudi naprednije funkcije za fino podešavanje vašeg toka posla.

Ручно покретање хокеја

Док хоокс ради аутоматски наgit commit, можда ћете желети да их покренете ручно у другим временима:

  • Покрените одређени кук: Да бисте извршили један кук (нпр. да бисте тестирали његову конфигурацију или применили његове промене без обавеза), користите:
pre-commit run <hook_id>


Замена<hook_id>са стварним ИД-ом из ваше конфигурационе датотеке.)

  • Покрените све датотеке: Да бисте покренули све конфигурисане хакове преко сваке праћене датотеке у вашем репозиторијуму (не само фазиране промене), користите:
pre-commit run --all-files


Ово је корисно за почетно чишћење или приликом додавања нових кукова у постојећи пројекат.

Креирање сопствених локалних кукова

Ponekad možete da koristite skripte ili kontrole specifične za projekat koji nisu deo javnog skladišta konice. Pre-commit vam omogućava da definišete „lokalne“ konice.

  1. Напишите свој скрипт: Креирајте свој скрипт (нпр. скрипт за шкољку, Питон скрипт) у свом репозиторијуму. За овај пример, рецимо да сте креирали my_custom_script.sh.
  2. Дефинишите у .pre-commit-config.yaml: Додајте локални улаз за прикључак у вашу конфигурацију:
# .pre-commit-config.yaml
-   repo: local
    hooks:
    -   id: my-custom-check
        name: My custom check
        entry: ./my_custom_script.sh # Path to your script
        language: script             # Or python, node, etc.
        files: \.(py)$               # Example: regex to run only on Python files
        # verbose: true              # Uncomment for more output
        # args: [--custom-arg]       # Optional arguments for your script

Ovo govori pre-komit da trčimy_custom_script.shза све промене у Питону (.pyдатотеке, то јеlanguage: scriptТип је веома флексибилан; за специфична окружења као што су Пајтон или Ноде, можете одредити оне за управљање зависностима ако је потребно.bashHooks je.


Ipak, pre-komit je veoma pametan kada je u pitanju radno okruženje, jer stvara izolovano okruženje za radno vreme za alate i potrebne zavisnosti.


Нису сви кукови, нажалост, искористили функцију зависности, а можда ћете морати сами да инсталирате алате како бисте могли да покренете куку (мислим на терраформ, на пример)

Претходно посвећеност у тиму и ЦИ / ЦД окружењу

Док пре-коммит сјаји на појединачним програмерским машинама, његове предности се множе када се интегришу у тимске радне токове и ЦИ / ЦД цеви. Чак и са локално инсталираним пре-коммит куковима, неко може случајно да се ангажује без кукова (нпр.git commit --no-verify) или имају застарелу конфигурацију кука. Ваш ЦИ / ЦД цевовод може да делује као крајњи врата.


Vođenjem kontrola pre preuzimanja obaveza u vašem CI kanalu, osiguravate da se kod koji krši standarde vašeg projekta ne spaja.

pre-commit run --all-files


Ова команда проверава све датотеке у репозиторијуму, а не само оне које су промењене, осигуравајући свеобухватну валидацију.


Концептуални корак ЦИ цевовода (нпр. ГитХуб акције):

# Example for a GitHub Actions workflow
# ... (other steps like checkout, setup python/node, etc.)
- name: Install pre-commit and dependencies
  run: |
    pip install pre-commit
    # Install any other dependencies your hooks might need (e.g., linters)
    # This might be minimal if your hooks install their own dependencies (common).
- name: Run pre-commit checks
  run: pre-commit run --all-files


Лепо је имати концептуални цевовод који ради са било којим ЦИ системом, али ако користите ГитХуб акције, не морате се бринути; користитеЗванична акција.

jobs:
  pre-commit:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: actions/setup-python@v3
    - uses: pre-commit/action@v3.0.1


Са интеграцијом ЦИ, петља је завршена, а иста валидација се примењује у окружењу програмера као у окружењу ЦИ.

Закључак

Остваривање тамоimaда буде бољи начин од ручних провера и "оопс" обавеза, истражили смо како јеpre-commitTransformirajte svoj razvojni tok posla.


Аутоматизацијом провера за све од грешака белог простора и тајног откривања до форматирања кода и линтинг-а, пре-коммит делује као ваш неуморни локални чувар квалитета кода који се чак може "бесмислено" интегрисати у ЦИ / ЦД цеви како би служио као коначна врата квалитета.

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks