Skip to content

Integracion CI

pfranccino edited this page Jun 7, 2026 · 1 revision

Integración CI/CD

gradle-sanity tiene flags para fallar la build si se detectan problemas de arquitectura, y --json en todos los CLIs para parsear resultados en el pipeline.

Gates de fallo

# Falla (exit 1) si hay ciclos
gradle-sanity /ruta/proyecto --fail-on-cycle --quiet

# Falla (exit 1) si el score cae por debajo de 70
gradle-sanity /ruta/proyecto --fail-on-score-below 70 --quiet

# Combinados
gradle-sanity /ruta/proyecto --fail-on-cycle --fail-on-score-below 70 --quiet

Salida JSON

gradle-sanity /ruta/proyecto --json > sanity-report.json

Estructura (recortada — ver salida real completa en Comandos):

{
  "path": "...",
  "score": 100,
  "modules": { "core": { "ca": 6, "ce": 0, "I": 0.0 }, "...": {} },
  "cycles": [],
  "sdp_violations": [],
  "coupling_issues": [ { "module": "app", "kind": "app", "I": 0.75, "ca": 1, "max_ca": 0 } ]
}

Campos clave para parsear en el pipeline: score (int 0–100) y los arrays cycles, sdp_violations, api_issues, fan_out_issues, version_issues, orphan_modules, coupling_issues (vacíos = sin problemas de ese tipo).

GitHub Actions

El repo incluye un workflow completo en examples/github-actions-dependency-health.yml. Resumen de lo que hace:

name: Android Dependency Health

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

jobs:
  dependency-health:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"

      - name: Install android-gradle-analyzer
        run: pipx install git+https://github.com/pfranccino/android-gradle-analyzer.git

      - name: Check for dependency cycles
        run: |
          gradle-sanity ${{ github.workspace }} \
            --fail-on-cycle --quiet --json > sanity-report.json

      - name: Enforce minimum architecture score
        run: |
          gradle-sanity ${{ github.workspace }} \
            --fail-on-score-below 70 --quiet

      - name: Generate dependency diagram
        if: always()
        run: |
          gradle-analyzer ${{ github.workspace }} \
            --format mermaid --output-dir diagrams --quiet

      - name: Upload reports
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: dependency-reports
          path: |
            diagrams/
            sanity/
            sanity-report.json
          retention-days: 30

El workflow incluye además un job opcional impact-check que corre gradle-impact cuando cambia un módulo concreto (descomenta el filtro paths y ajusta el nombre del módulo).

Clone this wiki locally