1
0
Fork 0
mirror of https://github.com/yavook/kiwi-scp.git synced 2024-11-25 05:53:00 +00:00

Distribution script, lesser dependencies

This commit is contained in:
Jörn-Michael Miehe 2020-08-20 17:38:25 +02:00
parent 6118cb932a
commit 0aee2eadd5
4 changed files with 96 additions and 19 deletions

View file

@ -1 +0,0 @@
../src/kiwi-config.py

101
kiwi
View file

@ -5,30 +5,81 @@
############# #############
# base config filename # base config filename
export KIWI_CONF_NAME="kiwi.conf" 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 # base install dir
KIWI_BASEDIR="${HOME}/.cache/kiwi-config" KIWI_BASEDIR="${HOME}/.cache/kiwi-config"
# per-user env setup script
KIWI_ENVFILE="${HOME}/.kiwienv"
# repository uri # repository uri
KIWI_REPO="https://github.com/ldericher/kiwi-config" 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 # # MAIN #
######## ########
# use latest version by default
export KIWI_VERSION="master"
# check if pwd is a kiwi folder # check if pwd is a kiwi folder
if [ -f "./${KIWI_CONF_NAME}" ]; then if [ -f "./${KIWI_CONF_NAME}" ]; then
# determine needed kiwi-config version # determine needed kiwi-config version
export KIWI_VERSION=$(source "./${KIWI_CONF_NAME}" && echo "${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 fi
# install if kiwi-config not found # install if kiwi-config not found
if [ ! -x "${KIWI_BASEDIR}/${KIWI_VERSION}/bin/main.sh" ]; then if [ ! -x "$(kiwi_executable)" ]; then
echo -n "Installing kiwi-config v${KIWI_VERSION} into ${KIWI_BASEDIR} ... " echo -n "Installing kiwi-config v${KIWI_VERSION} into ${KIWI_BASEDIR} ... "
### production version ### ### TODO: post-release version ###
# # switch to temp dir # # switch to temp dir
# workdir=$(pwd) # workdir=$(pwd)
@ -51,19 +102,45 @@ if [ ! -x "${KIWI_BASEDIR}/${KIWI_VERSION}/bin/main.sh" ]; then
# cd "${workdir}" # cd "${workdir}"
# rm -rf "${tmpdir}" # rm -rf "${tmpdir}"
### development version ### # echo "OK"
### pre-release version ###
# use this directory as archive
cd "$(dirname "$(readlink -f "${0}")")" ||:
# read this version tag # read this version tag
export KIWI_VERSION=$(cat ./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 # install this
mkdir -p "${KIWI_BASEDIR}" mkdir -p "${KIWI_BASEDIR}"
ln -s "$(readlink -f ./src)" "${KIWI_BASEDIR}/${KIWI_VERSION}" 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" echo "OK"
fi fi
export KIWI_ROOT="${KIWI_BASEDIR}/${KIWI_VERSION}" # 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 # run main script
exec "${KIWI_ROOT}/bin/main.sh" "${@}" exec pipenv run "$(kiwi_executable)" "${@}"

View file

@ -26,6 +26,7 @@ class Parser:
# create main parser # create main parser
self.__parser = argparse.ArgumentParser( self.__parser = argparse.ArgumentParser(
prog='kiwi',
description=kiwi_help, description=kiwi_help,
epilog=command_help_text, epilog=command_help_text,
) )

View file

@ -10,13 +10,13 @@ from ..config import LoadedConfig
def _service_has_executable(project, service, exe_name): def _service_has_executable(project, service, exe_name):
""" """
Test if service in project has an executable exe_name in its PATH. Test if service in project has an executable exe_name in its PATH.
Requires /bin/sh and which. Requires /bin/sh.
""" """
try: try:
# test if desired shell exists # test if desired shell exists
project.compose_run( project.compose_run(
['exec', service, '/bin/sh', '-c', f"which {exe_name}"], ['exec', service, '/bin/sh', '-c', f"command -v {exe_name}"],
check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL
) )
return True return True