[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