Saltar al contenido

Línea de comandos (arkvoryctl) ​

arkvoryctl es el cliente remoto de Arkvory para personas y para CI/CD. Sube y descarga en partes, continúa tras las interrupciones y comprueba el SHA-256. Funciona con los permisos de la clave que se le proporciona.

Instalación ​

SistemaPaqueteCómo instalarlo
Windows 10/11, Windows Server 2019 o posterior (x64)Arkvory-CLI-Setup-x64.exeEjecútelo. Se instala para el usuario actual, sin derechos de administrador, y agrega arkvoryctl al PATH del usuario. Abra un terminal nuevo.
Debian, Ubuntu (x64)Arkvory-CLI-amd64.debsudo apt install ./Arkvory-CLI-amd64.deb
Fedora y compatibles con RHEL (x64)Arkvory-CLI-x86_64.rpmsudo dnf install ./Arkvory-CLI-x86_64.rpm
Cualquier sistema con Node.js 24 (por ejemplo, un runner de CI)arkvoryctl.mjsnode ./arkvoryctl.mjs --help

Los paquetes nativos incluyen su propio Node.js. El archivo único arkvoryctl.mjs no tiene dependencias de npm. Tome los archivos de una versión de confianza de ProAnima/Arkvory y compare su SHA-256 con release-checksums.json. Todavía no hay paquetes para ARM64. Para actualizar, instale una versión estable más reciente. La desinstalación conserva sus perfiles, sus archivos de claves y sus puntos de control.

Conectarse a un servidor ​

  1. Obtenga una clave: un token de acceso personal de la consola o una clave de servicio de su administrador. Consulte Cuentas y claves.
  2. Guarde la clave en un archivo privado fuera de cualquier repositorio. En Linux use el modo 0600. En Windows permita el acceso solo a su cuenta.
  3. Agregue un perfil y compruebe la conexión:
bash
arkvoryctl profile add production --server https://arkvory.example --token-file "$HOME/.secrets/arkvory.key" --repository releases
arkvoryctl doctor
arkvoryctl repositories
powershell
arkvoryctl profile add production --server https://arkvory.example --token-file C:\Private\arkvory.key --repository releases
arkvoryctl doctor

doctor muestra el servidor, el repositorio, las capacidades y los permisos de la clave. La clave nunca es un argumento de un comando.

Perfiles y entorno ​

Los perfiles se guardan en profiles.json, en ~/.config/arkvory (en Windows, .config\arkvory dentro de la carpeta del usuario). Un perfil guarda la URL del servidor, el repositorio predeterminado y la ruta del archivo de la clave, no la clave.

ComandoEfecto
profile add NAME --server URL [--token-file PATH] [--repository NAME]Agrega un perfil. El primer perfil pasa a ser el predeterminado. El repositorio predeterminado es releases.
profile listMuestra todos los perfiles y el activo
profile use NAMEEstablece un perfil como predeterminado
profile remove NAMEElimina un perfil
VariableSignificado
ARKVORY_TOKENLa propia clave. Tiene prioridad sobre cualquier archivo.
ARKVORY_TOKEN_FILERuta de un archivo de clave. Tiene prioridad sobre el archivo del perfil.
ARKVORY_BASE_URLURL del servidor. Si está definida, el archivo de clave del perfil no se usa: proporcione la clave mediante ARKVORY_TOKEN o ARKVORY_TOKEN_FILE.
ARKVORY_CLI_HOMEOtra carpeta para profiles.json

La URL del servidor debe usar HTTPS. Se permite HTTP sin cifrar solo para localhost, 127.0.0.1 y [::1]. La verificación de TLS no se puede desactivar.

Opciones globales ​

