Difference between revisions of "Continuous Integration/proposal"

From CDOT Wiki
Jump to: navigation, search
(Created page with '<source lang="bash"> #!/bin/bash # script for automating synchronization of # Internal Repoand External Repo of NexJ # CDOT - 22/Oct/2010 #changed to /usr/bin/rm for using…')
 
(Replaced content with ' == Automating The Synchronization of NexJ Server Express External Repository (Oct 6, 2010)== ===Part 1 – Checking for new Change Sets on the Internal Repository=== At…')
Line 1: Line 1:
<source lang="bash">
 
  
#!/bin/bash
 
  
 +
==
  
# script for automating synchronization of  
+
Automating The Synchronization of NexJ Server Express External Repository
# Internal Repoand External Repo of NexJ
 
# CDOT - 22/Oct/2010
 
  
 +
(Oct 6, 2010)==
  
#changed to /usr/bin/rm for using in cmd
+
===Part 1 – Checking for new Change Sets on the Internal Repository===
PATH=/usr/bin:$PATH
 
  
 
+
At a scheduled time, a process will run that will compare the current Revision ID of the External Repository to that in the Internal Repository. If there is a new revision/s in the Internal Repository, then these changes will be pulled to the Controller.
nexj_home="D:/cygwin/data/hudson/nexj_express"
 
patch="${nexj_home}/patches"
 
src="${nexj_home}/src"
 
doc="${nexj_home}/doc"
 
ANT="${nexj_home}/java/apache-ant-1.7.1/bin/ant"
 
tmpInternal="${nexj_home}/tmpInternal"
 
tmpExternal="${nexj_home}/tmpExternal/core"
 
hgExt="D:/cygwin/home/NexJExpress/External"
 
hgExtURL="https://ossbuild:go_express@cvs-ext.nexj.com/oss/core"
 
hgIntDir="${nexj_home}/hg.nexj.com/core"
 
hgIntURL="D:/cygwin/home/NexJExpress/Internal"
 
 
 
 
 
# add this info to the name of report file
 
reportDate=`date +%Y-%m-%0e-TIME-%H-%M`;
 
# add this info to the name of build and test log files
 
buildDate=`date +%Y-%m-%0e`;
 
# flag to check if there was any error for results in Hudson
 
error=0
 
 
 
 
 
# go to the working directory and clean up everything
 
cd ${nexj_home} 2> /dev/null
 
if [ $? != 0 ]; then
 
    echo "No such directory ${nexj_home}"
 
    exit 1
 
fi
 
 
 
 
 
#Remove temporary repositories
 
if [ -d tmpExternal ]; then
 
rm -r tmpExternal
 
echo "tmpExternal removed"
 
fi
 
 
 
 
 
##########################
 
## Working with Internal
 
##########################
 
cd $hgIntDir 2> /dev/null
 
if [ $? != 0 ]; then
 
mkdir $hgIntDir
 
hg clone -b default $hgIntURL $hgIntDir
 
cd $hgIntDir
 
fi
 
 
 
 
 
# Get latest code from internal
 
hg pull -u -b default 2> /dev/null
 
if [ $? != 0 ]; then
 
    echo "hg pull failed for hgIntURL ${hgIntURL}"
 
    exit 1
 
fi
 
 
 
 
 
# Get latest internal revision number
 
revInternal=`hg log -r tip -b default --template '{node}'`
 
echo "Internal Rev $revInternal"
 
if [[ $revInternal =~ "+" ]]; then
 
echo "========================================="
 
echo "ERROR! Revision $revInternal is not commited yet"
 
echo "========================================="
 
exit 1
 
fi
 
 
 
 
 
##########################
 
## Working with External
 
##########################
 
# Get the latest code from external repo
 
mkdir -p ${tmpExternal} 2> /dev/null
 
if [ $? != 0 ]; then
 
    echo "could not create ${tmpExternal}"
 
    exit 1
 
fi
 
 
 
 
 
hg clone ${hgExt} ${tmpExternal}    # later will be hg clone ${hgExtURL} ${tmpExternal}
 
if [ $? != 0 ]; then
 
echo "Clone was not successful"
 
exit 1
 
fi
 
 
 
 
 
# extract the revision number of latest changeset commited to the External Repo
 
cd ${tmpExternal} 
 
revExternal=`hg log -r tip | grep rev `
 
if [ $? != 0 ]; then
 
    echo "There is no repository availble at ${hgExt}"
 
    exit 1
 
fi
 
 
 
 
 
# extract the Internal revision number from summary
 
