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
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
commandes 'ci', 'cu' et 'cs' sont respectivement des alias pour
'composer install', 'composer update' et 'composer shell'
commandes 'ci', 'cu', 'cr', 'cs' sont des alias pour 'composer install',
'composer update', 'composer rshell' et 'composer shell' respectivement
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
commande composer est lancée. Les variables suivantes peuvent être
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
défaut est:
$DEFAULT_COMPOSER_IMAGE
@ -167,11 +173,11 @@ COMMANDES
spécifiées y sont lancées. Ce container est réutilisé à chaque fois.
Ce paramétrage est utilisé pour par exemple installer certains
packages nécessaire au projet.
La commande 'shell' est une extension qui lance un shell bash au lieu de
lancer la commande composer, ce qui permet de faire des opérations plus
complexes si le besoin s'en fait sentir. NB: le shell est lancé avec
l'utilisateur root. La commande alternative 'ushell' lance le shell avec
le compte utilisateur.
La commande 'rshell' est une extension qui lance un shell bash au lieu
de lancer la commande composer, ce qui permet de faire des opérations
plus complexes si le besoin s'en fait sentir. NB: le shell est lancé
avec l'utilisateur root. La commande alternative 'shell' lance le shell
avec le compte utilisateur.
Pour faciliter l'utilisation dans un script, les premiers arguments
peuvent être utilisés pour redéfinir les variables COMPOSER_*, e.g
$scriptname composer COMPOSER_IMAGE=none install
@ -1275,12 +1281,12 @@ EOF
function default_local_composer() {
# lancement direct
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 "Lancement d'un shell utilisateur"
ewarn "Lancement d'un shell utilisateur alors qu'un shell root est demandé"
bash "$@"
;;
usershell|ushell|userbash|ubash)
usershell|shell|userbash|bash)
estep "Lancement d'un shell utilisateur"
bash "$@"
;;
@ -1303,11 +1309,11 @@ function default_docker_composer() {
setx group=id -gn; setx group=getent group "$group"
setx projdir=pwd
case "$1" in
rootshell|shell|rootbash|bash)
rootshell|rshell|rootbash|rbash)
actualcmd='eval "bash $args"'
shift
;;
usershell|ushell|userbash|ubash)
usershell|shell|userbash|bash)
actualcmd='eval "su-exec \"$user\" bash $args"'
shift
;;
@ -1390,6 +1396,7 @@ fi
function local_composer() { default_local_composer "$@"; }
function docker_composer() { default_docker_composer "$@"; }
function auto_composer() {
local COMPOSER_PHP=
local COMPOSER_IMAGE="$DEFAULT_COMPOSER_IMAGE"
local COMPOSER_MACHINE=-u
local COMPOSER_CMD=
@ -1398,6 +1405,7 @@ function auto_composer() {
# les premiers arguments peuvent service à redéfinir les variables
while [ $# -gt 0 ]; do
case "$1" in
COMPOSER_PHP=*) setv "$1"; shift;;
COMPOSER_IMAGE=*) setv "$1"; shift;;
COMPOSER_MACHINE=*) setv "$1"; shift;;
COMPOSER_CMD=*) setv "$1"; shift;;
@ -1406,10 +1414,27 @@ function auto_composer() {
esac
done
if [ "$COMPOSER_IMAGE" == none ]; then
local_composer "$@"
local use_image
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
# 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"
if [ -n "$COMPOSER_MACHINE" -a "$DOCKER_MACHINE_NAME" != "$COMPOSER_MACHINE" ]; then
local -x DOCKER_TLS_VERIFY= DOCKER_HOST= DOCKER_CERT_PATH= DOCKER_MACHINE_NAME=
@ -1424,6 +1449,8 @@ function auto_composer() {
fi
docker_composer "$@"
else
local_composer "$@"
fi
}
@ -1857,13 +1884,14 @@ NR == 1 { print; next }
"$DOCKER" container 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"
[ -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)
elif [ "$cmd" == cr ]; then args+=(rshell)
elif [ "$cmd" == cs ]; then args+=(shell)
fi
while [ $# -gt 0 -a "$1" != -- ]; do