Conn2Flow
Navegação das docs

SDD

req-048: Consolidação dos Workflows do GitHub Actions (Testes + Release)

Este lote de trabalho (BATCH-048) define as modificações necessárias para consolidar o pipeline de CI/CD em um único arquivo de workflow. O objetivo é unificar o validador de…

Este lote de trabalho (BATCH-048) define as modificações necessárias para consolidar o pipeline de CI/CD em um único arquivo de workflow. O objetivo é unificar o validador de testes e o publicador de releases em .github/workflows/release-gestor.yml, fazendo com que a publicação da release dependa obrigatoriamente do sucesso da execução dos testes, e remover o arquivo de testes individual.


1. Ações Requeridas

1.1 Deletar Arquivo: .github/workflows/run-tests.yml

  • Ação: O arquivo .github/workflows/run-tests.yml deve ser removido/excluído permanentemente do repositório para evitar execuções duplicadas e independentes de testes.

1.2 Modificar Arquivo: .github/workflows/release-gestor.yml

  • Ação: Substituir o conteúdo completo do arquivo pelo código consolidado abaixo. Esta versão:

    1. Define o gatilho apenas para tags de versão gestor-v*.

    2. Executa o job test (configurando ambiente, banco MySQL, PHPUnit, Vitest e Playwright).

    3. Executa o job release apenas se o job test passar (needs: test).

Conteúdo Consolidado do .github/workflows/release-gestor.yml:

name: Release Gestor
on:
  push:
    tags:
      - 'gestor-v*'
permissions:
  contents: write