revExternal=${revExternal#*revInternal:}
 
echo "External Rev $revExternal"
 
 
 
 
 
# report file name is created based on date
 
report="Report-(${reportDate})"
 
 
 
 
 
echo -e "\n" >> $doc/$report.txt
 
if [ $? != 0 ]; then
 
    echo "2: No such file $doc/${report}.txt"
 
    exit 1
 
fi
 
 
 
 
 
echo "REPORT FOR $reportDate" >> $doc/$report.txt
 
echo "========================================" >> $doc/$report.txt
 
 
 
 
 
# if there is no  new change set, end the script
 
if [ ${revInternal} == ${revExternal} ]; then
 
    echo "There are no new changesets." >> $doc/$report.txt
 
echo "========================================" >> $doc/$report.txt
 
cat $doc/$report.txt
 
    exit 0
 
fi
 
 
 
 
 
cd ${nexj_home}
 
# get the list of the latest changesets since last time committing to the external repo
 
revList=`hg log ${hgIntDir} -r ${revExternal}: --template '{node}\n'`
 
if [ $? != 0 ]; then
 
echo "No repository available at ${hgIntDir}"
 
exit 1
 
fi
 
for rev in $revList; do
 
if [ ${rev} != ${revExternal} ]; then
 
echo "Revision of hgIntDir is $rev"
 
 
 
 
 
cd ${hgIntDir}
 
exPatch=$patch/patch${rev}.patch
 
# if there is any patch with $rev number, remove it
 
if [ -e ${exPatch} ]; then
 
rm ${exPatch}
 
fi
 
 
 
 
 
hg export -r ${rev} > ${exPatch}
 
if [ $? != 0 ]; then
 
echo "export was not successful"
 
exit 1
 
fi
 
 
# extract hgIntDir's tip summary and add rev number
 
# to the commit summary for tmpExternal Repo
 
sumHgIntDir=`hg log -r $rev --template '{desc}\n'`
 
if [ $? != 0 ]; then
 
echo "No repository available"
 
exit 1
 
fi
 
sumTmpExternal="${sumHgIntDir}-revInternal:${rev}"
 
 
cd $tmpExternal
 
if [ $? != 0 ]; then
 
echo "2: No such directory $tmpExternal"
 
exit 1
 
fi
 
 
# applying the patch to tmpExternal Repo
 
hg import -m "$sumTmpExternal" ${exPatch}
 
if [ $? != 0 ]; then
 
echo "import of ${exPatch} was not successful"
 
exit 1
 
fi
 
 
cp "${src}/build.properties" "${tmpExternal}/work/core/build/build.properties" 2> /dev/null
 
if [ $? != 0 ]; then
 
echo "2: No such file or directory"
 
exit 1
 
fi
 
######################
 
#Build the imported changeset
 
######################
 
cd ${tmpExternal}/work/core/build
 
if [ $? != 0 ]; then
 
echo "2: No such directory ${tmpExternal}/work/core/build"
 
exit 1cd ../
 
fi
 
# build log's name is created besed on the rev number and date
 
dateLog="Rev${rev}(${buildDate})"
 
$ANT -logfile $doc/build$dateLog.txt app.ear
 
 
 
 
 
#Check if the build was successful, push it to the hgExtURL
 
grep -w "BUILD SUCCESSFUL" $doc/build$dateLog.txt 2>/dev/null
 
if [ $? -eq 0 ]; then
 
echo "BUILD & TEST SUCCESSFUL - Revision $rev" >> $doc/$report.txt
 
# if build, test and applying the patch was successful then push it
 
echo "PATCH APPLIED SUCCESSFULY - Revision $rev" >> $doc/$report.txt
 
hg push
 
error=0
 
else
 
# if build was not successful apply the created patch as a Broken changeset to the tmpExternal
 
echo "BUILD FAILED - Revision $rev" >> $doc/$report.txt
 
error=1
 
fi
 
fi
 
done
 
 
 
 
 
# Display the report
 
echo "========================================" >> $doc/$report.txt
 
echo -e "\n" >> $doc/$report.txt
 
cat $doc/$report.txt
 
 
 
 
 
exit $error
 
</source>
 

Revision as of 18:58, 8 April 2011


==

Automating The Synchronization of NexJ Server Express External Repository

(Oct 6, 2010)==

Part 1 – Checking for new Change Sets on the Internal Repository

At a scheduled time, a process will run that will compare the current Revision ID of the External Repository to that in the Internal Repository. If there is a new revision/s in the Internal Repository, then these changes will be pulled to the Controller.