Cómo recuperar un repo eliminado por «manazas» en Azure DevOps

Seguro que todos vosotros algún sábado o domingo a mediodía habéis estado lentos antes de cambiar de canal y habéis visto el comienzo de la típica película que empieza diciendo: «Basada en hechos reales…»

Pues así es esta historia…

Hace unas semanas, el típico que viernes que sorprendentemente iba raramente tranquilo, de repente recibo una llamada de un compañero y me comenta que ¡¡¡¡ha eliminado un repo en Azure DevOps por error!!!!

Tras asimilar lo sucedido, y tranquilizar a mi compañero recordé que normalmente las acciones de borrado pasan a un estado de eliminación temporal (Recycle Bin) durante un período de tiempo antes de que se eliminen definitivamente y se vuelvan irrecuperables.

Es entonces cuando me puse a «bucear» en la documentación de la API de Azure DevOps y damos con el enlace perfecto:

Restore repository from recycle bin, from Azure DevOps REST API docs

Antes explicar en detalle los pasos a seguir para recuperar el repo me gustaría recordar que la eliminación de repo está limitada al grupo Project Administrators. Aquí aprovecho para recordar que es muy, muy importante seguir una asignación jerárquica de permisos y que no recomiendo añadir a todos los integrantes de nuestro equipo a este grupo.

Para realizar la llamada API REST prefiero usar Postman.

1. Primero debemos crear un token que usaremos para autenticar en Azure DevOps desde Postman. Nos aseguramos de proporcionar el alcance y la fecha de caducidad adecuados al crear el token.

2. Luego, en la solicitud del Postman, hacemos clic en la pestaña Authorization y seleccionamos el tipo Basic Auth . Ingresamos el token generado en el campo Password y dejamos el campo Username en blanco.

3. A continuación, obtengamos una lista de todos los repositorios de Azure eliminados que residen actualmente en su papelera de reciclaje utilizando la solicitud GET con la siguiente URL:

GET https://dev.azure.com/{organization}/{project}/_apis/git/recycleBin/repositories?api-version=6.0-preview.1

4. Hacemos clic en Send para enviar la solicitud. Esto nos dará una lista de todos los Azure Repos eliminados. Buscamos el nombre del repositorio que le queremos restaurar en la salida JSON y obtenemos el valor del campo ID para ese repositorio.

5. A continuación, creamos una nueva solicitud PATCH para restaurar el repositorio eliminado utilizando el GUID descubierto en el paso anterior.

PATCH https://dev.azure.com/{organization}/{project}/_apis/git/recycleBin/repositories/{repositoryId}?api-version=6.0-preview.1

6. Configuramos la pestaña Authorization de la solicitud de la misma manera que lo hicimos en el paso 2.

7. Configuramos la pestaña Body de la solicitud como JSON sin procesar e inserte lo siguiente:

{ 
   "deleted": false 
}

8. Por último, enviamos la solicitud haciendo clic en Send para enviar la solicitud. Verificamos la salida y asegúrese de que «state» esté configurado como «wellformed».

¡Y conseguido! ¡Repo recuperado! Y mi compañero recupero el aliento.

Espero que os sea útil y os ayude a respirar en situaciones como esta, ¡hasta el próximo tip!