> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jelou.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Despliegue

> Flujo de despliegue, límites de archivos, rollback interactivo y directo, y configuración de CI/CD con GitHub Actions.

## Flujo de despliegue

Cuando ejecutas `jelou functions deploy`, la plataforma:

1. Lee `jelou.json` para encontrar el slug y entrypoint
2. Recolecta todos los archivos desplegables del directorio
3. Muestra un resumen con nombres y tamaños
4. Sube los archivos y ejecuta el despliegue
5. Renombra tu entrypoint a `user-function.ts`
6. Genera un `main.ts` wrapper que importa tu código e inicia el servidor
7. Inyecta tus secrets como variables de entorno

```bash theme={null}
jelou functions deploy
# ▸ Files: index.ts (1.2 KB), helpers.ts (800 B), jelou.json (98 B), deno.json (65 B)
# ? Deploy consultar-cliente? (Y/n) y
# ✓ Deployed
# ▸ ID:  dep_abc12345
# ▸ URL: https://consultar-cliente.fn.jelou.ai
# ⚠ A default runtime token was created for this function.
#   Save it now — it will not be shown again.
# ▸ Token    jfn_rt_abc123...
```

<Note>
  El runtime token solo aparece en el **primer deploy** de una función. Los deploys subsiguientes no lo muestran. Si perdiste el token, crea uno nuevo con `jelou tokens create`.
</Note>

## Límites de archivos

| Límite                  | Valor                                |
| ----------------------- | ------------------------------------ |
| Archivos por despliegue | 20                                   |
| Tamaño por archivo      | 256 KB                               |
| Tamaño total            | 1 MB                                 |
| Extensiones permitidas  | `.ts`, `.js`, `.json`, `.md`, `.txt` |
| Entrypoint requerido    | `index.ts`                           |

### Qué se excluye automáticamente

* `node_modules/`
* `.git/`
* `.env`
* `dist/`
* `.jelou/`
* Archivos ocultos (que empiezan con `.`)

## Omitir confirmación

Para despliegues automatizados, usa `--no-confirm`:

```bash theme={null}
jelou functions deploy --no-confirm
```

## Rollback

Si necesitas revertir a una versión anterior, usa `jelou functions rollback`.

<Tabs>
  <Tab title="Interactivo">
    Sin argumentos, muestra un menú con despliegues recientes:

    ```bash theme={null}
    jelou functions rollback
    # ? Select deployment to rollback to:
    #   ▸ dep_abc12345.. — 2 hours ago by alex@jelou.ai (current)
    #     dep_def67890.. — 1 day ago by ci@jelou.ai
    #     dep_ghi11223.. — 3 days ago by alex@jelou.ai
    ```
  </Tab>

  <Tab title="Directo">
    Especifica el slug y el ID del despliegue:

    ```bash theme={null}
    jelou functions rollback consultar-cliente dep_def67890
    # ✓ Rolled back to dep_def67890
    ```
  </Tab>
</Tabs>

## CI/CD con GitHub Actions

<Tabs>
  <Tab title="Despliegue básico">
    ```yaml deploy.yml theme={null}
    name: Deploy Function
    on:
      push:
        branches: [main]

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4

          - name: Install CLI
            run: npm install -g @jelou/cli

          - name: Deploy
            env:
              JELOU_TOKEN: ${{ secrets.JELOU_TOKEN }}
            run: jelou functions deploy --no-confirm --json | jq '.data.url'
    ```
  </Tab>

  <Tab title="Con secrets">
    ```yaml deploy.yml theme={null}
    name: Deploy with Secrets
    on:
      push:
        branches: [main]

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4

          - name: Install CLI
            run: npm install -g @jelou/cli

          - name: Configure secrets
            env:
              JELOU_TOKEN: ${{ secrets.JELOU_TOKEN }}
            run: |
              jelou secrets set consultar-cliente \
                CRM_API_KEY=${{ secrets.CRM_API_KEY }} \
                JELOU_API_KEY=${{ secrets.JELOU_API_KEY }}

          - name: Deploy
            env:
              JELOU_TOKEN: ${{ secrets.JELOU_TOKEN }}
            run: |
              DEPLOY_URL=$(jelou functions deploy --no-confirm --json | jq -r '.data.url')
              echo "Deployed to $DEPLOY_URL"
    ```
  </Tab>
</Tabs>

<Tip>
  Usa `--json` en pipelines para obtener output estructurado que puedes parsear con `jq`. El formato es siempre `{ "ok": true, "data": ... }` en stdout.
</Tip>

## Rutas expuestas

<Tabs>
  <Tab title="Modo define()">
    | Ruta        | Descripción                                                 |
    | ----------- | ----------------------------------------------------------- |
    | `/__health` | Health check y metadata de la función                       |
    | `/mcp`      | Endpoint MCP (a menos que `config.mcp: false`)              |
    | Tu ruta     | Ruta del handler (default: `*` coincide con cualquier path) |
  </Tab>

  <Tab title="Modo app()">
    | Ruta          | Descripción                                                                |
    | ------------- | -------------------------------------------------------------------------- |
    | `/__health`   | Health check con lista de todos los tools                                  |
    | `/mcp`        | Servidor MCP unificado con todos los tools                                 |
    | `/<tool-key>` | Ruta de cada tool (kebab-case auto-generado o `config.path` personalizado) |
  </Tab>
</Tabs>

## Historial de despliegues

```bash theme={null}
jelou functions deployments list mi-funcion
# ▸ ID             Status   Source  Files  Deployed By    Age
# ▸ dep_abc123..   active   cli     3      alex@jelou.ai  2h ago
# ▸ dep_def456..   active   cli     3      ci@jelou.ai    1d ago
```

Para ver detalles de un despliegue específico:

```bash theme={null}
jelou functions deployments info mi-funcion dep_abc123
```

Para descargar el artifact de un despliegue:

```bash theme={null}
jelou functions deployments download mi-funcion dep_abc123 -o artifact.tar.gz
```
