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.ymldeve 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:
-
Define o gatilho apenas para tags de versão
gestor-v*. -
Executa o job
test(configurando ambiente, banco MySQL, PHPUnit, Vitest e Playwright). -
Executa o job
releaseapenas se o jobtestpassar (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.sha2562. Verificação de Sucesso para o Executor
-
Confirmar que o arquivo
.github/workflows/run-tests.ymlfoi excluído do disco. -
Validar que o conteúdo do
.github/workflows/release-gestor.ymlestá idêntico ao código unificado acima. -
Não realizar commits ou pushes (o envio e disparo do pipeline serão coordenados pelo operador principal).