Git कमिट्स के लिए PHP CS फिक्सर वर्कफ़्लो का स्वचालन

हम सभी PHP कोड स्टाइल फिक्सर का उपयोग करते हैं। हम सभी इसे पसंद करते हैं! लेकिन हम अपने परिवर्तन पुश करने से पहले हर बार "composer fix" बटन क्लिक करना पसंद नहीं करते। मैं वादा करता हूँ, आपको Lefthook यूटिलिटी पसंद आएगी, क्योंकि यह PHP प्रोजेक्ट्स में सबसे सामान्य क्रियाओं में से एक को स्वचालित करती है।

PHP CS fixer visualisation
Уявлення PHP CS Fixer у поєднанні з LeftHook з точки зору ШІ

पहले या बाद में, हर डेवलपर अपने जीवन में स्वचालित कोड सुधार उपकरणों की खुशी का अनुभव करेगा। यह हमें समय बचाता है और कोड की गुणवत्ता में सुधार करता है। हालांकि, समय के साथ, हर डेवलपर ऐसे प्रक्रियाओं को स्वचालित करने की समस्या का सामना करता है। हम मैन्युअल रूप से कोड फिक्सर वर्कफ़्लो को ट्रिगर करना पसंद नहीं करते हैं, जिससे हमारा समय और ध्यान ऐसी बुनियादी चीजों पर व्यर्थ होता है।

मेरा सफर

मैंने विभिन्न उपकरणों का प्रयास किया। सीधे .git/hooks डायरेक्टरी में कमिट्स से लेकर Husky तक। मैं अपने प्रोजेक्ट्स में कोड फिक्सेस के स्वचालन के लिए एक सही समाधान की तलाश में था। ऐसे उद्देश्यों के लिए सबसे लोकप्रिय उपकरणों में से एक है Husky

मैं Husky को क्यों पसंद नहीं करता?

  • जटिल सेटअप। Husky की कॉन्फ़िगरेशन में बहुत सारे चरण शामिल हैं और इसमें आउट-ऑफ-बॉक्स समृद्ध फ़ंक्शंस नहीं हैं जो कॉन्फ़िगरेशन को सरल बनाते हैं।

  • Node.js वातावरण। इतना सरल उपकरण NodeJS स्थापना की मांग करता है। यह स्थापना और उपयोग के दौरान प्रदर्शन में कमी का कारण बनता है।

  • डिपेंडेंसी मैनेजमेंट। Husky को इंस्टॉल करने के लिए आपको NPM/PNPM/Bun पैकेज मैनेजर में से एक की आवश्यकता होती है। इन सभी से आपके डेस्कटॉप पर अनावश्यक चीजें आती हैं और उपकरण सेटअप को अधिक जटिल बनाती हैं।

मुझे अपने लिए एक सही समाधान मिला

GitHub रिपॉजिटरी सूची को स्क्रॉल करते हुए, मैंने Lefthook नामक अंतिम डेवलपर टूल खोजा। तो, मुझे यह क्यों पसंद आया?

  • कंपाइल्ड भाषा का उपयोग

    • उत्कृष्ट प्रदर्शन

    • कोई पैकेज मैनेजर या रनटाइम आवश्यक नहीं

    • किसी भी वातावरण में बिना परेशानी के एकीकृत किया जा सकता है

    • एकल बाइनरी के रूप में वितरित किया जाता है

  • कॉन्फ़िगरेशन फ़ाइलों के लिए YAML सिंटैक्स का उपयोग। YAML अधिकांश प्रोजेक्ट्स में CI वर्कफ़्लो के लिए कॉन्फ़िगरेशन फ़ाइलों के लिए एक प्रसिद्ध मार्कअप है, जैसे GitHub Actions। यह अधिकांश ओपन-सोर्स प्रोजेक्ट्स में उपयोग किया जाता है।

  • अधिकांश सेटअप इन-बिल्ट यूटिलिटीज के साथ कॉन्फ़िगर किया जा सकता है। Lefthook में कॉन्फ़िगरेशन विकल्पों का एक समृद्ध सेट है। स्वचालित कोड फिक्स या कोड लिंट जैसी बुनियादी कार्यों को कॉन्फ़िगर करने के लिए गिट के आंतरिक ज्ञान की आवश्यकता नहीं है।

  • अच्छा मोनोरिपो समर्थन

