- Configure workspace Git repository with comprehensive .gitignore - Add Odoo as submodule for ERP reference code - Include documentation: SETUP.md, GIT-STRUCTURE.md - Add gitignore templates for projects (backend, frontend, database) - Structure supports independent repos per project/subproject level Workspace includes: - core/ - Reusable patterns, modules, orchestration system - projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.) - knowledge-base/ - Reference code and patterns (includes Odoo submodule) - devtools/ - Development tools and templates - customers/ - Client implementations template 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
109 lines
5.5 KiB
YAML
109 lines
5.5 KiB
YAML
name: Validate Constants SSOT
|
|
|
|
on:
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
- develop
|
|
push:
|
|
branches:
|
|
- main
|
|
- develop
|
|
|
|
jobs:
|
|
validate-constants:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '18'
|
|
cache: 'npm'
|
|
|
|
- name: Install root dependencies
|
|
run: npm ci
|
|
|
|
- name: Install Backend dependencies
|
|
run: cd apps/backend && npm ci
|
|
|
|
- name: Install Frontend dependencies
|
|
run: cd apps/frontend && npm ci
|
|
|
|
- name: Sync ENUMs (Backend → Frontend)
|
|
run: npm run sync:enums
|
|
|
|
- name: Validate Constants Usage (No Hardcoding)
|
|
run: npm run validate:constants
|
|
|
|
- name: Validate API Contract (Backend ↔ Frontend)
|
|
run: npm run validate:api-contract
|
|
|
|
- name: Check ENUMs Synchronization
|
|
run: |
|
|
if ! diff apps/backend/src/shared/constants/enums.constants.ts \
|
|
apps/frontend/src/shared/constants/enums.constants.ts; then
|
|
echo "❌ ERROR: ENUMs are not synchronized between Backend and Frontend"
|
|
echo ""
|
|
echo "Backend ENUMs differ from Frontend ENUMs."
|
|
echo "This usually happens when:"
|
|
echo " 1. Backend enums.constants.ts was modified manually"
|
|
echo " 2. Frontend enums.constants.ts was modified manually (should never happen)"
|
|
echo " 3. sync:enums script was not run after Backend changes"
|
|
echo ""
|
|
echo "To fix:"
|
|
echo " 1. Run: npm run sync:enums"
|
|
echo " 2. Commit the changes to Frontend enums.constants.ts"
|
|
echo " 3. Push again"
|
|
exit 1
|
|
fi
|
|
echo "✅ ENUMs are properly synchronized"
|
|
|
|
- name: Report Success
|
|
if: success()
|
|
run: |
|
|
echo "╔══════════════════════════════════════════════════════════════╗"
|
|
echo "║ ║"
|
|
echo "║ ✅ Constants SSOT Validation PASSED ║"
|
|
echo "║ ║"
|
|
echo "║ All validations completed successfully: ║"
|
|
echo "║ • No hardcoding detected ║"
|
|
echo "║ • API contract synchronized (Backend ↔ Frontend) ║"
|
|
echo "║ • ENUMs synchronized (Backend ↔ Frontend) ║"
|
|
echo "║ ║"
|
|
echo "║ Your PR is ready for code review! 🚀 ║"
|
|
echo "║ ║"
|
|
echo "╚══════════════════════════════════════════════════════════════╝"
|
|
|
|
- name: Report Failure
|
|
if: failure()
|
|
run: |
|
|
echo "╔══════════════════════════════════════════════════════════════╗"
|
|
echo "║ ║"
|
|
echo "║ ❌ Constants SSOT Validation FAILED ║"
|
|
echo "║ ║"
|
|
echo "║ Your PR has violations that must be fixed: ║"
|
|
echo "║ ║"
|
|
echo "║ Check the logs above for specific errors. ║"
|
|
echo "║ ║"
|
|
echo "║ Common issues: ║"
|
|
echo "║ • P0 violations (hardcoded schemas/tables/routes) ║"
|
|
echo "║ • API contract mismatch (Backend vs Frontend routes) ║"
|
|
echo "║ • ENUMs not synchronized ║"
|
|
echo "║ ║"
|
|
echo "║ How to fix: ║"
|
|
echo "║ 1. Read the error messages above ║"
|
|
echo "║ 2. Fix violations in your code ║"
|
|
echo "║ 3. Run locally: npm run validate:all ║"
|
|
echo "║ 4. Commit and push fixes ║"
|
|
echo "║ ║"
|
|
echo "║ Documentation: ║"
|
|
echo "║ • docs/CONSTANTS-ARCHITECTURE.md ║"
|
|
echo "║ • docs/POLITICA-CONSTANTS-SSOT.md ║"
|
|
echo "║ ║"
|
|
echo "╚══════════════════════════════════════════════════════════════╝"
|
|
exit 1
|