|
- #!/usr/bin/env bash
- #
- # Install/Update adtools for a docker image
- #
- # Author: donkey <anjingyu_ws@foxmail.com>
-
- # Assume the terminal is a MODERN terminal
- # support colorful output
- normal="\e[0m"
- black="\e[0;30m"
- red="\e[0;31m"
- green="\e[0;32m"
- yellow="\e[0;33m"
- blue="\e[0;34m"
- magenta="\e[0;35m"
- cyan="\e[0;36m"
- white="\e[0;37m"
-
- readonly CUR_DIR=$(cd `dirname $0`; pwd)
- readonly PROJ_DIR=`dirname $CUR_DIR`
- readonly PYPI_HOST="http://172.23.140.35:8088/repository/pypi-hosted/packages"
-
- function help()
- {
- echo "Usage: `basename $0` [-h,--help] [-t,--tag TAG]"
- echo
- echo "Options:"
- echo -e " ${green}-h${normal},${green}--help${normal} Show help and exit."
- echo -e " ${green}-i${normal},${green}--image${yellow} IMAGE${normal} Update the image files [${red}REQUIRED${normal}]"
- echo -e " ${green}-t${normal},${green}--tag${yellow} TAG${normal} Specify the tag to update, default: version in __init__.py"
- echo -e " ${green}-l${normal},${green}--local${normal} Use local whl package"
- echo
- echo "Examples:"
- echo " ./`basename $0` -t 0.5.16 -i 172.25.40.12:5555/ns-build:20.04"
- echo
- }
-
- function main()
- {
- local _TAG=""
- local _IMG=""
- local _FORCE="false"
- local _LOCAL_PKG="false"
-
- while [ $# -ne 0 ]; do
- case "$1" in
- -t|--tag)
- shift
- _TAG="$1"
- ;;
- -i|--image)
- shift
- _IMG="$1"
- ;;
- -l|--local)
- _LOCAL_PKG="true"
- ;;
- -f|--force)
- _FORCE="true"
- ;;
- -h|--help)
- help
- exit 0
- ;;
- *)
- ;;
- esac
- shift
- done
-
- if [ -z "${_IMG}" ]; then
- echo -e "[${red}E${normal}] The option ${yellow}--image${normal}/${yellow}-i${normal} is ${red}REQUIRED${normal}!"
- exit 1
- fi
-
- if [ -z "${_TAG}" ]; then
- while read line; do
- # Skip the empty lines and commented lines
- if [ -n "$line" ] && ! [[ "$line" = \#* ]]; then
- _TAG=$(sed "s/.*__version__\s*=\s*\"\(.*\)\".*/\1/" <<< "$line")
- if [ -n "${_TAG}" ]; then
- break
- fi
- fi
- done < "${PROJ_DIR}/adtools/__init__.py"
- fi
-
- # The docker image is existent, attempt update the adtools
- if docker image inspect "$_IMG" 1>/dev/null 2>&1; then
- # Update the docker image
- local _SUFFIX=$(head -c 4 /dev/urandom | hexdump -v -e '/1 "%02X"')
-
- local _FORCE_PARAM=""
- if [ "$_FORCE" = "true" ]; then
- _FORCE_PARAM="--force-reinstall"
- fi
-
- if [ "${_LOCAL_PKG}" = "true" ]; then
- local ADTOOLS_PKG="${PROJ_DIR}/dist/adtools-${_TAG}-py3-none-any.whl"
- if [ ! -f "$ADTOOLS_PKG" ]; then
- echo -e "[W] ${yellow}Required package ${cyan}$ADTOOLS_PKG ${yellow}is missing, attempt to build it.${normal}"
- pushd $PROJ_DIR 1>/dev/null 2>&1
- if command -v "pyproject-build" 1>/dev/null 2>&1; then
- pyproject-build --wheel
- else
- echo -e "[E] ${yellow}Required package ${cyan}build${yellow}is missing, please install it.${normal}"
- exit 1
- fi
- popd 1>/dev/null 2>&1
- fi
-
- if [ ! -f "$ADTOOLS_PKG" ]; then
- echo -e "[E] ${red}Required package ${cyan}$ADTOOLS_PKG ${red}is missing.${normal}"
- exit 1
- fi
-
- docker run -it -v "${ADTOOLS_PKG}:/tmp/adtools-${_TAG}-py3-none-any.whl" --name "build_${_SUFFIX}" "${_IMG}" /bin/bash -ic "python3 -m pip install ${_FORCE_PARAM} /tmp/adtools-${_TAG}-py3-none-any.whl"
- else
- local ADTOOLS_URL="${PYPI_HOST}/adtools/${_TAG}/adtools-${_TAG}-py3-none-any.whl"
- docker run -it --name "build_${_SUFFIX}" "${_IMG}" /bin/bash -ic "curl -O \"${ADTOOLS_URL}\" && python3 -m pip install ${_FORCE_PARAM} ./adtools-${_TAG}-py3-none-any.whl && rm ./adtools-${_TAG}-py3-none-any.whl"
- fi
-
- echo -e "[I] Commit new version adtools: ${green}${_TAG}${normal}"
- docker commit "build_${_SUFFIX}" ${_IMG}
- # Cleanup the exited container
- docker container rm -f "build_${_SUFFIX}"
- fi
- }
-
- main "$@"
|