Conn2Flow
Navegação das docs

SDD

req-136: Desacoplamento da Limpeza de Releases Antigas dos Scripts Locais e Migração Pós-Sucesso para o GitHub Actions

A arquitetura correta e resiliente consiste em: - No ambiente local: Apenas incrementar a versão, compilar recursos, comitar e enviar a nova tag de forma atômica (git push origin…

Descrição do Problema / Contexto

Atualmente, os scripts locais de release (release.sh, release-installer.sh, etc.) realizam a exclusão de tags e releases antigas da mesma série (gestor-vX.Y.*) antes de criar e publicar a nova versão:

# Comportamento antigo no release.sh
OLD_TAGS=$(git tag --list "$OLD_TAG_PATTERN")
if [ -n "$OLD_TAGS" ]; then
  for tag in $OLD_TAGS; do
    git tag -d "$tag"
    git push --delete origin "$tag"
    gh release delete "$tag" --yes
  done
fi

Problemas identificados:

  1. Falta de Segurança / Atomicidade (Fail-Safe): Se a compilação local, o empacotamento ou os testes automatizados do CI falharem no meio do caminho, a release anterior já foi excluída, deixando o repositório sem uma release válida para consumo e download.

  2. Race Conditions e Throttling no GitHub: Deletar tags remotas via API milissegundos antes de enviar um novo push de tag com o mesmo prefixo faz com que a fila de eventos de webhooks do GitHub descarte ou atrase o disparo do GitHub Actions.

A arquitetura correta e resiliente consiste em:

  • No ambiente local: Apenas incrementar a versão, compilar recursos, comitar e enviar a nova tag de forma atômica (git push origin main "gestor-v$NEW_VERSION").

  • No GitHub Actions: Executar a limpeza de releases e tags intermediárias da mesma série como uma etapa final da esteira, protegida pela condição if: success() (executada apenas após a nova release ser compilada, testada e publicada com 100% de sucesso).


Escopo Detalhado das Alterações

1. Limpeza dos Scripts Shell Locais

Remover o bloco de pré-exclusão de tags/releases antigas nos seguintes arquivos:

  • ai-workspace/en/scripts/releases/release.sh

  • ai-workspace/pt-br/scripts/releases/release.sh

  • ai-workspace/en/scripts/releases/release-installer.sh

  • ai-workspace/pt-br/scripts/releases/release-instalador.sh

  • dev-plugins/templates/environment/scripts/releases/release.sh

Garantir que o push local envie a branch e a nova tag de forma unificada e atômica.


2. Adição da Etapa de Faxina Pós-Sucesso no GitHub Actions

Adicionar o step Clean up older tags and releases in the same series com if: success() nos seguintes workflows:

  • .github/workflows/release-gestor.yml (logo após o step Create Release)

  • .github/workflows/release-instalador.yml (logo após o step Create Release)

Lógica do Step:

      - name: Clean up older tags and releases in the same series
        if: success()
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          CURRENT_TAG="${{ steps.tag.outputs.TAG_NAME }}"
          SERIES=$(echo "$CURRENT_TAG" | grep -o '^[a-z]\+-v[0-9]\+\.[0-9]\+')
          echo "Cleaning up older releases and tags in series $SERIES (preserving $CURRENT_TAG)..."
          # Lista todas as tags da mesma série, exceto a tag recém-publicada
          OLD_TAGS=$(git tag --list "${SERIES}.*" | grep -v "^${CURRENT_TAG}$" || true)
          for tag in $OLD_TAGS; do
            if [ -n "$tag" ]; then
              echo "Removing older release and tag: $tag"
              gh release delete "$tag" --yes 2>/dev/null || true
              git push origin --delete "$tag" 2>/dev/null || true
            fi
          done

Critérios de Aceite e Validação

  1. bash -n limpo em todos os scripts shell (release.sh, release-installer.sh, etc.).

  2. Sintaxe YAML dos workflows validada.

  3. Se um release falhar nos testes no GitHub Actions, nenhuma tag ou release anterior é removida.

  4. Se o release for bem-sucedido, as versões intermediárias anteriores da mesma série são limpas automaticamente pela esteira de CI.

O Futuro é Híbrido: Humano + IA.

O Conn2Flow é a ferramenta. Se você precisa do Arquiteto para desenhar a estratégia da sua empresa usando essa tecnologia...

Contrate Consultoria Especializada