mirror of
				https://github.com/shivammathur/setup-php.git
				synced 2025-10-31 07:16:22 +07:00 
			
		
		
		
	Compare commits
	
		
			59 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 74d4e20179 | |||
| ae0a50642d | |||
| 5187d97121 | |||
| eddb855af9 | |||
| eec99716ef | |||
| 788275d42c | |||
| be38e7a127 | |||
| 47ac2e221b | |||
| 36338985e2 | |||
| 185b391822 | |||
| f210bb3904 | |||
| 6f153798c8 | |||
| f7b7badb27 | |||
| 8473b2327f | |||
| 3efd894d72 | |||
| 1e8cc75dad | |||
| 2e18086d64 | |||
| 9cf252c302 | |||
| aa0de4323f | |||
| 00242b5fc2 | |||
| 319ac00da8 | |||
| 38e8065d61 | |||
| 91a018aa46 | |||
| bdaf698d5d | |||
| ab68d9f583 | |||
| d65cf8f3f2 | |||
| 6beaa7dc34 | |||
| 79ab6fe269 | |||
| 4cbbb6d82c | |||
| 4cba65b8c5 | |||
| 7fea117d1c | |||
| 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 | 
							
								
								
									
										11
									
								
								.github/SECURITY.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/SECURITY.md
									
									
									
									
										vendored
									
									
								
							| @ -2,23 +2,20 @@ | |||||||
|  |  | ||||||
| ## Supported Versions | ## Supported Versions | ||||||
|  |  | ||||||
| The latest patch versions of `v1` and `v2` releases of this project are supported for security updates. | The latest patch version of `v2` release of this project is supported for security updates. | ||||||
|  |  | ||||||
| ## Supported PHP Versions | ## Supported PHP Versions | ||||||
|  |  | ||||||
| This security policy only applies to the latest patches of the following PHP versions. | This security policy only applies to the latest patch releases of the following PHP versions. | ||||||
|  |  | ||||||
| | Version | Supported          | | | Version | Supported          | | ||||||
| |---------|--------------------| | |---------|--------------------| | ||||||
| | 8.1     | :white_check_mark: | | | 8.1     | :white_check_mark: | | ||||||
| | 8.2     | :white_check_mark: | | | 8.2     | :white_check_mark: | | ||||||
| | 8.3     | :white_check_mark: | | | 8.3     | :white_check_mark: | | ||||||
|  | | 8.4     | :white_check_mark: | | ||||||
|  |  | ||||||
| ## Reporting a Vulnerability | ## Reporting a Vulnerability | ||||||
|  |  | ||||||
| If you have found any issues that might have security implications in the versions supported, please send a report privately to [contact@shivammathur.com](mailto:contact@shivammathur.com). | If you have found any issues that might have security implications in the versions supported, please send a report privately to [contact@setup-php.com](mailto:contact@setup-php.com). | ||||||
| Do not report security reports publicly. | Do not report security reports publicly. | ||||||
|  |  | ||||||
| ## Tidelift |  | ||||||
|  |  | ||||||
| If you use this GitHub Action through a Tidelift subscription, please refer to [https://tidelift.com/security](https://tidelift.com/security). |  | ||||||
							
								
								
									
										9
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							| @ -8,6 +8,7 @@ permissions: | |||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   codeql: |   codeql: | ||||||
|  |     if: github.event.repository.fork == false | ||||||
|     permissions: |     permissions: | ||||||
|       actions: read  # for github/codeql-action/init to get workflow details |       actions: read  # for github/codeql-action/init to get workflow details | ||||||
|       contents: read  # for actions/checkout to fetch code |       contents: read  # for actions/checkout to fetch code | ||||||
| @ -15,18 +16,18 @@ jobs: | |||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|         with: |         with: | ||||||
|           fetch-depth: 2 |           fetch-depth: 2 | ||||||
|  |  | ||||||
|       - name: Initialize CodeQL |       - name: Initialize CodeQL | ||||||
|         uses: github/codeql-action/init@v3 |         uses: github/codeql-action/init@v4 | ||||||
|         with: |         with: | ||||||
|           config-file: ./.github/codeql/codeql-configuration.yml |           config-file: ./.github/codeql/codeql-configuration.yml | ||||||
|           languages: javascript |           languages: javascript | ||||||
|  |  | ||||||
|       - name: Autobuild |       - name: Autobuild | ||||||
|         uses: github/codeql-action/autobuild@v3 |         uses: github/codeql-action/autobuild@v4 | ||||||
|  |  | ||||||
|       - name: Perform CodeQL Analysis |       - name: Perform CodeQL Analysis | ||||||
|         uses: github/codeql-action/analyze@v3 |         uses: github/codeql-action/analyze@v4 | ||||||
|  | |||||||
							
								
								
									
										18
									
								
								.github/workflows/docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								.github/workflows/docs.yml
									
									
									
									
										vendored
									
									
								
							| @ -8,6 +8,7 @@ permissions: | |||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   create: |   create: | ||||||
|  |     if: github.event.repository.fork == false | ||||||
|     permissions: |     permissions: | ||||||
|       contents: none |       contents: none | ||||||
|     name: Create |     name: Create | ||||||
| @ -15,8 +16,8 @@ jobs: | |||||||
|     strategy: |     strategy: | ||||||
|       fail-fast: false |       fail-fast: false | ||||||
|       matrix: |       matrix: | ||||||
|         operating-system: [ubuntu-24.04, ubuntu-22.04, windows-2022, macos-13] |         operating-system: [ubuntu-24.04, ubuntu-22.04, windows-2022, macos-15-intel] | ||||||
|         php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5'] |         php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5', '8.6'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|         uses: shivammathur/setup-php@v2 |         uses: shivammathur/setup-php@v2 | ||||||
| @ -87,11 +88,12 @@ jobs: | |||||||
|           Remove-Item "$env:file.all" -Force |           Remove-Item "$env:file.all" -Force | ||||||
|           Remove-Item "$env:file.builtin" -Force |           Remove-Item "$env:file.builtin" -Force | ||||||
|       - name: Upload artifacts |       - name: Upload artifacts | ||||||
|         uses: actions/upload-artifact@v4 |         uses: actions/upload-artifact@v5 | ||||||
|         with: |         with: | ||||||
|           name: lists-php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md |           name: lists-php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md | ||||||
|           path: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md |           path: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md | ||||||
|   update: |   update: | ||||||
|  |     if: github.event.repository.fork == false | ||||||
|     permissions: |     permissions: | ||||||
|       contents: write  # for Git to git push |       contents: write  # for Git to git push | ||||||
|     name: Update |     name: Update | ||||||
| @ -99,11 +101,11 @@ jobs: | |||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|         with: |         with: | ||||||
|           repository: ${{ github.repository }}.wiki |           repository: ${{ github.repository }}.wiki | ||||||
|       - name: Download artifacts |       - name: Download artifacts | ||||||
|         uses: actions/download-artifact@v4 |         uses: actions/download-artifact@v6 | ||||||
|         with: |         with: | ||||||
|           path: ${{ github.workspace }}/lists |           path: ${{ github.workspace }}/lists | ||||||
|           pattern: lists-* |           pattern: lists-* | ||||||
| @ -114,11 +116,11 @@ jobs: | |||||||
|           git config --local user.name "${{ github.repository_owner }}" |           git config --local user.name "${{ github.repository_owner }}" | ||||||
|       - name: Combine |       - name: Combine | ||||||
|         run: | |         run: | | ||||||
|           for os in ubuntu-24.04 ubuntu-22.04 windows-2022 windows-2019 macos-13 macos-14 macos-15; do |           for os in ubuntu-24.04 ubuntu-22.04 windows-2025 windows-2022 windows-2019 macos-13 macos-14 macos-15 macos-26; 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 |             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 8.2 8.3 8.4 8.5; do |             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 8.2 8.3 8.4 8.5 8.6; do | ||||||
|               if [[ "${os%-*}" = "macos" ]]; then |               if [[ "${os%-*}" = "macos" ]]; then | ||||||
|                 cat lists/php"$version"-macos-13.md >> Php-extensions-loaded-on-"$os".md |                 cat lists/php"$version"-macos-15-intel.md >> Php-extensions-loaded-on-"$os".md | ||||||
|               elif [ "${os%-*}" = "windows" ]; then |               elif [ "${os%-*}" = "windows" ]; then | ||||||
|                 cat lists/php"$version"-windows-2022.md >> Php-extensions-loaded-on-"$os".md |                 cat lists/php"$version"-windows-2022.md >> Php-extensions-loaded-on-"$os".md | ||||||
|               else |               else | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								.github/workflows/node.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/node.yml
									
									
									
									
										vendored
									
									
								
							| @ -29,12 +29,12 @@ jobs: | |||||||
|         operating-system: [ubuntu-latest, windows-latest, macos-latest] |         operating-system: [ubuntu-latest, windows-latest, macos-latest] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|         with: |         with: | ||||||
|           fetch-depth: 2 |           fetch-depth: 2 | ||||||
|  |  | ||||||
|       - name: Setup Node.js 20.x |       - name: Setup Node.js 20.x | ||||||
|         uses: actions/setup-node@v4 |         uses: actions/setup-node@v6 | ||||||
|         with: |         with: | ||||||
|           node-version: 20.x |           node-version: 20.x | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										6
									
								
								.github/workflows/php.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/php.yml
									
									
									
									
										vendored
									
									
								
							| @ -28,8 +28,8 @@ jobs: | |||||||
|     strategy: |     strategy: | ||||||
|       fail-fast: false |       fail-fast: false | ||||||
|       matrix: |       matrix: | ||||||
|         operating-system: [ubuntu-24.04, ubuntu-22.04, windows-2022, macos-13] |         operating-system: [ubuntu-24.04, ubuntu-22.04, windows-2022, macos-15-intel] | ||||||
|         php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5'] |         php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5', '8.6'] | ||||||
|         include: |         include: | ||||||
|           - operating-system: ubuntu-24.04 |           - operating-system: ubuntu-24.04 | ||||||
|             php-versions: '' |             php-versions: '' | ||||||
| @ -39,7 +39,7 @@ jobs: | |||||||
|       key: cache-v5 |       key: cache-v5 | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       - name: Setup cache environment |       - name: Setup cache environment | ||||||
|         id: cache-env |         id: cache-env | ||||||
|  | |||||||
							
								
								
									
										8
									
								
								.github/workflows/publish.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/publish.yml
									
									
									
									
										vendored
									
									
								
							| @ -19,16 +19,16 @@ jobs: | |||||||
|     steps: |     steps: | ||||||
|       - name: Checkout release |       - name: Checkout release | ||||||
|         if: github.event_name != 'workflow_dispatch' |         if: github.event_name != 'workflow_dispatch' | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       - name: Checkout tag |       - name: Checkout tag | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|         if: github.event_name == 'workflow_dispatch' |         if: github.event_name == 'workflow_dispatch' | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event.inputs.tag }} |           ref: ${{ github.event.inputs.tag }} | ||||||
|  |  | ||||||
|       - name: Setup Node.js |       - name: Setup Node.js | ||||||
|         uses: actions/setup-node@v4 |         uses: actions/setup-node@v6 | ||||||
|         with: |         with: | ||||||
|           node-version: '20.x' |           node-version: '20.x' | ||||||
|           registry-url: https://registry.npmjs.org |           registry-url: https://registry.npmjs.org | ||||||
| @ -46,7 +46,7 @@ jobs: | |||||||
|           NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} |           NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | ||||||
|  |  | ||||||
|       - name: Change to GitHub Packages registry |       - name: Change to GitHub Packages registry | ||||||
|         uses: actions/setup-node@v4 |         uses: actions/setup-node@v6 | ||||||
|         with: |         with: | ||||||
|           registry-url: https://npm.pkg.github.com |           registry-url: https://npm.pkg.github.com | ||||||
|           scope: '@shivammathur' |           scope: '@shivammathur' | ||||||
|  | |||||||
							
								
								
									
										82
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										82
									
								
								README.md
									
									
									
									
									
								
							| @ -10,7 +10,7 @@ | |||||||
