mirror of
https://github.com/shivammathur/setup-php.git
synced 2026-10-15 20:06:58 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf6b4fbd49 | ||
|
|
8f8196743c | ||
|
|
06512d94ed | ||
|
|
1c302aed34 | ||
|
|
dcffe28928 | ||
|
|
6ffdb3d118 | ||
|
|
c97dacbacf | ||
|
|
34f574e7aa | ||
|
|
317a051dea | ||
|
|
dfcda83968 | ||
|
|
96d7cf331d | ||
|
|
baed2d33b8 | ||
|
|
1398cb4c9f | ||
|
|
462e7103e4 | ||
|
|
8582cb12d5 | ||
|
|
ec406be512 | ||
|
|
36a27b0262 | ||
|
|
ea2f858afe | ||
|
|
507ff06e8d | ||
|
|
629475b7b3 | ||
|
|
521f2e5b93 | ||
|
|
259d177178 | ||
|
|
20529878ed | ||
|
|
68634e7bca | ||
|
|
0ac4874a14 | ||
|
|
c9735bcc02 | ||
|
|
89b2566bb0 | ||
|
|
dcec1cf0b4 |
No files matched your search
@@ -8,6 +8,7 @@ permissions:
|
||||
|
||||
jobs:
|
||||
codeql:
|
||||
if: github.event.repository.fork == false
|
||||
permissions:
|
||||
actions: read # for github/codeql-action/init to get workflow details
|
||||
contents: read # for actions/checkout to fetch code
|
||||
@@ -15,7 +16,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ permissions:
|
||||
|
||||
jobs:
|
||||
create:
|
||||
if: github.event.repository.fork == false
|
||||
permissions:
|
||||
contents: none
|
||||
name: Create
|
||||
@@ -92,6 +93,7 @@ jobs:
|
||||
name: lists-php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
||||
path: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
||||
update:
|
||||
if: github.event.repository.fork == false
|
||||
permissions:
|
||||
contents: write # for Git to git push
|
||||
name: Update
|
||||
@@ -99,11 +101,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: ${{ github.repository }}.wiki
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v5
|
||||
with:
|
||||
path: ${{ github.workspace }}/lists
|
||||
pattern: lists-*
|
||||
|
||||
@@ -29,12 +29,12 @@ jobs:
|
||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Setup Node.js 20.x
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: 20.x
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ jobs:
|
||||
key: cache-v5
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Setup cache environment
|
||||
id: cache-env
|
||||
|
||||
@@ -19,16 +19,16 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout release
|
||||
if: github.event_name != 'workflow_dispatch'
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Checkout tag
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
if: github.event_name == 'workflow_dispatch'
|
||||
with:
|
||||
ref: ${{ github.event.inputs.tag }}
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: '20.x'
|
||||
registry-url: https://registry.npmjs.org
|
||||
@@ -46,7 +46,7 @@ jobs:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
|
||||
- name: Change to GitHub Packages registry
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
registry-url: https://npm.pkg.github.com
|
||||
scope: '@shivammathur'
|
||||
|
||||
@@ -77,8 +77,9 @@ Both `GitHub-hosted` and `self-hosted` runners are supported by `setup-php` on t
|
||||
| Windows Server 2025 | x64 | `windows-2025` | `PHP 8.3` |
|
||||
| Windows Server 2022 | x64 | `windows-latest` or `windows-2022` | `PHP 8.3` |
|
||||
| Windows Server 2019 | x64 | `windows-2019` | `PHP 8.3` |
|
||||
| macOS Sequoia 15.x | arm64 | `macos-15` | - |
|
||||
| macOS Sonoma 14.x | arm64 | `macos-latest` or `macos-14` | - |
|
||||
| macOS Tahoe 26.x | arm64 | `macos-26` | - |
|
||||
| macOS Sequoia 15.x | arm64 | `macos-latest` or `macos-15` | - |
|
||||
| macOS Sonoma 14.x | arm64 | `macos-14` | - |
|
||||
| macOS Ventura 13.x | x86_64 | `macos-13` | `PHP 8.3` |
|
||||
|
||||
### Self-Hosted Runners
|
||||
@@ -91,6 +92,7 @@ Both `GitHub-hosted` and `self-hosted` runners are supported by `setup-php` on t
|
||||
| Debian 11 | `self-hosted` or `Linux` |
|
||||
| Windows 7 and newer | `self-hosted` or `Windows` |
|
||||
| Windows Server 2012 R2 and newer | `self-hosted` or `Windows` |
|
||||
| macOS Tahoe 26.x x86_64/arm64 | `self-hosted` or `macOS` |
|
||||
| macOS Sequoia 15.x x86_64/arm64 | `self-hosted` or `macOS` |
|
||||
| macOS Sonoma 14.x x86_64/arm64 | `self-hosted` or `macOS` |
|
||||
| macOS Ventura 13.x x86_64/arm64 | `self-hosted` or `macOS` |
|
||||
@@ -465,6 +467,7 @@ Disable coverage for these reasons:
|
||||
- Specify the GitHub token to use for authentication.
|
||||
- Accepts a `string`.
|
||||
- By default, `GITHUB_TOKEN` secret provided by GitHub Actions is used.
|
||||
- For GitHub Enterprise users, it is recommended to use a Personal Access Token (PAT).
|
||||
|
||||
### Outputs
|
||||
|
||||
@@ -741,7 +744,7 @@ act -P ubuntu-22.04=shivammathur/node:2204
|
||||
|
||||
- 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.
|
||||
- By default, `opcache.jit=1235` and `opcache.jit_buffer_size=256M` are set which can be changed using `ini-values` input.
|
||||
- By default, `opcache.jit=1235` and `opcache.jit_buffer_size=256M` (`opcache.jit_buffer_size=128M` on ARM-based environments) 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").
|
||||
|
||||
For example to enable JIT in `tracing` mode with buffer size of `64 MB`.
|
||||
@@ -797,8 +800,6 @@ restore-keys: ${{ runner.os }}-composer-${{ matrix.prefer }}-
|
||||
|
||||
By default, setup-php uses the `GITHUB_TOKEN` secret that is generated for each workflow run. In case you want to use a Personal Access Token (PAT) instead, you can set the `github-token` input.
|
||||
|
||||
The `COMPOSER_TOKEN` and `GITHUB_TOKEN` environment variables have been deprecated in favor of the `github-token` input and will be removed in the next major version.
|
||||
|
||||
```yaml
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
@@ -807,6 +808,10 @@ The `COMPOSER_TOKEN` and `GITHUB_TOKEN` environment variables have been deprecat
|
||||
github-token: ${{ secrets.YOUR_PAT_TOKEN }}
|
||||
```
|
||||
|
||||
The `COMPOSER_TOKEN` and `GITHUB_TOKEN` environment variables have been deprecated in favor of the `github-token` input and will be removed in the next major version.
|
||||
|
||||
For GitHub Enterprise users, the `github-token` input does not default to the `GITHUB_TOKEN` secret. Therefore, it's recommended to set the `github-token` input to a Personal Access Token (PAT).
|
||||
|
||||
### Private Packagist Authentication
|
||||
|
||||
If you use Private Packagist for your private composer dependencies, you can set the `PACKAGIST_TOKEN` environment variable to authenticate.
|
||||
|
||||
+59
-14
@@ -61,7 +61,23 @@ jest.mock('../src/fetch', () => ({
|
||||
} else if (!token || token === 'valid_token') {
|
||||
return {data: `[{"ref": "refs/tags/1.2.3", "url": "${url}"}]`};
|
||||
} else if (token === 'beta_token') {
|
||||
return {data: `[{"ref": "refs/tags/1.2.3-beta1", "url": "${url}"}]`};
|
||||
return {data: `[{"ref": "refs/tags/1.2.3beta1", "url": "${url}"}]`};
|
||||
} else if (token === 'rc_token') {
|
||||
return {
|
||||
data: `[{"ref":"refs/tags/3.0.0RC1"},{"ref":"refs/tags/3.0.0RC2"}]`
|
||||
};
|
||||
} else if (token === 'non_semver_tags') {
|
||||
return {
|
||||
data: `[{"ref":"refs/tags/release-2025-09-18"},{"ref":"refs/tags/release-2025-09-17"}]`
|
||||
};
|
||||
} else if (token === 'undefined_ref') {
|
||||
return {
|
||||
data: `[{"url":"${url}"},{"ref":"refs/tags/v1.2.4","url":"${url}"}]`
|
||||
};
|
||||
} else if (token === 'multi_refs') {
|
||||
return {
|
||||
data: `[{"ref":"refs/tags/v1.2.3","url":"${url}"},{"ref":"refs/tags/1.2.4","url":"${url}"}]`
|
||||
};
|
||||
} else if (token === 'no_data') {
|
||||
return {data: '[]'};
|
||||
} else {
|
||||
@@ -89,11 +105,14 @@ jest.mock('../src/packagist', () => ({
|
||||
|
||||
describe('Tools tests', () => {
|
||||
it.each`
|
||||
token | version
|
||||
${'invalid_token'} | ${'1.2'}
|
||||
${'valid_token'} | ${'1.2.3'}
|
||||
${'beta_token'} | ${'1.2.3-beta1'}
|
||||
${''} | ${'1.2.3'}
|
||||
token | version
|
||||
${'invalid_token'} | ${'1.2'}
|
||||
${'valid_token'} | ${'1.2.3'}
|
||||
${'beta_token'} | ${'1.2.3beta1'}
|
||||
${'undefined_ref'} | ${'1.2.4'}
|
||||
${'multi_refs'} | ${'1.2.4'}
|
||||
${'non_semver_tags'} | ${'release-2025-09-18'}
|
||||
${''} | ${'1.2.3'}
|
||||
`('checking getSemverVersion: $token', async ({token, version}) => {
|
||||
process.env['GITHUB_TOKEN'] = token;
|
||||
expect(
|
||||
@@ -101,6 +120,26 @@ describe('Tools tests', () => {
|
||||
).toBe(version);
|
||||
});
|
||||
|
||||
it('checking getSemverVersion triggers ?? fallback via Map#get mock', async () => {
|
||||
process.env['GITHUB_TOKEN'] = 'rc_token';
|
||||
const spy = jest
|
||||
.spyOn(Map.prototype as Map<string, string>, 'get')
|
||||
.mockImplementation(function (
|
||||
this: Map<string, string>,
|
||||
key: string
|
||||
): string | undefined {
|
||||
if (key === '3.0.0-RC2') {
|
||||
return undefined;
|
||||
}
|
||||
return Map.prototype.get.call(this, key);
|
||||
});
|
||||
const result = await tools.getSemverVersion(
|
||||
getData({tool: 'tool', version: '3.0.0'})
|
||||
);
|
||||
expect(result).toBe('3.0.0-RC2');
|
||||
spy.mockRestore();
|
||||
});
|
||||
|
||||
it.each`
|
||||
tool | fetch_latest | version
|
||||
${'tool'} | ${'true'} | ${'3.2.1'}
|
||||
@@ -332,6 +371,12 @@ describe('Tools tests', () => {
|
||||
${'preview'} | ${'7.4'} | ${'true'} | ${'https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-preview.phar'} | ${'https://getcomposer.org/composer-preview.phar'}
|
||||
${'1'} | ${'7.4'} | ${'false'} | ${'https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-1.phar'} | ${'https://getcomposer.org/composer-1.phar'}
|
||||
${'2'} | ${'7.4'} | ${'false'} | ${'https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-2.phar'} | ${'https://getcomposer.org/composer-2.phar'}
|
||||
${'latest'} | ${'7.4'} | ${'true'} | ${'https://artifacts.setup-php.com/composer/composer-7.4-stable.phar'} | ${'https://getcomposer.org/composer-stable.phar'}
|
||||
${'stable'} | ${'7.4'} | ${'true'} | ${'https://artifacts.setup-php.com/composer/composer-7.4-stable.phar'} | ${'https://getcomposer.org/composer-stable.phar'}
|
||||
${'snapshot'} | ${'7.4'} | ${'true'} | ${'https://artifacts.setup-php.com/composer/composer-7.4-snapshot.phar'} | ${'https://getcomposer.org/composer.phar'}
|
||||
${'preview'} | ${'7.4'} | ${'true'} | ${'https://artifacts.setup-php.com/composer/composer-7.4-preview.phar'} | ${'https://getcomposer.org/composer-preview.phar'}
|
||||
${'1'} | ${'7.4'} | ${'false'} | ${'https://artifacts.setup-php.com/composer/composer-7.4-1.phar'} | ${'https://getcomposer.org/composer-1.phar'}
|
||||
${'2'} | ${'7.4'} | ${'false'} | ${'https://artifacts.setup-php.com/composer/composer-7.4-2.phar'} | ${'https://getcomposer.org/composer-2.phar'}
|
||||
${'latest'} | ${'7.1'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.1-stable.phar'} | ${'https://getcomposer.org/download/latest-2.2.x/composer.phar'}
|
||||
${'stable'} | ${'7.1'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.1-stable.phar'} | ${'https://getcomposer.org/download/latest-2.2.x/composer.phar'}
|
||||
${'snapshot'} | ${'7.1'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.1-snapshot.phar'} | ${'https://getcomposer.org/download/latest-2.2.x/composer.phar'}
|
||||
@@ -395,7 +440,7 @@ describe('Tools tests', () => {
|
||||
[
|
||||
'blackfire, blackfire-player, box, churn, cs2pr, flex, grpc_php_plugin, mago, name-collision-detector, parallel-lint, php-cs-fixer, php-scoper, phpDocumentor, phplint, phpstan, phpunit, pecl, phing, phinx, phinx:1.2.3, phive, phpunit-bridge, phpunit-polyfills, pint, php-config, phpize, protoc, symfony, vapor, wp, pie',
|
||||
[
|
||||
'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer',
|
||||
'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://artifacts.setup-php.com/composer/composer-7.4-stable.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer',
|
||||
'add_blackfire',
|
||||
'add_tool https://get.blackfire.io/blackfire-player-v1.22.0.phar blackfire-player "-V"',
|
||||
'add_tool https://github.com/box-project/box/releases/latest/download/box.phar box "--version"',
|
||||
@@ -440,7 +485,7 @@ describe('Tools tests', () => {
|
||||
[
|
||||
'backward-compatibility-check, behat, blackfire, blackfire-player, churn, composer-dependency-analyser, composer-normalize, composer-require-checker, composer-unused, cs2pr:1.2.3, ecs, flex, grpc_php_plugin:1.2.3, infection, mago:0.26.1, name-collision-detector, phan, phan:1.2.3, phing:1.2.3, phinx, phive:1.2.3, php-config, phpcbf, phpcpd, phpcs, phpdoc, phpize, phpmd, phpspec, phpunit-bridge:5.6, phpunit-polyfills:1.0.1, protoc:v1.2.3, psalm, rector, symfony-cli, vapor-cli, wp-cli, pie',
|
||||
[
|
||||
'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer',
|
||||
'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://artifacts.setup-php.com/composer/composer-7.4-stable.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer',
|
||||
'add_composer_tool behat behat behat/ scoped',
|
||||
'add_blackfire',
|
||||
'add_tool https://get.blackfire.io/blackfire-player-v1.22.0.phar blackfire-player "-V"',
|
||||
@@ -492,7 +537,7 @@ describe('Tools tests', () => {
|
||||
[
|
||||
'blackfire, blackfire-player:1.2.3, cs2pr, churn, deployer, does_not_exist, flex, mago, name-collision-detector, phinx, phive:0.13.2, php-config, phpize, phpmd, simple-phpunit, symfony, wp, pie',
|
||||
[
|
||||
'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer',
|
||||
'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://artifacts.setup-php.com/composer/composer-7.4-stable.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer',
|
||||
'Add-Blackfire',
|
||||
'blackfire-player is not a windows tool',
|
||||
'Add-Tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr "-V"',
|
||||
@@ -524,7 +569,7 @@ describe('Tools tests', () => {
|
||||
[
|
||||
'composer:v1, codeception/codeception, prestissimo, hirak/prestissimo, composer-prefetcher, narrowspark/automatic-composer-prefetcher, phinx: 1.2, robmorgan/phinx: ^1.2, user/tool:1.2.3, user/tool:~1.2',
|
||||
[
|
||||
'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-1.phar,https://getcomposer.org/composer-1.phar composer',
|
||||
'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar,https://artifacts.setup-php.com/composer/composer-7.4-1.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-1.phar,https://getcomposer.org/composer-1.phar composer',
|
||||
'Add-ComposerTool codeception codeception codeception/ global',
|
||||
'Add-ComposerTool prestissimo prestissimo hirak/ global',
|
||||
'Add-ComposerTool automatic-composer-prefetcher automatic-composer-prefetcher narrowspark/ global',
|
||||
@@ -573,10 +618,10 @@ describe('Tools tests', () => {
|
||||
it.each`
|
||||
tools_csv | script
|
||||
${'none'} | ${''}
|
||||
${'none, phpunit'} | ${'\nstep_log "Setup Tools"\nadd_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer latest\n\nadd_tool https://phar.phpunit.de/phpunit-7.4.0.phar,https://phar.phpunit.de/phpunit-7.phar phpunit "--version"'}
|
||||
${'composer:preview'} | ${'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-preview.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-preview.phar,https://getcomposer.org/composer-preview.phar composer preview'}
|
||||
${'composer, composer:v1'} | ${'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-1.phar,https://getcomposer.org/composer-1.phar composer'}
|
||||
${'composer:v1, composer:preview, composer:snapshot'} | ${'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-snapshot.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-snapshot.phar,https://getcomposer.org/composer.phar composer snapshot'}
|
||||
${'none, phpunit'} | ${'\nstep_log "Setup Tools"\nadd_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://artifacts.setup-php.com/composer/composer-7.4-stable.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer latest\n\nadd_tool https://phar.phpunit.de/phpunit-7.4.0.phar,https://phar.phpunit.de/phpunit-7.phar phpunit "--version"'}
|
||||
${'composer:preview'} | ${'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-preview.phar,https://artifacts.setup-php.com/composer/composer-7.4-preview.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-preview.phar,https://getcomposer.org/composer-preview.phar composer preview'}
|
||||
${'composer, composer:v1'} | ${'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar,https://artifacts.setup-php.com/composer/composer-7.4-1.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-1.phar,https://getcomposer.org/composer-1.phar composer'}
|
||||
${'composer:v1, composer:preview, composer:snapshot'} | ${'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-snapshot.phar,https://artifacts.setup-php.com/composer/composer-7.4-snapshot.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-snapshot.phar,https://getcomposer.org/composer.phar composer snapshot'}
|
||||
`('checking composer setup: $tools_csv', async ({tools_csv, script}) => {
|
||||
expect(await tools.addTools(tools_csv, '7.4', 'linux')).toContain(script);
|
||||
});
|
||||
|
||||
Vendored
+1
-1
@@ -1,3 +1,3 @@
|
||||
(()=>{var A={6472:function(A,e,t){"use strict";var r=this&&this.__createBinding||(Object.create?function(A,e,t,r){if(r===undefined)r=t;var s=Object.getOwnPropertyDescriptor(e,t);if(!s||("get"in s?!e.__esModule:s.writable||s.configurable)){s={enumerable:true,get:function(){return e[t]}}}Object.defineProperty(A,r,s)}:function(A,e,t,r){if(r===undefined)r=t;A[r]=e[t]});var s=this&&this.__setModuleDefault||(Object.create?function(A,e){Object.defineProperty(A,"default",{enumerable:true,value:e})}:function(A,e){A["default"]=e});var n=this&&this.__importStar||function(){var ownKeys=function(A){ownKeys=Object.getOwnPropertyNames||function(A){var e=[];for(var t in A)if(Object.prototype.hasOwnProperty.call(A,t))e[e.length]=t;return e};return ownKeys(A)};return function(A){if(A&&A.__esModule)return A;var e={};if(A!=null)for(var t=ownKeys(A),n=0;n<t.length;n++)if(t[n]!=="default")r(e,A,t[n]);s(e,A);return e}}();Object.defineProperty(e,"__esModule",{value:true});e.addINIValuesUnix=addINIValuesUnix;e.addINIValuesWindows=addINIValuesWindows;e.addINIValues=addINIValues;const o=n(t(9277));async function addINIValuesUnix(A){const e=await o.CSVArray(A);let t="";await o.asyncForEach(e,(async function(A){t+="\n"+await o.addLog("$tick",A,"Added to php.ini","linux")}));return'echo "'+e.join("\n")+'" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null 2>&1'+t}async function addINIValuesWindows(A){const e=await o.CSVArray(A);let t="\n";await o.asyncForEach(e,(async function(A){t+=await o.addLog("$tick",A,"Added to php.ini","win32")+"\n"}));return'Add-Content "$php_dir\\php.ini" "'+e.join("\n")+'"'+t}async function addINIValues(A,e,t=false){let r="\n";switch(t){case true:r+=await o.stepLog("Add php.ini values",e)+await o.suppressOutput(e)+"\n";break;case false:default:r+=await o.stepLog("Add php.ini values",e)+"\n";break}switch(e){case"win32":return r+await addINIValuesWindows(A);case"darwin":case"linux":return r+await addINIValuesUnix(A);default:return await o.log("Platform "+e+" is not supported",e,"error")}}},9524:function(A,e,t){"use strict";var r=this&&this.__createBinding||(Object.create?function(A,e,t,r){if(r===undefined)r=t;var s=Object.getOwnPropertyDescriptor(e,t);if(!s||("get"in s?!e.__esModule:s.writable||s.configurable)){s={enumerable:true,get:function(){return e[t]}}}Object.defineProperty(A,r,s)}:function(A,e,t,r){if(r===undefined)r=t;A[r]=e[t]});var s=this&&this.__setModuleDefault||(Object.create?function(A,e){Object.defineProperty(A,"default",{enumerable:true,value:e})}:function(A,e){A["default"]=e});var n=this&&this.__importStar||function(){var ownKeys=function(A){ownKeys=Object.getOwnPropertyNames||function(A){var e=[];for(var t in A)if(Object.prototype.hasOwnProperty.call(A,t))e[e.length]=t;return e};return ownKeys(A)};return function(A){if(A&&A.__esModule)return A;var e={};if(A!=null)for(var t=ownKeys(A),n=0;n<t.length;n++)if(t[n]!=="default")r(e,A,t[n]);s(e,A);return e}}();Object.defineProperty(e,"__esModule",{value:true});e.checkXdebugError=checkXdebugError;e.addCoverageXdebug=addCoverageXdebug;e.addCoveragePCOV=addCoveragePCOV;e.disableCoverage=disableCoverage;e.addCoverage=addCoverage;const o=n(t(9277));const i=n(t(3252));const a=n(t(6472));async function checkXdebugError(A,e){if(/^5\.[3-6]$|^7\.[0-1]$/.test(e)&&A=="xdebug3"||/^8\.[0-9]$/.test(e)&&A=="xdebug2"){return A+" is not supported on PHP "+e}return""}async function addCoverageXdebug(A,e,t,r){let s="\n";const n=await checkXdebugError(A,e);if(!n){s+=await i.addExtension(":pcov:false",e,t,true)+r;A=A=="xdebug3"?"xdebug":A;s+=await i.addExtension(A,e,t,true)+r;s+=await o.setVariable("xdebug_version","php -r \"echo phpversion('xdebug');\"",t);s+=await o.getCommand(t,"extension_log")+'xdebug "Xdebug $xdebug_version enabled as coverage driver"'}else{s+=await o.addLog("$cross",A,n,t)}return s}async function addCoveragePCOV(A,e,t){let r="\n";switch(true){default:r+=await i.addExtension(":xdebug:false",A,e,true)+t;r+=await i.addExtension("pcov",A,e,true)+t;r+=await a.addINIValues("pcov.enabled=1",e,true)+"\n";r+=await o.setVariable("pcov_version","php -r \"echo phpversion('pcov');\"",e);r+=await o.getCommand(e,"extension_log")+'pcov "PCOV $pcov_version enabled as coverage driver"';break;case/5\.[3-6]|7\.0/.test(A):r+=await o.addLog("$cross","pcov","PHP 7.1 or newer is required",e);break}return r}async function disableCoverage(A,e,t){let r="\n";r+=await i.addExtension(":pcov:false",A,e,true)+t;r+=await i.addExtension(":xdebug:false",A,e,true)+t;r+=await o.addLog("$tick","none","Disabled Xdebug and PCOV",e);return r}async function addCoverage(A,e,t){A=A.toLowerCase();const r="\n"+await o.stepLog("Setup Coverage",t);const s=await o.suppressOutput(t)+"\n";switch(A){case"pcov":return r+await addCoveragePCOV(e,t,s);case"xdebug":case"xdebug2":case"xdebug3":return r+await addCoverageXdebug(A,e,t,s);case"none":return r+await disableCoverage(e,t,s);default:return""}}},3252:function(A,e,t){"use strict";var r=this&&this.__createBinding||(Object.create?function(A,e,t,r)Line truncated
|
||||
(()=>{var A={6472:function(A,e,t){"use strict";var r=this&&this.__createBinding||(Object.create?function(A,e,t,r){if(r===undefined)r=t;var s=Object.getOwnPropertyDescriptor(e,t);if(!s||("get"in s?!e.__esModule:s.writable||s.configurable)){s={enumerable:true,get:function(){return e[t]}}}Object.defineProperty(A,r,s)}:function(A,e,t,r){if(r===undefined)r=t;A[r]=e[t]});var s=this&&this.__setModuleDefault||(Object.create?function(A,e){Object.defineProperty(A,"default",{enumerable:true,value:e})}:function(A,e){A["default"]=e});var n=this&&this.__importStar||function(){var ownKeys=function(A){ownKeys=Object.getOwnPropertyNames||function(A){var e=[];for(var t in A)if(Object.prototype.hasOwnProperty.call(A,t))e[e.length]=t;return e};return ownKeys(A)};return function(A){if(A&&A.__esModule)return A;var e={};if(A!=null)for(var t=ownKeys(A),n=0;n<t.length;n++)if(t[n]!=="default")r(e,A,t[n]);s(e,A);return e}}();Object.defineProperty(e,"__esModule",{value:true});e.addINIValuesUnix=addINIValuesUnix;e.addINIValuesWindows=addINIValuesWindows;e.addINIValues=addINIValues;const o=n(t(9277));async function addINIValuesUnix(A){const e=await o.CSVArray(A);let t="";await o.asyncForEach(e,(async function(A){t+="\n"+await o.addLog("$tick",A,"Added to php.ini","linux")}));return'echo "'+e.join("\n")+'" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null 2>&1'+t}async function addINIValuesWindows(A){const e=await o.CSVArray(A);let t="\n";await o.asyncForEach(e,(async function(A){t+=await o.addLog("$tick",A,"Added to php.ini","win32")+"\n"}));return'Add-Content "$php_dir\\php.ini" "'+e.join("\n")+'"'+t}async function addINIValues(A,e,t=false){let r="\n";switch(t){case true:r+=await o.stepLog("Add php.ini values",e)+await o.suppressOutput(e)+"\n";break;case false:default:r+=await o.stepLog("Add php.ini values",e)+"\n";break}switch(e){case"win32":return r+await addINIValuesWindows(A);case"darwin":case"linux":return r+await addINIValuesUnix(A);default:return await o.log("Platform "+e+" is not supported",e,"error")}}},9524:function(A,e,t){"use strict";var r=this&&this.__createBinding||(Object.create?function(A,e,t,r){if(r===undefined)r=t;var s=Object.getOwnPropertyDescriptor(e,t);if(!s||("get"in s?!e.__esModule:s.writable||s.configurable)){s={enumerable:true,get:function(){return e[t]}}}Object.defineProperty(A,r,s)}:function(A,e,t,r){if(r===undefined)r=t;A[r]=e[t]});var s=this&&this.__setModuleDefault||(Object.create?function(A,e){Object.defineProperty(A,"default",{enumerable:true,value:e})}:function(A,e){A["default"]=e});var n=this&&this.__importStar||function(){var ownKeys=function(A){ownKeys=Object.getOwnPropertyNames||function(A){var e=[];for(var t in A)if(Object.prototype.hasOwnProperty.call(A,t))e[e.length]=t;return e};return ownKeys(A)};return function(A){if(A&&A.__esModule)return A;var e={};if(A!=null)for(var t=ownKeys(A),n=0;n<t.length;n++)if(t[n]!=="default")r(e,A,t[n]);s(e,A);return e}}();Object.defineProperty(e,"__esModule",{value:true});e.checkXdebugError=checkXdebugError;e.addCoverageXdebug=addCoverageXdebug;e.addCoveragePCOV=addCoveragePCOV;e.disableCoverage=disableCoverage;e.addCoverage=addCoverage;const o=n(t(9277));const i=n(t(3252));const a=n(t(6472));async function checkXdebugError(A,e){if(/^5\.[3-6]$|^7\.[0-1]$/.test(e)&&A=="xdebug3"||/^8\.[0-9]$/.test(e)&&A=="xdebug2"){return A+" is not supported on PHP "+e}return""}async function addCoverageXdebug(A,e,t,r){let s="\n";const n=await checkXdebugError(A,e);if(!n){s+=await i.addExtension(":pcov:false",e,t,true)+r;A=A=="xdebug3"?"xdebug":A;s+=await i.addExtension(A,e,t,true)+r;s+=await o.setVariable("xdebug_version","php -r \"echo phpversion('xdebug');\"",t);s+=await o.getCommand(t,"extension_log")+'xdebug "Xdebug $xdebug_version enabled as coverage driver"'}else{s+=await o.addLog("$cross",A,n,t)}return s}async function addCoveragePCOV(A,e,t){let r="\n";switch(true){default:r+=await i.addExtension(":xdebug:false",A,e,true)+t;r+=await i.addExtension("pcov",A,e,true)+t;r+=await a.addINIValues("pcov.enabled=1",e,true)+"\n";r+=await o.setVariable("pcov_version","php -r \"echo phpversion('pcov');\"",e);r+=await o.getCommand(e,"extension_log")+'pcov "PCOV $pcov_version enabled as coverage driver"';break;case/5\.[3-6]|7\.0/.test(A):r+=await o.addLog("$cross","pcov","PHP 7.1 or newer is required",e);break}return r}async function disableCoverage(A,e,t){let r="\n";r+=await i.addExtension(":pcov:false",A,e,true)+t;r+=await i.addExtension(":xdebug:false",A,e,true)+t;r+=await o.addLog("$tick","none","Disabled Xdebug and PCOV",e);return r}async function addCoverage(A,e,t){A=A.toLowerCase();const r="\n"+await o.stepLog("Setup Coverage",t);const s=await o.suppressOutput(t)+"\n";switch(A){case"pcov":return r+await addCoveragePCOV(e,t,s);case"xdebug":case"xdebug2":case"xdebug3":return r+await addCoverageXdebug(A,e,t,s);case"none":return r+await disableCoverage(e,t,s);default:return""}}},3252:function(A,e,t){"use strict";var r=this&&this.__createBinding||(Object.create?function(A,e,t,r)Line truncated
|
||||
/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */;const escape=A=>A.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22");const normalizeLinefeeds=A=>A.replace(/\r?\n|\r/g,"\r\n");const r=[];const s=new Uint8Array([13,10]);E=0;let n=false;for(const[e,o]of A){if(typeof o==="string"){const A=F.encode(t+`; name="${escape(normalizeLinefeeds(e))}"`+`\r\n\r\n${normalizeLinefeeds(o)}\r\n`);r.push(A);E+=A.byteLength}else{const A=F.encode(`${t}; name="${escape(normalizeLinefeeds(e))}"`+(o.name?`; filename="${escape(o.name)}"`:"")+"\r\n"+`Content-Type: ${o.type||"application/octet-stream"}\r\n\r\n`);r.push(A,o,s);if(typeof o.size==="number"){E+=A.byteLength+o.size+s.byteLength}else{n=true}}}const o=F.encode(`--${e}--`);r.push(o);E+=o.byteLength;if(n){E=null}g=A;c=async function*(){for(const A of r){if(A.stream){yield*A.stream()}else{yield A}}};Q="multipart/form-data; boundary="+e}else if(o(A)){g=A;E=A.size;if(A.type){Q=A.type}}else if(typeof A[Symbol.asyncIterator]==="function"){if(e){throw new TypeError("keepalive")}if(s.isDisturbed(A)||A.locked){throw new TypeError("Response body object should not be disturbed or locked")}r=A instanceof k?A:n(A)}if(typeof g==="string"||s.isBuffer(g)){E=Buffer.byteLength(g)}if(c!=null){let e;r=new k({async start(){e=c(A)[Symbol.asyncIterator]()},async pull(A){const{value:t,done:s}=await e.next();if(s){queueMicrotask((()=>{A.close()}))}else{if(!f(r)){A.enqueue(new Uint8Array(t))}}return A.desiredSize>0},async cancel(A){await e.return()},type:undefined})}const C={stream:r,source:g,length:E};return[C,Q]}function safelyExtractBody(A,e=false){if(!k){k=t(3774).ReadableStream}if(A instanceof k){d(!s.isDisturbed(A),"The body has already been consumed.");d(!A.locked,"The stream is locked.")}return extractBody(A,e)}function cloneBody(A){const[e,t]=A.stream.tee();const r=l(t,{transfer:[t]});const[,s]=r.tee();A.stream=e;return{stream:s,length:A.length,source:A.source}}async function*consumeBody(A){if(A){if(p(A)){yield A}else{const e=A.stream;if(s.isDisturbed(e)){throw new TypeError("The body has already been consumed.")}if(e.locked){throw new TypeError("The stream is locked.")}e[u]=true;yield*e}}}function throwIfAborted(A){if(A.aborted){throw new B("The operation was aborted.","AbortError")}}function bodyMixinMethods(A){const e={blob(){return specConsumeBody(this,(A=>{let e=bodyMimeType(this);if(e==="failure"){e=""}else if(e){e=D(e)}return new I([A],{type:e})}),A)},arrayBuffer(){return specConsumeBody(this,(A=>new Uint8Array(A).buffer),A)},text(){return specConsumeBody(this,utf8DecodeBytes,A)},json(){return specConsumeBody(this,parseJSONFromBytes,A)},async formData(){C.brandCheck(this,A);throwIfAborted(this[Q]);const e=this.headers.get("Content-Type");if(/multipart\/form-data/.test(e)){const A={};for(const[e,t]of this.headers)A[e.toLowerCase()]=t;const e=new E;let t;try{t=new r({headers:A,preservePath:true})}catch(A){throw new B(`${A}`,"AbortError")}t.on("field",((A,t)=>{e.append(A,t)}));t.on("file",((A,t,r,s,n)=>{const o=[];if(s==="base64"||s.toLowerCase()==="base64"){let s="";t.on("data",(A=>{s+=A.toString().replace(/[\r\n]/gm,"");const e=s.length-s.length%4;o.push(Buffer.from(s.slice(0,e),"base64"));s=s.slice(e)}));t.on("end",(()=>{o.push(Buffer.from(s,"base64"));e.append(A,new b(o,r,{type:n}))}))}else{t.on("data",(A=>{o.push(A)}));t.on("end",(()=>{e.append(A,new b(o,r,{type:n}))}))}}));const s=new Promise(((A,e)=>{t.on("finish",A);t.on("error",(A=>e(new TypeError(A))))}));if(this.body!==null)for await(const A of consumeBody(this[Q].body))t.write(A);t.end();await s;return e}else if(/application\/x-www-form-urlencoded/.test(e)){let A;try{let e="";const t=new TextDecoder("utf-8",{ignoreBOM:true});for await(const A of consumeBody(this[Q].body)){if(!p(A)){throw new TypeError("Expected Uint8Array chunk")}e+=t.decode(A,{stream:true})}e+=t.decode();A=new URLSearchParams(e)}catch(A){throw Object.assign(new TypeError,{cause:A})}const e=new E;for(const[t,r]of A){e.append(t,r)}return e}else{await Promise.resolve();throwIfAborted(this[Q]);throw C.errors.exception({header:`${A.name}.formData`,message:"Could not parse content as FormData."})}}};return e}function mixinBody(A){Object.assign(A.prototype,bodyMixinMethods(A))}async function specConsumeBody(A,e,t){C.brandCheck(A,t);throwIfAborted(A[Q]);if(bodyUnusable(A[Q].body)){throw new TypeError("Body is unusable")}const r=c();const errorSteps=A=>r.reject(A);const successSteps=A=>{try{r.resolve(e(A))}catch(A){errorSteps(A)}};if(A[Q].body==null){successSteps(new Uint8Array);return r.promise}await g(A[Q].body,successSteps,errorSteps);return r.promise}function bodyUnusable(A){return A!=null&&(A.stream.locked||s.isDisturbed(A.stream))}function utf8DecodeBytes(A){if(A.length===0){return""}if(A[0]===239&&A[1]===187&&A[2]===191){A=A.subarray(3)}const e=S.decode(A);return e}function parseJSONFromBytes(A){return JSON.parse(utf8DecodeBytes(A))}function bodyMimeType(A){const{headersList:e}=A[Q];const t=e.get("content-Line truncated
|
||||
/*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> */n[s-4]=this.maskKey[0];n[s-3]=this.maskKey[1];n[s-2]=this.maskKey[2];n[s-1]=this.maskKey[3];n[1]=t;if(t===126){n.writeUInt16BE(e,2)}else if(t===127){n[2]=n[3]=0;n.writeUIntBE(e,4,6)}n[1]|=128;for(let A=0;A<e;A++){n[s+A]=this.frameData[A]^this.maskKey[A%4]}return n}}A.exports={WebsocketFrameSend:WebsocketFrameSend}},3171:(A,e,t)=>{"use strict";const{Writable:r}=t(2203);const s=t(1637);const{parserStates:n,opcodes:o,states:i,emptyBuffer:a}=t(5913);const{kReadyState:c,kSentClose:g,kResponse:E,kReceivedClose:Q}=t(2933);const{isValidStatusCode:C,failWebsocketConnection:B,websocketMessageReceived:l}=t(3574);const{WebsocketFrameSend:I}=t(1237);const h={};h.ping=s.channel("undici:websocket:ping");h.pong=s.channel("undici:websocket:pong");class ByteParser extends r{#o=[];#i=0;#a=n.INFO;#c={};#g=[];constructor(A){super();this.ws=A}_write(A,e,t){this.#o.push(A);this.#i+=A.length;this.run(t)}run(A){while(true){if(this.#a===n.INFO){if(this.#i<2){return A()}const e=this.consume(2);this.#c.fin=(e[0]&128)!==0;this.#c.opcode=e[0]&15;this.#c.originalOpcode??=this.#c.opcode;this.#c.fragmented=!this.#c.fin&&this.#c.opcode!==o.CONTINUATION;if(this.#c.fragmented&&this.#c.opcode!==o.BINARY&&this.#c.opcode!==o.TEXT){B(this.ws,"Invalid frame type was fragmented.");return}const t=e[1]&127;if(t<=125){this.#c.payloadLength=t;this.#a=n.READ_DATA}else if(t===126){this.#a=n.PAYLOADLENGTH_16}else if(t===127){this.#a=n.PAYLOADLENGTH_64}if(this.#c.fragmented&&t>125){B(this.ws,"Fragmented frame exceeded 125 bytes.");return}else if((this.#c.opcode===o.PING||this.#c.opcode===o.PONG||this.#c.opcode===o.CLOSE)&&t>125){B(this.ws,"Payload length for control frame exceeded 125 bytes.");return}else if(this.#c.opcode===o.CLOSE){if(t===1){B(this.ws,"Received close frame with a 1-byte body.");return}const A=this.consume(t);this.#c.closeInfo=this.parseCloseBody(false,A);if(!this.ws[g]){const A=Buffer.allocUnsafe(2);A.writeUInt16BE(this.#c.closeInfo.code,0);const e=new I(A);this.ws[E].socket.write(e.createFrame(o.CLOSE),(A=>{if(!A){this.ws[g]=true}}))}this.ws[c]=i.CLOSING;this.ws[Q]=true;this.end();return}else if(this.#c.opcode===o.PING){const e=this.consume(t);if(!this.ws[Q]){const A=new I(e);this.ws[E].socket.write(A.createFrame(o.PONG));if(h.ping.hasSubscribers){h.ping.publish({payload:e})}}this.#a=n.INFO;if(this.#i>0){continue}else{A();return}}else if(this.#c.opcode===o.PONG){const e=this.consume(t);if(h.pong.hasSubscribers){h.pong.publish({payload:e})}if(this.#i>0){continue}else{A();return}}}else if(this.#a===n.PAYLOADLENGTH_16){if(this.#i<2){return A()}const e=this.consume(2);this.#c.payloadLength=e.readUInt16BE(0);this.#a=n.READ_DATA}else if(this.#a===n.PAYLOADLENGTH_64){if(this.#i<8){return A()}const e=this.consume(8);const t=e.readUInt32BE(0);if(t>2**31-1){B(this.ws,"Received payload length > 2^31 bytes.");return}const r=e.readUInt32BE(4);this.#c.payloadLength=(t<<8)+r;this.#a=n.READ_DATA}else if(this.#a===n.READ_DATA){if(this.#i<this.#c.payloadLength){return A()}else if(this.#i>=this.#c.payloadLength){const A=this.consume(this.#c.payloadLength);this.#g.push(A);if(!this.#c.fragmented||this.#c.fin&&this.#c.opcode===o.CONTINUATION){const A=Buffer.concat(this.#g);l(this.ws,this.#c.originalOpcode,A);this.#c={};this.#g.length=0}this.#a=n.INFO}}if(this.#i>0){continue}else{A();break}}}consume(A){if(A>this.#i){return null}else if(A===0){return a}if(this.#o[0].length===A){this.#i-=this.#o[0].length;return this.#o.shift()}const e=Buffer.allocUnsafe(A);let t=0;while(t!==A){const r=this.#o[0];const{length:s}=r;if(s+t===A){e.set(this.#o.shift(),t);break}else if(s+t>A){e.set(r.subarray(0,A-t),t);this.#o[0]=r.subarray(A-t);break}else{e.set(this.#o.shift(),t);t+=r.length}}this.#i-=A;return e}parseCloseBody(A,e){let t;if(e.length>=2){t=e.readUInt16BE(0)}if(A){if(!C(t)){return null}return{code:t}}let r=e.subarray(2);if(r[0]===239&&r[1]===187&&r[2]===191){r=r.subarray(3)}if(t!==undefined&&!C(t)){return null}try{r=new TextDecoder("utf-8",{fatal:true}).decode(r)}catch{return null}return{code:t,reason:r}}get closingInfo(){return this.#c.closeInfo}}A.exports={ByteParser:ByteParser}},2933:A=>{"use strict";A.exports={kWebSocketURL:Symbol("url"),kReadyState:Symbol("ready state"),kController:Symbol("controller"),kResponse:Symbol("response"),kBinaryType:Symbol("binary type"),kSentClose:Symbol("sent close"),kReceivedClose:Symbol("received close"),kByteParser:Symbol("byte parser")}},3574:(A,e,t)=>{"use strict";const{kReadyState:r,kController:s,kResponse:n,kBinaryType:o,kWebSocketURL:i}=t(2933);const{states:a,opcodes:c}=t(5913);const{MessageEvent:g,ErrorEvent:E}=t(6255);function isEstablished(A){return A[r]===a.OPEN}function isClosing(A){return A[r]===a.CLOSING}function isClosed(A){return A[r]===a.CLOSED}function fireEvent(A,e,t=Event,r){const s=new t(A,r);e.dispatchEvent(s)}function websocketMessageReceived(A,e,t){if(A[r]!==a.OPEN){return}let s;if(e===c.TEXT){try{s=new TextDecoder("utf-8",{fatal:true}).decode(t)Line truncated
|
||||
Generated
+402
-441
File diff suppressed because it is too large.
Load diff
+14
-14
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "setup-php",
|
||||
"version": "2.35.2",
|
||||
"version": "2.35.5",
|
||||
"private": false,
|
||||
"description": "Setup PHP for use with GitHub Actions",
|
||||
"main": "lib/install.js",
|
||||
@@ -40,26 +40,26 @@
|
||||
"compare-versions": "^6.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/compat": "^1.3.1",
|
||||
"@eslint/js": "9.32.0",
|
||||
"@eslint/compat": "^1.3.2",
|
||||
"@eslint/js": "9.35.0",
|
||||
"@types/jest": "^30.0.0",
|
||||
"@types/node": "^24.1.0",
|
||||
"@typescript-eslint/eslint-plugin": "^8.38.0",
|
||||
"@typescript-eslint/parser": "^8.38.0",
|
||||
"@types/node": "^24.3.1",
|
||||
"@typescript-eslint/eslint-plugin": "^8.43.0",
|
||||
"@typescript-eslint/parser": "^8.43.0",
|
||||
"@vercel/ncc": "^0.38.3",
|
||||
"eslint": "9.32.0",
|
||||
"eslint": "9.35.0",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-plugin-import": "^2.32.0",
|
||||
"eslint-plugin-jest": "^29.0.1",
|
||||
"eslint-plugin-prettier": "^5.5.3",
|
||||
"eslint-plugin-prettier": "^5.5.4",
|
||||
"globals": "^16.3.0",
|
||||
"jest": "^30.0.5",
|
||||
"jest-circus": "^30.0.5",
|
||||
"nock": "^14.0.7",
|
||||
"jest": "^30.1.3",
|
||||
"jest-circus": "^30.1.3",
|
||||
"nock": "^14.0.10",
|
||||
"prettier": "^3.6.2",
|
||||
"simple-git-hooks": "^2.13.0",
|
||||
"ts-jest": "^29.4.0",
|
||||
"typescript": "^5.8.3"
|
||||
"simple-git-hooks": "^2.13.1",
|
||||
"ts-jest": "^29.4.1",
|
||||
"typescript": "^5.9.2"
|
||||
},
|
||||
"overrides": {
|
||||
"test-exclude": "^7.0.1"
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
opcache.enable=1
|
||||
opcache.jit_buffer_size=128M
|
||||
opcache.jit=1235
|
||||
+1
-1
@@ -59,10 +59,10 @@ export async function setEnv(): Promise<void> {
|
||||
* Run the script
|
||||
*/
|
||||
export async function run(): Promise<void> {
|
||||
await setEnv();
|
||||
const os: string = process.platform;
|
||||
const tool = await utils.scriptTool(os);
|
||||
const run_path = await getScript(os);
|
||||
await setEnv();
|
||||
await exec(tool + run_path);
|
||||
}
|
||||
|
||||
|
||||
@@ -134,9 +134,9 @@ patch_brew() {
|
||||
update_dependencies() {
|
||||
patch_brew
|
||||
if ! [ -e /tmp/update_dependencies ]; then
|
||||
for repo in "$brew_repo" "$core_repo"; do
|
||||
for repo in "$brew_repo" "${core_repo:?}"; do
|
||||
if [ -e "$repo" ]; then
|
||||
git_retry -C "$repo" fetch origin master && git -C "$repo" reset --hard origin/master
|
||||
git_retry -C "$repo" fetch origin main && git -C "$repo" reset --hard origin/main
|
||||
fi
|
||||
done
|
||||
echo '' | sudo tee /tmp/update_dependencies >/dev/null 2>&1
|
||||
|
||||
@@ -11,13 +11,14 @@ install_icu() {
|
||||
# Function to add ext-intl with the given version of ICU
|
||||
add_intl() {
|
||||
icu=$(echo "$1" | cut -d'-' -f 2)
|
||||
supported_version=$(get -s -n "" https://api.github.com/repos/shivammathur/icu-intl/releases | grep -Po "${icu//./\\.}" | head -n 1)
|
||||
if [ "$icu" != "$supported_version" ]; then
|
||||
add_log "${cross:?}" "intl" "ICU $icu is not supported"
|
||||
supported_version=$(get -s -n "" https://api.github.com/repos/shivammathur/icu-intl/releases/tags/intl-"$icu" | grep -Po "php${version?}-intl-$icu" | head -n 1)
|
||||
[ -z "$supported_version" ] && supported_version=$(get -s -n "" https://github.com/shivammathur/icu-intl/releases/expanded_assets/intl-"$icu" | grep -Po "php$version-intl-$icu" | head -n 1)
|
||||
if [ "php$version-intl-$icu" != "$supported_version" ]; then
|
||||
add_log "${cross:?}" "intl" "ICU $icu is not supported for PHP $version"
|
||||
else
|
||||
[ "${ts:?}" = 'zts' ] && suffix='-zts'
|
||||
install_icu "$icu" >/dev/null 2>&1
|
||||
get -q -n "${ext_dir:?}/intl.so" "https://github.com/shivammathur/icu-intl/releases/download/intl/php${version:?}-intl-$icu$suffix$arch_suffix.so"
|
||||
get -q -n "${ext_dir:?}/intl.so" "https://github.com/shivammathur/icu-intl/releases/download/intl-$icu/php${version:?}-intl-$icu$suffix$arch_suffix.so"
|
||||
enable_extension intl extension
|
||||
add_extension_log intl "Installed and enabled with ICU $icu"
|
||||
fi
|
||||
|
||||
@@ -48,6 +48,19 @@ change_library_paths() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Add hiredis library
|
||||
add_hiredis_1.1.0() {
|
||||
hiredis_url=https://github.com/redis/hiredis/archive/v1.1.0.tar.gz
|
||||
hiredis_sha=fe6d21741ec7f3fc9df409d921f47dfc73a4d8ff64f4ac6f1d95f951bf7f53d6
|
||||
sed -Ei.bak -e "s#^ url.*# url \"$hiredis_url\"#" -e "s#^ sha256.*# sha256 \"$hiredis_sha\"#" ${core_repo:?}/Formula/h/hiredis.rb
|
||||
brew install -s hiredis
|
||||
lib_dir="${brew_prefix:?}"/opt/hiredis/lib
|
||||
if [ -e "$lib_dir"/libhiredis_ssl.1.1.0.dylib ]; then
|
||||
sudo ln -sf "$lib_dir"/libhiredis_ssl.1.1.0.dylib "$lib_dir"/libhiredis_ssl.dylib.1.1.0
|
||||
fi
|
||||
mv ${core_repo:?}/Formula/h/hiredis.rb.bak ${core_repo:?}/Formula/h/hiredis.rb
|
||||
}
|
||||
|
||||
# Add relay dependencies
|
||||
add_relay_dependencies() {
|
||||
add_extension json
|
||||
@@ -56,7 +69,12 @@ add_relay_dependencies() {
|
||||
if [ "$os" = "Darwin" ]; then
|
||||
. "${0%/*}"/tools/brew.sh
|
||||
configure_brew
|
||||
brew install lz4 hiredis zstd concurrencykit
|
||||
if [ "$relay_version" = "v0.7.0" ]; then
|
||||
brew install lz4 zstd concurrencykit
|
||||
add_hiredis_1.1.0 >/dev/null 2>&1
|
||||
else
|
||||
brew install lz4 hiredis zstd concurrencykit
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
@@ -61,6 +61,19 @@ Function Update-AuthJson {
|
||||
Set-Content -Path $composer_home\auth.json -Value ($existing | ConvertTo-Json -Depth 5)
|
||||
}
|
||||
|
||||
function Test-GitHubPublicAccess {
|
||||
param(
|
||||
[Parameter(Mandatory=$true)]
|
||||
[string]$Token
|
||||
)
|
||||
try {
|
||||
Invoke-RestMethod -Uri 'https://api.github.com/' -Headers @{ Authorization = "token $Token" } -ErrorAction Stop | Out-Null
|
||||
return $true
|
||||
} catch {
|
||||
return $false
|
||||
}
|
||||
}
|
||||
|
||||
# Function to setup authentication in composer.
|
||||
Function Set-ComposerAuth() {
|
||||
if(Test-Path env:COMPOSER_AUTH_JSON) {
|
||||
@@ -74,11 +87,15 @@ Function Set-ComposerAuth() {
|
||||
if(Test-Path env:PACKAGIST_TOKEN) {
|
||||
$composer_auth += '"http-basic": {"repo.packagist.com": { "username": "token", "password": "' + $env:PACKAGIST_TOKEN + '"}}'
|
||||
}
|
||||
if(-not(Test-Path env:GITHUB_TOKEN) -and (Test-Path env:COMPOSER_TOKEN)) {
|
||||
$env:GITHUB_TOKEN = $env:COMPOSER_TOKEN
|
||||
}
|
||||
if (Test-Path env:GITHUB_TOKEN) {
|
||||
$composer_auth += '"github-oauth": {"github.com": "' + $env:GITHUB_TOKEN + '"}'
|
||||
$write_token = $true
|
||||
$token = if ($env:COMPOSER_TOKEN) { $env:COMPOSER_TOKEN } else { $env:GITHUB_TOKEN }
|
||||
if ($token) {
|
||||
if ($env:GITHUB_SERVER_URL -ne "https://github.com" -and -not(Test-GitHubPublicAccess $token)) {
|
||||
$write_token = $false
|
||||
}
|
||||
if($write_token) {
|
||||
$composer_auth += '"github-oauth": {"github.com": "' + $token + '"}'
|
||||
}
|
||||
}
|
||||
if($composer_auth.length) {
|
||||
Update-AuthJson $composer_auth
|
||||
|
||||
@@ -65,6 +65,11 @@ update_auth_json() {
|
||||
printf '%s' "$merged" > "$composer_home/auth.json"
|
||||
}
|
||||
|
||||
# Function to check if public GitHub token authentication is possible.
|
||||
can_access_public_github() {
|
||||
curl --fail -s -H "Authorization: token $1" 'https://api.github.com/' >/dev/null 2>&1
|
||||
}
|
||||
|
||||
# Function to setup authentication in composer.
|
||||
set_composer_auth() {
|
||||
if [ -n "$COMPOSER_AUTH_JSON" ]; then
|
||||
@@ -78,8 +83,15 @@ set_composer_auth() {
|
||||
if [ -n "$PACKAGIST_TOKEN" ]; then
|
||||
composer_auth+=( '"http-basic": {"repo.packagist.com": { "username": "token", "password": "'"$PACKAGIST_TOKEN"'"}}' )
|
||||
fi
|
||||
if [ -n "${GITHUB_TOKEN:-$COMPOSER_TOKEN}" ]; then
|
||||
composer_auth+=( '"github-oauth": {"github.com": "'"${GITHUB_TOKEN:-$COMPOSER_TOKEN}"'"}' )
|
||||
token="${COMPOSER_TOKEN:-$GITHUB_TOKEN}"
|
||||
if [ -n "$token" ]; then
|
||||
write_token=true
|
||||
if [ "$GITHUB_SERVER_URL" != "https://github.com" ]; then
|
||||
can_access_public_github "$token" || write_token=false
|
||||
fi
|
||||
if [ "$write_token" = 'true' ]; then
|
||||
composer_auth+=( '"github-oauth": {"github.com": "'"$token"'"}' )
|
||||
fi
|
||||
fi
|
||||
if ((${#composer_auth[@]})); then
|
||||
update_auth_json "${composer_auth[@]}"
|
||||
@@ -188,7 +200,11 @@ add_tool() {
|
||||
elif [ -e /tmp/"$tool" ]; then
|
||||
sudo cp -a /tmp/"$tool" "$tool_path"
|
||||
fi
|
||||
add_log "$cross" "$tool" "Could not setup $tool"
|
||||
if [ "$status_code" = "404" ]; then
|
||||
add_log "$cross" "$tool" "Failed to download $tool from ${url[*]}"
|
||||
else
|
||||
add_log "$cross" "$tool" "Could not setup $tool"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ add_brew() {
|
||||
brew_prefix="$(get_brew_prefix)"
|
||||
if ! [ -d "$brew_prefix"/bin ]; then
|
||||
step_log "Setup Brew"
|
||||
get -s "" "/tmp/install.sh" "https://raw.githubusercontent.com/Homebrew/install/master/install.sh" | bash -s >/dev/null 2>&1
|
||||
get -s "" "/tmp/install.sh" "https://raw.githubusercontent.com/Homebrew/install/main/install.sh" | bash -s >/dev/null 2>&1
|
||||
add_log "${tick:?}" "Brew" "Installed Homebrew"
|
||||
fi
|
||||
add_brew_bins_to_path "$brew_prefix"
|
||||
|
||||
@@ -66,10 +66,14 @@ update_lists() {
|
||||
|
||||
# Function to get fingerprint from an Ubuntu PPA.
|
||||
ubuntu_fingerprint() {
|
||||
ppa=$1
|
||||
get -s -n "" "${lp_api[@]/%//~${ppa%/*}/+archive/${ppa##*/}}" | jq -r '.signing_key_fingerprint'
|
||||
ppa="$1"
|
||||
ppa_uri="~${ppa%/*}/+archive/ubuntu/${ppa##*/}"
|
||||
get -s -n "" "${lp_api[0]}/$ppa_uri" | jq -er '.signing_key_fingerprint' 2>/dev/null \
|
||||
|| get -s -n "" "${lp_api[1]}/$ppa_uri" | jq -er '.signing_key_fingerprint' 2>/dev/null \
|
||||
|| get -s -n "" "$ppa_sp/keys/$ppa.fingerprint"
|
||||
}
|
||||
|
||||
|
||||
# Function to get fingerprint from a Debian PPA.
|
||||
debian_fingerprint() {
|
||||
ppa=$1
|
||||
@@ -93,6 +97,7 @@ add_key() {
|
||||
sks_params="op=get&options=mr&exact=on&search=0x$fingerprint"
|
||||
key_urls=("${sks[@]/%/\/pks\/lookup\?"$sks_params"}")
|
||||
fi
|
||||
key_urls+=("$ppa_sp/keys/$ppa.gpg")
|
||||
[ ! -e "$key_source" ] && get -q -n "$key_file" "${key_urls[@]}"
|
||||
if [[ "$(file "$key_file")" =~ .*('Public-Key (old)'|'Secret-Key') ]]; then
|
||||
sudo gpg --batch --yes --dearmor "$key_file" >/dev/null 2>&1 && sudo mv "$key_file".gpg "$key_file"
|
||||
|
||||
@@ -35,6 +35,6 @@ Function Add-Protoc() {
|
||||
Add-ToProfile $current_profile 'protoc' "New-Alias protoc $bin_dir\protoc.exe"
|
||||
Add-Log $tick "protoc" "Added protoc $($protobuf_tag -replace 'v', '')"
|
||||
printf "$env:GROUP\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "protoc" "Click to read the protoc related license information"
|
||||
Write-Output (Invoke-WebRequest https://raw.githubusercontent.com/protocolbuffers/protobuf/master/LICENSE).Content
|
||||
Write-Output (Invoke-WebRequest https://raw.githubusercontent.com/protocolbuffers/protobuf/main/LICENSE).Content
|
||||
Write-Output "$env:END_GROUP"
|
||||
}
|
||||
@@ -25,6 +25,6 @@ add_protoc() {
|
||||
) >/dev/null 2>&1
|
||||
add_log "${tick:?}" "protoc" "Added protoc ${protobuf_tag:1}"
|
||||
printf "$GROUP\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "protoc" "Click to read the protoc related license information"
|
||||
curl "${curl_opts[@]:?}" https://raw.githubusercontent.com/protocolbuffers/protobuf/master/LICENSE
|
||||
curl "${curl_opts[@]:?}" https://raw.githubusercontent.com/protocolbuffers/protobuf/main/LICENSE
|
||||
echo "$END_GROUP"
|
||||
}
|
||||
+4
-2
@@ -145,7 +145,7 @@ get() {
|
||||
status_code=$(sudo curl -w "%{http_code}" -o "$file_path" "${curl_opts[@]}" "$link")
|
||||
[ "$status_code" = "200" ] && break
|
||||
done
|
||||
[ "$execute" = "-e" ] && sudo chmod a+x "$file_path"
|
||||
[[ "$execute" = "-e" && -e "$file_path" ]] && sudo chmod a+x "$file_path"
|
||||
[ "$mode" = "-v" ] && echo "$status_code"
|
||||
[ "$runner" = "self-hosted" ] && release_lock "$lock_path"
|
||||
fi
|
||||
@@ -244,7 +244,9 @@ configure_php() {
|
||||
add_php_config
|
||||
ini_config_dir="${src:?}"/configs/ini
|
||||
ini_config_files=("$ini_config_dir"/php.ini)
|
||||
jit_config_files=("$ini_config_dir"/jit.ini)
|
||||
arch="$(uname -m)"
|
||||
[[ "$arch" = "arm64" || "$arch" = "aarch64" ]] && jit_ini="$ini_config_dir"/jit_aarch64.ini || jit_ini="$ini_config_dir"/jit.ini
|
||||
jit_config_files=("$jit_ini")
|
||||
[[ "$version" =~ $xdebug3_versions ]] && ini_config_files+=("$ini_config_dir"/xdebug.ini)
|
||||
cat "${ini_config_files[@]}" | sudo tee -a "${ini_file[@]:?}" >/dev/null 2>&1
|
||||
[[ "$version" =~ $jit_versions ]] && cat "${jit_config_files[@]}" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null 2>&1
|
||||
|
||||
+27
-5
@@ -1,5 +1,6 @@
|
||||
import path from 'path';
|
||||
import fs from 'fs';
|
||||
import * as cv from 'compare-versions';
|
||||
import * as fetch from './fetch';
|
||||
import * as packagist from './packagist';
|
||||
import * as utils from './utils';
|
||||
@@ -20,6 +21,11 @@ interface IRef {
|
||||
* @param data
|
||||
*/
|
||||
export async function getSemverVersion(data: RS): Promise<string> {
|
||||
const fixSemver = (t: string): string => {
|
||||
if (/^\d+\.\d+\.\d+(-|$)/.test(t)) return t;
|
||||
const m = t.match(/^(\d+\.\d+\.\d+)([A-Za-z]+[0-9A-Za-z.]+)$/);
|
||||
return m ? `${m[1]}-${m[2]}` : t;
|
||||
};
|
||||
const search: string = data['version_prefix'] + data['version'];
|
||||
const url = `https://api.github.com/repos/${data['repository']}/git/matching-refs/tags%2F${search}.`;
|
||||
const github_token: string =
|
||||
@@ -30,10 +36,24 @@ export async function getSemverVersion(data: RS): Promise<string> {
|
||||
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');
|
||||
const refs: IRef[] = JSON.parse(response['data']);
|
||||
const tags = refs
|
||||
.map((i: IRef) => (i.ref?.split('/').pop() ?? '').replace(/^v(?=\d)/, ''))
|
||||
.filter((t: string) => t.length > 0);
|
||||
const fixedToOriginal = new Map<string, string>();
|
||||
const fixed = tags.map(t => {
|
||||
const f = fixSemver(t);
|
||||
fixedToOriginal.set(f, t);
|
||||
return f;
|
||||
});
|
||||
fixed.sort((a, b) => {
|
||||
try {
|
||||
return cv.compareVersions(b, a);
|
||||
} catch {
|
||||
return b.localeCompare(a, 'en', {numeric: true, sensitivity: 'base'});
|
||||
}
|
||||
});
|
||||
return fixedToOriginal.get(fixed[0]) ?? fixed[0];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -263,13 +283,15 @@ export async function addComposer(data: RS): Promise<string> {
|
||||
const github = data['github'];
|
||||
const getcomposer = data['domain'];
|
||||
const cds = 'https://dl.cloudsmith.io';
|
||||
const spc = 'https://artifacts.setup-php.com';
|
||||
const filename = `composer-${data['php_version']}-${channel}.phar`;
|
||||
const releases_url = `${github}/shivammathur/composer-cache/releases/latest/download/${filename}`;
|
||||
const cds_url = `${cds}/public/shivammathur/composer-cache/raw/files/${filename}`;
|
||||
const spc_url = `${spc}/composer/${filename}`;
|
||||
const lts_url = `${getcomposer}/download/latest-2.2.x/composer.phar`;
|
||||
const is_lts = /^5\.[3-6]$|^7\.[0-1]$/.test(data['php_version']);
|
||||
const version_source_url = `${getcomposer}/composer-${channel}.phar`;
|
||||
let cache_url = `${releases_url},${cds_url}`;
|
||||
let cache_url = `${releases_url},${spc_url},${cds_url}`;
|
||||
let source_url = `${getcomposer}/composer.phar`;
|
||||
switch (true) {
|
||||
case /^snapshot$/.test(channel):
|
||||
|
||||
Reference in new issue
Block a user