38 lines
1.4 KiB
Django/Jinja
38 lines
1.4 KiB
Django/Jinja
#!/bin/bash
|
|
#
|
|
# Lenvi Smart Composer Wrapper
|
|
#
|
|
# This script automatically detects the required PHP version for a project
|
|
# by looking for a `Lenvi.yaml` file and uses the correct PHP binary.
|
|
|
|
# The real composer binary
|
|
COMPOSER_PHAR="/usr/local/bin/composer.phar"
|
|
DEFAULT_PHP_BINARY="/usr/bin/php"
|
|
PHP_BINARY=""
|
|
|
|
# Find the project root by looking for a Lenvi.yaml file in parent directories
|
|
SEARCH_DIR=$(pwd)
|
|
while [[ "$SEARCH_DIR" != "" && ! -f "$SEARCH_DIR/Lenvi.yaml" ]]; do
|
|
SEARCH_DIR=${SEARCH_DIR%/*}
|
|
done
|
|
|
|
if [[ -f "$SEARCH_DIR/Lenvi.yaml" ]]; then
|
|
# We found a config file, let's find the PHP version for the current directory
|
|
CURRENT_PROJECT_ROOT=$(pwd)
|
|
PHP_VERSION=$(yq eval '.sites[] | select(.project_root == "'"$CURRENT_PROJECT_ROOT"'") | .php_version' "$SEARCH_DIR/Lenvi.yaml")
|
|
|
|
if [[ -n "$PHP_VERSION" && -x "/usr/bin/php$PHP_VERSION" ]]; then
|
|
# Version found and the corresponding PHP binary exists
|
|
PHP_BINARY="/usr/bin/php$PHP_VERSION"
|
|
echo "Lenvi: Found project configuration. Using PHP $PHP_VERSION..." >&2
|
|
fi
|
|
fi
|
|
|
|
# If no specific PHP binary was found, use the system default
|
|
if [[ -z "$PHP_BINARY" ]]; then
|
|
echo "Lenvi: No project configuration found. Using default system PHP." >&2
|
|
PHP_BINARY="$DEFAULT_PHP_BINARY"
|
|
fi
|
|
|
|
# Execute the real Composer with the determined PHP version and pass all arguments
|
|
exec "$PHP_BINARY" "$COMPOSER_PHAR" "$@" |