Skip to content

Ajustar Pipelines - Nephos#28

Merged
elvysmarcos merged 39 commits intomainfrom
FT/592417
Apr 2, 2026
Merged

Ajustar Pipelines - Nephos#28
elvysmarcos merged 39 commits intomainfrom
FT/592417

Conversation

@maurocsjr
Copy link
Copy Markdown
Contributor

Objetivo: unificar pipelines (teste, build, codereview e sonar) manter em uma única pipeline.

Enhanced pipeline modularity with distinct stages: Build, Test, CodeReview, SonarQube, and Publish.
Updated package versions for nephos-pages, nephos-utils, and nephos-layout.
This ensures alignment with the latest changes and maintains peer dependency compatibility.
Updated test configurations for NephosDirective, ErrorService, and LayoutCompactComponent.
Enhanced test cases with necessary providers, imports, and a host component for better accuracy.
Added `--project` flag to test commands in Azure Pipelines for nephos-pages, nephos-utils, and nephos-layout.
This ensures tests are properly scoped to their respective projects, improving reliability and accuracy.
Updated branch and path triggers in Azure Pipelines for nephos-pages, nephos-utils, and nephos-layout.
This enables pipeline execution for `Release/*` and `Hotfix/*` branches while expanding path inclusions.
Removed path filters from Azure Pipelines for nephos-pages, nephos-utils, and nephos-layout.
This simplifies the pipeline configuration, relying solely on branch-based triggers.
Revised the custom build command to 'run build' for better alignment with project setup.
Updated publish location to ensure consistency in container artifact publishing.
Modified the custom build command to include `--project stage` for better environment targeting.
This ensures the build process aligns with the staging configuration.
Added necessary imports, declarations, and providers to spec files for better test accuracy.
Updated tests in `AppComponent` to validate the router outlet instead of static content.
Refined Azure Pipelines commands for consistent build and artifact publishing.
Revised SCSS and tsconfig.json paths to reference project directories directly.
This simplifies local development and ensures proper module resolution for nephos projects.
Revised PR URL generation logic to handle missing metadata more gracefully.
Ensures proper fallback and validation of Azure DevOps pipeline variables.
Replaced Azure DevOps PR metadata with GitHub metadata across pipelines.
Updated PR URL generation to accommodate GitHub-specific variables.
Replaced the install script URL in pipelines to reflect the new branch path.
Ensures the updated CR process for GitHub is used during Copilot CLI installation.
To validate PR of Bearean repo in Github
Replaced the install script URL in pipelines to reflect the `main` branch path.
This ensures the Copilot CLI and Berean installation uses the latest validated version.
Configured Karma for unit testing with a new `karma.conf.js` file.
Added `karma-junit-reporter` to dependencies for XML test result reporting.
Updated `angular.json` to reference the new Karma configuration.
Added `coverageReportDirectory` variable for better organization of coverage artifacts.
Updated pipelines to include detailed coverage reporting and publish configuration.
Added `BEREAN_VERBOSE` environment variable to pipeline configuration.
This enables detailed Berean output during the pipeline execution for better debugging.
@maurocsjr maurocsjr self-assigned this Mar 31, 2026
maurocsjr and others added 6 commits April 1, 2026 13:24
Removed `--inline` flag and `BEREAN_VERBOSE` from pipeline configurations.
This simplifies the Berean execution flow and aligns with the updated review process.
Upgraded Angular dependencies to version 21.2.6 for compatibility and bug fixes.
Aligned peer dependencies and updated related packages in nephos projects.
Revised project-specific configurations and paths for better build performance.
Updated cache keys to include `package-lock.json` for better cache precision.
Replaced `npm install` with `npm ci` commands for consistent dependency installations.
Standardized cache key paths to include `Build.SourcesDirectory` across pipeline YAML files.
Added a condition to skip NPM install when the cache is restored, optimizing pipeline execution.
Removed redundant cache tasks for `node_modules` and Angular builds from pipeline configurations.
Simplifies and standardizes the pipeline while reducing potential inconsistencies.
Replaced 'custom ci' with 'install' for NPM tasks across pipeline configurations.
This change ensures consistency and adheres to NPM best practices for dependency installation.
@iatecbr iatecbr deleted a comment from mosesaianalyst Apr 1, 2026
Introduced `BEREAN_VERBOSE` environment variable to the pipeline setup.
This provides detailed log output during pipeline execution for better traceability.
Added `COPILOT_GITHUB_TOKEN` to pipeline configurations for Nephos projects.
This ensures proper authentication for Copilot CLI in pipeline executions across environments.
Added `ChromeHeadlessCI` launcher to support CI-specific test environments.
Updated pipeline configurations to use `ChromeHeadlessCI` for consistency.
Ignored generated test result files (`TESTS-*.xml`) in the `.gitignore` file.
Relocated `preloading.css` from `angular.json` to `index.html`.
This improves build configuration by keeping assets tightly coupled with their usage.
@mosesaianalyst
Copy link
Copy Markdown
Collaborator

🔍 AI Code Review

Summary

