# Exportar repositorios de la organización a CSV


Esta guía te muestra cómo exportar una lista completa de repositorios de tu organización de Docker Hub, incluyendo los repositorios privados. Utilizarás un Token de Acceso Personal (PAT) de una cuenta de administrador para autenticarte con la API de Docker Hub y exportar los detalles del repositorio a un archivo CSV para informes o análisis.

Los datos exportados incluyen el nombre del repositorio, el estado de visibilidad, la fecha de la última actualización, el recuento de descargas (pulls) y el recuento de estrellas.

## Requisitos previos

Antes de comenzar, asegúrate de tener:

- Acceso de administrador a una organización de Docker Hub
- `curl` instalado para realizar solicitudes de API
- `jq` instalado para el análisis de JSON
- Una aplicación de hoja de cálculo para ver el archivo CSV

## Crear un token de acceso personal

[Crea un token de acceso personal](/security/access-tokens/) desde una cuenta de usuario que tenga acceso a los repositorios de la organización. Al crear el token, selecciona como mínimo permisos de acceso de **Read-only** (solo lectura) para listar repositorios.

> [!IMPORTANT]
>
> Utiliza un PAT de una cuenta de usuario que sea miembro de la organización. Los usuarios con roles de propietario (owner) pueden exportar todos los repositorios de la organización. Los miembros solo pueden exportar repositorios a los que tengan permiso de acceso.

## Autenticarse con la API de Docker Hub

Intercambia tu token de acceso personal por un token de portador JWT que utilizarás para las solicitudes de API posteriores.

1. Configura tu nombre de usuario de Docker Hub, el nombre de la organización y el token de acceso personal como variables:

   ```bash
   USERNAME="<tu-usuario-docker>"
   ORG="<nombre-org>"
   PAT="<tu-token-de-acceso-personal>"
   ```

2. Llama al punto de conexión de autenticación para obtener un JWT:

   ```bash
   TOKEN=$(
     curl -s https://hub.docker.com/v2/auth/token \
       -H 'Content-Type: application/json' \
       -d "{\"identifier\":\"$USERNAME\",\"secret\":\"$PAT\"}" \
     | jq -r '.access_token'
   )
   ```

3. Verifica que el token se haya recuperado correctamente:

   ```console
   $ echo "Got JWT: ${#TOKEN} chars"
   ```

Utilizarás este JWT como un token de portador (Bearer token) en la cabecera `Authorization` para todas las llamadas API posteriores.

## Recuperar todos los repositorios

La API de Docker Hub pagina las listas de repositorios. Este script recupera todas las páginas y combina los resultados.

1. Establece el tamaño de página y el punto de conexión inicial de la API:

   ```bash
   PAGE_SIZE=100
   URL="https://hub.docker.com/v2/namespaces/$ORG/repositories?page_size=$PAGE_SIZE"
   ```

2. Pagina a través de todos los resultados:

   ```bash
   ALL=$(
     while [ -n "$URL" ] && [ "$URL" != "null" ]; do
       RESP=$(curl -s "$URL" -H "Authorization: Bearer $TOKEN")
       echo "$RESP" | jq -c '.results[]'
       URL=$(echo "$RESP" | jq -r '.next')
     done | jq -s '.'
   )
   ```

3. Verifica la cantidad de repositorios recuperados:

   ```console
   $ echo "$ALL" | jq 'length'
   ```

El script continúa solicitando la URL `next` de cada respuesta hasta que se completa la paginación.

## Exportar a CSV

Genera un archivo CSV con los detalles del repositorio que puedas abrir en aplicaciones de hojas de cálculo.

Ejecuta el siguiente comando para crear `repos.csv`:

```bash
echo "$ALL" | jq -r '
  (["namespace","name","is_private","last_updated","pull_count","star_count"] | @csv),
  (.[] | [
    .namespace, .name, .is_private, .last_updated, (.pull_count//0), (.star_count//0)
  ] | @csv)
' > repos.csv
```

Verifica que la exportación se haya completado:

```console
$ echo "Rows:" $(wc -l < repos.csv)
```

Abre el archivo `repos.csv` en tu aplicación de hoja de cálculo preferida para ver y analizar los datos de tus repositorios.

## Solución de problemas

### Solo aparecen repositorios públicos

Es posible que la cuenta de Docker Hub asociada con tu token de acceso personal no tenga acceso a los repositorios privados de la organización.

Para solucionar esto:

1. Verifica que la cuenta sea miembro de la organización
2. Comprueba que la cuenta tenga los permisos adecuados (rol de propietario o miembro)
3. Asegúrate de que el token de acceso personal tenga suficientes permisos de acceso
4. Vuelve a generar el JWT y reintenta la exportación

### La API devuelve 403 o faltan campos

Asegúrate de estar utilizando el JWT del punto de conexión `/v2/auth/token` como un token de portador (Bearer token) en la cabecera `Authorization`, no el token de acceso personal directamente.

Verifica tu autenticación:

```console
$ curl -s "https://hub.docker.com/v2/namespaces/$ORG/repositories?page_size=1" \
  -H "Authorization: Bearer $TOKEN" | jq
```

Si esto devuelve un error, vuelve a ejecutar el paso de autenticación para obtener un JWT nuevo.

