Configuring Unicorn on Helix project
Setting up synchronization in Helix based solution is one of the most crucial things. With proper configuration all new projects will be easy to maintain and predictable. In this short post I will describe basics of configuring Unicorn.
We should have whole Helix items structure configuration here and this one should be synched as the first in the queue.
There is unicornSourceFolder variable which should be pointing /src/ folder of our app code. We can specify it for example in some patch in Project.Common project.
Then we can use this abstract configuration in our projects
We do it by using extends parameter
If our project is relying on some other, e.g. from Foundation layer, then we should specify it by dependencies parameter. Here it depends on whole Foundation layer by using asterix
...but it could be as well list of comma-delimited configuration names
As I mentioned earlier, Foundation.Serialization configuration should be synchronized as first, so the our patch should go after that one:
Don't forget to put descriptive name and description attributes too.
Even if you're not using Helix you should consider creating several small configurations instead of one monolithic. It will be easier to synch only specific ones in Unicorn synch panel.
Helix structure configuration
First of all we should have our Foundation.Serialization project configured. In this project we should install Unicorn - from the nuget feed.We should have whole Helix items structure configuration here and this one should be synched as the first in the queue.
There is unicornSourceFolder variable which should be pointing /src/ folder of our app code. We can specify it for example in some patch in Project.Common project.
Abstract configurations
It is really good idea to have some basic configuration we can inherit from. It can be placed in for example Foundation.Serialization project.Then we can use this abstract configuration in our projects
We do it by using extends parameter
extends="SitecoreCoffee.Base"
If our project is relying on some other, e.g. from Foundation layer, then we should specify it by dependencies parameter. Here it depends on whole Foundation layer by using asterix
dependencies="Foundation.*"
...but it could be as well list of comma-delimited configuration names
dependencies="Foundation.Search,Foundation.Extensions"
As I mentioned earlier, Foundation.Serialization configuration should be synchronized as first, so the our patch should go after that one:
patch:after="configuration[@name='Foundation.Serialization']"
Don't forget to put descriptive name and description attributes too.
Project-specific configurations
In Helix every project which requires some serialized Sitecore items, should have it's own Unicorn configuration. Above we created Feature.Search project configuration and there we put only project-specific items in the predicate<predicate type="Unicorn.Predicates.SerializationPresetPredicate, Unicorn" singleInstance="true"> <include name="SitecoreCoffee.Feature.Search.Templates" database="master" path="/sitecore/templates/Feature/Search" /> <include name="SitecoreCoffee.Feature.Search.Renderings" database="master" path="/sitecore/layout/renderings/Feature/Search" /> </predicate>
Even if you're not using Helix you should consider creating several small configurations instead of one monolithic. It will be easier to synch only specific ones in Unicorn synch panel.