mirror of
https://git.mirrors.martin98.com/https://github.com/petaflot/pygcode
synced 2025-06-04 11:25:20 +08:00
213 lines
5.2 KiB
Bash
Executable File
213 lines
5.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
source $(which virtualenvwrapper.sh)
|
|
|
|
function pyver() {
|
|
# write python version to stdout
|
|
$1 -c 'import sys; print("{}.{}.{}".format(*sys.version_info))'
|
|
}
|
|
|
|
function lib_ver() {
|
|
# Get library vesion number
|
|
pushd ../src > /dev/null
|
|
python -c 'import pygcode; print(pygcode.__version__)'
|
|
popd > /dev/null
|
|
}
|
|
|
|
# ============ Local Parameters
|
|
LIB_NAME=pygcode
|
|
LIB_VER=$(lib_ver)
|
|
|
|
# ============ Help Text
|
|
function show_help() {
|
|
[ "$@" ] && echo "$@"
|
|
cat << EOF
|
|
Usage: ./${0##*/} {build|test|and so on ...}
|
|
|
|
This script is to maintain a consistent method of deployment and testing.
|
|
|
|
Deployment target: ${LIB_NAME} ${LIB_VER}
|
|
|
|
Arguments:
|
|
Setup:
|
|
setup: Installs packages & sets up environment (requires sudo)
|
|
|
|
Compiling:
|
|
build: Execute setup to build packages (populates ../dist/)
|
|
creates both 'sdist' and 'wheel' distrobutions.
|
|
|
|
Virtual Environments:
|
|
rmenv py# Remove virtual environment
|
|
remkenv py# Remove, then create re-create virtual environment
|
|
|
|
Deploy:
|
|
deploy test Upload to PyPi test server
|
|
deploy prod Upload to PyPi (official)
|
|
|
|
Install:
|
|
install sdist py# Install from local sdist
|
|
install wheel py# Install from local wheel
|
|
install pypitest py# Install from PyPi test server
|
|
install pypi py# Install from PyPi (official)
|
|
|
|
Testing:
|
|
test dev py# Run tests on local dev in a virtual env
|
|
test installed py# Run tests on installed library in virtual env
|
|
|
|
Help:
|
|
-h | --help display this help message
|
|
|
|
py#: when referenced above means
|
|
'py2' for Python $(pyver python2)
|
|
'py3' for Python $(pyver python3)
|
|
EOF
|
|
}
|
|
|
|
# ============ Commands
|
|
function setup() {
|
|
# Install pre-requisite tooling
|
|
sudo pip install -U "pip>=1.4" "setuptools>=0.9" "wheel>=0.21" twine
|
|
}
|
|
|
|
function build() {
|
|
# Run setup.py to build sdist and wheel distrobutions
|
|
pushd ..
|
|
rm -rf build/
|
|
python setup.py sdist bdist_wheel
|
|
popd
|
|
}
|
|
|
|
function rmenv() {
|
|
# Remove virtual environment
|
|
set_venv_variables $1
|
|
rmvirtualenv ${env_name}
|
|
}
|
|
|
|
function remkenv() {
|
|
# Remove virtual environment, then re-create it from scratch
|
|
set_venv_variables $1
|
|
rmvirtualenv ${env_name}
|
|
mkvirtualenv --python=${python_bin} ${env_name}
|
|
}
|
|
|
|
function deploy() {
|
|
# Deploy compiled distributions to the test|prod server
|
|
_deployment_env=$1
|
|
pushd ..
|
|
twine upload -r ${_deployment_env} dist/${LIB_NAME}-${LIB_VER}*
|
|
popd
|
|
}
|
|
|
|
function install() {
|
|
# Install library from a variety of sources
|
|
_install_type=$1
|
|
_env_key=$2
|
|
|
|
set_venv_variables ${_env_key}
|
|
workon ${env_name}
|
|
|
|
case "${_install_type}" in
|
|
sdist)
|
|
# Install from locally compiled 'sdist' file
|
|
${env_pip_bin} install ../dist/${LIB_NAME}-${LIB_VER}.tar.gz
|
|
;;
|
|
wheel)
|
|
# Install from locally compiled 'wheel' file
|
|
${env_pip_bin} install ../dist/${LIB_NAME}-${LIB_VER}-py2.py3-none-any.whl
|
|
;;
|
|
pypitest)
|
|
# Install from PyPi test server
|
|
${env_pip_bin} install -i https://testpypi.python.org/pypi ${LIB_NAME}
|
|
;;
|
|
pypi)
|
|
# Install from official PyPi server
|
|
${env_pip_bin} install ${LIB_NAME}
|
|
;;
|
|
*)
|
|
echo invalid install type: \"${_install_type}\" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
deactivate
|
|
}
|
|
|
|
function run_test() {
|
|
# Run tests
|
|
|
|
_test_scope=$1
|
|
_env_key=$2
|
|
|
|
set_venv_variables ${_env_key}
|
|
|
|
case "${_test_scope}" in
|
|
dev)
|
|
export PYGCODE_TESTSCOPE=local
|
|
;;
|
|
installed)
|
|
export PYGCODE_TESTSCOPE=installed
|
|
;;
|
|
*)
|
|
echo invalid test scope: \"${_test_scope}\" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
pushd ../tests
|
|
workon ${env_name}
|
|
${env_python_bin} -m unittest discover -s . -p 'test_*.py' --verbose
|
|
deactivate
|
|
popd
|
|
}
|
|
|
|
# ============ Utilities
|
|
function set_venv_variables() {
|
|
# on successful exit, environment variables are set:
|
|
# env_name = virtual environment's name
|
|
# env_pip_bin = environment's pip binary
|
|
# env_python_bin = environment's python binary
|
|
# python_bin = python binary in host environment
|
|
_env_key=$1
|
|
|
|
env_name=${LIB_NAME}_${_env_key}
|
|
env_pip_bin=${WORKON_HOME}/${env_name}/bin/pip
|
|
env_python_bin=${WORKON_HOME}/${env_name}/bin/python
|
|
case "${_env_key}" in
|
|
py2)
|
|
python_bin=$(which python2)
|
|
;;
|
|
py3)
|
|
python_bin=$(which python3)
|
|
;;
|
|
*)
|
|
echo invalid environment key: \"${_env_key}\" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# ============ Option parsing
|
|
case "$1" in
|
|
# Show help on request
|
|
-h|--help)
|
|
show_help
|
|
exit 0
|
|
;;
|
|
|
|
# Valid Commands
|
|
setup) setup ;;
|
|
build) build ;;
|
|
rmenv) rmenv $2 ;;
|
|
remkenv) remkenv $2 ;;
|
|
deploy) deploy $2 ;;
|
|
install) install $2 $3 ;;
|
|
test) run_test $2 $3 ;;
|
|
|
|
# otherwise... show help
|
|
*)
|
|
show_help >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo ./${0##*/} completed successfully
|