|   <a href="https://github.com/shivammathur/setup-php" title="GitHub action to setup PHP"><img alt="GitHub Actions status" src="https://github.com/shivammathur/setup-php/workflows/Main%20workflow/badge.svg"></a> |   <a href="https://github.com/shivammathur/setup-php" title="GitHub action to setup PHP"><img alt="GitHub Actions status" src="https://github.com/shivammathur/setup-php/workflows/Main%20workflow/badge.svg"></a> | ||||||
|   <a href="https://codecov.io/gh/shivammathur/setup-php" title="Code coverage"><img alt="Codecov Code Coverage" src="https://img.shields.io/codecov/c/github/shivammathur/setup-php?logo=codecov"></a> |   <a href="https://codecov.io/gh/shivammathur/setup-php" title="Code coverage"><img alt="Codecov Code Coverage" src="https://img.shields.io/codecov/c/github/shivammathur/setup-php?logo=codecov"></a> | ||||||
|   <a href="https://github.com/shivammathur/setup-php/blob/main/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="https://github.com/shivammathur/setup-php/blob/main/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.5-777bb3.svg?logo=php&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.6-777bb3.svg?logo=php&logoColor=white&labelColor=555555"></a> | ||||||
| </p> | </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://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> | ||||||
| @ -68,18 +68,20 @@ Both `GitHub-hosted` and `self-hosted` runners are supported by `setup-php` on t | |||||||
|  |  | ||||||
| ### GitHub-Hosted Runners | ### GitHub-Hosted Runners | ||||||
|  |  | ||||||
| | Virtual environment | Arch    | YAML workflow label                | Pre-installed PHP      | | | Virtual environment | Arch    | YAML workflow label                | Pre-installed PHP | | ||||||
| |---------------------|---------|------------------------------------|------------------------| | |---------------------|---------|------------------------------------|-------------------| | ||||||
| | Ubuntu 24.04        | x86_64  | `ubuntu-latest` or `ubuntu-24.04`  | `PHP 8.3`              | | | Ubuntu 24.04        | x86_64  | `ubuntu-latest` or `ubuntu-24.04`  | `PHP 8.3`         | | ||||||
| | Ubuntu 22.04        | x86_64  | `ubuntu-22.04`                     | `PHP 8.1`              | | | Ubuntu 22.04        | x86_64  | `ubuntu-22.04`                     | `PHP 8.1`         | | ||||||
| | Ubuntu 24.04        | aarch64 | `ubuntu-24.04-arm`                 | `PHP 8.3`              | | | Ubuntu 24.04        | aarch64 | `ubuntu-24.04-arm`                 | `PHP 8.3`         | | ||||||
| | Ubuntu 22.04        | aarch64 | `ubuntu-22.04-arm`                 | `PHP 8.1`              | | | Ubuntu 22.04        | aarch64 | `ubuntu-22.04-arm`                 | `PHP 8.1`         | | ||||||
| | Windows Server 2025 | x64     | `windows-2025`                     | `PHP 8.3`              | | | Windows Server 2025 | x64     | `windows-2025`                     | `PHP 8.3`         | | ||||||
| | Windows Server 2022 | x64     | `windows-latest` or `windows-2022` | `PHP 8.3`              | | | Windows Server 2022 | x64     | `windows-latest` or `windows-2022` | `PHP 8.3`         | | ||||||
| | Windows Server 2019 | x64     | `windows-2019`                     | `PHP 8.3`              | | | Windows Server 2019 | x64     | `windows-2019`                     | `PHP 8.3`         | | ||||||
| | macOS Sequoia 15.x  | arm64   | `macos-15`                         | -                      | | | macOS Tahoe 26.x    | arm64   | `macos-26`                         | -                 | | ||||||
| | macOS Sonoma 14.x   | arm64   | `macos-latest` or `macos-14`       | -                      | | | macOS Sequoia 15.x  | arm64   | `macos-latest` or `macos-15`       | -                 | | ||||||
| | macOS Ventura 13.x  | x86_64  | `macos-13`                         | `PHP 8.3`              | | | macOS Sonoma 14.x   | arm64   | `macos-14`                         | -                 | | ||||||
|  | | macOS Sequoia 15.x  | x86_64  | `macos-15-intel`                   | `PHP 8.3`         | | ||||||
|  | | macOS Ventura 13.x  | x86_64  | `macos-13`                         | `PHP 8.3`         | | ||||||
|  |  | ||||||
| ### Self-Hosted Runners | ### Self-Hosted Runners | ||||||
|  |  | ||||||
| @ -91,6 +93,7 @@ Both `GitHub-hosted` and `self-hosted` runners are supported by `setup-php` on t | |||||||
| | Debian 11                        | `self-hosted` or `Linux`   | | | Debian 11                        | `self-hosted` or `Linux`   | | ||||||
| | Windows 7 and newer              | `self-hosted` or `Windows` | | | Windows 7 and newer              | `self-hosted` or `Windows` | | ||||||
| | Windows Server 2012 R2 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 Sequoia 15.x x86_64/arm64  | `self-hosted` or `macOS`   | | ||||||
| | macOS Sonoma 14.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`   | | | macOS Ventura 13.x x86_64/arm64  | `self-hosted` or `macOS`   | | ||||||
| @ -101,11 +104,11 @@ Both `GitHub-hosted` and `self-hosted` runners are supported by `setup-php` on t | |||||||
|  |  | ||||||
| ## :tada: PHP Support | ## :tada: PHP Support | ||||||
|  |  | ||||||
| On all supported OS/Platforms the following PHP versions can be set up as per the runner. | On all supported OS/Platforms, the following PHP versions can be set up as per the runner. | ||||||
|  |  | ||||||
| - PHP 5.3 to PHP 8.5 on GitHub-hosted runners, except for macOS ARM64 runners (macos-14). | - PHP 5.3 to PHP 8.6 on GitHub-hosted runners, except for macOS ARM64 runners (macos-14). | ||||||
| - PHP 5.6 to PHP 8.5 on GitHub-hosted macOS ARM64 runners (macos-14). | - PHP 5.6 to PHP 8.6 on GitHub-hosted macOS ARM64 runners (macos-14). | ||||||
| - PHP 5.6 to PHP 8.5 on self-hosted runners. | - PHP 5.6 to PHP 8.6 on self-hosted runners. | ||||||
|  |  | ||||||
| | PHP Version | Stability | Release Support       | Runner Support                 | | | PHP Version | Stability | Release Support       | Runner Support                 | | ||||||
| |-------------|-----------|-----------------------|--------------------------------| | |-------------|-----------|-----------------------|--------------------------------| | ||||||
| @ -124,10 +127,11 @@ On all supported OS/Platforms the following PHP versions can be set up as per th | |||||||
| | `8.3`       | `Stable`  | `Active`              | `GitHub-hosted`, `self-hosted` | | | `8.3`       | `Stable`  | `Active`              | `GitHub-hosted`, `self-hosted` | | ||||||
| | `8.4`       | `Stable`  | `Active`              | `GitHub-hosted`, `self-hosted` | | | `8.4`       | `Stable`  | `Active`              | `GitHub-hosted`, `self-hosted` | | ||||||
| | `8.5`       | `Nightly` | `In development`      | `GitHub-hosted`, `self-hosted` | | | `8.5`       | `Nightly` | `In development`      | `GitHub-hosted`, `self-hosted` | | ||||||
|  | | `8.6`       | `Nightly` | `In development`      | `GitHub-hosted`, `self-hosted` | | ||||||
|  |  | ||||||
|  |  | ||||||
| > [!Note] | > [!Note] | ||||||
| > - Specifying `8.5` in `php-version` input installs a nightly build of `PHP 8.5.0-dev`. See [nightly build setup](#nightly-build-setup) for more information. | > - Specifying `8.6` in `php-version` input installs a nightly build of `PHP 8.6.0-dev` from the master branch of PHP. Specifying `8.5` in `php-version` input installs a nightly build of `PHP 8.5.0-dev` from the PHP-8.5 branch of PHP. See [nightly build setup](#nightly-build-setup) for more information. | ||||||
| > - To use JIT on `PHP 8.0` and above, refer to the [JIT configuration](#jit-configuration) section. | > - To use JIT on `PHP 8.0` and above, refer to the [JIT configuration](#jit-configuration) section. | ||||||
|  |  | ||||||
| ## :heavy_plus_sign: PHP Extension Support | ## :heavy_plus_sign: PHP Extension Support | ||||||
| @ -465,6 +469,7 @@ Disable coverage for these reasons: | |||||||
| - Specify the GitHub token to use for authentication. | - Specify the GitHub token to use for authentication. | ||||||
| - Accepts a `string`. | - Accepts a `string`. | ||||||
| - By default, `GITHUB_TOKEN` secret provided by GitHub Actions is used. | - 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 | ### Outputs | ||||||
|  |  | ||||||
| @ -558,10 +563,10 @@ jobs: | |||||||
|  |  | ||||||
| ### Nightly Build Setup | ### Nightly Build Setup | ||||||
|  |  | ||||||
| > Set up a nightly build of `PHP 8.5`. | > Set up a nightly build of `PHP 8.5` or `PHP 8.6`. | ||||||
|  |  | ||||||
| - These PHP versions are currently in active development and might contain bugs and breaking changes. | - These PHP versions are currently in active development and might contain bugs and breaking changes. | ||||||
| - Some user space extensions might not support this version currently. | - Some user space extensions might not support these versions currently. | ||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| steps: | steps: | ||||||
| @ -741,7 +746,7 @@ act -P ubuntu-22.04=shivammathur/node:2204 | |||||||
|  |  | ||||||
| - To enable JIT, enable `opcache` in cli mode by setting `opcache.enable_cli=1`. | - 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. | - 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 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`. | For example to enable JIT in `tracing` mode with buffer size of `64 MB`. | ||||||
| @ -797,8 +802,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. | 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 | ```yaml | ||||||
| - name: Setup PHP | - name: Setup PHP | ||||||
|   uses: shivammathur/setup-php@v2 |   uses: shivammathur/setup-php@v2 | ||||||
| @ -807,6 +810,10 @@ The `COMPOSER_TOKEN` and `GITHUB_TOKEN` environment variables have been deprecat | |||||||
|     github-token: ${{ secrets.YOUR_PAT_TOKEN }} |     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 | ### Private Packagist Authentication | ||||||
|  |  | ||||||
| If you use Private Packagist for your private composer dependencies, you can set the `PACKAGIST_TOKEN` environment variable to authenticate. | If you use Private Packagist for your private composer dependencies, you can set the `PACKAGIST_TOKEN` environment variable to authenticate. | ||||||
| @ -995,18 +1002,14 @@ Examples of using `setup-php` with various PHP frameworks and packages. | |||||||
|  |  | ||||||
| ## :sparkling_heart: Support This Project | ## :sparkling_heart: Support This Project | ||||||
|  |  | ||||||
| - Please star the project and share it. If you blog, please share your experience of using `setup-php`. |  | ||||||
| - Please [reach out](mailto:contact@setup-php.com) if you have any questions about sponsoring setup-php. |  | ||||||
|  |  | ||||||
| Many users and organisations support setup-php via [GitHub Sponsors](https://github.com/sponsors/shivammathur). |  | ||||||
|  |  | ||||||
| <a href="https://github.com/sponsors/shivammathur"><img src="https://setup-php.com/sponsors.svg?" alt="Sponsor shivammathur"></a> |  | ||||||
|  |  | ||||||
| These companies generously provide setup-php their products and services to aid in the development of this project. | These companies generously provide setup-php their products and services to aid in the development of this project. | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
|   <a target="_blank" href="https://www.jetbrains.com/?from=setup-php"> |   <a target="_blank" href="https://www.jetbrains.com/?from=setup-php#gh-light-mode-only"> | ||||||
|     <img src="https://setup-php.com/sponsors/jetbrains.svg" alt="JetBrains" width="140" height="80"> |     <img src="https://setup-php.com/sponsors/jetbrains.svg" alt="JetBrains" width="140" height="100"> | ||||||
|  |   </a> | ||||||
|  |   <a target="_blank" href="https://www.jetbrains.com/?from=setup-php#gh-dark-mode-only"> | ||||||
|  |     <img src="https://setup-php.com/sponsors/jetbrains-white.svg" alt="JetBrains" width="140" height="100"> | ||||||
|   </a> |   </a> | ||||||
|             |             | ||||||
|   <a target="_blank" href="https://www.cloudflare.com/lp/project-alexandria/#gh-light-mode-only"> |   <a target="_blank" href="https://www.cloudflare.com/lp/project-alexandria/#gh-light-mode-only"> | ||||||
| @ -1023,11 +1026,22 @@ These companies generously provide setup-php their products and services to aid | |||||||
|     <img src="https://setup-php.com/sponsors/macstadium-white.png" alt="Mac Stadium" width="200" height="80"> |     <img src="https://setup-php.com/sponsors/macstadium-white.png" alt="Mac Stadium" width="200" height="80"> | ||||||
|   </a> |   </a> | ||||||
|             |             | ||||||
|   <a target="_blank" href="#"> |   <a target="_blank" href="https://m.do.co/c/f1a8ee1277b0#gh-light-mode-only"> | ||||||
|     <img src="https://setup-php.com/sponsors/tidelift.png" alt="Tidelift" width="94" height="80"> |     <img src="https://setup-php.com/sponsors/digitalocean.svg" alt="Digitalocean" width="100" height="100"> | ||||||
|  |   </a> | ||||||
|  |   <a target="_blank" href="https://m.do.co/c/f1a8ee1277b0#gh-dark-mode-only"> | ||||||
|  |     <img src="https://setup-php.com/sponsors/digitalocean-white.svg" alt="Digitalocean" width="100" height="100"> | ||||||
|   </a> |   </a> | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  | Many users and organizations support setup-php via [GitHub Sponsors](https://github.com/sponsors/shivammathur). | ||||||
|  |  | ||||||
|  | <a href="https://github.com/sponsors/shivammathur"><img src="https://setup-php.com/sponsors.svg?" alt="Sponsor shivammathur"></a> | ||||||
|  |  | ||||||
|  | - If you use setup-php, please consider starring the project and share it.  | ||||||
|  | - If you blog, please share your experience of using `setup-php`. | ||||||
|  | - Please [reach out](mailto:contact@setup-php.com) if you have any questions about sponsoring setup-php. | ||||||
|  |  | ||||||
| ## :package: Dependencies | ## :package: Dependencies | ||||||
|  |  | ||||||
| - [Node.js dependencies](https://github.com/shivammathur/setup-php/network/dependencies "Node.js dependencies") | - [Node.js dependencies](https://github.com/shivammathur/setup-php/network/dependencies "Node.js dependencies") | ||||||
|  | |||||||
| @ -61,7 +61,23 @@ jest.mock('../src/fetch', () => ({ | |||||||
|         } else if (!token || token === 'valid_token') { |         } else if (!token || token === 'valid_token') { | ||||||
|           return {data: `[{"ref": "refs/tags/1.2.3", "url": "${url}"}]`}; |           return {data: `[{"ref": "refs/tags/1.2.3", "url": "${url}"}]`}; | ||||||
|         } else if (token === 'beta_token') { |         } 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') { |         } else if (token === 'no_data') { | ||||||
|           return {data: '[]'}; |           return {data: '[]'}; | ||||||
|         } else { |         } else { | ||||||
| @ -89,11 +105,14 @@ jest.mock('../src/packagist', () => ({ | |||||||
|  |  | ||||||
| describe('Tools tests', () => { | describe('Tools tests', () => { | ||||||
|   it.each` |   it.each` | ||||||
|     token              | version |     token                | version | ||||||
|     ${'invalid_token'} | ${'1.2'} |     ${'invalid_token'}   | ${'1.2'} | ||||||
|     ${'valid_token'}   | ${'1.2.3'} |     ${'valid_token'}     | ${'1.2.3'} | ||||||
|     ${'beta_token'}    | ${'1.2.3-beta1'} |     ${'beta_token'}      | ${'1.2.3beta1'} | ||||||
|     ${''}              | ${'1.2.3'} |     ${'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}) => { |   `('checking getSemverVersion: $token', async ({token, version}) => { | ||||||
|     process.env['GITHUB_TOKEN'] = token; |     process.env['GITHUB_TOKEN'] = token; | ||||||
|     expect( |     expect( | ||||||
| @ -101,6 +120,26 @@ describe('Tools tests', () => { | |||||||
|     ).toBe(version); |     ).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` |   it.each` | ||||||
|     tool                 | fetch_latest | version |     tool                 | fetch_latest | version | ||||||
|     ${'tool'}            | ${'true'}    | ${'3.2.1'} |     ${'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'} |     ${'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'} |     ${'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'} |     ${'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'} |     ${'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'} |     ${'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'} |     ${'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', |       '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_blackfire', | ||||||
|         'add_tool https://get.blackfire.io/blackfire-player-v1.22.0.phar blackfire-player "-V"', |         '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"', |         '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', |       '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_composer_tool behat behat behat/ scoped', | ||||||
|         'add_blackfire', |         'add_blackfire', | ||||||
|         'add_tool https://get.blackfire.io/blackfire-player-v1.22.0.phar blackfire-player "-V"', |         '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', |       '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', |         'Add-Blackfire', | ||||||
|         'blackfire-player is not a windows tool', |         'blackfire-player is not a windows tool', | ||||||
|         'Add-Tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr "-V"', |         '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', |       '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 codeception codeception codeception/ global', | ||||||
|         'Add-ComposerTool prestissimo prestissimo hirak/ global', |         'Add-ComposerTool prestissimo prestissimo hirak/ global', | ||||||
|         'Add-ComposerTool automatic-composer-prefetcher automatic-composer-prefetcher narrowspark/ global', |         'Add-ComposerTool automatic-composer-prefetcher automatic-composer-prefetcher narrowspark/ global', | ||||||
| @ -573,10 +618,10 @@ describe('Tools tests', () => { | |||||||
|   it.each` |   it.each` | ||||||
|     tools_csv                                             | script |     tools_csv                                             | script | ||||||
|     ${'none'}                                             | ${''} |     ${'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"'} |     ${'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://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-preview.phar,https://getcomposer.org/composer-preview.phar composer preview'} |     ${'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://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-1.phar,https://getcomposer.org/composer-1.phar composer'} |     ${'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://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-snapshot.phar,https://getcomposer.org/composer.phar composer snapshot'} |     ${'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}) => { |   `('checking composer setup: $tools_csv', async ({tools_csv, script}) => { | ||||||
|     expect(await tools.addTools(tools_csv, '7.4', 'linux')).toContain(script); |     expect(await tools.addTools(tools_csv, '7.4', 'linux')).toContain(script); | ||||||
|   }); |   }); | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -11,7 +11,7 @@ jobs: | |||||||
|         php-versions: ['7.4', '8.0', '8.1'] |         php-versions: ['7.4', '8.0', '8.1'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -19,7 +19,7 @@ jobs: | |||||||
|         # blackfire-player supports PHP >= 5.5 |         # blackfire-player supports PHP >= 5.5 | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -19,7 +19,7 @@ jobs: | |||||||
|         # Blackfire supports PHP >= 5.3 on Ubuntu and macOS, and PHP >= 5.4 on Windows |         # Blackfire supports PHP >= 5.3 on Ubuntu and macOS, and PHP >= 5.4 on Windows | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -28,7 +28,7 @@ jobs: | |||||||
|         options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3 |         options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3 | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
| @ -75,7 +75,7 @@ jobs: | |||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
| @ -108,7 +108,7 @@ jobs: | |||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -28,7 +28,7 @@ jobs: | |||||||
|         options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3 |         options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3 | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
| @ -75,7 +75,7 @@ jobs: | |||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
| @ -108,7 +108,7 @@ jobs: | |||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -11,7 +11,7 @@ jobs: | |||||||
|     runs-on: ${{ matrix.operating-system }} |     runs-on: ${{ matrix.operating-system }} | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
| @ -47,7 +47,7 @@ jobs: | |||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
| @ -79,7 +79,7 @@ jobs: | |||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ jobs: | |||||||
|     runs-on: ${{ matrix.operating-system }} |     runs-on: ${{ matrix.operating-system }} | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ jobs: | |||||||
|     runs-on: ${{ matrix.operating-system }} |     runs-on: ${{ matrix.operating-system }} | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -37,7 +37,7 @@ jobs: | |||||||
|         php-versions: ['7.4', '8.0', '8.1'] |         php-versions: ['7.4', '8.0', '8.1'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -39,7 +39,7 @@ jobs: | |||||||
|         php-versions: ['7.4', '8.0', '8.1'] |         php-versions: ['7.4', '8.0', '8.1'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ jobs: | |||||||
|         php-versions: ['7.4', '8.0', '8.1'] |         php-versions: ['7.4', '8.0', '8.1'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -37,7 +37,7 @@ jobs: | |||||||
|         php-versions: ['7.4', '8.0', '8.1'] |         php-versions: ['7.4', '8.0', '8.1'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -39,7 +39,7 @@ jobs: | |||||||
|         php-versions: ['7.4', '8.0', '8.1'] |         php-versions: ['7.4', '8.0', '8.1'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ jobs: | |||||||
|         php-versions: ['7.4', '8.0', '8.1'] |         php-versions: ['7.4', '8.0', '8.1'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -36,7 +36,7 @@ jobs: | |||||||
|         # php-versions: ['7.0', '7.1', '7.2', '7.3'] |         # php-versions: ['7.0', '7.1', '7.2', '7.3'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -37,7 +37,7 @@ jobs: | |||||||
|         # php-versions: ['7.0', '7.1', '7.2', '7.3'] |         # php-versions: ['7.0', '7.1', '7.2', '7.3'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -12,10 +12,10 @@ jobs: | |||||||
|         node-versions: ['16'] |         node-versions: ['16'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       - name: Setup Node.js |       - name: Setup Node.js | ||||||
|         uses: actions/setup-node@v1 |         uses: actions/setup-node@v5 | ||||||
|         with: |         with: | ||||||
|           node-version: ${{ matrix.node-versions }} |           node-version: ${{ matrix.node-versions }} | ||||||
|  |  | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ jobs: | |||||||
|     runs-on: ${{ matrix.operating-system }} |     runs-on: ${{ matrix.operating-system }} | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -23,7 +23,7 @@ jobs: | |||||||
|         php-versions: ['7.4', '8.0', '8.1'] |         php-versions: ['7.4', '8.0', '8.1'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -23,7 +23,7 @@ jobs: | |||||||
|         php-versions: ['7.4', '8.0', '8.1'] |         php-versions: ['7.4', '8.0', '8.1'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ jobs: | |||||||
|         php-versions: ['7.4', '8.0', '8.1'] |         php-versions: ['7.4', '8.0', '8.1'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       # Docs: https://github.com/shivammathur/setup-php |       # Docs: https://github.com/shivammathur/setup-php | ||||||
|       - name: Setup PHP |       - name: Setup PHP | ||||||
|  | |||||||
| @ -29,10 +29,10 @@ jobs: | |||||||
|         php-versions: ['7.4', '8.0'] |         php-versions: ['7.4', '8.0'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       - name: Set Node.js 10.x |       - name: Set Node.js 10.x | ||||||
|         uses: actions/setup-node@v1 |         uses: actions/setup-node@v5 | ||||||
|         with: |         with: | ||||||
|           node-version: 10.x |           node-version: 10.x | ||||||
|  |  | ||||||
|  | |||||||
| @ -29,10 +29,10 @@ jobs: | |||||||
|         php-versions: ['7.4', '8.0'] |         php-versions: ['7.4', '8.0'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v5 | ||||||
|  |  | ||||||
|       - name: Set Node.js 10.x |       - name: Set Node.js 10.x | ||||||
|         uses: actions/setup-node@v1 |         uses: actions/setup-node@v5 | ||||||
|         with: |         with: | ||||||
|           node-version: 10.x |           node-version: 10.x | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										843
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										843
									
								
								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", |   "name": "setup-php", | ||||||
|   "version": "2.35.2", |   "version": "2.35.5", | ||||||
|   "private": false, |   "private": false, | ||||||
|   "description": "Setup PHP for use with GitHub Actions", |   "description": "Setup PHP for use with GitHub Actions", | ||||||
|   "main": "lib/install.js", |   "main": "lib/install.js", | ||||||
| @ -40,26 +40,26 @@ | |||||||
|     "compare-versions": "^6.1.1" |     "compare-versions": "^6.1.1" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@eslint/compat": "^1.3.1", |     "@eslint/compat": "^1.3.2", | ||||||
|     "@eslint/js": "9.32.0", |     "@eslint/js": "9.35.0", | ||||||
|     "@types/jest": "^30.0.0", |     "@types/jest": "^30.0.0", | ||||||
|     "@types/node": "^24.1.0", |     "@types/node": "^24.3.1", | ||||||
|     "@typescript-eslint/eslint-plugin": "^8.38.0", |     "@typescript-eslint/eslint-plugin": "^8.43.0", | ||||||
|     "@typescript-eslint/parser": "^8.38.0", |     "@typescript-eslint/parser": "^8.43.0", | ||||||
|     "@vercel/ncc": "^0.38.3", |     "@vercel/ncc": "^0.38.3", | ||||||
|     "eslint": "9.32.0", |     "eslint": "9.35.0", | ||||||
|     "eslint-config-prettier": "^10.1.8", |     "eslint-config-prettier": "^10.1.8", | ||||||
|     "eslint-plugin-import": "^2.32.0", |     "eslint-plugin-import": "^2.32.0", | ||||||
|     "eslint-plugin-jest": "^29.0.1", |     "eslint-plugin-jest": "^29.0.1", | ||||||
|     "eslint-plugin-prettier": "^5.5.3", |     "eslint-plugin-prettier": "^5.5.4", | ||||||
|     "globals": "^16.3.0", |     "globals": "^16.3.0", | ||||||
|     "jest": "^30.0.5", |     "jest": "^30.1.3", | ||||||
|     "jest-circus": "^30.0.5", |     "jest-circus": "^30.1.3", | ||||||
|     "nock": "^14.0.7", |     "nock": "^14.0.10", | ||||||
|     "prettier": "^3.6.2", |     "prettier": "^3.6.2", | ||||||
|     "simple-git-hooks": "^2.13.0", |     "simple-git-hooks": "^2.13.1", | ||||||
|     "ts-jest": "^29.4.0", |     "ts-jest": "^29.4.1", | ||||||
|     "typescript": "^5.8.3" |     "typescript": "^5.9.2" | ||||||
|   }, |   }, | ||||||
|   "overrides": { |   "overrides": { | ||||||
|     "test-exclude": "^7.0.1" |     "test-exclude": "^7.0.1" | ||||||
|  | |||||||
							
								
								
									
										3
									
								
								src/configs/ini/jit_aarch64.ini
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/configs/ini/jit_aarch64.ini
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | opcache.enable=1 | ||||||
|  | opcache.jit_buffer_size=128M | ||||||
|  | opcache.jit=1235 | ||||||
| @ -3,6 +3,7 @@ | |||||||
|   "highest": "8.4", |   "highest": "8.4", | ||||||
|   "latest": "8.4", |   "latest": "8.4", | ||||||
|   "nightly": "8.5", |   "nightly": "8.5", | ||||||
|  |   "master": "8.6", | ||||||
|   "5.x": "5.6", |   "5.x": "5.6", | ||||||
|   "7.x": "7.4", |   "7.x": "7.4", | ||||||
|   "8.x": "8.4" |   "8.x": "8.4" | ||||||
|  | |||||||
| @ -266,7 +266,8 @@ | |||||||
|     "type": "custom-package", |     "type": "custom-package", | ||||||
|     "repository": "symfony-cli/symfony-cli", |     "repository": "symfony-cli/symfony-cli", | ||||||
|     "domain": "https://github.com", |     "domain": "https://github.com", | ||||||
|     "version_prefix": "-V" |     "version_prefix": "v", | ||||||
|  |     "version_parameter": "-V" | ||||||
|   }, |   }, | ||||||
|   "blackfire-player": { |   "blackfire-player": { | ||||||
|     "type": "custom-function", |     "type": "custom-function", | ||||||
|  | |||||||
| @ -38,7 +38,9 @@ export async function addExtensionDarwin( | |||||||
|       // match 5.3ioncube...8.4ioncube |       // match 5.3ioncube...8.4ioncube | ||||||
|       // match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, and 7.4phalcon5...8.4phalcon5 |       // match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, and 7.4phalcon5...8.4phalcon5 | ||||||
|       // match 7.0zephir_parser...8.4zephir_parser |       // match 7.0zephir_parser...8.4zephir_parser | ||||||
|       case /^(7\.4|8\.[0-5])relay(-v?\d+\.\d+\.\d+)?$/.test(version_extension): |       case /^(7\.4|8\.[0-5])relay(-v?\d+\.\d+\.\d+|-nightly)?$/.test( | ||||||
|  |         version_extension | ||||||
|  |       ): | ||||||
|       case /^(5\.[3-6]|7\.[0-4]|8\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test( |       case /^(5\.[3-6]|7\.[0-4]|8\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test( | ||||||
|         version_extension |         version_extension | ||||||
|       ): |       ): | ||||||
| @ -271,7 +273,9 @@ export async function addExtensionLinux( | |||||||
|       // match 5.3ioncube...8.4ioncube |       // match 5.3ioncube...8.4ioncube | ||||||
|       // match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, 7.4phalcon5...8.4phalcon5 |       // match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, 7.4phalcon5...8.4phalcon5 | ||||||
|       // match 7.0zephir_parser...8.4zephir_parser |       // match 7.0zephir_parser...8.4zephir_parser | ||||||
|       case /^(7\.4|8\.[0-5])relay(-v?\d+\.\d+\.\d+)?$/.test(version_extension): |       case /^(7\.4|8\.[0-5])relay(-v?\d+\.\d+\.\d+|-nightly)?$/.test( | ||||||
|  |         version_extension | ||||||
|  |       ): | ||||||
|       case /^(5\.[3-6]|7\.[0-4]|8\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test( |       case /^(5\.[3-6]|7\.[0-4]|8\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test( | ||||||
|         version_extension |         version_extension | ||||||
|       ): |       ): | ||||||
|  | |||||||
| @ -59,10 +59,10 @@ export async function setEnv(): Promise<void> { | |||||||
|  * Run the script |  * Run the script | ||||||
|  */ |  */ | ||||||
| export async function run(): Promise<void> { | export async function run(): Promise<void> { | ||||||
|  |   await setEnv(); | ||||||
|   const os: string = process.platform; |   const os: string = process.platform; | ||||||
|   const tool = await utils.scriptTool(os); |   const tool = await utils.scriptTool(os); | ||||||
|   const run_path = await getScript(os); |   const run_path = await getScript(os); | ||||||
|   await setEnv(); |  | ||||||
|   await exec(tool + run_path); |   await exec(tool + run_path); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
| @ -134,9 +134,9 @@ patch_brew() { | |||||||
| update_dependencies() { | update_dependencies() { | ||||||
|   patch_brew |   patch_brew | ||||||
|   if ! [ -e /tmp/update_dependencies ]; then |   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 |       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 |       fi | ||||||
|     done |     done | ||||||
|     echo '' | sudo tee /tmp/update_dependencies >/dev/null 2>&1 |     echo '' | sudo tee /tmp/update_dependencies >/dev/null 2>&1 | ||||||
| @ -148,9 +148,9 @@ get_brewed_php() { | |||||||
|   cellar="$brew_prefix"/Cellar |   cellar="$brew_prefix"/Cellar | ||||||
|   php_cellar="$cellar"/php |   php_cellar="$cellar"/php | ||||||
|   if [ -d "$cellar" ] && ! [[ "$(find "$cellar" -maxdepth 1 -name "php@$version*" | wc -l 2>/dev/null)" -eq 0 ]]; then |   if [ -d "$cellar" ] && ! [[ "$(find "$cellar" -maxdepth 1 -name "php@$version*" | wc -l 2>/dev/null)" -eq 0 ]]; then | ||||||
|     php_semver | cut -c 1-3 |     php_semver | ||||||
|   elif [ -d "$php_cellar" ] && ! [[ "$(find "$php_cellar" -maxdepth 1 -name "$version*" | wc -l 2>/dev/null)" -eq 0 ]]; then |   elif [ -d "$php_cellar" ] && ! [[ "$(find "$php_cellar" -maxdepth 1 -name "$version*" | wc -l 2>/dev/null)" -eq 0 ]]; then | ||||||
|     php_semver | cut -c 1-3 |     php_semver | ||||||
|   else |   else | ||||||
|     echo 'false'; |     echo 'false'; | ||||||
|   fi |   fi | ||||||
| @ -160,17 +160,24 @@ get_brewed_php() { | |||||||
| add_php() { | add_php() { | ||||||
|   action=$1 |   action=$1 | ||||||
|   existing_version=$2 |   existing_version=$2 | ||||||
|   add_brew_tap "$php_tap" |  | ||||||
|   update_dependencies |  | ||||||
|   suffix="$(get_php_formula_suffix)" |   suffix="$(get_php_formula_suffix)" | ||||||
|   php_formula="shivammathur/php/php@$version$suffix" |   php_keg="php@$version$suffix" | ||||||
|  |   php_formula="shivammathur/php/$php_keg" | ||||||
|  |   if [[ "$existing_version" = "false" || -n "$suffix" || "$action" = "upgrade" ]]; then | ||||||
|  |     update_dependencies | ||||||
|  |     add_brew_tap | ||||||
|  |   fi | ||||||
|   if [[ "$existing_version" != "false" && -z "$suffix" ]]; then |   if [[ "$existing_version" != "false" && -z "$suffix" ]]; then | ||||||
|     ([ "$action" = "upgrade" ] && brew upgrade -f --overwrite "$php_formula") || brew unlink "$php_formula" |     if [ "$action" = "upgrade" ]; then | ||||||
|  |       brew upgrade -f --overwrite "$php_formula" | ||||||
|  |     else | ||||||
|  |       brew unlink "$php_keg" | ||||||
|  |     fi | ||||||
|   else |   else | ||||||
|     brew install -f --overwrite "$php_formula" |     brew install -f --overwrite "$php_formula" | ||||||
|   fi |   fi | ||||||
|   sudo chown -R "$(id -un)":"$(id -gn)" "$brew_prefix" |   sudo chown -R "$(id -un)":"$(id -gn)" "$brew_prefix" | ||||||
|   brew link --force --overwrite "$php_formula" |   brew link --force --overwrite "$php_keg" | ||||||
| } | } | ||||||
|  |  | ||||||
| # Function to get formula suffix | # Function to get formula suffix | ||||||
| @ -222,18 +229,18 @@ setup_php() { | |||||||
|   update=true |   update=true | ||||||
|   check_pre_installed |   check_pre_installed | ||||||
|   existing_version=$(get_brewed_php) |   existing_version=$(get_brewed_php) | ||||||
|  |   status="Found" | ||||||
|   if [[ "$version" =~ ${old_versions:?} ]]; then |   if [[ "$version" =~ ${old_versions:?} ]]; then | ||||||
|     run_script "php5-darwin" "${version/./}" >/dev/null 2>&1 |     run_script "php5-darwin" "${version/./}" >/dev/null 2>&1 | ||||||
|     status="Installed" |     status="Installed" | ||||||
|   elif [ "$existing_version" != "$version" ]; then |   elif [ "${existing_version:0:3}" != "$version" ]; then | ||||||
|     add_php "install" "$existing_version" >/dev/null 2>&1 |     add_php "install" "$existing_version" >/dev/null 2>&1 | ||||||
|     status="Installed" |     status="Installed" | ||||||
|   elif [ "$existing_version" = "$version" ]; then |   elif [[ "${existing_version:0:3}" = "$version" && "${update:?}" = "true" ]]; then | ||||||
|     if [ "${update:?}" = "true" ]; then |     brew_php_version="$(brew info --json "php@$version" 2>/dev/null | jq -r '.[].versions.stable')" | ||||||
|  |     if [ "$brew_php_version" != "$existing_version" ]; then | ||||||
|       add_php "upgrade" "$existing_version" >/dev/null 2>&1 |       add_php "upgrade" "$existing_version" >/dev/null 2>&1 | ||||||
|       status="Updated to" |       status="Upgraded" | ||||||
|     else |  | ||||||
|       status="Found" |  | ||||||
|     fi |     fi | ||||||
|   fi |   fi | ||||||
|   php_config="$(command -v php-config)" |   php_config="$(command -v php-config)" | ||||||
|  | |||||||
| @ -1,8 +1,10 @@ | |||||||
| # Function to log result of installing extension. | # Function to log result of installing extension. | ||||||
| add_extension_log() { | add_extension_log() { | ||||||
|   ( |   if check_extension ${1%%-*}; then | ||||||
|     check_extension "$(echo "$1" | cut -d '-' -f 1)" && add_log "${tick:?}" "$1" "$2" |     add_log "${tick:?}" "$1" "$2" | ||||||
|   ) || add_log "${cross:?}" "$1" "Could not install $1 on PHP ${semver:?}" |   else | ||||||
|  |     add_log "${cross:?}" "$1" "${3:-Could not install $1 on PHP ${semver:?}}" | ||||||
|  |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
| # Function to test if extension is loaded. | # Function to test if extension is loaded. | ||||||
|  | |||||||
| @ -11,13 +11,14 @@ install_icu() { | |||||||
| # Function to add ext-intl with the given version of ICU | # Function to add ext-intl with the given version of ICU | ||||||
| add_intl() { | add_intl() { | ||||||
|   icu=$(echo "$1" | cut -d'-' -f 2) |   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) |   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) | ||||||
|   if [ "$icu" != "$supported_version" ]; then |   [ -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) | ||||||
|     add_log "${cross:?}" "intl" "ICU $icu is not supported" |   if [ "php$version-intl-$icu" != "$supported_version" ]; then | ||||||
|  |     add_log "${cross:?}" "intl" "ICU $icu is not supported for PHP $version" | ||||||
|   else |   else | ||||||
|     [ "${ts:?}" = 'zts' ] && suffix='-zts' |     [ "${ts:?}" = 'zts' ] && suffix='-zts' | ||||||
|     install_icu "$icu" >/dev/null 2>&1 |     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 |     enable_extension intl extension | ||||||
|     add_extension_log intl "Installed and enabled with ICU $icu" |     add_extension_log intl "Installed and enabled with ICU $icu" | ||||||
|   fi |   fi | ||||||
|  | |||||||
| @ -2,11 +2,9 @@ | |||||||
| get_relay_version() { | get_relay_version() { | ||||||
|  local ext=$1 |  local ext=$1 | ||||||
|   if [[ "$ext" =~ ^relay$ ]]; then |   if [[ "$ext" =~ ^relay$ ]]; then | ||||||
|     if [ "${version:?}" = "7.4" ]; then |     get -s -n "" "${relay_release:?}" | ||||||
|       echo 'v0.7.0' |   elif [[ $ext =~ ^relay-nightly$ ]]; then | ||||||
|     else |     echo "dev" | ||||||
|       get -s -n "" "${relay_releases:?}"/latest 2<&1 | grep -m 1 -Eo "tag/(v[0-9]+(\.[0-9]+)?(\.[0-9]+)?)" | head -n 1 | cut -d '/' -f 2 |  | ||||||
|     fi |  | ||||||
|   else |   else | ||||||
|     relay_version="${ext##*-}" |     relay_version="${ext##*-}" | ||||||
|     echo "v${relay_version/v//}" |     echo "v${relay_version/v//}" | ||||||
| @ -110,7 +108,7 @@ configure_relay() { | |||||||
|  |  | ||||||
| # Helper function to add relay extension | # Helper function to add relay extension | ||||||
| add_relay_helper() { | add_relay_helper() { | ||||||
|   arch="$(uname -m | sed 's/_/-/')" |   local arch=$1 | ||||||
|   os_suffix="$(get_os_suffix)" |   os_suffix="$(get_os_suffix)" | ||||||
|   openssl_suffix="$(get_openssl_suffix)" |   openssl_suffix="$(get_openssl_suffix)" | ||||||
|   artifact_file_name="relay-$relay_version-php${version:?}-$os_suffix-$arch$openssl_suffix.tar.gz" |   artifact_file_name="relay-$relay_version-php${version:?}-$os_suffix-$arch$openssl_suffix.tar.gz" | ||||||
| @ -134,17 +132,24 @@ add_relay() { | |||||||
|   local ext=$1 |   local ext=$1 | ||||||
|   local arch |   local arch | ||||||
|   local url |   local url | ||||||
|  |   local message | ||||||
|  |   local error | ||||||
|   os=$(uname -s) |   os=$(uname -s) | ||||||
|   relay_releases=https://github.com/cachewerk/relay/releases |   arch="$(uname -m | sed 's/_/-/')" | ||||||
|  |   relay_release=https://builds.r2.relay.so/meta/latest | ||||||
|   relay_trunk=https://builds.r2.relay.so |   relay_trunk=https://builds.r2.relay.so | ||||||
|   relay_version=$(get_relay_version "$ext") |   if [[ "$arch" = "x86-64" && "$os" = "Darwin" ]]; then | ||||||
|   add_relay_dependencies >/dev/null 2>&1 |     error="Relay extension is not available for macOS x86_64 architecture" | ||||||
|   if shared_extension relay; then |  | ||||||
|     message="Enabled" |  | ||||||
|   else |   else | ||||||
|     add_relay_helper >/dev/null 2>&1 |     relay_version=$(get_relay_version "$ext") | ||||||
|     message="Installed and enabled" |     add_relay_dependencies >/dev/null 2>&1 | ||||||
|  |     if shared_extension relay; then | ||||||
|  |       message="Enabled" | ||||||
|  |     else | ||||||
|  |       add_relay_helper "$arch" >/dev/null 2>&1 | ||||||
|  |       message="Installed and enabled ${relay_version}" | ||||||
|  |     fi | ||||||
|  |     configure_relay >/dev/null 2>&1 | ||||||
|   fi |   fi | ||||||
|   configure_relay >/dev/null 2>&1 |   add_extension_log relay "$message" "$error" | ||||||
|   add_extension_log relay "$message" |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -119,9 +119,10 @@ fetch_extension() { | |||||||
|   elif [ "$fetch" = "pecl" ]; then |   elif [ "$fetch" = "pecl" ]; then | ||||||
|     source="pecl" |     source="pecl" | ||||||
|     pecl_name=${extension/http/pecl_http} |     pecl_name=${extension/http/pecl_http} | ||||||
|     get -q -n /tmp/"$pecl_name".tgz https://pecl.php.net/get/"$pecl_name"-"$release".tgz |     capital_pecl_name=$(echo "$pecl_name" | tr '[:lower:]' '[:upper:]') | ||||||
|  |     get -q -n /tmp/"$pecl_name".tgz https://pecl.php.net/get/"$pecl_name"-"$release".tgz https://pecl.php.net/get/"$capital_pecl_name"-"$release".tgz | ||||||
|     tar -xzf /tmp/"$pecl_name".tgz -C /tmp |     tar -xzf /tmp/"$pecl_name".tgz -C /tmp | ||||||
|     cd /tmp/"$pecl_name"-"$release" || exit |     cd /tmp/"$pecl_name"-"$release" 2>/dev/null || cd /tmp/"$capital_pecl_name"-"$release" 2>/dev/null || exit | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
| @ -61,6 +61,19 @@ Function Update-AuthJson { | |||||||
|   Set-Content -Path $composer_home\auth.json -Value ($existing | ConvertTo-Json -Depth 5) |   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 to setup authentication in composer. | ||||||
| Function Set-ComposerAuth() { | Function Set-ComposerAuth() { | ||||||
|   if(Test-Path env:COMPOSER_AUTH_JSON) { |   if(Test-Path env:COMPOSER_AUTH_JSON) { | ||||||
| @ -74,11 +87,15 @@ Function Set-ComposerAuth() { | |||||||
|   if(Test-Path env:PACKAGIST_TOKEN) { |   if(Test-Path env:PACKAGIST_TOKEN) { | ||||||
|     $composer_auth += '"http-basic": {"repo.packagist.com": { "username": "token", "password": "' + $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)) { |   $write_token = $true | ||||||
|     $env:GITHUB_TOKEN = $env:COMPOSER_TOKEN |   $token = if ($env:COMPOSER_TOKEN) { $env:COMPOSER_TOKEN } else { $env:GITHUB_TOKEN } | ||||||
|   } |   if ($token) { | ||||||
|   if (Test-Path env:GITHUB_TOKEN) { |     if ($env:GITHUB_SERVER_URL -ne "https://github.com" -and -not(Test-GitHubPublicAccess $token)) { | ||||||
|     $composer_auth += '"github-oauth": {"github.com": "' + $env:GITHUB_TOKEN + '"}' |       $write_token = $false | ||||||
|  |     } | ||||||
|  |     if($write_token) { | ||||||
|  |       $composer_auth += '"github-oauth": {"github.com": "' + $token + '"}' | ||||||
|  |     } | ||||||
|   } |   } | ||||||
|   if($composer_auth.length) { |   if($composer_auth.length) { | ||||||
|     Update-AuthJson $composer_auth |     Update-AuthJson $composer_auth | ||||||
|  | |||||||
| @ -65,6 +65,11 @@ update_auth_json() { | |||||||
|   printf '%s' "$merged" > "$composer_home/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. | # Function to setup authentication in composer. | ||||||
| set_composer_auth() { | set_composer_auth() { | ||||||
|   if [ -n "$COMPOSER_AUTH_JSON" ]; then |   if [ -n "$COMPOSER_AUTH_JSON" ]; then | ||||||
| @ -78,8 +83,15 @@ set_composer_auth() { | |||||||
|   if [ -n "$PACKAGIST_TOKEN" ]; then |   if [ -n "$PACKAGIST_TOKEN" ]; then | ||||||
|     composer_auth+=( '"http-basic": {"repo.packagist.com": { "username": "token", "password": "'"$PACKAGIST_TOKEN"'"}}' ) |     composer_auth+=( '"http-basic": {"repo.packagist.com": { "username": "token", "password": "'"$PACKAGIST_TOKEN"'"}}' ) | ||||||
|   fi |   fi | ||||||
|   if [ -n "${GITHUB_TOKEN:-$COMPOSER_TOKEN}" ]; then |   token="${COMPOSER_TOKEN:-$GITHUB_TOKEN}" | ||||||
|     composer_auth+=( '"github-oauth": {"github.com": "'"${GITHUB_TOKEN:-$COMPOSER_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 |   fi | ||||||
|   if ((${#composer_auth[@]})); then |   if ((${#composer_auth[@]})); then | ||||||
|     update_auth_json "${composer_auth[@]}" |     update_auth_json "${composer_auth[@]}" | ||||||
| @ -188,7 +200,11 @@ add_tool() { | |||||||
|     elif [ -e /tmp/"$tool" ]; then |     elif [ -e /tmp/"$tool" ]; then | ||||||
|       sudo cp -a /tmp/"$tool" "$tool_path" |       sudo cp -a /tmp/"$tool" "$tool_path" | ||||||
|     fi |     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 |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
| @ -49,7 +49,7 @@ add_brew() { | |||||||
|   brew_prefix="$(get_brew_prefix)" |   brew_prefix="$(get_brew_prefix)" | ||||||
|   if ! [ -d "$brew_prefix"/bin ]; then |   if ! [ -d "$brew_prefix"/bin ]; then | ||||||
|     step_log "Setup Brew" |     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" |     add_log "${tick:?}" "Brew" "Installed Homebrew" | ||||||
|   fi |   fi | ||||||
|   add_brew_bins_to_path "$brew_prefix" |   add_brew_bins_to_path "$brew_prefix" | ||||||
|  | |||||||
| @ -50,12 +50,23 @@ update_lists_helper() { | |||||||
| update_lists() { | update_lists() { | ||||||
|   local ppa=${1:-} |   local ppa=${1:-} | ||||||
|   local ppa_search=${2:-} |   local ppa_search=${2:-} | ||||||
|  |   local status_token=${3:-$ppa_search} | ||||||
|   local list= |   local list= | ||||||
|   status_file=/tmp/os_lists |   local status_file=/tmp/os_lists | ||||||
|  |   local hash_cmd | ||||||
|   if [[ -n "$ppa" && -n "$ppa_search" ]]; then |   if [[ -n "$ppa" && -n "$ppa_search" ]]; then | ||||||
|     list="$list_dir"/"$(basename "$(grep -lr "$ppa_search" "$list_dir")")" |     if [ -f "$ppa_search" ]; then | ||||||
|     status_file=/tmp/"$(echo -n "$ppa_search" | shasum -a 256 | cut -d ' ' -f 1)" |       list="$ppa_search" | ||||||
|   elif [ -e "$list_file" ] && grep -Eq '^deb |^Types deb' "$list_file"; then |     else | ||||||
|  |       list="$(grep -Elr "$ppa_search" "$list_dir" 2>/dev/null | head -n 1)" | ||||||
|  |     fi | ||||||
|  |     hash_cmd="$(command -v sha256sum || command -v shasum)" | ||||||
|  |     if [ -n "$status_token" ] && [ -n "$hash_cmd" ]; then | ||||||
|  |       status_file=/tmp/os_lists_"$(echo -n "$status_token" | $hash_cmd | awk '{print $1}')" | ||||||
|  |     elif [ -n "$status_token" ]; then | ||||||
|  |       status_file=/tmp/os_lists_$(date +%s) | ||||||
|  |     fi | ||||||
|  |   elif [ -e "$list_file" ] && grep -Eq '^deb |^Types: *deb' "$list_file"; then | ||||||
|     list="$list_file" |     list="$list_file" | ||||||
|   fi |   fi | ||||||
|   if [ ! -e "$status_file" ]; then |   if [ ! -e "$status_file" ]; then | ||||||
| @ -64,12 +75,77 @@ update_lists() { | |||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
|  | # Determine whether deb822 sources are the default on this system. | ||||||
|  | get_sources_format() { | ||||||
|  |   if [ -n "$sources_format" ]; then | ||||||
|  |     echo "$sources_format" | ||||||
|  |     return | ||||||
|  |   fi | ||||||
|  |   sources_format=deb | ||||||
|  |   if [ -e "$list_dir"/ubuntu.sources ] || [ -e "$list_dir"/debian.sources ]; then | ||||||
|  |     sources_format="deb822" | ||||||
|  |   elif ! [[ "$ID" =~ ubuntu|debian ]]; then | ||||||
|  |     find "$list_dir" -type f -name '*.sources' | grep -q . && sources_format="deb822" | ||||||
|  |   fi | ||||||
|  |   echo "$sources_format" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | escape_regex() { | ||||||
|  |   printf '%s' "$1" | sed -e 's/[][\.^$*+?{}()|\/]/\\&/g' | ||||||
|  | } | ||||||
|  |  | ||||||
|  | merge_components() { | ||||||
|  |   local out=() t | ||||||
|  |   for t in $1 $2; do [[ $t && " ${out[*]} " != *" $t "* ]] && out+=("$t"); done | ||||||
|  |   printf '%s\n' "${out[*]}" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | merge_components_from_file() { | ||||||
|  |   local path=$1 | ||||||
|  |   local incoming=$2 | ||||||
|  |   local current= | ||||||
|  |   if [ -n "$path" ] && [ -e "$path" ]; then | ||||||
|  |     current="$(grep -E '^Components:' "$path" | head -n 1 | cut -d ':' -f 2 | xargs)" | ||||||
|  |   fi | ||||||
|  |   local merged | ||||||
|  |   merged="$(merge_components "$current" "$incoming")" | ||||||
|  |   if [ -z "$merged" ] || [ "$merged" = "$current" ]; then | ||||||
|  |     return 1 | ||||||
|  |   fi | ||||||
|  |   printf '%s\n' "$merged" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Function to get repo patterns based on format. | ||||||
|  | get_repo_patterns() { | ||||||
|  |   local list_format=$1 | ||||||
|  |   local ppa_url=$2 | ||||||
|  |   local package_dist=$3 | ||||||
|  |   local branches=$4 | ||||||
|  |   local escaped_url | ||||||
|  |   local escaped_dist | ||||||
|  |   local escaped_branches | ||||||
|  |   escaped_url="$(escape_regex "$ppa_url")" | ||||||
|  |   escaped_dist="$(escape_regex "$package_dist")" | ||||||
|  |   escaped_branches="$(escape_regex "$branches")" | ||||||
|  |   local deb_pattern="^deb .*${escaped_url} ${escaped_dist} .*${escaped_branches}$" | ||||||
|  |   local deb822_pattern="^URIs: ${escaped_url}$" | ||||||
|  |   if [ "$list_format" = "deb822" ]; then | ||||||
|  |     printf '%s|%s\n' "$deb822_pattern" "$deb_pattern" | ||||||
|  |   else | ||||||
|  |     printf '%s|%s\n' "$deb_pattern" "$deb822_pattern" | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  |  | ||||||
| # Function to get fingerprint from an Ubuntu PPA. | # Function to get fingerprint from an Ubuntu PPA. | ||||||
| ubuntu_fingerprint() { | ubuntu_fingerprint() { | ||||||
|   ppa=$1 |   ppa="$1" | ||||||
|   get -s -n "" "${lp_api[@]/%//~${ppa%/*}/+archive/${ppa##*/}}" | jq -r '.signing_key_fingerprint' |   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. | # Function to get fingerprint from a Debian PPA. | ||||||
| debian_fingerprint() { | debian_fingerprint() { | ||||||
|   ppa=$1 |   ppa=$1 | ||||||
| @ -93,25 +169,85 @@ add_key() { | |||||||
|     sks_params="op=get&options=mr&exact=on&search=0x$fingerprint" |     sks_params="op=get&options=mr&exact=on&search=0x$fingerprint" | ||||||
|     key_urls=("${sks[@]/%/\/pks\/lookup\?"$sks_params"}") |     key_urls=("${sks[@]/%/\/pks\/lookup\?"$sks_params"}") | ||||||
|   fi |   fi | ||||||
|  |   key_urls+=("$ppa_sp/keys/$ppa.gpg") | ||||||
|   [ ! -e "$key_source" ] && get -q -n "$key_file" "${key_urls[@]}" |   [ ! -e "$key_source" ] && get -q -n "$key_file" "${key_urls[@]}" | ||||||
|   if [[ "$(file "$key_file")" =~ .*('Public-Key (old)'|'Secret-Key') ]]; then |   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" |     sudo gpg --batch --yes --dearmor "$key_file" >/dev/null 2>&1 && sudo mv "$key_file".gpg "$key_file" | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
|  | handle_existing_list() { | ||||||
|  |   local ppa=$1 | ||||||
|  |   local list_format=$2 | ||||||
|  |   branches=$3 | ||||||
|  |   [[ "$list_format" = "deb822"  && -n "$check_lists_file" ]] || { | ||||||
|  |     echo "Repository $ppa ($branches) already exists" | ||||||
|  |     return 1 | ||||||
|  |   } | ||||||
|  |   [[ "$check_lists_file" = *.list ]] && { | ||||||
|  |     sudo rm -f "$check_lists_file" | ||||||
|  |     return 0 | ||||||
|  |   } | ||||||
|  |   local merged_components | ||||||
|  |   merged_components="$(merge_components_from_file "$check_lists_file" "$branches")" && { | ||||||
|  |     sudo rm -f "$check_lists_file" | ||||||
|  |     branches="$merged_components" | ||||||
|  |     return 0 | ||||||
|  |   } | ||||||
|  |   echo "Repository $ppa ($branches) already exists" | ||||||
|  |   return 1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Function to write a list file. | ||||||
|  | write_list() { | ||||||
|  |   local type=$1 | ||||||
|  |   local ppa=$2 | ||||||
|  |   local url=$3 | ||||||
|  |   local suite=$4 | ||||||
|  |   local components=$5 | ||||||
|  |   local key_file=$6 | ||||||
|  |   local list_basename="${ppa%%/*}"-"$ID"-"${ppa#*/}"-"$suite" | ||||||
|  |   local arch | ||||||
|  |   arch="$(dpkg --print-architecture)" | ||||||
|  |   sudo rm -f "$list_dir"/"${ppa/\//-}".list "$list_dir"/"${ppa/\//-}".sources "$list_dir"/"$list_basename".list "$list_dir"/"$list_basename".sources || true | ||||||
|  |   if [ "$type" = "deb822" ]; then | ||||||
|  |     cat <<EOF | sudo tee "$list_dir"/"$list_basename".sources >/dev/null | ||||||
|  | Types: deb | ||||||
|  | URIs: $url | ||||||
|  | Suites: $suite | ||||||
|  | Components: $components | ||||||
|  | Architectures: $arch | ||||||
|  | Signed-By: $key_file | ||||||
|  | EOF | ||||||
|  |   else | ||||||
|  |     echo "deb [arch=$arch signed-by=$key_file] $url $suite $components" | sudo tee "$list_dir"/"$list_basename".list >/dev/null 2>&1 | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  |  | ||||||
| # Function to check if a PPA and its lists exist | # Function to check if a PPA and its lists exist | ||||||
| check_lists() { | check_lists() { | ||||||
|   ppa=$1 |   local ppa=$1 | ||||||
|   ppa_search=$2 |   local primary=${2:-} | ||||||
|   if grep -Eqr "$ppa_search" "$list_dir"; then |   local secondary=${3:-} | ||||||
|  |   local status_token=${4:-$primary} | ||||||
|  |   local match_file= | ||||||
|  |   check_lists_file= | ||||||
|  |   if [ -n "$primary" ]; then | ||||||
|  |     match_file=$(grep -Elr "$primary" "$list_dir" 2>/dev/null | head -n 1) | ||||||
|  |   fi | ||||||
|  |   if [ -z "$match_file" ] && [ -n "$secondary" ]; then | ||||||
|  |     match_file=$(grep -Elr "$secondary" "$list_dir" 2>/dev/null | head -n 1) | ||||||
|  |   fi | ||||||
|  |   if [ -n "$match_file" ]; then | ||||||
|  |     local list_count | ||||||
|     list_count="$(sudo find /var/lib/apt/lists -type f -name "*${ppa/\//_}*" | wc -l)" |     list_count="$(sudo find /var/lib/apt/lists -type f -name "*${ppa/\//_}*" | wc -l)" | ||||||
|     if [ "$list_count" = "0" ]; then |     if [ "$list_count" = "0" ]; then | ||||||
|       update_lists "$ppa" "$ppa_search" |       update_lists "$ppa" "$match_file" "$status_token" | ||||||
|     fi |     fi | ||||||
|     return 0; |     check_lists_file="$match_file" | ||||||
|   else |     return 0 | ||||||
|     return 1; |  | ||||||
|   fi |   fi | ||||||
|  |   return 1 | ||||||
| } | } | ||||||
|  |  | ||||||
| # Function to add a sources list. | # Function to add a sources list. | ||||||
| @ -121,19 +257,24 @@ add_list() { | |||||||
|   key_source=${3:-"$ppa_url"} |   key_source=${3:-"$ppa_url"} | ||||||
|   package_dist=${4:-"$VERSION_CODENAME"} |   package_dist=${4:-"$VERSION_CODENAME"} | ||||||
|   branches=${5:-main} |   branches=${5:-main} | ||||||
|   ppa_search="deb .*$ppa_url $package_dist .*$branches$" |   local list_format | ||||||
|   if check_lists "$ppa" "$ppa_search"; then |   list_format="$(get_sources_format)" | ||||||
|     echo "Repository $ppa already exists"; |   local status_token | ||||||
|     return 1; |   status_token="${ppa_url}|${package_dist}|${branches}" | ||||||
|   else |   local list_path= | ||||||
|     arch=$(dpkg --print-architecture) |   IFS='|' read -r primary_pattern secondary_pattern <<< "$(get_repo_patterns "$list_format" "$ppa_url" "$package_dist" "$branches")" | ||||||
|     [ -e "$key_source" ] && key_file=$key_source || key_file="$key_dir"/"${ppa/\//-}"-keyring.gpg |   if check_lists "$ppa" "$primary_pattern" "$secondary_pattern" "$status_token"; then | ||||||
|     add_key "$ppa" "$ppa_url" "$package_dist" "$key_source" "$key_file" |     list_path="$check_lists_file" | ||||||
|     sudo rm -rf "$list_dir"/"${ppa/\//-}".list || true |     handle_existing_list "$ppa" "$list_format" "$branches" || return 1; | ||||||
|     echo "deb [arch=$arch signed-by=$key_file] $ppa_url $package_dist $branches" | sudo tee -a "$list_dir"/"${ppa%%/*}"-"$ID"-"${ppa#*/}"-"$package_dist".list >/dev/null 2>&1 |     check_lists_file= | ||||||
|     update_lists "$ppa" "$ppa_search" |     IFS='|' read -r primary_pattern secondary_pattern <<< "$(get_repo_patterns "$list_format" "$ppa_url" "$package_dist" "$branches")" | ||||||
|     . /etc/os-release |     status_token="${ppa_url}|${package_dist}|${branches}" | ||||||
|   fi |   fi | ||||||
|  |   [ -e "$key_source" ] && key_file=$key_source || key_file="$key_dir"/"${ppa/\//-}"-keyring.gpg | ||||||
|  |   add_key "$ppa" "$ppa_url" "$package_dist" "$key_source" "$key_file" | ||||||
|  |   write_list "$list_format" "$ppa" "$ppa_url" "$package_dist" "$branches" "$key_file" | ||||||
|  |   update_lists "$ppa" "$primary_pattern" "$status_token" | ||||||
|  |   . /etc/os-release | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -143,8 +284,12 @@ check_ppa() { | |||||||
|   ppa_url=${2:-"$lpc_ppa/$ppa/ubuntu"} |   ppa_url=${2:-"$lpc_ppa/$ppa/ubuntu"} | ||||||
|   package_dist=${3:-"$VERSION_CODENAME"} |   package_dist=${3:-"$VERSION_CODENAME"} | ||||||
|   branches=${4:-main} |   branches=${4:-main} | ||||||
|   ppa_search="deb .*$ppa_url $package_dist .*$branches$" |   local list_format | ||||||
|   if check_lists "$ppa" "$ppa_search"; then |   list_format="$(get_sources_format)" | ||||||
|  |   IFS='|' read -r primary_pattern secondary_pattern <<< "$(get_repo_patterns "$list_format" "$ppa_url" "$package_dist" "$branches")" | ||||||
|  |   local status_token | ||||||
|  |   status_token="${ppa_url}|${package_dist}|${branches}" | ||||||
|  |   if check_lists "$ppa" "$primary_pattern" "$secondary_pattern" "$status_token"; then | ||||||
|     return 0; |     return 0; | ||||||
|   else |   else | ||||||
|     return 1; |     return 1; | ||||||
| @ -158,7 +303,7 @@ remove_list() { | |||||||
|   for ppa_url in "${ppa_urls[@]}"; do |   for ppa_url in "${ppa_urls[@]}"; do | ||||||
|     grep -lr "$ppa_url" "$list_dir" | xargs -n1 sudo rm -f |     grep -lr "$ppa_url" "$list_dir" | xargs -n1 sudo rm -f | ||||||
|   done |   done | ||||||
|   sudo rm -f "$key_dir"/"${ppa/\//-}"-keyring || true |   sudo rm -f "$key_dir"/"${ppa/\//-}"-keyring /tmp/os_lists* || true | ||||||
| } | } | ||||||
|  |  | ||||||
| # Function to check if ubuntu ppa is up | # Function to check if ubuntu ppa is up | ||||||
| @ -208,12 +353,23 @@ update_ppa() { | |||||||
|   ppa_url=${2:-"$lpc_ppa/$ppa/ubuntu"} |   ppa_url=${2:-"$lpc_ppa/$ppa/ubuntu"} | ||||||
|   package_dist=${4:-"$VERSION_CODENAME"} |   package_dist=${4:-"$VERSION_CODENAME"} | ||||||
|   branches=${5:-main} |   branches=${5:-main} | ||||||
|   ppa_search="deb .*$ppa_url $package_dist .*$branches" |   local list_format | ||||||
|   update_lists "$ppa" "$ppa_search" |   list_format="$(get_sources_format)" | ||||||
|  |   IFS='|' read -r primary_pattern secondary_pattern <<< "$(get_repo_patterns "$list_format" "$ppa_url" "$package_dist" "$branches")" | ||||||
|  |   local list_path | ||||||
|  |   list_path="$(grep -Elr "$primary_pattern" "$list_dir" 2>/dev/null | head -n 1)" | ||||||
|  |   if [ -z "$list_path" ] && [ -n "$secondary_pattern" ]; then | ||||||
|  |     list_path="$(grep -Elr "$secondary_pattern" "$list_dir" 2>/dev/null | head -n 1)" | ||||||
|  |   fi | ||||||
|  |   local status_token | ||||||
|  |   status_token="${ppa_url}|${package_dist}|${branches}" | ||||||
|  |   update_lists "$ppa" "${list_path:-$primary_pattern}" "$status_token" | ||||||
|   . /etc/os-release |   . /etc/os-release | ||||||
| } | } | ||||||
|  |  | ||||||
| # Variables | # Variables | ||||||
|  | sources_format= | ||||||
|  | check_lists_file= | ||||||
| list_dir='/etc/apt/sources.list.d' | list_dir='/etc/apt/sources.list.d' | ||||||
| list_file="/etc/apt/sources.list.d/$ID.sources" | list_file="/etc/apt/sources.list.d/$ID.sources" | ||||||
| [ -e "$list_file" ] || list_file='/etc/apt/sources.list' | [ -e "$list_file" ] || list_file='/etc/apt/sources.list' | ||||||
|  | |||||||
| @ -35,6 +35,6 @@ Function Add-Protoc() { | |||||||
|   Add-ToProfile $current_profile 'protoc' "New-Alias protoc $bin_dir\protoc.exe" |   Add-ToProfile $current_profile 'protoc' "New-Alias protoc $bin_dir\protoc.exe" | ||||||
|   Add-Log $tick "protoc" "Added protoc $($protobuf_tag -replace 'v', '')" |   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" |   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" |   Write-Output "$env:END_GROUP" | ||||||
| } | } | ||||||
|  | |||||||
| @ -25,6 +25,6 @@ add_protoc() { | |||||||
|   ) >/dev/null 2>&1 |   ) >/dev/null 2>&1 | ||||||
|   add_log "${tick:?}" "protoc" "Added protoc ${protobuf_tag: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" |   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" |   echo "$END_GROUP" | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,18 +1,32 @@ | |||||||
| Function Add-Symfony() { | Function Add-Symfony() { | ||||||
|   $arch_name ='amd64' |   param( | ||||||
|   if(-not([Environment]::Is64BitOperatingSystem) -or $version -lt '7.0') { |     [Parameter(Mandatory = $true, Position = 0, HelpMessage = 'Symfony version to be installed')] | ||||||
|     $arch_name = '386' |     [string] $protobuf_tag | ||||||
|   } |   ) | ||||||
|   $url = "https://github.com/symfony-cli/symfony-cli/releases/latest/download/symfony-cli_windows_${arch_name}.zip" |   $protobuf_tag = $protobuf_tag.replace('v', '') | ||||||
|   Get-File -Url $url -OutFile $bin_dir\symfony.zip >$null 2>&1 |   if($protobuf_tag -ne 'latest' -and $protobuf_tag -notmatch '^\d+(\.\d+)*$') { | ||||||
|   Expand-Archive -Path $bin_dir\symfony.zip -DestinationPath $bin_dir -Force >$null 2>&1 |     Add-Log $cross "symfony-cli" "Invalid symfony version: $protobuf_tag" | ||||||
|   if(Test-Path $bin_dir\symfony.exe) { |  | ||||||
|     Copy-Item -Path $bin_dir\symfony.exe -Destination $bin_dir\symfony-cli.exe > $null 2>&1 |  | ||||||
|     Add-ToProfile $current_profile 'symfony' "New-Alias symfony $bin_dir\symfony.exe" |  | ||||||
|     Add-ToProfile $current_profile 'symfony_cli' "New-Alias symfony-cli $bin_dir\symfony-cli.exe" |  | ||||||
|     $tool_version = Get-ToolVersion symfony "-V" |  | ||||||
|     Add-Log $tick "symfony-cli" "Added symfony-cli $tool_version" |  | ||||||
|   } else { |   } else { | ||||||
|     Add-Log $cross "symfony-cli" "Could not setup symfony-cli" |     $arch_name = 'amd64' | ||||||
|  |     if (-not ([Environment]::Is64BitOperatingSystem) -or $version -lt '7.0') { | ||||||
|  |       $arch_name = '386' | ||||||
|  |     } | ||||||
|  |     $symfony_releases = "https://github.com/symfony-cli/symfony-cli/releases" | ||||||
|  |     if ($protobuf_tag -eq 'latest') { | ||||||
|  |       $url = "$symfony_releases/latest/download/symfony-cli_windows_${arch_name}.zip" | ||||||
|  |     } else { | ||||||
|  |       $url = "$symfony_releases/download/v$protobuf_tag/symfony-cli_windows_${arch_name}.zip" | ||||||
|  |     } | ||||||
|  |     Get-File -Url $url -OutFile $bin_dir\symfony.zip > $null 2>&1 | ||||||
|  |     Expand-Archive -Path $bin_dir\symfony.zip -DestinationPath $bin_dir -Force > $null 2>&1 | ||||||
|  |     if (Test-Path $bin_dir\symfony.exe) { | ||||||
|  |       Copy-Item -Path $bin_dir\symfony.exe -Destination $bin_dir\symfony-cli.exe > $null 2>&1 | ||||||
|  |       Add-ToProfile $current_profile 'symfony' "New-Alias symfony $bin_dir\symfony.exe" | ||||||
|  |       Add-ToProfile $current_profile 'symfony_cli' "New-Alias symfony-cli $bin_dir\symfony-cli.exe" | ||||||
|  |       $tool_version = Get-ToolVersion symfony "-V" | ||||||
|  |       Add-Log $tick "symfony-cli" "Added symfony-cli $tool_version" | ||||||
|  |     } else { | ||||||
|  |       Add-Log $cross "symfony-cli" "Could not setup symfony-cli" | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,41 +1,44 @@ | |||||||
| add_symfony_with_brew() { |  | ||||||
|   add_brew_tap symfony-cli/homebrew-tap |  | ||||||
|   brew install symfony-cli/tap/symfony-cli |  | ||||||
| } |  | ||||||
|  |  | ||||||
| get_symfony_artifact_url() { | get_symfony_artifact_url() { | ||||||
|     arch=$(dpkg --print-architecture) |   local symfony_tag=$1 | ||||||
|     url=$(get -s -n "" https://raw.githubusercontent.com/symfony-cli/homebrew-tap/main/Formula/symfony-cli.rb 2<&1 | grep -m 1 "url.*linux.*${arch}" | cut -d\" -f 2) |   local os | ||||||
|     if [ -z "$url" ]; then |   local arch | ||||||
|       url=$(get -s -n "" https://api.github.com/repos/symfony-cli/symfony-cli/releases 2<&1 | grep -m 1 "url.*linux.*${arch}.*gz\"" | cut -d\" -f 4) |   os="$(uname -s | tr '[:upper:]' '[:lower:]')" | ||||||
|     fi |   arch="$(uname -m)" | ||||||
|     echo "$url" |   case "$arch" in | ||||||
|  |     arm|armv6*|armv7*) arch="armv6" ;; | ||||||
|  |     aarch64*|armv8*|arm64) arch="arm64" ;; | ||||||
|  |     i[36]86) arch="386" ;; | ||||||
|  |     x86_64|amd64) arch="amd64" ;; | ||||||
|  |   esac | ||||||
|  |   [ "$os" = "darwin" ] && arch="all" | ||||||
|  |   symfony_releases="https://github.com/symfony-cli/symfony-cli/releases" | ||||||
|  |   if [ "$symfony_tag" = "latest" ]; then | ||||||
|  |     echo "$symfony_releases/latest/download/symfony-cli_${os}_${arch}.tar.gz" | ||||||
|  |   else | ||||||
|  |     echo "$symfony_releases/download/v$symfony_tag/symfony-cli_${os}_${arch}.tar.gz" | ||||||
|  |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
| add_symfony_helper() { | add_symfony_helper() { | ||||||
|   if [ "$(uname -s)" = "Linux" ]; then |   local install_dir=/usr/local/bin | ||||||
|     url="$(get_symfony_artifact_url)" |   [ "$(uname -s)" = "Darwin" ] && install_dir=${brew_prefix:?}/bin | ||||||
|     if [ -z "$url" ]; then |   get -s -n "" "$(get_symfony_artifact_url "$symfony_tag")" | sudo tar -xz -C "$install_dir" 2>/dev/null | ||||||
|       . "${0%/*}"/tools/brew.sh |   sudo chmod a+x "$install_dir"/symfony | ||||||
|       configure_brew |  | ||||||
|       add_symfony_with_brew |  | ||||||
|     else |  | ||||||
|       get -s -n "" "$url" | sudo tar -xz -C "${tool_path_dir:?}" 2>/dev/null |  | ||||||
|       sudo chmod a+x /usr/local/bin/symfony |  | ||||||
|     fi |  | ||||||
|   elif [ "$(uname -s)" = "Darwin" ]; then |  | ||||||
|     add_symfony_with_brew |  | ||||||
|   fi |  | ||||||
| } | } | ||||||
|  |  | ||||||
| add_symfony() { | add_symfony() { | ||||||
|   add_symfony_helper >/dev/null 2>&1 |   local symfony_tag="${1/v/}" | ||||||
|   symfony_path="$(command -v symfony)" |   if ! [[ "$symfony_tag" =~ ^[0-9]+(\.[0-9]+)*$ || "$symfony_tag" == 'latest' ]]; then | ||||||
|   if [[ -n "$symfony_path" ]]; then |       add_log "${cross:?}" "symfony-cli" "Version '$symfony_tag' is not valid for symfony-cli" | ||||||
|     sudo ln -s "$symfony_path" "${tool_path_dir:?}"/symfony-cli |  | ||||||
|     tool_version=$(get_tool_version "symfony" "-V") |  | ||||||
|     add_log "${tick:?}" "symfony-cli" "Added symfony-cli $tool_version" |  | ||||||
|   else |   else | ||||||
|     add_log "${cross:?}" "symfony-cli" "Could not setup symfony-cli" |     add_symfony_helper "$symfony_tag" >/dev/null 2>&1 | ||||||
|  |     symfony_path="$(command -v symfony)" | ||||||
|  |     if [[ -n "$symfony_path" ]]; then | ||||||
|  |       sudo ln -s "$symfony_path" "${tool_path_dir:?}"/symfony-cli | ||||||
|  |       tool_version=$(get_tool_version "symfony" "-V") | ||||||
|  |       add_log "${tick:?}" "symfony-cli" "Added symfony-cli $tool_version" | ||||||
|  |     else | ||||||
|  |       add_log "${cross:?}" "symfony-cli" "Could not setup symfony-cli" | ||||||
|  |     fi | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  | |||||||
| @ -145,7 +145,7 @@ get() { | |||||||
|       status_code=$(sudo curl -w "%{http_code}" -o "$file_path" "${curl_opts[@]}" "$link") |       status_code=$(sudo curl -w "%{http_code}" -o "$file_path" "${curl_opts[@]}" "$link") | ||||||
|       [ "$status_code" = "200" ] && break |       [ "$status_code" = "200" ] && break | ||||||
|     done |     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" |     [ "$mode" = "-v" ] && echo "$status_code" | ||||||
|     [ "$runner" = "self-hosted" ] && release_lock "$lock_path" |     [ "$runner" = "self-hosted" ] && release_lock "$lock_path" | ||||||
|   fi |   fi | ||||||
| @ -244,7 +244,9 @@ configure_php() { | |||||||
|   add_php_config |   add_php_config | ||||||
|   ini_config_dir="${src:?}"/configs/ini |   ini_config_dir="${src:?}"/configs/ini | ||||||
|   ini_config_files=("$ini_config_dir"/php.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) |   [[ "$version" =~ $xdebug3_versions ]] && ini_config_files+=("$ini_config_dir"/xdebug.ini) | ||||||
|   cat "${ini_config_files[@]}" | sudo tee -a "${ini_file[@]:?}" >/dev/null 2>&1 |   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 |   [[ "$version" =~ $jit_versions ]] && cat "${jit_config_files[@]}" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null 2>&1 | ||||||
|  | |||||||
							
								
								
									
										32
									
								
								src/tools.ts
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								src/tools.ts
									
									
									
									
									
								
							| @ -1,5 +1,6 @@ | |||||||
| import path from 'path'; | import path from 'path'; | ||||||
| import fs from 'fs'; | import fs from 'fs'; | ||||||
|  | import * as cv from 'compare-versions'; | ||||||
| import * as fetch from './fetch'; | import * as fetch from './fetch'; | ||||||
| import * as packagist from './packagist'; | import * as packagist from './packagist'; | ||||||
| import * as utils from './utils'; | import * as utils from './utils'; | ||||||
| @ -20,6 +21,11 @@ interface IRef { | |||||||
|  * @param data |  * @param data | ||||||
|  */ |  */ | ||||||
| export async function getSemverVersion(data: RS): Promise<string> { | 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 search: string = data['version_prefix'] + data['version']; | ||||||
|   const url = `https://api.github.com/repos/${data['repository']}/git/matching-refs/tags%2F${search}.`; |   const url = `https://api.github.com/repos/${data['repository']}/git/matching-refs/tags%2F${search}.`; | ||||||
|   const github_token: string = |   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}.`; |     data['error'] = response.error ?? `No version found with prefix ${search}.`; | ||||||
|     return data['version']; |     return data['version']; | ||||||
|   } else { |   } else { | ||||||
|     const refs = JSON.parse(response['data']).reverse(); |     const refs: IRef[] = JSON.parse(response['data']); | ||||||
|     const ref = refs.find((i: IRef) => /.*\d+.\d+.\d+$/.test(i['ref'])); |     const tags = refs | ||||||
|     const tag: string = (ref || refs[0])['ref'].split('/').pop(); |       .map((i: IRef) => (i.ref?.split('/').pop() ?? '').replace(/^v(?=\d)/, '')) | ||||||
|     return tag.replace(/^v(\d)/, '$1'); |       .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 github = data['github']; | ||||||
|   const getcomposer = data['domain']; |   const getcomposer = data['domain']; | ||||||
|   const cds = 'https://dl.cloudsmith.io'; |   const cds = 'https://dl.cloudsmith.io'; | ||||||
|  |   const spc = 'https://artifacts.setup-php.com'; | ||||||
|   const filename = `composer-${data['php_version']}-${channel}.phar`; |   const filename = `composer-${data['php_version']}-${channel}.phar`; | ||||||
|   const releases_url = `${github}/shivammathur/composer-cache/releases/latest/download/${filename}`; |   const releases_url = `${github}/shivammathur/composer-cache/releases/latest/download/${filename}`; | ||||||
|   const cds_url = `${cds}/public/shivammathur/composer-cache/raw/files/${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 lts_url = `${getcomposer}/download/latest-2.2.x/composer.phar`; | ||||||
|   const is_lts = /^5\.[3-6]$|^7\.[0-1]$/.test(data['php_version']); |   const is_lts = /^5\.[3-6]$|^7\.[0-1]$/.test(data['php_version']); | ||||||
|   const version_source_url = `${getcomposer}/composer-${channel}.phar`; |   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`; |   let source_url = `${getcomposer}/composer.phar`; | ||||||
|   switch (true) { |   switch (true) { | ||||||
|     case /^snapshot$/.test(channel): |     case /^snapshot$/.test(channel): | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	