mirror of
https://github.com/shivammathur/setup-php.git
synced 2025-08-15 10:04:41 +07:00
Scope binary tools installed using composer
This commit is contained in:
@ -107,54 +107,66 @@
|
||||
},
|
||||
"behat": {
|
||||
"type": "composer",
|
||||
"repository": "behat/behat"
|
||||
"repository": "behat/behat",
|
||||
"scope": "scoped"
|
||||
},
|
||||
"codeception": {
|
||||
"type": "composer",
|
||||
"repository": "codeception/codeception"
|
||||
"repository": "codeception/codeception",
|
||||
"scope": "scoped"
|
||||
},
|
||||
"automatic-composer-prefetcher": {
|
||||
"type": "composer",
|
||||
"alias": "composer-prefetcher",
|
||||
"repository": "narrowspark/automatic-composer-prefetcher"
|
||||
"repository": "narrowspark/automatic-composer-prefetcher",
|
||||
"scope": "global"
|
||||
},
|
||||
"composer-require-checker": {
|
||||
"type": "composer",
|
||||
"repository": "maglnet/composer-require-checker"
|
||||
"repository": "maglnet/composer-require-checker",
|
||||
"scope": "scoped"
|
||||
},
|
||||
"composer-unused": {
|
||||
"type": "composer",
|
||||
"repository": "icanhazstring/composer-unused"
|
||||
"repository": "icanhazstring/composer-unused",
|
||||
"scope": "scoped"
|
||||
},
|
||||
"flex": {
|
||||
"type": "composer",
|
||||
"repository": "symfony/flex"
|
||||
"repository": "symfony/flex",
|
||||
"scope": "global"
|
||||
},
|
||||
"phinx": {
|
||||
"type": "composer",
|
||||
"repository": "robmorgan/phinx"
|
||||
"repository": "robmorgan/phinx",
|
||||
"scope": "scoped"
|
||||
},
|
||||
"phplint": {
|
||||
"type": "composer",
|
||||
"repository": "overtrue/phplint"
|
||||
"repository": "overtrue/phplint",
|
||||
"scope": "scoped"
|
||||
},
|
||||
"phpunit-bridge": {
|
||||
"alias": "simple-phpunit",
|
||||
"type": "composer",
|
||||
"repository": "symfony/phpunit-bridge"
|
||||
"repository": "symfony/phpunit-bridge",
|
||||
"scope": "global"
|
||||
},
|
||||
"phpunit-polyfills": {
|
||||
"type": "composer",
|
||||
"repository": "yoast/phpunit-polyfills"
|
||||
"repository": "yoast/phpunit-polyfills",
|
||||
"scope": "global"
|
||||
},
|
||||
"prestissimo": {
|
||||
"type": "composer",
|
||||
"repository": "hirak/prestissimo"
|
||||
"repository": "hirak/prestissimo",
|
||||
"scope": "global"
|
||||
},
|
||||
"vapor-cli": {
|
||||
"type": "composer",
|
||||
"alias": "vapor",
|
||||
"repository": "laravel/vapor-cli"
|
||||
"repository": "laravel/vapor-cli",
|
||||
"scope": "scoped"
|
||||
},
|
||||
"blackfire": {
|
||||
"type": "custom-package",
|
||||
|
@ -13,6 +13,7 @@
|
||||
"fetch_latest": "true",
|
||||
"function": "function_name",
|
||||
"repository": "user/tool",
|
||||
"scope": "global, scoped",
|
||||
"type": "phar, composer, custom-package or custom-function",
|
||||
"version_parameter": "--version",
|
||||
"version_prefix": "v"
|
||||
@ -76,6 +77,16 @@
|
||||
"user/tool"
|
||||
]
|
||||
},
|
||||
"scope": {
|
||||
"$id": "#/items/properties/scope",
|
||||
"type": "string",
|
||||
"title": "The scope schema",
|
||||
"description": "Scope of tool installation: global or scoped",
|
||||
"enum": [
|
||||
"global",
|
||||
"scoped"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"$id": "#/items/properties/type",
|
||||
"type": "string",
|
||||
|
@ -331,6 +331,7 @@ 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
|
||||
@ -340,8 +341,19 @@ add_composertool() {
|
||||
fi
|
||||
fi
|
||||
(
|
||||
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
|
||||
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
|
||||
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
|
||||
fi
|
||||
log=$(grep "$prefix$tool" /tmp/composer.log) &&
|
||||
tool_version=$(get_tool_version 'echo' "$log") &&
|
||||
add_log "$tick" "$tool" "Added $tool $tool_version"
|
||||
|
@ -5,7 +5,7 @@ Function Add-ToolsHelper() {
|
||||
$tool
|
||||
)
|
||||
if($tool -eq "codeception") {
|
||||
Copy-Item $composer_bin\codecept.bat -Destination $composer_bin\codeception.bat
|
||||
Copy-Item $codeception_bin\codecept.bat -Destination $codeception_bin\codeception.bat
|
||||
} elseif($tool -eq "composer") {
|
||||
Edit-ComposerConfig $bin_dir\$tool
|
||||
} elseif($tool -eq "cs2pr") {
|
||||
@ -22,7 +22,7 @@ Function Add-ToolsHelper() {
|
||||
Add-ToProfile $current_profile "symfony" "New-Alias symfony $bin_dir\symfony-cli.exe"
|
||||
Add-ToProfile $current_profile "symfony_cli" "New-Alias symfony-cli $bin_dir\symfony-cli.exe"
|
||||
} elseif($tool -match "vapor-cli") {
|
||||
Copy-Item $composer_bin\vapor.bat -Destination $composer_bin\vapor-cli.bat
|
||||
Copy-Item $vapor_cli_bin\vapor.bat -Destination $vapor_cli_bin\vapor-cli.bat
|
||||
} elseif($tool -eq "wp-cli") {
|
||||
Copy-Item $bin_dir\wp-cli.bat -Destination $bin_dir\wp.bat
|
||||
}
|
||||
|
@ -1,7 +1,8 @@
|
||||
add_tools_helper() {
|
||||
tool=$1
|
||||
if [ "$tool" = "codeception" ]; then
|
||||
sudo ln -s "${composer_bin:?}"/codecept "${composer_bin:?}"/codeception
|
||||
codeception_bin=$(grep codeception_bin "${GITHUB_ENV:?}" | cut -d '=' -f 2)
|
||||
sudo ln -s "${codeception_bin:?}"/codecept "${codeception_bin:?}"/codeception
|
||||
elif [ "$tool" = "composer" ]; then
|
||||
configure_composer "${tool_path:?}"
|
||||
elif [ "$tool" = "cs2pr" ]; then
|
||||
|
@ -423,18 +423,36 @@ Function Add-Composertool() {
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$prefix
|
||||
$prefix,
|
||||
[Parameter(Position = 3, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$scope
|
||||
)
|
||||
if($tool -match "prestissimo|composer-prefetcher" -and $composer_version.split('.')[0] -ne "1") {
|
||||
Write-Output "::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
|
||||
}
|
||||
if(Test-Path $composer_lock) {
|
||||
Remove-Item -Path $composer_lock -Force
|
||||
if($scope -eq 'global') {
|
||||
if(Test-Path $composer_lock) {
|
||||
Remove-Item -Path $composer_lock -Force
|
||||
}
|
||||
(composer global require $prefix$release 2>&1 | Tee-Object -FilePath $env:APPDATA\Composer\composer.log) >$null 2>&1
|
||||
$json = findstr $prefix$tool $env:APPDATA\Composer\composer.json
|
||||
} else {
|
||||
$release_stream = [System.IO.MemoryStream]::New([System.Text.Encoding]::ASCII.GetBytes($release))
|
||||
$scoped_tool_dir_suffix = (Get-FileHash -InputStream $release_stream -Algorithm sha256).Hash
|
||||
$scoped_tool_dir = "$composer_bin\_tools\$tool-$scoped_tool_dir_suffix"
|
||||
if(-not(Test-Path $scoped_tool_dir)) {
|
||||
New-Item -ItemType Directory -Force -Path $scoped_tool_dir > $null 2>&1
|
||||
(composer global require $prefix$release -d $scoped_tool_dir.replace('\', '/') 2>&1 | Tee-Object -FilePath $env:APPDATA\Composer\composer.log) >$null 2>&1
|
||||
Add-Content $scoped_tool_dir\vendor\bin -Path $env:GITHUB_PATH -Encoding utf8
|
||||
New-Variable -Name ($tool.replace('-', '_') + '_bin') -Value $scoped_tool_dir\vendor\bin
|
||||
}
|
||||
$json = (Test-Path $scoped_tool_dir\composer.json) -and (findstr $prefix$tool $scoped_tool_dir\composer.json)
|
||||
}
|
||||
(composer global require $prefix$release 2>&1 | Tee-Object -FilePath $env:APPDATA\Composer\composer.log) >$null 2>&1
|
||||
$json = findstr $prefix$tool $env:APPDATA\Composer\composer.json
|
||||
$log = findstr $prefix$tool $env:APPDATA\Composer\composer.log
|
||||
if(Test-Path $composer_bin\composer) {
|
||||
Copy-Item -Path "$bin_dir\composer" -Destination "$composer_bin\composer" -Force
|
||||
|
@ -193,7 +193,13 @@ export async function addArchive(data: RS): Promise<string> {
|
||||
export async function addPackage(data: RS): Promise<string> {
|
||||
const command = await utils.getCommand(data['os_version'], 'composertool');
|
||||
const parts: string[] = data['repository'].split('/');
|
||||
return command + parts[1] + ' ' + data['release'] + ' ' + parts[0] + '/';
|
||||
const args: string = await utils.joins(
|
||||
parts[1],
|
||||
data['release'],
|
||||
parts[0] + '/',
|
||||
data['scope']
|
||||
);
|
||||
return command + args;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -443,6 +449,7 @@ export async function getData(
|
||||
data['prefix'] = data['github'] === data['domain'] ? 'releases' : '';
|
||||
data['verb'] = data['github'] === data['domain'] ? 'download' : '';
|
||||
data['fetch_latest'] ??= 'false';
|
||||
data['scope'] ??= 'global';
|
||||
data['version_parameter'] = JSON.stringify(data['version_parameter']) || '';
|
||||
data['version_prefix'] ??= '';
|
||||
data['release'] = await getRelease(release, data);
|
||||
|
Reference in New Issue
Block a user