0%
Git Hooks والأتمتة

Git Hooks والأتمتة

اكتشف كيفية استخدام Git Hooks لأتمتة عمليات التطوير لديك.

I

InSkillCoach

· دقيقة

Git Hooks والأتمتة

اكتشف كيفية استخدام Git Hooks لأتمتة عمليات التطوير لديك.

أساسيات Git Hooks

الإعداد

# Activer les hooks
git config core.hooksPath .git/hooks

# Créer un hook pre-commit
touch .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit

الـ Hooks الشائعة

# pre-commit
#!/bin/sh
# Exécuté avant chaque commit
echo "Vérification du code..."

# post-commit
#!/bin/sh
# Exécuté après chaque commit
echo "Notification envoyée..."

# pre-push
#!/bin/sh
# Exécuté avant chaque push
echo "Tests en cours..."

# post-merge
#!/bin/sh
# Exécuté après chaque merge
echo "Mise à jour des dépendances..."

أمثلة عملية

التحقق من الكود

# pre-commit
#!/bin/sh

# Vérifier le formatage
echo "Vérification du formatage..."
npm run lint

# Exécuter les tests
echo "Exécution des tests..."
npm test

# Vérifier les types
echo "Vérification des types..."
npm run type-check

التحقق من رسائل الـ commit

# commit-msg
#!/bin/sh

# Vérifier le format du message
commit_msg=$(cat "$1")
if ! echo "$commit_msg" | grep -qE "^(feat|fix|docs|style|refactor|test|chore)(\(.+\))?: .+"; then
    echo "Format de message invalide"
    echo "Utilisez: type(scope): description"
    exit 1
fi

النشر التلقائي

# post-push
#!/bin/sh

# Déployer en staging
if [ "$(git rev-parse --abbrev-ref HEAD)" = "develop" ]; then
    echo "Déploiement en staging..."
    npm run deploy:staging
fi

# Déployer en production
if [ "$(git rev-parse --abbrev-ref HEAD)" = "main" ]; then
    echo "Déploiement en production..."
    npm run deploy:prod
fi

Husky لبيئة Node.js

التثبيت

# Installer Husky
npm install husky --save-dev

# Initialiser Husky
npx husky install

# Ajouter un hook
npx husky add .husky/pre-commit "npm test"

الإعداد

// package.json
{
  "scripts": {
    "prepare": "husky install"
  },
  "husky": {
    "hooks": {
      "pre-commit": "npm test",
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
  }
}

Git Hooks مع Python

مثال على Hook

#!/usr/bin/env python3
# pre-commit

import sys
import subprocess

def run_tests():
    try:
        subprocess.run(['pytest'], check=True)
    except subprocess.CalledProcessError:
        print("Les tests ont échoué")
        sys.exit(1)

def check_formatting():
    try:
        subprocess.run(['black', '--check', '.'], check=True)
    except subprocess.CalledProcessError:
        print("Le formatage est incorrect")
        sys.exit(1)

if __name__ == '__main__':
    run_tests()
    check_formatting()

التكامل المستمر

GitHub Actions

# .github/workflows/ci.yml
name: CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Install dependencies
      run: npm install
    - name: Run tests
      run: npm test
    - name: Check formatting
      run: npm run lint

GitLab CI

# .gitlab-ci.yml
stages:
  - test
  - deploy

test:
  stage: test
  script:
    - npm install
    - npm test
    - npm run lint

deploy:
  stage: deploy
  script:
    - npm run deploy
  only:
    - main

أفضل الممارسات

  1. الأمان

    • التحقق من الاعتمادات (dependencies)
    • فحص الكود
    • التحقق من الأسرار (secrets)
    • حماية الفروع
  2. الأداء

    • hooks خفيفة
    • اختبارات سريعة
    • تخزين النتائج مؤقتًا (cache)
    • المعالجة المتوازية
  3. الصيانة

    • توثيق واضح
    • اختبار الـ hooks
    • معالجة الأخطاء
    • سجلات (logs) مفصلة

الخلاصة

النقاط الرئيسية التي يجب تذكّرها:

  • أتمتة العمليات
  • التحقق من الكود
  • النشر التلقائي
  • التكامل المستمر

التوصيات:

  • اختيار الـ hooks المناسبة
  • أتمتة الاختبارات
  • تأمين العمليات
  • اتباع أفضل الممارسات
  • التدرّب على Git وتعميق المعرفة به
InSkillCoach

نبذة عن InSkillCoach

خبير في التدريب والتقنيات

مدرّب متخصص في التقنيات المتقدمة والذكاء الاصطناعي، تدعمه شركة GNeurone Inc.

الشهادات:

  • AWS Certified Solutions Architect – Professional
  • شهادات Google Cloud
  • Microsoft Certified: DevOps Engineer Expert
  • Certified Kubernetes Administrator (CKA)
  • CompTIA Security+
1.4k
148

التعليقات

التعليقات مدعومة عبر GitHub Discussions

سجّل الدخول باستخدام GitHub للمشاركة في النقاش

تم نسخ الرابط!