dk: support de COMPOSER_PHP

This commit is contained in:
Jephté Clain 2020-01-22 10:47:14 +04:00
parent f28df5266c
commit 28f4d398c2
1 changed files with 45 additions and 17 deletions

62
dk
View File

@ -138,14 +138,20 @@ COMMANDES
X|prune X|prune
Supprimer les containers et les images inutilisées Supprimer les containers et les images inutilisées
composer|ci|cu|cs [args...] composer|ci|cu|cr|cs [args...]
Frontend pour lancer composer à l'intérieur d'un container. Les Frontend pour lancer composer à l'intérieur d'un container. Les
commandes 'ci', 'cu' et 'cs' sont respectivement des alias pour commandes 'ci', 'cu', 'cr', 'cs' sont des alias pour 'composer install',
'composer install', 'composer update' et 'composer shell' 'composer update', 'composer rshell' et 'composer shell' respectivement
S'il existe un fichier .composer.conf dans le répertoire du projet, il S'il existe un fichier .composer.conf dans le répertoire du projet, il
est sourcé. Ce fichier définit des variables qui indiquent comment la est sourcé. Ce fichier définit des variables qui indiquent comment la
commande composer est lancée. Les variables suivantes peuvent être commande composer est lancée. Les variables suivantes peuvent être
définies: définies:
* COMPOSER_PHP -- Version de PHP en dessous de laquelle COMPOSER_IMAGE
est utilisé. L'idée est que si la version de PHP installée est
suffisante, il n'est pas nécessaire de passer par une image docker.
Cette valeur doit être spécifiée avec le format de PHP_VERSION_ID i.e
70300 pour PHP 7.3
Spécifier 'any' ou 'force' pour forcer l'utilisation de l'image docker
* COMPOSER_IMAGE -- Image utilisée pour lancer composer. La valeur par * COMPOSER_IMAGE -- Image utilisée pour lancer composer. La valeur par
défaut est: défaut est:
$DEFAULT_COMPOSER_IMAGE $DEFAULT_COMPOSER_IMAGE
@ -167,11 +173,11 @@ COMMANDES
spécifiées y sont lancées. Ce container est réutilisé à chaque fois. spécifiées y sont lancées. Ce container est réutilisé à chaque fois.
Ce paramétrage est utilisé pour par exemple installer certains Ce paramétrage est utilisé pour par exemple installer certains
packages nécessaire au projet. packages nécessaire au projet.
La commande 'shell' est une extension qui lance un shell bash au lieu de La commande 'rshell' est une extension qui lance un shell bash au lieu
lancer la commande composer, ce qui permet de faire des opérations plus de lancer la commande composer, ce qui permet de faire des opérations
complexes si le besoin s'en fait sentir. NB: le shell est lancé avec plus complexes si le besoin s'en fait sentir. NB: le shell est lancé
l'utilisateur root. La commande alternative 'ushell' lance le shell avec avec l'utilisateur root. La commande alternative 'shell' lance le shell
le compte utilisateur. avec le compte utilisateur.
Pour faciliter l'utilisation dans un script, les premiers arguments Pour faciliter l'utilisation dans un script, les premiers arguments
peuvent être utilisés pour redéfinir les variables COMPOSER_*, e.g peuvent être utilisés pour redéfinir les variables COMPOSER_*, e.g
$scriptname composer COMPOSER_IMAGE=none install $scriptname composer COMPOSER_IMAGE=none install
@ -1275,12 +1281,12 @@ EOF
function default_local_composer() { function default_local_composer() {
# lancement direct # lancement direct
case "$1" in case "$1" in
rootshell|shell|rootbash|bash) rootshell|rshell|rootbash|rbash)
# ewarn parce qu'on est pas root dans ce shell contrairement à ce qui est demandé # ewarn parce qu'on est pas root dans ce shell contrairement à ce qui est demandé
ewarn "Lancement d'un shell utilisateur" ewarn "Lancement d'un shell utilisateur alors qu'un shell root est demandé"
bash "$@" bash "$@"
;; ;;
usershell|ushell|userbash|ubash) usershell|shell|userbash|bash)
estep "Lancement d'un shell utilisateur" estep "Lancement d'un shell utilisateur"
bash "$@" bash "$@"
;; ;;
@ -1303,11 +1309,11 @@ function default_docker_composer() {
setx group=id -gn; setx group=getent group "$group" setx group=id -gn; setx group=getent group "$group"
setx projdir=pwd setx projdir=pwd
case "$1" in case "$1" in
rootshell|shell|rootbash|bash) rootshell|rshell|rootbash|rbash)
actualcmd='eval "bash $args"' actualcmd='eval "bash $args"'
shift shift
;; ;;
usershell|ushell|userbash|ubash) usershell|shell|userbash|bash)
actualcmd='eval "su-exec \"$user\" bash $args"' actualcmd='eval "su-exec \"$user\" bash $args"'
shift shift
;; ;;
@ -1390,6 +1396,7 @@ fi
function local_composer() { default_local_composer "$@"; } function local_composer() { default_local_composer "$@"; }
function docker_composer() { default_docker_composer "$@"; } function docker_composer() { default_docker_composer "$@"; }
function auto_composer() { function auto_composer() {
local COMPOSER_PHP=
local COMPOSER_IMAGE="$DEFAULT_COMPOSER_IMAGE" local COMPOSER_IMAGE="$DEFAULT_COMPOSER_IMAGE"
local COMPOSER_MACHINE=-u local COMPOSER_MACHINE=-u
local COMPOSER_CMD= local COMPOSER_CMD=
@ -1398,6 +1405,7 @@ function auto_composer() {
# les premiers arguments peuvent service à redéfinir les variables # les premiers arguments peuvent service à redéfinir les variables
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
case "$1" in case "$1" in
COMPOSER_PHP=*) setv "$1"; shift;;
COMPOSER_IMAGE=*) setv "$1"; shift;; COMPOSER_IMAGE=*) setv "$1"; shift;;
COMPOSER_MACHINE=*) setv "$1"; shift;; COMPOSER_MACHINE=*) setv "$1"; shift;;
COMPOSER_CMD=*) setv "$1"; shift;; COMPOSER_CMD=*) setv "$1"; shift;;
@ -1406,10 +1414,27 @@ function auto_composer() {
esac esac
done done
if [ "$COMPOSER_IMAGE" == none ]; then local use_image
local_composer "$@" if [ -z "$COMPOSER_PHP" ]; then
# pas de version minimum, tester simplement la valeur de COMPOSER_IMAGE
[ "$COMPOSER_IMAGE" != none ] && use_image=1
elif [ "$COMPOSER_PHP" == force -o "$COMPOSER_PHP" == any ]; then
use_image=1
else else
# Vérifier la version de PHP
php -r '
$version = $argv[1];
if (strpos($version, ".") !== false) {
$version = explode(".", $version);
$version = $version[0] * 10000 + $version[1] * 100 + (isset($version[2])? $version[2]: 0);
}
exit((PHP_VERSION_ID < $version)? 0: 1);
' -- "$COMPOSER_PHP" && use_image=1
fi
if [ -n "$use_image" ]; then
[ "$COMPOSER_IMAGE" != none ] || die "Vous devez spécifier l'image à utiliser pour composer"
local PREVIOUS_DOCKER_MACHINE_NAME="$DOCKER_MACHINE_NAME" local PREVIOUS_DOCKER_MACHINE_NAME="$DOCKER_MACHINE_NAME"
if [ -n "$COMPOSER_MACHINE" -a "$DOCKER_MACHINE_NAME" != "$COMPOSER_MACHINE" ]; then if [ -n "$COMPOSER_MACHINE" -a "$DOCKER_MACHINE_NAME" != "$COMPOSER_MACHINE" ]; then
local -x DOCKER_TLS_VERIFY= DOCKER_HOST= DOCKER_CERT_PATH= DOCKER_MACHINE_NAME= local -x DOCKER_TLS_VERIFY= DOCKER_HOST= DOCKER_CERT_PATH= DOCKER_MACHINE_NAME=
@ -1424,6 +1449,8 @@ function auto_composer() {
fi fi
docker_composer "$@" docker_composer "$@"
else
local_composer "$@"
fi fi
} }
@ -1857,13 +1884,14 @@ 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|cs) composer|c|ci|cu|cr|cs)
build_set_options "$update_apps_mode" "$update_apps_origin" "$update_apps_branch" 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
[ -f build.scripts.sh ] && source ./build.scripts.sh [ -f build.scripts.sh ] && source ./build.scripts.sh
args=() args=()
if [ "$cmd" == ci ]; then args+=(install) if [ "$cmd" == ci ]; then args+=(install)
elif [ "$cmd" == cu ]; then args+=(update) elif [ "$cmd" == cu ]; then args+=(update)
elif [ "$cmd" == cr ]; then args+=(rshell)
elif [ "$cmd" == cs ]; then args+=(shell) elif [ "$cmd" == cs ]; then args+=(shell)
fi fi
while [ $# -gt 0 -a "$1" != -- ]; do while [ $# -gt 0 -a "$1" != -- ]; do