Child pages
  • Sakai CLE release guide (pre 2.9)

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Create a release branch

Current practice dictates that non-indie *.x branch pom versions must remain constant for the life of the branch. *.x branch pom files are versioned major version.minor version-SNAPSHOT (e.g., 2.8-SNAPSHOT). In addition, no snapshot jars are permitted in the Maven2 release repo. Because of these rules, particularly the latter, a release branch must be created prior to a release for each non-indie project in order to reset each pom <version> to a non-snapshot version (e.g., 2.8.1).

Release branches should only be created after all *.x branch blockers have been eliminated. Once the release branch is created the *.x branch is free to accept merged code not intended for the release. However, given the vagaries of CLE quality assurance late breaking release blockers are often discovered after the release branch is created. This creates challenges for the release team and branch managers since blocker fixes must be merged both to the *.x maintenance branch AND the release branch. Great vigilance is required to track the commit stream to ensure that fixes required for the release are not missed.

Indie projects, which leverage the Maven release plugin, are easier to manage. Releases are performed from existing *.x maintenance branches (no release branch is required) and the plugin handles pom version changes, tag creation and binaries generation and deployment automatically.

Non-indie release branches (as well as tags) are created using the following bash script.

TODO: add URL

The script takes six arguments.

No Format
$ bash sakaitagbuilder-2.8.bash [Jira ticket number] \
[source branch] \ 
[take HEAD=true|false] \
[target=branches|tags] \
[sakai version] \
[version suffix=mXX|aXX|bXX|rcXX]

$ bash sakaitagbuilder-2.8.bash SAK-20967 sakai-2.8.x true branches 2.8.1

Update pom.xml <version>, master pom.xml <properties>, sakai.properties

1. Update <version>; find/replace 2.*-SNAPSHOT with release version
Code Block
xml
xml
<version>2.8-SNAPSHOT</version> -> <version>2.8.1</version> 
2. Update <sakai.version> (master pom.xml)
Code Block
xml
xml
<sakai.version>2.8.1</sakai.version>
3. Update Indie version <properties> (master pom.xml)
Code Block
xml
xml
<sakai.version>2.8.1</sakai.version>
<sakai.kernel.version>1.2.5</sakai.kernel.version>
 . . .
<sakai.basiclti.version>1.3.3</sakai.basiclti.version>
<sakai.common.version>1.1.3</sakai.common.version>
<sakai.contentreview.version>2.8.5</sakai.contentreview.version>
<sakai.edu-services.version>1.1.2</sakai.edu-services.version>
<sakai.ets.version>0.5.3</sakai.ets.version>
<sakai.entitybroker.version>1.4.2</sakai.entitybroker.version>
<sakai.hybrid.version>1.1.4</sakai.hybrid.version>
<sakai.jsf.version>2.8.2</sakai.jsf.version>
<sakai.msgcntr.version>2.8.1</sakai.msgcntr.version>
<sakai.polls.version>1.4.2</sakai.polls.version>
<sakai.profile.version>2.8.2</sakai.profile.version>
<sakai.profile2.version>1.4.2</sakai.profile2.version>
<sakai.resetpass.version>2.8.2</sakai.resetpass.version>
<sakai.sakai-mock.version>2.8.2</sakai.sakai-mock.version>
<sakai.samigo.version>2.8.2</sakai.samigo.version>
<sakai.scheduler.version>2.8.1</sakai.scheduler.version>
<sakai.search.version>1.3.4</sakai.search.version>
<sakai.shortenedurl.version>1.0.2</sakai.shortenedurl.version>
<sakai.sitestats.version>2.2.1</sakai.sitestats.version>
<sakai.webservices.version>1.0.2</sakai.webservices.version>
4. Review other properties such as Tomcat or Quartz versions and update as necessary.
Code Block
xml
xml
<sakai.commons.lang.version>2.5</sakai.commons.lang.version>
<sakai.commons.fileupload.version>1.2.1</sakai.commons.fileupload.version>
<sakai.ehcache.groupId>net.sf.ehcache</sakai.ehcache.groupId>
<sakai.ehcache.artifactId>ehcache</sakai.ehcache.artifactId>
<sakai.ehcache.version>1.6.1</sakai.ehcache.version>
<sakai.hibernate.groupId>org.hibernate</sakai.hibernate.groupId>
<sakai.hibernate.artifactId>hibernate</sakai.hibernate.artifactId>
<sakai.hibernate.version>3.2.7.ga</sakai.hibernate.version>
<sakai.jcr.version>1.0</sakai.jcr.version>
<sakai.pluto.version>1.1.7</sakai.pluto.version>
<sakai.quartz.version>1.6.6</sakai.quartz.version>
<sakai.servletapi.version>2.4</sakai.servletapi.version>
<sakai.spring.groupId>org.springframework</sakai.spring.groupId>
<sakai.spring.artifactId>spring</sakai.spring.artifactId>
<sakai.spring.version>2.5.6.SEC01</sakai.spring.version>
<sakai.spring.test.artifactId>spring-test</sakai.spring.test.artifactId>
<sakai.spring.test.version>2.5.6.SEC01</sakai.spring.test.version>
<sakai.tomcat.version>5.5.33</sakai.tomcat.version>
<sakai.xerces.impl.version>2.6.2</sakai.xerces.impl.version>
<sakai.xerces.api.version>2.6.2</sakai.xerces.api.version>
5. Update sakai.properties
default.sakai.properties
No Format
version.service=RELEASE
version.sakai=2.8.1
demo.sakai.properties
No Format
version.service=DEMO
version.sakai=2.8.1
sample.sakai.properties
No Format
version.service=SAMPLE
version.sakai=2.8.1
6. Check stealth settings and adjust accordingly for the default and demo sakai.properties
default.sakai.properties
No Format
# STEALTH TOOLS  
# A stealth tool is a tool that is running in Sakai but is not available to be added to a site in Worksite Setup.
# For Development/QA purposes stealthTools property will be commented out; release artifacts will have the property uncommented.
stealthTools@org.sakaiproject.tool.api.ActiveToolManager=sakai.profile
demo.sakai.properties
No Format
# STEALTH TOOLS.  A stealth tool is a tool that is running in Sakai, but is not available to be added to a site in Worksite Setup.
stealthTools@org.sakaiproject.tool.api.ActiveToolManager=sakai.profile,sakai.search

