> ## 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.

# Deploy

> Fluxo de deploy, limites de arquivos, rollback interativo e direto, e configuração de CI/CD com GitHub Actions.

## Fluxo de deploy

Quando você executa `jelou functions deploy`, a plataforma:

1. Lê o `jelou.json` para encontrar o slug e o entrypoint
2. Coleta todos os arquivos deployáveis do diretório
3. Exibe um resumo com nomes e tamanhos
4. Faz upload dos arquivos e executa o deploy
5. Renomeia seu entrypoint para `user-function.ts`
6. Gera um wrapper `main.ts` que importa seu código e inicia o servidor
7. Injeta seus secrets como variáveis de ambiente

```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 query-customer? (Y/n) y
# ✓ Deployed
# ▸ ID:  dep_abc12345
# ▸ URL: https://query-customer.fn.jelou.ai
```

## Limites de arquivos

| Limite                 | Valor                                |
| ---------------------- | ------------------------------------ |
| Arquivos por deploy    | 20                                   |
| Tamanho por arquivo    | 256 KB                               |
| Tamanho total          | 1 MB                                 |
| Extensões permitidas   | `.ts`, `.js`, `.json`, `.md`, `.txt` |
| Entrypoint obrigatório | `index.ts`                           |

### O que é excluído automaticamente

* `node_modules/`
* `.git/`
* `.env`
* `dist/`
* `.jelou/`
* Arquivos ocultos (começando com `.`)

## Ignorar confirmação

Para deploys automatizados, use `--no-confirm`:

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

## Rollback

Se você precisar reverter para uma versão anterior, use `jelou functions rollback`.

<Tabs>
  <Tab title="Interativo">
    Sem argumentos, exibe um menu com deploys recentes:

    ```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="Direto">
    Especifique o slug e o ID do deploy:

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

## CI/CD com GitHub Actions

<Tabs>
  <Tab title="Deploy 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="Com 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 query-customer \
                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>
  Use `--json` em pipelines para obter saída estruturada que você pode processar com `jq`. O formato é sempre `{ "ok": true, "data": ... }` no stdout.
</Tip>

## Rotas expostas

<Tabs>
  <Tab title="Modo define()">
    | Rota        | Descrição                                                    |
    | ----------- | ------------------------------------------------------------ |
    | `/__health` | Health check e metadados da função                           |
    | `/mcp`      | Endpoint MCP (a menos que `config.mcp: false`)               |
    | Sua rota    | Rota do handler (padrão: `*` corresponde a qualquer caminho) |
  </Tab>

  <Tab title="Modo app()">
    | Rota          | Descrição                                                                                  |
    | ------------- | ------------------------------------------------------------------------------------------ |
    | `/__health`   | Health check com lista de todas as ferramentas                                             |
    | `/mcp`        | Servidor MCP unificado com todas as ferramentas                                            |
    | `/<tool-key>` | Rota de cada ferramenta (kebab-case gerado automaticamente ou `config.path` personalizado) |
  </Tab>
</Tabs>
