Sign inGet Started

CI में ईमेल टेम्प्लेट जाँचें

bird email templates check किसी भी CI सिस्टम से आपके ईमेल टेम्प्लेट जाँचता है और जब कोई बदलाव उन्हें तोड़ता है तो फ़ेल होकर बाहर निकलता है, ताकि समस्या प्राप्तकर्ता से पहले pull request में पकड़ी जाए। यह केवल पढ़ता है: कुछ भी भेजा नहीं जाता और कोई ड्राफ़्ट नहीं बदलता।

शुरू करने से पहले

  • एक पिन किए गए वर्शन के साथ bird CLI इंस्टॉल करें, ताकि कोई नई रिलीज़ आपकी पाइपलाइन को बिना सूचना के कभी न बदले।
  • email_management के लिए रीड एक्सेस वाली एक API की बनाएँ और उसे BIRD_API_KEY के रूप में जॉब को उपलब्ध कराएँ।

एक टेम्प्लेट जाँचें

कोड उदाहरण
bird email templates check welcome-email order-shipped
कमांड हर टेम्प्लेट के ड्राफ़्ट को उसकी हर उपलब्ध भाषा में रेंडर करता है, क्योंकि कोई अनुवाद अकेले भी टूट सकता है, और प्रति टेम्प्लेट व भाषा रिपोर्ट करता है:
  • मेल-क्लाइंट सपोर्ट: वही कम्पैटिबिलिटी निष्कर्ष जो टेम्प्लेट प्रीव्यू दिखाता है, जैसे ऐसी CSS जिसे कोई क्लाइंट हटा देता है या अनदेखा करता है।
  • साइज़: HTML बॉडी की Gmail की लगभग 102 KB क्लिपिंग सीमा से तुलना। Gmail इसके बाद की सारी सामग्री एक लिंक के पीछे छिपा देता है। 90 KB से ऊपर जाँच चेतावनी देती है, क्योंकि मर्ज वैल्यू मैसेज को सीमा पार कर सकती हैं।
  • लिंक और इमेज: लिंक (<a> और <area>), इमेज सोर्स या srcset, background एट्रिब्यूट, या style एट्रिब्यूट या <style> ब्लॉक में CSS url() में हर http और https URL, जहाँ से कमांड चलता है वहाँ से फ़ेच किया जाता है। 404, 410, या 5xx, या कोई ऐसा होस्ट जो मौजूद नहीं है, समस्या है। 401, 403, या 429, या DNS लुकअप का टाइम आउट होना, चेतावनी है, क्योंकि इसका आमतौर पर मतलब है कि रनर को मना कर दिया गया या वह होस्ट तक नहीं पहुँच सका। प्राइवेट या लूपबैक एड्रेस वाले लिंक कभी फ़ेच नहीं किए जाते। बिना आउटबाउंड नेटवर्क एक्सेस वाले रनर पर --skip-links पास करें।
टेम्प्लेट वेरिएबल, कॉन्टैक्ट फ़ील्ड, या अनसब्सक्राइब लिंक से बने लिंक फ़ेच नहीं किए जाते, क्योंकि प्रीव्यू उन्हें प्राप्तकर्ता को मिलने वाली वैल्यू से नहीं भर सकता। रिपोर्ट उन्हें unverified_links के अंतर्गत सूचीबद्ध करती है, जिसमें प्रति-प्राप्तकर्ता भाग {variable} के रूप में दिखाया जाता है, और --annotations github उन्हें नोटिस के रूप में प्रिंट करता है ताकि pull request दिखाए कि क्या जाँचा नहीं गया।
कमांड stdout पर एक JSON रिपोर्ट प्रिंट करता है: पूरे रन के लिए valid, फिर प्रति टेम्प्लेट और भाषा एक एंट्री उसके findings के साथ। हर निष्कर्ष में एक severity, एक area (compatibility, size, या links), एक message, और आमतौर पर एक fix होता है। problem जाँच को फ़ेल करता है; warning रिपोर्ट किया जाता है और कभी फ़ेल नहीं करता।

आपके बिल्ड द्वारा रेंडर की गई फ़ाइल जाँचें

अगर आपका बिल्ड खुद टेम्प्लेट रेंडर करता है, जैसे MJML या React Email से, तो उसके बनाए फ़ाइल की जाँच करें:
कोड उदाहरण
bird email templates check --html dist/welcome.html --template welcome-email --annotations github
फ़ाइल को आपके बताए टेम्प्लेट के विरुद्ध अनसेव्ड कंटेंट के रूप में प्रीव्यू किया जाता है, इसलिए कोई ड्राफ़्ट नहीं बदलता; कोई भी टेम्प्लेट काम करता है। --annotations github के साथ, कम्पैटिबिलिटी निष्कर्ष फ़ाइल की उन लाइनों पर आते हैं जिनसे वे संबंधित हैं, और साइज़ व लिंक निष्कर्ष पूरी फ़ाइल पर एनोटेट किए जाते हैं।

