#!/usr/bin/env bash
################################################################################
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
# limitations under the License.
################################################################################

# fail on errors
set -e

#
# Deploys snapshot builds to Apache's snapshot repository.
#

function getVersion() {
    here="`dirname \"$0\"`"              # relative
    here="`( cd \"$here\" && pwd )`"  # absolutized and normalized
    if [ -z "$here" ] ; then
        # error; for some reason, the path is not accessible
        # to the script (e.g. permissions re-evaled after suid)
        exit 1  # fail
    fi
    flink_home="`dirname \"$here\"`"
    cd "$flink_home"
	echo `mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep -E '^([0-9]+.[0-9]+(.[0-9]+)?(-[a-zA-Z0-9]+)?)$'`
}

function deploy_to_s3() {
	CURRENT_FLINK_VERSION=$1
	HD=$2

	echo "Installing artifacts deployment script"
	export ARTIFACTS_DEST="$HOME/bin/artifacts"
	curl -sL https://raw.githubusercontent.com/travis-ci/artifacts/master/install | bash
	PATH="$(dirname "$ARTIFACTS_DEST"):$PATH"

	echo "Deploying flink version $CURRENT_FLINK_VERSION (hadoop=$HD) to s3:"
	mkdir flink-$CURRENT_FLINK_VERSION
	cp -r flink-dist/target/flink-*-bin/flink-$CURRENT_FLINK_VERSION*/* flink-$CURRENT_FLINK_VERSION/
	tar -czf flink-$CURRENT_FLINK_VERSION-bin-$HD.tgz flink-$CURRENT_FLINK_VERSION

	artifacts upload \
		  --bucket $ARTIFACTS_S3_BUCKET \
		  --key $ARTIFACTS_AWS_ACCESS_KEY_ID \
		  --secret $ARTIFACTS_AWS_SECRET_ACCESS_KEY \
		  --target-paths / \
		  flink-$CURRENT_FLINK_VERSION-bin-$HD.tgz

	# delete files again
	rm -rf flink-$CURRENT_FLINK_VERSION
	rm flink-$CURRENT_FLINK_VERSION-bin-$HD.tgz
}

pwd


echo "install lifecylce mapping fake plugin"
git clone https://github.com/mfriedenhagen/dummy-lifecycle-mapping-plugin.git
cd dummy-lifecycle-mapping-plugin
mvn -B install
cd ..
rm -rf dummy-lifecycle-mapping-plugin


CURRENT_FLINK_VERSION=`getVersion`
if [[ "$CURRENT_FLINK_VERSION" == *-SNAPSHOT ]]; then
    CURRENT_FLINK_VERSION_HADOOP1=${CURRENT_FLINK_VERSION/-SNAPSHOT/-hadoop1-SNAPSHOT}
else
    CURRENT_FLINK_VERSION_HADOOP1="$CURRENT_FLINK_VERSION-hadoop1"
fi

echo "detected current version as: '$CURRENT_FLINK_VERSION' ; hadoop1: $CURRENT_FLINK_VERSION_HADOOP1 "

#
# This script deploys our project to sonatype SNAPSHOTS.
# It will deploy both a hadoop v1 and a hadoop v2 (yarn) artifact
#

if [[ $CURRENT_FLINK_VERSION == *SNAPSHOT* ]] ; then
    MVN_SNAPSHOT_OPTS="-B -Pdocs-and-source -DskipTests -Drat.skip=true -Drat.ignoreErrors=true \
        -DretryFailedDeploymentCount=10 --settings deploysettings.xml clean deploy"

    # Deploy hadoop v1 to maven
    echo "Generating poms for hadoop1"
    ./tools/generate_specific_pom.sh $CURRENT_FLINK_VERSION $CURRENT_FLINK_VERSION_HADOOP1 pom.hadoop1.xml
    mvn -f pom.hadoop1.xml ${MVN_SNAPSHOT_OPTS}
    # deploy to s3
    deploy_to_s3 $CURRENT_FLINK_VERSION "hadoop1"

    # hadoop2 scala 2.10
    echo "deploy standard version (hadoop2) for scala 2.10"
    mvn ${MVN_SNAPSHOT_OPTS}
    deploy_to_s3 $CURRENT_FLINK_VERSION "hadoop2"

    # hadoop2 scala 2.11
    echo "deploy hadoop2 version (standard) for scala 2.11"
    ./tools/change-scala-version.sh 2.11
    mvn ${MVN_SNAPSHOT_OPTS}
    deploy_to_s3 $CURRENT_FLINK_VERSION "hadoop2_2.11"

    echo "Changing back to scala 2.10"
    ./tools/change-scala-version.sh 2.10

    exit 0
else
    exit 1
fi

