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

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

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

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

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

```bash
bird email templates check welcome-email order-shipped
```

कमांड हर टेम्प्लेट के ड्राफ़्ट को उसकी हर उपलब्ध भाषा में रेंडर करता है, क्योंकि कोई अनुवाद अकेले भी टूट सकता है, और प्रति टेम्प्लेट व भाषा रिपोर्ट करता है:

- **मेल-क्लाइंट सपोर्ट**: वही कम्पैटिबिलिटी निष्कर्ष जो [टेम्प्लेट प्रीव्यू](/docs/guides/email/templates) दिखाता है, जैसे ऐसी 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 से, तो उसके बनाए फ़ाइल की जाँच करें:

```bash
bird email templates check --html dist/welcome.html --template welcome-email --annotations github
```

फ़ाइल को आपके बताए टेम्प्लेट के विरुद्ध अनसेव्ड कंटेंट के रूप में प्रीव्यू किया जाता है, इसलिए कोई ड्राफ़्ट नहीं बदलता; कोई भी टेम्प्लेट काम करता है। `--annotations github` के साथ, कम्पैटिबिलिटी निष्कर्ष फ़ाइल की उन लाइनों पर आते हैं जिनसे वे संबंधित हैं, और साइज़ व लिंक निष्कर्ष पूरी फ़ाइल पर एनोटेट किए जाते हैं।

## एग्ज़िट कोड

एग्ज़िट कोड वह है जिस पर आपकी CI जॉब ब्रांच करती है:

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

बिना बदलाव के `7` पर फिर से प्रयास करना उसी तरह फ़ेल होता है, इसलिए केवल `6` पर फिर से प्रयास करना सार्थक है।

## GitHub Actions में चलाएँ

`--annotations github` के साथ, कमांड JSON रिपोर्ट के बजाय GitHub Actions एनोटेशन के रूप में निष्कर्ष प्रिंट करता है, ताकि वे pull request की जाँचों में दिखें। यह वर्कफ़्लो आपके बिल्ड द्वारा रेंडर किए गए टेम्प्लेट को हर उस pull request पर जाँचता है जो उन्हें बदलता है:

```yaml
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` के साथ चलाएँ, और लिंक की जाँच ऐसे रनर से करें जो इंटरनेट तक पहुँच सकता हो।

## अगले कदम

- [ईमेल टेम्प्लेट](/docs/guides/email/templates): हर भाषा में टेम्प्लेट लिखें, प्रीव्यू करें और प्रकाशित करें
- [`bird email templates check`](/docs/cli/reference/email-templates-check): कमांड के सभी फ़्लैग
- [The `bird` CLI](/docs/cli): पिन किया गया वर्शन इंस्टॉल करें और CI में ऑथेंटिकेट करें

## Related resources

- [Getting started with email](/learn/email/getting-started-with-email) (video)
- [Email](/email-api) (product)
- [Build your first integration](/learn/paths/integration) (course)
- [Send your first email](/docs/get-started/send-your-first-email) (docs)

[Get an implementation brief](/learn/workspace?topic=email)
