#!/usr/bin/env bash if [ -v $OSHIPKA_PATH ]; then echo "You need to specify OSHIPKA_PATH env variable" exit 1 fi echo "oshipka is at: $OSHIPKA_PATH" #!/usr/bin/env bash HELP=" Usage $0 [ bootstrap | model | db_migrate | db_upgrade | db_populate | db_recreate | db_purge_recreate | init | worker | web | venv | install | link | cert ] bootstrap [PROJECT_PATH] Create a new project in PROJECT_PATH init Install dev env model Create or update a model from files in webapp/view_models/*.yaml db_migrate DB migration db_upgrade DB upgrade to last migration db_populate Populate db with data from data_static/ and populate.py db_recreate Delete the database, recreate to latest migration and populate db_purge_recreate Same as db_recreate but also purge the migrations worker Start worker web Start webapp venv Init venv install Install requirements link Link dev oshipka prod Run in prod cert [DOMAIN] Install certificate " worker () { source venv/bin/activate python worker.py } web () { source venv/bin/activate python run.py } init_venv() { virtualenv -p python3 venv } install_reqs() { source venv/bin/activate pip install -r requirements.txt } link_dev_oshipka() { source venv/bin/activate pip install -e ${OSHIPKA_PATH} pip install -e ${TWW_PATH} } init() { init_venv install_reqs link_dev_oshipka } install_cert() { #[ ! -f /tmp/certbot-auto ] && wget -O /tmp/certbot-auto https://dl.eff.org/certbot-auto #chmod +x /tmp/certbot-auto #certbot=/tmp/certbot-auto shift PROJECT_DOMAIN=$1 sudo apt install certbot certbot certonly --authenticator standalone --installer nginx --pre-hook "service nginx stop" --post-hook "service nginx start" --redirect --agree-tos --no-eff-email --email admin@app.com -d ${PROJECT_DOMAIN} --no-bootstrap } bootstrap() { shift PROJECT_PATH=$1 if [[ -z "$PROJECT_PATH" ]]; then read -p "Enter project path: " PROJECT_PATH fi if [[ -z "$PROJECT_PATH" ]]; then echo "ERROR: Specify project path" exit 1 else echo "INFO: Project path: $PROJECT_PATH" PROJECT_PATH=`realpath $PROJECT_PATH` echo "INFO: Absolute project path: $PROJECT_PATH" if [[ "$PROJECT_PATH" == $OSHIPKA_PATH* ]]; then echo "ERROR: Project path can't be inside this directory. Exiting..." exit 1 fi if [ -d $PROJECT_PATH ]; then echo "ERROR: Project path exists. Please remove or specify another. Exiting..." exit 1 else echo "INFO: Project path doesn't exist, creating..." mkdir -p $PROJECT_PATH fi fi PROJECT_NAME=$(basename $PROJECT_PATH) echo "INFO: Bootstrapping project $PROJECT_NAME..." mkdir -p ${PROJECT_PATH} cp -r ${OSHIPKA_PATH}/bootstrap/* ${PROJECT_PATH}/ cp ${OSHIPKA_PATH}/bootstrap/.gitignore ${PROJECT_PATH}/.gitignore mkdir ${PROJECT_PATH}/data mkdir ${PROJECT_PATH}/webapp/view_models cd ${PROJECT_PATH} init_venv link_dev_oshipka source venv/bin/activate python manager.py db init python manager.py db migrate -m "001" _post_migrate python manager.py db upgrade } run_in_prod() { shift PORT=$1 source venv/bin/activate gunicorn -w 4 -b 0.0.0.0:${PORT} run:app } model() { shift source venv/bin/activate python "${OSHIPKA_PATH}/vm_gen/vm_gen.py" "`pwd`" } db_migrate() { shift source venv/bin/activate python manager.py db migrate _post_migrate } db_upgrade() { shift source venv/bin/activate python manager.py db upgrade } db_purge_recreate() { shift source venv/bin/activate rm -rf data/db.sqlite data/search_index migrations/ python manager.py db init db_migrate db_upgrade db_populate } db_populate() { shift source venv/bin/activate python init_populate.py } db_recreate() { shift source venv/bin/activate rm -rf data/db.sqlite data/search_index db_upgrade db_populate } _post_migrate() { for i in migrations/versions/*.py; do sed -i "s/sqlalchemy_utils.types.choice.ChoiceType(length=255), /sa.String(), / " "$i"; sed -i "s/oshipka.persistance.LiberalBoolean(), /sa.Boolean(), / " "$i"; done } command_main() { INITIAL_COMMAND=$1 case "$INITIAL_COMMAND" in bootstrap) bootstrap "$@" ;; model) model "$@" ;; db_migrate) db_migrate "$@" ;; db_upgrade) db_upgrade "$@" ;; db_populate) db_populate "$@" ;; db_recreate) db_recreate "$@" ;; db_purge_recreate) db_purge_recreate "$@" ;; init) init "$@" ;; worker) worker "$@" ;; web) web "$@" ;; venv) init_venv "$@" ;; install) install_reqs "$@" ;; link) link_dev_oshipka "$@" ;; prod) run_in_prod "$@" ;; cert) install_cert "$@" ;; *) >&2 echo -e "${HELP}" return 1 ;; esac return $? } command_main "$@"