name: deploy # Implanta uma imagem ja publicada. Nao constroi nada: a tag de release e o # artefato formal, construido quando ela e criada e escolhido explicitamente # para cada deploy. # # Producao nunca sobe sozinha: exige acionamento manual, com a versao escolhida. on: workflow_dispatch: inputs: ambiente: description: 'Ambiente de destino' required: true type: choice options: - teste - homolog - prod versao: description: 'Tag da imagem (ex.: 2.59.3, feat_ci_cd_test)' required: true type: string jobs: deploy: 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: 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. O pull da imagem privada depende dele." exit 1 fi echo "${REGISTRY_TOKEN}" | docker login "${REGISTRY}" -u "${REGISTRY_USER:-$ACTOR}" --password-stdin - name: Confirmar que a imagem existe antes de mexer no ambiente run: | set -euo pipefail IMG="${REGISTRY}/${IMAGE_NAME}:${{ inputs.versao }}" # O registry interno usa HTTP. `docker manifest inspect` faz uma # consulta direta ao registry e pode ignorar a configuracao de # insecure-registry do daemon, retornando falso negativo. `pull` # e a mesma operacao que sera necessaria no deploy e respeita essa # configuracao, alem de manter a mensagem de erro original no log. echo "validando e baixando imagem: ${IMG}" docker pull "${IMG}" echo "imagem encontrada: ${IMG}" - name: Deploy env: AMBIENTE: ${{ inputs.ambiente }} VERSAO: ${{ inputs.versao }} SSH_HOST: ${{ vars.TEST_SSH_HOST || '192.168.0.44' }} SSH_PORT: ${{ vars.TEST_SSH_PORT || '22' }} SSH_USER: ${{ vars.SSH_USER_TEST || secrets.SSH_USER_TEST }} SSH_PRIVATE_KEY: ${{ secrets.SSH_KEY_TEST }} SSH_KNOWN_HOSTS: ${{ secrets.SSH_KNOWN_HOSTS_TEST || secrets.SSH_KNOWN_HOST_TEST }} REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} REGISTRY_USER: ${{ vars.REGISTRY_USER }} ACTOR: ${{ github.actor }} run: | set -euo pipefail if [ "${AMBIENTE}" = "teste" ]; then echo "Deploy de teste usa SSH para ${SSH_HOST}:${SSH_PORT}." chmod +x docker/deploy/deploy-over-ssh.sh ./docker/deploy/deploy-over-ssh.sh "${AMBIENTE}" "${VERSAO}" else chmod +x docker/deploy/deploy.sh ./docker/deploy/deploy.sh "${AMBIENTE}" "${VERSAO}" fi - name: Resumo if: always() run: | { echo "### Deploy" echo "" echo "| Campo | Valor |" echo "| --- | --- |" echo "| Ambiente | \`${{ inputs.ambiente }}\` |" echo "| Versao | \`${{ inputs.versao }}\` |" echo "| Acionado por | \`${{ github.actor }}\` |" echo "| Resultado | \`${{ job.status }}\` |" echo "" echo "O deploy so troca a imagem. Migrations continuam sendo passo" echo "separado e deliberado — ver \`docker/README.md\`." } >> "$GITHUB_STEP_SUMMARY" - name: Limpeza if: always() run: docker logout "${REGISTRY}" 2>/dev/null || true