OpciónValor predeterminadoSignificado
--profile NAMEperfil activoPerfil solo para este comando
--repository NAMEel del perfilRepositorio solo para este comando
--jsondesactivadoUn resultado JSON compacto en stdout; los errores en JSON en stderr
--lang en o --lang ruel de LANGIdioma de la ayuda y de los mensajes
--timeout MS60000Límite de las solicitudes de administración (1 a 3600000)
--attempt-timeout MS120000Límite de un intento de transferencia (1 a 1800000)
--retries N20Reintentos de red de una operación (0 a 100); 0 los desactiva
--wait-limit MSningunoCuánto puede esperar en total una operación a un servidor ocupado. Sin ella, el cliente espera lo que pida el servidor
--class CLASSClase de cola de las descargas: release, bulk o background. Solo puede bajar su clase
--not-before TNo empezar una descarga antes de T: RFC 3339 o HH:MM, la próxima vez que el reloj lo marque
--not-after TDesistir con el código 4 si la cola empezaría la descarga después de T
--verbosedesactivadoUna línea en stderr por cada solicitud HTTP: método, ruta, estado, tiempo, ID de solicitud. Sin cabeceras ni claves.
--help, --versionAyuda; versión del cliente como JSON
--Termina las opciones, para nombres de archivo que empiezan por -

Cada opción puede aparecer una sola vez. Las opciones desconocidas se rechazan.

Comandos ​

Descubrimiento y catálogo ​

ComandoResultado
doctorConexión, capacidades y permisos
repositories [--after CURSOR]Repositorios visibles para la clave
operations [--after CURSOR]Operaciones de la API disponibles en el repositorio
list [--after CURSOR]Artefactos del repositorio
search [--query TEXT] [--label TAG] [--collection NAME] [--after CURSOR]Búsqueda por nombre y por texto de metadatos
search --metadata-key KEY --metadata-value VALUECoincidencia exacta de metadatos (indique ambos)
inspect IDMetadatos de un artefacto
storage usage / storage policyUso del repositorio y política de almacenamiento

Las páginas devuelven next. Páselo con --after para leer la página siguiente.

Transferencias ​

ComandoResultado
upload FILE [--label TAG] [--file METADATA.json] [--state CHECKPOINT.json]Subida reanudable de cualquier archivo
download ID OUTPUTDescarga reanudable, verificada con SHA-256
put FILE PATH [--label TAG] [--file METADATA.json] [--state CHECKPOINT.json]Sube el archivo y lo convierte en la siguiente revisión de una ruta. Si la ruta ya contiene los mismos bytes, no se sube nada.
get PATH OUTPUTDescarga la revisión actual de una ruta, verificada y reanudable
link ID [--ttl SECONDS]Una URL de descarga sin clave, válida de 60 segundos a 24 horas (1 hora de forma predeterminada)
uploads status ID / uploads cancel IDEstado de una sesión de subida; cancelarla (cancelar no es pausar)

METADATA.json contiene labels y metadata (un mapa de cadenas). Tiene prioridad sobre --label.

bash
arkvoryctl put "./Build/Game Setup.exe" builds/game/1.4/GameSetup.exe
arkvoryctl get builds/game/1.4/GameSetup.exe ./GameSetup.exe
arkvoryctl link 00000000-0000-4000-8000-000000000001 --ttl 900

Un enlace de descarga es un secreto. No se puede revocar antes de que caduque.

Paquetes y promoción ​

ComandoResultado
packages list [--group G] [--name N] [--after CURSOR]Paquetes UPack
packages publish FILE [--label TAG] [--file METADATA.json] [--state CHECKPOINT.json]Sube un archivo UPack y lo registra
packages register IDRegistra un UPack ya subido
packages resolve NAME [--group G] [--exact V] [--range R] [--stage S] [--prerelease] [--order promoted]Selecciona una versión (--exact y --range se excluyen mutuamente)
packages download NAME OUTPUT [same filters]Selecciona una versión y después la descarga verificada
promote ID --to REPOSITORY [--move] [--stage S1,S2] [--comment TEXT]Publica el artefacto en otro repositorio sin volver a enviar los bytes
stages list ID / stages add ID STAGE [--comment TEXT] / stages remove ID STAGE / stages artifacts [--stage S]Etapas de los artefactos
promotions history ID / promotions journal [--after CURSOR]Historial de promociones
bash
arkvoryctl packages publish ./build.upack --label test --state ./job-state/build.json --json
arkvoryctl promote 00000000-0000-4000-8000-000000000001 --to prod --stage release
arkvoryctl packages download app ./app.upack --range ^1.4 --stage release

Use --exact para una versión exacta; --version muestra la versión del cliente. Consulte Paquetes y Promoción.

Anotaciones y adjuntos ​

