2.6 KiB
2.6 KiB
Spec: self-update
ADDED Requirements
Requirement: Consulta de la última release de Gitea
El sistema SHALL consultar el endpoint /api/v1/repos/{owner}/{repo}/releases/latest de la instancia de Gitea configurada para obtener la última release disponible.
Scenario: Consulta exitosa de última release
- WHEN se ejecuta la lógica de auto-actualización y la API de Gitea responde correctamente
- THEN el sistema obtiene el tag de la release y la lista de assets publicados
Scenario: Gitea no accesible
- WHEN la instancia de Gitea no es accesible o responde con error
- THEN el sistema finaliza con un mensaje de error sin modificar el binario actual
Requirement: Comparación de versiones
El sistema SHALL comparar la versión actual del binario (Version inyectada vía ldflags) con el tag de la última release de Gitea, y MUST omitir la actualización si la versión actual es igual o superior.
Scenario: Versión actualizada disponible
- WHEN el tag de Gitea indica una versión superior a la versión actual
- THEN el sistema procede a descargar el asset correspondiente
Scenario: Versión ya actualizada
- WHEN la versión actual es igual o superior al tag de la última release
- THEN el sistema informa que no hay actualizaciones y no realiza cambios en el binario
Requirement: Descarga del asset compatible
El sistema SHALL seleccionar el asset de la release cuyo nombre corresponda al sistema operativo y arquitectura actuales (runtime.GOOS, runtime.GOARCH), y MUST descargarlo antes de aplicar la actualización.
Scenario: Asset compatible disponible
- WHEN la release contiene un asset que coincide con el
GOOS/GOARCHactuales - THEN el sistema descarga dicho asset para aplicar la actualización
Scenario: Asset compatible no disponible
- WHEN la release no contiene un asset para la plataforma actual
- THEN el sistema finaliza con un error indicando que no existe binario para la plataforma
Requirement: Aplicación del binario descargado
El sistema SHALL aplicar el binario descargado utilizando selfupdate.Apply (github.com/minio/selfupdate), reemplazando el binario en ejecución.
Scenario: Actualización aplicada correctamente
- WHEN el asset descargado es un binario válido
- THEN el sistema reemplaza el binario actual mediante
selfupdate.Applye informa el éxito de la operación
Scenario: Asset corrupto o inválido
- WHEN el asset descargado no es un binario válido
- THEN el sistema aborta la actualización e informa el error sin dejar el binario en estado inconsistente