Compare commits

...

13 Commits

Author SHA1 Message Date
cdb037c2a4 Bump version to 2.20.0 2022-07-06 00:43:26 +05:30
261f13a7c5 Add composer plugins to allow list before installing 2022-07-06 00:43:25 +05:30
9eaa66d89b Add support for event extension on unix 2022-07-05 16:22:07 +05:30
da9dfe4a71 Set RUNNER_TOOL_CACHE on self-hosted environments 2022-07-05 12:03:30 +05:30
a863ab6d3d Add support to allow composer plugins 2022-07-05 06:25:04 +05:30
050cb8061b Add coverage driver version in logs 2022-06-30 17:36:40 +05:30
3fda17f3fa Merge pull request #609 from dino182/develop
Fix Add-Path for self-hosted Windows
2022-06-27 17:24:50 +05:30
1a2cb4f872 Fix Add-Path for self-hosted Windows 2022-06-23 10:51:33 +01:00
4969814b69 Merge pull request #607 from markseuffert/patch-1
Updated documentation
2022-06-21 13:38:26 +05:30
07f2ea7d02 Updated documentation, review 2022-06-21 10:04:28 +02:00
a1c17b4b18 Updated documentation 2022-06-21 09:39:42 +02:00
3eda583472 Bump version to 2.19.1
Update Node.js dependencies
2022-06-06 08:22:16 +05:30
74d43be8a3 Fix support for deployer 2022-05-31 10:12:38 +05:30
17 changed files with 1091 additions and 1635 deletions

View File

