Ir al contenido

Publicar una versión

Experto

Convierte una compilación probada en una versión. Esta página es para mantenedores.

  • Todas las comprobaciones de Pruebas pasan, incluidas una ejecución completa de extremo a extremo y las ejecuciones largas y de fallos.
  • CHANGELOG.md tiene la versión nueva.
  • Python 3 está instalado para los scripts de publicación.

Prepara una versión

Enlace a Prepara una versión
  1. Escribe releases/notes-<version>.toml, por ejemplo releases/notes-1.0.0.toml. Consulta Archivo de notas de la versión.

  2. Compruébalo:

    Terminal window
    python deploy/release/notes.py 1.0.0 --check

    No deberías ver errores. Una palabra prohibida, una raya, una fecha, frases de lanzamiento o un issue destacado repetido hacen que termine con 1.

  3. Genera los textos de la versión:

    Terminal window
    python deploy/release/notes.py 1.0.0

    Deberías encontrar 7 archivos en releases/out/1.0.0/.

  4. Compila la imagen e iníciala con una carpeta de configuración nueva:

    Terminal window
    docker build --file deploy/Dockerfile .

    Deberías ver el asistente de primer inicio.

  5. Ejecuta todas las comprobaciones de Pruebas en tu equipo. Las pruebas se ejecutan en local, no en GitHub.

  6. Entrega la versión al mantenedor. El mantenedor sube la etiqueta de la versión en main, y eso inicia la publicación.

Nombres de versión y de etiqueta

Enlace a Nombres de versión y de etiqueta
Elemento Nombre
Etiqueta de Git (la sube el mantenedor) 1.0.0 (solo números, sin v)
Etiqueta de la imagen y version de las notas 1.0.0

El workflow se inicia solo con una etiqueta X.Y.Z y se detiene cuando la etiqueta no coincide con el archivo VERSION.

Etiquetas de la imagen

Enlace a Etiquetas de la imagen

Cada versión sube su etiqueta de versión y :latest.

Retira una versión

Enlace a Retira una versión
  1. Sube la siguiente versión con la corrección.
  2. Marca la versión defectuosa en la lista de actualizaciones para que las instalaciones no la ofrezcan.
  3. Conserva la etiqueta.

Síntoma. notes.py --check termina con 1. Causa. El archivo de notas incumple una regla. El mensaje indica la línea. Solución. Edita el archivo de notas, nunca los archivos de releases/out, y ejecútalo otra vez.

Síntoma. El workflow se detiene con VERSION says. Causa. La etiqueta y el archivo VERSION no coinciden. Solución. Corrige VERSION en main y sube la etiqueta de la siguiente versión.

Archivo de notas de la versión

Todos los textos de una versión salen de un solo archivo. Nunca edites a mano lo que genera.

Campo Contenido
version X.Y.Z sin más
theme Una línea
images Lista de {registry, name}. Solo holyarrs/holyarrs de Docker Hub
docs_url Opcional. Vacío significa sin enlace a la documentación
[[highlights]] Exactamente 3, cada uno con line, issues y shot. Sus issues no aparecen en ninguna línea de grupo
[groups] Líneas por lugar. Nuevo es lo predeterminado. Las demás empiezan por Changed: , Fixed: o Docs: . Cada una termina con su issue, como (#46). Un lugar con menos de 3 líneas va bajo Also new
Opcional [before_you_update] (breaking, manual_steps, backup, rollback), security, known_issues, credits, [stats]. Las partes vacías se ocultan

Usa un nombre de usuario de GitHub solo cuando se conoce, en el archivo de notas o en releases/credits-map.json.

Orden del cuerpo: tema, Highlights, lugares (Requests, Library, Downloads, Indexers, Accounts, Health, Setup, Install), Also new, Security, Known issues, Before you update, Image, Thanks, línea de estadísticas.

Salida en releases/out/<version>/ Se usa para
changelog.md La entrada del registro de cambios
github.md El cuerpo de la versión en GitHub
update-notes.json Las notas que muestra la app
reddit.txt La publicación de Reddit
discord-dm.txt, discord-announce.md Discord. Cada uno se queda por debajo de 1000 caracteres
roadmap-card.json La tarjeta de la hoja de ruta

notes.py acepta --file (otro archivo de notas), --map (otro mapa de créditos), --out (otra carpeta de salida) y --date. --check advierte de líneas largas y de casi repeticiones.

El workflow de la imagen

El workflow HolyArrs - Release se inicia cuando se sube una etiqueta de versión. Tiene tres pasos:

  1. Compilar y subir la imagen para linux/amd64, linux/arm64 y linux/arm/v7, con la etiqueta de versión y latest.
  2. Actualizar la descripción de Docker Hub a partir de README.md.
  3. Publicar la versión en GitHub con la sección de CHANGELOG.md de esta versión.
Lista de actualizaciones

La app lee una lista de actualizaciones firmada. Cada versión añade su entrada y la firma. La clave de firma nunca entra en el repositorio. HolyArrs rechaza una lista que no puede verificar.

Después de una versión, comprueba que la etiqueta de versión de la imagen coincide con la etiqueta de Git, y vigila los issues nuevos durante el primer día:

Terminal window
docker inspect --format '{{ index .Config.Labels "org.opencontainers.image.version" }}' holyarrs
Plantilla de prueba para Unraid

deploy/release/nas-template.py escribe una plantilla de usuario de Unraid para una imagen exacta. No descarga, instala ni publica nada.

Terminal window
python deploy/release/nas-template.py --image 'holyarrs/holyarrs@sha256:<digest>' --config '/mnt/<pool>/appdata/holyarrs-test' --movies /mnt/user/holyarrs-test-data/movies --downloads /mnt/user/holyarrs-test-data/downloads --port 6262 --output holyarrs-test.xml

Sustituye <digest> y <pool>.

Opción Notas
--image El digest del manifiesto en el registro, no un ID de imagen de Docker
--config Una ruta de pool. La herramienta rechaza /mnt/user y /mnt/user0
--movies, --tv, --music, --downloads Opcionales. Rutas separadas son montajes separados, así que las importaciones copian
--port De forma predeterminada, 6262
--allowed-hosts Opcional, nombres de host separados por comas
--output El archivo XML que se escribe

La plantilla establece PUID=99, PGID=100 y UMASK=022. Da a esa cuenta permiso de escritura sobre los medios de prueba. Pon el archivo en /boot/config/plugins/dockerMan/templates-user/ y elígelo en Docker > Add Container > Template (Docker > Añadir contenedor > Plantilla).

HolyArrs es gratis. Si te ahorró tiempo, dale una estrella en GitHub, patrocínalo o invítame a un café.