Go-आधारित CLI टूल जो लॉन्च तत्परता के लिए कोडबेस को स्कैन करता है, प्रोडक्शन डिप्लॉयमेंट से पहले लापता कॉन्फ़िगरेशन, सुरक्षा स्वच्छता संबंधी समस्याओं, सीक्रेट लीक और इंटीग्रेशन अंतराल का पता लगाता है।
Preflight.sh एक कमांड-लाइन टूल है जो आपके कोडबेस को लॉन्च-तैयारी के लिए स्कैन करता है। यह प्रोडक्शन में डिप्लॉय करने से पहले गायब कॉन्फ़िगरेशन, इंटीग्रेशन समस्याओं, सुरक्षा चिंताओं, SEO मेटाडेटा अंतराल और अन्य सामान्य गलतियों की पहचान करता है।
प्रोडक्शन में खुद को शर्मिंदा न करें। बस कमांड चलाएँ।
brew install preflightsh/preflight/preflight
npm install -g @preflightsh/preflight
go install github.com/preflightsh/preflight@latest
docker pull ghcr.io/preflightsh/preflight
curl -sSL https://preflight.sh/install.sh | sh
GitHub Releases से नवीनतम रिलीज़ डाउनलोड करें।
# अपनी प्रोजेक्ट डायरेक्टरी में इनिशियलाइज़ करें
cd your-project
preflight init
# सभी जाँचें चलाएँ
preflight scan
# किसी विशिष्ट डायरेक्टरी को स्कैन करें
preflight scan /path/to/project
# वर्बोज़ आउटपुट के साथ चलाएँ (दिखाता है कि कौन सी फ़ाइलें किस जाँच से मेल खाती हैं)
preflight scan --verbose
preflight scan -v # संक्षिप्त रूप
# JSON आउटपुट के साथ CI मोड में चलाएँ
preflight scan --ci --format json
# केवल विशिष्ट जाँचें चलाएँ, या कुछ छोड़ें, तेज़ पुनरावृत्ति के लिए
# (एक-बार; `preflight ignore` के विपरीत यह preflight.yml नहीं बदलता)
preflight scan --only seo_meta,og_twitter
preflight scan --skip vulnerability,secrets
# किसी जाँच को शांत करें
preflight ignore sitemap
# किसी जाँच को फिर से सक्रिय करें
preflight unignore sitemap
# सभी जाँच ID सूचीबद्ध करें
preflight checks
इस रिपॉज़िटरी में skills/preflight/SKILL.md पर एक skills.sh-संगत एजेंट स्किल शामिल है। यह कोडिंग एजेंटों को एक दोहराने योग्य Preflight वर्कफ़्लो देता है: preflight.yml का निरीक्षण करें, CI-सुरक्षित स्कैन चलाएँ, निष्कर्षों को ट्राइएज करें, असुरक्षित इग्नोर से बचें, सत्यापन फिर से चलाएँ, और शेष लॉन्च जोखिम की रिपोर्ट करें।
इस रिपॉज़िटरी से स्किल सूचीबद्ध करें:
# Bun के साथ
bunx --yes skills add preflightsh/preflight --list
# या npm के साथ
npx --yes skills add preflightsh/preflight --list
केवल Preflight स्किल इंस्टॉल करें:
# Bun के साथ
bunx --yes skills add preflightsh/preflight --skill preflight
# या npm के साथ
npx --yes skills add preflightsh/preflight --skill preflight
Preflight बिना किसी खाते के कमांड लाइन से पूरी तरह उपयोग योग्य है। app.preflight.sh पर वैकल्पिक डैशबोर्ड आपके स्कैन का होस्टेड इतिहास और प्रत्येक निष्कर्ष के लिए AI-जनित फिक्स सुझाव जोड़ता है। आपका कोड कभी भी आपकी मशीन नहीं छोड़ता: स्कैनिंग स्थानीय रूप से चलती है, और केवल परिणामों का एक संपादित सारांश (चेक ID, स्थितियाँ, और संदेश, कभी भी गुप्त मान या फ़ाइल सामग्री नहीं) भेजा जाता है जब आप प्रकाशित करते हैं।
एक निःशुल्क खाता बनाएँ, फिर CLI कनेक्ट करें:
preflight auth login # इस CLI को अधिकृत करने के लिए आपका ब्राउज़र खोलता है
preflight auth status # दिखाता है कि आप किस रूप में लॉग इन हैं
preflight auth logout # संग्रहीत क्रेडेंशियल हटाता है
--publish के साथ अपने डैशबोर्ड पर एक स्कैन प्रकाशित करें। यह रन देखने के लिए एक लिंक प्रिंट करता है। प्रकाशन सर्वोत्तम-प्रयास है: यदि आप ऑफ़लाइन हैं या लॉग इन नहीं हैं, तो स्कैन फिर भी चलता है और सामान्य रूप से बाहर निकलता है।
preflight scan --publish
डैशबोर्ड पर आपको प्रत्येक रन का पास/चेतावनी/विफल विवरण, निष्कर्षों की पूरी सूची, और प्रति-प्रोजेक्ट इतिहास मिलता है ताकि आप देख सकें कि डिप्लॉय के बीच क्या बदला।
आप उस इतिहास को टर्मिनल से preflight history के साथ भी पढ़ सकते हैं:
preflight history # आपके प्रोजेक्ट्स में हाल के रन
preflight history --here # केवल वर्तमान प्रोजेक्ट के रन
preflight history <run-id> # एक रन के पूर्ण चेक परिणाम
preflight history --here --format json # मशीन-पठनीय, एजेंटों के लिए
preflight auth login आवश्यक है। --here रन को वर्तमान रिपॉज़िटरी से उसके git रिमोट द्वारा मिलाता है, वही कुंजी जो प्रकाशित करते समय उपयोग होती है।
प्रकाशित रन पर किसी भी विफल या चेतावनी जाँच को खोलें ताकि आपके पहचाने गए स्टैक के अनुरूप चरण-दर-चरण फिक्स उत्पन्न हो, कॉपी-रेडी कमांड और कोड के साथ।
| जाँच | विवरण |
|---|---|
| ENV समानता | गायब चर के लिए .env और .env.example की तुलना करता है |
| स्वास्थ्य एंडपॉइंट | सत्यापित करता है कि साइट पहुँच योग्य है; /health, /healthz, /api/health का स्वतः पता लगाता है या रूट पर वापस आता है |
| भेद्यता स्कैन | निर्भरता भेद्यताओं की जाँच करता है (bundle audit, npm audit, आदि) |
| SEO मेटाडेटा | शीर्षक, विवरण, और Open Graph टैग की जाँच करता है |
| OG और Twitter कार्ड | og:image, twitter:card और सोशल शेयरिंग मेटाडेटा को मान्य करता है |
| कैननिकल URL | सत्यापित करता है कि कैननिकल लिंक टैग मौजूद है |
| व्यूपोर्ट | मोबाइल के लिए उचित व्यूपोर्ट मेटा टैग की जाँच करता है |
| Lang विशेषता | पहुँच के लिए html lang विशेषता को मान्य करता है |
| संरचित डेटा | JSON-LD Schema.org मार्कअप की जाँच करता है |
| सुरक्षा हेडर | prod और staging दोनों पर HSTS, CSP, X-Content-Type-Options को मान्य करता है |
| SSL प्रमाणपत्र | SSL वैधता की जाँच करता है और समाप्ति से पहले चेतावनी देता है |
| WWW रीडायरेक्ट | सत्यापित करता है कि www/गैर-www कैननिकल URL पर रीडायरेक्ट करता है |
| ईमेल प्रमाणीकरण | ईमेल डिलीवरेबिलिटी के लिए SPF/DMARC DNS रिकॉर्ड की जाँच करता है (ऑप्ट-इन) |
| गुप्त स्कैनिंग | कोड में लीक हुई API कुंजियाँ और क्रेडेंशियल ढूँढता है |
| डीबग स्टेटमेंट | कोड में छोड़े गए console.log, var_dump, debugger का पता लगाता है |
| त्रुटि पृष्ठ | कस्टम 404/500 त्रुटि पृष्ठों की जाँच करता है |
| छवि अनुकूलन | बड़ी छवियाँ (>500KB) ढूँढता है जो लोड समय को नुकसान पहुँचाती हैं |
| कानूनी पृष्ठ | गोपनीयता नीति और सेवा की शर्तों के पृष्ठों की जाँच करता है |
| कुकी सहमति | कुकी सहमति समाधान का पता लगाता है (GDPR/CCPA अनुपालन) |
Preflight इन सेवाओं के लिए कॉन्फ़िगरेशन का स्वतः पता लगाता है और मान्य करता है:
भुगतान
त्रुटि ट्रैकिंग और निगरानी
ईमेल और न्यूज़लेटर
एनालिटिक्स
प्रमाणीकरण
चैट
सूचनाएँ
इन्फ्रास्ट्रक्चर
स्टोरेज और CDN
खोज
SEO
AI / LLMs
Preflight आपकी प्रोजेक्ट रूट में एक preflight.yml फ़ाइल का उपयोग करता है:
projectName: my-app
stack: rails # rails, next, react, vite, laravel, आदि।
urls:
staging: "https://staging.example.com"
production: "https://example.com"
services:
stripe:
declared: true
sentry:
declared: true
checks:
envParity:
enabled: true
envFile: ".env"
exampleFile: ".env.example"
healthEndpoint:
enabled: true
path: "/health" # वैकल्पिक - सेट न होने पर सामान्य पथों का स्वतः पता लगाता है
stripeWebhook:
enabled: true
url: "https://api.example.com/webhooks/stripe" # वैकल्पिक - GET के साथ जाँचा जाता है; 404 या कोई प्रतिक्रिया रिपोर्ट की जाती है
seoMeta:
enabled: true
mainLayout: "app/views/layouts/application.html.erb"
security:
enabled: true
secrets:
enabled: true
# गुप्त स्कैन के लिए प्रति-फ़ाइल अनुमत सूची। इसका उपयोग किसी
# व्यक्तिगत निष्कर्ष को दबाने के लिए करें (जैसे रेफरर-प्रतिबंधित सार्वजनिक कुंजी) बिना
# पूरी जाँच को अक्षम किए।
allowlist:
- path: web/js/golden-hour.js
fingerprint: "sha256:<hex>" # अनुशंसित — सटीक गुप्त को पिन करता है
reason: "HTTP-रेफरर-प्रतिबंधित Google Timezone कुंजी"
- path: "web/tools/**/*.php" # doublestar ग्लोब्स समर्थित हैं
indexNow:
enabled: true
key: "your32characterhexkeyhere00000"
emailAuth:
enabled: true # ऑप्ट-इन, प्रोडक्शन डोमेन पर SPF/DMARC जाँचता है
humansTxt:
enabled: false # ऑप्ट-इन, टीम को श्रेय देता है
license:
enabled: false # ऑप्ट-इन, ओपन सोर्स प्रोजेक्ट्स के लिए
# विशिष्ट जाँच या सेवाओं को ID द्वारा शांत करें
ignore:
- sitemap
- llms_txt
- google_analytics
preflight ignore <id> का उपयोग करके विशिष्ट जाँच या सेवाओं को शांत करें:
preflight ignore sitemap # साइटमैप जाँच को अनदेखा करें
preflight ignore sentry # Sentry सेवा सत्यापन को अनदेखा करें
preflight unignore sitemap # साइटमैप जाँच को फिर से सक्षम करें
preflight checks # सभी अनदेखा करने योग्य ID सूचीबद्ध करें
पूरे secrets जाँच को शांत करने के बजाय किसी व्यक्तिगत निष्कर्ष को अनुमत सूची में जोड़ना बेहतर है। कमांड लाइन से एक-बार अपवाद जोड़ें:
preflight ignore secrets web/js/golden-hour.js
यह आपके preflight.yml में checks.secrets.allowlist के अंतर्गत एक पथ प्रविष्टि जोड़ता है। path फ़ील्ड एक doublestar ग्लोब है (** डायरेक्टरीज़ के पार मेल खाता है) जो प्रोजेक्ट-सापेक्ष फ़ाइल पथ के विरुद्ध हल किया जाता है।
फ़िंगरप्रिंट पिन करें। केवल-पथ अनुमत सूची उस फ़ाइल में भविष्य में डाले गए किसी भी गुप्त को चुपचाप स्वीकार करती है। प्रविष्टि संपादित करें और एक fingerprint: "sha256:<hex>" जोड़ें — पहचाने गए गुप्त मान का SHA-256। अब यदि कुंजी घुमाई जाती है या उसी फ़ाइल में कोई अलग गुप्त दिखाई देता है, तो preflight फिर से सतर्क करता है।
निष्कर्ष पथ + फ़िंगरप्रिंट द्वारा मिलाए जाते हैं, पूरी-फ़ाइल से नहीं। किसी फ़ाइल में अनुमत फ़िंगरप्रिंट उसी फ़ाइल की अन्य पंक्तियों पर अन्य गुप्त को दबाता नहीं है।
SEO और सोशल:
seo_meta, canonical, structured_data, index_now (ऑप्ट-इन), og_twitter, viewport, lang
सुरक्षा और इन्फ्रास्ट्रक्चर:
security_headers, ssl, www_redirect, email_auth (ऑप्ट-इन), secrets
पर्यावरण और स्वास्थ्य:
env_parity, health_endpoint
कोड गुणवत्ता और प्रदर्शन:
vulnerability, debug_statements, error_pages, image_optimization
कानूनी और अनुपालन:
legal_pages
वेब मानक फ़ाइलें:
favicon, robots_txt, sitemap, llms_txt, ads_txt (ऑप्ट-इन), humans_txt (ऑप्ट-इन), license (ऑप्ट-इन)
अब हर जाँच ID snake_case है। पुराने camelCase नाम 1.x लाइन के माध्यम से हर जगह काम करते रहते हैं जहाँ ID स्वीकार की जाती है (ignore: सूचियाँ, --only, --skip, preflight ignore), stderr पर एक नोट के साथ, और 2.0 में हट जाते हैं। preflight ignore नया नाम लिखता है। preflight.yml में checks: के अंतर्गत कुंजियाँ (healthEndpoint, seoMeta, ...) एक अलग स्कीमा हैं और नहीं बदली हैं।
| पुराना | नया |
|---|---|
seoMeta | seo_meta |
ogTwitter | og_twitter |
securityHeaders | security_headers |
envParity | env_parity |
healthEndpoint | health_endpoint |
robotsTxt | robots_txt |
llmsTxt | llms_txt |
adsTxt | ads_txt |
humansTxt | humans_txt |
indexNow | index_now |
हर जाँच फ़ाइलें पढ़ती है; एक प्रोग्राम चलाती है। vulnerability जाँच आपके प्रोजेक्ट के अपने पैकेज मैनेजर (npm audit, yarn audit, composer audit, bundle audit, pip-audit, govulncheck, cargo audit) को प्रोजेक्ट डायरेक्टरी के अंदर निष्पादित करती है, एक साफ़ किए गए वातावरण और एक अस्थायी होम के साथ ताकि यह आपके टोकन नहीं पढ़ सके। पैकेज मैनेजर अभी भी प्रोजेक्ट-स्थानीय कॉन्फ़िगरेशन का सम्मान करते हैं, और उस कॉन्फ़िगरेशन का कुछ हिस्सा रिपॉज़िटरी से कोड चला सकता है (एक Yarn yarnPath, एक Cargo alias, एक Composer प्लगइन)। अपने स्वयं के प्रोजेक्ट्स को स्कैन करना ही Preflight का उद्देश्य है। जब आप किसी ऐसी रिपॉज़िटरी को स्कैन करते हैं जिस पर आप भरोसा नहीं करते, जैसे CI में किसी फ़ोर्क का पुल रिक्वेस्ट, तो --skip vulnerability जोड़ें।
सभी सेवाओं में सत्यापन जाँचें होती हैं जो उचित इंटीग्रेशन (env vars, SDK पैटर्न, कॉन्फ़िगरेशन फ़ाइलें) सत्यापित करती हैं:
भुगतान: stripe, paypal, braintree, paddle, lemonsqueezy
त्रुटि ट्रैकिंग: sentry, bugsnag, rollbar, honeybadger, datadog, newrelic, logrocket
लेन-देन ईमेल: postmark, sendgrid, mailgun, aws_ses, resend
ईमेल मार्केटिंग: mailchimp, convertkit, beehiiv, aweber, activecampaign, campaignmonitor, drip, klaviyo, buttondown
एनालिटिक्स: plausible, fathom, google_analytics, fullres, datafast, posthog, mixpanel, amplitude, segment, hotjar
प्रमाणीकरण: auth0, clerk, workos, firebase, supabase
संचार: twilio, slack, discord, intercom, crisp
इन्फ्रास्ट्रक्चर: redis, sidekiq, rabbitmq, elasticsearch, convex
स्टोरेज और CDN: aws_s3, cloudinary, cloudflare
खोज: algolia
AI: openai, anthropic, google_ai, mistral, cohere, replicate, huggingface, grok, perplexity, together_ai
SEO: index_now
कुकी सहमति: cookieconsent, cookiebot, onetrust, termly, cookieyes, iubenda
| कोड | अर्थ |
|---|---|
| 0 | सभी जाँचें पास हुईं |
| 1 | केवल चेतावनियाँ |
| 2 | त्रुटियाँ मिलीं |
| 64 | Preflight नहीं चल सका (गलत पथ, अपठनीय कॉन्फ़िगरेशन, अज्ञात जाँच ID) |
| 130 | स्कैन रद्द किया गया (Ctrl-C / SIGTERM) |
कोड 1 और 2 का मतलब है कि स्कैन चला और कुछ रिपोर्ट किया। कोड 64 का मतलब है कि यह उस बिंदु तक कभी नहीं पहुँचा, इसलिए CI "इस प्रोजेक्ट में समस्याएँ हैं" को "यह इनवोकेशन गलत था" से अलग बता सकता है।
कमांड, फ़्लैग, और जाँच ID के लिए टैब कम्प्लीशन (--only और --skip मानों सहित):
# bash (~/.bashrc में जोड़ें)
source <(preflight completion bash)
# zsh (~/.zshrc में जोड़ें)
source <(preflight completion zsh)
# fish
preflight completion fish | source
आउटपुट NO_COLOR पर्यावरण चर का भी सम्मान करता है।
बैकएंड फ्रेमवर्क
फ्रंटएंड फ्रेमवर्क
पारंपरिक CMS
स्टैटिक साइट जनरेटर
हेडलेस CMS
अन्य
# GitHub Actions उदाहरण (curl)
- name: Run Preflight
run: |
curl -sSL https://preflight.sh/install.sh | sh
preflight scan --ci --format json
# GitHub Actions उदाहरण (Docker)
- name: Run Preflight
run: docker run -v ${{ github.workspace }}:/app ghcr.io/preflightsh/preflight scan --ci --format json
MIT
| Favicon और आइकन |
| favicon, apple-touch-icon (.png, .webp, .svg), और वेब मैनिफेस्ट की जाँच करता है |
| robots.txt | सत्यापित करता है कि robots.txt मौजूद है और उसमें सामग्री है |
| sitemap.xml | साइटमैप उपस्थिति या जनरेटर की जाँच करता है |
| llms.txt | LLM क्रॉलर मार्गदर्शन फ़ाइल की जाँच करता है |
| ads.txt | विज्ञापन-समर्थित साइटों के लिए ads.txt को मान्य करता है (ऑप्ट-इन) |
| humans.txt | टीम को श्रेय देने के लिए humans.txt की जाँच करता है (ऑप्ट-इन) |
| IndexNow | तेज़ खोज अनुक्रमण के लिए IndexNow कुंजी फ़ाइल सत्यापित करता है (ऑप्ट-इन) |
| LICENSE | लाइसेंस फ़ाइल की जाँच करता है (ऑप्ट-इन, ओपन सोर्स प्रोजेक्ट्स के लिए) |