name: Validation

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main, develop ]
  workflow_dispatch:

jobs:
  validate-genesis:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Install jq
        run: sudo apt-get update && sudo apt-get install -y jq
      
      - name: Validate genesis file
        run: ./scripts/validation/validate-genesis.sh
  
  validate-terraform:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v2
      
      - name: Terraform Format Check
        run: |
          cd terraform
          terraform fmt -check
      
      - name: Terraform Validate
        run: |
          cd terraform
          terraform init -backend=false
          terraform validate
      
      - name: Terraform Security Scan
        uses: bridgecrewio/checkov-action@master
        with:
          directory: terraform
          framework: terraform
  
  validate-kubernetes:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Install kubectl
        uses: azure/setup-kubectl@v3
      
      - name: Validate Kubernetes manifests
        run: |
          kubectl apply --dry-run=client -f k8s/base/namespace.yaml
          kubectl apply --dry-run=client -f k8s/base/validators/statefulset.yaml
          kubectl apply --dry-run=client -f k8s/base/sentries/statefulset.yaml
          kubectl apply --dry-run=client -f k8s/base/rpc/statefulset.yaml
      
      - name: Kubernetes Security Scan
        uses: ludovico85/kube-score-action@v1
        with:
          path: k8s
  
  validate-smart-contracts:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Install Foundry
        uses: foundry-rs/foundry-toolchain@v1
      
      - name: Run tests
        run: forge test
      
      - name: Run fuzz tests
        run: forge test --fuzz-runs 1000
      
      - name: Check formatting
        run: forge fmt --check
      
      - name: Smart Contract Security Scan
        uses: crytic/slither-action@v0.10.0
        with:
          target: 'contracts'
  
  validate-security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Container Security Scan
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'image'
          image-ref: 'hyperledger/besu:23.10.0'
          format: 'sarif'
          output: 'trivy-results.sarif'
      
      - name: Upload Trivy results
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: 'trivy-results.sarif'
  
  validate-documentation:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Check documentation
        run: |
          # Check if all required documentation exists
          test -f README.md || exit 1
          test -f CONTRIBUTING.md || exit 1
          test -f CHANGELOG.md || exit 1
          test -f docs/DEPLOYMENT.md || exit 1
          test -f docs/ARCHITECTURE.md || exit 1
          test -f docs/SECURITY.md || exit 1

