...
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
...
...
...
.
...
...
...
-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
{noformat}
h3. Update |
Update pom.xml
...
<version>,
...
master
...
pom.xml
...
<properties>,
...
sakai.properties
...
1.
...
Update
...
<version>
...
; find/replace
...
2.*-SNAPSHOT
...
with
...
release
...
version
...
Code Block | ||||
---|---|---|---|---|
| ||||
<version>2.8-SNAPSHOT</version> -> <version>2.8.1</version>
{code}
h5. |
2.
...
Update
...
<sakai.version>
...
(master
...
pom.xml)
...
Code Block | ||||
---|---|---|---|---|
| ||||
<sakai.version>2.8.1</sakai.version>
{code}
h5. |
3.
...
Update
...
Indie
...
version
...
<properties>
...
(master
...
pom.xml)
...
Code Block | ||||
---|---|---|---|---|
| ||||
<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>
{code}
h5. |
4.
...
Review
...
other
...
properties
...
such
...
as
...
Tomcat
...
or
...
Quartz
...
versions
...
and
...
update
...
as
...
necessary.
...
Code Block | ||||||
---|---|---|---|---|---|---|
| }
| |||||
<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>
{code}
h5. |
5.
...
Update
...
sakai.properties
...
...
default.sakai.properties
...
No Format |
---|
version.service=RELEASE
version.sakai=2.8.1
{noformat}
h6. {{ |
...
demo.sakai.properties
...
No Format |
---|
version.service=DEMO
version.sakai=2.8.1
{noformat}
h6. {{ |
...
sample.sakai.properties
...
No Format |
---|
version.service=SAMPLE
version.sakai=2.8.1
{noformat}
h5. |
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
{noformat}
h6. {{ |
...
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
{noformat}
(-) Review {{reference |
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
{noformat}
h6. Confirm /master/pom.xml Sakai Maven plugin <version> from 1.2.0
{code:xml}
<plugin>
<inherited>true</inherited>
<groupId>org.sakaiproject.maven.plugins</groupId>
<artifactId>sakai</artifactId>
<version>1.2.0</version>
. . . .
</plugin>
{code}
h3. Check out, install, deploy and start up the release branch in Tomcat.
Perform a test build of the release branch.
Local environment set up
# Delete .m2/repository/org/sakaiproject (force fresh install)
# Create new MySQL 5.1.x database named "sakai"
# Start with clean Tomcat 5.5.33 servlet container
# Confirm maven-taglib is defined in .m2/settings.xml
{no format}
svn co https |
Double check /reference/docs/conversion
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 | ||||
---|---|---|---|---|
| ||||
<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>
|
Consider deploying directly to Maven2 release repo. See rationale below.
Code Block | ||||
---|---|---|---|---|
| ||||
<distributionManagement> <downloadUrl>http://source.sakaiproject.org/svnmaven2/sakai/branches/sakai-2.8.1 2.8.1 cd 2.8.1 mvn clean install sakai:deploy {no format} If build fails, debug. If build is successful, start Tomcat. Check logs for warnings and errors. h3. Build and Deploy Release binaries to Sakai Maven2 release repo. h5. Get copy of Maven2 repo -Mount Sakai Maven2 Repo using DAV (https:/</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 -> /Volumes/maven2).snapshots</url> WARNING: create backup folder of maven2 so that only one copy operation<layout>default</layout> is required in event of a generation failure.- </snapshotRepository> This takes far too long to accomplish. Just<repository> tar up {{maven2/org/sakaiproject}} and sftp or scp across the network. The challenge<uniqueVersion>false</uniqueVersion> here is that you need all the Maven metadata files locally so that they can be properly updated during the release. Start thinking about using rsync. <id>sakai-maven2-scp</id> <name>Sakai maven2 repository</name> h5. Local build machine environment # Check out 2.8.1 branch # clean Tomcat 5.5.33 # empty .m2/repository/org/sakaiproject # new MySQL 5.1.x sakai db # Confirm maven-taglib is defined in .m2/settings.xml {noformat} <!-- Reference plugins in order to use <goalPrefix> short-hand --> <pluginGroups> <pluginGroup>net.sourceforge.maven-taglib</pluginGroup> </pluginGroups> {noformat} h5. /master/pom.xml (-) Confirm {{<distributionManagement>}}, {{maven-taglib-plugin}}, wagon-webdav {{<build>}} extensions are in place. Commit changes if necessary. 1. {{<distributionManagement>}} {code: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> {code} 2. {{maven-taglib-plugin}} {code: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> {code} 3. wagon-webdav {{<build>}} extension {code:xml} <!-- Required for Dav --> <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-webdav</artifactId><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 | ||||
---|---|---|---|---|
| ||||
<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 | ||||
---|---|---|---|---|
| ||||
<plugin>
<inherited>true</inherited>
<groupId>org.sakaiproject.maven.plugins</groupId>
<artifactId>sakai</artifactId>
<version>1.2.0</version>
. . . .
</plugin>
|
...
4. Disable snapshot repo
...
Insulate deployers against the possibility of snapshots leaking into release.
Code Block | ||||
---|---|---|---|---|
| ||||
<repositories> . . . <repository> <id>sakai-maven2-snapshots</id> <name>Sakai Maven Repo</name> <layout>default</layout> <url>http://source.sakaiproject.org/maven2-snapshots</url> <version>1.0-beta-2</version> <snapshots> </extension> </extensions> {code} h5. (-) /reference/conversion Review sql conversion scripts, update and commit as<enabled>false</enabled> necessary. h5. base pom.xml 1. Confirm javadoc plugin definition. Should</snapshots> be configured as follows: {code:xml} <plugin> <releases> <!-- javadocs --> <enabled>false</enabled> <groupId>org.apache.maven.plugins</groupId></releases> </repository> . . . <artifactId>maven-javadoc-plugin</artifactId><repositories> |
Base pom.xml: confirm javadoc plugin definition. Beware setting max memory settings too low.
Code Block | ||||
---|---|---|---|---|
| ||||
<plugin> <version>2<groupId>org.apache.6maven.1<plugins</version>groupId> <configuration><artifactId>maven-javadoc-plugin</artifactId> <version>2.8</version> <debug>true</debug> <configuration> <links> <debug>true</debug> <link>http://java.sun.com/j2se <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>512m</maxmemory> <maxmemory>1024m</maxmemory> <additionalJOption>-J-Xms168m -J-Xmx512mXmx1024m -J-XX:PermSize=128m -J-XX:NewSize=64m</additionalJOption> </configuration> </plugin> {code} 2. Confirm that taglib profile is included. {code:xml} <profile> <id>taglib</id> <modules> <module>gradebook/app/ui</module> <module>help/help-tool</module> <!-- <module>jsf/jsf-widgets</module> --> <module>metaobj/metaobj-util/tool-lib</module> <!-- <module>msgcntr/messageforums-app</module> --> <module>osp/common/tool-lib</module> <module>osp/glossary/tool-lib</module> <module>osp/jsf/widgets</module> <module>osp/presentation/tool-lib</module> <module>podcasts/podcasts-app</module> <module>postem/postem-app</module> <!-- <module>profile/profile-app</module> --> <module>roster/roster-app</module> <module>rwiki/rwiki-tool/tool</module> <!-- <module>sam/samigo-app</module> --> <module>sections/sections-app</module> <module>sections/sections-app-util</module> <module>syllabus/syllabus-app</module> </modules> </profile> {code} h5. Run sakaiartifactgenerator.bash {noformat} sh sakaiartifactgenerator.sh 2.8.1 /Users/arwhyte/Development/svn/sakai/branches/sakai-2.8.1 {noformat} h5. Download and check samigo audio jar for signature {noformat} jarsigner -verify sakai-samigo-audio-2.8.1.jar {noformat} h5. Check artifacts 1. Build and deploy the sakai-src archives. *WARNING* do not issue clean and install goals or local repo will get wiped prematurely (Sakai maven2 repo has yet to be updated). {noformat} cd master mvn install cd .. mvn -o -Dmaven.test.skip=true sakai:deploy {noformat} 2. Test the sakai-bin archives Check that the ant task built the archives correctly. Fix if necessary as follows: {noformat} tar -czvf sakai-bin-2.8.1.tgz ECLv2.text common components licenses server shared webapps {noformat} 3. Run the demo artifact. h3. Update Sakai Maven2 repo 1. Make backup copy of current maven2/org/sakaiproject folder where x.x.x equals the previous Sakai release number. Then untar updated files: {noformat}</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
- Delete .m2/repository/org/sakaiproject (force fresh install)
- Create new MySQL 5.1.x database named "sakai"
- Start with clean Tomcat 5.5.33 servlet container
- Confirm maven-taglib is defined in .m2/settings.xml
Code Block | ||||
---|---|---|---|---|
| ||||
<!-- 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.
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.
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
.
. 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/
{noformat}
h3. Cut release tag from |
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