SubLaneSubLane

Comunicados

SubLane guía: liberaciones.

El Release el flujo de trabajo comienza cuando un mantenedor empuja un v* tag. No hay una liberación automática en las pliegues de rama ordinarias o solicitudes de tira.

Contrato de versión

Use etiquetas canónicas como v0.1.0 o v0.1.0-rc.1. La versión de la aplicación y Docker versión tag omitir el líder v. Componentes numéricos de plomo cero, espacio blanco, personajes de cáscara y metadatos de construcción SemVer+...) son rechazados antes de la publicación. Los identificadores numéricos pre-release también deben ser canónicos.

Cada versión incluye:

  • sublane_VERSION_linux_amd64.tar.gz y sublane_VERSION_linux_arm64.tar.gz.
  • docker.compose.yaml y SHA256SUMS para los archivos de lanzamiento público.
  • Un multiplataforma ghcr.io/murongg/sublane:VERSION imagen, además de las dos etiquetas de arquitectura.
  • Mantenga una nota de lanzamiento de Changelog generada a partir de la historia de Git con git-cliff 2.14.2.

Sólo la etiqueta de versión estable más alta actualmente presente en el repositorio puede actualizar el Docker latest canal y GitHubUna versión de mantenimiento anterior o una versión de mantenimiento más antigua nunca mueve esos canales hacia atrás. Si la construcción de la etiqueta más alta estable falla, reimprime esa versión; las etiquetas inferiores intencionadamente no ocupan su lugar. Los deployments deben marcar una versión o digerir en lugar de confiar en latest.

Configuración del repositorio de primera vez

El flujo de trabajo utiliza GITHUB_TOKEN, con alcance a contents: write y packages: write sólo en el trabajo de publicación. No necesita un Docker Cuenta de Hub o una ficha de acceso personal. GitHub Las acciones y la publicación de paquetes GHCR deben ser permitidas por la política de repositorio/organización. Todas las dependencias de acción están sujetas a SHAs de compromiso completo.

La etiqueta fuente del repositorio vincula la imagen al repositorio. Los paquetes GHCR pueden ser inicialmente privados incluso para un repositorio de fuente pública. Después de la primera publicación exitosa, compruebe la configuración de acceso del paquete y hacerlo público si se pretenden tiradas anónimas. GitHub's Documentación del registro de contenedores. Mantenga paquetes publicados asociados con este repositorio para que los flujos de trabajo posteriores mantengan el acceso a escritura.

Publicar una versión

Generar y revisar CHANGELOG.md en su rama de desarrollo con make changelog, luego comprometerlo con la documentación de la publicación. Combinar estos cambios y el flujo de trabajo de la liberación primero, y ejecutar make check. Elija una nueva versión no utilizada; no mueva una etiqueta de liberación existente.

Por ejemplo, después de elegir v0.1.0:

Publish a version · 1
git switch main
git pull --ff-only
make publish-check TAG=v0.1.0
make publish TAG=v0.1.0

make publish-check ejecuta el mismo preflight sin crear o empujar una etiqueta. make publish crea una etiqueta anotada en el commit inspeccionado y empuja solamente esa etiqueta. Ambos requieren un árbol de trabajo limpio (incluyendo archivos no rastreados), el main rama, un flujo de trabajo de liberación existente en ese compromiso, y exactamente uno origin destino impulsor cuyo destino main coincide con HEAD local. Las etiquetas duplicadas locales o remotas son rechazadas. Ninguna rama se cambia, se fusiona o empuja automáticamente.

La etiqueta determina el tipo de liberación; no se necesita una bandera de prerrelease separada:

Publish a version · 2
make publish TAG=v0.1.0-rc.1

También puede correr node scripts/publish.mjs v0.1.0 --dry-run o node scripts/publish.mjs v0.1.0 directamente desde el repositorio. Node.js 24 y Git son necesarios, con las credenciales de empuje Git (por ejemplo, un agente SSH); Docker Las credenciales del Hub no son necesarias. El script verifica la etiqueta remota después de empujar e imprimir el GitHub Enlace de flujo de trabajo de acciones cuando el control remoto configurado utiliza un reconocido GitHub URL.

Si un empuje falla o su resultado no puede ser verificado, la etiqueta local se mantiene porque el remoto ya puede haber aceptado. Inspeccione el mando remoto y Acciones primero. Si la etiqueta remota está ausente, utilice el comando de retry de una sola etiqueta impreso por el script. Nunca elimina etiquetas o los pómulos de fuerza. El script activa el oleoducto de CI existente; no informa de las construcciones o publicación como completa simplemente porque el impulso de la etiqueta ha sucedido.

La versión de ejemplo es ilustrativa. Publicar una versión elegida a la vez e inspeccionar el resultado de Acciones antes de anunciar la disponibilidad. Empujar una etiqueta de versión es el gatillo de la publicación; el flujo de trabajo crea el GitHub Suéltase.

