Skip to end of metadata
Go to start of metadata

A cookbook approach to creating release branches for a CollectionSpace release.

Icon

What's in a revision number (version name)? Follow this link: http://semver.org/

About release branches

We create "Release" branches when the development work for a CollectionSpace software release is finished and ready for QA testing. A Release branches allow changes and bugs to be fixed on the release branches, while ongoing development work toward the next release can continue to be carried out on the master branch.  For more information about Release branches, take a look at http://producingoss.com/en/release-branches.html.

When QA testing has completed and a CollectionSpace release is declared ready to ship, source code snapshots, called tags, are then created from these release branches.

Branching a release
Icon

Substitute the actual revision number of your release for v4.5 below.

  1. Make a new enclosing folder and move into it:

  2. Retrieve each layer's source code into local working directories:

  3. Within each directory in turn; that is, 'services', 'application', and 'ui', verify that the branch you're creating doesn't already exist, either locally or in the project repo on GitHub:

    (or under Unix-like systems, including Linux and OS X):

  4. Make sure that you are in the master (development) branch

    (You should see a list of branches, with an asterisk before master, like this: * master)
     

  5. Make a new branch, based on the master branch

     

    1. Modify the release branch sources to reflect its non-SNAPSHOT designation.

      1. Update the Service layer sources.

        1. Ensure the top-level build.properties file has the correct version number: 

        2. Edit the top-level build.properties file by changing:

          to:

        3. Edit the top-level pom.xml file by changing the following lines from:

          Maven

          Icon

          CollectionSpace uses a tool called Maven to manage and build its source code.  To learn more about Maven, SNAPSHOTS, etc, see http://en.wikipedia.org/wiki/Apache_Maven

          to

        4. Update ALL the sub-module pom.xml files.

          Use a Tool!

          Icon

          There are more than 200 pom.xml files that need to be updated.  So you'll want to use a tool to perform all the find & replaces.  

          You'll need to change all the sub-module pom.xml files' <parent> element's <version> sub-element from:

          to:

      2. Update all the the Application layer pom.xml files.
        1. Edit the top-level pom.xml file
          You'll need to change all the sub-module pom.xml files' <parent> element's <version> sub-elements from:

           to:

      3. Update the UI layer sources
        1. Edit the top-level pom.xml file.

          to:



    2. Push the new branches to GitHub (requires repo commit privileges):
      At the root of each layer (services, application, ui), perform the following commands:

    3. Verify that the branches now exists on GitHub

      1. https://github.com/collectionspace/application/tree/v4.5-branch

      2. https://github.com/collectionspace/services/tree/v4.5-branch

      3. https://github.com/collectionspace/ui/tree/v4.5-branch

  6. Now update the master branch of each layer to reflect the version number for the next release (e.g., v4.4 to v4.5) and replace:
     

    1. In the services layer, edit the build.properties file: 

      with:

    2. Edit the top-level pom.xml file by changing the following lines from:

      to:

    3. Update all the sub-module pom.xml files.
      You'll need to change all the sub-module pom.xml files' <parent> element's <version> sub-element from:

      to:

    4. Update all the the Application layer pom.xml files.

      You'll need to change all the sub-module pom.xml files' <parent> element's <version> sub-elements from:

      to

    5. Update the UI layer sources.

      Edit the top-level pom.xml file from:

      to:

    6. Commit these changes and push them to GitHub
      At the root of each layer (services, application, ui), perform the following commands:

See also

Tagging Releases in Git