mirror of
https://github.com/shivammathur/setup-php.git
synced 2025-07-25 16:19:08 +07:00
Compare commits
24 Commits
Author | SHA1 | Date | |
---|---|---|---|
947009a717 | |||
ca910e5511 | |||
f31d416e6e | |||
36cb9fb0fc | |||
6a8a2abd3c | |||
c88f07696b | |||
0b33ef444f | |||
604ffba8e1 | |||
a3727c20a4 | |||
6a9b0017a4 | |||
3b2ce6cae6 | |||
c61b9256d1 | |||
09e08a3554 | |||
f31bef6a30 | |||
1a216636c5 | |||
7eec3d790d | |||
5afed16e5f | |||
14fa980966 | |||
39491a0fba | |||
c6b6dabbb9 | |||
e1a9afe11c | |||
6449431df2 | |||
60ff774608 | |||
dd591f1661 |
4
.github/workflows/docs.yml
vendored
4
.github/workflows/docs.yml
vendored
@ -10,7 +10,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
operating-system: [ubuntu-20.04, ubuntu-18.04, ubuntu-16.04, windows-2019, macos-10.15]
|
||||
operating-system: [ubuntu-20.04, ubuntu-18.04, windows-2019, macos-10.15]
|
||||
php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1']
|
||||
steps:
|
||||
- name: Setup PHP
|
||||
@ -59,7 +59,7 @@ jobs:
|
||||
run: |
|
||||
git config --local user.email "${{ secrets.email }}"
|
||||
git config --local user.name "${{ github.repository_owner }}"
|
||||
for os in ubuntu-20.04 ubuntu-18.04 ubuntu-16.04 windows-2019 macos-10.15 macos-11.0; do
|
||||
for os in ubuntu-20.04 ubuntu-18.04 windows-2019 macos-10.15 macos-11.0; do
|
||||
echo "These are extensions which are loaded by default on the following PHP versions. More extensions which are available as packages and available on pecl are supported by setup-php. Refer to [php extension support](https://github.com/shivammathur/setup-php#heavy_plus_sign-php-extension-support) for more details." > Php-extensions-loaded-on-"$os".md
|
||||
for version in 5.3 5.4 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 8.1; do
|
||||
if [ "$os" = "macos-11.0" ]; then
|
||||
|
2
.github/workflows/workflow.yml
vendored
2
.github/workflows/workflow.yml
vendored
@ -24,7 +24,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
operating-system: [ubuntu-20.04, ubuntu-18.04, ubuntu-16.04, windows-latest, macos-latest]
|
||||
operating-system: [ubuntu-20.04, ubuntu-18.04, windows-latest, macos-latest]
|
||||
php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1']
|
||||
env:
|
||||
extensions: xml, opcache, xdebug, pcov
|
||||
|
95
README.md
95
README.md
@ -12,10 +12,10 @@
|
||||
<a href="https://github.com/shivammathur/setup-php/blob/master/LICENSE" title="license"><img alt="LICENSE" src="https://img.shields.io/badge/license-MIT-428f7e.svg?logo=open%20source%20initiative&logoColor=white&labelColor=555555"></a>
|
||||
<a href="#tada-php-support" title="PHP Versions Supported"><img alt="PHP Versions Supported" src="https://img.shields.io/badge/php-5.3%20to%208.1-777bb3.svg?logo=php&logoColor=white&labelColor=555555"></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<p align="center">
|
||||
<a href="https://reddit.com/r/setup_php" title="setup-php reddit"><img alt="setup-php reddit" src="https://img.shields.io/badge/reddit-join-FF5700?logo=reddit&logoColor=FF5700&labelColor=555555"></a>
|
||||
<a href="https://twitter.com/setup_php" title="setup-php twitter"><img alt="setup-php twitter" src="https://img.shields.io/badge/twitter-follow-1DA1F2?logo=twitter&logoColor=1DA1F2&labelColor=555555"></a>
|
||||
<a href="https://setup-php.statuspage.io/" title="setup-php status"><img alt="setup-php status" src="https://img.shields.io/badge/status-subscribe-28A745?logo=statuspage&logoColor=28A745&labelColor=555555"></a>
|
||||
<a href="https://status.setup-php.com" title="setup-php status"><img alt="setup-php status" src="https://img.shields.io/badge/status-subscribe-28A745?logo=statuspage&logoColor=28A745&labelColor=555555"></a>
|
||||
</p>
|
||||
|
||||
Setup PHP with required extensions, php.ini configuration, code-coverage support and various tools like composer in [GitHub Actions](https://github.com/features/actions "GitHub Actions"). This action gives you a cross platform interface to set up the PHP environment you need to test your application. Refer to [Usage](#memo-usage "How to use this") section and [examples](#examples "Examples of use") to see how to use this.
|
||||
@ -34,6 +34,7 @@ Setup PHP with required extensions, php.ini configuration, code-coverage support
|
||||
- [Disable Coverage](#disable-coverage)
|
||||
- [Usage](#memo-usage)
|
||||
- [Inputs](#inputs)
|
||||
- [Outputs](#outputs)
|
||||
- [Flags](#flags)
|
||||
- [Basic Setup](#basic-setup)
|
||||
- [Matrix Setup](#matrix-setup)
|
||||
@ -66,7 +67,6 @@ Both `GitHub-hosted` and `self-hosted` runners are suppported by `setup-php` on
|
||||
|
||||
|Virtual environment|YAML workflow label|Pre-installed PHP|
|
||||
|--- |--- |--- |
|
||||
|Ubuntu 16.04 [(deprecated)](https://setup-php.com/i/452)|`ubuntu-16.04`|`PHP 5.6` to `PHP 8.0`|
|
||||
|Ubuntu 18.04|`ubuntu-18.04`|`PHP 7.1` to `PHP 8.0`|
|
||||
|Ubuntu 20.04|`ubuntu-latest` or `ubuntu-20.04`|`PHP 7.4` to `PHP 8.0`|
|
||||
|Windows Server 2019|`windows-latest` or `windows-2019`|`PHP 8.0`|
|
||||
@ -197,7 +197,7 @@ PHP extensions can be setup using the `extensions` input. It accepts a `string`
|
||||
|
||||
These tools can be setup globally using the `tools` input. It accepts a string in csv-format.
|
||||
|
||||
`behat`, `blackfire`, `blackfire-player`, `codeception`, `composer`, `composer-normalize`, `composer-prefetcher`, `composer-require-checker`, `composer-unused`, `cs2pr`, `deployer`, `flex`, `grpc_php_plugin`, `infection`, `pecl`, `phan`, `phing`, `phinx`, `phive`, `php-config`, `php-cs-fixer`, `phpcbf`, `phpcpd`, `phpcs`, `phpize`, `phplint`, `phpmd`, `phpspec`, `phpstan`, `phpunit`, `prestissimo`, `protoc`, `psalm`, `symfony` or `symfony-cli`, `vapor` or `vapor-cli`, `wp` or `wp-cli`
|
||||
`behat`, `blackfire`, `blackfire-player`, `codeception`, `composer`, `composer-normalize`, `composer-prefetcher`, `composer-require-checker`, `composer-unused`, `cs2pr`, `deployer`, `flex`, `grpc_php_plugin`, `infection`, `pecl`, `phan`, `phing`, `phinx`, `phive`, `php-config`, `php-cs-fixer`, `phpcbf`, `phpcpd`, `phpcs`, `phpize`, `phplint`, `phpmd`, `phpspec`, `phpstan`, `phpunit`, `phpunit-bridge`, `prestissimo`, `protoc`, `psalm`, `symfony` or `symfony-cli`, `vapor` or `vapor-cli`, `wp` or `wp-cli`
|
||||
|
||||
```yaml
|
||||
- name: Setup PHP with tools
|
||||
@ -207,7 +207,38 @@ These tools can be setup globally using the `tools` input. It accepts a string i
|
||||
tools: php-cs-fixer, phpunit
|
||||
```
|
||||
|
||||
- To set up a particular version of a tool, specify it in the form `tool:version`. The latest stable version of `composer` is set up by default. You can set up the required `composer` version by specifying `v1`, `v2`, `snapshot` or `preview` as versions, or the exact version in semver format.
|
||||
- In addition to above tools any composer tool or package can also be set up globally by specifying it as `vendor/package` matching the listing on Packagist. This format accepts the same [version constraints](https://getcomposer.org/doc/articles/versions.md#writing-version-constraints "Composer version constraints") as `composer`.
|
||||
|
||||
```yaml
|
||||
- name: Setup PHP with tools
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '7.4'
|
||||
tools: vimeo/psalm
|
||||
```
|
||||
|
||||
- To set up a particular version of a tool, specify it in the form `tool:version`.
|
||||
|
||||
Version can be in the following format:
|
||||
- Semver. For example `tool:1.2.3` or `tool:1.2.3-beta1`.
|
||||
- Major version. For example `tool:1` or `tool:1.x`.
|
||||
- Major and minor version. For example `tool:1.2` or `tool:1.2.x`.
|
||||
|
||||
When you specify just the major version or the version in `major.minor` format, the latest patch version matching the input will be setup.
|
||||
|
||||
Except for major versions of `composer`, For other tools when you specify only the `major` version or the version in `major.minor` format for any tool you can get rate limited by GitHub's API. To avoid this, it is recommended to provide a [`GitHub` OAuth token](https://github.com/shivammathur/setup-php#composer-github-oauth "Composer GitHub OAuth"). You can do that by setting `COMPOSER_TOKEN` environment variable.
|
||||
|
||||
```yaml
|
||||
- name: Setup PHP with tools
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '7.4'
|
||||
tools: php-cs-fixer:3, phpunit:8.5
|
||||
env:
|
||||
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.
|
||||
|
||||
```yaml
|
||||
- name: Setup PHP with composer v2
|
||||
@ -227,30 +258,12 @@ These tools can be setup globally using the `tools` input. It accepts a string i
|
||||
tools: none
|
||||
```
|
||||
|
||||
- Scripts `phpize` and `php-config` are set up with the same version as of the input PHP version.
|
||||
|
||||
- The latest versions of both agent `blackfire-agent` and client `blackfire` are set up when `blackfire` is specified in tools input. Please refer to the [official documentation](https://blackfire.io/docs/integrations/ci/github-actions "Blackfire.io documentation for GitHub Actions") for using `blackfire` with GitHub Actions.
|
||||
|
||||
- Tools `prestissimo` and `composer-prefetcher` will be skipped unless `composer:v1` is also specified in tools input. It is recommended to drop `prestissimo` and use `composer v2`.
|
||||
|
||||
- The latest versions of both agent `blackfire-agent` and client `blackfire` are setup when `blackfire` is specified in tools input. Please refer to the [official documentation](https://blackfire.io/docs/integrations/ci/github-actions "Blackfire.io documentation for GitHub Actions") for using `blackfire` with GitHub Actions.
|
||||
|
||||
- Version for other tools should be in `semver` format and a valid release of the tool. This is useful for installing tools for older versions of PHP. For example to set up `PHPUnit` on `PHP 7.2`.
|
||||
|
||||
```yaml
|
||||
- name: Setup PHP with tools
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '7.2'
|
||||
tools: phpunit:8.5.8
|
||||
```
|
||||
|
||||
- Any composer tool or package can also be set up globally by specifying it as `vendor/package`. For example to set up `psalm`.
|
||||
|
||||
```yaml
|
||||
- name: Setup PHP with tools
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '7.4'
|
||||
tools: vimeo/psalm
|
||||
```
|
||||
|
||||
- By default, tools which cannot be set up gracefully leave an error message in the logs, the action is not interrupted. To change this behaviour you can set `fail-fast` flag to `true`.
|
||||
|
||||
```yaml
|
||||
@ -379,6 +392,25 @@ Disable coverage for these reasons:
|
||||
- Accepts a `string` in csv-format. For example: `phpunit, phpcs`
|
||||
- See [tools Support](#wrench-tools-support) for tools supported.
|
||||
|
||||
### Outputs
|
||||
|
||||
#### `php-version`
|
||||
|
||||
To use outputs, give the `setup-php` step an `id`, you can use the same to get the outputs in a later step.
|
||||
|
||||
- Provides the PHP version in semver format.
|
||||
|
||||
```yml
|
||||
- name: Setup PHP
|
||||
id: setup-php
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '7.4'
|
||||
|
||||
- name: Print PHP version
|
||||
run: echo ${{ steps.setup-php.outputs.php-version }}
|
||||
```
|
||||
|
||||
### Flags
|
||||
|
||||
> Specify using `env` keyword
|
||||
@ -536,7 +568,7 @@ To debug any issues, you can use the `verbose` tag instead of `v2`.
|
||||
|
||||
> Setup PHP on multiple architecture on Ubuntu GitHub Runners.
|
||||
|
||||
- `PHP 5.6` to `PHP 7.4` are supported by `setup-php` on multiple architecture on `Ubuntu`.
|
||||
- `PHP 5.6` to `PHP 8.0` are supported by `setup-php` on multiple architecture on `Ubuntu`.
|
||||
- For this, you can use `shivammathur/node` images as containers. These have compatible `Nodejs` and `spc` utility.
|
||||
- Using `spc` you can run `setup-php` on both `i386` and `amd64` containers as opposed to [default syntax](#basic-setup), which only supports `amd64`.
|
||||
- Currently, for `Arm` based setup, you will need [self-hosted runners](#self-hosted-setup).
|
||||
@ -630,9 +662,6 @@ act -P ubuntu-20.04=shivammathur/node:2004
|
||||
|
||||
# For runs-on: ubuntu-18.04
|
||||
act -P ubuntu-18.04=shivammathur/node:1804
|
||||
|
||||
# For runs-on: ubuntu-16.04 (deprecated)
|
||||
act -P ubuntu-16.04=shivammathur/node:1604
|
||||
```
|
||||
|
||||
### JIT Configuration
|
||||
@ -640,7 +669,7 @@ act -P ubuntu-16.04=shivammathur/node:1604
|
||||
> Enable Just-in-time(JIT) on PHP 8.0 and PHP 8.1.
|
||||
|
||||
- To enable JIT, enable `opcache` in cli mode by setting `opcache.enable_cli=1`.
|
||||
- JIT conflicts with `Xdebug`, `PCOV`, and any other extension which overrides `zend_execute_ex` function, so set `coverage: none` and remove those extensions if added.
|
||||
- JIT conflicts with `Xdebug`, `PCOV`, and other extensions which override `zend_execute_ex` function, so set `coverage: none` and remove any such extension if added.
|
||||
- By default, `opcache.jit=1235` and `opcache.jit_buffer_size=256M` are set which can be changed using `ini-values` input.
|
||||
- For detailed information about JIT related directives refer to the [`official PHP documentation`](https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.jit "opcache.jit documentation").
|
||||
|
||||
@ -714,7 +743,7 @@ If your project has node.js dependencies, you can persist NPM or yarn cache dire
|
||||
|
||||
### Composer GitHub OAuth
|
||||
|
||||
If you have a number of workflows which setup multiple tools or have many composer dependencies, you might hit the GitHub's rate limit for composer. To avoid that you can add an `OAuth` token to the composer's config by setting `COMPOSER_TOKEN` environment variable. You can use [`GITHUB_TOKEN`](https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token "GITHUB_TOKEN documentation") secret for this purpose.
|
||||
If you have a number of workflows which setup multiple tools or have many composer dependencies, you might hit the GitHub's rate limit for composer. Also, if you specify only the major version or the version in `major.minor` format, you can hit the rate limit. To avoid this you can specify an `OAuth` token by setting `COMPOSER_TOKEN` environment variable. You can use [`GITHUB_TOKEN`](https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token "GITHUB_TOKEN documentation") secret for this purpose.
|
||||
|
||||
```yaml
|
||||
- name: Setup PHP
|
||||
|
@ -160,7 +160,7 @@ describe('Extension tests', () => {
|
||||
|
||||
it('checking addExtensionOnDarwin', async () => {
|
||||
let darwin: string = await extensions.addExtension(
|
||||
'amqp, apcu, Xdebug, pcov, grpc, igbinary, imagick, imap, memcache, memcached, msgpack, phalcon3, phalcon4, protobuf, psr, redis, swoole, sqlite, oci8, pdo_oci, :intl, ast-beta, grpc-1.2.3',
|
||||
'amqp, apcu, Xdebug, pcov, grpc, igbinary, imagick, imap, memcache, memcached, msgpack, phalcon3, phalcon4, protobuf, psr, rdkafka, redis, swoole, sqlite, oci8, pdo_oci, :intl, ast-beta, grpc-1.2.3',
|
||||
'7.2',
|
||||
'darwin'
|
||||
);
|
||||
@ -179,6 +179,7 @@ describe('Extension tests', () => {
|
||||
expect(darwin).toContain('add_brew_extension phalcon4 extension');
|
||||
expect(darwin).toContain('add_brew_extension protobuf extension');
|
||||
expect(darwin).toContain('add_brew_extension psr extension');
|
||||
expect(darwin).toContain('add_brew_extension rdkafka extension');
|
||||
expect(darwin).toContain('add_brew_extension redis extension');
|
||||
expect(darwin).toContain('add_brew_extension swoole extension');
|
||||
expect(darwin).toContain('add_extension sqlite3');
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -8,10 +8,6 @@ jest.mock('@actions/core', () => ({
|
||||
})
|
||||
}));
|
||||
|
||||
jest.spyOn(utils, 'fetch').mockImplementation(async (url): Promise<string> => {
|
||||
return `{ "latest": "8.0", "5.x": "5.6", "url": "${url}" }`;
|
||||
});
|
||||
|
||||
async function cleanup(path: string): Promise<void> {
|
||||
fs.unlink(path, error => {
|
||||
if (error) {
|
||||
@ -32,18 +28,38 @@ describe('Utils tests', () => {
|
||||
expect(await utils.getInput('test', false)).toBe('setup-php');
|
||||
expect(await utils.getInput('setup-php', false)).toBe('setup-php');
|
||||
expect(await utils.getInput('DoesNotExist', false)).toBe('');
|
||||
expect(async () => {
|
||||
await expect(async () => {
|
||||
await utils.getInput('DoesNotExist', true);
|
||||
}).rejects.toThrow('Input required and not supplied: DoesNotExist');
|
||||
});
|
||||
|
||||
it('checking fetch', async () => {
|
||||
expect(await utils.fetch('test_url')).toBe(
|
||||
'{ "latest": "8.0", "5.x": "5.6", "url": "test_url" }'
|
||||
);
|
||||
const manifest = await utils.getManifestURL();
|
||||
let response: Record<string, string> = await utils.fetch(manifest);
|
||||
expect(response.error).toBe(undefined);
|
||||
expect(response.data).toContain('latest');
|
||||
|
||||
response = await utils.fetch(manifest, 'invalid_token');
|
||||
expect(response.error).not.toBe(undefined);
|
||||
expect(response.data).toBe(undefined);
|
||||
});
|
||||
|
||||
it('checking getManifestURL', async () => {
|
||||
expect(await utils.getManifestURL()).toContain('php-versions.json');
|
||||
});
|
||||
|
||||
it('checking parseVersion', async () => {
|
||||
jest
|
||||
.spyOn(utils, 'fetch')
|
||||
.mockImplementation(
|
||||
async (url, token?): Promise<Record<string, string>> => {
|
||||
if (!token || token === 'valid_token') {
|
||||
return {data: `{ "latest": "8.0", "5.x": "5.6", "url": "${url}" }`};
|
||||
} else {
|
||||
return {error: 'Invalid token'};
|
||||
}
|
||||
}
|
||||
);
|
||||
expect(await utils.parseVersion('latest')).toBe('8.0');
|
||||
expect(await utils.parseVersion('7')).toBe('7.0');
|
||||
expect(await utils.parseVersion('7.4')).toBe('7.4');
|
||||
@ -70,7 +86,7 @@ describe('Utils tests', () => {
|
||||
expect(await utils.color('warning')).toBe('33');
|
||||
});
|
||||
|
||||
it('checking readScripts', async () => {
|
||||
it('checking readFile', async () => {
|
||||
const darwin: string = fs.readFileSync(
|
||||
path.join(__dirname, '../src/scripts/darwin.sh'),
|
||||
'utf8'
|
||||
@ -83,12 +99,12 @@ describe('Utils tests', () => {
|
||||
path.join(__dirname, '../src/scripts/win32.ps1'),
|
||||
'utf8'
|
||||
);
|
||||
expect(await utils.readScript('darwin.sh')).toBe(darwin);
|
||||
expect(await utils.readScript('darwin.sh')).toBe(darwin);
|
||||
expect(await utils.readScript('linux.sh')).toBe(linux);
|
||||
expect(await utils.readScript('linux.sh')).toBe(linux);
|
||||
expect(await utils.readScript('win32.ps1')).toBe(win32);
|
||||
expect(await utils.readScript('win32.ps1')).toBe(win32);
|
||||
expect(await utils.readFile('darwin.sh', 'src/scripts')).toBe(darwin);
|
||||
expect(await utils.readFile('darwin.sh', 'src/scripts')).toBe(darwin);
|
||||
expect(await utils.readFile('linux.sh', 'src/scripts')).toBe(linux);
|
||||
expect(await utils.readFile('linux.sh', 'src/scripts')).toBe(linux);
|
||||
expect(await utils.readFile('win32.ps1', 'src/scripts')).toBe(win32);
|
||||
expect(await utils.readFile('win32.ps1', 'src/scripts')).toBe(win32);
|
||||
});
|
||||
|
||||
it('checking writeScripts', async () => {
|
||||
|
@ -21,6 +21,9 @@ inputs:
|
||||
tools:
|
||||
description: 'Setup popular tools globally.'
|
||||
required: false
|
||||
outputs:
|
||||
php-version:
|
||||
description: 'PHP version in semver format'
|
||||
runs:
|
||||
using: 'node12'
|
||||
main: 'dist/index.js'
|
||||
|
915
dist/index.js
vendored
915
dist/index.js
vendored
File diff suppressed because it is too large
Load Diff
@ -26,6 +26,7 @@ jobs:
|
||||
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
tools: phpunit-bridge
|
||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql
|
||||
coverage: xdebug #optional
|
||||
- name: Start mysql service
|
||||
@ -42,15 +43,15 @@ jobs:
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install Composer dependencies
|
||||
run: |
|
||||
composer require --dev symfony/orm-pack symfony/phpunit-bridge
|
||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
php bin/phpunit install
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Run Migration
|
||||
run: |
|
||||
composer require --dev symfony/orm-pack
|
||||
php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed"
|
||||
php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed"
|
||||
env:
|
||||
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony
|
||||
- name: Run Tests
|
||||
run: php bin/phpunit --coverage-text
|
||||
- name: Install PHPUnit
|
||||
run: simple-phpunit install
|
||||
- name: Run tests
|
||||
run: simple-phpunit --coverage-text
|
||||
|
@ -26,6 +26,7 @@ jobs:
|
||||
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
tools: phpunit-bridge
|
||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, pgsql
|
||||
coverage: xdebug #optional
|
||||
- name: Get composer cache directory
|
||||
@ -40,15 +41,15 @@ jobs:
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install Composer dependencies
|
||||
run: |
|
||||
composer require --dev symfony/orm-pack symfony/phpunit-bridge
|
||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
php bin/phpunit install
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Run Migration
|
||||
run: |
|
||||
composer require --dev symfony/orm-pack
|
||||
php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed"
|
||||
php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed"
|
||||
env:
|
||||
DATABASE_URL: postgres://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports[5432] }}/postgres?charset=UTF-8
|
||||
- name: Run Tests
|
||||
run: php bin/phpunit --coverage-text
|
||||
- name: Install PHPUnit
|
||||
run: simple-phpunit install
|
||||
- name: Run tests
|
||||
run: simple-phpunit --coverage-text
|
||||
|
@ -17,6 +17,7 @@ jobs:
|
||||
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
tools: phpunit-bridge
|
||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite
|
||||
coverage: xdebug #optional
|
||||
- name: Get composer cache directory
|
||||
@ -31,9 +32,8 @@ jobs:
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install Composer dependencies
|
||||
run: |
|
||||
composer require --dev symfony/phpunit-bridge
|
||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
php bin/phpunit install
|
||||
- name: Run Tests
|
||||
run: php bin/phpunit --coverage-text
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Install PHPUnit
|
||||
run: simple-phpunit install
|
||||
- name: Run tests
|
||||
run: simple-phpunit --coverage-text
|
||||
|
3147
package-lock.json
generated
3147
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
28
package.json
28
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "setup-php",
|
||||
"version": "2.11.0",
|
||||
"version": "2.12.0",
|
||||
"private": false,
|
||||
"description": "Setup PHP for use with GitHub Actions",
|
||||
"main": "lib/install.js",
|
||||
@ -24,28 +24,28 @@
|
||||
"author": "shivammathur",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.3.0",
|
||||
"@actions/exec": "^1.0.4",
|
||||
"@actions/io": "^1.1.0",
|
||||
"@actions/core": "^1.4.0",
|
||||
"@actions/exec": "^1.1.0",
|
||||
"@actions/io": "^1.1.1",
|
||||
"fs": "0.0.1-security"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^26.0.23",
|
||||
"@types/node": "^15.6.1",
|
||||
"@typescript-eslint/eslint-plugin": "^4.25.0",
|
||||
"@typescript-eslint/parser": "^4.25.0",
|
||||
"@types/jest": "^26.0.24",
|
||||
"@types/node": "^16.3.2",
|
||||
"@typescript-eslint/eslint-plugin": "^4.28.3",
|
||||
"@typescript-eslint/parser": "^4.28.3",
|
||||
"@vercel/ncc": "^0.28.6",
|
||||
"eslint": "^7.27.0",
|
||||
"eslint": "^7.30.0",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint-plugin-import": "^2.23.4",
|
||||
"eslint-plugin-jest": "^24.3.6",
|
||||
"eslint-plugin-prettier": "^3.4.0",
|
||||
"husky": "^4.3.8",
|
||||
"jest": "^27.0.3",
|
||||
"jest-circus": "^27.0.3",
|
||||
"prettier": "^2.3.0",
|
||||
"ts-jest": "^27.0.1",
|
||||
"typescript": "^4.3.2"
|
||||
"jest": "^27.0.6",
|
||||
"jest-circus": "^27.0.6",
|
||||
"prettier": "^2.3.2",
|
||||
"ts-jest": "^27.0.3",
|
||||
"typescript": "^4.3.5"
|
||||
},
|
||||
"husky": {
|
||||
"skipCI": true,
|
||||
|
235
src/configs/tools.json
Normal file
235
src/configs/tools.json
Normal file
@ -0,0 +1,235 @@
|
||||
{
|
||||
"composer-normalize": {
|
||||
"type": "phar",
|
||||
"repository": "ergebnis/composer-normalize",
|
||||
"extension": ".phar",
|
||||
"domain": "https://github.com",
|
||||
"version_prefix": "",
|
||||
"version_parameter": "-V"
|
||||
},
|
||||
"cs2pr": {
|
||||
"type": "phar",
|
||||
"repository": "staabm/annotate-pull-request-from-checkstyle",
|
||||
"extension": "",
|
||||
"domain": "https://github.com",
|
||||
"version_prefix": "",
|
||||
"version_parameter": "-V"
|
||||
},
|
||||
"infection": {
|
||||
"type": "phar",
|
||||
"repository": "infection/infection",
|
||||
"extension": ".phar",
|
||||
"domain": "https://github.com",
|
||||
"version_prefix": "",
|
||||
"version_parameter": "-V"
|
||||
},
|
||||
"phan": {
|
||||
"type": "phar",
|
||||
"repository": "phan/phan",
|
||||
"extension": ".phar",
|
||||
"domain": "https://github.com",
|
||||
"version_prefix": "",
|
||||
"version_parameter": "-v"
|
||||
},
|
||||
"php-cs-fixer": {
|
||||
"type": "phar",
|
||||
"repository": "FriendsOfPHP/PHP-CS-Fixer",
|
||||
"extension": ".phar",
|
||||
"domain": "https://github.com",
|
||||
"version_prefix": "v",
|
||||
"version_parameter": "-V"
|
||||
},
|
||||
"phpcbf": {
|
||||
"type": "phar",
|
||||
"repository": "squizlabs/PHP_CodeSniffer",
|
||||
"extension": ".phar",
|
||||
"domain": "https://github.com",
|
||||
"version_prefix": "",
|
||||
"version_parameter": "--version"
|
||||
},
|
||||
"phpcs": {
|
||||
"type": "phar",
|
||||
"repository": "squizlabs/PHP_CodeSniffer",
|
||||
"extension": ".phar",
|
||||
"domain": "https://github.com",
|
||||
"version_prefix": "",
|
||||
"version_parameter": "--version"
|
||||
},
|
||||
"phpmd": {
|
||||
"type": "phar",
|
||||
"repository": "phpmd/phpmd",
|
||||
"extension": ".phar",
|
||||
"domain": "https://github.com",
|
||||
"version_prefix": "",
|
||||
"version_parameter": "--version"
|
||||
},
|
||||
"phpstan": {
|
||||
"type": "phar",
|
||||
"repository": "phpstan/phpstan",
|
||||
"extension": ".phar",
|
||||
"domain": "https://github.com",
|
||||
"version_prefix": "",
|
||||
"version_parameter": "-V"
|
||||
},
|
||||
"psalm": {
|
||||
"type": "phar",
|
||||
"repository": "vimeo/psalm",
|
||||
"extension": ".phar",
|
||||
"domain": "https://github.com",
|
||||
"version_prefix": "",
|
||||
"version_parameter": "-v"
|
||||
},
|
||||
"behat": {
|
||||
"type": "composer",
|
||||
"repository": "behat/behat"
|
||||
},
|
||||
"codeception": {
|
||||
"type": "composer",
|
||||
"repository": "codeception/codeception"
|
||||
},
|
||||
"automatic-composer-prefetcher": {
|
||||
"type": "composer",
|
||||
"alias": "composer-prefetcher",
|
||||
"repository": "narrowspark/automatic-composer-prefetcher"
|
||||
},
|
||||
"composer-require-checker": {
|
||||
"type": "composer",
|
||||
"repository": "maglnet/composer-require-checker"
|
||||
},
|
||||
"composer-unused": {
|
||||
"type": "composer",
|
||||
"repository": "icanhazstring/composer-unused"
|
||||
},
|
||||
"flex": {
|
||||
"type": "composer",
|
||||
"repository": "symfony/flex"
|
||||
},
|
||||
"phinx": {
|
||||
"type": "composer",
|
||||
"repository": "robmorgan/phinx"
|
||||
},
|
||||
"phplint": {
|
||||
"type": "composer",
|
||||
"repository": "overtrue/phplint"
|
||||
},
|
||||
"phpspec": {
|
||||
"type": "composer",
|
||||
"repository": "phpspec/phpspec"
|
||||
},
|
||||
"phpunit-bridge": {
|
||||
"alias": "simple-phpunit",
|
||||
"type": "composer",
|
||||
"repository": "symfony/phpunit-bridge"
|
||||
},
|
||||
"prestissimo": {
|
||||
"type": "composer",
|
||||
"repository": "hirak/prestissimo"
|
||||
},
|
||||
"vapor-cli": {
|
||||
"type": "composer",
|
||||
"alias": "vapor",
|
||||
"repository": "laravel/vapor-cli"
|
||||
},
|
||||
"blackfire": {
|
||||
"type": "custom-package",
|
||||
"alias": "blackfire-agent"
|
||||
},
|
||||
"grpc_php_plugin": {
|
||||
"type": "custom-package",
|
||||
"repository": "grpc/grpc",
|
||||
"domain": "https://github.com",
|
||||
"version_prefix": "v"
|
||||
},
|
||||
"protoc": {
|
||||
"type": "custom-package",
|
||||
"repository": "protocolbuffers/protobuf",
|
||||
"domain": "https://github.com",
|
||||
"version_prefix": "v"
|
||||
},
|
||||
"blackfire-player": {
|
||||
"type": "custom-function",
|
||||
"domain": "https://get.blackfire.io",
|
||||
"function": "blackfire_player",
|
||||
"version_prefix": "v",
|
||||
"version_parameter": "-V"
|
||||
},
|
||||
"composer": {
|
||||
"type": "custom-function",
|
||||
"domain": "https://getcomposer.org",
|
||||
"repository": "composer/composer",
|
||||
"function": "composer"
|
||||
},
|
||||
"deployer": {
|
||||
"type": "custom-function",
|
||||
"domain": "https://deployer.org",
|
||||
"repository": "deployphp/deployer",
|
||||
"function": "deployer",
|
||||
"version_prefix": "v",
|
||||
"version_parameter": "-V"
|
||||
},
|
||||
"pecl": {
|
||||
"type": "custom-function",
|
||||
"function": "pecl"
|
||||
},
|
||||
"phing": {
|
||||
"type": "custom-function",
|
||||
"domain": "https://www.phing.info",
|
||||
"repository": "phingofficial/phing",
|
||||
"function": "phing",
|
||||
"extension": ".phar",
|
||||
"version_prefix": "",
|
||||
"version_parameter": "-v"
|
||||
},
|
||||
"phive": {
|
||||
"type": "custom-function",
|
||||
"repository": "phar-io/phive",
|
||||
"domain": "https://phar.io",
|
||||
"function": "phive",
|
||||
"version_prefix": "",
|
||||
"version_parameter": "status"
|
||||
},
|
||||
"phpcpd": {
|
||||
"type": "custom-function",
|
||||
"repository": "sebastianbergmann/phpcpd",
|
||||
"domain": "https://phar.phpunit.de",
|
||||
"function": "phpcpd",
|
||||
"version_prefix": "",
|
||||
"version_parameter": "--version"
|
||||
},
|
||||
"phpunit": {
|
||||
"type": "custom-function",
|
||||
"repository": "sebastianbergmann/phpunit",
|
||||
"domain": "https://phar.phpunit.de",
|
||||
"function": "phpcpd",
|
||||
"version_prefix": "",
|
||||
"version_parameter": "--version"
|
||||
},
|
||||
"phpize": {
|
||||
"type": "custom-function",
|
||||
"function": "dev_tools",
|
||||
"alias": "php-config"
|
||||
},
|
||||
"php-config": {
|
||||
"type": "custom-function",
|
||||
"function": "dev_tools"
|
||||
},
|
||||
"symfony-cli": {
|
||||
"type": "custom-function",
|
||||
"function": "symfony",
|
||||
"alias": "symfony",
|
||||
"domain": "https://github.com",
|
||||
"repository": "symfony/cli",
|
||||
"version_prefix": "v",
|
||||
"version_parameter": "version"
|
||||
},
|
||||
"wp-cli": {
|
||||
"type": "custom-function",
|
||||
"function": "wp_cli",
|
||||
"repository": "wp-cli/wp-cli",
|
||||
"domain": "https://github.com",
|
||||
"alias": "wp",
|
||||
"extension": ".phar",
|
||||
"version_parameter": "--version",
|
||||
"version_prefix": "v"
|
||||
}
|
||||
}
|
104
src/configs/tools_schema.json
Normal file
104
src/configs/tools_schema.json
Normal file
@ -0,0 +1,104 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://raw.githubusercontent.com/shivammathur/setup-php/develop/src/configs/tools_schema.json",
|
||||
"type": "object",
|
||||
"title": "Tools",
|
||||
"default": {},
|
||||
"examples": [
|
||||
{
|
||||
"tool": {
|
||||
"alias": "tool_alias",
|
||||
"domain": "https://example.com",
|
||||
"extension": ".ext",
|
||||
"function": "function_name",
|
||||
"repository": "user/tool",
|
||||
"type": "phar, composer, custom-package or custom-function",
|
||||
"version_parameter": "--version",
|
||||
"version_prefix": "v"
|
||||
}
|
||||
}
|
||||
],
|
||||
"items": {
|
||||
"properties": {
|
||||
"alias": {
|
||||
"$id": "#/items/properties/alias",
|
||||
"type": "string",
|
||||
"title": "The alias schema",
|
||||
"description": "Alias for a tool.",
|
||||
"examples": [
|
||||
"tool_alias"
|
||||
]
|
||||
},
|
||||
"domain": {
|
||||
"$id": "#/items/properties/domain",
|
||||
"type": "string",
|
||||
"title": "The domain schema",
|
||||
"description": "Domain URL of the tool.",
|
||||
"examples": [
|
||||
"https://example.com"
|
||||
]
|
||||
},
|
||||
"extension": {
|
||||
"$id": "#/items/properties/extension",
|
||||
"type": "string",
|
||||
"title": "The extension schema",
|
||||
"description": "File extension of the tool.",
|
||||
"examples": [
|
||||
".ext"
|
||||
]
|
||||
},
|
||||
"function": {
|
||||
"$id": "#/items/properties/function",
|
||||
"type": "string",
|
||||
"title": "The function schema",
|
||||
"description": "Function name in tools.ts which returns the script to setup the tool.",
|
||||
"examples": [
|
||||
"function_name"
|
||||
]
|
||||
},
|
||||
"repository": {
|
||||
"$id": "#/items/properties/repository",
|
||||
"type": "string",
|
||||
"title": "The repository schema",
|
||||
"description": "GitHub repository of the tool.",
|
||||
"examples": [
|
||||
"user/tool"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"$id": "#/items/properties/type",
|
||||
"type": "string",
|
||||
"title": "The type schema",
|
||||
"description": "Type of tool: phar, composer, custom-package or custom-function.",
|
||||
"enum": [
|
||||
"phar",
|
||||
"composer",
|
||||
"custom-package",
|
||||
"custom-function"
|
||||
]
|
||||
},
|
||||
"version_parameter": {
|
||||
"$id": "#/items/properties/version_parameter",
|
||||
"type": "string",
|
||||
"title": "The version_parameter schema",
|
||||
"description": "Parameter to get the tool version.",
|
||||
"examples": [
|
||||
"--version"
|
||||
]
|
||||
},
|
||||
"version_prefix": {
|
||||
"$id": "#/items/properties/version_prefix",
|
||||
"type": "string",
|
||||
"title": "The version_prefix schema",
|
||||
"description": "Prefix of the version in the download URL.",
|
||||
"examples": [
|
||||
"v"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": true
|
||||
}
|
||||
}
|
@ -68,10 +68,10 @@ export async function addExtensionDarwin(
|
||||
case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
|
||||
add_script += await utils.getUnsupportedLog('pcov', version, 'darwin');
|
||||
return;
|
||||
// match 5.6 and newer - amqp, apcu, grpc, igbinary, imagick, imap, msgpack, protobuf, raphf, redis, swoole, xdebug, xdebug2, zmq
|
||||
// match 5.6 and newer - amqp, apcu, grpc, igbinary, imagick, imap, msgpack, protobuf, raphf, rdkafka, redis, swoole, xdebug, xdebug2, zmq
|
||||
// match 7.1 and newer - pcov
|
||||
// match 5.6 to 7.4 - propro
|
||||
case /(?<!5\.[3-5])(amqp|apcu|grpc|igbinary|imagick|imap|memcache|memcached|msgpack|protobuf|psr|raphf|redis|swoole|xdebug|xdebug2|zmq)/.test(
|
||||
case /(?<!5\.[3-5])(amqp|apcu|grpc|igbinary|imagick|imap|memcache|memcached|msgpack|protobuf|psr|raphf|rdkafka|redis|swoole|xdebug|xdebug2|zmq)/.test(
|
||||
version_extension
|
||||
):
|
||||
case /(5\.6|7\.[0-4])propro/.test(version_extension):
|
||||
|
@ -27,7 +27,7 @@ export async function getScript(
|
||||
const coverage_driver: string = await utils.getInput('coverage', false);
|
||||
const tools_csv: string = await utils.getInput('tools', false);
|
||||
|
||||
let script: string = await utils.readScript(filename);
|
||||
let script: string = await utils.readFile(filename, 'src/scripts');
|
||||
script += await tools.addTools(tools_csv, version, os_version);
|
||||
|
||||
if (extension_csv) {
|
||||
@ -52,9 +52,10 @@ export async function getScript(
|
||||
export async function run(): Promise<void> {
|
||||
try {
|
||||
if ((await utils.readEnv('ImageOS')) == 'ubuntu16') {
|
||||
core.warning(
|
||||
'Ubuntu 16.04 is deprecated.\nPlease upgrade to Ubuntu 18.04 or Ubuntu 20.04 - https://setup-php.com/i/452'
|
||||
core.setFailed(
|
||||
'setup-php is not supported on Ubuntu 16.04. Please upgrade to Ubuntu 18.04 or Ubuntu 20.04 - https://setup-php.com/i/452'
|
||||
);
|
||||
return;
|
||||
}
|
||||
const version: string = await utils.parseVersion(
|
||||
await utils.getInput('php-version', true)
|
||||
|
@ -7,9 +7,10 @@ export jit_versions="8.[0-9]"
|
||||
export nightly_versions="8.[1-9]"
|
||||
export xdebug3_versions="7.[2-4]|8.[0-9]"
|
||||
export tool_path_dir="/usr/local/bin"
|
||||
export composer_bin="$HOME/.composer/vendor/bin"
|
||||
export composer_json="$HOME/.composer/composer.json"
|
||||
export composer_lock="$HOME/.composer/composer.lock"
|
||||
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"
|
||||
export latest="releases/latest/download"
|
||||
export github="https://github.com/shivammathur"
|
||||
export jsdeliver="https://cdn.jsdelivr.net/gh/shivammathur"
|
||||
@ -82,10 +83,6 @@ run_script() {
|
||||
# Function to install required packages on self-hosted runners.
|
||||
self_hosted_setup() {
|
||||
if [ "$runner" = "self-hosted" ]; then
|
||||
if [ "$DISTRIB_RELEASE" = "16.04" ] && [ "$CONTAINER" != "shivammathur/node" ]; then
|
||||
add_log "$cross" "Ubuntu" "Ubuntu 16.04 (Xenial Xerus) is no longer supported on self-hosted runner"
|
||||
exit 1
|
||||
fi
|
||||
if [[ "${version:?}" =~ $old_versions ]]; then
|
||||
add_log "$cross" "PHP" "PHP $version is not supported on self-hosted runner"
|
||||
exit 1
|
||||
@ -232,10 +229,14 @@ configure_composer() {
|
||||
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
|
||||
sudo mkdir -p "$(dirname "$composer_json")"
|
||||
echo '{}' | tee "$composer_json" >/dev/null
|
||||
sudo chmod 644 "$composer_json"
|
||||
chmod 644 "$composer_json"
|
||||
fi
|
||||
composer -q config -g process-timeout 0
|
||||
echo "$composer_bin" >>"$GITHUB_PATH"
|
||||
@ -300,7 +301,7 @@ add_composertool() {
|
||||
|
||||
# Function to get PHP version in semver format.
|
||||
php_semver() {
|
||||
php"$version" -v | grep -Eo -m 1 "[0-9]+\.[0-9]+\.[0-9]+" | head -n 1
|
||||
php -v | grep -Eo -m 1 "[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+([0-9]+)?)?" | head -n 1
|
||||
}
|
||||
|
||||
# Function to get the tag for a php version.
|
||||
|
@ -86,9 +86,12 @@ add_extension() {
|
||||
if check_extension "$extension"; then
|
||||
add_log "${tick:?}" "$extension" "Enabled"
|
||||
else
|
||||
[[ "$version" =~ 5.[4-5] ]] && [ "$extension" = "imagick" ] && brew install -f pkg-config imagemagick >/dev/null 2>&1
|
||||
pecl_install "$extension" >/dev/null 2>&1 &&
|
||||
if [[ "$version" =~ ${old_versions:?} ]] && [ "$extension" = "imagick" ]; then
|
||||
run_script "php5-darwin" "${version/./}" "$extension" >/dev/null 2>&1
|
||||
else
|
||||
pecl_install "$extension" >/dev/null 2>&1 &&
|
||||
if [[ "$version" =~ ${old_versions:?} ]]; then echo "$prefix=$ext_dir/$extension.so" >>"$ini_file"; fi
|
||||
fi
|
||||
add_extension_log "$extension" "Installed and enabled"
|
||||
fi
|
||||
}
|
||||
@ -142,10 +145,6 @@ update_dependencies() {
|
||||
to_wait+=($!)
|
||||
done <"$tap_dir/shivammathur/homebrew-php/.github/deps/${ImageOS:?}_${ImageVersion:?}"
|
||||
wait "${to_wait[@]}"
|
||||
|
||||
# Remove when PCRE2 on macOS images is updated to PCRE2 10.37
|
||||
brew reinstall pcre2 >/dev/null 2>&1
|
||||
|
||||
echo '' | sudo tee /tmp/update_dependencies >/dev/null 2>&1
|
||||
fi
|
||||
}
|
||||
@ -185,6 +184,13 @@ add_php() {
|
||||
brew link --force --overwrite "$php_formula"
|
||||
}
|
||||
|
||||
# Function to get extra version.
|
||||
php_extra_version() {
|
||||
if [[ ${version:?} =~ ${nightly_versions:?} ]]; then
|
||||
echo " ($(brew cat "$php_formula" | grep -Eo "commit=[0-9a-zA-Z]+" | cut -d'=' -f 2))"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to Setup PHP.
|
||||
setup_php() {
|
||||
step_log "Setup PHP"
|
||||
@ -208,13 +214,16 @@ setup_php() {
|
||||
ext_dir=$(php -i | grep -Ei "extension_dir => /" | sed -e "s|.*=> s*||")
|
||||
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
||||
sudo mkdir -m 777 -p "$ext_dir" "$HOME/.composer"
|
||||
semver=$(php -v | head -n 1 | cut -f 2 -d ' ')
|
||||
semver=$(php_semver)
|
||||
extra_version=$(php_extra_version)
|
||||
if [ "${semver%.*}" != "$version" ]; then
|
||||
add_log "$cross" "PHP" "Could not setup PHP $version"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sudo cp "$dist"/../src/configs/*.json "$RUNNER_TOOL_CACHE/"
|
||||
add_log "$tick" "PHP" "$status PHP $semver"
|
||||
echo "::set-output name=php-version::$semver"
|
||||
add_log "$tick" "PHP" "$status PHP $semver$extra_version"
|
||||
}
|
||||
|
||||
# Variables
|
||||
|
@ -39,7 +39,6 @@ add_cubrid_helper() {
|
||||
status='Installed and enabled'
|
||||
set_cubrid_repo
|
||||
set_cubrid_branch
|
||||
[ "$DISTRIB_RELEASE" = "16.04" ] && setup_compiler
|
||||
patch_phpize
|
||||
read -r "${ext}_PREFIX_CONFIGURE_OPTS" <<< "CFLAGS=-Wno-implicit-function-declaration"
|
||||
read -r "${ext}_CONFIGURE_OPTS" <<< "--with-php-config=$(command -v php-config)"
|
||||
|
@ -1,6 +1,7 @@
|
||||
add_firebird_client_darwin() {
|
||||
pkg_name=$(get -s -n "" https://github.com/FirebirdSQL/firebird/releases/latest | grep -Eo "Firebird-.*.pkg" | head -n 1)
|
||||
get -q -e "/tmp/firebird.pkg" https://github.com/FirebirdSQL/firebird/releases/latest/download/"$pkg_name"
|
||||
firebird_tag='R3_0_7'
|
||||
pkg_name=$(get -s -n "" https://github.com/FirebirdSQL/firebird/releases/tag/"$firebird_tag" | grep -Eo "Firebird-.*.pkg" | head -n 1)
|
||||
get -q -e "/tmp/firebird.pkg" https://github.com/FirebirdSQL/firebird/releases/download/"$firebird_tag"/"$pkg_name"
|
||||
sudo installer -pkg /tmp/firebird.pkg -target /
|
||||
sudo mkdir -p /opt/firebird/include /opt/firebird/lib
|
||||
sudo find /Library/Frameworks/Firebird.framework -name '*.h' -exec cp "{}" /opt/firebird/include \;
|
||||
|
@ -21,17 +21,10 @@ cleanup_lists() {
|
||||
# Function to add ppa:ondrej/php.
|
||||
add_ppa() {
|
||||
ppa=${1:-ondrej/php}
|
||||
if [ "$DISTRIB_RELEASE" = "16.04" ] && [ "$ppa" = "ondrej/php" ]; then
|
||||
LC_ALL=C.UTF-8 sudo apt-add-repository --remove ppa:"$ppa" -y || true
|
||||
LC_ALL=C.UTF-8 sudo apt-add-repository http://setup-php.com/ondrej/php/ubuntu -y
|
||||
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 4f4ea0aae5267a6c
|
||||
elif ! apt-cache policy | grep -q "$ppa"; then
|
||||
if ! apt-cache policy | grep -q "$ppa"; then
|
||||
cleanup_lists "$(dirname "$ppa")"
|
||||
LC_ALL=C.UTF-8 sudo apt-add-repository ppa:"$ppa" -y
|
||||
fi
|
||||
if [ "$DISTRIB_RELEASE" = "16.04" ]; then
|
||||
sudo "$debconf_fix" apt-get update
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to update the package lists.
|
||||
@ -144,7 +137,6 @@ add_devtools() {
|
||||
# Function to setup the nightly build from shivammathur/php-builder
|
||||
setup_nightly() {
|
||||
run_script "php-builder" "$runner" "$version"
|
||||
extra_version="-dev ($(cat "/etc/php/$version/COMMIT"))"
|
||||
}
|
||||
|
||||
# Function to setup PHP 5.3, PHP 5.4 and PHP 5.5.
|
||||
@ -220,6 +212,13 @@ link_pecl_file() {
|
||||
done
|
||||
}
|
||||
|
||||
# Function to get extra version.
|
||||
php_extra_version() {
|
||||
if [[ ${version:?} =~ ${nightly_versions:?} ]]; then
|
||||
echo " ($(cat "/etc/php/$version/COMMIT"))"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to Setup PHP
|
||||
setup_php() {
|
||||
step_log "Setup PHP"
|
||||
@ -249,6 +248,7 @@ setup_php() {
|
||||
exit 1
|
||||
fi
|
||||
semver=$(php_semver)
|
||||
extra_version=$(php_extra_version)
|
||||
ext_dir=$(php -i | grep "extension_dir => /" | sed -e "s|.*=> s*||")
|
||||
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
||||
ini_dir=$(php --ini | grep "(php.ini)" | sed -e "s|.*: s*||")
|
||||
@ -259,6 +259,7 @@ setup_php() {
|
||||
sudo rm -rf /usr/local/bin/phpunit >/dev/null 2>&1
|
||||
sudo chmod 777 "${ini_file[@]}" "$pecl_file" "${tool_path_dir:?}"
|
||||
sudo cp "$dist"/../src/configs/*.json "$RUNNER_TOOL_CACHE/"
|
||||
echo "::set-output name=php-version::$semver"
|
||||
add_log "${tick:?}" "PHP" "$status PHP $semver$extra_version"
|
||||
}
|
||||
|
||||
|
@ -15,10 +15,10 @@ Function Add-ToolsHelper() {
|
||||
Add-Extension ast >$null 2>&1
|
||||
} elseif($tool -eq "phive") {
|
||||
Add-Extension xml >$null 2>&1
|
||||
} elseif($tool -eq "symfony") {
|
||||
Add-ToProfile $current_profile "symfony" "New-Alias symfony $bin_dir\$tool.exe"
|
||||
Add-ToProfile $current_profile "symfony-cli" "New-Alias symfony-cli $bin_dir\$tool.exe"
|
||||
} elseif($tool -eq "vapor-cli") {
|
||||
} elseif($tool -eq "symfony-cli") {
|
||||
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
|
||||
} elseif($tool -eq "wp-cli") {
|
||||
Copy-Item $bin_dir\wp-cli.bat -Destination $bin_dir\wp.bat
|
||||
|
@ -14,11 +14,7 @@ add_tools_helper() {
|
||||
add_extension curl extension >/dev/null 2>&1
|
||||
add_extension mbstring extension >/dev/null 2>&1
|
||||
add_extension xml extension >/dev/null 2>&1
|
||||
elif [ "$tool" = "symfony" ]; then
|
||||
sudo ln -s "${tool_path:?}" "${tool_path_dir:?}"/symfony-cli
|
||||
elif [ "$tool" = "vapor-cli" ]; then
|
||||
sudo ln -s "${tool_path:?}" "${tool_path_dir:?}"/vapor-cli
|
||||
elif [ "$tool" = "wp-cli" ]; then
|
||||
sudo ln -s "${tool_path:?}" "${tool_path_dir:?}"/wp
|
||||
elif [[ "$tool" =~ (symfony|vapor|wp)-cli ]]; then
|
||||
sudo ln -s "${tool_path:?}" "${tool_path_dir:?}"/${tool%-*}
|
||||
fi
|
||||
}
|
@ -24,35 +24,34 @@ get_grpc_tag() {
|
||||
fi
|
||||
}
|
||||
|
||||
add_grpc_php_plugin_macos() {
|
||||
add_grpc_php_plugin_brew() {
|
||||
brew install grpc
|
||||
brew link --force --overwrite grpc >/dev/null 2>&1
|
||||
grpc_tag="v$(brew info grpc | grep "grpc:" | grep -Eo "[0-9]+\.[0-9]+\.[0-9]+")"
|
||||
license_path="$(brew --prefix grpc)/LICENSE"
|
||||
}
|
||||
|
||||
add_grpc_php_plugin_linux() {
|
||||
add_grpc_php_plugin_compile() {
|
||||
get_grpc_tag
|
||||
get -s -n "" "https://github.com/grpc/grpc/archive/$grpc_tag.tar.gz" | tar -xz -C /tmp
|
||||
cd "/tmp/grpc-${grpc_tag:1}" || exit
|
||||
add_bazel
|
||||
if [ "$DISTRIB_RELEASE" = "16.04" ]; then
|
||||
CC="$(command -v gcc)" CXX="$(command -v g++)" ./tools/bazel build src/compiler:grpc_php_plugin
|
||||
else
|
||||
export DISABLE_BAZEL_WRAPPER=1
|
||||
(
|
||||
cd "/tmp/grpc-${grpc_tag:1}" || exit
|
||||
add_bazel
|
||||
./tools/bazel build src/compiler:grpc_php_plugin
|
||||
fi
|
||||
sudo mv ./bazel-bin/src/compiler/grpc_php_plugin /usr/local/bin/grpc_php_plugin
|
||||
sudo chmod a+x /usr/local/bin/grpc_php_plugin
|
||||
license_path="/tmp/grpc-${grpc_tag:1}/LICENSE"
|
||||
sudo mv ./bazel-bin/src/compiler/grpc_php_plugin /usr/local/bin/grpc_php_plugin
|
||||
sudo chmod a+x /usr/local/bin/grpc_php_plugin
|
||||
license_path="/tmp/grpc-${grpc_tag:1}/LICENSE"
|
||||
)
|
||||
}
|
||||
|
||||
add_grpc_php_plugin() {
|
||||
grpc_tag=$1
|
||||
license_path=""
|
||||
if [ "$(uname -s)" = "Darwin" ]; then
|
||||
add_grpc_php_plugin_macos >/dev/null 2>&1
|
||||
if [ "$grpc_tag" = "latest" ]; then
|
||||
add_grpc_php_plugin_brew >/dev/null 2>&1
|
||||
else
|
||||
add_grpc_php_plugin_linux >/dev/null 2>&1
|
||||
add_grpc_php_plugin_compile >/dev/null 2>&1
|
||||
fi
|
||||
echo "::set-output name=grpc_php_plugin_path::$(command -v grpc_php_plugin)"
|
||||
add_log "${tick:?}" "grpc_php_plugin" "Added grpc_php_plugin ${grpc_tag:1}"
|
||||
|
@ -302,8 +302,8 @@ Function Add-Tool() {
|
||||
$bat_content += "SET BIN_TARGET=%~dp0/" + $tool
|
||||
$bat_content += "php %BIN_TARGET% %*"
|
||||
Set-Content -Path $bin_dir\$tool.bat -Value $bat_content
|
||||
Add-ToProfile $current_profile $tool "New-Alias $tool $bin_dir\$tool.bat" >$null 2>&1
|
||||
Add-ToolsHelper $tool
|
||||
Add-ToProfile $current_profile $tool "New-Alias $tool $bin_dir\$tool.bat" >$null 2>&1
|
||||
$tool_version = Get-ToolVersion $tool $ver_param
|
||||
Add-Log $tick $tool "Added $tool $tool_version"
|
||||
} else {
|
||||
@ -426,6 +426,7 @@ if (Test-Path -LiteralPath $php_dir -PathType Container) {
|
||||
} catch { }
|
||||
}
|
||||
$status = "Installed"
|
||||
$extra_version = ""
|
||||
if ($null -eq $installed -or -not("$($installed.Version).".StartsWith(($version -replace '^(\d+(\.\d+)*).*', '$1.'))) -or $ts -ne $installed.ThreadSafe) {
|
||||
if ($version -lt '7.0' -and (Get-InstalledModule).Name -notcontains 'VcRedist') {
|
||||
Install-PSPackage VcRedist VcRedist-main\VcRedist\VcRedist "$github/aaronparker/VcRedist/archive/main.zip" Get-VcList >$null 2>&1
|
||||
@ -434,6 +435,7 @@ if ($null -eq $installed -or -not("$($installed.Version).".StartsWith(($version
|
||||
if ($version -match $nightly_versions) {
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $php_builder/releases/latest/download/Get-PhpNightly.ps1 -OutFile $php_dir\Get-PhpNightly.ps1 > $null 2>&1
|
||||
& $php_dir\Get-PhpNightly.ps1 -Architecture $arch -ThreadSafe $ts -Path $php_dir > $null 2>&1
|
||||
$extra_version = " ($(Get-Content $php_dir\COMMIT))"
|
||||
} else {
|
||||
Install-Php -Version $version -Architecture $arch -ThreadSafe $ts -InstallVC -Path $php_dir -TimeZone UTC -InitialPhpIni Production -Force > $null 2>&1
|
||||
}
|
||||
@ -465,4 +467,5 @@ Enable-PhpExtension -Extension $enable_extensions -Path $php_dir
|
||||
Update-PhpCAInfo -Path $php_dir -Source $cert_source
|
||||
Copy-Item -Path $dist\..\src\configs\*.json -Destination $env:RUNNER_TOOL_CACHE
|
||||
New-Item -ItemType Directory -Path $composer_bin -Force 2>&1 | Out-Null
|
||||
Add-Log $tick "PHP" "$status PHP $($installed.FullVersion)"
|
||||
Write-Output "::set-output name=php-version::$($installed.FullVersion)"
|
||||
Add-Log $tick "PHP" "$status PHP $($installed.FullVersion)$extra_version"
|
||||
|
816
src/tools.ts
816
src/tools.ts
@ -1,247 +1,76 @@
|
||||
import * as utils from './utils';
|
||||
|
||||
type RS = Record<string, string>;
|
||||
type RSRS = Record<string, RS>;
|
||||
|
||||
interface IRef {
|
||||
ref: string;
|
||||
node_id: string;
|
||||
url: string;
|
||||
object: RS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get version in semver format.
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
export async function getSemverVersion(data: RS): Promise<string> {
|
||||
const search: string = data['version_prefix'] + data['version'];
|
||||
const url = `https://api.github.com/repos/${data['repository']}/git/matching-refs/tags%2F${search}.`;
|
||||
const token: string = await utils.readEnv('COMPOSER_TOKEN');
|
||||
const response: RS = await utils.fetch(url, token);
|
||||
if (response.error || response.data === '[]') {
|
||||
data['error'] = response.error ?? `No version found with prefix ${search}.`;
|
||||
return data['version'];
|
||||
} else {
|
||||
const refs = JSON.parse(response['data']).reverse();
|
||||
const ref = refs.find((i: IRef) => /.*\d+.\d+.\d+$/.test(i['ref']));
|
||||
const tag: string = (ref || refs[0])['ref'].split('/').pop();
|
||||
return tag.replace(/^v(\d)/, '$1');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get tool version
|
||||
*
|
||||
* @param version
|
||||
* @param data
|
||||
*/
|
||||
export async function getToolVersion(version: string): Promise<string> {
|
||||
export async function getVersion(version: string, data: RS): Promise<string> {
|
||||
// semver_regex - https://semver.org/
|
||||
const semver_regex =
|
||||
/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
|
||||
const composer_regex = /^stable$|^preview$|^snapshot$|^v?[1|2]$/;
|
||||
version = version.replace(/[><=^]*/, '');
|
||||
const composer_regex = /^composer:(stable|preview|snapshot|[1|2])$/;
|
||||
const constraint_regex = /[><=^~]+.*/;
|
||||
const major_minor_regex = /^\d+(\.\d+)?$/;
|
||||
data['version'] = version.replace(/v?(\d)/, '$1').replace(/\.x/, '');
|
||||
switch (true) {
|
||||
case version.charAt(0) == 'v':
|
||||
return version.replace('v', '');
|
||||
case composer_regex.test(version):
|
||||
case semver_regex.test(version):
|
||||
return version;
|
||||
case composer_regex.test(data['release']):
|
||||
case semver_regex.test(data['version']):
|
||||
case constraint_regex.test(data['version']) && data['type'] === 'composer':
|
||||
return data['version'];
|
||||
case major_minor_regex.test(data['version']) && data['type'] === 'composer':
|
||||
data['release'] = `${data['tool']}:${data['version']}.*`;
|
||||
return `${data['version']}.*`;
|
||||
case data['repository'] && major_minor_regex.test(data['version']):
|
||||
return await getSemverVersion(data);
|
||||
default:
|
||||
return 'latest';
|
||||
return data['version'].replace(/[><=^~]*/, '');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to parse tool:version
|
||||
* Function to parse the release tool:version
|
||||
*
|
||||
* @param release
|
||||
* @param data
|
||||
*/
|
||||
export async function parseTool(
|
||||
release: string
|
||||
): Promise<{name: string; version: string}> {
|
||||
const parts: string[] = release.split(':');
|
||||
const tool: string = parts[0];
|
||||
const version: string | undefined = parts[1];
|
||||
switch (true) {
|
||||
case version === undefined:
|
||||
return {
|
||||
name: tool,
|
||||
version: 'latest'
|
||||
};
|
||||
case /^[\w.-]+\/[\w.-]+$/.test(tool):
|
||||
return {
|
||||
name: tool,
|
||||
version: version
|
||||
};
|
||||
default:
|
||||
return {
|
||||
name: tool,
|
||||
version: await getToolVersion(parts[1])
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get the url of tool with the given version
|
||||
*
|
||||
* @param tool
|
||||
* @param extension
|
||||
* @param version
|
||||
* @param prefix
|
||||
* @param version_prefix
|
||||
* @param verb
|
||||
*/
|
||||
export async function getUri(
|
||||
tool: string,
|
||||
extension: string,
|
||||
version: string,
|
||||
prefix: string,
|
||||
version_prefix: string,
|
||||
verb: string
|
||||
): Promise<string> {
|
||||
switch (version) {
|
||||
case 'latest':
|
||||
return [prefix, version, verb, tool + extension]
|
||||
.filter(Boolean)
|
||||
.join('/');
|
||||
default:
|
||||
return [prefix, verb, version_prefix + version, tool + extension]
|
||||
.filter(Boolean)
|
||||
.join('/');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to get script to setup phive
|
||||
*
|
||||
* @param version
|
||||
* @param php_version
|
||||
* @param os_version
|
||||
*/
|
||||
export async function addPhive(
|
||||
version: string,
|
||||
php_version: string,
|
||||
os_version: string
|
||||
): Promise<string> {
|
||||
switch (true) {
|
||||
case /5\.[3-5]/.test(php_version):
|
||||
return await utils.addLog(
|
||||
'$cross',
|
||||
'phive',
|
||||
'Phive is not supported on PHP ' + php_version,
|
||||
os_version
|
||||
);
|
||||
case /5\.6|7\.0/.test(php_version):
|
||||
version = version.replace('latest', '0.12.1');
|
||||
break;
|
||||
case /7\.1/.test(php_version):
|
||||
version = version.replace('latest', '0.13.5');
|
||||
break;
|
||||
}
|
||||
switch (version) {
|
||||
case 'latest':
|
||||
return (
|
||||
(await utils.getCommand(os_version, 'tool')) +
|
||||
'https://phar.io/releases/phive.phar phive status'
|
||||
);
|
||||
default:
|
||||
return (
|
||||
(await utils.getCommand(os_version, 'tool')) +
|
||||
'https://github.com/phar-io/phive/releases/download/' +
|
||||
version +
|
||||
'/phive-' +
|
||||
version +
|
||||
'.phar phive status'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get the phar url in domain/tool-version.phar format
|
||||
*
|
||||
* @param domain
|
||||
* @param tool
|
||||
* @param prefix
|
||||
* @param version
|
||||
*/
|
||||
export async function getPharUrl(
|
||||
domain: string,
|
||||
tool: string,
|
||||
prefix: string,
|
||||
version: string
|
||||
): Promise<string> {
|
||||
switch (version) {
|
||||
case 'latest':
|
||||
return domain + '/' + tool + '.phar';
|
||||
default:
|
||||
return domain + '/' + tool + '-' + prefix + version + '.phar';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get blackfire player url for a PHP version.
|
||||
*
|
||||
* @param version
|
||||
* @param php_version
|
||||
*/
|
||||
export async function getBlackfirePlayerUrl(
|
||||
version: string,
|
||||
php_version: string
|
||||
): Promise<string> {
|
||||
switch (true) {
|
||||
case /5\.[5-6]|7\.0/.test(php_version) && version == 'latest':
|
||||
version = '1.9.3';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return await getPharUrl(
|
||||
'https://get.blackfire.io',
|
||||
'blackfire-player',
|
||||
'v',
|
||||
version
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get the Deployer url
|
||||
*
|
||||
* @param version
|
||||
*/
|
||||
export async function getDeployerUrl(version: string): Promise<string> {
|
||||
const deployer = 'https://deployer.org';
|
||||
switch (version) {
|
||||
case 'latest':
|
||||
return deployer + '/deployer.phar';
|
||||
default:
|
||||
return deployer + '/releases/v' + version + '/deployer.phar';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get the Deployer url
|
||||
*
|
||||
* @param version
|
||||
* @param os_version
|
||||
*/
|
||||
export async function getSymfonyUri(
|
||||
version: string,
|
||||
os_version: string
|
||||
): Promise<string> {
|
||||
let filename = '';
|
||||
switch (os_version) {
|
||||
case 'linux':
|
||||
case 'darwin':
|
||||
filename = 'symfony_' + os_version + '_amd64';
|
||||
break;
|
||||
case 'win32':
|
||||
filename = 'symfony_windows_amd64.exe';
|
||||
break;
|
||||
default:
|
||||
return await utils.log(
|
||||
'Platform ' + os_version + ' is not supported',
|
||||
os_version,
|
||||
'error'
|
||||
);
|
||||
}
|
||||
switch (version) {
|
||||
case 'latest':
|
||||
return 'releases/latest/download/' + filename;
|
||||
default:
|
||||
return 'releases/download/v' + version + '/' + filename;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get the WP-CLI url
|
||||
*
|
||||
* @param version
|
||||
*/
|
||||
export async function getWpCliUrl(version: string): Promise<string> {
|
||||
switch (version) {
|
||||
case 'latest':
|
||||
return 'wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true';
|
||||
default:
|
||||
return await getUri(
|
||||
'wp-cli',
|
||||
'-' + version + '.phar',
|
||||
version,
|
||||
'wp-cli/wp-cli/releases',
|
||||
'v',
|
||||
'download'
|
||||
);
|
||||
}
|
||||
export async function getRelease(release: string, data: RS): Promise<string> {
|
||||
release = release.includes('/') ? release.split('/')[1] : release;
|
||||
return release.includes(':')
|
||||
? [data['tool'], release.split(':')[1]].join(':')
|
||||
: data['tool'];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -249,10 +78,10 @@ export async function getWpCliUrl(version: string): Promise<string> {
|
||||
*
|
||||
* @param tools_list
|
||||
*/
|
||||
export async function addComposer(tools_list: string[]): Promise<string[]> {
|
||||
export async function filterList(tools_list: string[]): Promise<string[]> {
|
||||
const regex_any = /^composer($|:.*)/;
|
||||
const regex_valid =
|
||||
/^composer:?($|preview$|snapshot$|v?[1-2]$|v?\d+\.\d+\.\d+[\w-]*$)/;
|
||||
/^composer:?($|preview$|snapshot$|v?\d+(\.\d+)?$|v?\d+\.\d+\.\d+[\w-]*$)/;
|
||||
const matches: string[] = tools_list.filter(tool => regex_valid.test(tool));
|
||||
let composer = 'composer';
|
||||
tools_list = tools_list.filter(tool => !regex_any.test(tool));
|
||||
@ -268,96 +97,352 @@ export async function addComposer(tools_list: string[]): Promise<string[]> {
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get composer URL for a given version
|
||||
* Function to get the url of tool with the given version
|
||||
*
|
||||
* @param version
|
||||
* @param data
|
||||
*/
|
||||
export async function getComposerUrl(version: string): Promise<string> {
|
||||
let cache_url = `https://github.com/shivammathur/composer-cache/releases/latest/download/composer-${version.replace(
|
||||
'latest',
|
||||
'stable'
|
||||
)}.phar`;
|
||||
switch (true) {
|
||||
case /^snapshot$/.test(version):
|
||||
return `${cache_url},https://getcomposer.org/composer.phar`;
|
||||
case /^preview$|^[1-2]$/.test(version):
|
||||
return `${cache_url},https://getcomposer.org/composer-${version}.phar`;
|
||||
case /^\d+\.\d+\.\d+[\w-]*$/.test(version):
|
||||
cache_url = `https://github.com/composer/composer/releases/download/${version}/composer.phar`;
|
||||
return `${cache_url},https://getcomposer.org/composer-${version}.phar`;
|
||||
default:
|
||||
return `${cache_url},https://getcomposer.org/composer-stable.phar`;
|
||||
export async function getUrl(data: RS): Promise<string> {
|
||||
if (data['version'] === 'latest') {
|
||||
return [
|
||||
data['domain'],
|
||||
data['repository'],
|
||||
data['prefix'],
|
||||
data['version'],
|
||||
data['verb'],
|
||||
data['tool'] + data['extension']
|
||||
]
|
||||
.filter(Boolean)
|
||||
.join('/');
|
||||
} else {
|
||||
return [
|
||||
data['domain'],
|
||||
data['repository'],
|
||||
data['prefix'],
|
||||
data['verb'],
|
||||
data['version_prefix'] + data['version'],
|
||||
data['tool'] + data['extension']
|
||||
]
|
||||
.filter(Boolean)
|
||||
.join('/');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get the phar url in domain/tool-version.phar format
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
export async function getPharUrl(data: RS): Promise<string> {
|
||||
if (data['version'] === 'latest') {
|
||||
return data['domain'] + '/' + data['tool'] + '.phar';
|
||||
} else {
|
||||
return (
|
||||
data['domain'] +
|
||||
'/' +
|
||||
data['tool'] +
|
||||
'-' +
|
||||
data['version_prefix'] +
|
||||
data['version'] +
|
||||
'.phar'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to get script to setup a tool using a phar url
|
||||
*
|
||||
* @param tool
|
||||
* @param url
|
||||
* @param os_version
|
||||
* @param ver_param
|
||||
* @param data
|
||||
*/
|
||||
export async function addArchive(
|
||||
tool: string,
|
||||
url: string,
|
||||
os_version: string,
|
||||
ver_param: string
|
||||
): Promise<string> {
|
||||
export async function addArchive(data: RS): Promise<string> {
|
||||
return (
|
||||
(await utils.getCommand(os_version, 'tool')) +
|
||||
(await utils.joins(url, tool, ver_param))
|
||||
(await utils.getCommand(data['os_version'], 'tool')) +
|
||||
(await utils.joins(data['url'], data['tool'], data['version_parameter']))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get the script to setup php-config and phpize
|
||||
* Helper function to get script to setup a tool using composer
|
||||
*
|
||||
* @param tool
|
||||
* @param os_version
|
||||
* @param data
|
||||
*/
|
||||
export async function addDevTools(
|
||||
tool: string,
|
||||
os_version: string
|
||||
): Promise<string> {
|
||||
switch (os_version) {
|
||||
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] + '/';
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to add blackfire-player
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
export async function addBlackfirePlayer(data: RS): Promise<string> {
|
||||
if (
|
||||
/5\.[5-6]|7\.0/.test(data['php_version']) &&
|
||||
data['version'] == 'latest'
|
||||
) {
|
||||
data['version'] = '1.9.3';
|
||||
}
|
||||
data['url'] = await getPharUrl(data);
|
||||
return addArchive(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to add composer
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
export async function addComposer(data: RS): Promise<string> {
|
||||
const github = data['github'];
|
||||
const getcomposer = data['domain'];
|
||||
let cache_url = `${github}/shivammathur/composer-cache/releases/latest/download/composer-${data[
|
||||
'version'
|
||||
].replace('latest', 'stable')}.phar`;
|
||||
let source_url = `${getcomposer}/composer.phar`;
|
||||
switch (true) {
|
||||
case /^snapshot$/.test(data['version']):
|
||||
break;
|
||||
case /^preview$|^[1-2]$/.test(data['version']):
|
||||
source_url = `${getcomposer}/composer-${data['version']}.phar`;
|
||||
break;
|
||||
case /^\d+\.\d+\.\d+[\w-]*$/.test(data['version']):
|
||||
cache_url = `${github}/${data['repository']}/releases/download/${data['version']}/composer.phar`;
|
||||
source_url = `${getcomposer}/composer-${data['version']}.phar`;
|
||||
break;
|
||||
default:
|
||||
source_url = `${getcomposer}/composer-stable.phar`;
|
||||
}
|
||||
data['url'] = `${cache_url},${source_url}`;
|
||||
data['version_parameter'] = data['version'];
|
||||
return await addArchive(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to add Deployer
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
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';
|
||||
}
|
||||
return await addArchive(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to add php-config and phpize
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
export async function addDevTools(data: RS): Promise<string> {
|
||||
switch (data['os_version']) {
|
||||
case 'linux':
|
||||
case 'darwin':
|
||||
return 'add_devtools ' + tool;
|
||||
return 'add_devtools ' + data['tool'];
|
||||
case 'win32':
|
||||
return await utils.addLog(
|
||||
'$tick',
|
||||
tool,
|
||||
tool + ' is not a windows tool',
|
||||
data['tool'],
|
||||
data['tool'] + ' is not a windows tool',
|
||||
'win32'
|
||||
);
|
||||
default:
|
||||
return await utils.log(
|
||||
'Platform ' + os_version + ' is not supported',
|
||||
os_version,
|
||||
'Platform ' + data['os_version'] + ' is not supported',
|
||||
data['os_version'],
|
||||
'error'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to get script to setup a tool using composer
|
||||
* Function to add PECL
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
export async function addPECL(data: RS): Promise<string> {
|
||||
return await utils.getCommand(data['os_version'], 'pecl');
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to add Phing
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
export async function addPhing(data: RS): Promise<string> {
|
||||
data['url'] =
|
||||
data['domain'] + '/get/phing-' + data['version'] + data['extension'];
|
||||
return await addArchive(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to add Phive
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
export async function addPhive(data: RS): Promise<string> {
|
||||
switch (true) {
|
||||
case /5\.[3-5]/.test(data['php_version']):
|
||||
return await utils.addLog(
|
||||
'$cross',
|
||||
'phive',
|
||||
'Phive is not supported on PHP ' + data['php_version'],
|
||||
data['os_version']
|
||||
);
|
||||
case /5\.6|7\.0/.test(data['php_version']):
|
||||
data['version'] = data['version'].replace('latest', '0.12.1');
|
||||
break;
|
||||
case /7\.1/.test(data['php_version']):
|
||||
data['version'] = data['version'].replace('latest', '0.13.5');
|
||||
break;
|
||||
case /7\.2/.test(data['php_version']):
|
||||
data['version'] = data['version'].replace('latest', '0.14.5');
|
||||
break;
|
||||
}
|
||||
if (data['version'] === 'latest') {
|
||||
data['domain'] = data['domain'] + '/releases';
|
||||
} else {
|
||||
data['domain'] = [
|
||||
data['github'],
|
||||
data['repository'],
|
||||
'releases/download',
|
||||
data['version']
|
||||
].join('/');
|
||||
}
|
||||
data['url'] = await getPharUrl(data);
|
||||
return await addArchive(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to add PHPUnit and related tools
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
export async function addPHPUnitTools(data: RS): Promise<string> {
|
||||
data['url'] = await getPharUrl(data);
|
||||
return await addArchive(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to add Symfony
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
export async function addSymfony(data: RS): Promise<string> {
|
||||
let filename: string;
|
||||
switch (data['os_version']) {
|
||||
case 'linux':
|
||||
case 'darwin':
|
||||
filename = 'symfony_' + data['os_version'] + '_amd64';
|
||||
break;
|
||||
case 'win32':
|
||||
filename = 'symfony_windows_amd64.exe';
|
||||
break;
|
||||
default:
|
||||
return await utils.log(
|
||||
'Platform ' + data['os_version'] + ' is not supported',
|
||||
data['os_version'],
|
||||
'error'
|
||||
);
|
||||
}
|
||||
if (data['version'] === 'latest') {
|
||||
data['uri'] = ['releases/latest/download', filename].join('/');
|
||||
} else {
|
||||
data['uri'] = ['releases/download', 'v' + data['version'], filename].join(
|
||||
'/'
|
||||
);
|
||||
}
|
||||
data['url'] = [data['domain'], data['repository'], data['uri']].join('/');
|
||||
return await addArchive(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to add WP-CLI
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
export async function addWPCLI(data: RS): Promise<string> {
|
||||
if (data['version'] === 'latest') {
|
||||
data['uri'] = 'wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true';
|
||||
data['url'] = [data['domain'], data['uri']].join('/');
|
||||
} else {
|
||||
data['extension'] = '-' + data['version'] + data['extension'];
|
||||
data['url'] = await getUrl(data);
|
||||
}
|
||||
return await addArchive(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get information about a tool
|
||||
*
|
||||
* @param tool
|
||||
* @param release
|
||||
* @param prefix
|
||||
* @param php_version
|
||||
* @param os_version
|
||||
*/
|
||||
export async function addPackage(
|
||||
tool: string,
|
||||
export async function getData(
|
||||
release: string,
|
||||
prefix: string,
|
||||
php_version: string,
|
||||
os_version: string
|
||||
): Promise<string> {
|
||||
const tool_command = await utils.getCommand(os_version, 'composertool');
|
||||
return tool_command + tool + ' ' + release + ' ' + prefix;
|
||||
): Promise<RS> {
|
||||
const json_file: string = await utils.readFile('tools.json', 'src/configs');
|
||||
const json_objects: RSRS = JSON.parse(json_file);
|
||||
release = release.replace(/\s+/g, '');
|
||||
const parts: string[] = release.split(':');
|
||||
const tool = parts[0];
|
||||
const version = parts[1];
|
||||
let data: RS;
|
||||
if (Object.keys(json_objects).includes(tool)) {
|
||||
data = json_objects[tool];
|
||||
data['tool'] = tool;
|
||||
} else {
|
||||
const key: string | undefined = Object.keys(json_objects).find(
|
||||
(key: string) => {
|
||||
return json_objects[key]['alias'] == tool;
|
||||
}
|
||||
);
|
||||
if (key) {
|
||||
data = json_objects[key];
|
||||
data['tool'] = key;
|
||||
} else {
|
||||
data = {
|
||||
tool: tool.split('/')[1],
|
||||
repository: tool,
|
||||
type: 'composer'
|
||||
};
|
||||
data = !tool.includes('/') ? {tool: tool} : data;
|
||||
}
|
||||
}
|
||||
data['github'] = 'https://github.com';
|
||||
data['domain'] ??= data['github'];
|
||||
data['extension'] ??= '.phar';
|
||||
data['os_version'] = os_version;
|
||||
data['php_version'] = php_version;
|
||||
data['prefix'] = data['github'] === data['domain'] ? 'releases' : '';
|
||||
data['verb'] = data['github'] === data['domain'] ? 'download' : '';
|
||||
data['version_parameter'] = JSON.stringify(data['version_parameter']) || '';
|
||||
data['version_prefix'] ??= '';
|
||||
data['release'] = await getRelease(release, data);
|
||||
data['version'] = version ? await getVersion(version, data) : 'latest';
|
||||
return data;
|
||||
}
|
||||
|
||||
export const functionRecord: Record<string, (data: RS) => Promise<string>> = {
|
||||
composer: addComposer,
|
||||
deployer: addDeployer,
|
||||
dev_tools: addDevTools,
|
||||
phive: addPhive,
|
||||
blackfire_player: addBlackfirePlayer,
|
||||
pecl: addPECL,
|
||||
phing: addPhing,
|
||||
phpunit: addPHPUnitTools,
|
||||
phpcpd: addPHPUnitTools,
|
||||
symfony: addSymfony,
|
||||
wp_cli: addWPCLI
|
||||
};
|
||||
|
||||
/**
|
||||
* Setup tools
|
||||
*
|
||||
@ -376,166 +461,45 @@ export async function addTools(
|
||||
} else {
|
||||
script += await utils.stepLog('Setup Tools', os_version);
|
||||
}
|
||||
const tools_list = await addComposer(await utils.CSVArray(tools_csv));
|
||||
const tools_list = await filterList(await utils.CSVArray(tools_csv));
|
||||
await utils.asyncForEach(tools_list, async function (release: string) {
|
||||
const tool_data: {name: string; version: string} = await parseTool(release);
|
||||
const tool: string = tool_data.name;
|
||||
const version: string = tool_data.version;
|
||||
const github = 'https://github.com/';
|
||||
let uri: string = await getUri(
|
||||
tool,
|
||||
'.phar',
|
||||
version,
|
||||
'releases',
|
||||
'',
|
||||
'download'
|
||||
);
|
||||
const data: RS = await getData(release, php_version, os_version);
|
||||
script += '\n';
|
||||
let url = '';
|
||||
switch (true) {
|
||||
case /^blackfire(-agent)?$/.test(tool):
|
||||
case data['error'] !== undefined:
|
||||
script += await utils.addLog(
|
||||
'$cross',
|
||||
data['tool'],
|
||||
data['error'],
|
||||
data['os_version']
|
||||
);
|
||||
break;
|
||||
case 'phar' === data['type']:
|
||||
data['url'] = await getUrl(data);
|
||||
script += await addArchive(data);
|
||||
break;
|
||||
case 'composer' === data['type']:
|
||||
script += await addPackage(data);
|
||||
break;
|
||||
case 'custom-package' === data['type']:
|
||||
script += await utils.customPackage(
|
||||
'blackfire',
|
||||
data['tool'].split('-')[0],
|
||||
'tools',
|
||||
version,
|
||||
os_version
|
||||
data['version'],
|
||||
data['os_version']
|
||||
);
|
||||
break;
|
||||
case /^grpc_php_plugin$|^protoc$/.test(tool):
|
||||
script += await utils.customPackage(tool, 'tools', version, os_version);
|
||||
case 'custom-function' === data['type']:
|
||||
script += await functionRecord[data['function']](data);
|
||||
break;
|
||||
case /^behat$|^codeception$|^phpspec$/.test(tool):
|
||||
script += await addPackage(tool, release, tool + '/', os_version);
|
||||
break;
|
||||
case /^blackfire-player$/.test(tool):
|
||||
url = await getBlackfirePlayerUrl(version, php_version);
|
||||
script += await addArchive(tool, url, os_version, '"-V"');
|
||||
break;
|
||||
case /^composer$/.test(tool):
|
||||
url = await getComposerUrl(version);
|
||||
script += await addArchive('composer', url, os_version, version);
|
||||
break;
|
||||
case /^composer-normalize$/.test(tool):
|
||||
uri = await getUri(tool, '.phar', version, 'releases', '', 'download');
|
||||
url = github + 'ergebnis/composer-normalize/' + uri;
|
||||
script += await addArchive(tool, url, os_version, '"-V"');
|
||||
break;
|
||||
case /^composer-prefetcher$/.test(tool):
|
||||
script += await addPackage(
|
||||
'automatic-' + tool,
|
||||
release,
|
||||
'narrowspark/',
|
||||
os_version
|
||||
);
|
||||
break;
|
||||
case /^composer-require-checker$/.test(tool):
|
||||
uri = await getUri(tool, '.phar', version, 'releases', '', 'download');
|
||||
url = github + 'maglnet/ComposerRequireChecker/' + uri;
|
||||
script += await addArchive(tool, url, os_version, '"-V"');
|
||||
break;
|
||||
case /^composer-unused$/.test(tool):
|
||||
script += await addPackage(tool, release, 'icanhazstring/', os_version);
|
||||
break;
|
||||
case /^cs2pr$/.test(tool):
|
||||
uri = await getUri(tool, '', version, 'releases', '', 'download');
|
||||
url = github + 'staabm/annotate-pull-request-from-checkstyle/' + uri;
|
||||
script += await addArchive(tool, url, os_version, '"-V"');
|
||||
break;
|
||||
case /^deployer$/.test(tool):
|
||||
url = await getDeployerUrl(version);
|
||||
script += await addArchive(tool, url, os_version, '"-V"');
|
||||
break;
|
||||
case /^flex$/.test(tool):
|
||||
script += await addPackage(tool, release, 'symfony/', os_version);
|
||||
break;
|
||||
case /^infection$/.test(tool):
|
||||
url = github + 'infection/infection/' + uri;
|
||||
script += await addArchive(tool, url, os_version, '"-V"');
|
||||
break;
|
||||
case /^pecl/.test(tool):
|
||||
script += await utils.getCommand(os_version, 'pecl');
|
||||
break;
|
||||
case /^phan$/.test(tool):
|
||||
url = github + 'phan/phan/' + uri;
|
||||
script += await addArchive(tool, url, os_version, '"-v"');
|
||||
break;
|
||||
case /^phing$/.test(tool):
|
||||
url = 'https://www.phing.info/get/phing-' + version + '.phar';
|
||||
script += await addArchive(tool, url, os_version, '"-v"');
|
||||
break;
|
||||
case /^phinx$/.test(tool):
|
||||
script += await addPackage(tool, release, 'robmorgan/', os_version);
|
||||
break;
|
||||
case /^phive$/.test(tool):
|
||||
script += await addPhive(version, php_version, os_version);
|
||||
break;
|
||||
case /^php(-config|ize)$/.test(tool):
|
||||
script += await addDevTools(tool, os_version);
|
||||
break;
|
||||
case /^php-cs-fixer$/.test(tool):
|
||||
uri = await getUri(tool, '.phar', version, 'releases', 'v', 'download');
|
||||
url = github + 'FriendsOfPHP/PHP-CS-Fixer/' + uri;
|
||||
script += await addArchive(tool, url, os_version, '"-V"');
|
||||
break;
|
||||
case /^php(cbf|cs)$/.test(tool):
|
||||
url = github + 'squizlabs/PHP_CodeSniffer/' + uri;
|
||||
script += await addArchive(tool, url, os_version, '"--version"');
|
||||
break;
|
||||
case /^php(cpd|unit)$/.test(tool):
|
||||
url = await getPharUrl('https://phar.phpunit.de', tool, '', version);
|
||||
script += await addArchive(tool, url, os_version, '"--version"');
|
||||
break;
|
||||
case /^phplint$/.test(tool):
|
||||
script += await addPackage(tool, release, 'overtrue/', os_version);
|
||||
break;
|
||||
case /^phpmd$/.test(tool):
|
||||
url = github + 'phpmd/phpmd/' + uri;
|
||||
script += await addArchive(tool, url, os_version, '"--version"');
|
||||
break;
|
||||
case /^phpstan$/.test(tool):
|
||||
url = github + 'phpstan/phpstan/' + uri;
|
||||
script += await addArchive(tool, url, os_version, '"-V"');
|
||||
break;
|
||||
case /^prestissimo$/.test(tool):
|
||||
script += await addPackage(tool, release, 'hirak/', os_version);
|
||||
break;
|
||||
case /^psalm$/.test(tool):
|
||||
url = github + 'vimeo/psalm/' + uri;
|
||||
script += await addArchive(tool, url, os_version, '"-v"');
|
||||
break;
|
||||
case /^symfony(-cli)?$/.test(tool):
|
||||
uri = await getSymfonyUri(version, os_version);
|
||||
url = github + 'symfony/cli/' + uri;
|
||||
script += await addArchive('symfony', url, os_version, 'version');
|
||||
break;
|
||||
case /^vapor(-cli)?$/.test(tool):
|
||||
script += await addPackage(
|
||||
'vapor-cli',
|
||||
release,
|
||||
'laravel/',
|
||||
os_version
|
||||
);
|
||||
break;
|
||||
case /^wp(-cli)?$/.test(tool):
|
||||
url = github + (await getWpCliUrl(version));
|
||||
script += await addArchive('wp-cli', url, os_version, '"--version"');
|
||||
break;
|
||||
case /^none$/.test(tool):
|
||||
break;
|
||||
case /^[\w.-]+\/[\w.-]+$/.test(tool):
|
||||
script += await addPackage(
|
||||
tool.split('/')[1],
|
||||
release.split('/')[1].replace(/\s+/, ''),
|
||||
tool.split('/')[0] + '/',
|
||||
os_version
|
||||
);
|
||||
case /^none$/.test(data['tool']):
|
||||
break;
|
||||
default:
|
||||
script += await utils.addLog(
|
||||
'$cross',
|
||||
tool,
|
||||
'Tool ' + tool + ' is not supported',
|
||||
os_version
|
||||
data['tool'],
|
||||
'Tool ' + data['tool'] + ' is not supported',
|
||||
data['os_version']
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
67
src/utils.ts
67
src/utils.ts
@ -1,7 +1,8 @@
|
||||
import {IncomingMessage} from 'http';
|
||||
import {IncomingMessage, OutgoingHttpHeaders} from 'http';
|
||||
import * as fs from 'fs';
|
||||
import * as https from 'https';
|
||||
import * as path from 'path';
|
||||
import * as url from 'url';
|
||||
import * as core from '@actions/core';
|
||||
|
||||
/**
|
||||
@ -46,32 +47,60 @@ export async function getInput(
|
||||
/**
|
||||
* Function to fetch an URL
|
||||
*
|
||||
* @param url
|
||||
* @param input_url
|
||||
* @param auth_token
|
||||
*/
|
||||
export async function fetch(url: string): Promise<string> {
|
||||
const fetch_promise: Promise<string> = new Promise(resolve => {
|
||||
const req = https.get(url, (res: IncomingMessage) => {
|
||||
res.setEncoding('utf8');
|
||||
let body = '';
|
||||
res.on('data', chunk => (body += chunk));
|
||||
res.on('end', () => resolve(body));
|
||||
});
|
||||
req.end();
|
||||
});
|
||||
export async function fetch(
|
||||
input_url: string,
|
||||
auth_token?: string
|
||||
): Promise<Record<string, string>> {
|
||||
const fetch_promise: Promise<Record<string, string>> = new Promise(
|
||||
resolve => {
|
||||
const url_object: url.UrlObject = new url.URL(input_url);
|
||||
const headers: OutgoingHttpHeaders = {
|
||||
'User-Agent': `Mozilla/5.0 (${process.platform} ${process.arch}) setup-php`
|
||||
};
|
||||
if (auth_token) {
|
||||
headers.authorization = 'Bearer ' + auth_token;
|
||||
}
|
||||
const options: https.RequestOptions = {
|
||||
hostname: url_object.hostname,
|
||||
path: url_object.pathname,
|
||||
headers: headers
|
||||
};
|
||||
const req = https.get(options, (res: IncomingMessage) => {
|
||||
if (res.statusCode != 200) {
|
||||
resolve({error: `${res.statusCode}: ${res.statusMessage}`});
|
||||
} else {
|
||||
let body = '';
|
||||
res.setEncoding('utf8');
|
||||
res.on('data', chunk => (body += chunk));
|
||||
res.on('end', () => resolve({data: `${body}`}));
|
||||
}
|
||||
});
|
||||
req.end();
|
||||
}
|
||||
);
|
||||
return await fetch_promise;
|
||||
}
|
||||
|
||||
/** Function to get manifest URL
|
||||
*
|
||||
*/
|
||||
export async function getManifestURL(): Promise<string> {
|
||||
return 'https://raw.githubusercontent.com/shivammathur/setup-php/develop/src/configs/php-versions.json';
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to parse PHP version.
|
||||
*
|
||||
* @param version
|
||||
*/
|
||||
export async function parseVersion(version: string): Promise<string> {
|
||||
const manifest =
|
||||
'https://raw.githubusercontent.com/shivammathur/setup-php/develop/src/configs/php-versions.json';
|
||||
const manifest = await getManifestURL();
|
||||
switch (true) {
|
||||
case /^(latest|\d+\.x)$/.test(version):
|
||||
return JSON.parse(await fetch(manifest))[version];
|
||||
return JSON.parse((await fetch(manifest))['data'])[version];
|
||||
default:
|
||||
switch (true) {
|
||||
case version.length > 1:
|
||||
@ -207,10 +236,14 @@ export async function addLog(
|
||||
* Read the scripts
|
||||
*
|
||||
* @param filename
|
||||
* @param directory
|
||||
*/
|
||||
export async function readScript(filename: string): Promise<string> {
|
||||
export async function readFile(
|
||||
filename: string,
|
||||
directory: string
|
||||
): Promise<string> {
|
||||
return fs.readFileSync(
|
||||
path.join(__dirname, '../src/scripts/' + filename),
|
||||
path.join(__dirname, '../' + directory, filename),
|
||||
'utf8'
|
||||
);
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
"compilerOptions": {
|
||||
"esModuleInterop": true,
|
||||
"lib": [
|
||||
"ESNext"
|
||||
"ES2019"
|
||||
],
|
||||
"module": "commonjs",
|
||||
"moduleResolution": "node",
|
||||
@ -12,7 +12,7 @@
|
||||
"rootDir": "./src",
|
||||
"sourceMap": true,
|
||||
"strict": true,
|
||||
"target": "ESNext"
|
||||
"target": "ES2019"
|
||||
},
|
||||
"exclude": ["__tests__", "lib", "node_modules"]
|
||||
}
|
Reference in New Issue
Block a user