blob: 4e0fd4cb3fcbc1739be9971511fa3371261522d8 [file] [log] [blame]
#!/bin/bash
set -e
# A space delimited list of feature IDs
features_whose_bundles_we_will_deploy="org.eclipse.ecf.remoteservice.sdk.feature
org.eclipse.ecf.core.feature
org.eclipse.ecf.core.ssl.feature
org.eclipse.ecf.filetransfer.feature
org.eclipse.ecf.filetransfer.ssl.feature
org.eclipse.ecf.filetransfer.httpclient45.feature
org.eclipse.ecf.filetransfer.httpclient5.feature
org.eclipse.ecf.remoteservice.examples.feature"
# Exclude orbit bundles, they should be done separately
orbit_bundles="javax.servlet
com.sun.jna
com.sun.jna.platform
org.apache.commons.codec
org.apache.commons.logging
org.apache.hadoop.zookeeper
org.apache.httpcomponents.httpclient
org.apache.httpcomponents.httpclient.win
org.apache.httpcomponents.httpcore
org.apache.httpcomponents.client5.httpclient5
org.apache.httpcomponents.client5.httpclient5-win
org.apache.log4j
org.json
org.objectweb.asm"
wget 'https://downloads.sourceforge.net/project/xmltask/xmltask/1.16.1/xmltask.jar?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fxmltask%2Ffiles%2Fxmltask%2F1.16.1%2Fxmltask.jar' -O xmltask.jar
cat << EOF > xpath.xml
<project xmlns:if="ant:if" xmlns:unless="ant:unless" name="xpath" default="xpath">
<target name="init">
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask" classpath="xmltask.jar"/>
</target>
<target name="xpath" depends="init">
<xmltask source="\${xml.file}">
<copy path="\${xml.path}" property="results" append="true"/>
</xmltask>
<echo if:set="results" message="\${results}" file="results" append="false"/>
<echo unless:set="results" message="" file="results" append="false"/>
</target>
</project>
EOF
deploy () {
local target=$1
mkdir -p $target
sed -e 's/-SNAPSHOT//' $(dirname $target)/pom.xml > $target/pom.xml
local pom=$target/pom.xml
local file="$(ls $target/*-SNAPSHOT.jar 2>/dev/null)"
local sources="${file%.jar}-sources.jar"
local javadoc="${file%.jar}-javadoc.jar"
# Create dummy javadoc jar
if [ -f "$file" -a ! -f "$javadoc" ] ; then
echo "Javadoc for ECF is distributed separately, please see: http://download.eclipse.org/rt/ecf/latest/javadoc/" > $target/README.txt
(cd $target && jar -cf $(basename $javadoc) README.txt)
fi
# Build properties list
local props="-DpomFile=$pom"
if [ -n "$file" ] ; then
props="$props -Dfile=$file"
else
props="$props -Dfile=$pom"
fi
if [ -f "$sources" ] ; then
props="$props -Dsources=$sources"
fi
if [ -f "$javadoc" ] ; then
props="$props -Djavadoc=$javadoc"
fi
#local settings=/opt/public/hipp/homes/genie.ecf/.m2/settings-deploy-ossrh.xml
#local settings=~/.m2/settings.xml
echo "mvn gpg:sign-and-deploy-file -DrepositoryId=ossrh " \
"-Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/" \
"$props -Dtycho.mode=maven"
mvn gpg:sign-and-deploy-file -DrepositoryId=ossrh \
-Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ \
$props -Dtycho.mode=maven
}
bundles=""
_add_bundle_to_list() {
local plugin=$1
local match=0
for b in $bundles; do
if [ "$b" = "$plugin" ] ; then
match=1
fi
done
if [ "$match" != "1" ] ; then
echo " $plugin"
local orbit_match=0
for o_b in $orbit_bundles ; do
if [ "$o_b" = "$plugin" ] ; then
orbit_match=1
break
fi
done
if [ "$orbit_match" != "1" ] ; then
bundles="$bundles $plugin"
fi
fi
return $match
}
features=""
_add_feature_to_list() {
local feature=$1
local match=0
for f in $features ; do
if [ "$f" = "$feature" ] ; then
match=1
fi
done
if [ "$match" != "1" ] ; then
echo " $feature"
features="$features $feature"
fi
return $match
}
xpath_call() {
local xmlfile=$1
local xmlquery=$2
ant -f xpath.xml -Dxml.file=$xmlfile -Dxml.path="$xmlquery" >/dev/null
cat results
rm -f results
}
parse_feature() {
local xml=$(find -path "*/$1/feature.xml")
# Process included plugins
local i=0
while true ; do
i=$(( $i + 1 ))
local plugin=$(xpath_call $xml "string(//plugin[$i]/@id)")
if [ -z "$plugin" ] ; then
break
else
_add_bundle_to_list $plugin || :
fi
done
# Process plugins specified as "requires"
local i=0
while true ; do
i=$(( $i + 1 ))
local entry=$(xpath_call $xml "//requires/import[$i]")
if [ -z "$entry" ] ; then
break
fi
local plugin=$(xpath_call $xml "string(//requires/import[$i]/@plugin)")
if [ -n "$plugin" ] ; then
_add_bundle_to_list $plugin || :
fi
done
# Process included features
local i=0
while true ; do
i=$(( $i + 1 ))
local subfeature=$(xpath_call $xml "string(//includes[$i]/@id)")
if [ -z "$subfeature" ] ; then
break
else
_add_feature_to_list $subfeature && parse_feature $subfeature
fi
done
# Process features specified as "requires"
local i=0
while true ; do
i=$(( $i + 1 ))
local entry=$(xpath_call $xml "//requires/import[$i]")
if [ -z "$entry" ] ; then
break
fi
local subfeature=$(xpath_call $xml "string(//requires/import[$i]/@feature)")
if [ -n "$subfeature" ] ; then
_add_feature_to_list $subfeature && parse_feature $subfeature
fi
done
}
bundles_deploy=""
check_maven_central() {
local central_metadata="$(curl https://repo1.maven.org/maven2/org/eclipse/ecf/$1/maven-metadata.xml 2>/dev/null | grep '<latest>')"
local central_version=0.0.0
if [ -n "$central_metadata" ] ; then
local central_version=$(echo $central_metadata | sed -e 's/.*>\(.*\)<.*/\1/')
fi
local jar_version=$(find -name "$1-*-SNAPSHOT.jar" | tail -n1 | sed -e "s/.*$1-\(.*\)-SNAPSHOT.jar/\1/")
local op="="
if [ $(echo $jar_version | cut -f1 -d.) -gt "$(echo $central_version | cut -f1 -d.)" ] ; then
op=">"
elif [ $(echo $jar_version | cut -f2 -d.) -gt "$(echo $central_version | cut -f2 -d.)" ] ; then
op=">"
elif [ $(echo $jar_version | cut -f3 -d.) -gt "$(echo $central_version | cut -f3 -d.)" ] ; then
op=">"
fi
if [ "$central_version" = "0.0.0" ] ; then
central_version="N/A"
fi
echo " $1 $jar_version $op $central_version"
if [ "$op" != "=" ] ; then
bundles_deploy="$bundles_deploy $1"
fi
}
echo
echo "Parsing the following features:"
echo "==============================="
for feature in $features_whose_bundles_we_will_deploy ; do
_add_feature_to_list $feature && parse_feature $feature
done
echo
echo "Checking the following found bundles against maven central:"
echo "==========================================================="
bundles_sorted="$(for b in $bundles ; do echo $b ; done | sort)"
for bundle in $bundles_sorted ; do
check_maven_central $bundle
done
echo
echo "Will deploy the following bundles with newer versions:"
echo "======================================================"
for bundle in $bundles_deploy ; do
echo " $bundle"
done
# Deploy parent pom
#deploy "./target"
# Deploy all discovered bundles
echo
for b in $bundles_deploy ; do
jars=$(find -name "$b-*-SNAPSHOT.jar" | tail -n1)
for jar in $jars ; do
deploy "$(dirname $jar)"
done
done