2017-07-10 04:50:52 +02:00
|
|
|
# SilverStripe recipe-plugin
|
|
|
|
|
|
|
|
## Introduction
|
|
|
|
|
|
|
|
This plugin enhances composer and allows for the installation of "silverstripe-recipe" packages.
|
|
|
|
These recipes allow for the following features:
|
|
|
|
|
|
|
|
- The ability to provide project resource files. These are copied to the appropriate project root location
|
|
|
|
on install, and can be safely modified by the developer. On subsequent updates to a later recipe,
|
|
|
|
composer will inform the user if a project file has been updated, and will ensure new files are
|
|
|
|
copied as they are introduced to the recipe.
|
|
|
|
- Recipes are composable, so resources or dependencies that are required by multiple recipes can include one another,
|
|
|
|
rather than having to duplicate content.
|
|
|
|
- Recipes also can be used as a base composer project.
|
|
|
|
- A `require-recipe` command to inline a recipe into the root composer.json, allowing the developer to customise the
|
|
|
|
recipe dependencies without mandating the inclusion of all requirements directly.
|
|
|
|
- An `upgrade-recipe` command to upgrade to a newer version of a recipe.
|
|
|
|
|
|
|
|
## Example output
|
|
|
|
|
|
|
|
![example-output](docs/_images/require-usage.png)
|
|
|
|
|
|
|
|
## Creating a new project
|
|
|
|
|
|
|
|
Recipes can be introduced to any existing project (even if not created on a silverstripe base project)
|
|
|
|
|
2017-07-10 04:54:17 +02:00
|
|
|
```shell
|
|
|
|
$ composer init
|
|
|
|
$ composer require silverstripe/recipe-plugin ^0.1
|
|
|
|
$ composer require-recipe silverstripe/recipe-cms ^4.0@dev
|
|
|
|
````
|
2017-07-10 04:50:52 +02:00
|
|
|
|
|
|
|
Alternatively, instead of having to install the recipe-plugin manually, you can require the recipe
|
|
|
|
directly and inline this as a subsequent command. This is necessary to make the new commands available
|
|
|
|
to the command line.
|
|
|
|
|
2017-07-10 04:54:17 +02:00
|
|
|
```shell
|
|
|
|
$ composer init
|
|
|
|
$ composer require silverstripe/recipe-cms ^4.0@dev
|
|
|
|
$ composer upgrade-recipe silverstripe/recipe-cms
|
|
|
|
```
|
2017-07-10 04:50:52 +02:00
|
|
|
|
|
|
|
Alternatively you can create a new project based on an existing recipe
|
|
|
|
|
2017-07-10 04:54:17 +02:00
|
|
|
```shell
|
|
|
|
$ composer create-project silverstripe/recipe-cms ./myssproject ^4.0@dev
|
|
|
|
```
|
2017-07-10 04:50:52 +02:00
|
|
|
|
|
|
|
## Upgrading recipes
|
|
|
|
|
|
|
|
Any existing recipe, whether installed via `composer require` or `composer require-recipe` can be safely upgraded
|
|
|
|
via `composer upgrade-recipe`.
|
|
|
|
|
|
|
|
When upgrading a version constraint is recommended, but not necessary. If omitted, then the existing installed
|
|
|
|
version will be detected, and a safe default chosen.
|
|
|
|
|
2017-07-10 04:54:17 +02:00
|
|
|
```shell
|
|
|
|
$ composer upgrade-recipe silverstripe/recipe-cms ^1.0@dev
|
|
|
|
```
|
2017-07-10 04:50:52 +02:00
|
|
|
|
|
|
|
## Installing or upgrading recipes without inlining them
|
|
|
|
|
|
|
|
If desired, the optional inline behaviour of recipes can be omitted. Simply use the composer commands `require` and
|
|
|
|
`update` in place of `require-recipe` and `update-recipe` respectively. This will not disable the project files
|
|
|
|
feature, but will not inline the recipe directly, keeping your root composer.json from getting cluttered.
|
|
|
|
|
|
|
|
If you have already inlined a recipe, it will be necessary to manually remove any undesired inlined requirements
|
|
|
|
manually, and the recipe will need to be included with `require` subsequently.
|
|
|
|
|
|
|
|
Note that using this method it's not necessary to include the `silverstripe/recipe-plugin` in the root project
|
|
|
|
for this to work.
|
|
|
|
|
|
|
|
## Building a recipe
|
|
|
|
|
|
|
|
Recipe types should follow the following rules:
|
|
|
|
|
|
|
|
- No mandatory resources excluding project files
|
|
|
|
- Should require any `autoload` of the following composer settings, as these are discarded on inline.
|
|
|
|
Likewise any `dev` options, as these are ignored outside of the root project. The exception to this
|
|
|
|
is when these values are useful as a base project only.
|
|
|
|
- Library type must be 'silverstripe-recipe'
|
|
|
|
- Library must have `silverstripe/recipe-plugin` as a dependency.
|
|
|
|
|
|
|
|
An example recipe:
|
|
|
|
|
2017-07-10 04:54:17 +02:00
|
|
|
```json
|
|
|
|
{
|
|
|
|
"name": "silverstripe/example-recipe,
|
|
|
|
"description": "Example silverstripe recipe",
|
|
|
|
"type": "silverstripe-recipe",
|
|
|
|
"require": {
|
|
|
|
"silverstripe/recipe-plugin": "^0.1",
|
|
|
|
"silverstripe/recipe-cms": "^4.0",
|
|
|
|
"silverstripe/blog": "^3.0@dev",
|
|
|
|
"silverstripe/lumberjack": "^2.1@dev",
|
|
|
|
},
|
|
|
|
"extra": {
|
|
|
|
"project-files": [
|
|
|
|
"mysite/_config/blogsettings.yml"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"prefer-stable": true,
|
|
|
|
"minimum-stability": "dev"
|
|
|
|
}
|
|
|
|
```
|