jobs:
  test:
    runs-on: ubuntu-latest
    services:
      mysql:
        image: mysql:8.0
        env:
          MYSQL_ROOT_PASSWORD: root123
          MYSQL_DATABASE: conn2flow_test
          MYSQL_USER: conn2flow_user
          MYSQL_PASSWORD: conn2flow_pass
        ports:
          - 3306:3306
        options: >-
          --health-cmd="mysqladmin ping -h [REDACTED] -uroot -proot123"
          --health-interval=10s
          --health-timeout=5s
          --health-retries=10
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.4'
          extensions: dom, json, libxml, mbstring, mysqli, pdo_mysql, openssl, tokenizer, xml, xmlwriter
          coverage: none
      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: '22'
          cache: npm
      - name: Install Node dependencies
        run: npm ci
      - name: Install PHP test dependencies
        run: composer install --no-interaction --prefer-dist
      - name: Install gestor runtime dependencies
        run: composer install --working-dir=gestor --no-dev --no-interaction --prefer-dist
      - name: Prepare test environment
        run: |
          mkdir -p gestor/autenticacoes/localhost
          cat > gestor/autenticacoes/localhost/.env <<'EOF'
          DB_CONNECTION=mysqli
          DB_HOST=[REDACTED]
          DB_DATABASE=conn2flow_test
          DB_USERNAME=conn2flow_user
          DB_PASSWORD=conn2flow_pass
          LANGUAGE_DEFAULT=pt-br
          LANGUAGES=pt-br,en
          SESSION_AUTHNAME=_C2F_TEST_SID
          COOKIE_AUTHNAME=_C2F_TEST_CID
          COOKIE_VERIFY=_C2F_TEST_VID
          LANGUAGE_COOKIE=_C2F_TEST_LANG
          OPENSSL_PASSWORD=conn2flow-tests
          USUARIO_HASH_PASSWORD=conn2flow-tests
          EOF
      - name: Run Phinx migrations
        run: php gestor/vendor/bin/phinx migrate -c gestor/phinx.php -e gestor
      - name: Run PHPUnit
        run: composer test
        env:
          CONN2FLOW_TEST_BOOTSTRAP_CONFIG: '1'
          CONN2FLOW_RUN_DB_TESTS: '1'
      - name: Run Vitest
        run: npm run test
      - name: Install Playwright browser
        run: npx playwright install --with-deps chromium
      - name: Run Playwright
        run: npm run test:e2e
  release:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.2'
          extensions: zip, curl, mbstring, openssl
      - name: Install Composer dependencies
        run: |
          cd gestor
          composer install --no-dev --optimize-autoloader --no-interaction
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
      - name: Compile Tailwind CSS
        run: |
          npm install tailwindcss @tailwindcss/cli
          ./node_modules/.bin/tailwindcss -i ./gestor/assets/tailwindcss/system-input.css -o ./gestor/assets/tailwindcss/system-output.css --minify
      - name: Generate Resources Updates
        run: |
          cd gestor/controladores/agents/arquitetura
          php atualizacao-dados-recursos.php
          echo "Resource updates generated successfully"
      - name: Commit Resources Updates
        run: |
          git config --local user.email "[REDACTED]"
          git config --local user.name "GitHub Action"
          git add gestor/db/data/*.json
          git add gestor/db/orphans/*.json
          git add gestor/resources/*
          git add gestor/modulos/*/*.json
          git add gestor/assets/tailwindcss/*.css
          git diff --cached --quiet || git commit -m "Auto-update resources for release ${{ github.ref_name }}"
      - name: Remove resource files
        run: |
          # Remove all resource files and directory to make installation lighter
          rm -rf gestor/resources/ && rmdir gestor/resources/ 2>/dev/null || true
          # Remove module resource files recursively
          find gestor/modulos -type d -name "resources" -exec rm -rf {} + || true
          # Remove temporary npm files from Tailwind compilation
          rm -rf gestor/node_modules/ gestor/package.json gestor/package-lock.json node_modules/ package.json package-lock.json || true
          echo "All resource files removed from release"
      - name: Create gestor.zip + checksum
        run: |
          # Remove arquivos desnecessários se existirem
          rm -rf gestor/.git* || true
          rm -rf gestor/vendor/bin/.phpunit* || true
          rm -rf gestor/vendor/composer/tmp-* || true
          # Remover somente .env sensíveis da raiz (preservar templates em autenticacoes.exemplo)
          find gestor -maxdepth 1 -type f -name '.env*' -exec rm -f {} + 2>/dev/null || true
          # Remover .env internos reais de autenticacoes, exceto os de templates
          if [ -d gestor/autenticacoes ]; then
            find gestor/autenticacoes -type f -name '.env*' -not -path '*/autenticacoes.exemplo/*' -exec rm -f {} + 2>/dev/null || true
          fi
          # Criar o arquivo ZIP (resource files already removed)
          cd gestor
          zip -r ../gestor.zip . \
            -x "*.git*" \
            -x "vendor/bin/.phpunit*" \
            -x "vendor/composer/tmp-*" \
            -x "node_modules/*" \
            -x "*.DS_Store*" \
            -x "*.log*" \
            -x "tests/*" \
            -x "phpunit.xml*" \
            -x "resources/*" \
            -x "modulos/*/resources/*"
          cd ..
          sha256sum gestor.zip | awk '{print $1}' > gestor.zip.sha256
      - name: Get tag name
        id: tag
        run: echo "TAG_NAME=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
      - name: Create Release
        id: create_release
        uses: softprops/action-gh-release@v2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ steps.tag.outputs.TAG_NAME }}
          name: "Gestor ${{ steps.tag.outputs.TAG_NAME }}"
          make_latest: true
          body: |
            ## ? Conn2Flow Gestor Release v2.9.0 (Editor Visual Avançado + 2FA e Passwordless + Chaves de API + Suíte de Testes + Publicador Índice)
            Esta versão traz uma grande evolução no **Editor HTML Visual** com novas ferramentas de formatação, D&D interativo e clipboard interno, a adição de recursos modernos de **Autenticação e Segurança (2FA e Login Sem Senha OTP)**, gerenciador de **Chaves de API** com perfis, o módulo **Publicador Índice** enriquecido com curadoria manual e busca Unicode, e a integração nativa de uma **Suíte de Testes Automatizados (PHPUnit, Vitest, Playwright)** no pipeline.
            ### ? Novidades Principais desta Versão:
            - ✅ **Editor HTML Visual Avançado**: Painel styler expandido com 20 grupos de formatação, paletas de cores circulares, D&D com placeholders piscantes e ghost follower de cursor, clipboard integrado (Copiar/Colar e atalhos Ctrl+C/V), ferramenta Embrulhar (Wrap) e visualizador real de widgets via AJAX.
            - ✅ **Segurança e 2FA**: Autenticação de Dois Fatores (2FA) nativa via aplicativos autenticadores (TOTP) e e-mail, e login sem senha (OTP) via e-mail direto.
            - ✅ **Gerenciador de Chaves de API**: Geração de chaves de API com perfis de acesso restritos e proteção opcional por 2FA.
            - ✅ **Assistente OAuth**: Guia interativo passo a passo para configuração das chaves de integrações Google, Facebook, Apple e GitHub.
            - ✅ **Publicador Índice Avançado**: Curadoria e ordenação manual de itens, busca inteligente imune a acentuação Unicode, contador dinâmico de métricas de paginação e prefixagem dinâmica de URL raiz em imagens.
            - ✅ **Suíte de Testes Nativa**: Integração de suíte de testes de backend (PHPUnit), frontend (Vitest) e ponta-a-ponta (Playwright) com execuções automáticas no GitHub Actions.
            - ✅ **Refatoração e Modularização**: Migração de 26 funções de simulação do editor para o arquivo independente `html-editor-modules.js`.
          draft: false
          prerelease: false
          files: |
            gestor.zip
            gestor.zip.sha256

2. Verificação de Sucesso para o Executor

  1. Confirmar que o arquivo .github/workflows/run-tests.yml foi excluído do disco.

  2. Validar que o conteúdo do .github/workflows/release-gestor.yml está idêntico ao código unificado acima.

  3. Não realizar commits ou pushes (o envio e disparo do pipeline serão coordenados pelo operador principal).

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