# Añadir anotaciones de imagen con GitHub Actions


Las anotaciones te permiten especificar metadatos arbitrarios para los componentes de una imagen OCI, como manifiestos, índices y descriptores.

Para añadir anotaciones al compilar imágenes con GitHub Actions, utiliza la acción [metadata-action] para crear automáticamente anotaciones que cumplan con la especificación OCI. La acción de metadatos crea una salida `annotations` a la que puedes hacer referencia, tanto con [build-push-action] como con [bake-action].

[metadata-action]: https://github.com/docker/metadata-action#overwrite-labels-and-annotations
[build-push-action]: https://github.com/docker/build-push-action/
[bake-action]: https://github.com/docker/bake-action/

**build-push-action**



```yaml {hl_lines=32}
name: ci

on:
  push:

env:
  IMAGE_NAME: user/app

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

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

      - name: Extraer metadatos
        id: meta
        uses: docker/metadata-action@v6
        with:
          images: ${{ env.IMAGE_NAME }}

      - name: Compilar y enviar
        uses: docker/build-push-action@v7
        with:
          tags: ${{ steps.meta.outputs.tags }}
          annotations: ${{ steps.meta.outputs.annotations }}
          push: true
```

**bake-action**



```yaml {hl_lines=37}
name: ci

on:
  push:

env:
  IMAGE_NAME: user/app

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

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

      - name: Extraer metadatos
        id: meta
        uses: docker/metadata-action@v6
        with:
          images: ${{ env.IMAGE_NAME }}

      - name: Compilar
        uses: docker/bake-action@v7
        with:
          files: |
            ./docker-bake.hcl
            cwd://${{ steps.meta.outputs.bake-file-tags }}
            cwd://${{ steps.meta.outputs.bake-file-annotations }}
          push: true
```



## Configurar el nivel de anotación

De forma predeterminada, las anotaciones se colocan en los manifiestos de la imagen. Para configurar el [nivel de anotación](/build/metadata/annotations/#specify-annotation-level), establece la variable de entorno `DOCKER_METADATA_ANNOTATIONS_LEVELS` en el paso de la acción `metadata-action` con una lista separada por comas de todos los niveles que deseas anotar. Por ejemplo, establecer `DOCKER_METADATA_ANNOTATIONS_LEVELS` en `index` genera anotaciones en el índice de la imagen en lugar de en los manifiestos.

El siguiente ejemplo crea anotaciones tanto en el índice de la imagen como en los manifiestos.

```yaml {hl_lines=28}
name: ci

on:
  push:

env:
  IMAGE_NAME: user/app

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

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

      - name: Extraer metadatos
        id: meta
        uses: docker/metadata-action@v6
        with:
          images: ${{ env.IMAGE_NAME }}
        env:
          DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index

      - name: Compilar y enviar
        uses: docker/build-push-action@v7
        with:
          tags: ${{ steps.meta.outputs.tags }}
          annotations: ${{ steps.meta.outputs.annotations }}
          push: true
```

> [!NOTE]
>
> La compilación debe producir los componentes que deseas anotar. Por ejemplo,
> para anotar un índice de imagen, la compilación debe producir un índice. Si la compilación
> produce solo un manifiesto y especificas `index` o `index-descriptor`, la
> compilación fallará.

