Simple Release Management with SDL Tridion 2013 and Bundles

I was fortunate to have a preview version the up and coming 2013 release of SDL Tridion to play with. One new feature is Bundles, which is basically a new type of organizational item, which allows you to group together related items, and do operations on them as a whole. Typically this would be putting it through workflow, or publishing them all together in a single transaction, but one nice thing about them is that you can use them however you want to, just add items into a bundle, and use it however you need to.

The new release of Content Porter will also be bundle-aware, which got me thinking that there should be an easy way to keep track of changed items during development using bundles to avoid the pain of keeping track manually. It turns out to be really easy using the Event System.

What I did is:

  1. Create a folder called Release Packages in the root folder in the top publication in your Blueprint
  2. In each publication in which you will create or change items, create a new Bundle within the Release Packages folder. To make it easy in my code, I made the bundle name the same as the publication which it lives in.
  3. Create an event handler to add items to the appropriate bundle when they are created/updated
  4. Go ahead and do your development – watch new and updated items be added into appropriate bundles
  5. Use Content Porter to port the bundles to your test/production environment
  6. Remove the contents of all the bundles before the next iteration of development

Heres the Event Handler code, as you can see theres not much too it, just implement 3 types of event:

  1. When a VersionedItem is checked in
  2. When an OrganizationalItem is saved
  3. When a RepositoryLocalObject is localized


I had a bit more time, so fluffed this example out a bit to auto-create the Release Packages folder and bundles on demand. I also updated it to cover Categories, and Keywords (which need their own event as they are not VersionedItems, or OrganizationalItems).

4 thoughts on “Simple Release Management with SDL Tridion 2013 and Bundles

  1. Hey Will, great post and thank you pioneering this. We have a scenario at one client where they use a modified version of Albert’s Release Manager extension that allows them to add items to a release from different Publications. For example: add some schemas, components, CTs and PTs into a release (all created a different BluePrint levels). I’ve tried creating a bundle at the highest level and then adding items to it lower in the BP, but the usual localization rules apply, where you have to localize the bundle at each new level. This quickly becomes problematic because you start having different local copies of the Bundle at Content and Design publications, and then need to use BP priorities at the bottom. Do you have any thoughts on this?

  2. Recently I have worked with a single bundle in the lowest point of the blueprint where changes for a release are made (eg website master). If you put local items in here content porter will take care that the original item (ie the one higher in the BP) is exported

  3. What if i use bundle for exporting schema from 020 level through content porter but its location is 010. will it create schema at 020 level or it will remain same at 010 when i import to test environment?

  4. Thanks for sharing this Will.

    I found a small bug in the updated version of your code. A publication bundle is automatically created on the first item save but subsequent saves of an item do not add it to the publication bundle. The fix is to the GetReleaseBundleWebDavUrl method.

    This line:

    return String.Format(“{0}/{1}/{2}”, repository.WebDavUrl, RELEASE_PACKAGES_FOLDER, pubBit);

    Should read:

    return String.Format(“{0}/{1}/{2}”, repository.RootFolder.WebDavUrl, Uri.EscapeDataString(RELEASE_PACKAGES_FOLDER), pubBit);

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>