Aplicar ruff format a todo el código
Cambio mecánico, sin efecto en el comportamiento: la suite pasa igual antes y después. Va en un commit propio para no tapar los cambios con sentido. Se agregan además dos flujos de verificación que corren en cada carga al repositorio: - YAML: yamllint para sintaxis y estilo, más la carga de cada config contra su esquema de pydantic. Son cosas distintas — un YAML puede ser sintácticamente perfecto y estar roto igual, con 'run_nombre' en vez de 'run_name'. Ese paso no instala torch: se verificó que la capa de configuración no lo importa, así que corre en segundos en vez de descargar dos gigas y medio de CUDA. - Python: ruff check, ruff format --check y la suite completa con torch de CPU. Las rutas ignoradas de .yamllint.yml van ancladas con barra inicial. Sin anclar, 'data/' y 'runs/' excluían configs/data/ y configs/runs/ — siete archivos, justo los que más importa revisar — y el linter pasaba en verde sin haber mirado nada. Es el mismo defecto que ya había aparecido en .gitignore.
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
# Calidad del código Python, en cada carga.
|
||||
#
|
||||
# Existe por una razón concreta: ruff estaba configurado en pyproject.toml desde
|
||||
# el primer commit y nunca se había ejecutado. Cuando por fin se corrió tenía 15
|
||||
# hallazgos, uno de ellos real —`zip()` sin `strict=` trunca en silencio al más
|
||||
# corto, así que un test que compara dos listas de distinto largo pasaría sin
|
||||
# comparar todo— y otro que delataba un backend sin ninguna prueba.
|
||||
#
|
||||
# Una regla que no se ejecuta no es una regla.
|
||||
name: Python
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
calidad:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Descargar el repositorio
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Preparar Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.12"
|
||||
|
||||
- name: Instalar ruff
|
||||
run: python -m pip install --upgrade pip "ruff>=0.6"
|
||||
|
||||
- name: Estilo y errores
|
||||
# Las reglas viven en pyproject.toml, no acá: un solo lugar donde
|
||||
# cambiarlas, y el mismo resultado corriendo `ruff check .` en local.
|
||||
run: ruff check --output-format=github .
|
||||
|
||||
- name: Formato consistente
|
||||
run: ruff format --check --diff .
|
||||
|
||||
tests:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Descargar el repositorio
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Preparar Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.12"
|
||||
|
||||
- name: Instalar dependencias
|
||||
# torch de CPU explícitamente: la variante con CUDA pesa unos 2,5 GB y
|
||||
# acá no hay placa. La suite entera corre en CPU a propósito.
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install torch --index-url https://download.pytorch.org/whl/cpu
|
||||
python -m pip install -e ".[dev]"
|
||||
|
||||
- name: Suite de tests
|
||||
# Se desactiva la carga automática de plugins: en entornos con otros
|
||||
# paquetes instalados (ROS, por ejemplo) pytest intenta cargar sus
|
||||
# plugins y falla al recolectar por motivos ajenos al proyecto.
|
||||
env:
|
||||
PYTEST_DISABLE_PLUGIN_AUTOLOAD: "1"
|
||||
run: pytest -q
|
||||
@@ -0,0 +1,45 @@
|
||||
# Verificación de los YAML del repositorio, en cada carga.
|
||||
#
|
||||
# Dos niveles, porque atrapan cosas distintas:
|
||||
#
|
||||
# 1. yamllint mira la sintaxis y el estilo: indentación, duplicados, tabs.
|
||||
# 2. La validación contra el esquema carga cada config con pydantic. Un YAML
|
||||
# puede ser sintácticamente perfecto y estar roto igual — `n_layers` en vez
|
||||
# de `n_layer`, un schedule que no entra en max_steps, float16 sin
|
||||
# GradScaler. Eso solo lo ve el esquema.
|
||||
#
|
||||
# El segundo paso no instala torch a propósito: la capa de configuración no lo
|
||||
# importa, así que el CI corre en segundos en vez de descargar 2,5 GB de CUDA.
|
||||
name: YAML
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
yaml:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Descargar el repositorio
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Preparar Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.12"
|
||||
|
||||
- name: Instalar dependencias
|
||||
# Solo lo que hace falta: yamllint para la sintaxis, pydantic y
|
||||
# omegaconf para el esquema. Nada de torch.
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install "yamllint>=1.35" "pydantic>=2.7" "omegaconf>=2.3"
|
||||
|
||||
- name: Sintaxis y estilo de los YAML
|
||||
# --strict convierte las advertencias en errores: si una regla no vale
|
||||
# la pena, se desactiva en .yamllint.yml, no se deja avisando para
|
||||
# siempre.
|
||||
run: yamllint --strict .
|
||||
|
||||
- name: Las configs cargan y pasan su esquema
|
||||
run: python scripts/validar_configs.py
|
||||
Reference in New Issue
Block a user