[Releng] Adapted promotion scripts to new JIPP
Change-Id: I0dad54b692d1af8f1e08af697337b0417caaea4e
Signed-off-by: Leif Geiger <leif.geiger@yatta.de>
diff --git a/httpclient-target-site/org.eclipse.epp.mpc.apache.httpclient.site/pom.xml b/httpclient-target-site/org.eclipse.epp.mpc.apache.httpclient.site/pom.xml
index 5711d57..1031549 100644
--- a/httpclient-target-site/org.eclipse.epp.mpc.apache.httpclient.site/pom.xml
+++ b/httpclient-target-site/org.eclipse.epp.mpc.apache.httpclient.site/pom.xml
@@ -44,6 +44,27 @@
</executions>
</plugin>
<plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>3.3.0</version>
+ <executions>
+ <execution>
+ <id>promote-assembly</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>promote-assembly.xml</descriptor>
+ </descriptors>
+ <finalName>org.eclipse.epp.mpc.apache.httpclient.site-promote</finalName>
+ <appendAssemblyId>false</appendAssemblyId>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-p2-repository-plugin</artifactId>
<configuration>
diff --git a/httpclient-target-site/org.eclipse.epp.mpc.apache.httpclient.site/promote-assembly.xml b/httpclient-target-site/org.eclipse.epp.mpc.apache.httpclient.site/promote-assembly.xml
new file mode 100644
index 0000000..aceef03
--- /dev/null
+++ b/httpclient-target-site/org.eclipse.epp.mpc.apache.httpclient.site/promote-assembly.xml
@@ -0,0 +1,19 @@
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
+
+ <id>promote-assembly</id>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <formats>
+ <format>zip</format>
+ </formats>
+
+ <fileSets>
+ <fileSet>
+ <directory>${project.build.directory}/promote</directory>
+ <outputDirectory></outputDirectory>
+ <includes>
+ <include>**/*</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+</assembly>
\ No newline at end of file
diff --git a/httpclient-target-site/org.eclipse.epp.mpc.apache.httpclient.site/promote/promote.sh b/httpclient-target-site/org.eclipse.epp.mpc.apache.httpclient.site/promote/promote.sh
index 88fa4de..bd87de8 100644
--- a/httpclient-target-site/org.eclipse.epp.mpc.apache.httpclient.site/promote/promote.sh
+++ b/httpclient-target-site/org.eclipse.epp.mpc.apache.httpclient.site/promote/promote.sh
@@ -1,37 +1,238 @@
-#!/bin/sh -e
+#!/usr/bin/env bash
+set -e
+set -x
-DIST=$1
-VERSION=$2
-QUALIFIER=$3
-SRC=$4
-ARCHIVE=$5
-SITE=$6
+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
-DST=$ARCHIVE/$VERSION/$QUALIFIER
+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
-
-mkdir -p $DST/
-unzip -d $DST/ $SRC
-cp $SRC $DST/$DIST-$VERSION.$QUALIFIER.zip
-
-chmod g+w -R $DST
-
-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
- $BASE/update-composite.sh
+ if [ -e "$DST" ]; then
+ echo "$DST" already exists
+ exit 1
fi
- done
-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
+}
diff --git a/httpclient-target-site/org.eclipse.epp.mpc.apache.httpclient.site/promote/update-composite.sh b/httpclient-target-site/org.eclipse.epp.mpc.apache.httpclient.site/promote/update-composite.sh
deleted file mode 100644
index cb06c15..0000000
--- a/httpclient-target-site/org.eclipse.epp.mpc.apache.httpclient.site/promote/update-composite.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/bash -e
-
-BASE=$(dirname $0)
-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() {
-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
-
-sed -i -e "s/TAG/$TAG/" -e "s/TYPE/$TYPE/" $FILE
-sed -i -e "s/NAME/$NAME/" -e "s/TIMESTAMP/$TIMESTAMP/" $FILE
-COUNT=0
-for i in $DIRS; 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"
-}
-
-FILE=compositeArtifacts.xml
-TAG=compositeArtifactRepository
-TYPE=org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository
-
-compose
-
-FILE=compositeContent.xml
-TAG=compositeMetadataRepository
-TYPE=org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository
-
-compose