Skip to content

CI: workflow con tests del proyecto y lint de soluciones#7

Merged
dcarrascosa merged 1 commit into
mainfrom
feat/ci
May 13, 2026
Merged

CI: workflow con tests del proyecto y lint de soluciones#7
dcarrascosa merged 1 commit into
mainfrom
feat/ci

Conversation

@dcarrascosa

@dcarrascosa dcarrascosa commented May 13, 2026

Copy link
Copy Markdown
Owner

Resumen

Bloque 4 del rediseño: añade un workflow de GitHub Actions en .github/workflows/ci.yml que valida el código del repo en cada push a main y en cada PR.

Jobs del workflow

  1. test-loganalyzer — sobre proyecto/:
    • uv sync --group dev.
    • ruff check src tests.
    • pytest -v (corre los 4 ficheros de test del proyecto).
  2. lint-soluciones — sobre el resto del repo:
    • ruff check modulo-*/soluciones/.
    • Garantiza que el código de referencia que enseñas no se pudre con el tiempo.

Decisiones

  • No corre tests sobre las soluciones/ — algunas dependen de servicios externos (httpx apuntando a APIs reales en m06, mocks de red en m07). Solo lint sobre ellas, que es lo razonable.
  • No corre tests sobre ejercicios/ — son stubs con raise NotImplementedError por diseño, fallarían siempre.
  • Sin mypy por ahora — el proyecto es pequeño y los tipos están bien anotados, mypy aportaría poco a cambio de tiempo de CI. Si quieres añadirlo, basta con un step extra.
  • Matriz de Python: solo 3.12 (el .python-version del repo). Si quieres garantizar compat 3.13 más adelante, se añade fácil.

Dependencia con #6

Este workflow asume que existe proyecto/. Si se mergea antes que la PR #6, el job test-loganalyzer fallará en la primera ejecución hasta que proyecto/ aparezca en main. Recomendado: mergear #6 primero.

Plan de test

  • Después del merge, ver que el workflow se ejecuta en la siguiente PR.
  • Romper algo a propósito (typo en una solución) y verificar que la CI lo detecta.

@sourcery-ai

sourcery-ai Bot commented May 13, 2026

Copy link
Copy Markdown

Guía para revisores

Agrega un flujo de trabajo de CI de GitHub Actions que ejecuta pruebas y linting para el proyecto loganalyzer y realiza linting del código de soluciones del curso usando uv, ruff y pytest en los push a main y en las pull requests.

Diagrama de flujo para el nuevo flujo de trabajo de CI de GitHub Actions

flowchart LR
  Trigger[Push to main or Pull request]

  Trigger --> JobTestLoganalyzer[Test job test-loganalyzer]
  Trigger --> JobLintSoluciones[Lint job lint-soluciones]

  subgraph TestLoganalyzer
    A1[Checkout repo]
    A2[Install uv]
    A3[Install Python 3.12]
    A4[uv sync --group dev in proyecto]
    A5[uv run ruff check src tests]
    A6[uv run pytest -v]

    A1 --> A2 --> A3 --> A4 --> A5 --> A6
  end

  subgraph LintSoluciones
    B1[Checkout repo]
    B2[Install uv]
    B3[Install Python 3.12]
    B4[uv sync --group dev at repo root]
    B5[uv run ruff check modulo-*/soluciones/]

    B1 --> B2 --> B3 --> B4 --> B5
  end
Loading

Cambios a nivel de archivo

Cambio Detalles Archivos
Introducir un flujo de trabajo de CI con trabajos separados para las pruebas del proyecto y el linting de las soluciones.
  • Agregar un flujo de trabajo de GitHub Actions que se dispare en los push a main y en las pull requests.
  • Crear un job test-loganalyzer que se ejecute en el directorio proyecto con Python 3.12 gestionado por uv, sincronizando las dependencias de desarrollo, ejecutando ruff sobre src y tests, y ejecutando pytest con salida detallada (verbose).
  • Crear un job lint-soluciones que se ejecute en la raíz del repositorio con Python 3.12 gestionado por uv, sincronizando las dependencias de desarrollo y ejecutando ruff solo sobre las rutas modulo-*/soluciones/.
.github/workflows/ci.yml

Consejos y comandos

Interactuar con Sourcery

  • Iniciar una nueva revisión: Comenta @sourcery-ai review en la pull request.
  • Continuar conversaciones: Responde directamente a los comentarios de revisión de Sourcery.
  • Generar un issue de GitHub desde un comentario de revisión: Pídele a Sourcery que cree un
    issue a partir de un comentario de revisión respondiendo a dicho comentario. También puedes responder a un
    comentario de revisión con @sourcery-ai issue para crear un issue a partir de él.
  • Generar un título para la pull request: Escribe @sourcery-ai en cualquier parte del título
    de la pull request para generar un título en cualquier momento. También puedes comentar
    @sourcery-ai title en la pull request para (re)generar el título en cualquier momento.
  • Generar un resumen de la pull request: Escribe @sourcery-ai summary en cualquier parte del
    cuerpo de la pull request para generar un resumen de la PR en cualquier momento exactamente donde
    lo quieras. También puedes comentar @sourcery-ai summary en la pull request para
    (re)generar el resumen en cualquier momento.
  • Generar la guía para revisores: Comenta @sourcery-ai guide en la pull request
    para (re)generar la guía para revisores en cualquier momento.
  • Resolver todos los comentarios de Sourcery: Comenta @sourcery-ai resolve en la
    pull request para resolver todos los comentarios de Sourcery. Es útil si ya has
    abordado todos los comentarios y no quieres seguir viéndolos.
  • Descartar todas las revisiones de Sourcery: Comenta @sourcery-ai dismiss en la
    pull request para descartar todas las revisiones existentes de Sourcery. Especialmente útil si
    quieres empezar de cero con una nueva revisión; no olvides comentar
    @sourcery-ai review para iniciar una nueva revisión.