(minus) Review reference/docs/sakai.properties version.service and version.sakai. These files should not have been updated by developers. Check logs for changes.

reference/docs/sakai.properties

No Format
version.service=RELEASE
version.sakai=2.8.1
Double check /reference/docs/conversion

(warning) Review sql conversion scripts, update and commit as necessary.

/master/pom.xml: confirm <distributionManagement>, maven-taglib-plugin and Sakai maven plugin settings. Commit changes if necessary.
1. <distributionManagement>
Code Block
xml
xml
<distributionManagement>
    <repository>
      <uniqueVersion>false</uniqueVersion>
      <id>local</id>
      <name>Local Test</name>
      <url>file:///tmp/maven2</url>
      <layout>default</layout>
    </repository>
    <site>
      <id>local</id>
      <name>Local Test</name>
      <url>file:///tmp/site</url>
    </site>
  </distributionManagement>

(warning) Consider deploying directly to Maven2 release repo. See rationale below.

Code Block
xml
xml
<distributionManagement>
        <downloadUrl>http://source.sakaiproject.org/maven2/</downloadUrl>
        <snapshotRepository>
            <uniqueVersion>false</uniqueVersion>
            <id>sakai-maven-snapshots-scp</id>
            <name>Sakai snapshot Repo</name>
            <url>scp://source.sakaiproject.org/var/www/html/maven2-snapshots</url>
            <layout>default</layout>
        </snapshotRepository>
        <repository>
            <uniqueVersion>false</uniqueVersion>
            <id>sakai-maven2-scp</id>
            <name>Sakai maven2 repository</name>
            <url>scp://source.sakaiproject.org/var/www/html/maven2</url>
            <layout>default</layout>
        </repository>
        <site>
            <id>sakai-site</id>
            <name>Sakai release Site</name>
            <url>${url.localsite}</url>
        </site>
    </distributionManagement>
2. maven-taglib-plugin
Code Block
xml
xml
<plugin>
	<groupId>net.sourceforge.maven-taglib</groupId>
	<artifactId>maven-taglib-plugin</artifactId>
	<configuration>
		<goalPrefix>taglib</goalPrefix>
		<taglib.src.dir>src</taglib.src.dir>
		<!-- <taglib.src.dir>src/webapp/WEB-INF</taglib.src.dir> -->
	</configuration>
</plugin>
3. Confirm sakai maven plugin <version> equals 1.2.0
Code Block
xml
xml
<plugin>
  <inherited>true</inherited>
  <groupId>org.sakaiproject.maven.plugins</groupId>
  <artifactId>sakai</artifactId>
    <version>1.2.0</version>
    . . . .
</plugin>
4. Disable snapshot repo