Este PR unifica os pipelines de CI/CD (build, test, code review e SonarQube) em uma pipeline multi-estágio por biblioteca, adiciona um karma.conf.js centralizado para execução de testes em CI com ChromeHeadlessCI e relatórios JUnit/Cobertura, migra componentes para standalone e atualiza Angular e dependências para 21.2.6. As mudanças são bem estruturadas e os testes foram corretamente adaptados com providers e padrões adequados.

✅💡 Recommendation: APPROVE WITH SUGGESTIONS

Issues Found

projects/stage/src/app/templates/nephos/component/nephos-template.component.spec.ts

🔵 SUGGESTION [maintainability] (77%) — linha 13
overrideComponent com template vazio ignora a compilação do template
O uso de overrideComponent com template: '' faz o teste passar, mas impede a validação de que o template do componente real compila corretamente. Erros de template só seriam descobertos em tempo de execução ou em testes de integração. Se o objetivo é evitar dependências pesadas do template, considere mockar os componentes filhos individualmente com NO_ERRORS_SCHEMA ou declarando stubs, preservando a compilação do template original.

✅ Good Practices

  • Configuração correta do ChromeHeadlessCI com flags necessárias para CI (--no-sandbox, --disable-dev-shm-usage, --disable-gpu)
  • Uso de process.env.JUNIT_REPORT_FILE com valor padrão no karma.conf.js permite customização sem alterar o arquivo de configuração
  • Adição de karma-junit-reporter e configuração de PublishTestResults@2 e PublishCodeCoverageResults@2 integra bem os resultados de teste e cobertura no Azure DevOps
  • Pipeline verifica a existência de package-lock.json e usa npm ci quando disponível, garantindo builds determinísticos
  • Migração correta dos componentes de standalone: false para standalone: true com imports explícitos e remoção de declarations no NgModule
  • Testes de serviços e componentes foram corretamente atualizados com providers mockados realistas em vez de objetos vazios
  • Padrão de teste para diretivas com TestHostComponent segue as boas práticas da arquitetura IATec
  • tsconfig.json atualizado para apontar para os fontes dos projetos (src/public-api.ts) em vez dos artefatos do dist, simplificando o ciclo de desenvolvimento local
  • Adição de condition: succeededOrFailed() nas tarefas de publicação de resultados garante que os resultados sejam publicados mesmo em caso de falhas nos testes
  • Estrutura de estágios separados (Build → Test → CodeReview/SonarQube) com dependsOn correto garante ordem de execução adequada

💡 Recommendations

  • Considerar definir explicitamente a variável de ambiente JUNIT_REPORT_FILE nos passos de 'Run tests' das pipelines de biblioteca para tornar o nome do arquivo de saída explícito e rastreável, mesmo que o valor padrão funcione
  • O reporter kjhtml está incluído na lista de reporters do karma.conf.js — esse reporter é voltado para uso interativo no browser. Em ambientes CI ele não causa falhas, mas é desnecessário; pode ser removido da lista ou condicionado ao ambiente não-CI
  • Para os estágios de Test nas pipelines de biblioteca, considerar adicionar --reporters=junit explicitamente no customCommand ou garantir que o arquivo karma.conf.js seja encontrado, já que o workingDir do passo 'Run tests' não está definido e pode não usar o diretório raiz

Generated by Berean 🔍

@mosesaianalyst
Copy link
Copy Markdown
Collaborator

🔍 AI Code Review

Summary

Este PR unifica os pipelines de CI/CD (teste, build, code review e SonarQube) em um único arquivo YAML por projeto, adiciona configuração centralizada do Karma com suporte a ChromeHeadlessCI, JUnit e cobertura de código (Cobertura), converte componentes de standalone: false para standalone: true, atualiza dependências Angular de 21.0.x para 21.2.6 e redireciona os paths do TypeScript para os fontes ao invés de dist. As mudanças são bem estruturadas e alcançam o objetivo declarado da PR.

✅💡 Recommendation: APPROVE WITH SUGGESTIONS

Issues Found

projects/iatec/nephos-layout/package.json

🟡 WARNING [data-integrity] (88%) — linha 5
peerDependency fixada em versão de patch desnecessariamente restritiva
A peerDependency foi alterada de >=21.0.0 para >=21.2.6. Isso quebra a compatibilidade para consumidores da biblioteca que utilizam Angular 21.0.x ou 21.1.x sem nenhum motivo técnico aparente relacionado à API pública da biblioteca. Em bibliotecas publicadas no npm, o peerDependency deve refletir a versão mínima com a qual a biblioteca é de fato incompatível. Se não há uso de APIs introduzidas exclusivamente em 21.2.6, o range >=21.0.0 deveria ser mantido.

    "@angular/common": ">=21.0.0",
    "@angular/core": ">=21.0.0",

projects/iatec/nephos-pages/package.json

🟡 WARNING [data-integrity] (88%) — linha 5
peerDependency fixada em versão de patch desnecessariamente restritiva
Mesma situação que em nephos-layout: a peerDependency foi restringida de >=21.0.0 para >=21.2.6, o que pode impedir consumidores em Angular 21.0.x ou 21.1.x de instalarem a biblioteca sem warnings/erros de peer.

    "@angular/common": ">=21.0.0",
    "@angular/core": ">=21.0.0"

