Integrar SAFETAGGY no CI/CD com GitHub Actions

Automatize varreduras de segurança a cada Pull Request. Se o score cair abaixo do aceitável, o build falha e o time é notificado antes do merge.

Pré-requisitos

  • Conta no SAFETAGGY com plano Pro ou Business
  • API key gerada em Configurações → API Keys (veja a documentação da API)
  • Repositório no GitHub com Actions habilitado

1. Configurar a API key como secret

No seu repositório, vá em Settings → Secrets and variables → Actions e crie um secret chamado SAFETAGGY_API_KEY com o valor da sua chave (começa com stk_).

Importante: nunca coloque a API key diretamente no arquivo YAML. Use sempre GitHub Secrets para proteger suas credenciais.

2. Criar o workflow

Crie o arquivo .github/workflows/safetaggy.yml no seu repositório:

name: SAFETAGGY Security Scan

on:
  pull_request:
    branches: [main, master]

jobs:
  security-scan:
    runs-on: ubuntu-latest
    steps:
      - name: Iniciar varredura SAFETAGGY
        id: scan
        run: |
          RESPONSE=$(curl -s -X POST \
            https://www.safetaggy.com.br/api/v1/scans \
            -H "Authorization: Bearer ${{ secrets.SAFETAGGY_API_KEY }}" \
            -H "Content-Type: application/json" \
            -d '{
              "url": "https://staging.seusite.com.br",
              "appType": "saas",
              "consent": true
            }')
          SCAN_ID=$(echo $RESPONSE | jq -r '.id')
          echo "scan_id=$SCAN_ID" >> $GITHUB_OUTPUT

      - name: Aguardar resultado
        id: result
        run: |
          SCAN_ID=${{ steps.scan.outputs.scan_id }}
          for i in $(seq 1 30); do
            RESULT=$(curl -s \
              https://www.safetaggy.com.br/api/v1/scans/$SCAN_ID \
              -H "Authorization: Bearer ${{ secrets.SAFETAGGY_API_KEY }}")
            STATUS=$(echo $RESULT | jq -r '.status')
            if [ "$STATUS" = "completed" ]; then
              SCORE=$(echo $RESULT | jq -r '.overallScore')
              echo "score=$SCORE" >> $GITHUB_OUTPUT
              echo "Score: $SCORE/100"
              break
            fi
            echo "Status: $STATUS — aguardando 10s..."
            sleep 10
          done

      - name: Verificar score minimo
        run: |
          SCORE=${{ steps.result.outputs.score }}
          echo "Score obtido: $SCORE"
          if [ "$SCORE" -lt 70 ]; then
            echo "::error::Score de seguranca abaixo do minimo (70). Score: $SCORE"
            exit 1
          fi
          echo "Score aprovado!"

3. Personalizar o score mínimo

No exemplo acima, o build falha se o score for menor que 70. Ajuste o valor conforme a maturidade de segurança do seu projeto:

Score mínimoRecomendado para
90+Apps que processam dados financeiros ou de saúde
70+SaaS B2B e e-commerce
50+Landing pages e MVPs em fase inicial

4. Interpretar os resultados

A resposta da API inclui os achados individuais com severidade. Use essas informações para criar annotations no PR:

# Adicione ao step de resultado:
CRITICAL=$(echo $RESULT | jq '.findings.critical')
HIGH=$(echo $RESULT | jq '.findings.high')

if [ "$CRITICAL" -gt 0 ]; then
  echo "::error::$CRITICAL vulnerabilidade(s) critica(s) encontrada(s)"
fi
if [ "$HIGH" -gt 0 ]; then
  echo "::warning::$HIGH vulnerabilidade(s) alta(s) encontrada(s)"
fi

Para detalhes completos sobre os campos retornados, consulte a documentação da API.

Dicas de uso

  • Use um ambiente de staging para evitar rate limits no domínio de produção
  • Combine com varreduras agendadas via webhooks para monitoramento contínuo
  • O cooldown entre scans é de 30-60 segundos por domínio — evite disparar múltiplos workflows simultâneos
  • O limite de varreduras por dia segue o seu plano (5 / 30 / ilimitado)

Pronto para automatizar?

Comece agora com uma varredura gratuita e veja o que o SAFETAGGY encontra no seu site.

Iniciar varredura