Skip to content

Receitas de CI/CD · Developers

Receitas prontas para notificar o Dailybot a partir de qualquer pipeline. Mesmo padrão que os workflows de release do Dailybot usam: uma chamada curl contra a API pública — sem runtime para instalar, sem CLI para manter sincronizado.

Todo vendor de CI suporta variáveis de ambiente e segredos — isso é tudo o que você precisa para falar com o Dailybot. As receitas abaixo usam `curl` + `jq` contra a API REST pública, o mesmo padrão que os próprios workflows de release do Dailybot usam. Prefere uma CLI? Vá para a seção da CLI.

Qual endpoint?

Dois endpoints cobrem a grande maioria dos casos de CI/CD. Ambos aceitam um header X-API-KEY e retornam JSON.

MethodPathWhen
POST/v1/send-message/Notifica um canal, usuário ou time na sua plataforma de chat conectada (Slack, MS Teams, Discord, Google Chat). Ideal para alertas de deploy iniciado / deploy no ar / build falhou.
POST/v1/agent-reports/Envia um standup como identidade de agente. Ideal para resumos noturnos via cron, relatórios por deploy, e qualquer update recorrente de "o que aconteceu hoje".

Receitas API-first

Cada snippet é non-blocking: se o Dailybot ficar inalcançável por um instante, o pipeline continua. Os timeouts (--connect-timeout 10 --max-time 30) seguem o padrão dos workflows deste próprio site.

GitHub Actions — notificar um canal

# .github/workflows/notify-deploy.yml
name: Notify deploy
on:
  workflow_run:
    workflows: ["release"]
    types: [completed]

jobs:
  notify:
    runs-on: ubuntu-latest
    timeout-minutes: 3
    steps:
      - name: Install jq
        run: sudo apt-get update && sudo apt-get install -y jq

      - name: Post to Dailybot
        env:
          # UUID do canal no seu workspace do Dailybot.
          DAILYBOT_CHANNEL: ${{ vars.DAILYBOT_DEPLOY_CHANNEL }}
        run: |
          MESSAGE=$'✅ *Deploy no ar*\n> commit: `'"${GITHUB_SHA:0:8}"'`\n> actor: '"$GITHUB_ACTOR"
          BODY=$(jq -n --arg msg "$MESSAGE" --arg ch "$DAILYBOT_CHANNEL" \
            '{message: $msg, target_channels: [$ch]}')
          curl --fail --show-error --connect-timeout 10 --max-time 30 \
            'https://api.dailybot.com/v1/send-message/' \
            -H "X-API-KEY: ${{ secrets.DAILYBOT_API_KEY }}" \
            -H 'Content-Type: application/json' \
            -d "$BODY" \
            || echo "Notificação para o Dailybot falhou; seguindo."

GitHub Actions — enviar relatório de agente

# .github/workflows/nightly-report.yml
name: Nightly agent report
on:
  schedule:
    - cron: "0 23 * * *"

jobs:
  report:
    runs-on: ubuntu-latest
    timeout-minutes: 3
    steps:
      - name: Install jq
        run: sudo apt-get update && sudo apt-get install -y jq

      - name: Enviar relatório
        run: |
          BODY=$(jq -n \
            --arg summary "Batch noturno completo em ${GITHUB_REF_NAME}." \
            --argjson milestone false \
            '{summary: $summary, milestone: $milestone}')
          curl --fail --show-error --connect-timeout 10 --max-time 30 \
            'https://api.dailybot.com/v1/agent-reports/' \
            -H "X-API-KEY: ${{ secrets.DAILYBOT_API_KEY }}" \
            -H 'Content-Type: application/json' \
            -d "$BODY" \
            || echo "Relatório de agente falhou; seguindo."

GitLab CI

