# 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`/`GOARCH` actuales - **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.Apply` e 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