annotations get ID y annotations set ID --revision N --file ANNOTATIONS.json leen y reemplazan las etiquetas, los metadatos y las colecciones. attachments get ID, attachments history ID y attachments set ID --revision N --file ATTACHMENTS.json hacen lo mismo con los archivos vinculados de una compilación. Lea primero y después envíe el estado nuevo completo con la revisión que leyó. Un cambio concurrente devuelve un conflicto (código de salida 6).

Copias de seguridad ​

ComandoResultado
backup statusAlmacén de copias, agente, plan, último punto, advertencias; código de salida 9 si hay una advertencia crítica
backup runPone en cola una tarea de copia de seguridad
backup jobs [--after CURSOR] / backup points [--after CURSOR]Tareas y puntos de restauración, del más reciente al más antiguo
backup verify POINT_IDPone en cola una verificación completa de un punto
backup pin POINT_ID [--off]Conserva un punto más allá de la retención, o lo libera

Estos comandos requieren la clave de archivo del propietario de la instalación (bootstrap) o una sesión de administrador de cuenta. Los tokens personales y las claves de servicio reciben 403 (código de salida 3). El trabajo lo realiza el agente de copias de seguridad del servidor. Ejemplo de monitorización: arkvoryctl backup status --json || alert. Consulte Copias de seguridad.

Reanudar las transferencias interrumpidas ​

Tras Ctrl+C o un fallo de red, ejecute de nuevo el mismo comando con las mismas opciones.

  • upload, put y packages publish guardan un punto de control junto al archivo de origen: <source>.arkvory-upload.json, o el archivo indicado con --state. El punto de control almacena la clave de idempotencia antes de la primera solicitud, de modo que una respuesta perdida nunca crea una segunda copia.
  • Para publicar los mismos bytes como un artefacto nuevo, use un archivo --state nuevo.
  • download y get guardan <output>.arkvory-part y <output>.arkvory-download.json junto al archivo de destino. El archivo final aparece solo después de la verificación del SHA-256. Un archivo de destino existente nunca se sobrescribe.
  • En CI, cree la carpeta de estado antes del trabajo y consérvela, junto con el archivo de origen, entre los reintentos.

Guarde los puntos de control en un disco local que admita vínculos físicos (NTFS, ext4, XFS), no en FAT, exFAT ni en recursos compartidos de red. Tras una caída brusca queda un archivo .lock. Compruebe que el proceso cuyo PID contiene ya se ha detenido y elimine solo el archivo .lock.

Ejemplo de CI ​

bash
# La clave procede del almacén de secretos de CI. No la imprima nunca.
export ARKVORY_BASE_URL=https://arkvory.example
export ARKVORY_TOKEN_FILE=/run/secrets/arkvory-key
mkdir -p job-state
node ./arkvoryctl.mjs packages publish ./build.upack --label test --state ./job-state/upload.json --json

Si el registro falla después de la subida, el error JSON contiene stage: "register" y el artifactId. Repita el mismo comando. Volver a registrar el mismo artefacto es seguro.

Sistemas de CI ​

Todos los sistemas siguientes hacen lo mismo: instalan un arkvoryctl.mjs fijado, toman la clave del almacén de secretos del sistema y ejecutan un comando. Fije la versión y el SHA-256 para que una descarga modificada haga fallar el trabajo. Use una clave de servicio limitada al repositorio y a las acciones que necesita el trabajo (Cuentas y claves). El agente necesita Node.js 24.

yaml
# GitHub Actions: .github/workflows/publish.yml
name: publish
on:
  push:
    tags: ['v*']
jobs:
  publish:
    runs-on: ubuntu-latest
    env:
      ARKVORY_BASE_URL: https://arkvory.example
      ARKVORY_TOKEN: ${{ secrets.ARKVORY_KEY }}
      ARKVORY_CLI_VERSION: '0.3.0'
      ARKVORY_CLI_SHA256: 555af7e66e25447ba17ea0d3dc676f6d04b4b8adc47818d8c8bb548085752504
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 24
      - name: Install arkvoryctl
        run: |
          curl -fsSL -o arkvoryctl.mjs "https://github.com/ProAnima/Arkvory/releases/download/v${ARKVORY_CLI_VERSION}/arkvoryctl.mjs"
          echo "${ARKVORY_CLI_SHA256}  arkvoryctl.mjs" | sha256sum -c -
      - name: Publish the build
        run: node ./arkvoryctl.mjs put ./Build/Game.zip "builds/game/${GITHUB_REF_NAME}/Game.zip" --json
