{"id":43763160,"url":"https://github.com/php-internal/dload","last_synced_at":"2026-02-05T15:30:46.883Z","repository":{"id":248879315,"uuid":"830097505","full_name":"php-internal/dload","owner":"php-internal","description":"Helps to download binaries from release assets","archived":false,"fork":false,"pushed_at":"2025-12-17T06:29:55.000Z","size":1170,"stargazers_count":96,"open_issues_count":14,"forks_count":3,"subscribers_count":3,"default_branch":"1.x","last_synced_at":"2025-12-17T06:35:37.469Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/php-internal.png","metadata":{"files":{"readme":"README-es.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"patreon":"roxblnfk"}},"created_at":"2024-07-17T15:26:38.000Z","updated_at":"2025-12-17T06:29:49.000Z","dependencies_parsed_at":"2025-06-12T07:31:08.835Z","dependency_job_id":"95c5dbd4-c4af-49f6-9ac8-ff74e26c06b1","html_url":"https://github.com/php-internal/dload","commit_stats":null,"previous_names":["php-internal/dload"],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/php-internal/dload","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-internal%2Fdload","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-internal%2Fdload/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-internal%2Fdload/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-internal%2Fdload/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/php-internal","download_url":"https://codeload.github.com/php-internal/dload/tar.gz/refs/heads/1.x","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-internal%2Fdload/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29124800,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T14:05:12.718Z","status":"ssl_error","status_checked_at":"2026-02-05T14:03:53.078Z","response_time":65,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest"],"created_at":"2026-02-05T15:30:41.630Z","updated_at":"2026-02-05T15:30:46.876Z","avatar_url":"https://github.com/php-internal.png","language":"PHP","funding_links":["https://patreon.com/roxblnfk"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n![DLoad](./resources/logo.svg)\n\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003eDescarga artefactos fácilmente\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![Support](https://img.shields.io/static/v1?style=flat-square\u0026label=Support\u0026message=%E2%9D%A4\u0026logo=GitHub\u0026color=%23fe0086)](https://boosty.to/roxblnfk)\n\n\u003c/div\u003e\n\n\u003cbr /\u003e\n\nDLoad simplifica la descarga y gestión de artefactos binarios para tus proyectos. Es perfecto para entornos de desarrollo que necesitan herramientas específicas como RoadRunner, Temporal o binarios personalizados.\n\n[![English readme](https://img.shields.io/badge/README-English%20%F0%9F%87%BA%F0%9F%87%B8-moccasin?style=flat-square)](README.md)\n[![Chinese readme](https://img.shields.io/badge/README-%E4%B8%AD%E6%96%87%20%F0%9F%87%A8%F0%9F%87%B3-moccasin?style=flat-square)](README-zh.md)\n[![Russian readme](https://img.shields.io/badge/README-Русский%20%F0%9F%87%B7%F0%9F%87%BA-moccasin?style=flat-square)](README-ru.md)\n[![Spanish readme](https://img.shields.io/badge/README-Español%20%F0%9F%87%AA%F0%9F%87%B8-moccasin?style=flat-square)](README-es.md)\n\n## ¿Por qué DLoad?\n\nDLoad resuelve un problema común en proyectos PHP: cómo distribuir e instalar herramientas binarias y recursos necesarios junto con tu código PHP.\nCon DLoad puedes:\n\n- Descargar automáticamente las herramientas que necesitas durante la configuración inicial del proyecto\n- Asegurar que todo el equipo use exactamente las mismas versiones de las herramientas\n- Simplificar la incorporación de nuevos desarrolladores automatizando la configuración del entorno\n- Manejar compatibilidad multiplataforma sin configuración manual\n- Mantener binarios y recursos fuera de tu control de versiones\n\n### Tabla de Contenidos\n\n- [Instalación](#instalación)\n- [Inicio Rápido](#inicio-rápido)\n- [Uso desde Línea de Comandos](#uso-desde-línea-de-comandos)\n    - [Inicializar Configuración](#inicializar-configuración)\n    - [Descargar Software](#descargar-software)\n    - [Ver Software](#ver-software)\n    - [Construir Software Personalizado](#construir-software-personalizado)\n- [Guía de Configuración](#guía-de-configuración)\n    - [Configuración Interactiva](#configuración-interactiva)\n    - [Configuración Manual](#configuración-manual)\n    - [Tipos de Descarga](#tipos-de-descarga)\n    - [Restricciones de Versión](#restricciones-de-versión)\n    - [Opciones de Configuración Avanzadas](#opciones-de-configuración-avanzadas)\n- [Construir RoadRunner Personalizado](#construir-roadrunner-personalizado)\n    - [Configuración de Acción de Construcción](#configuración-de-acción-de-construcción)\n    - [Atributos de Acción Velox](#atributos-de-acción-velox)\n    - [Proceso de Construcción](#proceso-de-construcción)\n    - [Generación de Archivo de Configuración](#generación-de-archivo-de-configuración)\n    - [Usar Velox Descargado](#usar-velox-descargado)\n    - [Configuración DLoad](#configuración-dload)\n    - [Construir RoadRunner](#construir-roadrunner)\n- [Registro de Software Personalizado](#registro-de-software-personalizado)\n    - [Definir Software](#definir-software)\n    - [Elementos de Software](#elementos-de-software)\n- [Casos de Uso](#casos-de-uso)\n    - [Configurar Entorno de Desarrollo](#configurar-entorno-de-desarrollo)\n    - [Configurar Nuevo Proyecto](#configurar-nuevo-proyecto)\n    - [Integración CI/CD](#integración-cicd)\n    - [Equipos Multiplataforma](#equipos-multiplataforma)\n    - [Gestión de Herramientas PHAR](#gestión-de-herramientas-phar)\n    - [Distribución de Assets Frontend](#distribución-de-assets-frontend)\n- [Límites de Rate de la API](#límites-de-rate-de-la-api)\n- [Configuración de Gitlab CI](#configuración-de-gitlab-ci)\n- [Contribuir](#contribuir)\n\n\n## Instalación\n\n```bash\ncomposer require internal/dload -W\n```\n\n[![PHP](https://img.shields.io/packagist/php-v/internal/dload.svg?style=flat-square\u0026logo=php)](https://packagist.org/packages/internal/dload)\n[![Latest Version on Packagist](https://img.shields.io/packagist/v/internal/dload.svg?style=flat-square\u0026logo=packagist)](https://packagist.org/packages/internal/dload)\n[![License](https://img.shields.io/packagist/l/internal/dload.svg?style=flat-square)](LICENSE.md)\n[![Total DLoads](https://img.shields.io/packagist/dt/internal/dload.svg?style=flat-square)](https://packagist.org/packages/internal/dload/stats)\n\n## Inicio Rápido\n\n1. **Instala DLoad usando Composer**:\n\n    ```bash\n    composer require internal/dload -W\n    ```\n\nTambién puedes descargar la versión más reciente desde [GitHub releases](https://github.com/php-internal/dload/releases).\n\n2. **Crea tu archivo de configuración de forma interactiva**:\n\n    ```bash\n    ./vendor/bin/dload init\n    ```\n\n    Este comando te ayudará a seleccionar paquetes de software y creará un archivo de configuración `dload.xml`. También puedes crearlo manualmente:\n\n    ```xml\n    \u003c?xml version=\"1.0\"?\u003e\n    \u003cdload xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n           xsi:noNamespaceSchemaLocation=\"https://raw.githubusercontent.com/php-internal/dload/refs/heads/1.x/dload.xsd\"\n   \u003e\n       \u003cactions\u003e\n           \u003cdownload software=\"rr\" version=\"^2025.1.0\"/\u003e\n           \u003cdownload software=\"temporal\" version=\"^1.3\"/\u003e\n       \u003c/actions\u003e\n    \u003c/dload\u003e\n    ```\n\n3. **Descarga el software configurado**:\n\n    ```bash\n    ./vendor/bin/dload get\n    ```\n\n4. **Integra con Composer** (opcional):\n\n    ```json\n    {\n        \"scripts\": {\n            \"post-update-cmd\": \"dload get --no-interaction -v || \\\"echo can't dload binaries\\\"\"\n        }\n    }\n    ```\n\n## Uso desde Línea de Comandos\n\n### Inicializar Configuración\n\n```bash\n# Crear archivo de configuración de forma interactiva\n./vendor/bin/dload init\n\n# Crear configuración en una ubicación específica\n./vendor/bin/dload init --config=./custom-dload.xml\n\n# Crear configuración mínima sin preguntas\n./vendor/bin/dload init --no-interaction\n\n# Sobrescribir configuración existente sin confirmación\n./vendor/bin/dload init --overwrite\n```\n\n### Descargar Software\n\n```bash\n# Descargar usando el archivo de configuración\n./vendor/bin/dload get\n\n# Descargar paquetes específicos\n./vendor/bin/dload get rr temporal\n\n# Descargar con versiones específicas\n./vendor/bin/dload get rr:2025.1.0 dolt:1.44.1 temporal:1.*@alpha\n\n# Descargar con opciones adicionales\n./vendor/bin/dload get rr --stability=beta --force\n```\n\n#### Opciones de Descarga\n\n| Opción | Descripción | Valor por defecto |\n|--------|-------------|-------------------|\n| `--path` | Directorio donde guardar los binarios | Directorio actual |\n| `--arch` | Arquitectura de destino (amd64, arm64) | Arquitectura del sistema |\n| `--os` | Sistema operativo de destino (linux, darwin, windows) | SO actual |\n| `--stability` | Estabilidad del release (stable, beta) | stable |\n| `--config` | Ruta al archivo de configuración | ./dload.xml |\n| `--force`, `-f` | Forzar descarga aunque el binario ya exista | false |\n\n### Ver Software\n\n```bash\n# Listar paquetes de software disponibles\n./vendor/bin/dload software\n\n# Mostrar software descargado\n./vendor/bin/dload show\n\n# Mostrar detalles de software específico\n./vendor/bin/dload show rr\n\n# Mostrar todo el software (descargado y disponible)\n./vendor/bin/dload show --all\n```\n\n### Construir Software Personalizado\n\n```bash\n# Construir software personalizado usando el archivo de configuración\n./vendor/bin/dload build\n\n# Construir con un archivo de configuración específico\n./vendor/bin/dload build --config=./custom-dload.xml\n```\n\n#### Opciones de Construcción\n\n| Opción | Descripción | Valor por defecto |\n|--------|-------------|-------------------|\n| `--config` | Ruta al archivo de configuración | ./dload.xml |\n\nEl comando `build` ejecuta las acciones de construcción definidas en tu archivo de configuración, como crear binarios personalizados de RoadRunner con plugins específicos.\nPara información detallada sobre cómo construir RoadRunner personalizado, consulta la sección [Construir RoadRunner Personalizado](#construir-roadrunner-personalizado).\n\n## Guía de Configuración\n\n### Configuración Interactiva\n\nLa forma más sencilla de crear un archivo de configuración es usando el comando interactivo `init`:\n\n```bash\n./vendor/bin/dload init\n```\n\nEsto hará lo siguiente:\n\n- Te guiará en la selección de paquetes de software\n- Mostrará software disponible con descripciones y repositorios\n- Generará un archivo `dload.xml` bien formateado con validación de esquema\n- Manejará archivos de configuración existentes de manera elegante\n\n### Configuración Manual\n\nCrea `dload.xml` en la raíz de tu proyecto:\n\n```xml\n\u003c?xml version=\"1.0\"?\u003e\n\u003cdload xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n       xsi:noNamespaceSchemaLocation=\"https://raw.githubusercontent.com/php-internal/dload/refs/heads/1.x/dload.xsd\"\n       temp-dir=\"./runtime\"\u003e\n    \u003cactions\u003e\n        \u003cdownload software=\"rr\" version=\"^2025.1\" /\u003e\n        \u003cdownload software=\"temporal\" /\u003e\n        \u003cdownload software=\"frontend\" extract-path=\"frontend\" /\u003e\n    \u003c/actions\u003e\n\u003c/dload\u003e\n```\n\n### Tipos de Descarga\n\nDLoad soporta tres tipos de descarga que determinan cómo se procesan los assets:\n\n#### Atributo Type\n\n```xml\n\u003c!-- Especificación explícita de tipo --\u003e\n\u003cdownload software=\"psalm\" type=\"phar\" /\u003e        \u003c!-- Descargar .phar sin extraer --\u003e\n\u003cdownload software=\"frontend\" type=\"archive\" /\u003e  \u003c!-- Forzar extracción de archivo --\u003e\n\u003cdownload software=\"rr\" type=\"binary\" /\u003e         \u003c!-- Procesamiento específico para binarios --\u003e\n\n\u003c!-- Manejo automático de tipo (recomendado) --\u003e\n\u003cdownload software=\"rr\" /\u003e           \u003c!-- Usa todos los manejadores disponibles --\u003e\n\u003cdownload software=\"frontend\" /\u003e     \u003c!-- Procesamiento inteligente basado en la config del software --\u003e\n```\n\n#### Comportamiento por Defecto (Sin Especificar Type)\n\nCuando no se especifica `type`, DLoad automáticamente usa todos los manejadores disponibles:\n\n- **Procesamiento de binarios**: Si el software tiene una sección `\u003cbinary\u003e`, verifica la presencia y versión del binario\n- **Procesamiento de archivos**: Si el software tiene una sección `\u003cfile\u003e` y el asset se descarga, procesa los archivos durante la extracción\n- **Descarga simple**: Si no hay secciones, descarga el asset sin extraer\n\n```xml\n\u003c!-- lista del registro --\u003e\n\u003csoftware name=\"complex-tool\"\u003e\n    \u003cbinary name=\"tool\" pattern=\"/^tool-.*/\" /\u003e\n    \u003cfile pattern=\"/^config\\..*/\" extract-path=\"config\" /\u003e\n\u003c/software\u003e\n\n\u003c!-- lista de acciones --\u003e\n\u003c!-- Usa tanto procesamiento de binarios como de archivos --\u003e\n\u003cdownload software=\"complex-tool\" /\u003e\n```\n\n#### Comportamientos de Tipos Explícitos\n\n| Tipo      | Comportamiento                                                     | Caso de Uso                       |\n|-----------|-------------------------------------------------------------------|----------------------------------|\n| `binary`  | Verificación de binarios, validación de versión, permisos de ejecución  | Herramientas CLI, ejecutables         |\n| `phar`    | Descarga archivos `.phar` como ejecutables **sin extraer** | Herramientas PHP como Psalm, PHPStan  |\n| `archive` | **Fuerza la extracción incluso para archivos .phar**                    | Cuando necesitas el contenido del archivo |\n\n\u003e [!NOTE]\n\u003e Usa `type=\"phar\"` para herramientas PHP que deben mantenerse como archivos `.phar`.\n\u003e Usar `type=\"archive\"` extraerá incluso archivos `.phar`.\n\n### Restricciones de Versión\n\nUsa restricciones de versión estilo Composer:\n\n```xml\n\u003cactions\u003e\n    \u003c!-- Versión exacta --\u003e\n    \u003cdownload software=\"rr\" version=\"2.12.3\" /\u003e\n    \n    \u003c!-- Restricciones de rango --\u003e\n    \u003cdownload software=\"temporal\" version=\"^1.20.0\" /\u003e\n    \u003cdownload software=\"dolt\" version=\"~0.50.0\" /\u003e\n    \n    \u003c!-- Restricciones de estabilidad --\u003e\n    \u003cdownload software=\"tool\" version=\"^1.0.0@beta\" /\u003e\n    \n    \u003c!-- Releases experimentales (automáticamente establece estabilidad preview) --\u003e\n    \u003cdownload software=\"experimental\" version=\"^1.0.0-experimental\" /\u003e\n\u003c/actions\u003e\n```\n\n### Opciones de Configuración Avanzadas\n\n```xml\n\u003cdload temp-dir=\"./runtime\"\u003e\n    \u003cactions\u003e\n        \u003c!-- Diferentes rutas de extracción --\u003e\n        \u003cdownload software=\"frontend\" extract-path=\"public/assets\" /\u003e\n        \u003cdownload software=\"config\" extract-path=\"config\" /\u003e\n        \n        \u003c!-- Apuntar a diferentes entornos --\u003e\n        \u003cdownload software=\"prod-tool\" version=\"^2.0.0@stable\" /\u003e\n        \u003cdownload software=\"dev-tool\" version=\"^2.0.0@beta\" /\u003e\n    \u003c/actions\u003e\n\u003c/dload\u003e\n```\n\n## Construir RoadRunner Personalizado\n\nDLoad soporta la construcción de binarios personalizados de RoadRunner usando la herramienta Velox. Esto es útil cuando necesitas RoadRunner con combinaciones específicas de plugins que no están disponibles en las versiones pre-construidas.\n\n### Configuración de Acción de Construcción\n\n```xml\n\u003cactions\u003e\n    \u003c!-- Configuración básica usando velox.toml local --\u003e\n    \u003cvelox config-file=\"./velox.toml\" /\u003e\n    \n    \u003c!-- Con versiones específicas --\u003e\n    \u003cvelox config-file=\"./velox.toml\"\n          velox-version=\"2025.1.1\"\n          golang-version=\"^1.22\"\n          roadrunner-ref=\"2024.1.5\"\n          binary-path=\"./bin/rr\"\n          debug=\"true\" /\u003e\n\u003c/actions\u003e\n```\n\n### Atributos de Acción Velox\n\n| Atributo | Descripción |\n|-----------|-------------|\n| `velox-version` | Restricción de versión para la herramienta de construcción Velox a utilizar |\n| `golang-version` | Restricción de versión de Go requerida para construir RoadRunner |\n| `roadrunner-ref` | Referencia Git de RoadRunner (tag, commit o rama) a usar como base para la construcción |\n| `config-file` | Ruta al archivo de configuración base que puede fusionarse con respuestas de API remotas u otras fuentes |\n| `binary-path` | Ruta de salida para el binario RoadRunner construido. La extensión del archivo se agrega automáticamente según el SO (`.exe` para Windows). Por defecto usa el directorio de trabajo actual |\n| `debug` | Construir RoadRunner con símbolos de depuración para perfilarlo con pprof (booleano, por defecto `false`) |\n\n### Proceso de Construcción\n\nDLoad maneja automáticamente todo el proceso de construcción:\n\n1. **Verificación de Golang**: Verifica que Go esté instalado globalmente (dependencia requerida)\n2. **Preparación de Velox**: Usa Velox desde instalación global, descarga local, o lo descarga automáticamente si es necesario\n3. **Configuración**: Copia tu archivo velox.toml local al directorio de construcción\n4. **Construcción**: Ejecuta el comando `vx build` con la configuración especificada\n5. **Instalación**: Mueve el binario construido a la ubicación de destino y establece permisos de ejecución\n6. **Limpieza**: Elimina archivos temporales de construcción\n\n\u003e [!NOTE]\n\u003e DLoad requiere que Go (Golang) esté instalado globalmente en tu sistema. No descarga ni gestiona instalaciones de Go.\n\n### Generación de Archivo de Configuración\n\nPuedes generar un archivo de configuración `velox.toml` usando el constructor online en https://build.roadrunner.dev/\n\nPara documentación detallada sobre opciones de configuración de Velox y ejemplos, visita https://docs.roadrunner.dev/docs/customization/build\n\nEsta interfaz web te ayuda a seleccionar plugins y genera la configuración apropiada para tu build personalizado de RoadRunner.\n\n### Usar Velox Descargado\n\nPuedes descargar Velox como parte de tu proceso de construcción en lugar de depender de una versión instalada globalmente:\n\n```xml\n\u003cactions\u003e\n    \u003cdownload software=\"velox\" extract-path=\"bin\" version=\"2025.1.1\" /\u003e\n    \u003cvelox config-file=\"velox.toml\"\n          golang-version=\"^1.22\"\n          roadrunner-ref=\"2024.1.5\" /\u003e\n\u003c/actions\u003e\n```\n\nEsto asegura versiones consistentes de Velox entre diferentes entornos y miembros del equipo.\n\n### Configuración DLoad\n\n```xml\n\u003c?xml version=\"1.0\"?\u003e\n\u003cdload xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n       xsi:noNamespaceSchemaLocation=\"https://raw.githubusercontent.com/php-internal/dload/refs/heads/1.x/dload.xsd\"\u003e\n    \u003cactions\u003e\n        \u003cvelox config-file=\"./velox.toml\" \n              velox-version=\"^1.4.0\"\n              golang-version=\"^1.22\"\n              roadrunner-ref=\"2024.1.5\"\n              binary-path=\"./bin/rr\" /\u003e\n    \u003c/actions\u003e\n\u003c/dload\u003e\n```\n\n### Construir RoadRunner\n\n```bash\n# Construir RoadRunner usando la configuración velox.toml\n./vendor/bin/dload build\n\n# Construir con un archivo de configuración específico\n./vendor/bin/dload build --config=custom-rr.xml\n```\n\nEl binario de RoadRunner construido incluirá solo los plugins especificados en tu archivo `velox.toml`, reduciendo el tamaño del binario y mejorando el rendimiento para tu caso de uso específico.\n\n## Registro de Software Personalizado\n\n### Definir Software\n\n```xml\n\u003cdload\u003e\n    \u003cregistry overwrite=\"false\"\u003e\n        \u003c!-- Ejecutable binario --\u003e\n        \u003csoftware name=\"RoadRunner\" alias=\"rr\" \n                  homepage=\"https://roadrunner.dev\"\n                  description=\"Servidor de aplicaciones de alto rendimiento\"\u003e\n            \u003crepository type=\"github\" uri=\"roadrunner-server/roadrunner\" asset-pattern=\"/^roadrunner-.*/\" /\u003e\n            \u003cbinary name=\"rr\" pattern=\"/^roadrunner-.*/\" /\u003e\n        \u003c/software\u003e\n\n        \u003c!-- Archive con archivos --\u003e\n        \u003csoftware name=\"frontend\" description=\"Assets de frontend\"\u003e\n            \u003crepository type=\"github\" uri=\"my-org/frontend\" asset-pattern=\"/^artifacts.*/\" /\u003e\n            \u003cfile pattern=\"/^.*\\.js$/\" /\u003e\n            \u003cfile pattern=\"/^.*\\.css$/\" /\u003e\n        \u003c/software\u003e\n\n        \u003c!-- Mixto: binarios + archivos --\u003e\n        \u003csoftware name=\"development-suite\" description=\"Suite completa de herramientas de desarrollo\"\u003e\n            \u003crepository type=\"github\" uri=\"my-org/dev-tools\" /\u003e\n            \u003cbinary name=\"cli-tool\" pattern=\"/^cli-tool.*/\" /\u003e\n            \u003cfile pattern=\"/^config\\.yml$/\" extract-path=\"config\" /\u003e\n            \u003cfile pattern=\"/^templates\\/.*/\" extract-path=\"templates\" /\u003e\n        \u003c/software\u003e\n\n        \u003c!-- Herramientas PHAR --\u003e\n        \u003csoftware name=\"psalm\" description=\"Herramienta de análisis estático\"\u003e\n            \u003crepository type=\"github\" uri=\"vimeo/psalm\" /\u003e\n            \u003cbinary name=\"psalm.phar\" pattern=\"/^psalm\\.phar$/\" /\u003e\n        \u003c/software\u003e\n\n        \u003c!-- Repositorio GitLab --\u003e\n        \u003csoftware name=\"My cool project\" alias=\"cool-project\"\n              homepage=\"https://gitlab.com/path/to/my/repository\"\n              description=\"\"\u003e\n            \u003crepository type=\"gitlab\" uri=\"path/to/my/repository\" asset-pattern=\"/^cool-.*/\" /\u003e\n            \u003cbinary name=\"cool\" pattern=\"/^cool-.*/\" /\u003e\n        \u003c/software\u003e\n    \u003c/registry\u003e\n\u003c/dload\u003e\n```\n\n### Elementos de Software\n\n#### Configuración de Repository\n\n- **type**: Actualmente soporta \"github\"\n- **uri**: Ruta del repositorio (ej., \"username/repo\")\n- **asset-pattern**: Patrón regex para hacer match con assets de release\n\n#### Elementos Binary\n\n- **name**: Nombre del binario para referencia\n- **pattern**: Patrón regex para hacer match con el binario en los assets\n- Maneja automáticamente el filtrado por SO/arquitectura\n\n#### Elementos File\n\n- **pattern**: Patrón regex para hacer match con archivos\n- **extract-path**: Directorio de extracción opcional\n- Funciona en cualquier sistema (sin filtrado por SO/arquitectura)\n\n## Casos de Uso\n\n### Configurar Entorno de Desarrollo\n\n```bash\n# Configuración única para nuevos desarrolladores\ncomposer install\n./vendor/bin/dload init  # Solo la primera vez\n./vendor/bin/dload get\n```\n\n### Configurar Nuevo Proyecto\n\n```bash\n# Empezar un nuevo proyecto con DLoad\ncomposer init\ncomposer require internal/dload -W\n./vendor/bin/dload init\n./vendor/bin/dload get\n```\n\n### Integración CI/CD\n\n```yaml\n# GitHub Actions\n- name: Download tools\n  run: GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} ./vendor/bin/dload get\n```\n\n### Equipos Multiplataforma\n\nCada desarrollador obtiene los binarios correctos para su sistema:\n\n```xml\n\u003cactions\u003e\n    \u003cdownload software=\"rr\" /\u003e        \u003c!-- Binario Linux para Linux, .exe de Windows para Windows --\u003e\n    \u003cdownload software=\"temporal\" /\u003e   \u003c!-- Binario macOS para macOS, etc. --\u003e\n\u003c/actions\u003e\n```\n\n### Gestión de Herramientas PHAR\n\n```xml\n\u003cactions\u003e\n    \u003c!-- Descargar como archivos .phar ejecutables --\u003e\n    \u003cdownload software=\"psalm\" type=\"phar\" /\u003e\n    \u003cdownload software=\"phpstan\" type=\"phar\" /\u003e\n    \n    \u003c!-- Extraer contenido en su lugar --\u003e\n    \u003cdownload software=\"psalm\" type=\"archive\" /\u003e  \u003c!-- Extrae psalm.phar --\u003e\n\u003c/actions\u003e\n```\n\n### Distribución de Assets Frontend\n\n```xml\n\u003csoftware name=\"ui-kit\"\u003e\n    \u003crepository type=\"github\" uri=\"company/ui-components\" /\u003e\n    \u003cfile pattern=\"/^dist\\/.*/\" extract-path=\"public/components\" /\u003e\n\u003c/software\u003e\n\n\u003cactions\u003e\n    \u003cdownload software=\"ui-kit\" type=\"archive\" /\u003e\n\u003c/actions\u003e\n```\n\n## Límites de Rate de la API\n\nUsa un token de acceso personal para evitar límites de rate:\n\n```bash\nGITHUB_TOKEN=your_token_here ./vendor/bin/dload get\nGITLAB_TOKEN=your_token_here ./vendor/bin/dload get\n```\n\nAgrégalo a las variables de entorno CI/CD para descargas automatizadas.\n\n## Configuración de Gitlab CI\n\nAl crear un release en Gitlab, asegúrate de subir tus assets a la página del release a través del\ngestor de paquetes. Esto se puede hacer fácilmente mediante Gitlab CLI y el comando `glab release upload --use-package-registry`.\n\n```yaml\n# .gitlab-ci.yml\n\nBuild artifacts:\n  stage: push\n  script:\n    - mkdir bin\n    - echo \"Mock binary for darwin arm\" \u003e bin/cool-darwin-arm64\n    - echo \"Mock binary for darwin amd\" \u003e bin/cool-darwin-amd64\n    - echo \"Mock binary for linux arm\" \u003e bin/cool-linux-arm64\n    - echo \"Mock binary for linux amd\" \u003e bin/cool-linux-amd64\n  artifacts:\n    expire_in: 2 hours\n    paths:\n      - $CI_PROJECT_DIR/bin/cool-*\n  rules:\n    - if: $CI_COMMIT_TAG\n\nRelease artifacts:\n    stage: deploy\n    image: gitlab/glab:latest\n    needs: [ \"Build artifacts\" ]\n    script:\n        - glab auth login --job-token $CI_JOB_TOKEN --hostname $CI_SERVER_HOST\n        - glab release upload --use-package-registry \"$CI_COMMIT_TAG\" ./bin/*\n    rules:\n        - if: $CI_COMMIT_TAG\n```\n\n## Contribuir\n\n¡Las contribuciones son bienvenidas! Envía Pull Requests para:\n\n- Agregar nuevo software al registro predefinido\n- Mejorar la funcionalidad de DLoad  \n- Mejorar la documentación y traducirla a [otros idiomas](docs/guidelines/how-to-translate-readme-docs.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphp-internal%2Fdload","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphp-internal%2Fdload","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphp-internal%2Fdload/lists"}