تشغيل rubocop قبل الـ commit
مقدمة
تُعدّ Git hooks أداة قوية جدًا لأتمتة المهام وفرض معايير كتابة الكود في مستودع Git. ومن أشهر استخداماتها تشغيل الاختبارات الآلية وأدوات تحليل الكود قبل السماح بإتمام الـ commit. نتناول في هذا المقال الـ pre-commit hooks، وكيفية تخطيها، وكيفية إعداد pre-commit hook لتشغيل Rubocop، وهي أداة لتحليل كود Ruby.
ما هي Rubocop؟
Rubocop أداة تحليل ثابت للكود في Ruby تفحص الكود بحثًا عن مشكلات الأسلوب والأمان. وهي أداة شائعة بين مطوّري Ruby لضمان التزام الكود بدليل أسلوب Ruby وأفضل الممارسات. يمكنكم تشغيل Rubocop يدويًا، لكن دمجها مع pre-commit hook يضمن فحص الكود تلقائيًا قبل كل commit.
انسخوا ما يلي إلى .git/hooks/pre-commit (احذفوا .sample)
#!/usr/bin/env ruby
require 'english'
require 'rubocop'
ADDED_OR_MODIFIED = /A|AM|^M/.freeze
changed_files = `git status --porcelain`.split(/\n/).
select { |file_name_with_status|
file_name_with_status =~ ADDED_OR_MODIFIED
}.
map { |file_name_with_status|
file_name_with_status.split(' ')[1]
}.
select { |file_name|
File.extname(file_name) == '.rb'
}.join(' ')
system("rubocop #{changed_files}") unless changed_files.empty?
exit $CHILD_STATUS.exitstatus
اجعلوا الملف قابلًا للتنفيذ
$ chmod +x .git/hooks/pre-commit
أصبحتم جاهزين. من الآن فصاعدًا ستعمل rubocop على تغييراتكم وستمنع الـ commit ما لم تصلحوا المخالفات.
كيف تتخطون الـ pre-commit؟ يكفي أن تمرّروا الخيار -n إلى git commit
$ git commit -n -m "[hotfix] blah blah"
ما هو الـ Pre-Commit Hook؟
الـ pre-commit hook هو Git hook يعمل على جهاز المطوّر قبل إنشاء الـ commit. وهو سكربت يمكنه القيام بمهام متعددة مثل تشغيل الاختبارات الآلية أو فحص أسلوب الكود أو فرض معايير الكتابة. وإذا فشل الـ pre-commit hook يُلغى الـ commit، وعليكم إصلاح المشكلات قبل إعادة المحاولة.
لماذا تشغّلون Rubocop قبل الـ Commit
لتشغيل Rubocop قبل الـ commit مزايا عدة:
- جودة الكود: تفحص Rubocop الكود بحثًا عن مشكلات الأسلوب والأمان، فتبقى قاعدة الكود متسقة وآمنة.
- توفير الوقت: بتشغيل Rubocop تلقائيًا قبل الـ commit تكتشفون المشكلات مبكرًا وتتجنبون إضاعة الوقت في تصحيح الأخطاء لاحقًا.
- التعاون: بفرض معايير الكتابة تعزّز الـ pre-commit hooks التعاون والاتساق بين أعضاء الفريق.
كيفية إعداد pre-commit hook
- ثبّتوا Rubocop وأداة الـ pre-commit hook التي تفضّلونها (مثل Husky أو Pre-commit).
- أنشئوا ملفًا جديدًا باسم pre-commit في المجلد .git/hooks.
- أضيفوا أمر Rubocop إلى ملف pre-commit، مثل rubocop -a.
- اجعلوا ملف pre-commit قابلًا للتنفيذ بتشغيل chmod +x .git/hooks/pre-commit.
- اختبروا الـ pre-commit hook بتشغيل git commit -m “Test commit”
ملاحظة: إذا أردتم تخطي الـ pre-commit hook مؤقتًا، يمكنكم استخدام الخيار --no-verify مع الأمر git commit، مثل git commit -m “Test commit” --no-verify.