एग्ज़िट कोड

एग्ज़िट कोड वह है जिस पर आपकी CI जॉब ब्रांच करती है:
एग्ज़िट कोडअर्थ
0कोई समस्या नहीं। चेतावनियाँ फिर भी रिपोर्ट की जा सकती हैं।
7जाँच चली और कम से कम एक समस्या मिली। रिपोर्ट हर एक का नाम बताती है।
3आपका बताया टेम्प्लेट इस वर्कस्पेस में मौजूद नहीं है।
4API की गायब है, अमान्य है, या email_management के लिए रीड एक्सेस नहीं है।
6अनुरोध दर सीमित या अस्थायी सर्वर त्रुटि। retry_after देरी के बाद फिर से प्रयास करें।
बिना बदलाव के 7 पर फिर से प्रयास करना उसी तरह फ़ेल होता है, इसलिए केवल 6 पर फिर से प्रयास करना सार्थक है।

GitHub Actions में चलाएँ

--annotations github के साथ, कमांड JSON रिपोर्ट के बजाय GitHub Actions एनोटेशन के रूप में निष्कर्ष प्रिंट करता है, ताकि वे pull request की जाँचों में दिखें। यह वर्कफ़्लो आपके बिल्ड द्वारा रेंडर किए गए टेम्प्लेट को हर उस pull request पर जाँचता है जो उन्हें बदलता है:
कोड उदाहरण
name: Email templates
on:
  pull_request:
    paths: ["emails/**"]
jobs:
  check:
    # Pull requests from forks get no repository secrets, so the check could only exit 4.
    if: ${{ !github.event.pull_request.head.repo.fork }}
    runs-on: ubuntu-latest
    env:
      BIRD_API_KEY: ${{ secrets.BIRD_API_KEY }}
    steps:
      - uses: actions/checkout@v4
      - name: Install the bird CLI
        run: curl -fsSL https://cli.bird.com/install.sh | sh -s -- --version "${{ vars.BIRD_CLI_VERSION }}"
      - name: Build the templates
        run: npm ci && npm run build:emails
      - name: Check the templates
        run: |
          status=0
          for file in dist/emails/*.html; do
            bird email templates check --html "$file" --template welcome-email --annotations github || status=$?
          done
          exit "$status"
BIRD_CLI_VERSION को आपके टेस्ट किए गए रिलीज़ के रिपॉज़िटरी वेरिएबल के रूप में सेट करें, और BIRD_API_KEY सीक्रेट को email_management के लिए रीड एक्सेस वाली की पर सेट करें। GitHub फ़ोर्क से आए pull request को कोई रिपॉज़िटरी सीक्रेट नहीं देता, इसलिए वर्कफ़्लो उन्हें छोड़ देता है। फ़ोर्क से आए बदलाव को मर्ज करने से पहले उसी बदलाव को अपनी रिपॉज़िटरी की किसी ब्रांच में पुश करके जाँचें। किसी भी अन्य CI सिस्टम में, वही कमांड चलाएँ और नॉन-ज़ीरो एग्ज़िट कोड पर जॉब फ़ेल करें।

समस्या निवारण

  • एग्ज़िट 3। टेम्प्लेट उस वर्कस्पेस में नहीं है जिससे API की संबंधित है। bird email templates list से वर्कस्पेस के टेम्प्लेट सूचीबद्ध करें।
  • एग्ज़िट 4। की के पास email_management के लिए रीड एक्सेस नहीं है, या सीक्रेट जॉब तक नहीं पहुँच रहा।
  • हर लिंक चेतावनी के साथ फ़ेल होता है। रनर के पास आउटबाउंड नेटवर्क एक्सेस नहीं है, या फ़ायरवॉल उसे ब्लॉक कर रहा है। वहाँ --skip-links के साथ चलाएँ, और लिंक की जाँच ऐसे रनर से करें जो इंटरनेट तक पहुँच सकता हो।

अगले कदम

  • ईमेल टेम्प्लेट: हर भाषा में टेम्प्लेट लिखें, प्रीव्यू करें और प्रकाशित करें
  • bird email templates check: कमांड के सभी फ़्लैग
  • The bird CLI: पिन किया गया वर्शन इंस्टॉल करें और CI में ऑथेंटिकेट करें

संबंधित संसाधन

इस विषय के लिए डॉक्यूमेंटेशन, गाइड और उदाहरणों के साथ आगे बढ़ें। संसाधन अंग्रेज़ी में हैं।

अभ्यास करें और इम्प्लीमेंटेशन ब्रीफ़ पाएँ