48 lines
2.6 KiB
Markdown
48 lines
2.6 KiB
Markdown
# 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
|