Secuencia de flujo de trabajo

  1. Validar la etiqueta y computar la ruta de imagen GHCR de la minúscula desde el nombre del repositorio.
  2. Llame al flujo de trabajo normal de la CI: comprobación de la deriva sqlc, prueba de carrera/vet, cheques de frontend/compild, pruebas de metadatos de liberación y Compose validación.
  3. Construir y fumar prueba el Docker imagen en los corredores nativos de Linux amd64 y arm64. En PRs y versiones, extrae el binario real de cada imagen probada, envase con archivos de implementación y avisos de licencia, luego desempaca y ejecute la versión.
  4. Después de que todos los cheques pasen, busque la historia completa etiquetada, genere notas de liberación con cliff.toml, y crear o reanudar un borrador GitHub Lanzamiento. Los borradores de notas se regeneran en la reingresación; una publicación publicada anteriormente nunca se sobrescribe.
  5. Cargar y empujar esas imágenes probadas, luego crear la etiqueta de versión multiplataforma. No hay segunda compilación de aplicaciones ocurre durante la publicación.
  6. Cargue archivos binarios, Compose y SHA-256 checksums. Promover el canal más nuevo estable cuando sea elegible, luego publicar la versión completada.

Las etiquetas Version/source/revision están incrustadas en la imagen y sublane --version Los sistemas de archivos raíz de imagen contienen sólo utilidades de tiempo de ejecución alpino, certificados públicos de CA, avisos binarios y de licencia. No se incluye ninguna comprobación de fuente, compilador, dependencias de Node.js o datos locales. Construir contexto que permite la lista excluye bases de datos locales, claves de cifrado, copias de seguridad y árboles de trabajo.

Fallos y registros

Usar Trabajos fracasados en el mismo flujo de trabajo de la etiqueta se ejecuta cuando una red, construcción o operación del registro falla. Antes de la terminación, los artefactos de liberación permanecen en un borrador y pueden ser reemplazados por una retry. Las imágenes de per-arquitectura/versión pueden existir si un paso posterior falla; la retry completa la misma liberación. GitHub La liberación no puede ser una transacción atómica, así que compruebe ambos destinos después de un fracaso.

Los artefactos se conservan durante siete días. Después de la expiración, reelabore todos los trabajos para reconstruirlos y volver a probarlos. Reruns reemplaza los mismos artefactos de Acciones dentro de esa carrera; ya publicados GitHub Una vez que se publique una versión, utilice una nueva versión para correcciones de código o embalaje en lugar de sobreescribirla. Eliminar o mover una etiqueta no enrolla los binarios descargados, las imágenes publicadas o las bases de datos desplegadas.

GITHUB_TOKEN-Los empujes de etiquetas creados normalmente no activan otro flujo de trabajo. Si otra automatización crea etiquetas, utilice un alcance adecuado GitHub Aplicar/token o desencadenar la liberación a través de un flujo de envío explícitamente diseñado.Mantenimiento manual empuja el trabajo sin esa configuración extra. GitHub's flujo de trabajo que desencadena reglas.

Embalaje local

Local packaging · 3
make release VERSION=0.0.0-test

Esto construye el frontend una vez, cruza los dos binarios de Linux y escribe archivos más SHA256SUMS bajo la supervisión dist/release/. Los archivos existentes no son sobrescritos; utilizar una versión de prueba fresca o mover artefactos generados previos antes de la reconstrucción. Este comando no empuja imágenes ni crea versiones. Mantenga la validación local separada de la evidencia de tiempo de ejecución de contenedores nativos.

Generación de cambios

Instalar git-cliff 2.14.2 (la versión grabada en CI). Es una herramienta de desarrollo, no una dependencia del servidor. Por ejemplo, con Rust instalado, use cargo install git-cliff --locked --version 2.14.2. Un ejecutable descargado se puede seleccionar a través de GIT_CLIFF=/path/to/git-cliff.

Changelog generation · 4
make changelog
make changelog-check

cliff.toml utiliza Mantener un cambio de rumbo: Añadido, cambiado, deprecatado, eliminado, fijo y seguridad. Características y correcciones siguen Commisiones convencionales; construye, rendimiento y refactores son cambiados. Deprecaciones/removalaciones de explícitos y cambios de seguridad-espejados obtienen sus propias secciones. Docos de rutina, pruebas, estilo y acordes se omiten, al romper los cambios y sus mensajes no se admiten.

Generation lee la historia local de Git con metadatos de red y comandos de plantilla externas deshabilitados. CHANGELOG.md sólo después de que el renderizado tenga éxito, y no crea etiquetas, cambiar versiones o comprometer archivos. Commitir el archivo generado a través del flujo normal de PR antes de ejecutar make publish, que todavía requiere una base sincronizada limpia. Los cambios de repositorio incluyen secciones pre-liberación; notas de liberación estable resumen todo el ciclo desde la etiqueta estable anterior, incluyendo los cambios introducidos primero en pre-releases.

Para una etiqueta existente que se registró en HEAD:

Changelog generation · 5
make release-notes TAG=v0.1.0

Esto escribe dist/release-notes.md usando la misma plantilla; el flujo de trabajo de liberación instala el generador, embrague la historia completa y pasa este archivo a GitHub. Una etiqueta perdida o desajustada es rechazada. El CI realiza pruebas de integración de historia sintética; ejecuta make changelog-check localmente para habilitar esas pruebas cuando se instala git-cliff. make check los mantiene opcionales a menos SUBLANE_TEST_CHANGELOG=1 Ni el comando cambia el README.