name: migrate # Migrations alteram dados persistentes e nao acompanham o deploy automatico. # Este workflow manual recebe uma imagem ja publicada e uma lista EXPLICITA de # municipios; ele nunca tenta inferir ou migrar todas as conexoes. on: workflow_dispatch: inputs: ambiente: description: 'Ambiente de destino' required: true type: choice options: - teste - homolog - prod versao: description: 'Tag da imagem ja publicada (ex.: 2.59.3)' required: true type: string municipios: description: 'Conexoes municipais separadas por virgula (ex.: anhembi,aparecida)' required: true type: string confirmacao: description: 'Digite MIGRAR para confirmar a alteracao dos bancos' required: true type: string jobs: migrate: runs-on: ubuntu-latest env: REGISTRY: ${{ vars.REGISTRY_HOST || '192.168.0.41:3001' }} IMAGE_NAME: ${{ vars.API_IMAGE_NAME || 'rkm/conectasus-api' }} steps: - name: Confirmar operacao destrutiva env: CONFIRMACAO: ${{ inputs.confirmacao }} run: | set -euo pipefail if [ "${CONFIRMACAO}" != "MIGRAR" ]; then echo "::error::Para executar migrations, informe confirmacao=MIGRAR." exit 1 fi - name: Checkout uses: actions/checkout@v4 - name: Login no registry do Gitea env: REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} REGISTRY_USER: ${{ vars.REGISTRY_USER }} ACTOR: ${{ github.actor }} run: | set -euo pipefail if [ -z "${REGISTRY_TOKEN:-}" ]; then echo "::error::REGISTRY_TOKEN nao definido. A imagem privada nao pode ser usada." exit 1 fi echo "${REGISTRY_TOKEN}" | docker login "${REGISTRY}" -u "${REGISTRY_USER:-$ACTOR}" --password-stdin - name: Aplicar migrations municipais env: AMBIENTE: ${{ inputs.ambiente }} VERSAO: ${{ inputs.versao }} MUNICIPIOS: ${{ inputs.municipios }} run: | set -euo pipefail chmod +x docker/deploy/migrate.sh ./docker/deploy/migrate.sh \ "${AMBIENTE}" \ "${VERSAO}" \ "${MUNICIPIOS}" - name: Resumo if: always() run: | { echo "### Migrations" echo "" echo "| Campo | Valor |" echo "| --- | --- |" echo "| Ambiente | \`${{ inputs.ambiente }}\` |" echo "| Versao | \`${{ inputs.versao }}\` |" echo "| Municipios | \`${{ inputs.municipios }}\` |" echo "| Acionado por | \`${{ github.actor }}\` |" echo "| Resultado | \`${{ job.status }}\` |" echo "" echo "A execucao para no primeiro municipio com falha. Bancos anteriores" echo "podem ja ter recebido migrations e exigem verificacao antes de repetir." } >> "$GITHUB_STEP_SUMMARY" - name: Limpeza if: always() run: docker logout "${REGISTRY}" 2>/dev/null || true