إنشاء نظام الإصدار باستخدام Git وPython
يعد التشغيل الآلي لإصدار ملفات مشروعك أمرًا ضروريًا للحفاظ على سير عمل تطوير منظم وفعال. باستخدام Git وPython، يمكنك إنشاء نظام يقوم بتحديث ملف version.py مع كل التزام. وهذا يضمن أن إصدار مشروعك دقيق دائمًا ويعكس أحدث التغييرات التي تم إجراؤها على قاعدة التعليمات البرمجية الخاصة بك.
في هذا الدليل، سنستكشف طريقة لتحديث ملف version.py تلقائيًا عند كل دفعة إلى مستودع Git الخاص بك. سنناقش تنفيذ البرنامج النصي الذي يلتقط تفاصيل الالتزام، ويزيد رقم الإصدار، ويتكامل بسلاسة مع سير عمل Git الخاص بك.
أتمتة الإصدار في بايثون باستخدام Git Hooks
برنامج بايثون النصي لخطاف الدفع المسبق
#!/usr/bin/env /usr/bin/python
import os
import subprocess
import re
import sys
commit_msg_file = sys.argv[1]
with open(commit_msg_file, 'r') as file:
commit_msg = file.read().strip()
version_file = os.path.abspath('version.py')
hashed_code = subprocess.check_output(['git', 'rev-parse', 'HEAD']).strip().decode('utf-8')
if os.path.exists(version_file):
print(f'Reading previous {version_file}')
with open(version_file, 'r') as f:
content = f.read()
major, minor, patch = map(int, re.search(r'version = "(\d+)\.(\d+)\.(\d+)"', content).groups())
patch += 1
else:
print(f'Creating new {version_file}')
major, minor, patch = 0, 0, 1
print(f'Writing contents of {version_file} with "{commit_msg}"')
with open(version_file, 'w') as f:
f.write(f'''# This file is created by the pre-push script
class Version:
comment = "{commit_msg}"
hash = "{hashed_code}"
version = "{major}.{minor}.{patch}"
if __name__ == "__main__":
print(Version.version)
''')
subprocess.call(['git', 'add', version_file])
إعداد Git Hook لزيادة الإصدار
جيت هوك البرنامج النصي في شل
#!/bin/sh
VERSION_PY="version.py"
# Get the commit message file from the arguments
COMMIT_MSG_FILE=$1
# Extract the commit message
COMMIT_MSG=$(cat $COMMIT_MSG_FILE)
# Get the latest commit hash
GIT_HASH=$(git rev-parse HEAD)
if [ -f "$VERSION_PY" ]; then
VERSION=$(grep -oP '(?<=version = ")(\d+\.\d+\.\d+)' $VERSION_PY)
IFS='.' read -r -a VERSION_PARTS <<< "$VERSION"
VERSION_PARTS[2]=$((VERSION_PARTS[2] + 1))
NEW_VERSION="${VERSION_PARTS[0]}.${VERSION_PARTS[1]}.${VERSION_PARTS[2]}"
else
NEW_VERSION="0.0.1"
fi
echo "# This file is created by the pre-push script" > $VERSION_PY
echo "class Version:" >> $VERSION_PY
echo " comment = \"$COMMIT_MSG\"" >> $VERSION_PY
echo " hash = \"$GIT_HASH\"" >> $VERSION_PY
echo " version = \"$NEW_VERSION\"" >> $VERSION_PY
git add $VERSION_PY
تحسين سير عمل Git باستخدام الإصدار الآلي
إن أتمتة الإصدار ضمن سير عمل Git لا يضمن الاتساق فحسب، بل يعمل أيضًا على تحسين إمكانية التتبع في مشاريع البرامج. من خلال دمج إدارة الإصدار مباشرة في Git Hooks، يمكن للمطورين الحفاظ على عملية سلسة وفعالة. تتمثل إحدى الطرق في استخدام خطاف الدفع المسبق الخاص بـ Git لتحديث ملف الإصدار تلقائيًا مع كل التزام. تتضمن هذه الطريقة التقاط رسائل الالتزام وقيم التجزئة، والتي تعتبر ضرورية لتتبع التغييرات والاحتفاظ بسجل تاريخي لقاعدة التعليمات البرمجية.
الجانب الحاسم الآخر هو القدرة على عكس التغييرات بدقة. باستخدام ملف إصدار محدث، يمكن للمطورين تحديد الحالة الدقيقة للمشروع في أي إصدار معين. وهذا مفيد بشكل خاص في بيئات التكامل والنشر المستمر (CI/CD)، حيث تعد الأتمتة أمرًا أساسيًا. يساعد التأكد من تحديث ملف الإصدار بشكل موثوق مع كل التزام في الحفاظ على مسار نشر قوي، مما يقلل الأخطاء اليدوية ويبسط الإصدارات.
أسئلة شائعة حول التشغيل الآلي للإصدار باستخدام Git وPython
- كيف يمكنني أتمتة عملية الإصدار في مستودع Git الخاص بي؟
- يمكنك أتمتة عملية الإصدار باستخدام خطافات Git، مثل خطاف الدفع المسبق والبرامج النصية لتحديث ملف الإصدار عند كل التزام.
- ما هو خطاف الدفع المسبق؟
- خطاف الدفع المسبق هو خطاف Git الذي يقوم بتشغيل البرامج النصية قبل دفع التغييرات إلى مستودع بعيد. ويمكن استخدامه لأتمتة المهام مثل تحديث ملف الإصدار.
- كيف يمكنني الوصول إلى رسالة الالتزام في البرنامج النصي Git Hook؟
- يمكنك الوصول إلى رسالة الالتزام من خلال قراءة الملف الذي تم تمريره كوسيطة للبرنامج النصي، عادةً باستخدام sys.argv في بايثون أو $1 في البرنامج النصي شل.
- ما الأمر الذي يسترد أحدث تجزئة التزام Git؟
- الامر git rev-parse HEAD يسترد أحدث تجزئة الالتزام في مستودع Git.
- كيف يمكنني زيادة رقم الإصدار في البرنامج النصي؟
- استخدم التعبيرات العادية لاستخراج الإصدار الحالي وزيادة رقم التصحيح وإعادة كتابة ملف الإصدار برقم الإصدار الجديد.
- هل يمكنني استخدام هذه الطريقة مع أدوات التكامل المستمر؟
- نعم، يمكن دمج الإصدار التلقائي باستخدام خطافات Git في مسارات CI/CD لضمان اتساق الإصدار عبر عمليات الإنشاء والنشر.
- ما هي فوائد الإصدار الآلي؟
- يعمل الإصدار التلقائي على تقليل الأخطاء اليدوية، ويضمن تتبعًا متسقًا للإصدار، ويبسط عملية التطوير والنشر.
- كيف أتأكد من تضمين ملف الإصدار في الالتزام التالي؟
- يستخدم git add لعرض ملف الإصدار بعد تحديثه بواسطة البرنامج النصي.
- ماذا يحدث إذا كان ملف الإصدار غير موجود؟
- إذا كان ملف الإصدار غير موجود، فيمكن للبرنامج النصي إنشاؤه برقم إصدار أولي، مثل 0.0.1.
- هل من الممكن استخدام لغات برمجة أخرى لخطافات Git؟
- نعم، يمكنك كتابة نصوص Git Hook النصية بلغات برمجة مختلفة، مثل Python أو Bash أو Perl، اعتمادًا على تفضيلاتك ومتطلبات المشروع.
الأفكار النهائية حول الإصدار الآلي
يعد التحديث التلقائي لملف version.py مع كل عملية دفع لـ Git حلاً عمليًا للحفاظ على التحكم الدقيق في الإصدار في مشاريعك. تستفيد البرامج النصية المقدمة من خطافات Git وPython لأتمتة هذه العملية، مما يضمن تتبع كل التزام برقم إصدار محدث ورسالة التزام وتجزئة. يمكن أن يؤدي تنفيذ هذه الطريقة إلى تحسين سير عملك بشكل كبير، مما يجعله أكثر كفاءة ويقلل من فرص الخطأ البشري. باتباع الإرشادات والأمثلة المقدمة، يمكنك بسهولة دمج الإصدار الآلي في ممارسات التطوير الخاصة بك.