@ -204,7 +204,7 @@ PHP extensions can be set up using the `extensions` input. It accepts a `string`
- These extensions have custom support:
- `cubrid`, `pdo_cubrid` and `gearman` on `Ubuntu`.
- `geos` on `Ubuntu` and `macOS`.
- `geos` and `event` on `Ubuntu` and `macOS`.
- `blackfire`, `couchbase`, `ioncube`, `oci8`, `pdo_firebird`, `pdo_oci`, `pecl_http`, `phalcon3` and `phalcon4` on all supported OS.
- By default, extensions which cannot be added or disabled gracefully leave an error message in the logs, the execution is not interrupted. To change this behaviour you can set `fail-fast` flag to `true`.
@ -264,7 +264,7 @@ These tools can be set up globally using the `tools` input. It accepts a string
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
- The latest stable version of `composer` is set up by default. You can set up the required `composer` version by specifying the major version `v1` or `v2`, or the version in `major.minor` or `semver` format, Additionally for composer `snapshot` and `preview` can also be specified to set up the respective releases.
- The latest stable version of `composer` is set up by default. You can set up the required `composer` version by specifying the major version `v1` or `v2`, or the version in `major.minor` or `semver` format. Additionally for composer `snapshot` and `preview` can also be specified to set up the respective releases.
```yaml
- name: Setup PHP with composer v2
@ -425,7 +425,7 @@ Disable coverage for these reasons:
- Specify the tools you want to set up.
- Accepts a `string` in csv-format. For example: `phpunit, phpcs`
- See [tools Support](#wrench-tools-support) for tools supported.
- See [tools support](#wrench-tools-support) for tools supported.
### Outputs
@ -680,7 +680,7 @@ act -P ubuntu-18.04=shivammathur/node:1804
### JIT Configuration
> Enable Just-in-time(JIT) on PHP 8.0 and above.
> Enable Just-in-time (JIT) on PHP 8.0 and above.
- To enable JIT, enable `opcache` in cli mode by setting `opcache.enable_cli=1`.
- JIT conflicts with `Xdebug`, `PCOV`, and other extensions which override `zend_execute_ex` function, so set `coverage: none` and disable any such extension if added.
@ -841,7 +841,7 @@ For examples refer to [cs2pr documentation](https://github.com/staabm/annotate-p
### Examples
Examples of using `setup-php` with various PHP Frameworks and Packages.
Examples of using `setup-php` with various PHP frameworks and packages.
| Framework/Package | Runs on | Workflow |
|----------------------------------------|---------------------------------|---------------------------------------------------------------------------------------------------------------|

View File

@ -4,6 +4,8 @@ describe('Config tests', () => {
it.each`
driver | php | os | output
${'PCOV'} | ${'7.4'} | ${'win32'} | ${'Add-Extension pcov,Disable-Extension xdebug false'}
${'pcov'} | ${'7.4'} | ${'win32'} | ${'$pcov_version = php -r "echo phpversion(\'pcov\');"'}
${'pcov'} | ${'7.4'} | ${'win32'} | ${'PCOV $pcov_version enabled as coverage driver'}
${'pcov'} | ${'7.0'} | ${'win32'} | ${'PHP 7.1 or newer is required'}
${'pcov'} | ${'5.6'} | ${'win32'} | ${'PHP 7.1 or newer is required'}
${'pcov'} | ${'7.4'} | ${'win32'} | ${'Add-Extension pcov,Disable-Extension xdebug false'}
@ -15,6 +17,8 @@ describe('Config tests', () => {
${'xdebug'} | ${'8.0'} | ${'linux'} | ${'add_extension xdebug'}
${'xdebug3'} | ${'8.0'} | ${'linux'} | ${'add_extension xdebug'}
${'xdebug2'} | ${'7.4'} | ${'linux'} | ${'add_pecl_extension xdebug 2.9.8 zend_extension'}
${'xdebug'} | ${'7.4'} | ${'linux'} | ${'xdebug_version="$(php -r "echo phpversion(\'xdebug\');")"'}
${'xdebug'} | ${'7.4'} | ${'linux'} | ${'Xdebug $xdebug_version enabled as coverage driver'}
${'xdebug'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug'}
${'xdebug3'} | ${'7.1'} | ${'darwin'} | ${'xdebug3 is not supported on PHP 7.1'}
${'xdebug2'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug2'}

View File

@ -45,7 +45,11 @@ jest.mock('../src/fetch', () => ({
.fn()
.mockImplementation(
async (url: string, token?: string): Promise<Record<string, string>> => {
if (url.includes('atom') && !url.includes('no-')) {
if (url.includes('deployer')) {
return {
data: '[{"version": "1.2.3", "url": "https://deployer.org/releases/v1.2.3/deployer.phar"}]'
};
} else if (url.includes('atom') && !url.includes('no-')) {
return {
data: '"releases/tag/1.2.3", "releases/tag/3.2.1", "releases/tag/2.3.1"'
};
@ -283,6 +287,7 @@ describe('Tools tests', () => {
version | url
${'latest'} | ${'https://deployer.org/deployer.phar'}
${'1.2.3'} | ${'https://deployer.org/releases/v1.2.3/deployer.phar'}
${'3.2.1'} | ${'Version missing in deployer manifest'}
`('checking addDeployer: $version', async ({version, url}) => {
const data = getData({
tool: 'deployer',

View File

@ -256,4 +256,13 @@ describe('Utils tests', () => {
'\nadd_extension_from_source ext https://sub.domain.XN--tld org repo release extension'
);
});
it('checking setVariable', async () => {
let script: string = await utils.setVariable('var', 'command', 'linux');
expect(script).toEqual('\nvar="$(command)"\n');
script = await utils.setVariable('var', 'command', 'darwin');
expect(script).toEqual('\nvar="$(command)"\n');
script = await utils.setVariable('var', 'command', 'win32');
expect(script).toEqual('\n$var = command\n');
});
});

108
dist/index.js vendored
View File

@ -135,7 +135,8 @@ async function addCoverageXdebug(extension, version, os, pipe) {
extension = extension == 'xdebug3' ? 'xdebug' : extension;
script +=
(await extensions.addExtension(extension, version, os, true)) + pipe;
message = 'Xdebug enabled as coverage driver';
script += await utils.setVariable('xdebug_version', 'php -r "echo phpversion(\'xdebug\');"', os);
message = 'Xdebug $xdebug_version enabled as coverage driver';
status = '$tick';
}
script += await utils.addLog(status, extension, message, os);
@ -152,7 +153,8 @@ async function addCoveragePCOV(version, os, pipe) {
script +=
(await extensions.addExtension('pcov', version, os, true)) + pipe;
script += (await config.addINIValues('pcov.enabled=1', os, true)) + '\n';
script += await utils.addLog('$tick', 'coverage: pcov', 'PCOV enabled as coverage driver', os);
script += await utils.setVariable('pcov_version', 'php -r "echo phpversion(\'pcov\');"', os);
script += await utils.addLog('$tick', 'coverage: pcov', 'PCOV $pcov_version enabled as coverage driver', os);
break;
case /5\.[3-6]|7\.0/.test(version):
script += await utils.addLog('$cross', 'pcov', 'PHP 7.1 or newer is required', os);
@ -243,7 +245,7 @@ async function addExtensionDarwin(extension_csv, version) {
add_script += await utils.parseExtensionSource(extension, ext_prefix);
return;
case /^(5\.[3-6]|7\.[0-4]|8\.[0-1])blackfire(-\d+\.\d+\.\d+)?$/.test(version_extension):
case /^couchbase|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(extension):
case /^couchbase|^event|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(extension):
case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
case /(5\.6|7\.[0-3])phalcon3|7\.[2-4]phalcon4/.test(version_extension):
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
@ -357,7 +359,7 @@ async function addExtensionLinux(extension_csv, version) {
return;
case /^(5\.[3-6]|7\.[0-4]|8\.[0-1])blackfire(-\d+\.\d+\.\d+)?$/.test(version_extension):
case /^((5\.[3-6])|(7\.[0-2]))pdo_cubrid$|^((5\.[3-6])|(7\.[0-4]))cubrid$/.test(version_extension):
case /^couchbase|^gearman$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(extension):
case /^couchbase|^event|^gearman$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(extension):
case /(?<!5\.[3-5])intl-[\d]+\.[\d]+$/.test(version_extension):
case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
@ -799,8 +801,17 @@ async function addDeployer(data) {
data['url'] = data['domain'] + '/deployer.phar';
}
else {
data['url'] =
data['domain'] + '/releases/v' + data['version'] + '/deployer.phar';
const manifest = await fetch.fetch('https://deployer.org/manifest.json');
const version_data = JSON.parse(manifest.data);
const version_key = Object.keys(version_data).find((key) => {
return version_data[key]['version'] === data['version'];
});
if (version_key) {
data['url'] = version_data[version_key]['url'];
}
else {
return await utils.addLog('$cross', 'deployer', 'Version missing in deployer manifest', data['os']);
}
}
return await addArchive(data);
}
@ -1004,7 +1015,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.parseExtensionSource = exports.customPackage = exports.scriptTool = exports.scriptExtension = exports.joins = exports.getCommand = exports.getUnsupportedLog = exports.suppressOutput = exports.getExtensionPrefix = exports.CSVArray = exports.extensionArray = exports.addLog = exports.stepLog = exports.log = exports.color = exports.asyncForEach = exports.parseIniFile = exports.parseVersion = exports.getManifestURL = exports.getInput = exports.readEnv = void 0;
exports.setVariable = exports.parseExtensionSource = exports.customPackage = exports.scriptTool = exports.scriptExtension = exports.joins = exports.getCommand = exports.getUnsupportedLog = exports.suppressOutput = exports.getExtensionPrefix = exports.CSVArray = exports.extensionArray = exports.addLog = exports.stepLog = exports.log = exports.color = exports.asyncForEach = exports.parseIniFile = exports.parseVersion = exports.getManifestURL = exports.getInput = exports.readEnv = void 0;
const path = __importStar(__nccwpck_require__(17));
const core = __importStar(__nccwpck_require__(186));
const fetch = __importStar(__nccwpck_require__(387));
@ -1244,6 +1255,17 @@ async function parseExtensionSource(extension, prefix) {
return await joins('\nadd_extension_from_source', ...matches.splice(1, matches.length), prefix);
}
exports.parseExtensionSource = parseExtensionSource;
async function setVariable(variable, command, os) {
switch (os) {
case 'win32':
return '\n$' + variable + ' = ' + command + '\n';
case 'linux':
case 'darwin':
default:
return '\n' + variable + '="$(' + command + ')"\n';
}
}
exports.setVariable = setVariable;
//# sourceMappingURL=utils.js.map
/***/ }),
@ -1672,6 +1694,13 @@ Object.defineProperty(exports, "summary", ({ enumerable: true, get: function ()
*/
var summary_2 = __nccwpck_require__(327);
Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return summary_2.markdownSummary; } }));
/**
* Path exports
*/
var path_utils_1 = __nccwpck_require__(981);
Object.defineProperty(exports, "toPosixPath", ({ enumerable: true, get: function () { return path_utils_1.toPosixPath; } }));
Object.defineProperty(exports, "toWin32Path", ({ enumerable: true, get: function () { return path_utils_1.toWin32Path; } }));
Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: function () { return path_utils_1.toPlatformPath; } }));
//# sourceMappingURL=core.js.map
/***/ }),
@ -1809,6 +1838,71 @@ exports.OidcClient = OidcClient;
/***/ }),
/***/ 981:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0;
const path = __importStar(__nccwpck_require__(17));
/**
* toPosixPath converts the given path to the posix form. On Windows, \\ will be
* replaced with /.
*
* @param pth. Path to transform.
* @return string Posix path.
*/
function toPosixPath(pth) {
return pth.replace(/[\\]/g, '/');
}
exports.toPosixPath = toPosixPath;
/**
* toWin32Path converts the given path to the win32 form. On Linux, / will be
* replaced with \\.
*
* @param pth. Path to transform.
* @return string Win32 path.
*/
function toWin32Path(pth) {
return pth.replace(/[/]/g, '\\');
}
exports.toWin32Path = toWin32Path;
/**
* toPlatformPath converts the given path to a platform-specific path. It does
* this by replacing instances of / and \ with the platform-specific path
* separator.
*
* @param pth The path to platformize.
* @return string The platform-specific path.
*/
function toPlatformPath(pth) {
return pth.replace(/[/\\]/g, path.sep);
}
exports.toPlatformPath = toPlatformPath;
//# sourceMappingURL=path-utils.js.map
/***/ }),
/***/ 327:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

2407
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "setup-php",
"version": "2.19.0",
"version": "2.20.0",
"private": false,
"description": "Setup PHP for use with GitHub Actions",
"main": "lib/install.js",
@ -34,28 +34,28 @@
"author": "shivammathur",
"license": "MIT",
"dependencies": {
"@actions/core": "^1.8.2",
"@actions/core": "^1.9.0",
"@actions/exec": "^1.1.1",
"@actions/io": "^1.1.2"
},
"devDependencies": {
"@types/jest": "^27.5.1",
"@types/node": "^17.0.36",
"@typescript-eslint/eslint-plugin": "^5.26.0",
"@typescript-eslint/parser": "^5.26.0",
"@types/jest": "^28.1.4",
"@types/node": "^18.0.1",
"@typescript-eslint/eslint-plugin": "^5.30.5",
"@typescript-eslint/parser": "^5.30.5",
"@vercel/ncc": "^0.34.0",
"eslint": "^8.16.0",
"eslint": "^8.19.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-jest": "^26.4.5",
"eslint-plugin-prettier": "^4.0.0",
"jest": "^28.1.0",
"jest-circus": "^28.1.0",
"nock": "^13.2.4",
"prettier": "^2.6.2",
"eslint-plugin-jest": "^26.5.3",
"eslint-plugin-prettier": "^4.2.1",
"jest": "^28.1.2",
"jest-circus": "^28.1.2",
"nock": "^13.2.8",
"prettier": "^2.7.1",
"simple-git-hooks": "^2.8.0",
"ts-jest": "^28.0.3",
"typescript": "^4.7.2"
"ts-jest": "^28.0.5",
"typescript": "^4.7.4"
},
"bugs": {
"url": "https://github.com/shivammathur/setup-php/issues"

View File

@ -1,6 +1,7 @@
amqp=amqp
apcu=apcu
couchbase=couchbase
event=event
expect=expect
gnupg=gnupg
grpc=grpc

View File

@ -38,7 +38,12 @@ export async function addCoverageXdebug(
extension = extension == 'xdebug3' ? 'xdebug' : extension;
script +=
(await extensions.addExtension(extension, version, os, true)) + pipe;
message = 'Xdebug enabled as coverage driver';
script += await utils.setVariable(
'xdebug_version',
'php -r "echo phpversion(\'xdebug\');"',
os
);
message = 'Xdebug $xdebug_version enabled as coverage driver';
status = '$tick';
}
script += await utils.addLog(status, extension, message, os);
@ -66,12 +71,16 @@ export async function addCoveragePCOV(
script +=
(await extensions.addExtension('pcov', version, os, true)) + pipe;
script += (await config.addINIValues('pcov.enabled=1', os, true)) + '\n';
script += await utils.setVariable(
'pcov_version',
'php -r "echo phpversion(\'pcov\');"',
os
);
// success
script += await utils.addLog(
'$tick',
'coverage: pcov',
'PCOV enabled as coverage driver',
'PCOV $pcov_version enabled as coverage driver',
os
);
// version is not supported

View File

@ -33,13 +33,13 @@ export async function addExtensionDarwin(
return;
// match 5.3blackfire...8.1blackfire
// match 5.3blackfire-(semver)...8.1blackfire-(semver)
// match couchbase, geos, pdo_oci, oci8, http, pecl_http
// match couchbase, event, geos, pdo_oci, oci8, http, pecl_http
// match 5.3ioncube...7.4ioncube
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
case /^(5\.[3-6]|7\.[0-4]|8\.[0-1])blackfire(-\d+\.\d+\.\d+)?$/.test(
version_extension
):
case /^couchbase|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
case /^couchbase|^event|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
extension
):
case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
@ -262,7 +262,7 @@ export async function addExtensionLinux(
case /^((5\.[3-6])|(7\.[0-2]))pdo_cubrid$|^((5\.[3-6])|(7\.[0-4]))cubrid$/.test(
version_extension
):
case /^couchbase|^gearman$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
case /^couchbase|^event|^gearman$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
extension
):
case /(?<!5\.[3-5])intl-[\d]+\.[\d]+$/.test(version_extension):

View File

@ -0,0 +1,50 @@
# Function to get event configure options
get_event_configure_opts() {
event_opts=(
--with-event-core
--with-event-extra
--with-event-openssl
--enable-event-sockets
)
if [ "$os" = 'Linux' ]; then
event_opts+=(
--with-openssl-dir=yes
--with-event-libevent-dir=/usr
)
else
event_opts+=(
--with-openssl-dir="$(brew --prefix openssl@1.1)"
--with-event-libevent-dir="$(brew --prefix libevent)"
)
fi
}
# Helper function to compile and install event
add_event_helper() {
local ext=$1
[[ "$ext" =~ ^event$ ]] && ext="event-$(get_pecl_version "event" "stable")"
event_opts=() && get_event_configure_opts
export EVENT_LINUX_LIBS='libevent-dev'
export EVENT_DARWIN_LIBS='libevent'
event_configure_opts="--with-php-config=$(command -v php-config) ${event_opts[*]}"
export EVENT_CONFIGURE_OPTS="$event_configure_opts"
add_extension_from_source event https://pecl.php.net event event "${ext##*-}" extension pecl
}
# Function to add event
add_event() {
local ext=$1
enable_extension "event" "extension"
if check_extension "event"; then
add_log "${tick:?}" "event" "Enabled"
else
if ! [[ "${version:?}" =~ ${old_versions:?} ]] && [ "$os" = "Darwin" ]; then
add_brew_extension event extension >/dev/null 2>&1
else
add_event_helper "$ext" >/dev/null 2>&1
fi
add_extension_log "event" "Installed and enabled"
fi
}
os="$(uname -s)"

View File

@ -37,7 +37,7 @@ Function Get-ToolVersion() {
[Parameter(Position = 1, Mandatory = $true)]
$param
)
$alp = "[a-zA-Z0-9]"
$alp = "[a-zA-Z0-9\.]"
$version_regex = "[0-9]+((\.{1}$alp+)+)(\.{0})(-$alp+){0,1}"
if($tool -eq 'composer') {
$composer_branch_alias = Select-String -Pattern "const\sBRANCH_ALIAS_VERSION" -Path $bin_dir\composer -Raw | Select-String -Pattern $version_regex | ForEach-Object { $_.matches.Value }
@ -67,6 +67,13 @@ Function Add-ToolsHelper() {
Edit-ComposerConfig $bin_dir\$tool
} elseif($tool -eq "cs2pr") {
(Get-Content $bin_dir/cs2pr).replace('exit(9)', 'exit(0)') | Set-Content $bin_dir/cs2pr
} elseif($tool -eq "deployer") {
if(Test-Path $composer_bin\deployer.phar.bat) {
Copy-Item $composer_bin\deployer.phar.bat -Destination $composer_bin\dep.bat
}
if(Test-Path $composer_bin\dep.bat) {
Copy-Item $composer_bin\dep.bat -Destination $composer_bin\deployer.bat
}
} elseif($tool -eq "phan") {
$extensions += @('fileinfo', 'ast')
} elseif($tool -eq "phinx") {
@ -175,6 +182,9 @@ Function Add-ComposertoolHelper() {
if(Test-Path $composer_lock) {
Remove-Item -Path $composer_lock -Force
}
if(composer global show $prefix$tool -a 2>&1 | findstr '^type *: *composer-plugin') {
composer global config --no-plugins allow-plugins."$prefix$tool" true >$null 2>&1
}
composer global require $prefix$release $composer_args >$null 2>&1
return composer global show $prefix$tool 2>&1 | findstr '^versions'
} else {
@ -182,6 +192,9 @@ Function Add-ComposertoolHelper() {
$scoped_dir_suffix = (Get-FileHash -InputStream $release_stream -Algorithm sha256).Hash
$scoped_dir = "$composer_bin\_tools\$tool-$scoped_dir_suffix"
$unix_scoped_dir = $scoped_dir.replace('\', '/')
if(composer show $prefix$tool -d $unix_scoped_dir -a 2>&1 | findstr '^type *: *composer-plugin') {
composer config -d $unix_scoped_dir --no-plugins allow-plugins."$prefix$release" true >$null 2>&1
}
if(-not(Test-Path $scoped_dir)) {
New-Item -ItemType Directory -Force -Path $scoped_dir > $null 2>&1
composer require $prefix$release -d $unix_scoped_dir $composer_args >$null 2>&1

View File

@ -9,7 +9,7 @@ export composer_lock="$composer_home/composer.lock"
get_tool_version() {
tool=$1
param=$2
alp="[a-zA-Z0-9]"
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")"
@ -61,6 +61,13 @@ add_tools_helper() {
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"
elif [ "$tool" = "deployer" ]; then
if [ -e "$composer_bin"/deployer.phar ]; then
sudo ln -s "$composer_bin"/deployer.phar "$composer_bin"/dep
fi
if [ -e "$composer_bin"/dep ]; then
sudo ln -s "$composer_bin"/dep "$composer_bin"/deployer
fi
elif [ "$tool" = "phan" ]; then
extensions+=(fileinfo ast)
elif [ "$tool" = "phinx" ]; then
@ -136,13 +143,19 @@ add_composertool_helper() {
enable_extensions curl mbstring openssl
if [ "$scope" = "global" ]; then
sudo rm -f "$composer_lock" >/dev/null 2>&1 || true
if composer global show "$prefix$tool" -a 2>&1 | grep -qE '^type *: *composer-plugin'; then
composer global config --no-plugins allow-plugins."$prefix$tool" true >/dev/null 2>&1
fi
composer global require "$prefix$release" "$composer_args" >/dev/null 2>&1
composer global show "$prefix$tool" 2>&1 | grep -E ^versions | sudo tee /tmp/composer.log >/dev/null 2>&1
composer global show "$prefix$tool" 2>&1 | grep -E ^versions | sudo tee /tmp/composer_show.log >/dev/null 2>&1
else
scoped_dir="$composer_bin/_tools/$tool-$(echo -n "$release" | shasum -a 256 | cut -d ' ' -f 1)"
if ! [ -d "$scoped_dir" ]; then
mkdir -p "$scoped_dir"
echo '{}' | tee "$scoped_dir/composer.json" >/dev/null
if composer show "$prefix$tool" -d "$scoped_dir" -a 2>&1 | grep -qE '^type *: *composer-plugin'; then
composer config -d "$scoped_dir" --no-plugins allow-plugins."$prefix$tool" true >/dev/null 2>&1
fi
composer require "$prefix$release" -d "$scoped_dir" "$composer_args" >/dev/null 2>&1
composer show "$prefix$tool" -d "$scoped_dir" 2>&1 | grep -E ^versions | sudo tee /tmp/composer.log >/dev/null 2>&1
fi

View File

@ -151,6 +151,7 @@ self_hosted_setup() {
exit 1
else
self_hosted_helper >/dev/null 2>&1
add_env RUNNER_TOOL_CACHE /tmp
fi
fi
}

View File

@ -88,6 +88,7 @@ Function Add-Path {
}
if ($env:GITHUB_PATH) {
Add-Content $PathItem -Path $env:GITHUB_PATH -Encoding utf8
$env:PATH += "$PathItem;"
} else {
$newPath = (Get-ItemProperty -Path 'hkcu:\Environment' -Name PATH).Path.replace("$PathItem;", '')
$newPath = $PathItem + ';' + $newPath
@ -295,6 +296,7 @@ if(-not($env:ImageOS) -and -not($env:ImageVersion)) {
New-Item $php_dir -Type Directory -Force > $null 2>&1
Add-Path -PathItem $php_dir
setx PHPROOT $php_dir >$null 2>&1
Add-Env -EnvName RUNNER_TOOL_CACHE -EnvValue $env:TEMP
} else {
$current_profile = "$PSHOME\Profile.ps1"
if(-not(Test-Path -LiteralPath $current_profile)) {

View File

@ -274,8 +274,25 @@ export async function addDeployer(data: RS): Promise<string> {
if (data['version'] === 'latest') {
data['url'] = data['domain'] + '/deployer.phar';
} else {
data['url'] =
data['domain'] + '/releases/v' + data['version'] + '/deployer.phar';
const manifest: RS = await fetch.fetch(
'https://deployer.org/manifest.json'
);
const version_data: RSRS = JSON.parse(manifest.data);
const version_key: string | undefined = Object.keys(version_data).find(
(key: string) => {
return version_data[key]['version'] === data['version'];
}
);
if (version_key) {
data['url'] = version_data[version_key]['url'];
} else {
return await utils.addLog(
'$cross',
'deployer',
'Version missing in deployer manifest',
data['os']
);
}
}
return await addArchive(data);
}

View File

@ -413,3 +413,26 @@ export async function parseExtensionSource(
prefix
);
}
/**
* Log to console
*
* @param variable
* @param command
* @param os
*/
export async function setVariable(
variable: string,
command: string,
os: string
): Promise<string> {
switch (os) {
case 'win32':
return '\n$' + variable + ' = ' + command + '\n';
case 'linux':
case 'darwin':
default:
return '\n' + variable + '="$(' + command + ')"\n';
}
}