Logo Aurabase
aurabazadokumenty
dokumenty›Edge Functions›Test and deploy from CI

Testuj i wdrażaj z poziomu CI

Działająca pętla od pierwszej edycji do automatycznego wdrożenia, z ograniczeniami lokalnej emulacji określonymi z góry.

8 min przeczytane·Poziom mediator·Zmieniono 12 paź 2026
Ten tekst w języku angielskim został wygenerowany automatycznie na podstawie francuskiego oryginału i nie był jeszcze recenzowany.
Ta strona została przetłumaczona automatycznie. Wersja angielska jest miarodajna.
#
Lokalny

1. Uruchom go lokalnie

aura functions serve uruchamia twój plik za pomocą Deno i uruchamia go ponownie po zapisaniu.

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

Jest to zwykły serwer Deno. W porównaniu z platformą posiada:

  • Brak nagłówków platformy. x-aura-role i x-aura-user-id są nieobecne: wyślij je samodzielnie z curl -H w celu przetestowania gałęzi autoryzacyjnych.
  • Żadnych tajemnic. Przekaż je w swojej powłoce: STRIPE_SECRET_KEY=sk_test_… aura functions serve checkout.
  • Brak ograniczeń. Limity pamięci, limitu czasu, rozmiaru ciała i szybkości nie są stosowane.
  • Zwykłe żądania. Wywołujesz tę funkcję bezpośrednio, więc path i method są opcjami twojego curl, a nie opcjami invoke pakietu SDK.

Zestaw SDK nie może kierować na ten serwer, ponieważ invoke wywołuje trasę platformy. Przetestuj ścieżkę SDK w stosunku do prawdziwego projektu, jak poniżej.

#
Integracja

2. Przetestuj to naprawdę

Utwórz projekt do programowania (zobacz swoją pierwszą funkcję), wdróż tam funkcję i przetestuj za pomocą zestawu SDK. Obejmuje to nagłówki tożsamości platformy, limity i klasy błędów.

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

Porady:

  • Korzystaj z dedykowanego projektu, nigdy produkcyjnego i przechowuj jego klucze w tajemnicach CI.
  • Limit szybkości wywoływania wynosi 15 połączeń, a następnie 1 na sekundę na adres IP. Rozmieszczaj testy lub uruchamiaj je szeregowo.
#
CI

3. Wdróż z CI

Interfejs CLI aura instaluje się z npm na macOS Apple Silicon i ze źródła gdzie indziej, więc zadanie CI w systemie Linux jest prostsze dzięki interfejsowi API HTTP. Wdrożenie obejmuje jeden POST na funkcję, uwierzytelniany kluczem service_role. Ta dokładna pętla została uruchomiona w odniesieniu do prawdziwego projektu, a funkcja odpowiedziała później.

.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

Fakty, które sprawiają, że jest to bezpieczne przy każdym naciśnięciu:

  • POST zastępuje kod istniejącej funkcji, a zachowuje swoje sekrety, ponieważ treść nie ma env_vars.
  • Funkcja jest jednoplikowa: import względny nie jest wysyłany. Najpierw pakuj, jeśli używasz modułów lokalnych.
  • Na serwerze nie ma historii wersji. Twoja historia Git to wycofanie: aby wrócić, cofnij zatwierdzenie i pozwól CI na ponowne wdrożenie.

Następnie uruchom testy integracyjne w odniesieniu do właśnie wdrożonego projektu w następnym zadaniu.

#
Środowiska

4. Rozwój, inscenizacja i produkcja

Jeden projekt to jedno środowisko. Utwórz po jednym projekcie na środowisko, każdy z własnym adresem URL i kluczami, i pozwól CI wybrać cel:

ŚrodowiskoProjektWdrożony, kiedy
Rozwójpo jednym na programistę lub udostępnionena żądanie, w oddziale
Inscenizacjamy-app-stagingkażde naciśnięcie do main
Produkcjamy-appznacznik wydania po przejściu testów przejściowych

Przechowuj AURA_PROJECT_URL i AURA_SERVICE_ROLE_KEY na środowisko GitHub i ustawiaj klucze tajne każdej funkcji osobno w każdym projekcie. Nic nie jest współdzielone pomiędzy projektami.

Ostatnia aktualizacja · 12 paź 2026