mirror of
https://github.com/shivammathur/setup-php.git
synced 2025-11-12 20:23:00 +07:00
Refactor tools functions to add_tools scripts
This commit is contained in:
@ -1,13 +1,65 @@
|
||||
# Variables
|
||||
export tool_path_dir="/usr/local/bin"
|
||||
export composer_home="$HOME/.composer"
|
||||
export composer_bin="$composer_home/vendor/bin"
|
||||
export composer_json="$composer_home/composer.json"
|
||||
export composer_lock="$composer_home/composer.lock"
|
||||
|
||||
# Function to extract tool version.
|
||||
get_tool_version() {
|
||||
tool=$1
|
||||
param=$2
|
||||
alp="[a-zA-Z0-9]"
|
||||
version_regex="[0-9]+((\.{1}$alp+)+)(\.{0})(-$alp+){0,1}"
|
||||
if [ "$tool" = "composer" ]; then
|
||||
composer_alias_version="$(grep -Ea "const\sBRANCH_ALIAS_VERSION" "$tool_path_dir/composer" | grep -Eo "$version_regex")"
|
||||
if [[ -n "$composer_alias_version" ]]; then
|
||||
composer_version="$composer_alias_version+$(grep -Ea "const\sVERSION" "$tool_path_dir/composer" | grep -Eo "$alp+" | tail -n 1)"
|
||||
else
|
||||
composer_version="$(grep -Ea "const\sVERSION" "$tool_path_dir/composer" | grep -Eo "$version_regex")"
|
||||
fi
|
||||
echo "$composer_version" | sudo tee /tmp/composer_version
|
||||
else
|
||||
$tool "$param" 2>/dev/null | sed -Ee "s/[Cc]omposer(.)?$version_regex//g" | grep -Eo "$version_regex" | head -n 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to configure composer
|
||||
configure_composer() {
|
||||
tool_path=$1
|
||||
sudo ln -sf "$tool_path" "$tool_path.phar"
|
||||
php -r "try {\$p=new Phar('$tool_path.phar', 0);exit(0);} catch(Exception \$e) {exit(1);}"
|
||||
if [ $? -eq 1 ]; then
|
||||
add_log "${cross:?}" "composer" "Could not download composer"
|
||||
exit 1
|
||||
fi
|
||||
if ! [ -d "$composer_home" ]; then
|
||||
sudo -u "$(id -un)" -g "$(id -gn)" mkdir -p -m=00755 "$composer_home"
|
||||
else
|
||||
sudo chown -R "$(id -un)":"$(id -gn)" "$composer_home"
|
||||
fi
|
||||
if ! [ -e "$composer_json" ]; then
|
||||
echo '{}' | tee "$composer_json" >/dev/null
|
||||
chmod 644 "$composer_json"
|
||||
fi
|
||||
cat "${dist:?}"/../src/configs/composer.env >> "$GITHUB_ENV"
|
||||
echo "$composer_bin" >>"$GITHUB_PATH"
|
||||
if [ -n "$COMPOSER_TOKEN" ]; then
|
||||
composer -q config -g github-oauth.github.com "$COMPOSER_TOKEN"
|
||||
fi
|
||||
}
|
||||
|
||||
# Helper function to configure tools.
|
||||
add_tools_helper() {
|
||||
tool=$1
|
||||
if [ "$tool" = "codeception" ]; then
|
||||
codeception_bin=$(grep codeception_bin "${GITHUB_ENV:?}" | cut -d '=' -f 2)
|
||||
sudo ln -s "${codeception_bin:?}"/codecept "${codeception_bin:?}"/codeception
|
||||
sudo ln -s "$codeception_bin"/codecept "$codeception_bin"/codeception
|
||||
elif [ "$tool" = "composer" ]; then
|
||||
configure_composer "${tool_path:?}"
|
||||
configure_composer "$tool_path"
|
||||
elif [ "$tool" = "cs2pr" ]; then
|
||||
sudo sed -i 's/\r$//; s/exit(9)/exit(0)/' "${tool_path:?}" 2>/dev/null ||
|
||||
sudo sed -i '' 's/\r$//; s/exit(9)/exit(0)/' "${tool_path:?}"
|
||||
sudo sed -i 's/\r$//; s/exit(9)/exit(0)/' "$tool_path" 2>/dev/null ||
|
||||
sudo sed -i '' 's/\r$//; s/exit(9)/exit(0)/' "$tool_path"
|
||||
elif [ "$tool" = "phan" ]; then
|
||||
add_extension fileinfo extension >/dev/null 2>&1
|
||||
add_extension ast extension >/dev/null 2>&1
|
||||
@ -17,13 +69,92 @@ add_tools_helper() {
|
||||
add_extension xml extension >/dev/null 2>&1
|
||||
elif [ "$tool" = "phpDocumentor" ]; then
|
||||
add_extension fileinfo extension >/dev/null 2>&1
|
||||
sudo ln -s "${tool_path:?}" "${tool_path_dir:?}"/phpdocumentor 2>/dev/null || true
|
||||
sudo ln -s "${tool_path:?}" "${tool_path_dir:?}"/phpdoc
|
||||
sudo ln -s "$tool_path" "$tool_path_dir"/phpdocumentor 2>/dev/null || true
|
||||
sudo ln -s "$tool_path" "$tool_path_dir"/phpdoc
|
||||
elif [[ "$tool" =~ phpunit(-polyfills)?$ ]]; then
|
||||
if [ -e "${tool_path_dir:?}"/phpunit ]; then
|
||||
sudo cp "${tool_path_dir:?}"/phpunit "${composer_bin:?}"
|
||||
if [ -e "$tool_path_dir"/phpunit ]; then
|
||||
sudo cp "$tool_path_dir"/phpunit "$composer_bin"
|
||||
fi
|
||||
elif [[ "$tool" =~ (symfony|vapor|wp)-cli ]]; then
|
||||
sudo ln -s "${tool_path:?}" "${tool_path_dir:?}"/"${tool%-*}"
|
||||
sudo ln -s "$tool_path" "$tool_path_dir"/"${tool%-*}"
|
||||
fi
|
||||
}
|
||||
}
|
||||
|
||||
# Function to setup a remote tool.
|
||||
add_tool() {
|
||||
url=$1
|
||||
tool=$2
|
||||
ver_param=$3
|
||||
tool_path="$tool_path_dir/$tool"
|
||||
if ! [[ "$PATH" =~ $tool_path_dir ]]; then
|
||||
export PATH=$PATH:"$tool_path_dir"
|
||||
echo "export PATH=\$PATH:$tool_path_dir" | sudo tee -a "$GITHUB_ENV" >/dev/null
|
||||
fi
|
||||
if [ -e "$tool_path" ]; then
|
||||
sudo cp -a "$tool_path" /tmp/"$tool"
|
||||
fi
|
||||
IFS="," read -r -a url <<<"$url"
|
||||
status_code=$(get -v -e "$tool_path" "${url[@]}")
|
||||
if [ "$status_code" != "200" ] && [[ "${url[0]}" =~ .*github.com.*releases.*latest.* ]]; then
|
||||
url[0]="${url[0]//releases\/latest\/download/releases/download/$(get -s -n "" "$(echo "${url[0]}" | cut -d '/' -f '1-5')/releases" | grep -Eo -m 1 "([0-9]+\.[0-9]+\.[0-9]+)/$(echo "${url[0]}" | sed -e "s/.*\///")" | cut -d '/' -f 1)}"
|
||||
status_code=$(get -v -e "$tool_path" "${url[0]}")
|
||||
fi
|
||||
if [ "$status_code" = "200" ]; then
|
||||
add_tools_helper "$tool"
|
||||
tool_version=$(get_tool_version "$tool" "$ver_param")
|
||||
add_log "${tick:?}" "$tool" "Added $tool $tool_version"
|
||||
else
|
||||
if [ "$tool" = "composer" ]; then
|
||||
export fail_fast=true
|
||||
elif [ -e /tmp/"$tool" ]; then
|
||||
sudo cp -a /tmp/"$tool" "$tool_path"
|
||||
fi
|
||||
add_log "$cross" "$tool" "Could not setup $tool"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup a tool using composer in a different scope.
|
||||
add_scoped_composertool() {
|
||||
tool=$1
|
||||
release=$2
|
||||
prefix=$3
|
||||
scoped_dir="$composer_bin/_tools/$tool-$(echo -n "$release" | shasum -a 256 | cut -d ' ' -f 1)"
|
||||
if ! [ -e "$scoped_dir" ]; then
|
||||
mkdir -p "$scoped_dir"
|
||||
composer require "$prefix$release" -d "$scoped_dir" 2>&1 | tee /tmp/composer.log >/dev/null 2>&1
|
||||
export PATH=$PATH:"$scoped_dir"/vendor/bin
|
||||
echo "${tool}"_bin="$scoped_dir"/vendor/bin | sudo tee -a "$GITHUB_ENV" >/dev/null
|
||||
echo "$scoped_dir"/vendor/bin >>"$GITHUB_PATH"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup a tool using composer.
|
||||
add_composertool() {
|
||||
tool=$1
|
||||
release=$2
|
||||
prefix=$3
|
||||
scope=$4
|
||||
if [[ "$tool" =~ prestissimo|composer-prefetcher ]]; then
|
||||
composer_version=$(cat /tmp/composer_version)
|
||||
if [ "$(echo "$composer_version" | cut -d'.' -f 1)" != "1" ]; then
|
||||
echo "::warning:: Skipping $tool, as it does not support Composer $composer_version. Specify composer:v1 in tools to use $tool"
|
||||
add_log "$cross" "$tool" "Skipped"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
(
|
||||
if [ "$scope" = "global" ]; then
|
||||
sudo rm -f "$composer_lock" >/dev/null 2>&1 || true
|
||||
composer global require "$prefix$release" 2>&1 | tee /tmp/composer.log >/dev/null 2>&1
|
||||
else
|
||||
add_scoped_composertool "$tool" "$release" "$prefix"
|
||||
fi
|
||||
log=$(grep "$prefix$tool" /tmp/composer.log) &&
|
||||
tool_version=$(get_tool_version 'echo' "$log") &&
|
||||
add_log "$tick" "$tool" "Added $tool $tool_version"
|
||||
) || add_log "$cross" "$tool" "Could not setup $tool"
|
||||
add_tools_helper "$tool"
|
||||
if [ -e "$composer_bin/composer" ]; then
|
||||
sudo cp -p "$tool_path_dir/composer" "$composer_bin"
|
||||
fi
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user