ऑराबेस लोगो
aurabaseडॉक्स
डॉक्स›Edge Functions›Test and deploy from CI

सीआई से परीक्षण और तैनाती

पहले संपादन से स्वचालित परिनियोजन तक एक व्यावहारिक लूप, जिसमें स्थानीय अनुकरण की सीमाएँ सामने बताई गई हैं।

8 मि॰ पढ़ें·स्तर मध्यवर्ती·12 अक्टू॰ 2026 पर संशोधित
यह अंग्रेजी पाठ फ़्रेंच मूल से स्वचालित रूप से उत्पन्न हुआ था और अभी तक इसकी समीक्षा नहीं की गई है।
यह पृष्ठ स्वचालित रूप से अनुवादित किया गया था. अंग्रेजी संस्करण प्रामाणिक है.
#
स्थानीय

1. इसे स्थानीय स्तर पर चलाएँ

aura functions serve आपकी फ़ाइल को Deno के साथ चलाता है और जब आप सहेजते हैं तो इसे पुनरारंभ करता है।

terminalbash
aura functions serve hello --port 54321
curl -X POST http://127.0.0.1:54321/ -H 'Content-Type: application/json' -d '{"name":"Ada"}'

यह एक सादा Deno सर्वर है। प्लेटफ़ॉर्म की तुलना में, इसमें है:

  • कोई प्लेटफ़ॉर्म हेडर नहीं। x-aura-role और x-aura-user-id अनुपस्थित हैं: प्राधिकरण शाखाओं का परीक्षण करने के लिए उन्हें curl -H के साथ स्वयं भेजें।
  • कोई रहस्य नहीं। उन्हें अपने शेल में पास करें: STRIPE_SECRET_KEY=sk_test_… aura functions serve checkout।
  • कोई सीमा नहीं. मेमोरी, टाइमआउट, बॉडी आकार और दर सीमाएं लागू नहीं होती हैं।
  • सादा अनुरोध. आप फ़ंक्शन को सीधे कॉल करते हैं, इसलिए path और method आपके curl में से हैं, SDK के invoke विकल्प नहीं।

SDK इस सर्वर को लक्षित नहीं कर सकता, क्योंकि invoke प्लेटफ़ॉर्म रूट को कॉल करता है। किसी वास्तविक प्रोजेक्ट के विरुद्ध SDK पथ का परीक्षण करें, जैसा कि नीचे दिया गया है।

#
एकीकरण

2. इसका वास्तविक परीक्षण करें

विकास के लिए एक प्रोजेक्ट बनाएं (देखें आपका पहला फ़ंक्शन), वहां फ़ंक्शन को तैनात करें, और एसडीके के माध्यम से परीक्षण करें। इसमें प्लेटफ़ॉर्म के पहचान हेडर, सीमाएँ और त्रुटि वर्ग शामिल हैं।

tests/hello.test.tstypescript
import { createClient, FunctionsHttpError } from '@aurabase/aurabase-js'
import { describe, expect, it } from 'vitest'

const aura = createClient(process.env.AURA_TEST_URL!, process.env.AURA_TEST_ANON_KEY!)

describe('hello', () => {
  it('greets', async () => {
    const { data, error } = await aura.functions.invoke<{ greeting: string }>('hello', { body: { name: 'Ada' } })
    expect(error).toBeNull()
    expect(data?.greeting).toBe('Hello, Ada!')
  })

  it('reports a missing function as a FunctionsHttpError 404', async () => {
    const { error } = await aura.functions.invoke('does-not-exist')
    expect(error).toBeInstanceOf(FunctionsHttpError)
    expect(error?.status).toBe(404)
  })

  it('refuses to list functions with a public key', async () => {
    const { data, error } = await aura.functions.list()
    expect(data).toBeNull()
    expect(error?.status).toBe(403)
  })
})

सुझावों:

  • एक समर्पित प्रोजेक्ट का उपयोग करें, कभी उत्पादन न करें और इसकी चाबियाँ अपने सीआई रहस्यों में रखें।
  • आह्वान दर सीमा 15 कॉल है और फिर 1 प्रति सेकंड प्रति आईपी है। अपने परीक्षणों को स्थान दें, या उन्हें क्रमिक रूप से चलाएँ।
#
सीआई

3. सीआई से तैनाती

aura CLI macOS Apple सिलिकॉन पर npm से और अन्यत्र स्रोत से इंस्टॉल होता है, इसलिए HTTP API के साथ Linux CI कार्य सरल होता है। प्रति फ़ंक्शन एक POST तैनात करना, service_role कुंजी से प्रमाणित होता है। यह सटीक लूप एक वास्तविक प्रोजेक्ट के विरुद्ध चलाया गया था और फ़ंक्शन ने बाद में उत्तर दिया था।

.github/workflows/deploy-functions.ymlyaml
name: Deploy functions
on:
  push:
    branches: [main]
    paths: ['aurabase/functions/**']

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Deploy every function
        env:
          AURA_PROJECT_URL: ${{ secrets.AURA_PROJECT_URL }}
          AURA_SERVICE_ROLE_KEY: ${{ secrets.AURA_SERVICE_ROLE_KEY }}
        run: |
          set -euo pipefail
          for dir in aurabase/functions/*/; do
            name=$(basename "$dir")
            file="${dir}index.ts"
            [ -f "$file" ] || continue
            jq -n --arg name "$name" --rawfile code "$file" \
              '{name: $name, runtime: "deno", code: $code}' |
            curl -sS --fail-with-body -X POST "$AURA_PROJECT_URL/v1/functions" \
              -H "apikey: $AURA_SERVICE_ROLE_KEY" \
              -H "Content-Type: application/json" \
              --data-binary @-
            echo " deployed $name"
          done

तथ्य जो इसे हर धक्का पर चलाने को सुरक्षित बनाते हैं:

  • POST किसी मौजूदा फ़ंक्शन के कोड को प्रतिस्थापित करता है और अपने रहस्यों को रखता है, क्योंकि शरीर में कोई env_vars नहीं है।
  • एक फ़ंक्शन एकल-फ़ाइल है: सापेक्ष आयात शिप नहीं किए जाते हैं। यदि आप स्थानीय मॉड्यूल का उपयोग करते हैं तो पहले बंडल करें।
  • सर्वर पर कोई संस्करण इतिहास नहीं है. आपका Git इतिहास रोलबैक है: वापस जाने के लिए, कमिट वापस करें और CI को फिर से तैनात होने दें।

फिर निम्नलिखित कार्य में आपके द्वारा अभी-अभी तैनात किए गए प्रोजेक्ट के विरुद्ध अपना एकीकरण परीक्षण चलाएं।

#
वातावरण

4. विकास, मंचन और उत्पादन

एक परियोजना एक पर्यावरण है. प्रति परिवेश एक प्रोजेक्ट बनाएं, प्रत्येक का अपना URL और कुंजियाँ हों, और CI को लक्ष्य चुनने दें:

पर्यावरणपरियोजनाकब तैनात किया गया
विकासप्रति डेवलपर एक या साझामांग पर, एक शाखा से
मचानmy-app-stagingmain पर हर धक्का
उत्पादनmy-appस्टेजिंग परीक्षण पास होने के बाद एक रिलीज़ टैग

AURA_PROJECT_URL और AURA_SERVICE_ROLE_KEY को GitHub वातावरण में संग्रहीत करें, और प्रत्येक प्रोजेक्ट में प्रत्येक फ़ंक्शन के रहस्यों को अलग से सेट करें। परियोजनाओं के बीच कुछ भी साझा नहीं किया जाता है.