recipe-plugin/README.md

106 lines
4.0 KiB
Markdown
Raw Normal View History

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"
}
```