Desarrollé un paquete Symfony y estoy tratando de crear una receta. Antes de enviarlo a recipes-contrib , quiero probarlo, así que seguílas instrucciones para recetas privadas , no porque quiera una receta privada (es decir, ni el paquete ni la receta son "privados" en el sentido de un proyecto privado de GitHub).
He leído, releído y vuelto a leer la documentación para crear una receta y siento que me estoy perdiendo un paso muy importante. La documentación para un repositorio privado solo habla sobre el archivo package.version.json, por ejemplo
{ "manifests": { "acme/private-bundle": { "manifest": { "bundles": { "Acme\\PrivateBundle\\AcmePrivateBundle": [ "all" ] }, "copy-from-recipe": { "config/": "%CONFIG_DIR%" } }, "files": { "config/packages/acme_private.yaml": { "contents": [ "acme_private:", " encode: true", "" ], "executable": false } }, "ref": "7405f3af1312d1f9121afed4dddef636c6c7ff00" } } } Este archivo parece ser el resultado de algún comando que lee el archivo en el formato esperado para una receta contrib : una estructura de directorio que tiene un directorio de config para rutas y paquetes, tal vez un directorio src , etc.
Obviamente, nadie está escribiendo a mano línea por línea un archivo YAML (¡o PHP!) como una lista de cadenas en la clave de content .
Parece que la rama master de recetas y recipes-contrib contiene la estructura de directorios, y la rama flex/main contiene el archivo de recetas JSON "compilado".
Pero en las instrucciones de la receta privada, no hay instrucciones sobre cómo pasar de los archivos compatibles con DX a la receta JSON.
TL;RD; ¿Cómo creo una receta de package.version.json desde el directorio package/version/ que contiene manifest.json , config , etc.?
Tuve el mismo problema hace unas horas y finalmente lo conseguí. La publicación del blog https://symfony.com/blog/symfony-flex-is-going-serverless dio pistas donde podemos ver que existe un script y una herramienta.
Dupliqué las acciones de Github y adapté esos archivos en uno de mis repositorios: https://github.com/web-token/recipes
main contiene los archivos compilados, incluido index.json : esto es lo que necesita para que funcione .tree es donde viven los archivos amigables para desarrolladores. La rama del tree contiene los flujos de trabajo de las acciones de Github que actualizan la rama main . Siéntase libre de copiar y adaptar la carpeta https://github.com/web-token/recipes/tree/tree/.github con sus parámetros.
Tenga en cuenta que la URL del servidor para declarar en el archivo del compositor se verá como https://api.github.com/repos/web-token/recipes/contents/index.json?ref=main
Sí, estoy de acuerdo en que las instrucciones son muy opacas allí.
El paso que falta lo realiza symfony-tools/recipe-checker ( enlace ).
El repositorio (lamentablemente) no está disponible como paquete en Packagist, por lo que para instalarlo y ejecutarlo localmente, debe modificar su configuración para agregar un repositorio personalizado que apunte allí, o clonar/descargar sin usar composer.
P.ej
git clone https://github.com/symfony-tools/recipes-checker cd recipes-checker composer installAhora tienes el script listo para usar. Suponiendo que lo descargó en su directorio de inicio, podría ejecutar:
~/recipe-checker/run generate:flex-endpoint <repository> <source_branch> <flex_branch> <output_directory> Los diferentes argumentos son (tal como se obtienen de run generate:flex-endpoint --help ):
Arguments: repository The name of the GitHub repository source_branch The source branch of recipes flex_branch The branch of the target Flex endpoint output_directory The directory where generated files should be stored versions_json The file where versions of Symfony are described Entonces, si tiene un repositorio de recetas para un paquete como yivi/stub-bundle , versión 1.0, con el repositorio alojado en https://github.com/yivi/stub-bundle-recipe
<dir> └── yivi └─stub-bundle └── 1.0 ├── bin │ └── something.sh ├ manifest.json └ post-install.json Simplemente puede cd al directorio del paquete y ejecutar:
~/recipe-checker/run generate:flex-endpoint yivi/stub-bundle-recipe main main .Esto generaría localmente la receta "compilada" (o recetas, si tiene varias en ese directorio) y terminaría con esto en ese directorio:
index.jsonyivi.stub-bundle.1.0.jsonarchived/ (dir) Para "probar" esto localmente, simplemente sería cuestión de confirmar y enviar este repositorio, y en un proyecto que quiera usar las recetas alojadas aquí, actualice el campo composer.json extra.symfony para incluir:
"extra": { "symfony": { "endpoint": [ "https://api.github.com/repos/yivi/stub-bundle-recipe/contents/index.json", "flex://defaults" ] } }La buena respuesta de Spomky se vincula a una acción de GitHub que podría hacer esto por usted automáticamente en el repositorio receptor, separando limpiamente en diferentes ramas las recetas "fuente" y las recetas "compiladas", pero creo que este ejemplo mostrará más fácilmente cómo realice el proceso paso a paso usted mismo.