Publicar paquetes

Crea un paquete de Hive a partir de una biblioteca - claves de firma, el chunk HIVE, larva hive pack y publish, versiones, paquetes compilados y de código fuente.

Última actualización: 9 min de lectura Editar en GitHub

En esta página

Un paquete se crea a partir de un proyecto de biblioteca (type: library). larva hive pack lo compila en un archivo .hive; larva hive publish lo empaqueta y lo envía a un registro de paquetes.

Comando Qué hace
larva hive key [-o file] Crea una clave de firma (hive.key de forma predeterminada).
larva hive pack [project] Compila la biblioteca y escribe bin/Name-version.hive.
larva hive publish [project] [--provider p] Empaqueta y publica en el primer registro de paquetes del proyecto, o en el que se indique.
larva hive verify file.hive [--key public-key] Verifica un archivo de paquete.

1. Crea una clave de firma

Una sola vez, y mantén el archivo en privado:

Terminal
larva hive key
wrote C:\work\Greetings\hive.key: keep it private (sign packages with `sign: hive.key` in HIVE)
public key:  MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEt2nz5PDcKGyCEddkuAPfBauYEJVK4G3bfrFHnPyxn3r4UkfuUNsWCkhPMgBcQ3LBxGvu5O297PxsXhRrYvQ1UQ==
fingerprint: a59d969b683ba7f96e9fece9d1bcf78180354d077be31daeb5b9f2ebdc7ddb2d

La clave es ECDSA sobre P-256 y se escribe como un archivo PEM. La clave pública viaja en el índice del registro; su huella (el SHA-256 de la clave pública) va en cada paquete y en cada hive.lock. larva hive key nunca sobrescribe un archivo: indica otro con -o.

No pongas la clave en un repositorio público. Guárdala fuera del proyecto, o ignórala, e indícala con una ruta relativa como sign: ../keys/hive.key.

2. Describe el paquete

La versión y la descripción del paquete vienen de PROJ; cómo se publica, del chunk HIVE:

.queen
queen 1.0;

chunk PROJ:
   name: Greetings,
   type: library,
   version: v1.0,
   author: Ana,
   description: "Friendly greetings."

chunk HIVE:
   provider: ../registry,
   license: MIT,
   sign: hive.key
Clave de HIVE Valores Significado
provider una dirección o una carpeta Los registros de paquetes, que se prueban en orden (consulta Elige un registro de paquetes). publish usa el primero.
package Author/Name El nombre con el que se publica. De forma predeterminada, el author de PROJ (los espacios se convierten en -) y su name.
license un nombre SPDX, como MIT La licencia, que se escribe en el paquete.
publish compiled (predeterminado), source Qué trae el paquete: consulta más abajo.
sign un archivo La clave privada que firma el paquete, relativa al proyecto.
verify strict (predeterminado), hashes Cómo se verifican los paquetes que este proyecto usa.
cache una carpeta Dónde se instalan los paquetes de este proyecto.
private true, false true: el proyecto nunca se empaqueta ni se publica.

El formato .queen completo está en El archivo .queen.

Los nombres (Author y Name) usan letras, dígitos, -, _ y ., empiezan con una letra o un dígito y tienen como máximo 64 caracteres.

3. Empaqueta y verifica

Terminal
larva hive pack
C:\Users\Ana\AppData\Local\Temp\hive-32e6cf4648ef4dafbcf245db511f0f98\Greetings.dll: 1 types (frontend 1098 ms, write 10 ms; total 1117 ms)
  2 files, 4269 bytes before compression
packed C:\work\Greetings\bin\Greetings-1.0.hive (2976 bytes)
larva hive verify bin/Greetings-1.0.hive
Ana/Greetings 1.0 (compiled, gc default): 2 files, 4269 bytes
  signed by a59d969b683ba7f9 (not checked: give --key)
  every file matches its hash

El mismo proyecto siempre produce los mismos bytes: los archivos se ordenan y sus fechas se fijan.

Empaquetar rechaza un proyecto que no es una biblioteca, que no tiene version en PROJ, que no compila o que indica private: true:

Terminal
larva hive pack
C:\Users\Ana\AppData\Local\Temp\hive-643b3b618ab5456e8a77e56788469035\Greetings.dll: 1 types (frontend 1509 ms, write 9 ms; total 1525 ms)
larva hive: Greetings is private (`private: true` in HIVE)

4. Publica

Terminal
larva hive publish
C:\Users\Ana\AppData\Local\Temp\hive-6e89e94522794723be1a87b1fbf9508a\Greetings.dll: 1 types (frontend 1126 ms, write 8 ms; total 1143 ms)
  2 files, 4269 bytes before compression
published Ana/Greetings 1.0 to C:\work\registry (signed by a59d969b683ba7f9)

--provider publica en otro lugar distinto del primer registro del proyecto, por ejemplo en una carpeta espejo: larva hive publish --provider ../mirror.

En un registro en la web

Publicar en un registro HTTPS requiere un token de API, en la variable de entorno HIVE_TOKEN. En www.antril.org lo creas en la página de tu cuenta (consulta Cuentas, tokens y autores). Sin él, no se envía nada:

Terminal
larva hive publish --provider http://localhost:5080/hive-api
C:\Users\Ana\AppData\Local\Temp\hive-a9bd76bf2aea4c31b059969b1b9bc57a\Greetings.dll: 1 types (frontend 1125 ms, write 8 ms; total 1139 ms)
  2 files, 4269 bytes before compression
larva hive: publishing to http://localhost:5080/hive-api/ needs your token in HIVE_TOKEN

Defínelo para el comando y luego publica:

PowerShell:  $env:HIVE_TOKEN = "hive_..."; larva hive publish
bash:        HIVE_TOKEN=hive_... larva hive publish

El registro verifica que el token sea tuyo y que seas dueño del autor del paquete; si lo rechaza, larva hive publish muestra el motivo. Los detalles están en La API del registro.

En una carpeta

Un registro en una carpeta no necesita token: publish escribe el archivo del paquete y actualiza Author/Name/index.json. Copia la carpeta a cualquier servidor web y tendrás un registro desde el que otros pueden instalar (consulta Un registro hecho de archivos).

Versiones

La versión que se publica es la version de PROJ, sin su v: version: v1.0 se publica como 1.0. Una versión es uno o más números separados por puntos; no hay etiquetas de prelanzamiento. Luego, los usuarios eligen versiones con rangos como @^1.0.

Una versión publicada nunca cambia. Volver a publicarla se rechaza:

Terminal
larva hive publish
C:\Users\Ana\AppData\Local\Temp\hive-a2651351c4c64e07ac1a7078873cb526\Greetings.dll: 1 types (frontend 1021 ms, write 8 ms; total 1035 ms)
  2 files, 4269 bytes before compression
larva hive: Ana/Greetings 1.0 is already published: publish a new version

Sube la versión en cada lanzamiento. Para que los rangos ^ funcionen, mantén el primer número distinto de cero en los cambios compatibles (de 1.0 a 1.1) y súbelo cuando los usuarios tengan que cambiar su código (de 1.1 a 2.0).

Las dependencias del paquete vienen de sus propias entradas package: en DEPS, con sus rangos; instalar un paquete instala lo que necesita:

Terminal
larva hive info Ana/Farewells
Ana/Farewells in C:\work\registry:
  0.3  unsigned  needs Ana/Greetings@^1.0

Retirar una versión

El índice de un registro puede marcar una versión como yanked (retirada): entonces Hive ya no la elige, salvo en los proyectos cuyo hive.lock ya la fija, y larva hive info muestra (yanked). En un registro en una carpeta, la retiras poniendo "yanked": true en la versión dentro de index.json. No hay un comando para esto, y el registro de www.antril.org todavía no permite retirar versiones: aún no está disponible.

Firmas y claves

  • El manifiesto de un paquete, hive.json, enumera cada archivo con su tamaño y su SHA-256. La firma, hive.sig, es ECDSA P-256 con SHA-256 sobre los bytes del manifiesto, así que respalda cada archivo.

  • La primera versión publicada de un paquete lleva su clave al registro. Las versiones posteriores deben firmarse con una clave que el registro ya tenga para ese paquete:

    Terminal
    larva hive publish
    C:\Users\Ana\AppData\Local\Temp\hive-628df17051a041a182a57fceaa29da3d\Greetings.dll: 1 types (frontend 1236 ms, write 12 ms; total 1259 ms)
      2 files, 4269 bytes before compression
    larva hive: Ana/Greetings is signed with other keys (a59d969b683ba7f9): sign it with one of them
    
  • Una vez que un paquete está firmado, no se puede agregar una versión sin firmar:

    Terminal
    larva hive publish
    note: the package is not signed (set `sign` in HIVE); projects with `verify: strict` refuse it
      2 files, 345 bytes before compression
    larva hive: Ana/Greetings is signed: an unsigned version cannot be added (set `sign` in HIVE)
    
  • Los usuarios recuerdan la primera clave con la que instalaron un paquete y rechazan las demás hasta que ejecutan larva hive trust (consulta Claves de confianza).

Así que guarda tu clave en un lugar seguro y con respaldo: si la pierdes, el registro no aceptará nuevas versiones firmadas con otra clave. Se puede publicar un paquete sin firmar (larva hive pack lo advierte), pero los proyectos solo lo instalan con verify: hashes.

Paquetes compilados y de código fuente

publish: El paquete trae Tipo
compiled (predeterminado) La biblioteca compilada en una biblioteca de Larva, lib/Name.dll; las bibliotecas de Larva que usa (assembly: y larvaobj: en DEPS) en lib/; sus bibliotecas nativas (lib:) en native/; sus recursos. compiled, con el modo de GC para el que se compiló
source Su código fuente en src/, las bibliotecas de Larva y nativas que usa, y sus recursos. El proyecto del usuario lo compila. source

Todo paquete trae además package.queen: el proyecto de biblioteca con el que se compila un programa. La biblioteca estándar nunca viaja: cada instalación de Larva tiene la suya. Un paquete compilado es el más pequeño y no necesita nada para compilarse; un paquete de código fuente se puede compilar para cualquier modo de GC y cualquier back end.

Terminal
larva hive pack
  2 files, 345 bytes before compression
packed C:\work\Greetings\bin\Greetings-2.2.hive (1091 bytes)
larva hive verify bin/Greetings-2.2.hive
Ana/Greetings 2.2 (source): 2 files, 345 bytes
  signed by a59d969b683ba7f9 (not checked: give --key)
  every file matches its hash

Un paquete sin código fuente

Un paquete puede traer una biblioteca compilada en otro lugar, como un binding a una biblioteca nativa. No compila código fuente (scan: false) e indica en DEPS el binding compilado y la biblioteca nativa. El paquete SDL3:

.queen
queen 1.0;

chunk PROJ:
   name: SDL3,
   type: library,
   version: v3.5.0,
   author: "Antril Organization",
   description: "SDL 3.5 for Larva: windows, rendering, input, audio and more (SDL3.dll included)."

chunk SOURCES:
   scan: false

chunk DEPS:
   assembly: ../SDL.Bindings.dll,
   lib: ../build/SDL3.dll

chunk HIVE:
   package: Antril-Organization/SDL3,
   license: Zlib,
   sign: hive.key

El paquete contiene entonces:

hive.json
hive.sig
lib/SDL.Bindings.dll
native/SDL3.dll
package.queen

y su package.queen dice:

.queen
queen 1.0;

chunk PROJ:
   name: SDL3,
   type: library,
   version: v3.5.0,
   author: Antril-Organization

chunk SOURCES:
   scan: false

chunk DEPS:
   assembly: "lib/SDL.Bindings.dll",
   lib: "native/SDL3.dll"

Un proyecto que agrega Antril-Organization/SDL3 compila contra el binding, y SDL3.dll se copia junto a su programa.

¿Te resultó útil esta página?

No se guarda ninguna dirección; tu nombre de usuario sí, si iniciaste sesión.

Esc