diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 6ac687c9..afb099d3 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -15,9 +15,9 @@ env: DOTNET_VERSION: '10.0.x' jobs: - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== # Core & Setup Job (Critical validators + database setup) - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== core: name: "Core Validators & Database Setup" runs-on: ubuntu-latest @@ -141,9 +141,9 @@ jobs: print(f"⚠ verdict skipped for {task_id} (exit={result.returncode})") PY - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== # WBS & Audit Validation (Depends on core) - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== wbs-audit: name: "WBS & Audit Validations" needs: core @@ -174,9 +174,9 @@ jobs: python3 tools/validate_dotnet_migration_roadmap_v1.py echo "✓ WBS & audit validations passed" - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== # .NET Contracts & Parity Validation (Parallel) - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== dotnet-contracts: name: ".NET Contracts" needs: core @@ -219,9 +219,9 @@ jobs: - name: Run All .NET Unit Tests run: dotnet test src/dotnet/QuantEngine.sln --configuration Release - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== # UI & Storage Backend Validation (Parallel) - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== ui-storage: name: "UI & Storage Validation" runs-on: ubuntu-latest @@ -246,9 +246,9 @@ jobs: python3 -m pytest tests/unit/test_storage_backend_v1.py tests/unit/test_validate_kis_api_credentials_v1.py tests/unit/test_qualitative_sell_strategy_store_v1.py tests/unit/test_kis_api_client_v1.py tests/unit/test_snapshot_admin_store_v1.py tests/unit/test_snapshot_admin_web_v1.py -q echo "✓ UI & storage validations passed" - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== # Database & Schema Validation (Parallel) - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== database-schema: name: "Database & Schema Validation" runs-on: ubuntu-latest @@ -275,9 +275,9 @@ jobs: python3 tools/validate_postgresql_history_contract_v1.py echo "✓ Database validations passed" - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== # Calibration & Performance Pipeline (Depends on core) - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== calibration-pipeline: name: "Calibration & Performance" needs: core @@ -312,9 +312,9 @@ jobs: python3 tools/validate_qualitative_sell_strategy_pipeline_v1.py echo "✓ Qualitative sell strategy validated" - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== # Operational Report & Decision Packet (Depends on calibration) - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== operational-reporting: name: "Operational Report & Decision Packet" needs: calibration-pipeline @@ -379,9 +379,9 @@ jobs: Temp/validate_operational_alpha_calibration_v2.json Temp/operational_t20_outcome_ledger_v1.json - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== # Security & Secrets Validation (Parallel) - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== security-validation: name: "Security & Secrets" runs-on: ubuntu-latest @@ -406,9 +406,9 @@ jobs: python3 tools/validate_snapshot_admin_workflow_v1.py echo "✓ Security validations passed" - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== # CI Workflow Lint (Independent) - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== workflow-lint: name: "CI Workflow Lint" runs-on: ubuntu-latest @@ -430,9 +430,9 @@ jobs: - name: Lint CI Workflow run: python3 tools/validate_gitea_ci_workflow_lint_v1.py --workflow .gitea/workflows/ci.yml - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== # Final Notification (All jobs complete) - # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + # ======================================================================== notify-results: name: "Notify PR Results" if: always() && github.event_name == 'pull_request' @@ -449,58 +449,15 @@ jobs: runs-on: ubuntu-latest steps: - - name: Report Status - env: - CORE_STATUS: ${{ needs.core.result }} - AUDIT_STATUS: ${{ needs.wbs-audit.result }} - CONTRACTS_STATUS: ${{ needs.dotnet-contracts.result }} - UI_STATUS: ${{ needs.ui-storage.result }} - DB_STATUS: ${{ needs.database-schema.result }} - CALIBRATION_STATUS: ${{ needs.calibration-pipeline.result }} - REPORT_STATUS: ${{ needs.operational-reporting.result }} - SECURITY_STATUS: ${{ needs.security-validation.result }} - LINT_STATUS: ${{ needs.workflow-lint.result }} + - name: Report Validation Status run: | - ALL_PASS="true" - [ "$CORE_STATUS" != "success" ] && ALL_PASS="false" - [ "$AUDIT_STATUS" != "success" ] && ALL_PASS="false" - [ "$CONTRACTS_STATUS" != "success" ] && ALL_PASS="false" - [ "$UI_STATUS" != "success" ] && ALL_PASS="false" - [ "$DB_STATUS" != "success" ] && ALL_PASS="false" - [ "$CALIBRATION_STATUS" != "success" ] && ALL_PASS="false" - [ "$REPORT_STATUS" != "success" ] && ALL_PASS="false" - [ "$SECURITY_STATUS" != "success" ] && ALL_PASS="false" - [ "$LINT_STATUS" != "success" ] && ALL_PASS="false" - - if [ "$ALL_PASS" = "true" ]; then - STATUS="✅ **CI PASS**" - ICON="✓" - else - STATUS="❌ **CI FAIL**" - ICON="✗" - fi - - MSG=" -$STATUS — All validation gates passed - -【 Job Results 】 -$ICON Core: $CORE_STATUS -$ICON WBS/Audit: $AUDIT_STATUS -$ICON .NET Contracts: $CONTRACTS_STATUS -$ICON UI/Storage: $UI_STATUS -$ICON Database: $DB_STATUS -$ICON Calibration: $CALIBRATION_STATUS -$ICON Reporting: $REPORT_STATUS -$ICON Security: $SECURITY_STATUS -$ICON Workflow Lint: $LINT_STATUS - -[View Logs](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) -" - - PR_NUM="${{ github.event.pull_request.number }}" - if [ -n "$PR_NUM" ]; then - curl -s -X POST "${{ github.api_url }}/repos/${{ github.repository }}/issues/${PR_NUM}/comments" \ - -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ - -H "Content-Type: application/json" \ - -d "{\"body\":\"${MSG}\"}" || echo "⚠ PR comment failed (non-fatal)" - fi + echo "CI Validation Results:" + echo " Core: ${{ needs.core.result }}" + echo " WBS/Audit: ${{ needs.wbs-audit.result }}" + echo " .NET Contracts: ${{ needs.dotnet-contracts.result }}" + echo " UI/Storage: ${{ needs.ui-storage.result }}" + echo " Database: ${{ needs.database-schema.result }}" + echo " Calibration: ${{ needs.calibration-pipeline.result }}" + echo " Reporting: ${{ needs.operational-reporting.result }}" + echo " Security: ${{ needs.security-validation.result }}" + echo " Workflow Lint: ${{ needs.workflow-lint.result }}"