blob: bd87de8d93c376bf0465d6a4be20eeb518ef7ff8 [file] [log] [blame]
#!/usr/bin/env bash
set -e
set -x
PUBLISH_BASE=/home/data/httpd/download.eclipse.org/mpc/httpclient
PROMOTE_BASE=$PUBLISH_BASE/.promote
SITE_ID=org.eclipse.epp.mpc.apache.httpclient.site
DIST_NAME=mpc.apache.httpclient
do_promote() {
DIST=$1
VERSION=$2
QUALIFIER=$3
SRC=$4
ARCHIVE=$5
SITE=$6
DST=$ARCHIVE/$VERSION/$QUALIFIER
if [ -e "$DST" ]; then
echo "$DST" already exists
exit 1
fi
echo Promoting "$VERSION"."$QUALIFIER" to "$DST"
umask 0002
mkdir -p "$DST"/
unzip -d "$DST"/ "$SRC"
cp "$SRC" "$DST"/"$DIST"-"$VERSION"."$QUALIFIER".zip
chmod g+rwX -R "$DST"
chmod g+rwx "$ARCHIVE" "$ARCHIVE"/"$VERSION" || true
cd $(dirname "$0")
BASE=$(pwd)
if [ -n "$SITE" ]; then
for i in "$SITE" "$SITE"/*; do
if [ -e "$i"/composite.index ]; then
echo "Updating $i"
cd "$i"
update_composite
fi
done
fi
}
compose() {
FILE="$1"
shift
TAG="$1"
shift
TYPE="$1"
shift
NAME="$1"
shift
TIMESTAMP="$1"
shift
cat >"$FILE" <<-EOF
<?xml version='1.0' encoding='UTF-8'?>
<?$TAG version='1.0.0'?>
<repository name='$NAME' type='$TYPE' version='1.0.0'>
<properties size='2'>
<property name='p2.compressed' value='true'/>
<property name='p2.timestamp' value='$TIMESTAMP'/>
</properties>
<children size='CHILD_COUNT'>
EOF
COUNT=0
for i in "$@"; do
echo " <child location='$i'/>" >>"$FILE"
COUNT=$((COUNT + 1))
done
sed -i -e "s/CHILD_COUNT/$COUNT/" "$FILE"
cat >>"$FILE" <<-EOF
</children>
</repository>
EOF
echo "Wrote $COUNT entries to $FILE"
}
update_composite() {
source composite.index
if [ "$DIRS" == "" ]; then
echo "missing DIRS"
exit 1
fi
if [ "$NAME" == "" ]; then
echo "missing NAME"
exit 1
fi
TIMESTAMP=$(date +%s)000
compose compositeArtifacts.xml \
compositeArtifactRepository \
org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository \
"$NAME" \
"$TIMESTAMP" \
$DIRS
compose compositeContent.xml \
compositeMetadataRepository \
org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository \
"$NAME" \
"$TIMESTAMP" \
$DIRS
}
download_build_archive() {
ARCHIVE_PATH="$1"
TARGET_PATH="$2"
case "$TARGET_PATH" in
*/)
TARGET_PATH="${TARGET_PATH}$(basename "$ARCHIVE_PATH")"
;;
esac
test -s "$TARGET_PATH" && echo "$TARGET_PATH already exists" && return 0
curl -o "$TARGET_PATH" "${PROMOTED_URL}/artifact/${ARCHIVE_PATH}"
}
download_promote_package() {
download_build_archive "$SITE_ID"/target/"$SITE_ID"-promote.zip ./promote.zip
unzip ./promote.zip promote.properties
. ./promote.properties
}
download_promoted_build() {
download_promote_package
SITE_ARCHIVE="$SITE_ID"-"$version"-SNAPSHOT.zip
download_build_archive "$SITE_ID"/target/"$SITE_ARCHIVE" ./"$SITE_ARCHIVE"
}
promote_remote() {
STAGE="$1"
shift
SITE_ARCHIVE="$1"
shift
case "$STAGE" in
integration | release | train_release)
echo "Promoting to $STAGE"
;;
*)
echo >&2 "Invalid stage $STAGE"
return 1
;;
esac
REMOTE_WORKDIR=$(ssh genie.mpc@projects-storage.eclipse.org \
"mkdir -p $PROMOTE_BASE && mktemp -p $PROMOTE_BASE -d $version-XXXXXXXX")
scp promote.zip "$SITE_ARCHIVE" genie.mpc@projects-storage.eclipse.org:"$REMOTE_WORKDIR/"
RESULT=0
ssh genie.mpc@projects-storage.eclipse.org "cd $REMOTE_WORKDIR && unzip promote.zip && . promote.sh && promote_${STAGE}_remote" "$@" || RESULT=$?
ssh genie.mpc@projects-storage.eclipse.org "rm -rf $PROMOTE_BASE"
return $RESULT
}
promote_integration() {
#TODO old nightlies should be deleted
download_promoted_build
. ./promote.properties
SITE_ARCHIVE="$SITE_ID"-$version-SNAPSHOT.zip
promote_remote integration "$SITE_ARCHIVE"
}
promote_integration_remote() {
. ./promote.properties
do_promote "$DIST_NAME" "$version" "$qualifier" \
./"$SITE_ID"-"$version"-SNAPSHOT.zip \
$PUBLISH_BASE/drops \
$PUBLISH_BASE/nightly
# Update nightly composite
cd $PUBLISH_BASE/nightly/latest
update_composite
}
promote_release() {
#TODO each x.x.x version release site should be a composite, too.
download_promoted_build
. ./promote.properties
SITE_ARCHIVE="$SITE_ID"-$version-SNAPSHOT.zip
test -z "$RELEASE" && RELEASE=$version
promote_remote release "$SITE_ARCHIVE" "$RELEASE"
}
promote_release_remote() {
RELEASE="$1"
. ./promote.properties
test -z "$RELEASE" && RELEASE=$version
SOURCE="$SITE_ID"-$version-SNAPSHOT.zip
TARGET=$PUBLISH_BASE/releases/$RELEASE
rm -rf "$TARGET"
mkdir -p "$TARGET"
cp "$SOURCE" "$TARGET"/"$DIST_NAME"-"${version}".zip
unzip -d "$TARGET"/ "$SOURCE"
# Update latest release composite
cd $PUBLISH_BASE/releases/latest
update_composite
}
promote_train_release() {
download_promote_package
. ./promote.properties
promote_remote train_release "" "$TRAIN"
}
promote_train_release_remote() {
TRAIN="$1"
IFS=' ,;' read -ra TRAINDIRS < <(echo "$TRAIN" | tr '[:upper:]' '[:lower:]')
for t in "${TRAINDIRS[@]}"; do
test ! -d $PUBLISH_BASE/"$t" && echo "Train $t does not exist" && continue
cd $PUBLISH_BASE/"$t"
update_composite
test -d latest && cd latest && update_composite
done
}