Skip to content

Publicar a API como imagem Docker e corrigir o bundle de migrations no CD - #21

Merged
Rodrigosdk merged 3 commits into
mainfrom
developer
Nov 11, 2026
Merged

Rodrigosdk merged 3 commits into
mainfrom
developer

Conversation

@Rodrigosdk

@Rodrigosdk Rodrigosdk commented Nov 11, 2026 •

Copy link
Copy Markdown
Owner

Esta branch corrige a falha do primeiro deploy, passa a publicar a API como imagem Docker e leva para a main o último ajuste dos alertas do CodeQL.

Mudanças

Deploy com imagem Docker

  • O CD gera a imagem a partir do mesmo docker/Dockerfile usado no docker compose local e a publica no GitHub Container Registry: ghcr.io/rodrigosdk/policydesk-api, com a tag do SHA do commit e a latest.
  • O job da imagem tem só packages: write e publica com o GITHUB_TOKEN da execução. Usa cache de camadas do GitHub Actions e etiquetas OCI (source, revision, licenses).
  • O deploy aponta o Web App para a imagem do commit (azure/webapps-deploy com images:). Voltar uma versão é trocar a tag.
  • infra/main.bicep: o Web App passa a ser DOCKER|ghcr.io/rodrigosdk/policydesk-api, com WEBSITES_PORT=8080, WEBSITES_ENABLE_APP_SERVICE_STORAGE=false e DOCKER_REGISTRY_SERVER_URL=https://ghcr.io. Sai o SCM_DO_BUILD_DURING_DEPLOYMENT, que só fazia sentido no modelo de código.
  • O Web App que já existia recebeu essas configurações pela CLI. A imagem só é definida no deploy, para o App Service não tentar baixar uma tag que ainda não existia.
  • O smoke test agora faz até 18 tentativas, para cobrir o tempo de baixar a imagem.

Bundle de migrations no CD

  • O job Empacotar falhava no passo "Gerar o bundle de migrations" com NETSDK1047: Assets file ... doesn't have a target for 'net10.0/linux-x64', porque reaproveitava uma restauração feita sem runtime.
  • Correção: o bundle ganhou um job próprio, com dotnet restore ... --runtime linux-x64 antes de gerar o executável. Ele roda em paralelo com o job da imagem.

Alertas do CodeQL

  • Os filtros de PoliciesRepository.GetPageAsync capturam o valor antes da consulta (if (status is { } statusFilter)), em vez de usar .Value de um tipo anulável.
  • Nos testes de domínio, ShouldNotBeNull() passa a ser encadeado direto na asserção seguinte, sem .Value.
  • Com isso, a developer fica sem nenhum alerta aberto.

O que já foi verificado

  • O plano F1 roda contêineres sem custo: um app de teste com a imagem de exemplo da Microsoft respondeu 200 na primeira tentativa. Ele já foi apagado.
  • A imagem da API foi gerada localmente e sobe em Production com usuário sem privilégios, logs em JSON e porta 8080.
  • O CD foi rodado manualmente na developer: CI, bundle e imagem passaram, e o deploy foi recusado pela proteção do environment production, como esperado. A imagem 530aabd já está no ghcr.io e baixa sem login.
  • O bundle de migrations é gerado e executa na sequência exata do pipeline.

⚠️ Atenção

  • O merge dispara o primeiro deploy em produção, já com o contêiner: migrations no banco novo, troca da imagem e smoke test.
  • A imagem herda a visibilidade pública do repositório. Se o repositório virar privado, o App Service vai precisar de credenciais do registro.
  • O primeiro acesso depois de um tempo parado fica mais lento, porque o F1 não tem Always On e o contêiner precisa subir.

Como testar

  1. Confira que o CI e o CodeQL deste PR passaram.
  2. Depois do merge, acompanhe o workflow CD: CI, Bundle de migrations, Imagem Docker e Deploy em produção devem passar.
  3. curl https://policydesk-api-rodrigo.azurewebsites.net/health deve responder Healthy.

🤖 Generated with Claude Code

@Rodrigosdk Rodrigosdk changed the title Corrigir a geração do bundle de migrations no CD Publicar a API como imagem Docker e corrigir o bundle de migrations no CD Nov 11, 2026
@Rodrigosdk
Rodrigosdk merged commit 9ba508c into main Nov 11, 2026
9 of 10 checks passed

This branch had an error being deployed

1 failed deployment
production — 530aabd3 Deployed Nov 11, 2026 by Rodrigosdk via Deploy em produção #2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant