ما هو Semantic Versioning؟
نظام ترقيم من ثلاثة أرقام: MAJOR.MINOR.PATCH
- MAJOR — تغييرات غير متوافقة مع الإصدارات السابقة
- MINOR — إضافة ميزات جديدة مع بقاء التوافق
- PATCH — إصلاح أخطاء مع بقاء التوافق
مثال
v1.0.0 → v1.0.1 (إصلاح خطأ)
v1.0.1 → v1.1.0 (إضافة ميزة جديدة)
v1.1.0 → v2.0.0 (تغيير جذري)
Git Tags
# إنشاء tag
git tag v1.0.0
# إنشاء tag مع رسالة
git tag -a v1.0.0 -m "الإصدار الأول"
# رفع tag إلى GitHub
git push origin v1.0.0
# رفع جميع tags
git push --tags
أتمتة الإصدارات مع GitHub Actions
name: إنشاء إصدار جديد
on:
push:
tags:
- "v*"
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- run: npm ci && npm run build
- uses: softprops/action-gh-release@v1
with:
generate_release_notes: true
files: |
dist/*.zip
dist/*.tar.gz
أتمتة رفع الإصدار (Bump Version)
jobs:
version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: |
git config user.name "github-actions"
git config user.email "actions@github.com"
npm version patch
git push --follow-tags
⚠️ تجنب الدفع المباشر إلى الفرع الرئيسي من الـ workflow لتجنب حلقات اللانهاية (infinite loops). استخدم حدث
pushمعtagsبدلاً منbranches.
Conventional Commits
نظام لكتابة رسائل الـ commit بشكل منظم:
feat: إضافة نظام تسجيل الدخول
fix: إصلاح خطأ في عرض الصفحة الرئيسية
BREAKING CHANGE: تغيير واجهة API بالكامل
التوافق مع SemVer
feat → MINOR
fix → PATCH
BREAKING → MAJOR
مثال: Conventional Commits + CI
jobs:
lint-commits:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: wagoid/commitlint-github-action@v5
🎯 التالي: البيئات: Dev / Staging / Production