# .gitlab-ci.yml (fragmento)
notify-dailybot:
  stage: notify
  image: alpine:3
  before_script:
    - apk add --no-cache curl jq
  variables:
    DAILYBOT_CHANNEL: "$DAILYBOT_DEPLOY_CHANNEL"  # UUID, salva como variável masked
  script: |
    BODY=$(jq -n \
      --arg msg "Pipeline ${CI_PIPELINE_ID} passou em ${CI_COMMIT_REF_NAME}." \
      --arg ch "$DAILYBOT_CHANNEL" \
      '{message: $msg, target_channels: [$ch]}')
    curl --fail --show-error --connect-timeout 10 --max-time 30 \
      'https://api.dailybot.com/v1/send-message/' \
      -H "X-API-KEY: $DAILYBOT_API_KEY" \
      -H 'Content-Type: application/json' \
      -d "$BODY" \
      || echo "Notificação para o Dailybot falhou; seguindo."
  only:
    - main

CircleCI

# .circleci/config.yml (fragmento)
version: 2.1
jobs:
  notify-dailybot:
    docker:
      - image: cimg/base:current
    steps:
      - run:
          name: Post to Dailybot
          command: |
            BODY=$(jq -n \
              --arg msg "Job ${CIRCLE_JOB} passou em ${CIRCLE_BRANCH}." \
              --arg ch "$DAILYBOT_DEPLOY_CHANNEL" \
              '{message: $msg, target_channels: [$ch]}')
            curl --fail --show-error --connect-timeout 10 --max-time 30 \
              'https://api.dailybot.com/v1/send-message/' \
              -H "X-API-KEY: $DAILYBOT_API_KEY" \
              -H 'Content-Type: application/json' \
              -d "$BODY" \
              || echo "Notificação para o Dailybot falhou; seguindo."
workflows:
  build-and-notify:
    jobs:
      - notify-dailybot:
          context: dailybot-org  # guarde aqui DAILYBOT_API_KEY + DAILYBOT_DEPLOY_CHANNEL

Bash / cron

# /etc/cron.d/dailybot-nightly-report
# Todo dia às 23:00 UTC, envie um standup de resumo.
SHELL=/bin/bash
# Carregue DAILYBOT_API_KEY do secret store do host; nunca hardcode aqui.
0 23 * * * app source /etc/dailybot.env && curl --fail --show-error --connect-timeout 10 --max-time 30 \
  'https://api.dailybot.com/v1/agent-reports/' \
  -H "X-API-KEY: $DAILYBOT_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"summary":"Batch noturno completo.","milestone":false}' \
  >> /var/log/dailybot-report.log 2>&1

Kubernetes CronJob

# k8s/dailybot-nightly.yaml (fragmento)
apiVersion: batch/v1
kind: CronJob
metadata:
  name: dailybot-nightly-report
spec:
  schedule: "0 23 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - name: dailybot
              image: curlimages/curl:8.10.1
              envFrom:
                - secretRef: { name: dailybot-secrets }   # expõe DAILYBOT_API_KEY
              command: ["sh", "-c"]
              args:
                - |
                  curl --fail --show-error --connect-timeout 10 --max-time 30 \
                    'https://api.dailybot.com/v1/agent-reports/' \
                    -H "X-API-KEY: $DAILYBOT_API_KEY" \
                    -H 'Content-Type: application/json' \
                    -d '{"summary":"Manutenção noturna rodou limpa.","milestone":false}'

Prefere uma CLI?

A CLI do Dailybot é um pacote Python publicado no PyPI: pypi.org/project/dailybot-cli. Ela envolve os mesmos endpoints — `dailybot chat send …` chama `/v1/send-message/`, `dailybot agent update …` chama `/v1/agent-reports/`. Para CI/CD recomendamos as receitas com curl acima (sem runtime para instalar, uma chamada HTTP, sempre alinhada com a API). A CLI encaixa melhor em desenvolvimento local e em processos de agente de longa duração.

# Recomendado — one-liner universal (macOS, Linux, WSL, Git Bash)
curl -sSL https://cli.dailybot.com/install.sh | bash

# Ambiente Python isolado com pipx
pipx install dailybot-cli

# Ou com pip
pip install dailybot-cli

# Verificar
dailybot --version

Guardar DAILYBOT_API_KEY com segurança

Nunca commite DAILYBOT_API_KEY no código. Todo vendor acima traz gerenciamento nativo de segredos — GitHub secrets, GitLab masked/protected variables, CircleCI contexts, Kubernetes secrets, EnvironmentFile= do systemd para cron. Rotacione a chave pelo dashboard do Dailybot no momento em que uma credencial compartilhada sair do org.