Lefthook के साथ PHP CS Fixer की कॉन्फ़िगरेशन

इतनी छोटी कार्रवाई के लिए बहुत परिचय। इस लेख को लिखते समय, Lefthook का नवीनतम संस्करण 1.6.4 है। चलिए कदम-दर-कदम आगे बढ़ते हैं।

  • उनके रीडमी में वर्णित अनुसार PHP कोड स्टाइल फिक्सर को इंस्टॉल और कॉन्फ़िगर करें।

  • Lefthook को इंस्टॉलेशन गाइड में सूचीबद्ध किसी भी वांछित तरीके से इंस्टॉल करें। macOS पर, मैं इसे brew पैकेज मैनेजर के माध्यम से करता हूँ: brew install lefthook

  • अपने प्रोजेक्ट के रूट में lefthook.yml नामक एक कॉन्फ़िग फ़ाइल बनाएं। ध्यान दें! यह आपके गिट रिपॉजिटरी के रूट में होना चाहिए, भले ही आप मोनोरिपो का उपयोग कर रहे हों।

  • lefthook.yml फ़ाइल में निम्नलिखित सामग्री डालें।

    pre-commit:
      commands:
        web-cs-fixer:
          tags: style fixer
          glob: "*.php"
          stage_fixed: true
          run: vendor/bin/php-cs-fixer --config=.php-cs-fixer.dist.php --allow-risky=yes fix {staged_files}
    

lefthook install कमांड चलाएं ताकि परिवर्तन लागू हो सकें। ध्यान दें! Lefthook आंतरिक रूप से गिट हुक का उपयोग करता है, इसलिए कॉन्फ़िगरेशन फ़ाइल के किसी भी अपडेट के बाद आपको फिर से lefthook install चलाना चाहिए।

यही सब है। कोडिंग का आनंद लें!

गुणों की व्याख्या

  • {staged_files} टेम्पलेट एक बिल्ट-इन वैरिएबल है जो परिवर्तित फाइलों की सूची प्रदान करता है।

  • glob प्रॉपर्टी का उपयोग उन फाइलों को फ़िल्टर करने के लिए किया जाता है जिन पर आप कमांड चलाना चाहते हैं।

    • *.php का मतलब है कि PHP CS Fixer केवल PHP फाइलों पर चलेगा, अन्य एक्सटेंशनों के साथ टकराव से बचने के लिए।
  • stage_fixed मेरा पसंदीदा हिस्सा है। यह परिवर्तित फाइलों को फिर से गिट में जोड़ने का ख्याल रखता है (आपको git add कमांड चलाने की आवश्यकता नहीं है)।

  • run उस कमांड को शामिल करता है जिसे आप प्रत्येक कमिट से पहले चलाना चाहते हैं।

मोनोरिपो सेटअप

अपने एक प्रोजेक्ट में, मैं डॉकर मोनोरिपो डिज़ाइन का उपयोग करता हूँ। कंटेनरों में से एक PHP Symfony एप्लिकेशन है। ऐसे मामले के लिए एक सरल समाधान है।

मोनोरिपो में PHP CS Fixer चलाने के लिए, कॉन्फ़िगरेशन में root प्रॉपर्टी है। अपने प्रोजेक्ट के रूट में अपनी lefthook.yml को निम्नलिखित कॉन्फ़िगरेशन के साथ अपडेट करें।

pre-commit:
  commands:
    web-cs-fixer:
      tags: style fixer
      root: "path/to/docker_containers/php_web_app/"
      glob: "*.php"
      stage_fixed: true
      run: vendor/bin/php-cs-fixer --config=.php-cs-fixer.dist.php --allow-risky=yes fix {staged_files}

path/to/docker_containers/php_web_app/ को अपने PHP प्रोजेक्ट डायरेक्टरी के पथ से बदलें। ध्यान दें! पथ को एक स्लैश '/' के साथ समाप्त होना चाहिए।