# Automatizar tus construcciones con GitHub Actions


## Requisitos previos

Completa todas las secciones anteriores de esta guía, comenzando con [Contenedorizar una aplicación Python](/guides/python/configure-github-actions/containerize/). Debes tener una cuenta de [GitHub](https://github.com/signup) y una cuenta verificada de [Docker](https://hub.docker.com/signup) para completar esta sección.

Si aún no has creado un [repositorio de GitHub](https://github.com/new) para tu proyecto, es el momento de hacerlo. Después de crear el repositorio, no olvides [agregar un origen remoto](https://docs.github.com/en/get-started/getting-started-with-git/managing-remote-repositories) y asegurarte de que puedes confirmar y [subir tu código](https://docs.github.com/en/get-started/using-git/pushing-commits-to-a-remote-repository#about-git-push) a GitHub.

1. En el repositorio de GitHub de tu proyecto, abre **Settings** (Configuración) y ve a **Secrets and variables** > **Actions**.

2. En la pestaña **Variables**, crea una nueva **Repository variable** llamada `DOCKER_USERNAME` con tu Docker ID como valor.

3. Crea un nuevo [Token de Acceso Personal (PAT)](/security/access-tokens/#create-an-access-token) para Docker Hub. Puedes nombrar este token como `docker-tutorial`. Asegúrate de que los permisos de acceso incluyan Read and Write (Lectura y Escritura).

4. Agrega el PAT como un **Repository secret** en tu repositorio de GitHub, con el nombre `DOCKERHUB_TOKEN`.

## Descripción general

GitHub Actions es una herramienta de automatización de CI/CD (Integración Continua y Despliegue Continuo) integrada en GitHub. Te permite definir flujos de trabajo (workflows) personalizados para construir, probar y desplegar tu código cuando ocurren eventos específicos (por ejemplo, subir código, crear una solicitud de extracción o pull request, etc.). Un flujo de trabajo es un script de automatización basado en YAML que define una secuencia de pasos a ejecutar cuando se activa. Los flujos de trabajo se almacenan en el directorio `.github/workflows/` de un repositorio.

En esta sección, aprenderás cómo configurar y usar GitHub Actions para construir tu imagen de Docker, así como para subirla a Docker Hub. Completarás los siguientes pasos:

1. Definir el flujo de trabajo de GitHub Actions.
2. Ejecutar el flujo de trabajo.

## 1. Definir el flujo de trabajo de GitHub Actions

Puedes crear un flujo de trabajo de GitHub Actions creando un archivo YAML en el directorio `.github/workflows/` de tu repositorio. Para hacer esto, usa tu editor de texto favorito o la interfaz web de GitHub. Los siguientes pasos muestran cómo crear un archivo de flujo de trabajo utilizando la interfaz web de GitHub.

Si prefieres usar la interfaz web de GitHub, sigue estos pasos:

1. Ve a tu repositorio en GitHub y selecciona la pestaña **Actions**.

2. Selecciona **set up a workflow yourself** (configurar un flujo de trabajo por ti mismo).

   Esto te llevará a una página para crear un nuevo archivo de flujo de trabajo de GitHub Actions en tu repositorio. Por defecto, el archivo se crea bajo `.github/workflows/main.yml`. Cambiemos su nombre a `build.yml`.

Si prefieres usar tu editor de texto, crea un nuevo archivo llamado `build.yml` en el directorio `.github/workflows/` de tu repositorio.

Agrega el siguiente contenido al archivo:

```yaml
name: Build and push Docker image

on:
  push:
    branches:
      - main

jobs:
  lint-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      
      - name: Configurar Python
        uses: actions/setup-python@v6
        with:
          python-version: '3.14'

      - name: Instalar dependencias
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt

      - name: Ejecutar hooks de pre-commit
        run: pre-commit run --all-files

      - name: Ejecutar pyright
        run: pyright

  build_and_push:
    runs-on: ubuntu-latest
    steps:
      - name: Iniciar sesión en Docker Hub
        uses: docker/login-action@v4
        with:
          username: ${{ vars.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Configurar Docker Buildx
        uses: docker/setup-buildx-action@v4

      - name: Construir y subir
        uses: docker/build-push-action@v7
        with:
          push: true
          tags: ${{ vars.DOCKER_USERNAME }}/${{ github.event.repository.name }}:latest
```

Cada flujo de trabajo de GitHub Actions incluye uno o varios trabajos (jobs). Cada trabajo consta de pasos (steps). Cada paso puede ejecutar un conjunto de comandos o usar [acciones ya existentes](https://github.com/marketplace?type=actions). La acción anterior tiene tres pasos principales de construcción:

1. [**Iniciar sesión en Docker Hub**](https://github.com/docker/login-action): La acción inicia sesión en Docker Hub utilizando el Docker ID y el Token de Acceso Personal (PAT) que creaste anteriormente.

2. [**Configurar Docker Buildx**](https://github.com/docker/setup-buildx-action): La acción configura Docker [Buildx](https://github.com/docker/buildx), un complemento de CLI que amplía las capacidades de la CLI de Docker.

3. [**Construir y subir**](https://github.com/docker/build-push-action): La acción construye y sube la imagen de Docker a Docker Hub. El parámetro `tags` especifica el nombre y la etiqueta de la imagen. En este ejemplo se utiliza la etiqueta `latest`.

## 2. Ejecutar el flujo de trabajo

Confirma los cambios y súbelos a la rama `main`. Este flujo de trabajo se ejecuta cada vez que subes cambios a la rama `main`. Puedes encontrar más información sobre los activadores de flujo de trabajo [en la documentación de GitHub](https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows).

Ve a la pestaña **Actions** de tu repositorio de GitHub. Mostrará el flujo de trabajo. Al seleccionar el flujo de trabajo se muestra el desglose de todos los pasos.

Cuando el flujo de trabajo se complete, ve a tus [repositorios en Docker Hub](https://hub.docker.com/repositories). Si ves el nuevo repositorio en esa lista, significa que el flujo de trabajo de GitHub Actions subió correctamente la imagen a Docker Hub.

## Resumen

En esta sección, aprendiste cómo configurar un flujo de trabajo de GitHub Actions para tu aplicación Python que incluye:

- Ejecución de hooks de pre-commit para linting y formateo
- Comprobación de tipo estático con Pyright
- Construcción y subida de imágenes de Docker

Información relacionada:

- [Introducción a GitHub Actions](/guides/gha/)
- [Acciones de GitHub para Docker Build](/build/ci/github-actions/)
- [Sintaxis de flujo de trabajo para GitHub Actions](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions)

## Pasos siguientes

En la siguiente sección, aprenderás cómo puedes desarrollar localmente usando Kubernetes.

