Repository navigation
Publicar versiones
El workflow Release distribuye once paquetes
con la misma versión: NetArcaWs, NetArcaWs.Tool, cuatro paquetes EF Core de
persistencia/proveedores y cinco de migraciones. El evento release: published
compila, prueba, verifica los snapshots de schemas y migraciones, empaqueta,
prueba la instalación del tool y un consumidor aislado de persistencia, adjunta
los once paquetes a la release y los publica en nuget.org. Ejecutarlo
manualmente (workflow_dispatch) solo valida y genera artefactos, sin
publicar ni solicitar credenciales NuGet.
El usuario NuGet arsas, el environment GitHub nuget (NUGET_USER=arsas) y la
política de Trusted Publishing están configurados. La primera publicación
completó el intercambio OIDC y NuGet aceptó los dos paquetes 0.5.0. La
ejecución de publicación
registró Your package was pushed para ambos; ambos aparecen en el índice v3 de
NuGet. La release v0.5.0
está publicada. La instalación pública de NetArcaWs.Tool 0.5.0 desde
api.nuget.org en una caché aislada y la ejecución de --help terminaron con
código 0. Esa prueba no verifica la firma de autor del paquete. Una release en
borrador no inicia la publicación.
La versión 0.6.0 agrupa once paquetes: NetArcaWs, NetArcaWs.Tool,
NetArcaWs.EntityFrameworkCore, sus providers MySql, PostgreSql y
SqlServer, y los paquetes de migraciones Sqlite, MySql, MariaDb,
PostgreSql y SqlServer. Consultá la disponibilidad actual de cada ID y
versión en NuGet; estos enlaces y badges reflejan el feed, sin depender del
estado de una release de GitHub:
| Paquete | Última versión en NuGet; enlace a 0.6.0 |
|---|---|
NetArcaWs |
|
NetArcaWs.Tool |
|
NetArcaWs.EntityFrameworkCore |
|
NetArcaWs.EntityFrameworkCore.MySql |
|
NetArcaWs.EntityFrameworkCore.PostgreSql |
|
NetArcaWs.EntityFrameworkCore.SqlServer |
|
NetArcaWs.EntityFrameworkCore.Migrations.Sqlite |
|
NetArcaWs.EntityFrameworkCore.Migrations.MySql |
|
NetArcaWs.EntityFrameworkCore.Migrations.MariaDb |
|
NetArcaWs.EntityFrameworkCore.Migrations.PostgreSql |
|
NetArcaWs.EntityFrameworkCore.Migrations.SqlServer |
|
La publicación se verifica por separado para cada paquete: el éxito de la release de GitHub no demuestra que los once IDs hayan sido aceptados e indexados. La publicación de once paquetes tampoco es una transacción; una falla parcial requiere verificar cada ID y versión.
El alcance previsto incluye persistencia relacional optativa para diario fiscal y tickets WSAA, providers para MySQL/MariaDB, PostgreSQL y SQL Server, cinco paquetes de migraciones oficiales y ejemplos/documentación de consumo. El consumidor conserva la responsabilidad de autorizar tenants, proteger claves, programar la recuperación y aplicar migraciones explícitamente. La release no incorpora almacenamiento de certificados ni un worker de recuperación; las migraciones no adoptan automáticamente tablas previas sin historial. Las pruebas locales y de motores relacionales no equivalen a homologación fiscal completa contra ARCA.
Los pasos siguientes describen la configuración inicial para un fork o una rotación/recreación de la integración. En el repositorio principal ya se completaron y verificaron en la ejecución enlazada arriba.
- Verificar el propietario elegido (cuenta u organización) y sus permisos de publicación. GitHub y NuGet administran cuentas y permisos independientes.
- En NuGet, crear una política de Trusted Publishing bajo el propietario
elegido. Configurar Repository Owner
ARSASWebDesign, RepositoryNetArcaWs, Workflow Filerelease.yml(solo el nombre) y Environmentnuget. - Autorizar creación de paquetes y nuevas versiones para los once IDs de esta
release (por ejemplo, patrón
NetArcaWs*). Confirmar disponibilidad de cada ID y la propiedad deseada antes del primer envío. - En el environment GitHub
nuget, definir la variableNUGET_USERcon el usuario personal de nuget.org que creó la política, no el email ni asumir que el nombre de organización es ese usuario. Puede usarse una variable del repositorio si no existe una del environment. - El environment limita despliegues a tags
v*; la validación del workflow exige además que el commit pertenezca amain. En este proyecto la publicación es automática, sin aprobación manual del environment: la revisión ocurre en la PR y solo los tres administradores autorizados pueden crear tags de release. Los tags no se pueden mover ni eliminar. Ver protecciones.
La autenticación usa OIDC con NuGet/login; no requiere una API key permanente
en GitHub. La política otorga una clave temporal al job de publicación. Referencia:
Trusted Publishing oficial de NuGet.
Trusted Publishing autentica al workflow mediante OIDC; no es una firma de autor
del archivo .nupkg. NuGet.org aplica su firma de repositorio a los paquetes
aceptados. Los assets de GitHub se verifican mediante SHA256SUMS y
BUILD_COMMIT, pero esta versión no incorpora firma de autor de Arsas.
Agregar firma de autor requiere un certificado de firma de código aceptado por NuGet y registrado previamente en la cuenta, custodia segura de su clave privada y timestamp de la firma. Debe firmarse antes de generar checksums y distribuir los artefactos. Los certificados fiscales de ARCA no se reutilizan para este fin. No se almacena una clave privada de firma de paquetes en el repositorio. Referencias: firmas NuGet y requisitos de firma de autor.
- Integrar las PR en
maincon CI aprobada. - Actualizar
<Version>en los once proyectos empaquetables a un único SemVer. Ajustar la expectativa del test de--versiondel tool. El workflow usaNetArcaWs.Build release-version, con allowlist explícita, para detectar versiones distintas o proyectos de paquete faltantes/inesperados. - Usar
X.Y.Zpara una release estable oX.Y.Z-preview.Npara una previa. Los identificadores previos deben estar en minúsculas; no usar metadata+.... - Ejecutar el workflow Release manualmente desde
main. Revisar los tests, instalación del tool y artefactos descargables, antes de publicar. - Crear una release GitHub en borrador con tag
vX.Y.Zexactamente coincidente con los once proyectos y apuntando al commit validado demain. Para una versión previa, marcar también la release como prerelease. - Escribir notas con alcance, cambios, compatibilidad y límites reales. No presentar el estado actual del port como facturación o homologación completa.
- Con la cuenta y política NuGet configuradas, publicar el borrador. Esto activa el workflow; comprobar por separado que los once paquetes fueron aceptados e indexados en NuGet. El éxito de GitHub Release no demuestra éxito en NuGet.
Los paquetes de la release se construyen una sola vez en el job build; el job
publish descarga esos artefactos y comprueba SHA256SUMS, identidad de versión y commit. No hace checkout, restore ni ejecuta código del repositorio con credenciales de publicación. Se adjunta también
BUILD_COMMIT para identificar el código. Los assets existentes deben coincidir
byte por byte: el flujo nunca los reemplaza. Se usa Ubuntu 24.04 y restauración
--locked-mode con los lockfiles versionados. Los jobs de PR y forks
no reciben OIDC ni credenciales de publicación. No se usa pull_request_target.
El contenido se publica mediante acciones fijadas a commit.
Antes de solicitar el login OIDC de NuGet, el workflow consulta el flat-container
público para cada ID y versión. Un 404 significa que todavía no existe ese
paquete; un 200 exige comparar todos los nombres y bytes del ZIP con el artefacto
construido, ignorando únicamente la firma de repositorio en la entrada raíz
.signature.p7s. Las entradas duplicadas, contenido distinto y respuestas HTTP
distintas de 200/404 detienen la publicación. Solo los IDs existentes con
contenido idéntico se marcan para omitir su envío. Si otro actor publica después
de esta comprobación, el push normal falla y la ejecución debe repetirse para
comparar de nuevo el contenido antes de omitirlo.
La publicación de once paquetes no es una transacción: algunos pueden subirse
aunque después falle otro. Corregir el problema y reejecutar el mismo workflow
con el mismo tag para que vuelva a comparar cada versión existente antes de
continuar. Si una reconstrucción difiere de los assets ya adjuntos o de un
paquete NuGet existente, el flujo se detiene y exige resolver la discrepancia;
nunca reemplaza assets ni usa --skip-duplicate para aceptar una versión
preexistente sin verificar su contenido.
No mover ni reutilizar un tag publicado para código diferente. Los paquetes ya
publicados son inmutables; una corrección de código requiere otra versión. Si
falta NUGET_USER o la política no coincide, el job falla con un diagnóstico; no
se degrada a una clave permanente ni marca publicación como exitosa.
Los artefactos de los ensayos manuales se retienen durante 30 días. Los assets
adjuntos a una release permiten conservar los paquetes con sus checksums. Los
.snupkg no se generan ni se publican en la configuración actual.
dotnet add package NetArcaWs --version 0.5.0
dotnet tool install --global NetArcaWs.Tool --version 0.5.0La publicación 0.5.0 ya está indexada en NuGet. También se pueden usar los
paquetes locales con --source/--add-source como se describe en el README y en
la guía de la CLI.