From IomobAgents
Revisa um workflow GitHub Actions existente verificando conformidade com `Guardrails/devops.md`: segurança de secrets, rastreabilidade de imagens, separação de environments, gate de produção e boas práticas de CI/CD.
How this skill is triggered — by the user, by Claude, or both
Slash command
/IomobAgents:auditar-pipelineThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Revisa um workflow GitHub Actions existente verificando conformidade com `Guardrails/devops.md`: segurança de secrets, rastreabilidade de imagens, separação de environments, gate de produção e boas práticas de CI/CD.
Revisa um workflow GitHub Actions existente verificando conformidade com Guardrails/devops.md: segurança de secrets, rastreabilidade de imagens, separação de environments, gate de produção e boas práticas de CI/CD.
Agente: dev-devops · tech-lead
Guardrails aplicáveis: devops.md, seguranca.md
.github/workflows/revisar-pr identifica mudança em workflow fileConfirmar:
devops.md §9)devops.md §1)# ⛔ secret hardcoded
- run: curl -u admin:senha123 https://registry.example.com
# ⛔ secret interpolado diretamente em run (não mascarado pelo GitHub se derivado)
- run: echo "token is ${{ secrets.API_TOKEN }}" > config.txt
# ⛔ secret em build-arg (fica na camada da imagem Docker — inspecionável)
- uses: docker/build-push-action@v5
with:
build-args: DATABASE_PASSWORD=${{ secrets.DB_PASSWORD }}
# ✅ secret em env var intermediária
- run: ./deploy.sh
env:
API_TOKEN: ${{ secrets.API_TOKEN }}
# ✅ secret via action dedicada (login, configure-credentials)
- uses: docker/login-action@v3
with:
password: ${{ secrets.REGISTRY_TOKEN }}
Checklist:
${{ secrets.X }} interpolado diretamente em run: sem env intermediáriabuild-args do Dockerdevops.md §2)# ⛔ apenas latest — não é rastreável
tags: ${{ env.IMAGE_NAME }}:latest
# ⛔ tag semântica sem SHA — não identifica o commit exato
tags: ${{ env.IMAGE_NAME }}:v1.2.3
# ✅ SHA sempre presente (pode ter outras tags além)
tags: |
type=sha,prefix=sha-
type=raw,value=latest,enable={{is_default_branch}}
Checklist:
docker/metadata-action com type=sha,prefix=sha- ou equivalenteoutputs:latestdevops.md §3 e devops.md §4)# ⛔ deploy de produção sem dependência de staging
deploy-production:
needs: build # pula staging
# ⛔ environment de produção sem keyword environment:
deploy-production:
runs-on: ubuntu-latest
# sem environment: name: production
# ✅ dependência explícita e environment configurado
deploy-production:
needs: deploy-staging
environment:
name: production
url: ${{ vars.PRODUCTION_URL }}
Checklist:
deploy-production tem needs: deploy-staging (ou array que inclua staging)deploy-production tem environment: name: productiondeploy-staging tem environment: name: stagingurl: definida para rastreamento de deployments no GitHubdevops.md §5)# ⛔ tag mutável para action de terceiro
- uses: aws-actions/amazon-ecs-deploy-task-definition@master
# ⛔ sem versão
- uses: some-org/some-action
# ✅ SHA para action de terceiro
- uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502
# ✅ versão major para actions do github/docker
- uses: actions/checkout@v4
- uses: docker/build-push-action@v5
Checklist:
actions/ ou docker/) fixadas a SHA completoactions/ e docker/ fixadas à versão major mínimo (@v4, não @v4.1.0 obrigatório)uses: org/action sem @versao)# ⛔ trigger muito amplo em monorepo — toda mudança dispara todos os pipelines
on:
push:
branches: [main]
# ✅ filtro por paths evita deploys desnecessários
on:
push:
branches: [main]
paths:
- 'services/order-service/**'
- '.github/workflows/ci-cd-order-service.yml'
Checklist:
paths configurado para limitar trigger ao serviço do pipelinepaths (mudança no pipeline deve disparar o pipeline)workflow_dispatch desnecessário que permita deploy manual sem rastreabilidade# ⛔ job único faz tudo — impossível re-executar apenas o deploy
jobs:
ci-cd:
steps:
- run: npm test
- run: docker build
- run: kubectl apply
# ✅ jobs separados — re-run granular, falha isolada
jobs:
test: # roda apenas em PR
build: # roda apenas em push para main
deploy-staging: # depende de build
deploy-production: # depende de deploy-staging
Checklist:
maincache-from/cache-to: type=gha)devops.md §9)Aplicar apenas quando o target de deploy é ECS:
# ⛔ GHCR como registry para serviço ECS
- uses: docker/login-action@v3
with:
registry: ghcr.io # requer credencial extra na task definition
# ✅ ECR — integração nativa com ECS
- uses: aws-actions/amazon-ecr-login@062b18b96a7aff071d4dc91bc00c4c1a7945b076
# ⛔ deploy sem verificação de estabilização
- run: aws ecs update-service --cluster ... --service ... --force-new-deployment
# sem wait — pipeline reporta sucesso antes do serviço estar ativo
# ✅ deploy com wait obrigatório
- run: |
aws ecs update-service --cluster ... --service ... --force-new-deployment
- run: |
aws ecs wait services-stable --cluster ... --services ...
Checklist ECS:
devops.md §9.1aws-actions/configure-aws-credentials com SHA fixoaws-actions/amazon-ecr-login com SHA fixodeploy inclui wait services-stable após update-service — devops.md §9.2AWS_REGION, ECR_REPOSITORY, ECS_CLUSTER, ECS_SERVICE — devops.md §9.3devops.md §9## Auditoria de Pipeline — <nome-do-arquivo>
**Resultado:** ✅ Aprovado | ⚠️ Aprovado com ressalvas | ⛔ Bloqueado
---
### Bloqueadores (devem ser corrigidos antes do merge)
- ⛔ <linha X> — <descrição> — `devops.md §<n>`
Correção: <como corrigir>
### Ressalvas (não bloqueiam, mas devem ser tratadas)
- ⚠️ <descrição> — sugestão: <o que fazer>
### Pontos positivos
- ✅ <o que está correto>
### Checklist de conformidade
- [x/⛔] Secrets sem hardcode (`devops.md §1`)
- [x/⛔] Images com SHA (`devops.md §2`)
- [x/⛔] Staging precede produção (`devops.md §3`)
- [x/⛔] Gate de aprovação em produção (`devops.md §4`)
- [x/⛔] Actions de terceiros fixadas a SHA (`devops.md §5`)
- [x/⛔] Logs sem dados sensíveis (`devops.md §6`)
- [x/⛔] Secrets por environment, não repository (`devops.md §7`)
- [x/⛔] Registry ECR + deploy ECS com wait (`devops.md §9`) — se aplicável
| Racionalização | Rebate |
|---|---|
| "O pipeline já funciona, não precisa de auditoria" | Pipeline funcionando não é pipeline seguro. Secret exposto em log só aparece quando auditado — não quando o deploy ocorre. |
| "Vou verificar só os secrets, o resto está ok" | Auditoria parcial sem declarar escopo é mais perigosa que nenhuma — cria falsa sensação de conformidade. Actions sem SHA, deploy sem gate de produção: cada item tem consequência própria. |
| "Esse pipeline é igual ao do outro serviço, deve estar correto" | Cópia preserva bugs. Actions de terceiros fixadas a SHA, paths de trigger, environments — cada serviço tem particularidades que divergem na cópia. |
| "Produção sem approval gate é temporário" | Temporário em infraestrutura vira permanente. Gate de aprovação em produção é obrigatório por devops.md §4 — não é configuração opcional que pode esperar. |
| "As actions que uso são populares, não precisam de SHA fixo" | Popularidade não é segurança. Actions de terceiros sem SHA fixo são vetor de supply chain attack — um tag mutável pode ser reescrito por atacante com acesso ao repositório da action. |
devops.md verificados (§1–§7 sempre; §9 quando target é ECS)npx claudepluginhub iomobtec/iomobagents --plugin IomobAgentsProvides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.