Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -123,4 +123,5 @@ Thumbs.db
*~

# Logs
*.log
*.log
/dependency_report.txt
52 changes: 44 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,34 +19,57 @@ Un script automatizado para verificar y comparar las versiones de dependencias M

- Python 3.6+
- Bash
- jq (para generar reportes formateados)
- Acceso a internet para consultas Maven

## 🛠️ Instalación

1. Clona este repositorio:
```bash
git clone https://github.com/pfranccino/gradle-deps-monitor.git
cd gradle-deps-monitor
git clone https://github.com/pfranccino/toml-deps-checker.git
cd toml-deps-checker
```

2. Dale permisos de ejecución al script:
2. Dale permisos de ejecución a los scripts:
```bash
chmod +x check-dependencies.sh
chmod +x generate_dependency_report.sh
```

## 📖 Uso

### Verificación de dependencias

Ejecuta el script proporcionando la ruta a tu directorio Gradle que contiene `libs.versions.toml`:

```bash
./check-dependencies.sh /ruta/al/directorio/gradle
```

### Ejemplo:
#### Ejemplo:
```bash
./check-dependencies.sh ./app/gradle
```

### Generación de reportes

Después de ejecutar la verificación de dependencias, puedes generar un reporte formateado usando:

```bash
./generate_dependency_report.sh [archivo_json]
```

Si no se proporciona un archivo JSON, se utilizará `dependency_status.json` por defecto.

#### Ejemplo:
```bash
./generate_dependency_report.sh
# O especificando un archivo JSON personalizado:
./generate_dependency_report.sh mi_archivo.json
```

El script generará un archivo `dependency_report.txt` con un formato legible de todas las dependencias y sus estados.

## 📊 Salida

El script genera un archivo `dependency_status.json` con información detallada de cada dependencia:
Expand Down Expand Up @@ -75,14 +98,18 @@ El script genera un archivo `dependency_status.json` con información detallada
## 🏗️ Estructura del proyecto

```
├── check-dependencies.sh # Script principal de Bash
├── version-stats.py # Script de Python para análisis
├── README.md # Este archivo
└── dependency_status.json # Archivo de salida (generado)
├── check-dependencies.sh # Script principal de Bash
├── generate_dependency_report.sh # Script para generar reportes formateados
├── version-stats.py # Script de Python para análisis
├── README.md # Este archivo
├── dependency_status.json # Archivo de salida JSON (generado)
└── dependency_report.txt # Archivo de reporte formateado (generado)
```

## ⚙️ Cómo funciona

### check-dependencies.sh

1. **Validación**: Verifica que existe el directorio y el archivo `libs.versions.toml`
2. **Entorno virtual**: Crea y activa un entorno virtual Python
3. **Instalación**: Instala las dependencias Python necesarias (`requests`)
Expand All @@ -93,6 +120,15 @@ El script genera un archivo `dependency_status.json` con información detallada
5. **Comparación**: Evalúa el estado de cada dependencia
6. **Reporte**: Genera un archivo JSON con los resultados

### generate_dependency_report.sh

1. **Validación**: Verifica que existe el archivo JSON de entrada (por defecto `dependency_status.json`)
2. **Procesamiento**:
- Utiliza `jq` para procesar el archivo JSON
- Extrae información de cada dependencia (nombre, versión actual, última versión, estado)
3. **Formateo**: Formatea cada dependencia según un formato legible
4. **Reporte**: Genera un archivo de texto (`dependency_report.txt`) con el reporte formateado

## 🔧 Configuración

### Tipos de dependencias soportadas
Expand Down
51 changes: 51 additions & 0 deletions generate_dependency_report.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#!/bin/bash

# Script to generate dependency report from JSON file
# Usage: ./generate_dependency_report.sh [json_file]
# If no json_file is provided, dependency_status.json will be used by default

echo "🚀 Iniciando generador de reporte de dependencias"

# Check if jq is installed
if ! command -v jq &> /dev/null; then
echo "❌ Error: jq is required but not installed. Please install jq."
exit 1
fi

# Path to input and output files
JSON_FILE="${1:-dependency_status.json}"
REPORT_FILE="dependency_report.txt"

echo "📂 Archivo de entrada: $JSON_FILE"
echo "📄 Archivo de salida: $REPORT_FILE"

# Check if JSON file exists
if [ ! -f "$JSON_FILE" ]; then
echo "❌ Error: $JSON_FILE not found."
exit 1
fi

# Clear the report file if it exists
> "$REPORT_FILE"

# Process each dependency in the JSON file
echo "🔎 Procesando dependencias..."
jq -r 'to_entries | .[] | @json' "$JSON_FILE" | while read -r dependency; do
# Extract dependency information
name=$(echo "$dependency" | jq -r '.key')
status=$(echo "$dependency" | jq -r '.value.status')
version_used=$(echo "$dependency" | jq -r '.value.version_used')
latest_version=$(echo "$dependency" | jq -r '.value.latest_version')

# Format the line according to the specified format
formatted_line="$status *$name* - Actual: \`$version_used\`| Última: \`$latest_version\`"

# Append the formatted line to the report file
echo "$formatted_line" >> "$REPORT_FILE"

# Print the formatted line to the terminal
echo "📝 Añadiendo: $formatted_line"
done

echo "✅ Reporte de dependencias generado: $REPORT_FILE"
echo "✨ Proceso completado"
32 changes: 32 additions & 0 deletions test/test_parse_library_line.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import sys
import importlib.util

# Import the module using the file path
spec = importlib.util.spec_from_file_location("version_stats", "../version-stats.py")
version_stats = importlib.util.module_from_spec(spec)
spec.loader.exec_module(version_stats)

# Get the MavenVersionChecker class
MavenVersionChecker = version_stats.MavenVersionChecker

# Create a test instance
checker = MavenVersionChecker()

# Test versions dictionary
versions = {
"turbine": "0.12.1",
"coil": "2.2.2"
}

# Test both formats
print("Testing module format:")
line1 = 'turbine = { module = "app.cash.turbine:turbine", version.ref = "turbine" }'
result1 = checker.parse_library_line(line1, versions)
print(f"Result: {result1}")

print("\nTesting group and name format:")
line2 = 'compose-coil = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil"}'
result2 = checker.parse_library_line(line2, versions)
print(f"Result: {result2}")

print("\nTest completed.")
Loading
SYSTEM_READY >> ...MS