(tick) Insulate deployers against the possibility of snapshots leaking into release.

Code Block
xml
xml
<repositories>
. . .
     <repository>
            <id>sakai-maven2-snapshots</id>
            <name>Sakai Maven Repo</name>
            <layout>default</layout>
            <url>http://source.sakaiproject.org/maven2-snapshots</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <releases>
                <enabled>false</enabled>
            </releases>
     </repository>
. . .
<repositories>
Base pom.xml: confirm javadoc plugin definition. Beware setting max memory settings too low.
Code Block
xml
xml
<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.8</version>
                <configuration>
                    <debug>true</debug>
                    <links>
                        <link>http://download.oracle.com/javase/1.5.0/docs/api/</link>
                        <link>http://download.oracle.com/javase/6/docs/api/</link>
                    </links>
                    <breakiterator>true</breakiterator>
                    <verbose>false</verbose>
                    <aggregate>true</aggregate>
                    <minmemory>168m</minmemory>
                    <maxmemory>1024m</maxmemory>
                    <additionalJOption>-J-Xms168m -J-Xmx1024m -J-XX:PermSize=128m -J-XX:NewSize=64m</additionalJOption>
                </configuration>
            </plugin>

Check out, install, deploy and start up the release branch in Tomcat.

Perform a test build of the release branch.

Local environment set up

  1. Delete .m2/repository/org/sakaiproject (force fresh install)
  2. Create new MySQL 5.1.x database named "sakai"
  3. Start with clean Tomcat 5.5.33 servlet container
  4. Confirm maven-taglib is defined in .m2/settings.xml
Code Block
xml
xml
<!-- Reference plugins in order to use <goalPrefix> short-hand -->
<pluginGroups>
    <pluginGroup>net.sourceforge.maven-taglib</pluginGroup>
</pluginGroups>
No Format
svn co https://source.sakaiproject.org/svn/sakai/branches/sakai-2.8.1 2.8.1
cd 2.8.1
mvn clean install sakai:deploy

If build fails, debug. If build is successful, start Tomcat. Check logs for warnings and errors.

Build and deploy release binaries to Sakai Maven2 release repo.

(minus) Warn: create backup folder of /var/www/html/maven2/org/sakaiproject on source.sakaiproject.org before deploying release binaries to repo.

Get copy of maven2/org/sakaiproject repo

Tar up maven2/org/sakaiproject and sftp or scp across the network to build machine and deploy binaries locally. This step is now prohibitively expensive in terms of download time.

(warning) Consider eliminating this step and instead adjust build script to deploy non-indie projects directly to the repo via scp.

The challenge here is that you need all the Maven metadata files locally so that they can be properly updated during the release.

Run sakai-cle-artifactmaker.bash

Script generates demo, bin and src tar/zip artifacts and then deploys release binaries to "local" repo updating Maven metadata files along the way.

TODO: add URL

No Format
$ bash sakai-cle-artifactmaker.bash [release version] [Source path]

$ bash sakai-cle-artifactmaker.bash 2.8.1 /Users/arwhyte/Development/svn/sakai/branches/2.8.1

Download samigo audio jar from Maven2 release repo and verify that jar is signed.

No Format
jarsigner -verify sakai-samigo-audio-2.8.1.jar

Check demo, bin and src artifacts

Update Sakai Maven2 repo

Transfer mavenrepo-2.8.1.tgz to source.sakaiproject.org.

(warning). Ensure backup copy of source.sakaiproject.org /var/www/html/maven2/org/sakaiproject exists. Then untar updated files:

No Format
sudo tar -xvzf mavenrepo-2.8.1.tgz -C /var/www/html/

Cut release tag from 2.8.1 branch

The sakaitagbuilder.bash script accepts two arguments: Sakai version and tag suffix (e.g., blank, beta01, rc01, qa01). In this case no tag suffix is required.

No Format
bash sakaitagbuilder-2.8.bash [JIRA ISSUE] sakai-2.8.1 tags 2.8.1

After the release is generated, backup .m2/repository/org/sakaiproject, whack original (to ensure someone new can populate their repo from scratch), download the release tag and build and deploy it to a fresh Tomcat and fresh MySQL database.

Update Jira

Visit the SAK project and release sakai-2.8.1. Move all open Jiras to next (tentative) version.

Update release documentation

Ideally this work should already be completed. But in case it's not update the following pages:

1. Release page: http://source.sakaiproject.org/release/2.8.0/
2. Confluence release documentation: https://confluence.sakaiproject.org/display/DOC/Sakai+CLE+2.8+release+notes