Personalizar tu experiencia

Accede a tu panel de control para:

  • Activar o desactivar funciones de revisión como el resumen de la pull request
    generado por Sourcery, la guía para revisores y otras.
  • Cambiar el idioma de revisión.
  • Agregar, eliminar o editar instrucciones de revisión personalizadas.
  • Ajustar otros parámetros de revisión.

Obtener ayuda

Original review guide in English

Reviewer's Guide

Adds a GitHub Actions CI workflow that runs tests and linting for the loganalyzer project and lints course solution code using uv, ruff, and pytest on pushes to main and pull requests.

Flow diagram for the new GitHub Actions CI workflow

flowchart LR
  Trigger[Push to main or Pull request]

  Trigger --> JobTestLoganalyzer[Test job test-loganalyzer]
  Trigger --> JobLintSoluciones[Lint job lint-soluciones]

  subgraph TestLoganalyzer
    A1[Checkout repo]
    A2[Install uv]
    A3[Install Python 3.12]
    A4[uv sync --group dev in proyecto]
    A5[uv run ruff check src tests]
    A6[uv run pytest -v]

    A1 --> A2 --> A3 --> A4 --> A5 --> A6
  end

  subgraph LintSoluciones
    B1[Checkout repo]
    B2[Install uv]
    B3[Install Python 3.12]
    B4[uv sync --group dev at repo root]
    B5[uv run ruff check modulo-*/soluciones/]

    B1 --> B2 --> B3 --> B4 --> B5
  end
Loading

File-Level Changes

Change Details Files
Introduce CI workflow with separate jobs for project tests and solutions linting.
  • Add a GitHub Actions workflow triggered on pushes to main and on pull requests.
  • Create a test-loganalyzer job that runs in the proyecto directory with uv-managed Python 3.12, syncing dev dependencies, running ruff on src and tests, and executing pytest with verbose output.
  • Create a lint-soluciones job that runs at the repo root with uv-managed Python 3.12, syncing dev dependencies, and running ruff on modulo-*/soluciones/ paths only.
.github/workflows/ci.yml

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@dcarrascosa
dcarrascosa merged commit ab15648 into main May 13, 2026
1 of 3 checks passed

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hola, he dejado algunos comentarios de alto nivel:

  • Considera extraer los pasos duplicados setup-uv + uv python install + uv sync entre test-loganalyzer y lint-soluciones (por ejemplo, mediante una acción compuesta o un workflow reutilizable) para mantener la configuración de CI DRY y más fácil de evolucionar.
  • Ya que test-loganalyzer depende de proyecto/, quizá quieras proteger ese job con una condición (por ejemplo, un if sobre hashFiles('proyecto/**') o filtros de paths) para que el workflow no falle cuando ese directorio aún no esté presente en main.
Prompt para agentes de IA
Please address the comments from this code review:

## Overall Comments
- Consider factoring out the duplicated `setup-uv` + `uv python install` + `uv sync` steps between `test-loganalyzer` and `lint-soluciones` (e.g., via a composite action or reusable workflow) to keep the CI config DRY and easier to evolve.
- Since `test-loganalyzer` depends on `proyecto/`, you may want to guard that job with a condition (e.g., `if` on `hashFiles('proyecto/**')` or `paths` filters) so the workflow doesn’t fail when that directory is not yet present on `main`.

Sourcery es gratuito para open source: si te gustan nuestras revisiones, considera compartirlas ✨
¡Ayúdame a ser más útil! Haz clic en 👍 o 👎 en cada comentario y usaré ese feedback para mejorar tus revisiones.
Original comment in English

Hey - I've left some high level feedback:

  • Consider factoring out the duplicated setup-uv + uv python install + uv sync steps between test-loganalyzer and lint-soluciones (e.g., via a composite action or reusable workflow) to keep the CI config DRY and easier to evolve.
  • Since test-loganalyzer depends on proyecto/, you may want to guard that job with a condition (e.g., if on hashFiles('proyecto/**') or paths filters) so the workflow doesn’t fail when that directory is not yet present on main.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- Consider factoring out the duplicated `setup-uv` + `uv python install` + `uv sync` steps between `test-loganalyzer` and `lint-soluciones` (e.g., via a composite action or reusable workflow) to keep the CI config DRY and easier to evolve.
- Since `test-loganalyzer` depends on `proyecto/`, you may want to guard that job with a condition (e.g., `if` on `hashFiles('proyecto/**')` or `paths` filters) so the workflow doesn’t fail when that directory is not yet present on `main`.

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant