Overview
The Product Distribution Dashboard maintains high code quality through automated analysis, testing, and formatting tools integrated into the CI/CD pipeline.SonarCloud Integration
Configuration
SonarCloud is configured in the backendpom.xml:
Maven Plugin
Analysis Execution
In PR Workflow:Metrics Tracked
- Code Coverage: Percentage of code covered by tests
- Bugs: Potential runtime errors
- Vulnerabilities: Security issues
- Code Smells: Maintainability issues
- Duplications: Repeated code blocks
- Technical Debt: Estimated time to fix all issues
Code Coverage with JaCoCo
Maven Configuration
JaCoCo is configured inpom.xml:
How It Works
- prepare-agent: Instruments Java classes during test execution
- report: Generates coverage reports in multiple formats
- XML Report: Used by SonarCloud for coverage analysis
- HTML Report: Human-readable coverage report
Report Location
Running Locally
Coverage Goals
- Minimum: 70% overall coverage
- Target: 80%+ for critical business logic
- Exclusions: DTOs, configuration classes, main methods
Frontend Code Quality
ESLint
Static analysis tool for identifying problematic patterns in TypeScript/JavaScript code. Configuration:- Based on Angular ESLint rules
- TypeScript ESLint parser (v8.46.4)
- Prettier integration via
eslint-config-prettier
- No unused variables
- Consistent naming conventions
- Proper TypeScript types
- Angular best practices
Prettier
Code formatter for consistent code style. Package Version:.prettierrc or prettier.config.js in frontend directory.
Build Verification
Angular build process validates:- TypeScript compilation
- Template syntax
- Dependency resolution
- Production optimizations
Quality Gates
PR Quality Gate
Pull requests must pass:-
Frontend Checks
- ESLint: No errors
- Prettier: All files formatted
- Build: Successful compilation
-
Backend Checks
- Unit Tests: All passing
- Integration Tests: All passing
- SonarCloud: Quality gate passed
-
Data Checks
- JSON Syntax: Valid
- Structure: Correct files and naming
- Versions: Consecutive numbering
SonarCloud Quality Gate
Default conditions:- Coverage: No decrease from baseline
- Duplications: < 3% on new code
- Maintainability Rating: A on new code
- Reliability Rating: A on new code
- Security Rating: A on new code
Setting Up SonarCloud
Initial Setup
-
Create SonarCloud Account
- Visit sonarcloud.io
- Sign in with GitHub
-
Create Organization
- Click + → Create new organization
- Link GitHub account
- Choose organization name
-
Import Repository
- Click + → Analyze new project
- Select repository
- Choose analysis method: GitHub Actions
-
Generate Token
- Go to My Account → Security
- Generate new token
- Copy token value
-
Configure GitHub Secret
- Go to GitHub repository → Settings → Secrets and variables → Actions
- Click New repository secret
- Name:
SONAR_TOKEN - Value: Paste token
Update pom.xml
Update SonarCloud properties with your values:Verify Setup
- Push changes to trigger workflow
- Check GitHub Actions for successful execution
- Visit SonarCloud dashboard to view results
Code Quality Metrics
Backend (SonarCloud)
Key metrics to monitor:- Reliability: Bug count and severity
- Security: Vulnerability count and severity
- Maintainability: Code smells and technical debt
- Coverage: Test coverage percentage
- Duplications: Duplicated code percentage
Frontend (ESLint)
Issue categories:- Errors: Must be fixed before merge
- Warnings: Should be addressed
- Info: Suggestions for improvement
Local Development
Backend Quality Checks
Frontend Quality Checks
Best Practices
Writing Quality Code
-
Follow SOLID Principles
- Single Responsibility
- Open/Closed
- Liskov Substitution
- Interface Segregation
- Dependency Inversion
-
Write Tests First
- TDD approach when possible
- Cover edge cases
- Mock external dependencies
-
Keep It Simple
- Avoid complex conditionals
- Extract methods for clarity
- Use meaningful names
-
Document When Necessary
- Public APIs
- Complex algorithms
- Business logic decisions
Maintaining Quality
-
Regular Code Reviews
- Check SonarCloud results
- Review test coverage
- Verify naming conventions
-
Address Technical Debt
- Prioritize high-severity issues
- Refactor incrementally
- Update dependencies regularly
-
Monitor Trends
- Track coverage over time
- Watch for increasing complexity
- Identify problematic areas
Troubleshooting
SonarCloud Token Issues
Issue: Authentication failed Solutions:- Verify
SONAR_TOKENsecret is set correctly - Check token hasn’t expired
- Ensure token has analysis permissions
Coverage Not Reported
Issue: SonarCloud shows 0% coverage Solutions:- Verify JaCoCo plugin is configured
- Check
jacoco.xmlis generated in correct location - Ensure
sonar.coverage.jacoco.xmlReportPathsproperty is set - Run
mvn clean verifyto regenerate reports
ESLint Errors
Issue: Linting fails with errors Solutions:- Run
npm run lint -- --fixto auto-fix - Check ESLint configuration
- Update
@angular-eslintif using new Angular features
Prettier Conflicts
Issue: ESLint and Prettier disagreeing Solutions:- Ensure
eslint-config-prettieris installed - Add to ESLint extends:
extends: ['prettier'] - Run Prettier after ESLint