projects/iatec/nephos-utils/package.json

🟡 WARNING [data-integrity] (88%) — linha 5
peerDependency fixada em versão de patch desnecessariamente restritiva
Mesma situação que nas demais bibliotecas: >=21.2.6 restringe desnecessariamente consumidores em versões anteriores do Angular 21.x. O range >=21.0.0 é mais adequado para manter compatibilidade semântica.

    "@angular/common": ">=21.0.0",
    "@angular/core": ">=21.0.0",

karma.conf.js

🔵 SUGGESTION [maintainability] (78%) — linha 44
Reporter kjhtml desnecessário em ambiente de CI
O reporter kjhtml (karma-jasmine-html-reporter) gera um relatório HTML interativo destinado ao uso no navegador em modo de desenvolvimento. Em execuções de CI com ChromeHeadlessCI, ele é processado mas seu output nunca é consumido, adicionando overhead desnecessário. Para CI, somente progress e junit são relevantes. Considere condicioná-lo ao ambiente, da mesma forma que é feito com o browser.

        reporters: [process.env.CI ? 'progress' : 'progress', process.env.CI ? 'junit' : 'kjhtml', 'junit'].filter((v, i, a) => a.indexOf(v) === i && !(process.env.CI && v === 'kjhtml'),

✅ Good Practices

  • Padrão correto de host component para testar directives Angular (TestHostComponent com @ViewChild), seguindo as diretrizes do projeto
  • Uso de succeededOrFailed() nas tarefas de publicação de resultados de testes e cobertura garante que os relatórios sejam publicados mesmo quando os testes falham
  • Configuração ChromeHeadlessCI com --no-sandbox --disable-dev-shm-usage --disable-gpu é adequada para ambientes de CI em Linux
  • Instalação condicional com npm ci (quando package-lock.json existe) ou npm install é uma boa prática para ambientes de CI
  • Adição de karma-junit-reporter ao package.json com a entrada correspondente no .gitignore para os arquivos gerados demonstra cuidado com o estado do repositório
  • A conversão dos componentes para standalone: true está alinhada com a arquitetura IATec que preconiza standalone components sem NgModules
  • Paths do tsconfig.json apontando para os fontes dos projetos ao invés de dist melhora a experiência de desenvolvimento no monorepo, evitando a necessidade de pré-build das bibliotecas
  • Parâmetros RUN_SONAR e RUN_TEST com defaults sensatos permitem execução manual seletiva nos pipelines
  • A lógica de stages com dependsOn e conditions está correta: SonarQube só executa na branch main, garantindo que o artefato de cobertura sempre estará disponível

💡 Recommendations

  • Considere usar jasmine.createSpyObj ao invés de objetos literais inline nos providers de teste (ex: error.service.spec.ts), pois permite verificar se os métodos foram chamados nas asserções futuras
  • O chmod +x para o binário do esbuild está hardcoded para linux-x64. Se o pool de agentes eventualmente incluir arquiteturas ARM, isso falhará. Considere usar find node_modules/@esbuild -name 'esbuild' -type f -exec chmod +x {} \; para maior portabilidade

Generated by Berean 🔍

Comment thread projects/iatec/nephos-layout/package.json Outdated
Comment thread projects/iatec/nephos-pages/package.json Outdated
Comment thread projects/iatec/nephos-utils/package.json Outdated
Comment thread karma.conf.js
Replaced the install script in pipelines with a direct Berean build process.
This improves reliability by cloning the repository, building the code, and executing it directly.
Reduced the minimum required version of `@angular/common` and `@angular/core` to `>=21.0.0`.
This allows compatibility with a wider range of Angular versions, improving flexibility for consumers.
Updated Karma config to conditionally adjust reporters and browsers for CI environments.
This ensures streamlined configurations and better compatibility with CI pipelines.
@mosesaianalyst
Copy link
Copy Markdown
Collaborator

🔍 AI Code Review

Summary

Este PR unifica os pipelines de CI/CD (teste, build, code review e SonarQube) em estágios bem definidos para os três pacotes da biblioteca Nephos e para o projeto stage. Além disso, moderniza a configuração de testes com Karma/Jasmine, adiciona cobertura de código e JUnit reporter, e converte componentes para standalone. O objetivo é bem executado, mas há um bug crítico na configuração do Karma que impedirá a geração de relatórios de cobertura.

⚠️ Recommendation: NEEDS CHANGES

Issues Found

karma.conf.js

🔴 CRITICAL [bug] (98%) — linha 47
Reporter 'coverage' ausente no array reporters — cobertura nunca será gerada
O plugin karma-coverage está declarado nos plugins e o bloco coverageReporter está configurado corretamente, mas o reporter 'coverage' não foi adicionado ao array reporters. Sem ele, o Karma não aciona o plugin de cobertura e nenhum arquivo é gerado (nem HTML, nem cobertura-coverage.xml). Consequentemente, todas as etapas PublishCodeCoverageResults@2 nos pipelines vão falhar por não encontrar o arquivo de resumo.

        reporters: isCI ? ['progress', 'coverage', 'junit'] : ['progress', 'coverage', 'kjhtml', 'junit'],

✅ Good Practices

  • Uso correto de succeededOrFailed() nas etapas de publicação de resultados, garantindo que relatórios sejam publicados mesmo quando os testes falham
  • Detecção de ambiente via variável CI para alternar entre navegador headless (CI) e Chrome normal (desenvolvimento local)
  • Configuração de múltiplos formatos de cobertura (html, cobertura, text-summary) atendendo tanto à visualização humana quanto à integração com Azure DevOps e SonarQube
  • Uso de npm ci quando package-lock.json existe, garantindo builds determinísticos no pipeline principal
  • Adição de karma-junit-reporter e configuração do junitReporter com suporte a JUNIT_REPORT_FILE via variável de ambiente, permitindo flexibilidade sem alterar o arquivo de configuração
  • Correção dos testes de componentes e serviços para fornecer os providers necessários (MessageService, ConfirmationService, Router, TranslocoService), tornando os testes mais realistas e independentes
  • Modernização dos componentes EmptyComponent e HeaderComponent de standalone: false para standalone: true, alinhando com o padrão arquitetural IATec de componentes sem NgModules
  • Reescrita do teste da NephosDirective substituindo instanciação direta por TestBed com um HostComponent, abordagem correta para diretivas que dependem de injeção de dependência do Angular
  • Uso de overrideComponent para substituir o template em testes complexos como NephosTemplateComponent, evitando dependências transitivas difíceis de mockar
  • Alinhamento do tsconfig.json para apontar para os fontes locais (projects/) em vez de dist/, eliminando a necessidade de build prévio das bibliotecas durante o desenvolvimento
  • Pipelines das bibliotecas bem estruturados com estágios separados (Build → Test → CodeReview → SonarQube) com condições de execução adequadas para PRs, branches main e hotfix

💡 Recommendations

  • Considerar fixar a versão do repositório externo IATec.AI.WorkFlow.Review.Berean nos pipelines de CodeReview (usando --branch <tag> no git clone) para garantir builds determinísticos e evitar quebras por mudanças no repositório externo
  • Considerar definir a variável de ambiente JUNIT_REPORT_FILE por projeto nos pipelines das bibliotecas para facilitar diagnóstico caso múltiplos projetos sejam testados no mesmo workspace futuramente

Generated by Berean 🔍

Comment thread karma.conf.js Outdated
@mosesaianalyst
Copy link
Copy Markdown
Collaborator

🔍 AI Code Review

Summary

Este PR unifica as pipelines CI/CD (teste, build, code review e sonar) em uma única pipeline por biblioteca, adiciona o arquivo karma.conf.js para configuração centralizada dos testes, corrige specs de componentes e serviços Angular com providers ausentes, e atualiza os paths do TypeScript para apontar ao código-fonte em vez do diretório dist. As mudanças são bem estruturadas, seguem os padrões da arquitetura IATec e resolvem corretamente os problemas de testes quebrados.

✅💡 Recommendation: APPROVE WITH SUGGESTIONS

Issues Found

projects/iatec/nephos-layout/azure-pipelines.yml

🟡 WARNING [security] (87%) — linha 174
Clone de repositório externo sem versão fixada no CI
O stage CodeReview clona o repositório 'IATec.AI.WorkFlow.Review.Berean' diretamente da branch padrão sem fixar um commit SHA ou tag específica. Isso representa um risco de supply chain: qualquer commit no repositório clonado será executado automaticamente nos pipelines CI. Use --branch <tag> --depth 1 no clone ou adicione um git checkout <SHA> logo após para garantir builds reproduzíveis e seguros. O mesmo padrão se aplica a nephos-pages/azure-pipelines.yml e nephos-utils/azure-pipelines.yml.

              git clone --depth 1 https://github.com/iatecbr/IATec.AI.WorkFlow.Review.Berean.git "$BEREAN_DIR"

karma.conf.js

🔵 SUGGESTION [maintainability] (78%) — linha 47
Reporter junit ativo em modo local gera arquivos XML desnecessários
A configuração de reporters inclui 'junit' tanto no modo CI quanto no modo local (não-CI). Isso faz com que cada execução de npm test durante o desenvolvimento gere um arquivo TESTS-results.xml na raiz do projeto. Embora o arquivo esteja corretamente no .gitignore, pode causar ruído no diretório de trabalho. Considere remover o reporter 'junit' do modo local.

        reporters: isCI ? ['progress', 'junit'] : ['progress', 'kjhtml'],

✅ Good Practices

  • Uso correto de npm ci quando existe package-lock.json, garantindo builds determinísticos no pipeline raiz
  • Configuração ChromeHeadlessCI com flags --no-sandbox, --disable-dev-shm-usage e --disable-gpu segue o padrão recomendado para execução em containers Linux
  • Uso de condition: succeededOrFailed() nos steps de publicação garante que relatórios de testes e cobertura sejam publicados mesmo quando os testes falham
  • Refatoração correta dos specs: host component para testar diretivas, providers adequados mockados para serviços com dependências externas (Router, MessageService, TranslocoService)
  • Migração consistente de standalone: false para standalone: true nos componentes EmptyComponent e HeaderComponent, com atualização correspondente no NgModule (declarations → imports)
  • Atualização dos paths no tsconfig.json para apontar ao código-fonte elimina a necessidade de build prévia durante o desenvolvimento local
  • Pipeline estruturada em estágios claros (Build → Test → CodeReview → SonarQube) com dependências e condições bem definidas por stage
  • Uso de JUNIT_REPORT_FILE como variável de ambiente no karma.conf.js permite customização flexível do nome do arquivo de relatório por projeto

💡 Recommendations

  • Nos pipelines das bibliotecas, considere definir JUNIT_REPORT_FILE como variável de ambiente no step de teste incluindo o nome do projeto (ex: TESTS-nephos-layout.xml) para facilitar rastreabilidade caso múltiplos projetos sejam testados no mesmo workspace
  • O parâmetro RUN_TEST tem default false, mas os testes já são executados automaticamente em PRs e na branch main pela condição do stage — considere documentar esse comportamento no displayName ou em um comentário YAML para evitar confusão

Generated by Berean 🔍

Comment thread projects/iatec/nephos-layout/azure-pipelines.yml
Injected necessary providers and mock implementations in the test setup.
This improves accuracy and ensures coverage for `TopbarComponent` dependencies.
@mosesaianalyst
Copy link
Copy Markdown
Collaborator

🔍 AI Code Review

Summary

Este PR unifica os pipelines de CI/CD (teste, build, code review e SonarQube) em um único arquivo por projeto, atualiza dependências Angular de 21.0.x para 21.2.6, adiciona karma.conf.js centralizado com suporte a cobertura e relatórios JUnit, e corrige testes unitários com injeção de dependências adequada. As mudanças são bem estruturadas e seguem os padrões da arquitetura IATec (standalone components, TestBed com providers corretos, host components para diretivas).

✅💡 Recommendation: APPROVE WITH SUGGESTIONS

Issues Found

karma.conf.js

🔵 SUGGESTION [maintainability] (82%) — linha 45
Reporter JUnit ativado mesmo fora de ambiente CI
A propriedade reporters inclui junit tanto no modo CI quanto no modo local (['progress', 'kjhtml', 'junit']). Isso faz com que o arquivo TESTS-results.xml seja gerado a cada execução local de testes. Embora o .gitignore cubra o padrão TESTS-*.xml, gera overhead desnecessário no ambiente de desenvolvimento. O reporter junit deveria ser habilitado apenas quando isCI for verdadeiro.

        reporters: isCI ? ['progress', 'junit'] : ['progress', 'kjhtml'],

✅ Good Practices

  • Uso correto de host component para testar a diretiva NephosDirective, alinhado com as diretrizes do projeto
  • Mocks de serviços bem definidos nos testes de ErrorService e TopbarComponent, isolando dependências externas corretamente
  • Detecção de ambiente CI via process.env.CI no karma.conf.js, permitindo comportamento diferenciado sem hardcode
  • Uso de overrideComponent no NephosTemplateComponent spec para isolar o componente de dependências complexas de template
  • Migração correta de standalone: false + declarations para standalone: true + imports no pages.module.ts
  • Paths do tsconfig.json redirecionados para a source ao invés do dist, eliminando necessidade de build prévio para desenvolvimento
  • Pipeline com estágios bem separados (Build, Test, CodeReview, SonarQube) e condições de execução claras por branch/PR
  • Adição de karma-junit-reporter e suporte à variável JUNIT_REPORT_FILE para flexibilidade no nome do arquivo de relatório
  • Padrão de instalação com npm ci quando package-lock.json existe, garantindo builds reprodutíveis no CI

💡 Recommendations

  • Considerar adicionar o reporter lcov ao coverageReporter no karma.conf.js, pois algumas ferramentas e integrações preferem lcov além de cobertura
  • Avaliar se os estágios CodeReview nos pipelines de biblioteca precisam de dependsOn: Build explícito, pois atualmente podem executar em paralelo com o estágio de teste quando é um PR
  • Padronizar a propriedade workingDir no task Npm@1 de 'Run tests' nos pipelines de biblioteca, para manter consistência com os demais tasks que especificam workingDir: '$(Build.SourcesDirectory)'

Generated by Berean 🔍

@mosesaianalyst
Copy link
Copy Markdown
Collaborator

🔍 AI Code Review

Summary

Esta PR unifica os pipelines de CI/CD (teste, build, code review e SonarQube) em uma única pipeline multi-stage para cada biblioteca Nephos, adiciona uma configuração centralizada do Karma com suporte a CI, corrige os testes para utilizarem injeção de dependência correta e migra componentes do padrão NgModule para standalone. As mudanças são bem estruturadas e seguem os padrões do projeto com Karma + Jasmine.

✅💡 Recommendation: APPROVE WITH SUGGESTIONS

Issues Found

projects/iatec/nephos-layout/azure-pipelines.yml

🟡 WARNING [maintainability] (85%) — linha 67
Pipelines das bibliotecas usam 'npm install' em vez de 'npm ci'
O estágio de Build das pipelines das bibliotecas (nephos-layout, nephos-pages e nephos-utils) utiliza a task Npm@1 com command: 'install', enquanto a pipeline raiz foi atualizada para usar npm ci quando existe um package-lock.json. O npm ci é preferível em CI porque instala exatamente as versões do lockfile, garantindo builds reproduzíveis. Use um script Bash com verificação do lockfile, assim como foi feito na pipeline raiz.

          - task: Bash@3
            displayName: 'Install dependencies'
            inputs:
              targetType: 'inline'
              script: |
                if [ -f "$(Build.SourcesDirectory)/package-lock.json" ]; then
                  npm ci --legacy-peer-deps
                else
                  npm install --legacy-peer-deps
                fi
              workingDirectory: '$(Build.SourcesDirectory)'
            env:
              NPM_CONFIG_USERCONFIG: '$(Build.SourcesDirectory)/.npmrc'

karma.conf.js

🔵 SUGGESTION [maintainability] (78%) — linha 47
Reporter 'coverage' ausente no array reporters
O coverageReporter está configurado, mas o reporter 'coverage' não está presente no array reporters em nenhum dos modos (CI ou local). A geração de relatórios de cobertura funciona via Angular CLI quando --code-coverage é passado (ele injeta o reporter automaticamente), mas se o Karma for executado diretamente sem o Angular CLI, a cobertura não será gerada. Incluir 'coverage' explicitamente torna a configuração autocontida e mais resiliente.

        reporters: isCI ? ['progress', 'coverage', 'junit'] : ['progress', 'coverage', 'kjhtml', 'junit'],

✅ Good Practices

  • Uso correto de npm ci com fallback para npm install na pipeline raiz, garantindo builds mais reproduzíveis em CI
  • Configuração de ChromeHeadlessCI com as flags necessárias (--no-sandbox, --disable-dev-shm-usage, --disable-gpu) para execução segura em agentes containerizados
  • Detecção de ambiente CI via process.env.CI para alternar configurações de browser e reporters automaticamente
  • Migração correta dos componentes EmptyComponent e HeaderComponent de declarations para imports no NgModule, compatível com a mudança para standalone
  • Mocks de dependências nos testes seguem corretamente os padrões do projeto (Jasmine + TestBed com useValue)
  • Publicação de resultados de testes (JUnit) e cobertura (Cobertura) integrada ao pipeline com condition: succeededOrFailed(), garantindo que os resultados sejam publicados mesmo em caso de falha
  • Pipelines das bibliotecas agora possuem estrutura multi-stage unificada (Build → Test → CodeReview → SonarQube), eliminando duplicação e fragmentação
  • Redirecionamento dos caminhos TypeScript de dist/ para projects/src/ no tsconfig.json permite desenvolvimento sem necessidade de build prévio das bibliotecas
  • Uso de overrideComponent com template vazio no teste do NephosTemplateComponent é uma abordagem pragmática para isolar o componente de dependências pesadas de template

💡 Recommendations

  • Padronizar o uso de npm ci (com fallback para npm install) em todas as pipelines, incluindo as das bibliotecas, para garantir consistência nos builds
  • Considerar adicionar limiares de cobertura (thresholds) no coverageReporter do karma.conf.js para enforçar mínimos de cobertura por projeto
  • O parâmetro RUN_TEST tem default: false nas pipelines das bibliotecas, mas o estágio Test já possui uma condição que o executa em PRs e na main. Avaliar se o parâmetro manual ainda é necessário ou pode ser removido para simplificar

Generated by Berean 🔍

Comment thread projects/iatec/nephos-layout/azure-pipelines.yml
Updated Karma config to support both CI environments and improved test result handling.
- Added `TF_BUILD` check for better CI compatibility.
- Updated `junitReporter` output path to organize test results.
- Enabled `coverage` reporter for improved reporting.
- Updated `.gitignore` to include new test results directory.
- Refined Azure Pipelines for publishing test results.
@mosesaianalyst
Copy link
Copy Markdown
Collaborator

🔍 AI Code Review

Summary

Este PR unifica os pipelines de teste, build, code review e SonarQube em um único fluxo estruturado em stages para os projetos Nephos. As mudanças incluem um karma.conf.js centralizado com suporte a CI, correções nas specs de teste (injeção de dependências, componentes standalone), atualização de dependências Angular e migração dos paths TypeScript de dist para src. A abordagem é sólida, mas há dois problemas que merecem atenção antes do merge.

⚠️ Recommendation: NEEDS CHANGES

Issues Found

projects/iatec/nephos-layout/azure-pipelines.yml

🟡 WARNING [bug] (92%) — linha 141
Padrão de busca de resultados de teste não inclui subdiretório
O junitReporter no karma.conf.js configura outputDir: path.join(__dirname, 'test-results'), portanto os arquivos XML são gerados em <raiz>/test-results/TESTS-results.xml. O padrão $(Build.SourcesDirectory)/TESTS-*.xml busca apenas na raiz do repositório, nunca encontrará os arquivos gerados. O pipeline raiz (azure-pipelines.yml) usa corretamente $(Build.SourcesDirectory)/**/TESTS-*.xml com **. Os três pipelines de biblioteca devem seguir o mesmo padrão.

              testResultsFiles: '$(Build.SourcesDirectory)/**/TESTS-*.xml'

projects/iatec/nephos-pages/azure-pipelines.yml

🟡 WARNING [bug] (92%) — linha 141
Padrão de busca de resultados de teste não inclui subdiretório
Mesmo problema: outputDir do karma gera arquivos em test-results/, mas o padrão de busca não utiliza o wildcard ** para descer no subdiretório. Os arquivos XML nunca serão encontrados e os resultados de teste não serão publicados no Azure DevOps.

              testResultsFiles: '$(Build.SourcesDirectory)/**/TESTS-*.xml'

projects/iatec/nephos-utils/azure-pipelines.yml

🟡 WARNING [bug] (92%) — linha 142
Padrão de busca de resultados de teste não inclui subdiretório
Mesmo problema dos outros dois pipelines de biblioteca: o padrão $(Build.SourcesDirectory)/TESTS-*.xml não encontra arquivos dentro de test-results/. Corrija adicionando ** para correspondência recursiva.

              testResultsFiles: '$(Build.SourcesDirectory)/**/TESTS-*.xml'

✅ Good Practices

  • Detecção de ambiente CI via variáveis CI e TF_BUILD no karma.conf.js, habilitando comportamento diferenciado entre local e pipeline
  • Launcher ChromeHeadlessCI com flags --no-sandbox, --disable-dev-shm-usage e --disable-gpu — configuração correta para agentes Linux em container
  • Uso de succeededOrFailed() nas tasks de publicação de resultados e cobertura, garantindo que artefatos sejam publicados mesmo em caso de falha dos testes
  • Formatos Cobertura (coverage) e JUnit (test results) são os formatos nativos do Azure DevOps, habilitando relatórios integrados na interface
  • Teste da NephosDirective corretamente refatorado para usar componente host com TestBed, em vez de instanciação direta — abordagem alinhada com as convenções do projeto
  • Uso de overrideComponent na spec do NephosTemplateComponent para isolar o teste unitário do template complexo do componente
  • Mocks de serviços com useValue bem definidos nas specs, com retornos tipados e previsíveis
  • Pipeline estruturado em stages (Build → Test → CodeReview → SonarQube) com dependências explícitas e condições de execução apropriadas
  • npm ci preferido sobre npm install quando package-lock.json existe — garante builds determinísticos no CI
  • Migração dos paths TypeScript de dist para src/public-api.ts elimina a necessidade de build prévio das bibliotecas durante o desenvolvimento

💡 Recommendations

  • Considerar tornar o parâmetro RUN_TEST padrão true nos pipelines de biblioteca, pois atualmente os testes só executam automaticamente em main e PRs — builds manuais em outras branches não executarão testes sem intervenção explícita
  • O artifact node_modules publicado no stage de Build pode ser muito pesado; avaliar o uso de cache do pipeline (Cache@2) em vez de artifact para reduzir tempo e custo de storage
  • O script de clone do Berean no stage CodeReview usa git clone sem --depth 1, o que pode ser lento para repositórios grandes — adicionar --depth 1 para shallow clone

Generated by Berean 🔍

Comment thread projects/iatec/nephos-layout/azure-pipelines.yml Outdated
Comment thread projects/iatec/nephos-pages/azure-pipelines.yml Outdated
Comment thread projects/iatec/nephos-utils/azure-pipelines.yml Outdated
Updated `testResultsFiles` path to include nested directories in pipeline configurations.
This ensures that all test results are properly detected and published during CI execution.
@mosesaianalyst
Copy link
Copy Markdown
Collaborator

🔍 AI Code Review

Summary

Este PR unifica os pipelines de teste, build, code review e SonarQube em uma única pipeline multi-stage para os projetos nephos-layout, nephos-pages e nephos-utils. Inclui a adição de um karma.conf.js centralizado com suporte a CI (ChromeHeadlessCI, JUnit e Cobertura), correções nos arquivos spec para refletir as dependências reais dos componentes, migração de componentes para standalone e atualização das dependências Angular de 21.0.x para 21.2.x. A abordagem geral é sólida e segue as diretrizes do projeto.

✅💡 Recommendation: APPROVE WITH SUGGESTIONS

No issues found! Code looks good.

✅ Good Practices

  • Detecção de CI correta usando tanto process.env.CI (padrão GitHub Actions) quanto process.env.TF_BUILD (Azure DevOps) — cobre os dois ambientes sem configuração extra
  • Custom launcher ChromeHeadlessCI com flags --no-sandbox, --disable-dev-shm-usage e --disable-gpu seguindo a prática recomendada para execução em containers Linux
  • Uso de npm ci quando package-lock.json existe na etapa de install, garantindo builds reproduzíveis em CI
  • Condição succeededOrFailed() nos passos de publicação de resultados assegura que os artefatos de teste e cobertura sempre são publicados, mesmo em caso de falha
  • Migração correta dos testes de diretiva para o padrão TestHostComponent com TestBed, substituindo a instanciação direta que não exercita o contexto Angular real
  • Adição de karma-junit-reporter e formato Cobertura permite integração nativa com Azure DevOps para publicação de resultados e cobertura
  • Pipelines multi-stage bem estruturadas com dependsOn e condições claras para cada stage (Build → Test → SonarQube), com CodeReview independente em PRs
  • Atualização dos paths no tsconfig.json para apontar para o código-fonte em vez dos artefatos dist, eliminando a necessidade de build local antes do desenvolvimento

💡 Recommendations

  • Avaliar se o maximumWarning do budget do bundle aumentado para 700kb é aceitável a longo prazo ou se uma análise do crescimento do bundle é necessária antes de relaxar esse limite
  • Nos pipelines das bibliotecas, o chmod +x do esbuild está fixo para linux-x64; considerar usar um glob como node_modules/@esbuild/linux-*/bin/esbuild para maior portabilidade caso os agentes mudem de arquitetura
  • O RUN_TEST tem default false nas pipelines das bibliotecas, mas o stage de SonarQube depende do estágio Test; em execuções manuais onde RUN_TEST=false e o build não é na main, o SonarQube nunca executará — documentar essa dependência explicitamente

Generated by Berean 🔍

@mosesaianalyst
Copy link
Copy Markdown
Collaborator

🔍 AI Code Review

Summary

Este PR unifica os pipelines de CI/CD (teste, build, code review e SonarQube) em uma única pipeline por projeto, adiciona um karma.conf.js compartilhado com detecção de CI via TF_BUILD e suporte a JUnit reporter, e corrige configurações de testes para componentes Angular standalone. As mudanças são bem estruturadas e seguem os padrões documentados da IATec; as correções nos spec files e na pipeline são sólidas.

✅💡 Recommendation: APPROVE WITH SUGGESTIONS

Issues Found

projects/stage/src/app/templates/nephos/component/nephos-template.component.spec.ts

🔵 SUGGESTION [maintainability] (78%) — linha 16
Override de template com string vazia reduz o valor do teste
Substituir o template por uma string vazia via .overrideComponent faz com que o teste verifique apenas que a classe do componente pode ser instanciada, mas nunca exercita o template real. Erros de binding, diretivas ausentes ou dependências de template não serão detectados. Essa abordagem é aceitável como ponto de partida quando o template tem muitas dependências difíceis de mockar, mas deve ser evoluída. Considere fornecer todos os imports necessários para renderizar o template original, ou ao menos documentar no teste o motivo do override para orientar futuras evoluções.

✅ Good Practices

  • Detecção de ambiente CI via process.env.TF_BUILD no karma.conf.js está correta — o Azure DevOps define essa variável automaticamente em todos os jobs
  • O launcher ChromeHeadlessCI usa as flags corretas (--no-sandbox, --disable-dev-shm-usage, --disable-gpu) recomendadas para ambientes de CI containerizados
  • Adição do karma-junit-reporter combinada com PublishTestResults@2 permite integração nativa com o Azure DevOps Test Plans e histórico de testes
  • Os specs foram corretamente atualizados para fornecer dependências via TestBed.configureTestingModule ao invés de instanciar classes diretamente, seguindo o padrão documentado da IATec
  • O teste da NephosDirective foi reformulado corretamente com um TestHostComponent, seguindo o padrão recomendado para testes de diretivas estruturais
  • As pipelines de biblioteca foram bem estruturadas com estágios separados (Build → Test → CodeReview → SonarQube) com condições corretas por tipo de trigger (PR vs push para main)
  • O uso de artefatos de pipeline para compartilhar node_modules entre estágios evita reinstalações e otimiza o tempo de execução do CI
  • O tsconfig.json foi atualizado para apontar para os fontes locais ao invés de dist, eliminando a necessidade de build prévio das bibliotecas durante o desenvolvimento
  • O script de install foi migrado de Npm@1 para Bash@3 com detecção condicional de package-lock.json para usar npm ci quando disponível — boa prática para builds reproduzíveis

💡 Recommendations

  • Após confirmar que os mocks do TopbarComponent suportam a inicialização completa, adicione fixture.detectChanges() de volta para garantir que ngOnInit seja exercitado e que os serviços mockados sejam realmente chamados
  • Evolua os testes de should create para verificar comportamentos específicos (p.ex., confirmar que getMenus foi chamado, que o estado inicial é correto), aumentando progressivamente a cobertura funcional além da instanciação básica

Generated by Berean 🔍

@elvysmarcos elvysmarcos merged commit 23befb5 into main Apr 2, 2026
13 checks passed
@elvysmarcos elvysmarcos deleted the FT/592417 branch April 2, 2026 14:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants