#01 · desarrolladores01 / 05

Poné tu programa en Quiver.

Escribís un archivo de texto que dice de dónde se baja tu programa y qué pasos hay que dar para instalarlo, lo commiteás a tu repositorio, y ya está publicado. Sin cuenta, sin revisión, sin nombres reservados.

linuxmacoswindows
#02 · la arrow02 / 05

Una Arrow es un archivo de texto.

No lleva tu software adentro: dice de dónde sacarlo y qué hacer con él en cada sistema operativo. Vive en tu repositorio, al lado del código y del pipeline que ya tenés.

dónde va

arrow.yaml en la raíz del repositorio, o ARROW.md con la Arrow adentro de un bloque de código arrow. Si querés varias en un mismo repositorio, se agrupan en una colección.

metadata

Nombre, descripción y licencia. No hay campo de versión, y es a propósito: la versión la pone git.

targets

Una receta por plataforma dentro del mismo archivo. Las claves son patrones: linux/amd64, windows/*, o * para todas. Un target puede heredar de otro, y el que declara una fase se la queda entera.

lifecycle

Hasta cinco fases: install, update, execute, stop y uninstall. Si ningún target declara execute, tu Arrow es un programa que se instala; si todos lo declaran, es un servicio que corre.

steps

Los pasos de cada fase, en orden. run corre un comando, fetch baja un archivo y puede comparar su hash, signal apaga un proceso. Cada paso lleva su título, su timeout y si aborta cuando falla.

variables · puertos

variables genera el formulario que el usuario completa antes de instalar, con tipos, valores por defecto y validación. netbridge declara los puertos que tu software necesita, y Quiver los asigna y trata de abrirlos en el router. Un servidor se vuelve tan instalable como un editor de texto.

dependencias

tools son Arrows que tienen que estar instaladas antes que la tuya; services, Arrows que tienen que estar corriendo mientras la tuya ejecuta. Con exports, una dependencia publica una ruta con nombre y vos la usás sin adivinar dónde quedó.

20 líneas, y es una aplicación publicada.

#03 · publicar03 / 05

Un archivo y un commit.

No hay comando de publicación porque no hay dónde publicar. El archivo queda en tu repositorio, y ese es todo el mecanismo.

sin cuenta

No hay registro, no hay revisión y no hay nombres reservados. Dos desarrolladores no pueden reclamar el mismo nombre porque el nombre es el repositorio.

el namespace

Tu Arrow se instala por su dirección: github.com/usuario/repositorio. No es una entrada en un registro, es la instrucción de ir a ese dominio, a ese usuario, a ese repositorio y buscar ahí el manifiesto. GitHub, GitLab, Bitbucket o el forge que uses.

la versión

Es el tag de git desde el que se leyó el archivo: github.com/usuario/repositorio@v1.2.3. Sin tag, Quiver resuelve el último release estable e ignora las pre-releases.

que se encuentre

Etiquetá el repositorio como quiver-arrow desde la interfaz de tu proveedor y aparece en la búsqueda. Sin la etiqueta se instala igual, por namespace: la búsqueda filtra, no habilita.

Publicar una versión nueva es parte del flujo que ya tenés.

#04 · del otro lado04 / 05

Alguien aprieta instalar.

Lo que escribiste una vez lo ejecuta un daemon en la máquina de quien instala, en Linux, macOS y Windows.

por namespace

quiver install github.com/usuario/repositorio en la terminal, o el mismo namespace desde la app de escritorio, que trae el daemon adentro.

lo que se ve antes

Quiver compila tu manifiesto antes de correrlo y muestra la lista exacta de pasos, con sus comandos, sus URLs y los permisos que piden. Es texto plano, versionado y diffeable contra la versión anterior.

dependencias primero

Si tu Arrow depende de otras, se resuelven y se instalan antes, como un paso más de la barra de progreso. Dos versiones de la misma Arrow conviven en vez de negociar.

actualizar

Un tag nuevo es un release nuevo. Una actualización que falla vuelve al estado anterior, así que nunca rompe una instalación que ya andaba.

#05 · empezar05 / 05

Escribís el archivo, hacés commit, y ya se puede instalar. Nadie tiene que aprobarlo.

El formato del manifiesto está especificado en el repositorio del daemon, con su esquema y sus reglas de validación.