Aurabase Logosu
aura tabanıdokümanlar
dokümanlar›Edge Functions›Test and deploy from CI

CI'dan test edin ve dağıtın

Yerel öykünmenin sınırlarının önceden belirtildiği, ilk düzenlemeden otomatik dağıtıma kadar uygulanabilir bir döngü.

8 dk. oku·Seviye orta düzey·12 Eki 2026 tarihinde revize edildi
Bu İngilizce metin, Fransızca orijinalinden otomatik olarak oluşturulmuştur ve henüz incelenmemiştir.
Bu sayfa otomatik olarak çevrildi. İngilizce versiyonu yetkilidir.
#
Yerel

1. Yerel olarak çalıştırın

aura functions serve dosyanızı Deno ile çalıştırır ve kaydettiğinizde yeniden başlatır.

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

Sade bir Deno sunucusudur. Platformla karşılaştırıldığında aşağıdaki özelliklere sahiptir:

  • Platform başlığı yok. x-aura-role ve x-aura-user-id yok: yetkilendirme dallarını test etmek için bunları kendiniz curl -H ile gönderin.
  • Sır yok. Bunları kabuğunuza aktarın: STRIPE_SECRET_KEY=sk_test_… aura functions serve checkout.
  • Sınır yok. Bellek, zaman aşımı, gövde boyutu ve hız sınırları uygulanmaz.
  • Düz istekler. İşlevi doğrudan çağırırsınız, dolayısıyla path ve method SDK'nın invoke seçenekleri değil, curl sizinkilerdir.

invoke platform yolunu çağırdığından SDK bu sunucuyu hedefleyemez. Aşağıdaki gibi SDK yolunu gerçek bir projeye karşı test edin.

#
Entegrasyon

2. Gerçek anlamda test edin

Geliştirme için bir proje oluşturun (bkz. ilk işleviniz), işlevi orada dağıtın ve SDK aracılığıyla test edin. Bu, platformun kimlik başlıklarını, limitlerini ve hata sınıflarını kapsar.

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)
  })
})

İpuçları:

  • Özel bir proje kullanın, asla üretim yapmayın ve anahtarlarını CI sırlarınızda saklayın.
  • Çağırma hızı sınırı 15 çağrı, ardından IP başına saniyede 1 çağrıdır. Testlerinizi aralıklandırın veya seri olarak çalıştırın.
#
CI

3. CI'dan dağıtma

aura CLI, macOS Apple Silicon'daki npm'den ve başka bir yerdeki kaynaktan yüklenir; dolayısıyla Linux CI işi HTTP API ile daha basittir. Dağıtım, işlev başına bir POST işlemidir ve kimliği bir service_role anahtarıyla doğrulanır. Bu döngü gerçek bir projeye karşı çalıştırıldı ve işlev daha sonra yanıt verdi.

.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

Bunu her basışta çalıştırmayı güvenli kılan gerçekler:

  • POST mevcut bir işlevin kodunu değiştirir ve , gövdede env_vars bulunmadığından sırlarını tutar.
  • Bir işlev tek dosyalıdır: göreceli içe aktarmalar gönderilmez. Yerel modüller kullanıyorsanız önce paketleyin.
  • Sunucuda sürüm geçmişi yok. Git geçmişiniz geri alma işlemidir: geri dönmek için taahhüdü geri alın ve CI'nın yeniden dağıtılmasına izin verin.

Ardından, aşağıdaki bir işte yeni dağıttığınız projeye karşı entegrasyon testlerinizi çalıştırın.

#
Ortamlar

4. Geliştirme, aşamalandırma ve üretim

Bir proje, bir ortamdır. Ortam başına, her biri kendi URL'sine ve anahtarlarına sahip bir proje oluşturun ve hedefi CI'nın seçmesine izin verin:

ÇevreProjeNe zaman dağıtıldı
Geliştirmegeliştirici başına bir tane veya paylaşılantalep üzerine şubeden
Evrelememy-app-stagingmain öğesine her basıldığında
Üretimmy-appAşama testleri geçtikten sonra bir yayın etiketi

AURA_PROJECT_URL ve AURA_SERVICE_ROLE_KEY öğelerini GitHub ortamına göre depolayın ve her işlevin gizli dizilerini her projede ayrı ayrı ayarlayın. Projeler arasında hiçbir şey paylaşılmaz.