dk: ajouter un frontend pour composer

This commit is contained in:
Jephté Clain 2019-10-02 22:04:10 +04:00
parent 29c54e7548
commit 2b5ed18ee3
2 changed files with 85 additions and 8 deletions

76
dk
View File

@ -136,6 +136,17 @@ COMMANDES
X|prune X|prune
Supprimer les containers et les images inutilisées Supprimer les containers et les images inutilisées
composer|ci|cu [args...]
Frontend pour lancer composer à l'intérieur d'un container. 'ci' est un
alias pour 'composer install' et 'cu' un alias pour 'composer update'
Le répertoire \$HOME est monté à l'intérieur du container et le script
composer.phar du projet est utilisé le cas échéant.
L'image utilisée pour lancer composer est indiquée par la variable
d'environnement COMPOSER_IMAGE et vaut par défaut:
$DEFAULT_COMPOSER_IMAGE
Cette image doit disposer de la commande 'su-exec' afin de pouvoir
lancer la commande avec l'utilisateur courant.
OPTIONS générales OPTIONS générales
(ces options sont communes à toutes les commandes) (ces options sont communes à toutes les commandes)
-d, --chdir PROJDIR -d, --chdir PROJDIR
@ -154,7 +165,7 @@ OPTIONS générales
Spécifier le profil Spécifier le profil
-m, --set-machine MACHINE -m, --set-machine MACHINE
Choisir l'environnement docker-machine spécifié avant de lancer les Choisir l'environnement docker-machine spécifié avant de lancer les
commandes commandes. Utiliser -u pour desélectionner la machine en cours, e.g -m-u
-n, --fake -n, --fake
Ne pas lancer les commandes, simplement les afficher Ne pas lancer les commandes, simplement les afficher
-h, --host HOST -h, --host HOST
@ -1191,7 +1202,56 @@ EOF
local_run "$HOST" "$tmpscript" local_run "$HOST" "$tmpscript"
} }
function auto_composer() {
local -a replace_env_args env_args
if [ -f docker-compose.yml ]; then compose_set_env_args
else docker_set_env_args
fi
local user group projdir args
setx user=id -un; setx user=getent passwd "$user"
setx group=id -gn; setx group=getent group "$group"
setx projdir=pwd
setx args=qvals "$@"
local -a cmd
cmd=(
docker run -it --rm
-e user="$user"
-e group="$group"
-e home="$HOME"
-e projdir="$projdir"
-e args="$args"
-v "$HOME:$HOME"
)
if [ "${projdir#$HOME/}" == "$projdir" ]; then
# si le répertoire de projet ne se trouve pas dans $HOME, le monter aussi
cmd+=(-v "$projdir:$projdir")
fi
cmd+=(
"${COMPOSER_IMAGE:-$DEFAULT_COMPOSER_IMAGE}"
bash -c '
echo "$user" >>/etc/passwd; user="${user%%:*}"
echo "$group" >>/etc/group; group="${group%%:*}"
cd "$projdir"
if [ -x composer.phar ]; then composer=./composer.phar
elif [ -x /usr/bin/composer ]; then composer=/usr/bin/composer
else
echo "ERROR: unable to find composer"
exit 1
fi
eval "su-exec \"$user\" \"$composer\" $args"
'
)
"${cmd[@]}"
}
################################################################################
DEFAULT_PROFILE=devel DEFAULT_PROFILE=devel
DEFAULT_COMPOSER_IMAGE=docker.univ-reunion.fr/image/utils-icmycas-php-apache:d9
PROFILE= PROFILE=
DM_PROFILES=() DM_PROFILES=()
set_defaults dk set_defaults dk
@ -1233,6 +1293,7 @@ parse_args "$@"; set -- "${args[@]}"
progexists docker-machine && DM_AVAILABLE=1 || DM_AVAILABLE= progexists docker-machine && DM_AVAILABLE=1 || DM_AVAILABLE=
if [ -n "$DM_SET_MACHINE" ]; then if [ -n "$DM_SET_MACHINE" ]; then
[ -n "$DM_AVAILABLE" ] || die "docker-machine n'est pas disponible" [ -n "$DM_AVAILABLE" ] || die "docker-machine n'est pas disponible"
[ "$DM_SET_MACHINE" == - ] && DM_SET_MACHINE=-u
setx dm_env=docker-machine env "$DM_SET_MACHINE" || die setx dm_env=docker-machine env "$DM_SET_MACHINE" || die
eval "$dm_env" eval "$dm_env"
fi fi
@ -1604,6 +1665,19 @@ NR == 1 { print; next }
docker container prune -f || die docker container prune -f || die
docker image prune -f || die docker image prune -f || die
;; ;;
composer|c|ci|cu)
build_set_options "$update_apps_mode" "$update_apps_origin" "$update_apps_branch"
[ -f .build.scripts.sh ] && source ./.build.scripts.sh
[ -f build.scripts.sh ] && source ./build.scripts.sh
args=()
if [ "$cmd" == ci ]; then args+=(install)
elif [ "$cmd" == cu ]; then args+=(update)
fi
while [ $# -gt 0 -a "$1" != -- ]; do
args+=("$1"); shift
done
auto_composer "${args[@]}"
;;
*) die "$cmd: commande inconnue";; *) die "$cmd: commande inconnue";;
esac esac
done done

View File

@ -5,3 +5,6 @@
# Profiles pour docker-machine # Profiles pour docker-machine
#DM_PROFILES=(name:profile...) #DM_PROFILES=(name:profile...)
# Image à utiliser pour lancer composer
#COMPOSER_IMAGE=docker.univ-reunion.fr/image/utils-icmycas-php-apache:d9