| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- #!/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+"$@"}
|