blob: c5d9e99fff68d7655e67b2a1a025c54cf15482b4 [file] [log] [blame]
#!/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.
# requires: pip setuptools wheel
readlinkf(){
# get real path on mac OSX
perl -MCwd -e 'print Cwd::abs_path shift' "$1";
}
if [ "$(uname -s)" = 'Linux' ]; then
SCRIPT_DIR="`dirname "$(readlink -f "$0")"`"
else
SCRIPT_DIR="`dirname "$(readlinkf "$0")"`"
fi
function print_help() {
cat << EOF
Usage: ./install-ambari-python.sh [additional options]
-c, --clean clean generated python distribution directories
-d, --deploy deploy ambari-python artifact to maven remote repository
-v, --version <version> override ambari-python artifact versison
-i, --repository-id <id> repository id in settings.xml for remote repository
-r, --repository-url <url> repository url of remote repository
-h, --help print help
EOF
}
function get_python_artifact_file() {
local artifact_file=$(ls $SCRIPT_DIR/dist/ | head -n 1)
echo $artifact_file
}
function get_version() {
local artifact_file=$(get_python_artifact_file)
local artifact_version=$(echo $artifact_file | perl -lne '/ambari-python-(.*?)\.tar\.gz/ && print $1')
echo $artifact_version
}
function clean() {
if [[ -d "$SCRIPT_DIR/dist" ]]; then
echo "Removing '$SCRIPT_DIR/dist' directoy ..."
rm -r "$SCRIPT_DIR/dist"
echo "Directory '$SCRIPT_DIR/dist' successfully deleted."
fi
if [[ -d "$SCRIPT_DIR/ambari_python.egg-info" ]]; then
echo "Removing '$SCRIPT_DIR/ambari_python.egg-info' directoy ..."
rm -r "$SCRIPT_DIR/ambari_python.egg-info"
echo "Directory '$SCRIPT_DIR/ambari_python.egg-info' successfully deleted."
fi
if [[ -d "$SCRIPT_DIR/target/ambari-python-dist" ]]; then
echo "Removing '$SCRIPT_DIR/target/ambari-python' directoy ..."
rm -r "$SCRIPT_DIR/target/ambari-python-dist"
echo "Directory '$SCRIPT_DIR/target/ambari-python' successfully deleted."
fi
}
function generate_site_packages() {
local version="$1"
pip install $SCRIPT_DIR/dist/ambari-python-$version.tar.gz -I --install-option="--prefix=$SCRIPT_DIR/target/ambari-python-dist"
}
function archive_python_dist() {
local artifact="$1"
local site_packages_dir=$(find $SCRIPT_DIR/target/ambari-python-dist -name "site-packages")
local base_dir="`dirname $site_packages_dir`" # use this to make it work with different python versions
if [[ -f "$SCRIPT_DIR/target/$artifact" ]]; then
echo "Removing '$SCRIPT_DIR/target/$artifact' file ..."
echo "File '$SCRIPT_DIR/target/$artifact' successfully deleted."
fi
tar -zcf $SCRIPT_DIR/target/$artifact -C $base_dir site-packages
}
function install() {
local artifact_file="$1"
local version="$2"
mvn install:install-file -Dfile=$artifact_file -DgeneratePom=true -Dversion=$version -DartifactId=ambari-python -DgroupId=org.apache.ambari -Dpackaging=tar.gz
}
function deploy() {
local artifact_file="$1"
local version="$2"
local repo_id="$3"
local repo_url="$4"
mvn gpg:sign-and-deploy-file -Dfile=$artifact_file -Dpackaging=tar.gz -DgeneratePom=true -Dversion=$version -DartifactId=ambari-python -DgroupId=org.apache.ambari -Durl="$repo_url" -DrepositoryId="$repo_url"
}
function run_setup_py() {
local version="$1"
if [[ ! -z "$version" ]]; then
env AMBARI_VERSION="$version" python setup.py sdist
else
python setup.py sdist
fi
}
function main() {
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
-d|--deploy)
local DEPLOY="true"
shift 1
;;
-c|--clean)
local CLEAN="true"
shift 1
;;
-v|--version)
local VERSION="$2"
shift 2
;;
-i|--repository-id)
local REPOSITORY_ID="$2"
shift 2
;;
-r|--repository-url)
local REPOSITORY_URL="$2"
shift 2
;;
-h|--help)
shift 1
print_help
exit 0
;;
*)
echo "Unknown option: $1"
exit 1
;;
esac
done
if [[ -z "$DEPLOY" ]] ; then
DEPLOY="false"
fi
clean
if [[ "$CLEAN" == "true" ]]; then
return 0
fi
run_setup_py "$VERSION"
local artifact_name=$(get_python_artifact_file)
local artifact_version=$(get_version)
generate_site_packages "$artifact_version"
archive_python_dist "$artifact_name"
install "$SCRIPT_DIR/target/$artifact_name" "$artifact_version"
if [[ "$DEPLOY" == "true" ]] ; then
if [[ -z "$REPOSITORY_ID" ]] ; then
echo "Repository id option is required for deploying ambari-python artifact (-i or --repository-id)"
exit 1
fi
if [[ -z "$REPOSITORY_URL" ]] ; then
echo "Repository url option is required for deploying ambari-python artifact (-r or --repository-url)"
exit 1
fi
deploy "$SCRIPT_DIR/target/$artifact_name" "$artifact_version" "$REPOSITORY_ID" "$REPOSITORY_URL"
else
echo "Skip deploying ambari-python artifact to remote repository."
fi
}
main ${1+"$@"}