#!/bin/bash ############# # CONSTANTS # ############# # base config filename KIWI_CONF_NAME="kiwi.yml" # version tag filename KIWI_VERSION_TAG="etc/version_tag" # dependencies to run kiwi-config KIWI_DEPS=(python3 pipenv less docker docker-compose) # base install dir KIWI_BASEDIR="${HOME}/.cache/kiwi-config" # per-user env setup script KIWI_ENVFILE="${HOME}/.kiwienv" # repository uri KIWI_REPO="https://github.com/ldericher/kiwi-config" # use latest version by default KIWI_VERSION="master" ################### # DYNAMIC STRINGS # ################### # directory of correct installation function kiwi_installdir() { echo "${KIWI_BASEDIR}/${KIWI_VERSION}" } # src directory in installed version function kiwi_root() { echo "$(kiwi_installdir)/src" } # main script in installed version function kiwi_executable() { echo "$(kiwi_root)/kiwi-config.py" } # cache current work directory WORKDIR="$(pwd)" ################## # PER-USER SETUP # ################## # add in environment setup if [ -f "${KIWI_ENVFILE}" ]; then # shellcheck source=$HOME/.kiwienv source "${KIWI_ENVFILE}" fi ########## # CHECKS # ########## for dep in "${KIWI_DEPS[@]}"; do if ! command -v "${dep}" &> /dev/null; then echo "Dependency '${dep}' not found, please install!" exit 1 fi done ######## # MAIN # ######## # check if pwd is a kiwi folder if [ -f "./${KIWI_CONF_NAME}" ]; then # determine needed kiwi-config version re_version_line='version\s*:\s*' eval "$(grep -E "${re_version_line}" "./${KIWI_CONF_NAME}" | sed -r 's/'"${re_version_line}"'/KIWI_VERSION=/')" fi # install if kiwi-config not found if [ ! -x "$(kiwi_executable)" ]; then echo -n "Installing kiwi-config v${KIWI_VERSION} into ${KIWI_BASEDIR} ... " ### TODO: post-release version ### # # switch to temp dir # workdir=$(pwd) # tmpdir=$(mktemp -d) # cd "${tmpdir}" # # download archive # wget "${KIWI_REPO}/archive/${KIWI_VERSION}.zip" # unzip "${KIWI_VERSION}.zip" # # read archive version tag # cd "kiwi-config-${KIWI_VERSION}" # export KIWI_VERSION=$(cat ./version-tag) # # install archive # mkdir -p "${KIWI_BASEDIR}" # mv ./src "${KIWI_BASEDIR}/${KIWI_VERSION}" # # discard temp dir # cd "${workdir}" # rm -rf "${tmpdir}" # echo "OK" ### pre-release version ### # use this directory as archive cd "$(dirname "$(readlink -f "${0}")")" ||: # read this version tag KIWI_VERSION=$(cat "./src/${KIWI_VERSION_TAG}") if [ -x "$(kiwi_executable)" ]; then # after version update: no need to install echo "kiwi-config v${KIWI_VERSION} found!" else # install this mkdir -p "${KIWI_BASEDIR}" ln -s "$(readlink -f .)" "$(kiwi_installdir)" # cd echo "OK" fi fi # check virtualenv cd "$(kiwi_installdir)" ||: if ! pipenv --venv &> /dev/null; then # install virtualenv echo -n "Preparing virtualenv ... " pipenv sync &> /dev/null echo "OK" fi # go back to the original work directory cd "${WORKDIR}" ||: # setup main environment KIWI_ROOT="$(kiwi_root)" export KIWI_ROOT export KIWI_CONF_NAME # run main script exec pipenv run "$(kiwi_executable)" "${@}"