Gracias por tu interés en contribuir a Normalizador Audio. Este documento explica cómo configurar el entorno y hacer contribuciones.
git clone https://github.com/TU_USUARIO/normalizador-audio.git
cd normalizador-audiopython -m venv venv
source venv/bin/activate # En macOS/Linux
# O en Windows:
venv\Scripts\activatepip install -r requirements.txtpytest tests/ -vTodos deben pasar. Si alguno falla, no hagas push.
python -m py_compile normalizador_app/**/*.pypylint normalizador_app --exit-zero --max-line-length=120
bandit -r normalizador_app-
Crea una rama desde
develop:git checkout -b feature/tu-feature develop
-
Haz cambios en los archivos relevantes
-
Escribe o actualiza tests si es necesario:
# Nuevo test: tests/test_nuevo_modulo.py -
Corre los tests locales (ver arriba)
-
Commit y push:
git add . git commit -m "feat: descripción clara de tu cambio" git push origin feature/tu-feature
-
Abre un Pull Request en GitHub con descripción clara
- PEP 8 — Sigue el estándar de Python
- Docstrings — Todas las funciones/clases deben tener docstring
- Type hints — Usa anotaciones de tipos cuando sea posible
- Nombres claros — Evita abreviaturas, prefiere claridad
- Máx 120 caracteres por línea
def analyze_audio_parameters(file_path: str, target_vol: int) -> dict | None:
"""
Analiza parámetros de audio usando FFmpeg.
Parameters
----------
file_path : str
Ruta al archivo de audio/video
target_vol : int
LUFS objetivo para loudnorm
Returns
-------
dict | None
Parámetros extraídos o None si hay error
"""
...Si agregas un nuevo módulo, asegúrate de:
- ✅ Ponerlo en la carpeta correcta (
core/,services/,ui/,workers/) - ✅ Agregar
__init__.pysi es un paquete nuevo - ✅ Crear tests en
tests/test_tu_modulo.py - ✅ Importar en los archivos correspondientes
Usa estos prefijos para claridad:
feat:— Nueva featurefix:— Bug fixdocs:— Cambios en documentaciónrefactor:— Refactorización sin cambios de comportamientotest:— Agregar o actualizar testsci:— Cambios en CI/CDchore:— Tareas varias (deps, etc)
Ejemplos:
feat: agregar exportación a Excel en reporte
fix: corregir colisión de claves en resultado
docs: actualizar README con ejemplos
test: agregar cobertura para audio_service
import pytest
from unittest.mock import patch, MagicMock
from normalizador_app.services.audio_service import analyze_audio_parameters
class TestAnalyzeAudioParameters:
@patch("normalizador_app.services.audio_service.subprocess.run")
def test_analyze_success(self, mock_run):
"""Descripción clara de qué pruebas."""
mock_result = MagicMock()
mock_result.returncode = 0
mock_result.stderr = '{"input_i":-14.5}'
mock_run.return_value = mock_result
result = analyze_audio_parameters("/test/video.mp4", -14)
assert result is not None
assert result["input_i"] == -14.5En tests/conftest.py hay fixtures reutilizables:
@pytest.fixture
def temp_dir():
"""Directorio temporal para tests"""
@pytest.fixture
def sample_audio_profile():
"""Perfil de audio de ejemplo"""Úsalas en tus tests:
def test_my_feature(temp_dir, sample_audio_profile):
# temp_dir y sample_audio_profile ya están listos
passCuando hagas push, GitHub Actions ejecutará automáticamente:
- Tests en Python 3.10-3.14, Windows/macOS/Linux
- Syntax check — Validación de sintaxis
- Security check — Bandit + análisis de secretos
- Coverage — Reporte enviado a Codecov
Si alguno falla, el PR se marcará como rojo. Debes corregirlo antes de mergear.
Si encuentras un bug:
-
Crea un issue en GitHub con:
- Título claro: "Bug: descripción"
- Steps to reproduce: Pasos para reproducir
- Expected vs Actual: Qué debería pasar vs qué pasa
- Environment: OS, Python version, etc
-
Adjunta logs si es relevante:
# Ver logs: type "%LOCALAPPDATA%\NormalizadorAudio\normalizador_errors.log"
- Abre un discussion en GitHub
- O crea un issue con etiqueta
question
¡Gracias por contribuir! 🎉