-
Notifications
You must be signed in to change notification settings - Fork 5.9k
/
releasebuild.sh
197 lines (148 loc) · 7.09 KB
/
releasebuild.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#! /bin/sh
# This script must be run from the project root directory
#
# Release Process.
#
# 1. Do clean check out of source from svn and note revision number.
# 2. Switch to JDK 1.4 and run "mvn compile" in core.
# 3. Set the version number in the pom.xml files of all the modules.
# 3a. If doing a release rather than snapshot build, run "find . -name pom.xml | xargs grep SNAPSHOT" and make sure
# there are no important snapshot dependencies.
# 3b. Set the same version number in this script.
# 4. Set the correct spring version number in the pom.xml.
# 4a. Make sure there are no snapshot dependencies in the release.
# 4b. Remove any references to external maven repositories in the parent pom.xml (remove <repositories> element).
# 4c. Check that all dependencies are downloadable from maven central repo.
# 5. Run this script to generate the artifacts and web site in the 'release' directory.
# 6. Copy the archives and unpack them to check the contents.
# 7. The archives are tar archives. Create zip versions from the contents and check the internal paths are Ok.
# 8. Check the site looks Ok.
# 9. Check the reference guide links in the site are valid and that images are shown and paths in HTML are relative.
# 10. Deploy the contacts and tutorial sample apps in Jetty and Tomcat and check they work.
# 11. Check there have been no further commits since checkout (svn update). If there have, go to 1.
# 12. Commit the source with the changed version numbers and note the revision number (should be 'build revision' + 1).
# 13. Label/tag the source tree with the release version number.
# 14. Update the pom file versions to the appropriate snapshot version, do a grep to make sure none have been missed
# and commit them.
# 15. Upload the site to acegisecurity.org (or wherever).
# 16. scp the release archives to shell.sf.net. Check md5 matches to make sure transfer was OK.
# 17. ftp them to the sourceforge upload server, uploads.sourceforge.net.
# 18. Put the jars, poms and signature files into the acegi repository for synchronization.
#
# (alternatively, the maven release plugin takes care of a lot of this stuff).
########################################################################################################################
#
# Edit this release number before running. It is used to check jar names etc.
#
########################################################################################################################
RELEASE_VERSION=2.0-SNAPSHOT
# Project Name. Used for creating the archives.
PROJECT_NAME=spring-security
PROJ_DIR=`pwd`;
RELEASE_DIR=$PROJ_DIR/$PROJECT_NAME-$RELEASE_VERSION
SITE_DIR=$RELEASE_DIR/docs
echo "** Project directory is $PROJ_DIR"
SVN_REV=`svn info $PROJ_DIR | grep Revision | sed "s/Revision: //"`
echo "** Building from revision $SVN_REV"
########################################################################################################################
#
# Create the release directory
#
########################################################################################################################
if [[ -e $RELEASE_DIR ]]
then
echo "Deleting $RELEASE_DIR."
rm -Rf $RELEASE_DIR
fi
mkdir $RELEASE_DIR
mkdir $SITE_DIR
########################################################################################################################
#
# run maven to generate jars
#
########################################################################################################################
mvn clean install -DcreateChecksum=true
if [ "$?" -ne 0 ]
then
echo "mvn install failed"
exit 1;
fi
########################################################################################################################
#
# Check the sandbox builds with the current configuration
#
########################################################################################################################
pushd sandbox
mvn clean test
if [ "$?" -ne 0 ]
then
echo "Failed to build sandbox with current configuration."
exit 1;
fi
popd
########################################################################################################################
#
# Generate Maven Web Site and Process Docbook Source.
#
########################################################################################################################
echo "** Generating site in $SITE_DIR".
mvn site site:deploy -DsiteDirectory=file://${SITE_DIR}
if [ "$?" -ne 0 ]
then
echo "mvn site generation failed"
exit 1;
fi
########################################################################################################################
#
# Patch the module site files to point to the root css files, change names of oversized menus,
# remove dodgy standard maven text etc.
#
########################################################################################################################
pushd $SITE_DIR
find . -maxdepth 2 -mindepth 2 -name "*.html" | xargs perl -i -p -e 's#"\./css/#"\.\./css/#;' \
-e 's/Maven Surefire Report/Unit Tests/;' \
-e 's/Cobertura Test Coverage/Test Coverage/;' \
-e 's/A successful project.*greatly appreciated\.//;'
find . -maxdepth 3 -mindepth 3 -name "*.html" | xargs perl -i -p -e 's#"\./css/#"\.\./\.\./css/#;'
popd
########################################################################################################################
#
# Assemble the required jar files, make sure there are the expected number and produce signatures.
#
########################################################################################################################
find . -name "*${RELEASE_VERSION}.jar" | grep -v WEB-INF | xargs -I % -n 1 cp % $RELEASE_DIR
find . -name "*${RELEASE_VERSION}.war" | xargs -I % -n 1 cp % $RELEASE_DIR
# Should be 10 archives - core, core-tiger, the adapters (cas, jboss, resin, jetty, catalina), ntlm, tutorial and contacts wars.
pushd $RELEASE_DIR
NUM_JARS=`ls *.jar *.war | wc -l`
if [ "$NUM_JARS" -ne 9 ]
then
echo "Expected 9 Jar files but found $NUM_JARS:"
ls *.jar *.war
exit 1
fi
# Create the signatures
for jar in $(ls *.jar *.war); do
openssl sha1 < $jar > $jar.sha1
openssl md5 < $jar > $jar.md5
done
popd
########################################################################################################################
#
# Build the release archives.
#
########################################################################################################################
# Get rid of mac DS_Store files.
find . -name .DS_Store -exec rm "{}" ";"
cp notice.txt readme.txt license.txt $RELEASE_DIR
# Create main archive
ls $RELEASE_DIR | grep -v sha | grep -v md5 | xargs tar -cjf $PROJECT_NAME-$RELEASE_VERSION.tar.bz2 -C $RELEASE_DIR
# Create source archive
tar --exclude='*/.svn' -cjf $PROJECT_NAME-$RELEASE_VERSION-src.tar.bz2 notice.txt src-readme.txt license.txt \
-C core/src/main/java/ org \
-C ${PROJ_DIR}/core-tiger/main/java org \
-C ${PROJ_DIR}/adapters/jetty/main/java org \
-C ${PROJ_DIR}/adapters/jboss/main/java org \
-C ${PROJ_DIR}/adapters/resin/main/java org \
-C ${PROJ_DIR}/adapters/cas/main/java org \
-C ${PROJ_DIR}/adapters/catalina/main/java org