yaml
# GitLab CI: .gitlab-ci.yml (ARKVORY_TOKEN is a masked CI/CD variable)
publish:
  image: node:24
  variables:
    ARKVORY_BASE_URL: https://arkvory.example
    ARKVORY_CLI_VERSION: '0.3.0'
    ARKVORY_CLI_SHA256: 555af7e66e25447ba17ea0d3dc676f6d04b4b8adc47818d8c8bb548085752504
  script:
    - curl -fsSL -o arkvoryctl.mjs "https://github.com/ProAnima/Arkvory/releases/download/v${ARKVORY_CLI_VERSION}/arkvoryctl.mjs"
    - echo "${ARKVORY_CLI_SHA256}  arkvoryctl.mjs" | sha256sum -c -
    - node ./arkvoryctl.mjs put ./Build/Game.zip "builds/game/${CI_COMMIT_TAG}/Game.zip" --json
groovy
// Jenkins: Jenkinsfile. The agent has Node.js 24 and a checked arkvoryctl.mjs, installed as above.
pipeline {
  agent any
  environment {
    ARKVORY_BASE_URL = 'https://arkvory.example'
    ARKVORY_TOKEN = credentials('arkvory-key')
  }
  stages {
    stage('Publish') {
      steps {
        sh 'node ./arkvoryctl.mjs put ./Build/Game.zip "builds/game/${BUILD_NUMBER}/Game.zip" --json'
      }
    }
  }
}

Cualquier otro sistema, como TeamCity o Buildkite, funciona igual: defina ARKVORY_BASE_URL y ARKVORY_TOKEN desde su almacén de secretos y ejecute el comando. Decida según el código de salida.

Salida ​

  • Los resultados son JSON en stdout. Sin --json, el JSON lleva sangría. Los comandos de copias de seguridad imprimen líneas legibles salvo que agregue --json.
  • El progreso aparece solo en un stderr interactivo.
  • Un error sin --json es una línea en stderr con el código del servidor, el motivo, el mensaje, el paso siguiente y el ID de solicitud. Con --json, stderr contiene {"error": {...}} con code, exitCode, status, serverCode, reason, requestId y retryAfterSeconds. Si el código es desconocido, decida según exitCode.

Códigos de salida ​

CódigoSignificado
0Correcto
2Argumentos o configuración incorrectos
3Falta la clave o se denegó el acceso (401, 403)
4Error HTTP o de red, tiempo de espera agotado, servidor ocupado, no encontrado
5Fallo de integridad (SHA-256 distinto, 422 integrity_mismatch)
6Conflicto: revisión, estado, bloqueo, archivo existente, punto de control modificado (409)
7Error de archivo local o respuesta del servidor no válida
8Límite de capacidad del servidor: cuota, disco, cola (507 capacity_exceeded)
9backup status: hay una advertencia crítica de copia de seguridad activa
130Interrumpido

El cliente reintenta solo los fallos de red y los códigos HTTP 408, 429, 502, 503 y 504, dentro del límite de --retries. Un servidor ocupado (503 busy, 429 rate_limited) no es un fallo: el cliente espera lo que el servidor pida en Retry-After, muestra cuánto en stderr y no cuenta estas esperas en --retries. --wait-limit limita la espera total.

Solución de problemas ​

MensajeCausa y solución
credential_required (salida 3)No se encontró ninguna clave. Compruebe --token-file y ARKVORY_TOKEN_FILE, o proporcione la clave cuando se use ARKVORY_BASE_URL.
forbidden (salida 3)La clave no tiene el permiso. Ejecute doctor para ver los permisos.
checkpoint_mismatch (salida 6)El archivo, el servidor, el repositorio o las opciones difieren del punto de control guardado. Use las opciones originales o un --state nuevo.
state_locked (salida 6)Otro proceso usa el punto de control, o queda un .lock antiguo tras una caída.
destination_exists (salida 6)El archivo de destino existe. Elija otro nombre.
revision_mismatch en put (salida 6)Alguien cambió la ruta mientras tanto. Revise el historial de la ruta y después decida.
salida 8La cuota o el disco están llenos. Consulte al administrador.

Arkvory · ProAnimaStudio