On my private Symfony Flex recipe, files are not copied from the recipe when installing the bundle

866 views Asked by At

I'm currently in the process of releasing a Symfony bundle for a very small amount of people. This is the reason why I don't think will one day land on https://github.com/symfony/recipes-contrib, so I used the Flex Private Recipe documentation.

I pushed the bundle on GitHub and created another one to store its recipe.

This is my recipe:

{
  "manifests": {
    "edumedia/gar-api-bundle": {
      "manifest": {
        "bundles": {
          "eduMedia\\GarApiBundle\\eduMediaGarApiBundle": [
            "all"
          ]
        },
        "copy-from-recipe": {
          "config/": "%CONFIG_DIR%"
        },
        "env": {
          "GAR_DISTRIBUTOR_ID": "000000000_0000000000000000",
          "GAR_SSL_CERT": "/path/to/cert.pem",
          "GAR_SSL_KEY": "/path/to/cert.key"
        }
      },
      "ref": "ad610a54abdf2f5563841a4ce4b3c3cb29a7d0ff"
    }
  }
}

At the same level, there is a config directory that holds a configuration file:

# config/edumedia_gar_api.yaml
edumedia_gar_api:
  distributor_id: '%env(GAR_DISTRIBUTOR_ID)%'
  ssl_cert: '%env(GAR_SSL_CERT)%'
  ssl_key: '%env(GAR_SSL_KEY)%'
  remote_env: 'preprod'
  cache_directory: '%kernel.cache_dir%/gar-cache'

However, nothing is copied when executing the recipe.

1

There are 1 answers

0
yivi On BEST ANSWER

On private recipes, files are not copied from the directory, but from the "recipe" itself.

The directory structure works when submitting a Flex recipe to the Symfony repository, but when creating a private recipe, the file's contents need to be inlined within the recipe's JSON.

E.g.:

{
  "manifests": {
    "edumedia/gar-api-bundle": {
      "manifest": {
        "bundles": {
          "eduMedia\\GarApiBundle\\eduMediaGarApiBundle": [
            "all"
          ]
        },
        "copy-from-recipe": {
          "config/": "%CONFIG_DIR%"
        },
        "env": {
          "GAR_DISTRIBUTOR_ID": "000000000_0000000000000000",
          "GAR_SSL_CERT": "/path/to/cert.pem",
          "GAR_SSL_KEY": "/path/to/cert.key"
        }
      },
      "files": {
                "config/packages/edumedia_gar_api.yaml": {
                    "contents": [
                        "edumedia_gar_api:",
                        "  distributor_id: '%env(GAR_DISTRIBUTOR_ID)%'",
                        "  ssl_cert: '%env(GAR_SSL_CERT)%'",
                        "  ssl_key: '%env(GAR_SSL_KEY)%'",
                        "  cache_directory: '%kernel.cache_dir%/gar-cache'",
                        "  remote_env: 'preprod'"
                    ],
                    "executable": false
                }
            },
      "ref": "ad610a54abdf2f5563841a4ce4b3c3cb29a7d0ff"
    }
  }
}

Creating this file by hand can be quite a chore. So it's usually better to create the recipe as if it was going to be a public recipe, with the complete directory structure (including a directory for vendor, package name, and version number), and use Symfony's tool to generate the finished recipe.

I describe that process on this other answer.