composer wrapper update

This commit is contained in:
marito 2025-06-15 11:52:37 +08:00
parent be3095e000
commit 502e4efb73

View File

@ -1,38 +1,36 @@
#!/bin/bash #!/bin/bash
# Lenvi Smart Composer Wrapper #
# Lenvi Smart Composer Wrapper (v2)
#
# This script automatically detects the required PHP version for a project # This script automatically detects the required PHP version for a project
# by looking for a `Lenvi.yaml` file and uses the correct PHP binary. # by reading a central Lenvi.yaml file and uses the correct PHP binary.
# --- The real composer binary and default PHP ---
COMPOSER_PHAR="/usr/local/bin/composer.phar" COMPOSER_PHAR="/usr/local/bin/composer.phar"
DEFAULT_PHP_BINARY="/usr/bin/php" DEFAULT_PHP_BINARY="/usr/bin/php"
PHP_BINARY="" PHP_BINARY=""
# Find the Lenvi.yaml file by looking in parent directories # --- The EXACT path to the configuration file, baked in by Ansible ---
LENVI_CONFIG_FILE="" LENVI_CONFIG_FILE="{{ playbook_dir }}/Lenvi.yaml"
SEARCH_DIR=$(pwd)
while [[ "$SEARCH_DIR" != "" && ! -f "$SEARCH_DIR/Lenvi.yaml" ]]; do
SEARCH_DIR=${SEARCH_DIR%/*}
done
if [[ -f "$SEARCH_DIR/Lenvi.yaml" ]]; then # Check if the central config file actually exists
LENVI_CONFIG_FILE="$SEARCH_DIR/Lenvi.yaml" if [[ -f "$LENVI_CONFIG_FILE" ]]; then
fi # We have the config file, now find the PHP version for the current project directory
if [[ -n "$LENVI_CONFIG_FILE" ]]; then
# We found a config file, now find the PHP version for the current project directory
CURRENT_PROJECT_ROOT=$(pwd) CURRENT_PROJECT_ROOT=$(pwd)
PHP_VERSION=$(yq eval '.sites[] | select(.project_root == "'"$CURRENT_PROJECT_ROOT"'") | .php_version' "$LENVI_CONFIG_FILE") PHP_VERSION=$(yq eval '.sites[] | select(.project_root == "'"$CURRENT_PROJECT_ROOT"'") | .php_version' "$LENVI_CONFIG_FILE")
if [[ -n "$PHP_VERSION" && -x "/usr/bin/php$PHP_VERSION" ]]; then 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" PHP_BINARY="/usr/bin/php$PHP_VERSION"
echo "Lenvi: Project found. Using PHP $PHP_VERSION..." >&2 echo "Lenvi: Project configuration found. Using PHP $PHP_VERSION..." >&2
fi fi
fi fi
# If no specific PHP binary was found, use the system default # If no specific PHP binary was found after checking, use the system default
if [[ -z "$PHP_BINARY" ]]; then if [[ -z "$PHP_BINARY" ]]; then
echo "Lenvi: No project configuration found for this directory. Using default system PHP." >&2 echo "Lenvi: No specific project configuration found for this directory. Using default system PHP." >&2
PHP_BINARY="$DEFAULT_PHP_BINARY" PHP_BINARY="$DEFAULT_PHP_BINARY"
fi fi
# Execute the real Composer with the determined PHP version and pass all arguments
exec "$PHP_BINARY" "$COMPOSER_PHAR" "$@" exec "$PHP_BINARY" "$COMPOSER_PHAR" "$@"