Logotipo de Aurabase
aurabasedocumentos
documentos›Edge Functions›Test and deploy from CI

Pruebe e implemente desde CI

Un bucle viable desde la primera edición hasta una implementación automática, con los límites de la emulación local establecidos desde el principio.

8 min leer·Nivel intermedio·Revisado el 12 oct 2026
Este texto en inglés se generó automáticamente a partir del original en francés y aún no ha sido revisado.
Esta página fue traducida automáticamente. La versión en inglés es autorizada.
#
locales

1. Ejecútelo localmente

aura functions serve ejecuta su archivo con Deno y lo reinicia cuando lo guarda.

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

Es un servidor Deno simple. En comparación con la plataforma, tiene:

  • Sin encabezados de plataforma. x-aura-role y x-aura-user-id están ausentes: envíelos usted mismo con curl -H para probar las ramas de autorización.
  • Sin secretos. Pásalos en tu shell: STRIPE_SECRET_KEY=sk_test_… aura functions serve checkout.
  • Sin límites. No se aplican límites de memoria, tiempo de espera, tamaño corporal ni velocidad.
  • Solicitudes simples. Llamas a la función directamente, por lo que path y method son las de tu curl, no las opciones invoke del SDK.

El SDK no puede apuntar a este servidor porque invoke llama a la ruta de la plataforma. Pruebe la ruta del SDK con un proyecto real, como se muestra a continuación.

#
Integración

2. Pruébalo de verdad

Cree un proyecto para desarrollo (consulte su primera función), implemente la función allí y pruebe a través del SDK. Esto cubre los encabezados de identidad, los límites y las clases de error de la plataforma.

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

Consejos:

  • Utilice un proyecto dedicado, nunca producción, y mantenga sus claves en sus secretos de CI.
  • El límite de tasa de invocación es de 15 llamadas y luego 1 por segundo por IP. Espacie sus pruebas o ejecútelas en serie.
#
CI

3. Implementación desde CI

La CLI aura se instala desde npm en macOS Apple Silicon y desde una fuente en otro lugar, por lo que un trabajo de CI de Linux es más sencillo con la API HTTP. La implementación es un POST por función, autenticado con una clave service_role. Este bucle exacto se ejecutó en un proyecto real y la función respondió posteriormente.

.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

Datos que hacen que sea seguro ejecutarlo en cada impulso:

  • El POST reemplaza el código de una función existente y mantiene sus secretos, porque el cuerpo no tiene env_vars.
  • Una función es de un solo archivo: las importaciones relativas no se envían. Agrupe primero si usa módulos locales.
  • No hay historial de versiones en el servidor. Su historial de Git es la reversión: para regresar, revierta la confirmación y deje que CI se implemente nuevamente.

Luego ejecute sus pruebas de integración en el proyecto que acaba de implementar, en el siguiente trabajo.

#
Ambientes

4. Desarrollo, puesta en escena y producción

Un proyecto es un entorno. Cree un proyecto por entorno, cada uno con su propia URL y claves, y deje que CI elija el destino:

Medio ambienteProyectoImplementado cuando
Desarrollouno por desarrollador o compartidobajo demanda, en sucursal
Puesta en escenamy-app-stagingcada empujón a main
Producciónmy-appuna etiqueta de lanzamiento, después de que pasen las pruebas de preparación

Almacene AURA_PROJECT_URL y AURA_SERVICE_ROLE_KEY por entorno GitHub y establezca los secretos de cada función por separado en cada proyecto. No se comparte nada entre proyectos.

Última actualización · 12 oct 2026