diff options
-rw-r--r-- | hudson-builds/funcs_promotion.sh | 184 | ||||
-rwxr-xr-x | hudson-builds/promote-latest-builds.sh | 344 |
2 files changed, 314 insertions, 214 deletions
diff --git a/hudson-builds/funcs_promotion.sh b/hudson-builds/funcs_promotion.sh new file mode 100644 index 0000000..cc5eba2 --- /dev/null +++ b/hudson-builds/funcs_promotion.sh @@ -0,0 +1,184 @@ +#! /bin/bash + + +function prom_setup() { + lrootdir=$1 + shift + ldest=$1 + shift + + lthisdir=`pwd` + cd $lrootdir + + rm -rf $ldest + mkdir $ldest + mkdir $ldest/javadoc + mkdir $ldest/www + mkdir $ldest/jnlp-files + + cd $lthisdir +} + +function prom_lslatest() { + pattern=$1 + shift + ls -rt | grep $pattern | tail -1 +} + +function prom_buildnumber_2() { + folder=$1 + shift + echo $folder | awk -F '-' ' { print substr($2, 2); } ' +} + +function prom_buildnumber_3() { + folder=$1 + shift + echo $folder | awk -F '-' ' { print substr($3, 2); } ' +} + +function prom_buildnumber_4() { + folder=$1 + shift + echo $folder | awk -F '-' ' { print substr($4, 2); } ' +} + +function prom_verify_artifacts() { + name=$1 + shift + artia=$1 + shift + artib=$1 + shift + + OK=0 + diff -w $artia $artib && OK=1 + if [ $OK -eq 0 ] ; then + echo "ERROR: $name artifacts differ $artia and $artib" + fi +} + +# +# #1 module name, IE gluegen, jogl, jocl or joal +# #2 source folder of artifacts +# #3 destination folder of artifacts +# #4-n submodule name within the ZIP files +# +# Example: +# promote_files gluegen /builds/gluegen-b33 tmp-archive gluegen +# promote_files jogl /builds/jogl-b211 tmp-archive nativewindow jogl newt +# +function prom_promote_files() { + module=$1 + shift + sourcedir=$1 + shift + destdir=$1 + shift + submodules=$* + + lthisdir=`pwd` + + echo "INFO: Promoting files: $module, submodules <$submodules>, from $sourcedir" + # copy the platform zip files + cp -a $sourcedir/$module*.zip $destdir/ + cp -a $sourcedir/artifact.properties $destdir/$module.artifact.properties + cd $destdir + # unpack the platform zip files + for i in $os_and_archs ; do + zfile=`find . -name $module\*$i.zip` + if [ -z "$zfile" ] ; then + echo "ERROR: No platform ZIP file for module $module, sub $sub, platform $i, sdir $sourcedir" + exit 1 + fi + zfolder=`basename $zfile .zip` + echo "INFO: unzip $module $i - $zfile -> $zfolder" + unzip -q $zfile + prom_verify_artifacts $module $module.artifact.properties $zfolder/artifact.properties + done + # copy the platform JAR files from each platform zip folder + for i in $os_and_archs_minus_one ; do + # zip folder verfified above already + zfile=`find . -name $module\*$i.zip` + zfolder=`basename $zfile .zip` + for sub in $submodules ; do + jars=`find $zfolder -name $sub\*$i\*.jar` + if [ -z "$jars" ] ; then + echo "ERROR: No platform JAR file for module $module, sub $sub, platform $i, sdir $sourcedir" + exit 1 + fi + for j in $jars ; do + cp -av $j . + done + done + done + # copy the master pic JAR files + # zip folder verfified above already + zfile=`find . -name $module\*$masterpick.zip` + zfolder=`basename $zfile .zip` + for sub in $submodules ; do + jars=`find $zfolder -name $sub\*$masterpick\*.jar` + if [ -z "$jars" ] ; then + echo "ERROR: No platform JAR file for module $module, sub $sub, masterpick platform $masterpick, sdir $sourcedir" + exit 1 + fi + jars=`find $zfolder -name $sub\*.jar` + if [ -z "$jars" ] ; then + echo "ERROR: No JAR files for module $module, sub $sub, masterpick $masterpick, sdir $sourcedir" + exit 1 + fi + for j in $jars ; do + cp -av $j . + done + done + cp -av $zfolder/jnlp-files/* ./jnlp-files/ + + cd $lthisdir +} + +function prom_cleanup() { + destdir=$1 + shift + + lthisdir=`pwd` + cd $destdir + + for i in $os_and_archs ; do + for j in *$i.zip ; do + bname=`basename $j .zip` + if [ -d $bname ] ; then + echo "INFO: delete folder $bname" + rm -rf $bname + fi + done + done + cd $lthisdir +} + +function prom_integrity_check() { + destdir=$1 + shift + + lthisdir=`pwd` + cd $destdir + + mkdir dump + cd dump + for i in ../*.jar ; do + bname=`basename $i` + echo -n "INFO: integrity check - $bname - " + OK=0 + jar xvf $i >& $bname.log && OK=1 + if [ $OK -eq 0 ] ; then + echo ERROR + cat $bname.log + else + echo OK + fi + done + echo + cd .. + rm -rf dump + cd $lthisdir +} + diff --git a/hudson-builds/promote-latest-builds.sh b/hudson-builds/promote-latest-builds.sh index f9da1e0..4197a77 100755 --- a/hudson-builds/promote-latest-builds.sh +++ b/hudson-builds/promote-latest-builds.sh @@ -9,6 +9,11 @@ sdir=`dirname $0` +thisdir=`pwd` + +logfile=$thisdir/`basename $0 .sh`.log + +. $sdir/funcs_promotion.sh . $sdir/../deployment/funcs_jnlp_relocate.sh archivedir=/srv/www/jogamp.org/deployment/archive @@ -18,250 +23,161 @@ os_and_archs_minus_one="linux-i586 macosx-universal windows-amd64 windows-i586" masterpick="linux-amd64" os_and_archs="$masterpick linux-i586 macosx-universal windows-amd64 windows-i586" -thisdir=`pwd` -cd $rootdir - dest=tmp-archive -rm -rf $dest -mkdir $dest -mkdir $dest/javadoc -mkdir $dest/www -mkdir $dest/jnlp-files +cd $rootdir -function lslatest() { - pattern=$1 - shift - ls -rt | grep $pattern | tail -1 -} +function promote-latest-builds() { + echo + echo "Promotion of latest files" + echo `date` + echo + prom_setup $rootdir $dest -function buildnumber_2() { - folder=$1 - shift - echo $folder | awk -F '-' ' { print substr($2, 2); } ' -} + gluegenslave=`prom_lslatest gluegen-b` + bgluegenslave=`prom_buildnumber_2 $gluegenslave` + gluegenmaster=`prom_lslatest gluegen-master-b` + bgluegenmaster=`prom_buildnumber_3 $gluegenmaster` + echo + echo GLUEGEN + echo + echo slave build $bgluegenslave - $gluegenslave + echo master build $bgluegenmaster - $gluegenmaster + echo + echo "gluegen.build.number=$bgluegenslave" >> $dest/aggregated.artifact.properties -function buildnumber_3() { - folder=$1 - shift - echo $folder | awk -F '-' ' { print substr($3, 2); } ' -} + prom_promote_files gluegen $gluegenslave $dest gluegen -function buildnumber_4() { - folder=$1 - shift - echo $folder | awk -F '-' ' { print substr($4, 2); } ' -} + cp -a $gluegenmaster/artifact.properties $dest/javadoc/gluegen-master.artifact.properties + mkdir $dest/javadoc/gluegen + cp -a $gluegenmaster/javadoc.zip $dest/javadoc/gluegen + cd $dest/javadoc/gluegen + echo "INFO: gluegen master javadoc zip" + unzip -q javadoc.zip + cd $rootdir -function verify_artifacts() { - name=$1 - shift - artia=$1 - shift - artib=$1 - shift - - OK=0 - diff -w $artia $artib && OK=1 - if [ $OK -eq 0 ] ; then - echo "ERROR: $name artifacts differ $artia and $artib" - fi -} + joglslave=`prom_lslatest jogl-b` + bjoglslave=`prom_buildnumber_2 $joglslave` + joglmaster=`prom_lslatest jogl-master-b` + bjoglmaster=`prom_buildnumber_3 $joglmaster` + echo + echo JOGL + echo + echo slave build $bjoglslave - $joglslave + echo master build $bjoglmaster - $joglmaster + echo + echo "jogl.build.number=$bjoglslave" >> $dest/aggregated.artifact.properties -function promote_files() { - name=$1 - shift - sourcedir=$1 - shift + prom_promote_files jogl $joglslave $dest nativewindow jogl newt - cp -a $sourcedir/$name*.zip $dest/ - cp -a $sourcedir/artifact.properties $dest/$name.artifact.properties - cd $dest - for i in $os_and_archs ; do - fname=`find . -name $name*$i.zip` - bname=`basename $fname .zip` - echo "INFO: $name unpacking $bname" - unzip -q $fname - verify_artifacts $name $name.artifact.properties $bname/artifact.properties - done - echo "INFO: $name promoting files" - for i in $os_and_archs_minus_one ; do - dname=`find . -name $name*$i` - cp -av $dname/jar/*-natives-*.jar . + cp -a $joglmaster/artifact.properties $dest/javadoc/jogl-master.artifact.properties + mkdir $dest/javadoc/jogl + cp -a $joglmaster/javadoc*.zip $dest/javadoc/jogl + cd $dest/javadoc/jogl + for i in *.zip ; do + echo "INFO: unzip $i" + unzip -q $i done - fname=`find . -name $name*$masterpick.zip` - bname=`basename $fname .zip` - cp -av $bname/jar/*.jar . - cp -av $bname/jnlp-files/* ./jnlp-files/ cd $rootdir -} -function cleanup() { + jogldemosmaster=`prom_lslatest jogl-demos-master-b` + bjogldemosmaster=`prom_buildnumber_4 $jogldemosmaster` + echo + echo JOGL DEMOS + echo + echo master build $bjogldemosmaster - $jogldemosmaster + echo + echo "jogl-demos.build.number=$bjogldemosmaster" >> $dest/aggregated.artifact.properties + + cp -a $jogldemosmaster/jogl-demos*.zip $dest/ + cp -a $jogldemosmaster/artifact.properties $dest/jogl-demos.artifact.properties cd $dest - for i in $os_and_archs ; do - for j in *$i.zip ; do - bname=`basename $j .zip` - if [ -d $bname ] ; then - echo "INFO: delete folder $bname" - rm -rf $bname - fi - done - done + + fname=`find . -name jogl-demos*.zip` + bname=`basename $fname .zip` + echo "INFO: unzip $fname -> $bname" + unzip -q $bname.zip + prom_verify_artifacts jogl-demos jogl-demos.artifact.properties $bname/artifact.properties + cp -a $bname/jar/*.jar . + cp -a $bname/jnlp-files/* ./jnlp-files/ + cp -a $bname/www/* ./www/ + cd $rootdir -} -function integrity_check() { - cd $dest - mkdir dump - cd dump - for i in ../*.jar ; do - bname=`basename $i` - echo -n "INFO: integrity check - $bname - " - OK=0 - jar xvf $i >& $bname.log && OK=1 - if [ $OK -eq 0 ] ; then - echo ERROR - cat $bname.log - else - echo OK - fi - done + ######################################################### + ####### FIXME : JOCL, adapt to the new archive structure + ######################################################### + + joclslave=`prom_lslatest jocl-b` + bjoclslave=`prom_buildnumber_2 $joclslave` + joclmaster=`prom_lslatest jocl-master-b` + bjoclmaster=`prom_buildnumber_3 $joclmaster` echo - cd .. - rm -rf dump - cd $rootdir -} + echo JOCL + echo + echo slave build $bjoclslave - $joclslave + echo master build $bjoclmaster - $joclmaster + echo + echo "jocl.build.number=$bjoclslave" >> $dest/aggregated.artifact.properties -gluegenslave=`lslatest gluegen-b` -bgluegenslave=`buildnumber_2 $gluegenslave` -gluegenmaster=`lslatest gluegen-master-b` -bgluegenmaster=`buildnumber_3 $gluegenmaster` -echo -echo GLUEGEN -echo -echo slave build $bgluegenslave - $gluegenslave -echo master build $bgluegenmaster - $gluegenmaster -echo -echo "gluegen.build.number=$bgluegenslave" >> $dest/aggregated.artifact.properties - -promote_files gluegen $gluegenslave - -cp -a $gluegenmaster/artifact.properties $dest/javadoc/gluegen-master.artifact.properties -mkdir $dest/javadoc/gluegen -cp -a $gluegenmaster/javadoc.zip $dest/javadoc/gluegen -cd $dest/javadoc/gluegen -unzip -q javadoc.zip -cd $rootdir + # + #prom_promote_files jocl $joglslave $dest jocl + # -joglslave=`lslatest jogl-b` -bjoglslave=`buildnumber_2 $joglslave` -joglmaster=`lslatest jogl-master-b` -bjoglmaster=`buildnumber_3 $joglmaster` -echo -echo JOGL -echo -echo slave build $bjoglslave - $joglslave -echo master build $bjoglmaster - $joglmaster -echo -echo "jogl.build.number=$bjoglslave" >> $dest/aggregated.artifact.properties - -promote_files jogl $joglslave - -cp -a $joglmaster/artifact.properties $dest/javadoc/jogl-master.artifact.properties -mkdir $dest/javadoc/jogl -cp -a $joglmaster/javadoc*.zip $dest/javadoc/jogl -cd $dest/javadoc/jogl -for i in *.zip ; do - unzip -q $i -done -cd $rootdir + cp -a $joclslave/jocl*jar $dest/ + cp -a $joclslave/artifact.properties $dest/jocl.artifact.properties -jogldemosmaster=`lslatest jogl-demos-master-b` -bjogldemosmaster=`buildnumber_4 $jogldemosmaster` -echo -echo JOGL DEMOS -echo -echo master build $bjogldemosmaster - $jogldemosmaster -echo -echo "jogl-demos.build.number=$bjogldemosmaster" >> $dest/aggregated.artifact.properties - -cp -a $jogldemosmaster/jogl-demos*.zip $dest/ -cp -a $jogldemosmaster/artifact.properties $dest/jogl-demos.artifact.properties -cd $dest - -fname=`find . -name jogl-demos*.zip` -bname=`basename $fname .zip` -unzip -q $bname.zip -verify_artifacts jogl-demos jogl-demos.artifact.properties $bname/artifact.properties -cp -a $bname/jar/*.jar . -cp -a $bname/jnlp-files/* ./jnlp-files/ -cp -a $bname/www/* ./www/ + cp -a $joclmaster/artifact.properties $dest/javadoc/jocl-master.artifact.properties + mkdir $dest/javadoc/jocl + cp -a $joclmaster/jocl-javadoc.zip $dest/javadoc/jocl/ + cd $dest/javadoc/jocl + echo "INFO: unzip jocl-javadoc zip" + unzip -q jocl-javadoc.zip + cd $rootdir -cd $rootdir + jocldemosslave=`prom_lslatest jocl-demos-b` + bjocldemosslave=`prom_buildnumber_3 $jocldemosslave` + echo + echo JOCL DEMOS + echo + echo slave build $bjocldemosslave - $jocldemosslave + echo + echo "jocl-demos.build.number=$bjocldemosslave" >> $dest/aggregated.artifact.properties -######################################################### -####### FIXME : JOCL, adapt to the new archive structure -######################################################### - -joclslave=`lslatest jocl-b` -bjoclslave=`buildnumber_2 $joclslave` -joclmaster=`lslatest jocl-master-b` -bjoclmaster=`buildnumber_3 $joclmaster` -echo -echo JOCL -echo -echo slave build $bjoclslave - $joclslave -echo master build $bjoclmaster - $joclmaster -echo -echo "jocl.build.number=$bjoclslave" >> $dest/aggregated.artifact.properties - -cp -a $joclslave/jocl*jar $dest/ -cp -a $joclslave/artifact.properties $dest/jocl.artifact.properties - -cp -a $joclmaster/artifact.properties $dest/javadoc/jocl-master.artifact.properties -mkdir $dest/javadoc/jocl -cp -a $joclmaster/jocl-javadoc.zip $dest/javadoc/jocl/ -cd $dest/javadoc/jocl -unzip -q jocl-javadoc.zip -cd $rootdir + cp -a $jocldemosslave/jocl-demos*jar $dest/ + cp -a $jocldemosslave/artifact.properties $dest/jocl-demos.artifact.properties -jocldemosslave=`lslatest jocl-demos-b` -bjocldemosslave=`buildnumber_3 $jocldemosslave` -echo -echo JOCL DEMOS -echo -echo slave build $bjocldemosslave - $jocldemosslave -echo -echo "jocl-demos.build.number=$bjocldemosslave" >> $dest/aggregated.artifact.properties + prom_integrity_check $dest -cp -a $jocldemosslave/jocl-demos*jar $dest/ -cp -a $jocldemosslave/artifact.properties $dest/jocl-demos.artifact.properties + prom_cleanup $dest -integrity_check + uri=gluegen_$bgluegenslave-jogl_$bjoglslave-jocl_$bjoclslave + url=http://jogamp.org/deployment/archive/gluegen_$bgluegenslave-jogl_$bjoglslave-jocl_$bjoclslave + wsdir=$archivedir/gluegen_$bgluegenslave-jogl_$bjoglslave-jocl_$bjoclslave -cleanup + rm -rf $wsdir + mv $dest $wsdir -uri=gluegen_$bgluegenslave-jogl_$bjoglslave-jocl_$bjoclslave -url=http://jogamp.org/deployment/archive/gluegen_$bgluegenslave-jogl_$bjoglslave-jocl_$bjoclslave -wsdir=$archivedir/gluegen_$bgluegenslave-jogl_$bjoglslave-jocl_$bjoclslave + cd $wsdir -rm -rf $wsdir -mv $dest $wsdir + echo + echo aggregation.properties + echo + cat jocl-demos.artifact.properties jogl-demos.artifact.properties | sort -u > jocl-demos-jogl-demos.artifact.properties.sorted + sort -u aggregated.artifact.properties > aggregated.artifact.properties.sorted + diff -Nurbw aggregated.artifact.properties.sorted jocl-demos-jogl-demos.artifact.properties.sorted + + copy_relocate_jnlps $url $wsdir -echo -echo Aggregation folder $wsdir for URL $url -echo + remove_security_tag_jnlps $wsdir -cd $wsdir + echo + echo Aggregation folder $wsdir for URL $url + echo -echo -echo aggregation.properties -echo -cat jocl-demos.artifact.properties jogl-demos.artifact.properties | sort -u > jocl-demos-jogl-demos.artifact.properties.sorted -sort -u aggregated.artifact.properties > aggregated.artifact.properties.sorted -diff -Nurbw aggregated.artifact.properties.sorted jocl-demos-jogl-demos.artifact.properties.sorted + cp -av $logfile $wsdir +} -copy_relocate_jnlps $url $wsdir +promote-latest-builds 2>&1 | tee $logfile -remove_security_tag_jnlps $wsdir |