Sign inGet Started

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

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

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

  • 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 उन्हें नोटिस के रूप में प्रिंट करता है, ताकि पुल रिक्वेस्ट में दिखे कि क्या जाँचा नहीं गया।

कमांड 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 एनोटेशन के रूप में प्रिंट करती है, ताकि वे पुल रिक्वेस्ट के चेक में दिखें। यह वर्कफ़्लो उन टेम्पलेट की जाँच करता है जिन्हें आपका बिल्ड रेंडर करता है, और यह जाँच हर उस पुल रिक्वेस्ट पर चलती है जो उन्हें बदलती है:

कोड उदाहरण
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 फ़ोर्क से आए पुल रिक्वेस्ट को रिपॉज़िटरी सीक्रेट नहीं देता, इसलिए वर्कफ़्लो उन्हें छोड़ देता है। फ़ोर्क से आए बदलाव को मर्ज करने से पहले जाँचने के लिए वही बदलाव अपनी रिपॉज़िटरी की किसी ब्रांच पर पुश करें। किसी अन्य CI सिस्टम में वही कमांड चलाएँ, और एग्ज़िट कोड शून्य न होने पर जॉब को विफल करें।

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

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

अगले कदम

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

इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।