mirror of
				https://github.com/shivammathur/setup-php.git
				synced 2025-10-31 23:36:21 +07:00 
			
		
		
		
	Compare commits
	
		
			188 Commits
		
	
	
		
			2.25.5
			...
			releases/v
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 28c92ba4ee | |||
| ffd019edc6 | |||
| 0e506b34ac | |||
| aa0ecfbc6f | |||
| f29cd24dbf | |||
| 2a41b9d1ba | |||
| 2a0c477416 | |||
| 61aa0dc2f9 | |||
| f4e1b8d33e | |||
| e3a498a6a5 | |||
| fbdd58c5bc | |||
| 2c5cb7a75e | |||
| ab12e42197 | |||
| 5588437714 | |||
| d7eb9ade23 | |||
| 938988b211 | |||
| e030852d0e | |||
| 3aa870b0fe | |||
| 1229133602 | |||
| b1b8d8367c | |||
| 60ff55130a | |||
| e5690a9659 | |||
| 7958a5ccff | |||
| 113a31fceb | |||
| c9aea8708f | |||
| 7435bb8e4a | |||
| 5227e2cd5c | |||
| 906893d397 | |||
| f1b6b2bbe0 | |||
| e59c938e82 | |||
| 506357cdb9 | |||
| b57416e44d | |||
| 9d1fe69816 | |||
| fec64d1788 | |||
| 32c1436247 | |||
| baab28a534 | |||
| d58b967b58 | |||
| 17f3c38947 | |||
| 988f48930d | |||
| ea50e73b1f | |||
| bc906f7414 | |||
| 8bed24ebe1 | |||
| 698464efea | |||
| 45082e25a9 | |||
| f0338c8922 | |||
| 49311db00a | |||
| 7d9584bd3f | |||
| 45df3b1713 | |||
| 70cd53866f | |||
| 12d6e834b7 | |||
| 9fdc82bced | |||
| c485e8b283 | |||
| 7a90166ec2 | |||
| 8f96f50dcd | |||
| c470f034d0 | |||
| e2ad91ce1c | |||
| cb746892c2 | |||
| 8f542eae1a | |||
| 0769672a24 | |||
| c20693a6ca | |||
| 0c0ae39775 | |||
| d27996462b | |||
| 0a5e543af7 | |||
| 0cc14f65a2 | |||
| 1ecc5fdca3 | |||
| 5520fdb61a | |||
| d0f1a91dfd | |||
| 276480411d | |||
| 827b051fea | |||
| fdaf1f0003 | |||
| 030f4839d4 | |||
| 1bb08cc017 | |||
| 678ad243bf | |||
| 20b87bc786 | |||
| 288f9953ef | |||
| 77ac7d57f1 | |||
| 8983fb3ae2 | |||
| 87a933f720 | |||
| 847ea65468 | |||
| c52ce057af | |||
| 46b357b6c2 | |||
| 2fc508f43d | |||
| d8de30560b | |||
| 02db83ef5f | |||
| 6728eaf2ad | |||
| ca291eadaf | |||
| 8185c8186b | |||
| 44cf056ba8 | |||
| 9bfde13f48 | |||
| e38eccad04 | |||
| fa211a9d07 | |||
| 5865982519 | |||
| e201830bdd | |||
| 5c4074b01a | |||
| 48f537d6d0 | |||
| bc40a61480 | |||
| 3d5fae7917 | |||
| d0591e6d7c | |||
| b108a66489 | |||
| f0a05b4f6e | |||
| 5070ebd871 | |||
| bea4065e11 | |||
| c3875408ad | |||
| 1d1c0f2595 | |||
| 1ac189066e | |||
| 74cdfb97c1 | |||
| ee05ca54f6 | |||
| 12b1061a6b | |||
| 1c6058bc18 | |||
| 2f8045c593 | |||
| 6597a6a15b | |||
| 1cc85eb670 | |||
| 6cba0a914f | |||
| c43f842cf3 | |||
| 11e062bf23 | |||
| dee3cfee50 | |||
| 26b0fcc6cd | |||
| ab62fff526 | |||
| 446bccb14d | |||
| 29d99c6866 | |||
| 1444e002ab | |||
| 03b97e24e9 | |||
| f7fb800623 | |||
| 5593bd4bd3 | |||
| 3160874a27 | |||
| db0bbd209b | |||
| d920044a54 | |||
| 818ca89f55 | |||
| 8876ac788f | |||
| 0390a48770 | |||
| 274e348895 | |||
| 37d7b37f43 | |||
| d058d52012 | |||
| 17983e66e5 | |||
| 33a005dd90 | |||
| 1870ffc08c | |||
| 70fd71ab48 | |||
| 2f1900f7bc | |||
| 19497a0597 | |||
| 5b2e081bc0 | |||
| 66fa82fbca | |||
| 4aa42214b1 | |||
| 1e2c96a4b4 | |||
| 3e8d887b0d | |||
| a3d5500a6a | |||
| e763fddf01 | |||
| 3cd5c7fd3a | |||
| 988cef62da | |||
| be3ee05178 | |||
| a74c3369c5 | |||
| b9ef39c812 | |||
| 782615d572 | |||
| 31411b0d4d | |||
| 6b93e48d83 | |||
| fe504c5e23 | |||
| 61d755bd59 | |||
| 3455b4ca37 | |||
| 35c24a7d2f | |||
| da7361cc8f | |||
| 3f4c1842a0 | |||
| 062567eeb1 | |||
| 00b0d694d0 | |||
| 54afb29ef6 | |||
| 41329810ef | |||
| 90a6d88c24 | |||
| 8e6968c49e | |||
| 4ce413f558 | |||
| 533e0949a8 | |||
| 0ffe535b8e | |||
| 55fe8db60d | |||
| 5af5f992ec | |||
| e9e024e600 | |||
| a7ea0636d7 | |||
| c471c0a458 | |||
| 277239149a | |||
| 9385896f2a | |||
| 9cabd8564d | |||
| fdfa901941 | |||
| 527cd148c8 | |||
| 59b6e2b54a | |||
| 5ad0888329 | |||
| 3cfc409e14 | |||
| ebc671081f | |||
| efae663c0f | |||
| fa8a671e6f | |||
| 6a4159ba98 | |||
| 0da52b1327 | |||
| 3579c7ef28 | 
| @ -1,7 +1,7 @@ | ||||
| { | ||||
|   "env": { "node": true, "jest": true }, | ||||
|   "parser": "@typescript-eslint/parser", | ||||
|   "parserOptions": { "ecmaVersion": 2021, "sourceType": "module" }, | ||||
|   "parserOptions": { "ecmaVersion": 2019, "sourceType": "module" }, | ||||
|   "extends": [ | ||||
|     "eslint:recommended", | ||||
|     "plugin:@typescript-eslint/eslint-recommended", | ||||
|  | ||||
							
								
								
									
										80
									
								
								.github/CONTRIBUTING.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										80
									
								
								.github/CONTRIBUTING.md
									
									
									
									
										vendored
									
									
								
							| @ -1,26 +1,36 @@ | ||||
| # Contributing to setup-php | ||||
|  | ||||
| ## Welcome! | ||||
|  | ||||
| We look forward to your contributions! Here are some examples how you can contribute: | ||||
|  | ||||
| * [Ask any questions you may have](https://github.com/shivammathur/setup-php/discussions/new?category=Q-A-Help) | ||||
| * [Report a bug](https://github.com/shivammathur/setup-php/issues/new?labels=type/bug&template=bug.md) | ||||
| * [Propose a new feature](https://github.com/shivammathur/setup-php/issues/new?labels=enhancement&template=feature.md) | ||||
| * [Send a pull request](https://github.com/shivammathur/setup-php/pulls) | ||||
|  | ||||
| ## Contributor Code of Conduct | ||||
|  | ||||
| Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms. | ||||
|  | ||||
| ## Getting Started | ||||
| ## Workflow | ||||
|  | ||||
| To get started fork `setup-php` and clone it using git: | ||||
| * Fork the project. | ||||
| * Make your bug fix or feature addition. | ||||
| * Add tests for it. This is important so we don't break it in a future version unintentionally. | ||||
| * Send a pull request to the develop branch. | ||||
|  | ||||
| Please make sure that you have [set up your user name and email address](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup) for use with Git. Strings such as `silly nick name <root@localhost>` look really stupid in the commit history of a project. | ||||
|  | ||||
| Due to time constraints, you may not always get a quick response. Please do not take delays personal and feel free to remind. | ||||
|  | ||||
| ## Coding Guidelines | ||||
|  | ||||
| ## Using setup-php from a Git checkout | ||||
|  | ||||
| The following commands can be used to perform the initial checkout of setup-php: | ||||
|  | ||||
| ```bash | ||||
| git clone https://github.com/<your-username>/setup-php.git | ||||
| $ git clone https://github.com/shivammathur/setup-php.git | ||||
|  | ||||
| cd setup-php | ||||
| $ cd setup-php | ||||
| ``` | ||||
|  | ||||
| Install setup-php dependencies using [npm](https://www.npmjs.com/): | ||||
|  | ||||
| ```bash | ||||
| $ npm install | ||||
| ``` | ||||
|  | ||||
| If you are using `Windows` configure `git` to handle line endings. | ||||
| @ -29,55 +39,31 @@ If you are using `Windows` configure `git` to handle line endings. | ||||
| git config --local core.autocrlf true | ||||
| ``` | ||||
|  | ||||
| Install `setup-php` dependencies using [npm](https://www.npmjs.com/): | ||||
|  | ||||
| ```bash | ||||
| npm install | ||||
| ``` | ||||
|  | ||||
| ## Workflow to create Pull Requests | ||||
|  | ||||
| * Fork the `setup-php` project and clone it. | ||||
| * Create a new branch from the develop branch. | ||||
| * Make your bug fix or feature addition. | ||||
| * Add tests for it, so we don't break it in a future version unintentionally. | ||||
| * Ensure the test suite passes and the code complies with our coding guidelines (see below). | ||||
| * Send a pull request to the develop branch with all the details. | ||||
| * If possible, create a GitHub Actions workflow with an integration test for the change in a demo repository and link it in your pull request. | ||||
|  | ||||
| Please make sure that you have [set up your user name and email address](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup) for use with Git. Strings such as `silly nick name <root@localhost>` look really stupid in the commit history of a project. | ||||
|  | ||||
| Due to time constraints, you may not always get a quick response. Please do not take delays personally and feel free to remind. | ||||
|  | ||||
| ## Coding Guidelines | ||||
|  | ||||
| This project comes with `.prettierrc.json` and `eslintrc.json` configuration files. Please run the following commands to fix and verify the code quality. | ||||
|  | ||||
| ```bash | ||||
| npm run format | ||||
| npm run lint | ||||
| $ npm run format | ||||
| $ npm run lint | ||||
| ``` | ||||
|  | ||||
| ### Running the test suite | ||||
| ## Running the test suite | ||||
|  | ||||
| After following the steps shown above, The `setup-php` tests in the `__tests__` directory can be run using this command: | ||||
|  | ||||
| ```bash | ||||
| npm test | ||||
| $ npm test | ||||
| ``` | ||||
|  | ||||
| ### Creating a release | ||||
| ## Creating a release | ||||
|  | ||||
| Creating a release means compiling all the TypeScript code to a single file which `setup-php` can run. Run this, before you push your changes. | ||||
| Create a release before you push your changes. | ||||
|  | ||||
| ```bash | ||||
| npm run build | ||||
| npm run release | ||||
| $ npm run release | ||||
| ``` | ||||
|  | ||||
| ### Reporting issues and discussions | ||||
| ## Reporting issues | ||||
|  | ||||
| For questions or support, we prefer GitHub Discussions. For any bugs or new features you can create an issue using the appropriate template: | ||||
| Please submit the issue using the appropriate template provided for a bug report or a feature request: | ||||
|  | ||||
| * [Discussions](https://github.com/shivammathur/setup-php/discussions) | ||||
| * [Issues](https://github.com/shivammathur/setup-php/issues) | ||||
| * [Issues](https://github.com/shivammathur/setup-php/issues) | ||||
							
								
								
									
										2
									
								
								.github/FUNDING.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/FUNDING.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,3 +1,3 @@ | ||||
| # These are supported funding model platforms | ||||
|  | ||||
| github: shivammathur | ||||
| github:shivammathur | ||||
							
								
								
									
										42
									
								
								.github/ISSUE_TEMPLATE/bug.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								.github/ISSUE_TEMPLATE/bug.md
									
									
									
									
										vendored
									
									
								
							| @ -1,42 +0,0 @@ | ||||
| --- | ||||
| name: Bug report | ||||
| about: Nice, you found a bug! | ||||
| title: '' | ||||
| labels: 'bug' | ||||
| assignees: 'shivammathur' | ||||
|  | ||||
| --- | ||||
|  | ||||
| **Describe the bug** | ||||
| <!-- Please describe the bug concisely. --> | ||||
|  | ||||
| **Version** | ||||
| - [ ] I have checked releases, and the bug exists in the latest patch version of `v1` or `v2`. | ||||
| - [ ] `v2` | ||||
| - [ ] `v1` | ||||
|  | ||||
| **Runners** | ||||
| <!-- Please mark the GitHub Action runner your workflow uses. --> | ||||
| - [ ] GitHub Hosted | ||||
| - [ ] Self Hosted | ||||
|  | ||||
| **Operating systems** | ||||
| <!-- Please mention the operating systems your workflow uses. --> | ||||
|  | ||||
| **PHP versions** | ||||
| <!-- Please mention the PHP versions your workflow uses. --> | ||||
|  | ||||
| **To Reproduce** | ||||
| <!-- Please provide the relevant steps of your workflow `.yml` file. --> | ||||
|  | ||||
| **Expected behavior** | ||||
| <!-- A clear and concise description of what you expected to happen. --> | ||||
|  | ||||
| **Screenshots/Logs** | ||||
| <!-- If applicable, add screenshots or logs to help explain your problem. --> | ||||
|  | ||||
| **Additional context** | ||||
| <!-- Add any other context about the problem here. --> | ||||
|  | ||||
| **Are you willing to submit a PR?** | ||||
| <!-- We accept pull requests targeting the develop branch. --> | ||||
							
								
								
									
										23
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | ||||
| --- | ||||
| name: Bug report | ||||
| about: Create a report to help us improve | ||||
| title: '' | ||||
| labels: '' | ||||
| assignees: '' | ||||
|  | ||||
| --- | ||||
|  | ||||
| **Describe the bug** | ||||
| A clear and concise description of what the bug is. | ||||
|  | ||||
| **To Reproduce** | ||||
| Please provide the GitHub Action `.yml` file. | ||||
|  | ||||
| **Expected behavior** | ||||
| A clear and concise description of what you expected to happen. | ||||
|  | ||||
| **Screenshots** | ||||
| If applicable, add screenshots to help explain your problem. | ||||
|  | ||||
| **Additional context** | ||||
| Add any other context about the problem here. | ||||
							
								
								
									
										26
									
								
								.github/ISSUE_TEMPLATE/feature.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								.github/ISSUE_TEMPLATE/feature.md
									
									
									
									
										vendored
									
									
								
							| @ -1,26 +0,0 @@ | ||||
| --- | ||||
| name: Feature request | ||||
| about: Suggest a new feature | ||||
| title: '' | ||||
| labels: 'enhancement' | ||||
| assignees: 'shivammathur' | ||||
|  | ||||
| --- | ||||
|  | ||||
| **Describe the feature** | ||||
| <!-- Please describe concisely the feature you want to add. --> | ||||
|  | ||||
| **Version** | ||||
| - [ ] I have checked releases, and the feature is missing in the latest patch version of `v2`. | ||||
|  | ||||
| **Underlying issue** | ||||
| <!-- Please describe the issue this would solve. --> | ||||
|  | ||||
| **Describe alternatives** | ||||
| <!-- Please mention any alternative solutions you've considered. --> | ||||
|  | ||||
| **Additional context** | ||||
| <!-- Add any other context or screenshots about the feature request here. --> | ||||
|  | ||||
| **Are you willing to submit a PR?** | ||||
| <!-- We accept pull requests targeting the develop branch. --> | ||||
							
								
								
									
										20
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | ||||
| --- | ||||
| name: Feature request | ||||
| about: Suggest an idea for this project | ||||
| title: '' | ||||
| labels: '' | ||||
| assignees: '' | ||||
|  | ||||
| --- | ||||
|  | ||||
| **Is your feature request related to a problem? Please describe.** | ||||
| A clear and concise description of what the problem is. Ex. I want to improve [...] | ||||
|  | ||||
| **Describe the solution you'd like** | ||||
| A clear and concise description of what you want to happen. | ||||
|  | ||||
| **Describe alternatives you've considered** | ||||
| A clear and concise description of any alternative solutions or features you've considered. | ||||
|  | ||||
| **Additional context** | ||||
| Add any other context or screenshots about the feature request here. | ||||
							
								
								
									
										11
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							| @ -5,15 +5,16 @@ labels: bug or enhancement | ||||
|  | ||||
| --- | ||||
|  | ||||
| ## A Pull Request should be associated with a Discussion. | ||||
| ## A Pull Request should be associated with an Issue. | ||||
|  | ||||
| > If you're fixing a bug, adding a new feature or improving something please provide the details in discussions, | ||||
| > so that the development can be pointed in the intended direction. | ||||
| > We wish to have discussions in Issues. A single issue may be targeted by multiple PRs. | ||||
| > If you're offering a new feature or fixing anything, we'd like to know beforehand in Issues, | ||||
| > and potentially we'll be able to point development in a particular direction. | ||||
|  | ||||
| Related discussion: <!-- Please link the related discussion --> | ||||
| Related issue:  | ||||
|  | ||||
| > Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md) | ||||
| > Thank you for your contribution. | ||||
| > Thank you! We are open to PRs, but please understand if for technical reasons we are unable to accept each and any PR | ||||
|  | ||||
| ### Description | ||||
|  | ||||
|  | ||||
							
								
								
									
										11
									
								
								.github/SECURITY.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/SECURITY.md
									
									
									
									
										vendored
									
									
								
							| @ -2,18 +2,23 @@ | ||||
|  | ||||
| ## Supported Versions | ||||
|  | ||||
| The latest patch versions of `v1` and `v2` releases of this project are supported for security updates. | ||||
| The following versions of this project are supported for security updates. | ||||
|  | ||||
| | Version | Supported          | | ||||
| | ------- | ------------------ | | ||||
| | 1.11.x  | :white_check_mark: | | ||||
| | 2.14.x  | :white_check_mark: | | ||||
|  | ||||
| ## Supported PHP Versions | ||||
|  | ||||
| This security policy only applies to the latest patches of the following PHP versions. | ||||
|  | ||||
| | Version | Supported          | | ||||
| |---------|--------------------| | ||||
| | ------- | ------------------ | | ||||
| | 7.3     | :white_check_mark: | | ||||
| | 7.4     | :white_check_mark: | | ||||
| | 8.0     | :white_check_mark: | | ||||
| | 8.1     | :white_check_mark: | | ||||
| | 8.2     | :white_check_mark: | | ||||
|  | ||||
| ## Reporting a Vulnerability | ||||
|  | ||||
|  | ||||
							
								
								
									
										7
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,7 +0,0 @@ | ||||
| version: 2 | ||||
| updates: | ||||
| - package-ecosystem: "github-actions" | ||||
|   directory: "/" | ||||
|   target-branch: "develop" | ||||
|   schedule: | ||||
|       interval: "weekly" | ||||
							
								
								
									
										25
									
								
								.github/workflows/codeql-workflow.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								.github/workflows/codeql-workflow.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | ||||
| name: CodeQL Workflow | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|   schedule: | ||||
|     - cron: '0 15 * * 6' | ||||
| jobs: | ||||
|   codeql: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v2 | ||||
|         with: | ||||
|           fetch-depth: 2 | ||||
|  | ||||
|       - name: Initialize CodeQL | ||||
|         uses: github/codeql-action/init@v1 | ||||
|         with: | ||||
|           config-file: ./.github/codeql/codeql-configuration.yml | ||||
|           languages: javascript | ||||
|  | ||||
|       - name: Autobuild | ||||
|         uses: github/codeql-action/autobuild@v1 | ||||
|  | ||||
|       - name: Perform CodeQL Analysis | ||||
|         uses: github/codeql-action/analyze@v1 | ||||
							
								
								
									
										32
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,32 +0,0 @@ | ||||
| name: CodeQL Workflow | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|   schedule: | ||||
|     - cron: '0 15 * * 6' | ||||
| permissions: | ||||
|   contents: read | ||||
|  | ||||
| jobs: | ||||
|   codeql: | ||||
|     permissions: | ||||
|       actions: read  # for github/codeql-action/init to get workflow details | ||||
|       contents: read  # for actions/checkout to fetch code | ||||
|       security-events: write  # for github/codeql-action/autobuild to send a status report | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|         with: | ||||
|           fetch-depth: 2 | ||||
|  | ||||
|       - name: Initialize CodeQL | ||||
|         uses: github/codeql-action/init@v2 | ||||
|         with: | ||||
|           config-file: ./.github/codeql/codeql-configuration.yml | ||||
|           languages: javascript | ||||
|  | ||||
|       - name: Autobuild | ||||
|         uses: github/codeql-action/autobuild@v2 | ||||
|  | ||||
|       - name: Perform CodeQL Analysis | ||||
|         uses: github/codeql-action/analyze@v2 | ||||
							
								
								
									
										92
									
								
								.github/workflows/docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										92
									
								
								.github/workflows/docs.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,92 +0,0 @@ | ||||
| name: Docs workflow | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|   schedule: | ||||
|     - cron: '0 15 * * 6' | ||||
| permissions: | ||||
|   contents: read | ||||
|  | ||||
| jobs: | ||||
|   create: | ||||
|     permissions: | ||||
|       contents: none | ||||
|     name: Create | ||||
|     runs-on: ${{ matrix.operating-system }} | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-22.04, ubuntu-20.04, windows-2022, macos-11] | ||||
|         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'] | ||||
|     steps: | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|       - name: Create for Linux and macOS | ||||
|         env: | ||||
|           file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md | ||||
|           version: ${{ matrix.php-versions }} | ||||
|         if: matrix.operating-system != 'windows-2022' | ||||
|         run: | | ||||
|           echo "## PHP $version" >> "$file" | ||||
|           printf "\n" >> "$file" | ||||
|           echo "\`\`\`" >> "$file" | ||||
|           php -m >> "$file" | ||||
|           echo "\`\`\`" >> "$file" | ||||
|           printf "\n" >> "$file" | ||||
|       - name: Create for Windows | ||||
|         env: | ||||
|           file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md | ||||
|           version: ${{ matrix.php-versions }} | ||||
|         if: matrix.operating-system == 'windows-2022' | ||||
|         run: | | ||||
|           Write-Output "## PHP ${{ matrix.php-versions }}`n" | Out-File -FilePath "$env:file" | ||||
|           Write-Output "``````" | Out-File -FilePath "$env:file" -Append | ||||
|           php -m | Out-File -FilePath "$env:file" -Append | ||||
|           Write-Output "```````n" | Out-File -FilePath "$env:file" -Append | ||||
|       - name: Upload artifacts | ||||
|         uses: actions/upload-artifact@v3 | ||||
|         with: | ||||
|           name: lists | ||||
|           path: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md | ||||
|   update: | ||||
|     permissions: | ||||
|       contents: write  # for Git to git push | ||||
|     name: Update | ||||
|     needs: create | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|         with: | ||||
|           repository: ${{ github.repository }}.wiki | ||||
|       - name: Download artifacts | ||||
|         uses: actions/download-artifact@v3 | ||||
|         with: | ||||
|           path: ${{ github.workspace }} | ||||
|       - name: Configure Git | ||||
|         run : | | ||||
|           git config --local user.email "${{ secrets.email }}" | ||||
|           git config --local user.name "${{ github.repository_owner }}" | ||||
|       - name: Combine | ||||
|         run: | | ||||
|           for os in ubuntu-22.04 ubuntu-20.04 windows-2022 windows-2019 macos-11 macos-10.15; do | ||||
|             echo "These are extensions which are loaded by default on the following PHP versions. More extensions which are available as packages and available on pecl are supported by setup-php. Refer to [php extension support](https://github.com/shivammathur/setup-php#heavy_plus_sign-php-extension-support) for more details." > Php-extensions-loaded-on-"$os".md | ||||
|             for version in 5.3 5.4 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 8.1 8.2; do | ||||
|               if [ "$os" = "macos-10.15" ]; then | ||||
|                 cat lists/php"$version"-macos-11.md >> Php-extensions-loaded-on-"$os".md | ||||
|               elif [ "$os" = "windows-2019" ]; then | ||||
|                 cat lists/php"$version"-windows-2022.md >> Php-extensions-loaded-on-"$os".md | ||||
|               else | ||||
|                 cat lists/php"$version"-"$os".md >> Php-extensions-loaded-on-"$os".md | ||||
|               fi | ||||
|             done | ||||
|           done | ||||
|           rm -rf ./lists | ||||
|       - name: Update | ||||
|         run: | | ||||
|           if [ "$(git status --porcelain=v1 2>/dev/null | wc -l)" != "0" ]; then | ||||
|             git add . | ||||
|             git commit -m "Update PHP extensions on wiki - $(date +'%d-%m-%y')" | ||||
|             git push -f https://${{ github.repository_owner }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.wiki.git master || true | ||||
|           fi | ||||
| @ -3,24 +3,16 @@ on: | ||||
|   workflow_dispatch: | ||||
|   pull_request: | ||||
|     branches: | ||||
|       - master | ||||
|       - develop | ||||
|       - verbose | ||||
|       - releases/v1 | ||||
|     paths-ignore: | ||||
|       - '**.md' | ||||
|       - 'examples/**' | ||||
|   push: | ||||
|     branches: | ||||
|       - master | ||||
|       - develop | ||||
|       - verbose | ||||
|       - releases/v1 | ||||
|     paths-ignore: | ||||
|       - '**.md' | ||||
|       - 'examples/**' | ||||
| permissions: | ||||
|   contents: read | ||||
| env: | ||||
|   default-php-version: '8.2' | ||||
| jobs: | ||||
|   run: | ||||
|     name: Run | ||||
| @ -28,54 +20,23 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-22.04, ubuntu-20.04, windows-2019, macos-latest] | ||||
|         php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3'] | ||||
|         include: | ||||
|           - operating-system: ubuntu-22.04 | ||||
|             php-versions: '' | ||||
|             php-version-file: 'php-version-file' | ||||
|         exclude: | ||||
|           - operating-system: macos-latest | ||||
|             php-versions: '8.3' | ||||
|     env: | ||||
|       extensions: xml, opcache, xdebug, pcov, gd | ||||
|       key: cache-v5 | ||||
|         operating-system: [ubuntu-20.04, ubuntu-18.04, windows-latest, macos-latest] | ||||
|         php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
| 
 | ||||
|       - name: Setup cache environment | ||||
|         id: cache-env | ||||
|         uses: shivammathur/cache-extensions@develop | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions || env.default-php-version }} | ||||
|           extensions: ${{ env.extensions }} | ||||
|           key: ${{ env.key }} | ||||
| 
 | ||||
|       - name: Cache extensions | ||||
|         uses: actions/cache@v3 | ||||
|         with: | ||||
|           path: ${{ steps.cache-env.outputs.dir }} | ||||
|           key: ${{ steps.cache-env.outputs.key }} | ||||
|           restore-keys: ${{ steps.cache-env.outputs.key }} | ||||
| 
 | ||||
|       - name: Stage php-version-file | ||||
|         if: ${{ matrix.php-version-file == 'php-version-file' }} | ||||
|         run: | | ||||
|           echo ${{ env.default-php-version }} > php-version-file | ||||
|         uses: actions/checkout@v2 | ||||
| 
 | ||||
|       - name: Setup PHP with extensions and custom config | ||||
|         run: node dist/index.js | ||||
|         env: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           php-version-file: ${{ matrix.php-version-file }} | ||||
|           extensions: ${{ env.extensions }} | ||||
|           ini-values: post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata | ||||
|           extensions: xml, opcache, xdebug, pcov #optional | ||||
|           ini-values: post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata #optional | ||||
| 
 | ||||
|       - name: Testing PHP version | ||||
|         run: | | ||||
|           php -v | ||||
|           php -r "if(strpos(phpversion(), '${{ matrix.php-versions || env.default-php-version }}') === false) {throw new Exception('Wrong PHP version Installed');}" | ||||
|           php -r "if(strpos(phpversion(), '${{ matrix.php-versions }}') === false) {throw new Exception('Wrong PHP version Installed');}" | ||||
| 
 | ||||
|       - name: Testing Composer version | ||||
|         run: | | ||||
| @ -84,7 +45,6 @@ jobs: | ||||
|       - name: Testing Extensions | ||||
|         run: | | ||||
|           php -m | ||||
|           php -r "if(! extension_loaded('gd')) {throw new Exception('gd not found');}" | ||||
|           php -r "if(! extension_loaded('xml')) {throw new Exception('xml not found');}" | ||||
|           php -r "if(! extension_loaded('Xdebug')) {throw new Exception('Xdebug not found');}" | ||||
|           php -r "if(phpversion()>=7.1 && ! extension_loaded('pcov')) {throw new Exception('PCOV not found');}" | ||||
| @ -2,23 +2,16 @@ name: Node workflow | ||||
| on: | ||||
|   pull_request: | ||||
|     branches: | ||||
|       - master | ||||
|       - develop | ||||
|       - verbose | ||||
|       - releases/v1 | ||||
|     paths-ignore: | ||||
|       - '**.md' | ||||
|       - 'examples/**' | ||||
|   push: | ||||
|     branches: | ||||
|       - master | ||||
|       - develop | ||||
|       - verbose | ||||
|       - releases/v1 | ||||
|     paths-ignore: | ||||
|       - '**.md' | ||||
|       - 'examples/**' | ||||
| permissions: | ||||
|   contents: read | ||||
| 
 | ||||
| jobs: | ||||
|   run: | ||||
|     name: Run | ||||
| @ -29,12 +22,10 @@ jobs: | ||||
|         operating-system: [ubuntu-latest, windows-latest, macos-latest] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|         with: | ||||
|           fetch-depth: 2 | ||||
|         uses: actions/checkout@v2 | ||||
| 
 | ||||
|       - name: Setup Node.js 16.x | ||||
|         uses: actions/setup-node@v3 | ||||
|         uses: actions/setup-node@v1 | ||||
|         with: | ||||
|           node-version: 16.x | ||||
| 
 | ||||
| @ -54,7 +45,7 @@ jobs: | ||||
|         run: npm audit | ||||
| 
 | ||||
|       - name: Send Coverage | ||||
|         uses: codecov/codecov-action@v3 | ||||
|         uses: codecov/codecov-action@v2 | ||||
|         with: | ||||
|           token: ${{ secrets.CODECOV_TOKEN }} | ||||
|           files: coverage/lcov.info | ||||
							
								
								
									
										62
									
								
								.github/workflows/publish.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										62
									
								
								.github/workflows/publish.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,62 +0,0 @@ | ||||
| name: Publish Package | ||||
| on: | ||||
|   release: | ||||
|     types: [created] | ||||
|   workflow_dispatch: | ||||
|     inputs: | ||||
|       skip: | ||||
|         description: Skip release to repository | ||||
|         required: false | ||||
|       tag: | ||||
|         description: Tag name | ||||
|         required: true | ||||
| jobs: | ||||
|   build: | ||||
|     runs-on: ubuntu-latest | ||||
|     permissions: | ||||
|       contents: read | ||||
|       packages: write | ||||
|     steps: | ||||
|       - name: Checkout release | ||||
|         if: github.event_name != 'workflow_dispatch' | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       - name: Checkout tag | ||||
|         uses: actions/checkout@v3 | ||||
|         if: github.event_name == 'workflow_dispatch' | ||||
|         with: | ||||
|           ref: ${{ github.event.inputs.tag }} | ||||
|  | ||||
|       - name: Setup Node.js | ||||
|         uses: actions/setup-node@v3 | ||||
|         with: | ||||
|           node-version: '16.x' | ||||
|           registry-url: https://registry.npmjs.org | ||||
|  | ||||
|       - name: Install dependencies and add lib | ||||
|         run: | | ||||
|           npm install | ||||
|           npm run build | ||||
|           sed -i -e '/lib\//d' .gitignore | ||||
|  | ||||
|       - name: Publish to NPM | ||||
|         if: "!contains(github.event.inputs.skip, 'skip-npm')" | ||||
|         run: npm publish --access public | ||||
|         env: | ||||
|           NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | ||||
|  | ||||
|       - name: Change to GitHub Packages registry | ||||
|         uses: actions/setup-node@v3 | ||||
|         with: | ||||
|           registry-url: https://npm.pkg.github.com | ||||
|           scope: '@shivammathur' | ||||
|  | ||||
|       - name: Patch package.json | ||||
|         run: | | ||||
|           sed -i 's#"name": "#"name": "@shivammathur/#' package.json | ||||
|  | ||||
|       - name: Publish to GitHub Packages | ||||
|         if: "!contains(github.event.inputs.skip, 'skip-github-packages')" | ||||
|         run: npm publish | ||||
|         env: | ||||
|           NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||
							
								
								
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							| @ -1,7 +1,7 @@ | ||||
|  | ||||
| The MIT License (MIT) | ||||
|  | ||||
| Copyright (c) shivammathur and contributors | ||||
| Copyright (c) 2019-2020 shivammathur and contributors | ||||
|  | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | ||||
|  | ||||
| @ -1,16 +1,52 @@ | ||||
| import * as config from '../src/config'; | ||||
|  | ||||
| describe('Config tests', () => { | ||||
|   it.each` | ||||
|     ini_values    | os           | output | ||||
|     ${'a=b, c=d'} | ${'win32'}   | ${'Add-Content "$php_dir\\php.ini" "a=b\nc=d"'} | ||||
|     ${'a=b, c=d'} | ${'linux'}   | ${'echo "a=b\nc=d" | sudo tee -a "${pecl_file:-${ini_file[@]}}"'} | ||||
|     ${'a=b, c=d'} | ${'darwin'}  | ${'echo "a=b\nc=d" | sudo tee -a "${pecl_file:-${ini_file[@]}}"'} | ||||
|     ${'a=b & ~c'} | ${'win32'}   | ${'Add-Content "$php_dir\\php.ini" "a=\'b & ~c\'"'} | ||||
|     ${'a="~(b)"'} | ${'win32'}   | ${'Add-Content "$php_dir\\php.ini" "a=\'~(b)\'"'} | ||||
|     ${'a="b, c"'} | ${'win32'}   | ${'Add-Content "$php_dir\\php.ini" "a=b, c"'} | ||||
|     ${'a=b, c=d'} | ${'openbsd'} | ${'Platform openbsd is not supported'} | ||||
|   `('checking addINIValues on $os', async ({ini_values, os, output}) => { | ||||
|     expect(await config.addINIValues(ini_values, os)).toContain(output); | ||||
|   it('checking addINIValuesOnWindows', async () => { | ||||
|     let win32: string = await config.addINIValues( | ||||
|       'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata', | ||||
|       'win32' | ||||
|     ); | ||||
|     expect(win32).toContain( | ||||
|       'Add-Content C:\\tools\\php\\php.ini "post_max_size=256M\nshort_open_tag=On\ndate.timezone=Asia/Kolkata"' | ||||
|     ); | ||||
|  | ||||
|     win32 = await config.addINIValues( | ||||
|       'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata', | ||||
|       'openbsd' | ||||
|     ); | ||||
|     expect(win32).toContain('Platform openbsd is not supported'); | ||||
|   }); | ||||
|  | ||||
|   it('checking addINIValuesOnLinux', async () => { | ||||
|     let linux: string = await config.addINIValues( | ||||
|       'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata', | ||||
|       'linux', | ||||
|       true | ||||
|     ); | ||||
|     expect(linux).toContain( | ||||
|       'echo "post_max_size=256M\nshort_open_tag=On\ndate.timezone=Asia/Kolkata"' | ||||
|     ); | ||||
|  | ||||
|     linux = await config.addINIValues( | ||||
|       'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata', | ||||
|       'openbsd' | ||||
|     ); | ||||
|     expect(linux).toContain('Platform openbsd is not supported'); | ||||
|   }); | ||||
|  | ||||
|   it('checking addINIValuesOnDarwin', async () => { | ||||
|     let darwin: string = await config.addINIValues( | ||||
|       'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata', | ||||
|       'darwin' | ||||
|     ); | ||||
|     expect(darwin).toContain( | ||||
|       'echo "post_max_size=256M\nshort_open_tag=On\ndate.timezone=Asia/Kolkata"' | ||||
|     ); | ||||
|  | ||||
|     darwin = await config.addINIValues( | ||||
|       'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata', | ||||
|       'openbsd' | ||||
|     ); | ||||
|     expect(darwin).toContain('Platform openbsd is not supported'); | ||||
|   }); | ||||
| }); | ||||
|  | ||||
| @ -1,44 +1,110 @@ | ||||
| import * as coverage from '../src/coverage'; | ||||
|  | ||||
| describe('Config tests', () => { | ||||
|   it.each` | ||||
|     driver       | php      | os          | output | ||||
|     ${'PCOV'}    | ${'7.4'} | ${'win32'}  | ${'Add-Extension pcov,Disable-Extension xdebug false'} | ||||
|     ${'pcov'}    | ${'7.4'} | ${'win32'}  | ${'$pcov_version = php -r "echo phpversion(\'pcov\');"'} | ||||
|     ${'pcov'}    | ${'7.4'} | ${'win32'}  | ${'PCOV $pcov_version enabled as coverage driver'} | ||||
|     ${'pcov'}    | ${'7.0'} | ${'win32'}  | ${'PHP 7.1 or newer is required'} | ||||
|     ${'pcov'}    | ${'5.6'} | ${'win32'}  | ${'PHP 7.1 or newer is required'} | ||||
|     ${'pcov'}    | ${'7.4'} | ${'win32'}  | ${'Add-Extension pcov,Disable-Extension xdebug false'} | ||||
|     ${'pcov'}    | ${'7.4'} | ${'linux'}  | ${'add_extension pcov,disable_extension xdebug false'} | ||||
|     ${'pcov'}    | ${'7.4'} | ${'darwin'} | ${'add_brew_extension pcov,disable_extension xdebug false'} | ||||
|     ${'xdebug'}  | ${'7.4'} | ${'win32'}  | ${'Add-Extension xdebug'} | ||||
|     ${'xdebug3'} | ${'7.1'} | ${'win32'}  | ${'xdebug3 is not supported on PHP 7.1'} | ||||
|     ${'xdebug2'} | ${'7.4'} | ${'win32'}  | ${'Add-Extension xdebug stable 2.9.8'} | ||||
|     ${'xdebug'}  | ${'8.0'} | ${'linux'}  | ${'add_extension xdebug'} | ||||
|     ${'xdebug3'} | ${'8.0'} | ${'linux'}  | ${'add_extension xdebug'} | ||||
|     ${'xdebug2'} | ${'7.4'} | ${'linux'}  | ${'add_pecl_extension xdebug 2.9.8 zend_extension'} | ||||
|     ${'xdebug'}  | ${'7.4'} | ${'linux'}  | ${'xdebug_version="$(php -r "echo phpversion(\'xdebug\');")"'} | ||||
|     ${'xdebug'}  | ${'7.4'} | ${'linux'}  | ${'Xdebug $xdebug_version enabled as coverage driver'} | ||||
|     ${'xdebug'}  | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug'} | ||||
|     ${'xdebug3'} | ${'7.1'} | ${'darwin'} | ${'xdebug3 is not supported on PHP 7.1'} | ||||
|     ${'xdebug2'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug2'} | ||||
|     ${'xdebug2'} | ${'8.0'} | ${'darwin'} | ${'xdebug2 is not supported on PHP 8.0'} | ||||
|     ${'none'}    | ${'7.4'} | ${'win32'}  | ${'Disable-Extension xdebug false,Disable-Extension pcov false'} | ||||
|     ${'none'}    | ${'7.4'} | ${'linux'}  | ${'disable_extension xdebug false,disable_extension pcov false'} | ||||
|     ${'none'}    | ${'7.4'} | ${'darwin'} | ${'disable_extension xdebug false,disable_extension pcov false'} | ||||
|     ${'nocov'}   | ${'7.x'} | ${'any'}    | ${''} | ||||
|     ${''}        | ${'7.x'} | ${'any'}    | ${''} | ||||
|   `( | ||||
|     'checking addCoverage with $driver on $os', | ||||
|     async ({driver, php, os, output}) => { | ||||
|       const script: string = await coverage.addCoverage(driver, php, os); | ||||
|       if (output) { | ||||
|         output.split(',').forEach((command: string) => { | ||||
|           expect(script).toContain(command); | ||||
|         }); | ||||
|       } else { | ||||
|         expect(script).toEqual(output); | ||||
|       } | ||||
|     } | ||||
|   ); | ||||
|   it('checking addCoverage with PCOV on windows', async () => { | ||||
|     let win32: string = await coverage.addCoverage('PCOV', '7.4', 'win32'); | ||||
|     expect(win32).toContain('Add-Extension pcov'); | ||||
|     expect(win32).toContain('Remove-Extension xdebug'); | ||||
|  | ||||
|     win32 = await coverage.addCoverage('pcov', '7.0', 'win32'); | ||||
|     expect(win32).toContain('PHP 7.1 or newer is required'); | ||||
|  | ||||
|     win32 = await coverage.addCoverage('pcov', '5.6', 'win32'); | ||||
|     expect(win32).toContain('PHP 7.1 or newer is required'); | ||||
|   }); | ||||
|  | ||||
|   it('checking addCoverage with PCOV on linux', async () => { | ||||
|     const linux: string = await coverage.addCoverage('pcov', '7.4', 'linux'); | ||||
|     expect(linux).toContain('add_extension pcov'); | ||||
|     expect(linux).toContain('remove_extension xdebug'); | ||||
|   }); | ||||
|  | ||||
|   it('checking addCoverage with PCOV on darwin', async () => { | ||||
|     const darwin: string = await coverage.addCoverage('pcov', '7.4', 'darwin'); | ||||
|     expect(darwin).toContain('add_brew_extension pcov'); | ||||
|     expect(darwin).toContain('remove_extension xdebug'); | ||||
|   }); | ||||
|  | ||||
|   it('checking addCoverage with Xdebug on windows', async () => { | ||||
|     const win32: string = await coverage.addCoverage('xdebug', '7.4', 'win32'); | ||||
|     expect(win32).toContain('Add-Extension xdebug'); | ||||
|   }); | ||||
|  | ||||
|   it('checking addCoverage with Xdebug3 on windows', async () => { | ||||
|     const win32: string = await coverage.addCoverage('xdebug3', '7.4', 'win32'); | ||||
|     expect(win32).toContain('Add-Extension xdebug'); | ||||
|   }); | ||||
|  | ||||
|   it('checking addCoverage with Xdebug2 on windows', async () => { | ||||
|     const win32: string = await coverage.addCoverage('xdebug2', '7.4', 'win32'); | ||||
|     expect(win32).toContain('Add-Extension xdebug stable 2.9.8'); | ||||
|   }); | ||||
|  | ||||
|   it('checking addCoverage with Xdebug on linux', async () => { | ||||
|     const linux: string = await coverage.addCoverage('xdebug', '8.0', 'linux'); | ||||
|     expect(linux).toContain('add_extension xdebug'); | ||||
|   }); | ||||
|  | ||||
|   it('checking addCoverage with Xdebug3 on linux', async () => { | ||||
|     const linux: string = await coverage.addCoverage('xdebug3', '8.0', 'linux'); | ||||
|     expect(linux).toContain('add_extension xdebug'); | ||||
|   }); | ||||
|  | ||||
|   it('checking addCoverage with Xdebug2 on linux', async () => { | ||||
|     const linux: string = await coverage.addCoverage('xdebug2', '7.4', 'linux'); | ||||
|     expect(linux).toContain('add_pecl_extension xdebug 2.9.8 zend_extension'); | ||||
|   }); | ||||
|  | ||||
|   it('checking addCoverage with Xdebug on darwin', async () => { | ||||
|     const darwin: string = await coverage.addCoverage( | ||||
|       'xdebug', | ||||
|       '7.4', | ||||
|       'darwin' | ||||
|     ); | ||||
|     expect(darwin).toContain('add_brew_extension xdebug'); | ||||
|   }); | ||||
|  | ||||
|   it('checking addCoverage with Xdebug3 on darwin', async () => { | ||||
|     const darwin: string = await coverage.addCoverage( | ||||
|       'xdebug3', | ||||
|       '7.4', | ||||
|       'darwin' | ||||
|     ); | ||||
|     expect(darwin).toContain('add_brew_extension xdebug'); | ||||
|   }); | ||||
|  | ||||
|   it('checking addCoverage with Xdebug2 on darwin', async () => { | ||||
|     const darwin: string = await coverage.addCoverage( | ||||
|       'xdebug2', | ||||
|       '7.4', | ||||
|       'darwin' | ||||
|     ); | ||||
|     expect(darwin).toContain('add_brew_extension xdebug2'); | ||||
|   }); | ||||
|  | ||||
|   it('checking disableCoverage windows', async () => { | ||||
|     const win32 = await coverage.addCoverage('none', '7.4', 'win32'); | ||||
|     expect(win32).toContain('Remove-Extension xdebug'); | ||||
|     expect(win32).toContain('Remove-Extension pcov'); | ||||
|   }); | ||||
|  | ||||
|   it('checking disableCoverage on linux', async () => { | ||||
|     const linux: string = await coverage.addCoverage('none', '7.4', 'linux'); | ||||
|     expect(linux).toContain('remove_extension xdebug'); | ||||
|     expect(linux).toContain('remove_extension pcov'); | ||||
|   }); | ||||
|  | ||||
|   it('checking disableCoverage on darwin', async () => { | ||||
|     const darwin: string = await coverage.addCoverage('none', '7.4', 'darwin'); | ||||
|     expect(darwin).toContain('remove_extension xdebug'); | ||||
|     expect(darwin).toContain('remove_extension pcov'); | ||||
|   }); | ||||
|  | ||||
|   it('checking no or invalid coverage driver', async () => { | ||||
|     let nocov: string = await coverage.addCoverage('nocov', '7.x', 'any'); | ||||
|     expect(nocov).toEqual(''); | ||||
|  | ||||
|     nocov = await coverage.addCoverage('', '7.x', 'any'); | ||||
|     expect(nocov).toEqual(''); | ||||
|   }); | ||||
| }); | ||||
|  | ||||
| @ -1,150 +1,123 @@ | ||||
| import * as fs from 'fs'; | ||||
| import * as extensions from '../src/extensions'; | ||||
|  | ||||
| describe('Extension tests', () => { | ||||
|   it.each` | ||||
|     extension                                    | version  | output | ||||
|     ${'none'}                                    | ${'7.4'} | ${'Disable-AllShared'} | ||||
|     ${':intl'}                                   | ${'7.4'} | ${'Disable-Extension intl'} | ||||
|     ${'ast-beta'}                                | ${'7.4'} | ${'Add-Extension ast beta'} | ||||
|     ${'blackfire'}                               | ${'7.3'} | ${'Add-Blackfire blackfire'} | ||||
|     ${'blackfire-1.31.0'}                        | ${'7.3'} | ${'Add-Blackfire blackfire-1.31.0'} | ||||
|     ${'grpc-1.2.3'}                              | ${'7.4'} | ${'Add-Extension grpc stable 1.2.3'} | ||||
|     ${'inotify-1.2.3alpha2'}                     | ${'7.4'} | ${'Add-Extension inotify alpha 1.2.3'} | ||||
|     ${'ioncube'}                                 | ${'7.4'} | ${'Add-Ioncube'} | ||||
|     ${'mongodb-mongodb/mongo-php-driver@master'} | ${'7.3'} | ${'Add-Log "$cross" "mongodb-mongodb/mongo-php-driver@master" "mongodb-mongodb/mongo-php-driver@master is not supported on PHP 7.3"'} | ||||
|     ${'mysql'}                                   | ${'7.4'} | ${'Add-Extension mysqli\nAdd-Extension mysqlnd'} | ||||
|     ${'mysql'}                                   | ${'5.5'} | ${'Add-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd'} | ||||
|     ${'oci8'}                                    | ${'7.4'} | ${'Add-Oci oci8'} | ||||
|     ${'pcov'}                                    | ${'5.6'} | ${'Add-Log "$cross" "pcov" "pcov is not supported on PHP 5.6"'} | ||||
|     ${'pdo_oci'}                                 | ${'7.4'} | ${'Add-Oci pdo_oci'} | ||||
|     ${'pecl_http'}                               | ${'7.4'} | ${'Add-Http'} | ||||
|     ${'phalcon3'}                                | ${'7.2'} | ${'Add-Phalcon phalcon3'} | ||||
|     ${'phalcon4'}                                | ${'7.4'} | ${'Add-Phalcon phalcon4'} | ||||
|     ${'sqlite'}                                  | ${'7.4'} | ${'Add-Extension sqlite3'} | ||||
|     ${'sqlsrv-1.2.3preview1'}                    | ${'7.4'} | ${'Add-Extension sqlsrv devel 1.2.3'} | ||||
|     ${'Xdebug'}                                  | ${'7.4'} | ${'Add-Extension xdebug'} | ||||
|     ${'xdebug2'}                                 | ${'7.2'} | ${'Add-Extension xdebug stable 2.9.8'} | ||||
|     ${'zephir_parser'}                           | ${'7.2'} | ${'Add-ZephirParser zephir_parser'} | ||||
|   `( | ||||
|     'checking addExtensionOnWindows for extension $extension on version $version', | ||||
|     async ({extension, version, output}) => { | ||||
|       expect( | ||||
|         await extensions.addExtension(extension, version, 'win32') | ||||
|       ).toContain(output); | ||||
|     } | ||||
|   ); | ||||
|   it('checking addExtensionOnWindows', async () => { | ||||
|     let win32: string = await extensions.addExtension( | ||||
|       'Xdebug, pcov, sqlite, phalcon4, ast-beta', | ||||
|       '7.4', | ||||
|       'win32' | ||||
|     ); | ||||
|     expect(win32).toContain('Add-Extension xdebug'); | ||||
|     expect(win32).toContain('Add-Extension pcov'); | ||||
|     expect(win32).toContain('Add-Extension sqlite3'); | ||||
|     expect(win32).toContain('phalcon.ps1 phalcon4'); | ||||
|     expect(win32).toContain('Add-Extension ast beta'); | ||||
|  | ||||
|   it.each` | ||||
|     extension                                    | version  | output | ||||
|     ${'none'}                                    | ${'7.4'} | ${'disable_all_shared'} | ||||
|     ${':intl'}                                   | ${'7.4'} | ${'disable_extension intl'} | ||||
|     ${'ast-beta'}                                | ${'7.4'} | ${'add_unstable_extension ast beta extension'} | ||||
|     ${'blackfire'}                               | ${'7.3'} | ${'add_blackfire blackfire'} | ||||
|     ${'blackfire-1.31.0'}                        | ${'7.3'} | ${'add_blackfire blackfire-1.31.0'} | ||||
|     ${'couchbase'}                               | ${'7.4'} | ${'add_couchbase'} | ||||
|     ${'gearman'}                                 | ${'5.6'} | ${'add_gearman'} | ||||
|     ${'geos'}                                    | ${'7.3'} | ${'add_geos'} | ||||
|     ${'grpc-1.2.3'}                              | ${'7.4'} | ${'add_pecl_extension grpc 1.2.3 extension'} | ||||
|     ${'http-1.2.3'}                              | ${'7.3'} | ${'add_http http-1.2.3'} | ||||
|     ${'intl-65.1'}                               | ${'5.6'} | ${'add_intl intl-65.1'} | ||||
|     ${'ioncube'}                                 | ${'7.3'} | ${'add_ioncube'} | ||||
|     ${'memcache-8.2'}                            | ${'8.2'} | ${'add_pecl_extension memcache 8.2 extension'} | ||||
|     ${'mongodb-mongodb/mongo-php-driver@master'} | ${'7.3'} | ${'add_extension_from_source mongodb https://github.com mongodb mongo-php-driver master extension'} | ||||
|     ${'oci8'}                                    | ${'7.3'} | ${'add_oci oci8'} | ||||
|     ${'pcov'}                                    | ${'5.6'} | ${'add_log "$cross" "pcov" "pcov is not supported on PHP 5.6'} | ||||
|     ${'pdo-odbc'}                                | ${'7.4'} | ${'add_pdo_extension odbc'} | ||||
|     ${'pdo_cubrid'}                              | ${'7.0'} | ${'add_cubrid pdo_cubrid'} | ||||
|     ${'pdo_cubrid'}                              | ${'7.4'} | ${'add_pdo_extension cubrid'} | ||||
|     ${'pdo_mysql'}                               | ${'7.4'} | ${'add_pdo_extension mysql'} | ||||
|     ${'pdo_oci'}                                 | ${'7.3'} | ${'add_oci pdo_oci'} | ||||
|     ${'pdo_sqlsrv'}                              | ${'7.4'} | ${'add_sqlsrv pdo_sqlsrv'} | ||||
|     ${'pecl_http'}                               | ${'7.3'} | ${'add_http'} | ||||
|     ${'phalcon3'}                                | ${'7.3'} | ${'add_phalcon phalcon3'} | ||||
|     ${'relay'}                                   | ${'7.4'} | ${'add_relay relay'} | ||||
|     ${'relay-v1.2.3'}                            | ${'7.4'} | ${'add_relay relay-v1.2.3'} | ||||
|     ${'sqlite'}                                  | ${'7.4'} | ${'add_extension sqlite3'} | ||||
|     ${'sqlsrv-1.2.3-beta1'}                      | ${'7.4'} | ${'add_pecl_extension sqlsrv 1.2.3beta1 extension'} | ||||
|     ${'Xdebug'}                                  | ${'7.4'} | ${'add_extension xdebug'} | ||||
|     ${'xdebug-alpha'}                            | ${'7.4'} | ${'add_unstable_extension xdebug alpha zend_extension'} | ||||
|     ${'xdebug2'}                                 | ${'7.2'} | ${'add_pecl_extension xdebug 2.9.8 zend_extension'} | ||||
|     ${'zephir_parser-1.2.3'}                     | ${'7.2'} | ${'add_zephir_parser zephir_parser-1.2.3'} | ||||
|   `( | ||||
|     'checking addExtensionOnLinux for extension $extension on version $version', | ||||
|     async ({extension, version, output}) => { | ||||
|       expect( | ||||
|         await extensions.addExtension(extension, version, 'linux') | ||||
|       ).toContain(output); | ||||
|     } | ||||
|   ); | ||||
|     win32 = await extensions.addExtension('xdebug2', '7.2', 'win32'); | ||||
|     expect(win32).toContain('Add-Extension xdebug stable 2.9.8'); | ||||
|  | ||||
|   it.each` | ||||
|     extension                                    | version  | output | ||||
|     ${'none'}                                    | ${'7.2'} | ${'disable_all_shared'} | ||||
|     ${':intl'}                                   | ${'7.2'} | ${'disable_extension intl'} | ||||
|     ${'ast-beta'}                                | ${'7.2'} | ${'add_unstable_extension ast beta extension'} | ||||
|     ${'blackfire'}                               | ${'7.3'} | ${'add_blackfire blackfire'} | ||||
|     ${'blackfire-1.31.0'}                        | ${'7.3'} | ${'add_blackfire blackfire-1.31.0'} | ||||
|     ${'couchbase'}                               | ${'5.6'} | ${'add_couchbase'} | ||||
|     ${'does_not_exist'}                          | ${'7.2'} | ${'add_extension does_not_exist'} | ||||
|     ${'geos'}                                    | ${'7.3'} | ${'add_geos'} | ||||
|     ${'grpc-1.2.3'}                              | ${'7.2'} | ${'add_pecl_extension grpc 1.2.3 extension'} | ||||
|     ${'http-1.2.3'}                              | ${'7.3'} | ${'add_http http-1.2.3'} | ||||
|     ${'imagick'}                                 | ${'5.5'} | ${'add_extension imagick'} | ||||
|     ${'ioncube'}                                 | ${'7.3'} | ${'add_ioncube'} | ||||
|     ${'mongodb-mongodb/mongo-php-driver@master'} | ${'7.2'} | ${'add_extension_from_source mongodb https://github.com mongodb mongo-php-driver master extension'} | ||||
|     ${'oci8'}                                    | ${'7.3'} | ${'add_oci oci8'} | ||||
|     ${'pcov'}                                    | ${'5.6'} | ${'add_log "$cross" "pcov" "pcov is not supported on PHP 5.6"'} | ||||
|     ${'pdo_oci'}                                 | ${'7.3'} | ${'add_oci pdo_oci'} | ||||
|     ${'pecl_http'}                               | ${'7.3'} | ${'add_http'} | ||||
|     ${'relay-1.2.3'}                             | ${'7.4'} | ${'add_relay relay-1.2.3'} | ||||
|     ${'sqlite'}                                  | ${'7.2'} | ${'add_extension sqlite3'} | ||||
|     ${'zephir_parser-v1.2.3'}                    | ${'7.2'} | ${'add_zephir_parser zephir_parser-v1.2.3'} | ||||
|   `( | ||||
|     'checking addExtensionOnDarwin for extension $extension on version $version', | ||||
|     async ({extension, version, output}) => { | ||||
|       expect( | ||||
|         await extensions.addExtension(extension, version, 'darwin') | ||||
|       ).toContain(output); | ||||
|     } | ||||
|   ); | ||||
|     win32 = await extensions.addExtension('mysql', '7.4', 'win32'); | ||||
|     expect(win32).toContain('Add-Extension mysqli'); | ||||
|     expect(win32).toContain('Add-Extension mysqlnd'); | ||||
|  | ||||
|   const data: string[][] = fs | ||||
|     .readFileSync('src/configs/brew_extensions') | ||||
|     .toString() | ||||
|     .split(/\r?\n/) | ||||
|     .filter(Boolean) | ||||
|     .map(line => { | ||||
|       const [formula, extension]: string[] = line.split('='); | ||||
|       const prefix: string = | ||||
|         extension == 'xdebug' ? 'zend_extension' : 'extension'; | ||||
|       const ext_name = extension.replace(/\d+|(pdo|pecl)[_-]/, ''); | ||||
|       const output: string = fs.existsSync( | ||||
|         `src/scripts/extensions/${ext_name}.sh` | ||||
|       ) | ||||
|         ? `add_${ext_name}` | ||||
|         : `add_brew_extension ${formula} ${prefix}`; | ||||
|       return [formula, formula === 'phalcon3' ? '7.3' : '7.4', output]; | ||||
|     }); | ||||
|     win32 = await extensions.addExtension('mysql', '8.0', 'win32'); | ||||
|     expect(win32).toContain('Add-Extension mysqli'); | ||||
|     expect(win32).toContain('Add-Extension mysqlnd'); | ||||
|  | ||||
|   it.each(data)( | ||||
|     'checking addExtensionOnDarwin for brew extension %s', | ||||
|     async (extension, version, output) => { | ||||
|       expect( | ||||
|         await extensions.addExtension(extension, version, 'darwin') | ||||
|       ).toContain(output); | ||||
|     } | ||||
|   ); | ||||
|     win32 = await extensions.addExtension('mysql', '5.6', 'win32'); | ||||
|     expect(win32).toContain('Add-Extension mysql'); | ||||
|     expect(win32).toContain('Add-Extension mysqli'); | ||||
|     expect(win32).toContain('Add-Extension mysqlnd'); | ||||
|  | ||||
|   it.each` | ||||
|     extension   | version  | output | ||||
|     ${'xdebug'} | ${'7.2'} | ${'Platform openbsd is not supported'} | ||||
|   `( | ||||
|     'checking addExtension on openbsd for extension $extension on version $version', | ||||
|     async ({extension, version, output}) => { | ||||
|       expect( | ||||
|         await extensions.addExtension(extension, version, 'openbsd') | ||||
|       ).toContain(output); | ||||
|     } | ||||
|   ); | ||||
|     win32 = await extensions.addExtension( | ||||
|       'phalcon3, does_not_exist', | ||||
|       '7.2', | ||||
|       'win32', | ||||
|       true | ||||
|     ); | ||||
|     expect(win32).toContain('phalcon.ps1 phalcon3'); | ||||
|     expect(win32).toContain('Add-Extension does_not_exist'); | ||||
|  | ||||
|     win32 = await extensions.addExtension('xdebug', '7.2', 'openbsd'); | ||||
|     expect(win32).toContain('Platform openbsd is not supported'); | ||||
|   }); | ||||
|  | ||||
|   it('checking addExtensionOnLinux', async () => { | ||||
|     let linux: string = await extensions.addExtension( | ||||
|       'Xdebug, pcov, sqlite, ast-beta, xdebug-alpha', | ||||
|       '7.4', | ||||
|       'linux' | ||||
|     ); | ||||
|     expect(linux).toContain('sudo $debconf_fix apt-get install -y php7.4-pcov'); | ||||
|     expect(linux).toContain( | ||||
|       'sudo $debconf_fix apt-get install -y php7.4-sqlite3' | ||||
|     ); | ||||
|     expect(linux).toContain('add_unstable_extension ast beta extension'); | ||||
|     expect(linux).toContain( | ||||
|       'add_unstable_extension xdebug alpha zend_extension' | ||||
|     ); | ||||
|  | ||||
|     linux = await extensions.addExtension('gearman', '7.0', 'linux'); | ||||
|     expect(linux).toContain('gearman.sh'); | ||||
|  | ||||
|     linux = await extensions.addExtension('xdebug2', '7.2', 'linux'); | ||||
|     expect(linux).toContain('add_pecl_extension xdebug 2.9.8 zend_extension'); | ||||
|  | ||||
|     linux = await extensions.addExtension('xdebug', '7.2', 'openbsd'); | ||||
|     expect(linux).toContain('Platform openbsd is not supported'); | ||||
|  | ||||
|     linux = await extensions.addExtension('phalcon3, phalcon4', '7.3', 'linux'); | ||||
|     expect(linux).toContain('phalcon.sh phalcon3 7.3'); | ||||
|     expect(linux).toContain('phalcon.sh phalcon4 7.3'); | ||||
|   }); | ||||
|  | ||||
|   it('checking addExtensionOnDarwin', async () => { | ||||
|     let darwin: string = await extensions.addExtension( | ||||
|       'Xdebug, pcov, expect, grpc, igbinary, imagick, phalcon3, phalcon4, protobuf, psr, rdkafka, ssh2, swoole, vips, sqlite, ast-beta', | ||||
|       '7.2', | ||||
|       'darwin' | ||||
|     ); | ||||
|     expect(darwin).toContain('add_brew_extension xdebug'); | ||||
|     expect(darwin).toContain('add_brew_extension pcov'); | ||||
|     expect(darwin).toContain('add_brew_extension expect'); | ||||
|     expect(darwin).toContain('add_brew_extension grpc'); | ||||
|     expect(darwin).toContain('add_brew_extension igbinary'); | ||||
|     expect(darwin).toContain('add_brew_extension imagick'); | ||||
|     expect(darwin).toContain('add_brew_extension phalcon3'); | ||||
|     expect(darwin).toContain('add_brew_extension phalcon4'); | ||||
|     expect(darwin).toContain('add_brew_extension protobuf'); | ||||
|     expect(darwin).toContain('add_brew_extension psr'); | ||||
|     expect(darwin).toContain('add_brew_extension rdkafka'); | ||||
|     expect(darwin).toContain('add_brew_extension ssh2'); | ||||
|     expect(darwin).toContain('add_brew_extension swoole'); | ||||
|     expect(darwin).toContain('add_brew_extension vips'); | ||||
|     expect(darwin).toContain('pecl_install sqlite3'); | ||||
|     expect(darwin).toContain('add_unstable_extension ast beta extension'); | ||||
|  | ||||
|     darwin = await extensions.addExtension('pcov', '5.6', 'darwin'); | ||||
|     expect(darwin).toContain('pecl_install pcov'); | ||||
|  | ||||
|     darwin = await extensions.addExtension('pcov', '7.2', 'darwin'); | ||||
|     expect(darwin).toContain('add_brew_extension pcov'); | ||||
|  | ||||
|     darwin = await extensions.addExtension('xdebug', '5.6', 'darwin'); | ||||
|     expect(darwin).toContain('add_brew_extension xdebug'); | ||||
|  | ||||
|     darwin = await extensions.addExtension('xdebug', '7.0', 'darwin'); | ||||
|     expect(darwin).toContain('add_brew_extension xdebug'); | ||||
|  | ||||
|     darwin = await extensions.addExtension('xdebug2', '7.2', 'darwin'); | ||||
|     expect(darwin).toContain('add_brew_extension xdebug2'); | ||||
|  | ||||
|     darwin = await extensions.addExtension( | ||||
|       'does_not_exist', | ||||
|       '7.2', | ||||
|       'darwin', | ||||
|       false | ||||
|     ); | ||||
|     expect(darwin).toContain('add_extension does_not_exist'); | ||||
|  | ||||
|     darwin = await extensions.addExtension('xdebug', '7.2', 'openbsd'); | ||||
|     expect(darwin).toContain('Platform openbsd is not supported'); | ||||
|   }); | ||||
| }); | ||||
|  | ||||
| @ -1,39 +0,0 @@ | ||||
| import * as fetch from '../src/fetch'; | ||||
| import nock = require('nock'); | ||||
|  | ||||
| it('checking fetch', async () => { | ||||
|   const host_url = 'https://example.com'; | ||||
|   const manifest_url = host_url + '/manifest'; | ||||
|   const ping_url = host_url + '/ping'; | ||||
|  | ||||
|   nock(host_url) | ||||
|     .get('/manifest') | ||||
|     .reply(200, {latest: 'latest'}) | ||||
|     .get('/manifest', '', { | ||||
|       reqheaders: {authorization: 'Bearer invalid_token'} | ||||
|     }) | ||||
|     .reply(401, {error: '401: Unauthorized'}) | ||||
|     .get('/ping') | ||||
|     .twice() | ||||
|     .reply(301, undefined, { | ||||
|       Location: host_url + '/pong' | ||||
|     }) | ||||
|     .get('/pong') | ||||
|     .reply(200, 'pong'); | ||||
|  | ||||
|   let response: Record<string, string> = await fetch.fetch(manifest_url); | ||||
|   expect(response.error).toBe(undefined); | ||||
|   expect(response.data).toContain('latest'); | ||||
|  | ||||
|   response = await fetch.fetch(ping_url, '', 1); | ||||
|   expect(response.error).toBe(undefined); | ||||
|   expect(response.data).toContain('pong'); | ||||
|  | ||||
|   response = await fetch.fetch(ping_url, '', 0); | ||||
|   expect(response.error).toBe('301: Redirect error'); | ||||
|   expect(response.data).toBe(undefined); | ||||
|  | ||||
|   response = await fetch.fetch(manifest_url, 'invalid_token'); | ||||
|   expect(response.error).not.toBe(undefined); | ||||
|   expect(response.data).toBe(undefined); | ||||
| }); | ||||
| @ -1,82 +1,181 @@ | ||||
| import * as install from '../src/install'; | ||||
| import * as utils from '../src/utils'; | ||||
|  | ||||
| /** | ||||
|  * Mock install.ts | ||||
|  */ | ||||
| jest.mock('../src/install', () => ({ | ||||
|   getScript: jest | ||||
|   build: jest | ||||
|     .fn() | ||||
|     .mockImplementation(async (os: string): Promise<string> => { | ||||
|       const filename = os + (await utils.scriptExtension(os)); | ||||
|       const version: string = await utils.parseVersion( | ||||
|         await utils.readPHPVersion() | ||||
|       ); | ||||
|       const ini_file: string = await utils.parseIniFile( | ||||
|         await utils.getInput('ini-file', false) | ||||
|       ); | ||||
|       const extension_csv: string = process.env['extensions'] || ''; | ||||
|       const ini_values_csv: string = process.env['ini-values'] || ''; | ||||
|       const coverage_driver: string = process.env['coverage'] || ''; | ||||
|       const tools_csv: string = process.env['tools'] || ''; | ||||
|       let script = await utils.joins(filename, version, ini_file); | ||||
|       script += extension_csv ? ' install extensions' : ''; | ||||
|       script += tools_csv ? ' add_tool' : ''; | ||||
|       script += coverage_driver ? ' set coverage driver' : ''; | ||||
|       script += ini_values_csv ? ' edit php.ini' : ''; | ||||
|       return script; | ||||
|     }), | ||||
|     .mockImplementation( | ||||
|       async ( | ||||
|         filename: string, | ||||
|         version: string, | ||||
|         os_version: string | ||||
|       ): Promise<string> => { | ||||
|         const extension_csv: string = process.env['extensions'] || ''; | ||||
|         const ini_values_csv: string = process.env['ini-values'] || ''; | ||||
|         const coverage_driver: string = process.env['coverage'] || ''; | ||||
|         let tools_csv: string = process.env['tools'] || ''; | ||||
|         const pecl: string = process.env['pecl'] || ''; | ||||
|         if (pecl == 'true') { | ||||
|           tools_csv = 'pecl, ' + tools_csv; | ||||
|         } | ||||
|  | ||||
|         let script = 'initial script ' + filename + version + os_version; | ||||
|         if (tools_csv) { | ||||
|           script += 'add_tool'; | ||||
|         } | ||||
|         if (extension_csv) { | ||||
|           script += 'install extensions'; | ||||
|         } | ||||
|         if (coverage_driver) { | ||||
|           script += 'set coverage driver'; | ||||
|         } | ||||
|         if (ini_values_csv) { | ||||
|           script += 'edit php.ini'; | ||||
|         } | ||||
|  | ||||
|         return script; | ||||
|       } | ||||
|     ), | ||||
|   run: jest.fn().mockImplementation(async (): Promise<string> => { | ||||
|     const os: string = process.env['RUNNER_OS'] || ''; | ||||
|     const tool = await utils.scriptTool(os); | ||||
|     return tool + (await install.getScript(os)); | ||||
|     const os_version: string = process.env['RUNNER_OS'] || ''; | ||||
|     let version: string = process.env['php-version'] || ''; | ||||
|     version = version.length > 1 ? version.slice(0, 3) : version + '.0'; | ||||
|     let script = ''; | ||||
|     switch (os_version) { | ||||
|       case 'darwin': | ||||
|       case 'linux': | ||||
|         script = await install.build(os_version + '.sh', version, os_version); | ||||
|         script += 'bash script.sh ' + version + ' ' + __dirname; | ||||
|         break; | ||||
|       case 'win32': | ||||
|         script = await install.build(os_version + '.sh', version, os_version); | ||||
|         script += 'pwsh script.ps1 ' + version + ' ' + __dirname; | ||||
|         break; | ||||
|       default: | ||||
|         script += os_version + ' is not supported'; | ||||
|     } | ||||
|  | ||||
|     return script; | ||||
|   }) | ||||
| })); | ||||
|  | ||||
| /** | ||||
|  * Mock fetch.ts | ||||
|  * Function to set the process.env | ||||
|  * | ||||
|  * @param version | ||||
|  * @param os | ||||
|  * @param extension_csv | ||||
|  * @param ini_values_csv | ||||
|  * @param coverage_driver | ||||
|  * @param tools | ||||
|  * @param pecl | ||||
|  */ | ||||
| jest.mock('../src/fetch', () => ({ | ||||
|   fetch: jest.fn().mockImplementation(() => { | ||||
|     return {data: '{ "latest": "8.1", "5.x": "5.6" }'}; | ||||
|   }) | ||||
| })); | ||||
| function setEnv( | ||||
|   version: string | number, | ||||
|   os: string, | ||||
|   extension_csv: string, | ||||
|   ini_values_csv: string, | ||||
|   coverage_driver: string, | ||||
|   tools: string, | ||||
|   pecl: string | ||||
| ): void { | ||||
|   process.env['php-version'] = version.toString(); | ||||
|   process.env['RUNNER_OS'] = os; | ||||
|   process.env['extensions'] = extension_csv; | ||||
|   process.env['ini-values'] = ini_values_csv; | ||||
|   process.env['coverage'] = coverage_driver; | ||||
|   process.env['tools'] = tools; | ||||
|   process.env['pecl'] = pecl; | ||||
| } | ||||
|  | ||||
| describe('Install', () => { | ||||
|   it.each` | ||||
|     version     | os          | extension_csv | ini_file         | ini_values_csv | coverage_driver | tools        | output | ||||
|     ${'7.3'}    | ${'darwin'} | ${''}         | ${'production'}  | ${''}          | ${''}           | ${''}        | ${'bash darwin.sh 7.3 production'} | ||||
|     ${'7.3'}    | ${'darwin'} | ${'a, b'}     | ${'development'} | ${'a=b'}       | ${'x'}          | ${''}        | ${'bash darwin.sh 7.3 development install extensions set coverage driver edit php.ini'} | ||||
|     ${'7.4.1'}  | ${'darwin'} | ${''}         | ${'none'}        | ${''}          | ${''}           | ${''}        | ${'bash darwin.sh 7.4 none'} | ||||
|     ${'8'}      | ${'darwin'} | ${''}         | ${''}            | ${''}          | ${''}           | ${''}        | ${'bash darwin.sh 8.0 production'} | ||||
|     ${'8.0'}    | ${'darwin'} | ${''}         | ${'development'} | ${''}          | ${''}           | ${''}        | ${'bash darwin.sh 8.0 development'} | ||||
|     ${'8.1'}    | ${'darwin'} | ${''}         | ${'none'}        | ${''}          | ${''}           | ${''}        | ${'bash darwin.sh 8.1 none'} | ||||
|     ${'7.3'}    | ${'linux'}  | ${''}         | ${'invalid'}     | ${''}          | ${''}           | ${''}        | ${'bash linux.sh 7.3 production'} | ||||
|     ${'7.3'}    | ${'linux'}  | ${'a, b'}     | ${'development'} | ${'a=b'}       | ${'x'}          | ${'phpunit'} | ${'bash linux.sh 7.3 development install extensions add_tool set coverage driver edit php.ini'} | ||||
|     ${'latest'} | ${'linux'}  | ${''}         | ${'none'}        | ${''}          | ${''}           | ${''}        | ${'bash linux.sh 8.1 none'} | ||||
|     ${'7.0'}    | ${'win32'}  | ${''}         | ${'production'}  | ${''}          | ${''}           | ${''}        | ${'pwsh win32.ps1 7.0 production'} | ||||
|     ${'7.3'}    | ${'win32'}  | ${''}         | ${'development'} | ${''}          | ${''}           | ${''}        | ${'pwsh win32.ps1 7.3 development'} | ||||
|     ${'7.3'}    | ${'win32'}  | ${'a, b'}     | ${'none'}        | ${'a=b'}       | ${'x'}          | ${''}        | ${'pwsh win32.ps1 7.3 none install extensions set coverage driver edit php.ini'} | ||||
|   `( | ||||
|     'Test install on $os for $version with extensions=$extension_csv, ini_values=$ini_values_csv, coverage_driver=$coverage_driver, tools=$tools', | ||||
|     async ({ | ||||
|       version, | ||||
|       os, | ||||
|       extension_csv, | ||||
|       ini_file, | ||||
|       ini_values_csv, | ||||
|       coverage_driver, | ||||
|       tools, | ||||
|       output | ||||
|     }) => { | ||||
|       process.env['php-version'] = version.toString(); | ||||
|       process.env['RUNNER_OS'] = os; | ||||
|       process.env['extensions'] = extension_csv; | ||||
|       process.env['ini-file'] = ini_file; | ||||
|       process.env['ini-values'] = ini_values_csv; | ||||
|       process.env['coverage'] = coverage_driver; | ||||
|       process.env['tools'] = tools; | ||||
|       expect(await install.run()).toBe(output); | ||||
|     } | ||||
|   ); | ||||
|   it('Test install on windows', async () => { | ||||
|     setEnv('7.0', 'win32', '', '', '', '', ''); | ||||
|  | ||||
|     let script: string = '' + (await install.run()); | ||||
|     expect(script).toContain('initial script'); | ||||
|     expect(script).toContain('pwsh script.ps1 7.0 ' + __dirname); | ||||
|  | ||||
|     setEnv('7.3', 'win32', '', '', '', '', ''); | ||||
|  | ||||
|     script = '' + (await install.run()); | ||||
|     expect(script).toContain('initial script'); | ||||
|     expect(script).toContain('pwsh script.ps1 7.3 ' + __dirname); | ||||
|  | ||||
|     setEnv('7.3', 'win32', 'a, b', 'a=b', 'x', '', ''); | ||||
|  | ||||
|     script = '' + (await install.run()); | ||||
|     expect(script).toContain('initial script'); | ||||
|     expect(script).toContain('install extensions'); | ||||
|     expect(script).toContain('edit php.ini'); | ||||
|     expect(script).toContain('set coverage driver'); | ||||
|     expect(script).toContain('pwsh script.ps1 7.3 ' + __dirname); | ||||
|   }); | ||||
|  | ||||
|   it('Test install on linux', async () => { | ||||
|     setEnv('7.3', 'linux', '', '', '', '', ''); | ||||
|  | ||||
|     let script: string = '' + (await install.run()); | ||||
|     expect(script).toContain('initial script'); | ||||
|     expect(script).toContain('bash script.sh 7.3 '); | ||||
|  | ||||
|     setEnv('7.4', 'linux', 'a, b', 'a=b', 'x', 'phpunit', 'true'); | ||||
|  | ||||
|     script = '' + (await install.run()); | ||||
|     expect(script).toContain('initial script'); | ||||
|     expect(script).toContain('install extensions'); | ||||
|     expect(script).toContain('edit php.ini'); | ||||
|     expect(script).toContain('set coverage driver'); | ||||
|     expect(script).toContain('bash script.sh 7.4'); | ||||
|     expect(script).toContain('add_tool'); | ||||
|  | ||||
|     setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'phpunit', ''); | ||||
|  | ||||
|     script = '' + (await install.run()); | ||||
|     expect(script).toContain('initial script'); | ||||
|     expect(script).toContain('install extensions'); | ||||
|     expect(script).toContain('edit php.ini'); | ||||
|     expect(script).toContain('set coverage driver'); | ||||
|     expect(script).toContain('bash script.sh 7.3'); | ||||
|     expect(script).toContain('add_tool'); | ||||
|   }); | ||||
|  | ||||
|   it('Test install on darwin', async () => { | ||||
|     setEnv('7.3', 'darwin', '', '', '', '', ''); | ||||
|  | ||||
|     let script: string = '' + (await install.run()); | ||||
|     expect(script).toContain('initial script'); | ||||
|     expect(script).toContain('bash script.sh 7.3 ' + __dirname); | ||||
|  | ||||
|     setEnv('7.3', 'darwin', 'a, b', 'a=b', 'x', '', ''); | ||||
|  | ||||
|     script = '' + (await install.run()); | ||||
|     expect(script).toContain('initial script'); | ||||
|     expect(script).toContain('install extensions'); | ||||
|     expect(script).toContain('edit php.ini'); | ||||
|     expect(script).toContain('set coverage driver'); | ||||
|     expect(script).toContain('bash script.sh 7.3 ' + __dirname); | ||||
|   }); | ||||
|  | ||||
|   it('Test malformed version inputs', async () => { | ||||
|     setEnv('7.4.1', 'darwin', '', '', '', '', ''); | ||||
|  | ||||
|     let script: string = '' + (await install.run()); | ||||
|     expect(script).toContain('initial script'); | ||||
|     expect(script).toContain('bash script.sh 7.4 ' + __dirname); | ||||
|  | ||||
|     setEnv(8.0, 'darwin', '', '', '', '', ''); | ||||
|  | ||||
|     script = '' + (await install.run()); | ||||
|     expect(script).toContain('initial script'); | ||||
|     expect(script).toContain('bash script.sh 8.0 ' + __dirname); | ||||
|  | ||||
|     setEnv(8, 'darwin', '', '', '', '', ''); | ||||
|  | ||||
|     script = '' + (await install.run()); | ||||
|     expect(script).toContain('initial script'); | ||||
|     expect(script).toContain('bash script.sh 8.0 ' + __dirname); | ||||
|   }); | ||||
| }); | ||||
|  | ||||
| @ -1,50 +0,0 @@ | ||||
| import * as packagist from '../src/packagist'; | ||||
| import nock = require('nock'); | ||||
|  | ||||
| describe('search function', () => { | ||||
|   const mockResponse = { | ||||
|     packages: { | ||||
|       'test-package': [ | ||||
|         { | ||||
|           require: { | ||||
|             php: '8.0.0' | ||||
|           }, | ||||
|           version: '1.0.0' | ||||
|         }, | ||||
|         { | ||||
|           version: '2.0.0' | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }; | ||||
|  | ||||
|   test('should return the version if matching php version is found', async () => { | ||||
|     nock('https://repo.packagist.org') | ||||
|       .get('/p2/test-package.json') | ||||
|       .reply(200, mockResponse); | ||||
|     const result = await packagist.search('test-package', '8.0'); | ||||
|     expect(result).toBe('1.0.0'); | ||||
|   }); | ||||
|  | ||||
|   test('should return null if no matching php version is found', async () => { | ||||
|     nock('https://repo.packagist.org') | ||||
|       .get('/p2/test-package.json') | ||||
|       .reply(200, mockResponse); | ||||
|     const result = await packagist.search('test-package', '5.6'); | ||||
|     expect(result).toBeNull(); | ||||
|   }); | ||||
|  | ||||
|   test('should return null if fetch fails', async () => { | ||||
|     nock('https://repo.packagist.org').get('/p2/test-package.json').reply(404); | ||||
|     const result = await packagist.search('test-package', '8.0'); | ||||
|     expect(result).toBeNull(); | ||||
|   }); | ||||
|  | ||||
|   test('should return null if the response is empty', async () => { | ||||
|     nock('https://repo.packagist.org') | ||||
|       .get('/p2/test-package.json') | ||||
|       .reply(200, {error: true, data: '[]'}); | ||||
|     const result = await packagist.search('test-package', '8.0'); | ||||
|     expect(result).toBeNull(); | ||||
|   }); | ||||
| }); | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,26 +1,25 @@ | ||||
| import fs = require('fs'); | ||||
| import * as fs from 'fs'; | ||||
| import * as path from 'path'; | ||||
| import * as utils from '../src/utils'; | ||||
|  | ||||
| /** | ||||
|  * Mock @actions/core | ||||
|  */ | ||||
| jest.mock('@actions/core', () => ({ | ||||
|   getInput: jest.fn().mockImplementation(key => { | ||||
|     return ['setup-php'].indexOf(key) !== -1 ? key : ''; | ||||
|   }), | ||||
|   info: jest.fn() | ||||
| })); | ||||
|  | ||||
| /** | ||||
|  * Mock fetch.ts | ||||
|  */ | ||||
| jest.mock('../src/fetch', () => ({ | ||||
|   fetch: jest.fn().mockImplementation(() => { | ||||
|     return {data: '{ "latest": "8.1", "5.x": "5.6" }'}; | ||||
|   }) | ||||
| })); | ||||
|  | ||||
| jest.spyOn(utils, 'fetch').mockImplementation(async (url): Promise<string> => { | ||||
|   return `{ "latest": "8.0", "5.x": "5.6", "url": "${url}" }`; | ||||
| }); | ||||
|  | ||||
| async function cleanup(path: string): Promise<void> { | ||||
|   fs.unlink(path, error => { | ||||
|     if (error) { | ||||
|       console.log(error); | ||||
|     } | ||||
|   }); | ||||
| } | ||||
|  | ||||
| describe('Utils tests', () => { | ||||
|   it('checking readEnv', async () => { | ||||
|     process.env['test'] = 'setup-php'; | ||||
| @ -33,36 +32,28 @@ describe('Utils tests', () => { | ||||
|   }); | ||||
|  | ||||
|   it('checking getInput', async () => { | ||||
|     process.env['test'] = 'setup-php'; | ||||
|     expect(await utils.getInput('test', false)).toBe('setup-php'); | ||||
|     expect(await utils.getInput('setup-php', false)).toBe('setup-php'); | ||||
|     expect(await utils.getInput('DoesNotExist', false)).toBe(''); | ||||
|     await expect(async () => { | ||||
|     expect(async () => { | ||||
|       await utils.getInput('DoesNotExist', true); | ||||
|     }).rejects.toThrow('Input required and not supplied: DoesNotExist'); | ||||
|   }); | ||||
|  | ||||
|   it('checking getManifestURL', async () => { | ||||
|     expect(await utils.getManifestURL()).toContain('php-versions.json'); | ||||
|   it('checking fetch', async () => { | ||||
|     expect(await utils.fetch('test_url')).toBe( | ||||
|       '{ "latest": "8.0", "5.x": "5.6", "url": "test_url" }' | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   it('checking parseVersion', async () => { | ||||
|     expect(await utils.parseVersion('latest')).toBe('8.1'); | ||||
|     expect(await utils.parseVersion('latest')).toBe('8.0'); | ||||
|     expect(await utils.parseVersion('7')).toBe('7.0'); | ||||
|     expect(await utils.parseVersion('7.4')).toBe('7.4'); | ||||
|     expect(await utils.parseVersion('5.x')).toBe('5.6'); | ||||
|     expect(await utils.parseVersion('4.x')).toBe(undefined); | ||||
|   }); | ||||
|  | ||||
|   it('checking parseIniFile', async () => { | ||||
|     expect(await utils.parseIniFile('production')).toBe('production'); | ||||
|     expect(await utils.parseIniFile('development')).toBe('development'); | ||||
|     expect(await utils.parseIniFile('none')).toBe('none'); | ||||
|     expect(await utils.parseIniFile('php.ini-production')).toBe('production'); | ||||
|     expect(await utils.parseIniFile('php.ini-development')).toBe('development'); | ||||
|     expect(await utils.parseIniFile('invalid')).toBe('production'); | ||||
|   }); | ||||
|  | ||||
|   it('checking asyncForEach', async () => { | ||||
|     const array: Array<string> = ['a', 'b', 'c']; | ||||
|     let concat = ''; | ||||
| @ -82,10 +73,45 @@ describe('Utils tests', () => { | ||||
|     expect(await utils.color('warning')).toBe('33'); | ||||
|   }); | ||||
|  | ||||
|   it('checking readScripts', async () => { | ||||
|     const darwin: string = fs.readFileSync( | ||||
|       path.join(__dirname, '../src/scripts/darwin.sh'), | ||||
|       'utf8' | ||||
|     ); | ||||
|     const linux: string = fs.readFileSync( | ||||
|       path.join(__dirname, '../src/scripts/linux.sh'), | ||||
|       'utf8' | ||||
|     ); | ||||
|     const win32: string = fs.readFileSync( | ||||
|       path.join(__dirname, '../src/scripts/win32.ps1'), | ||||
|       'utf8' | ||||
|     ); | ||||
|     expect(await utils.readScript('darwin.sh')).toBe(darwin); | ||||
|     expect(await utils.readScript('darwin.sh')).toBe(darwin); | ||||
|     expect(await utils.readScript('linux.sh')).toBe(linux); | ||||
|     expect(await utils.readScript('linux.sh')).toBe(linux); | ||||
|     expect(await utils.readScript('win32.ps1')).toBe(win32); | ||||
|     expect(await utils.readScript('win32.ps1')).toBe(win32); | ||||
|   }); | ||||
|  | ||||
|   it('checking writeScripts', async () => { | ||||
|     const testString = 'sudo apt-get install php'; | ||||
|     const runner_dir: string = process.env['RUNNER_TOOL_CACHE'] || ''; | ||||
|     const script_path: string = path.join(runner_dir, 'test.sh'); | ||||
|     await utils.writeScript('test.sh', testString); | ||||
|     fs.readFile(script_path, function (error: Error | null, data: Buffer) { | ||||
|       expect(testString).toBe(data.toString()); | ||||
|     }); | ||||
|     await cleanup(script_path); | ||||
|   }); | ||||
|  | ||||
|   it('checking extensionArray', async () => { | ||||
|     expect( | ||||
|       await utils.extensionArray('a, :b, php_c, none, php-d, Zend e, :Zend f') | ||||
|     ).toEqual(['none', 'a', ':b', 'c', 'd', 'e', ':f']); | ||||
|     expect(await utils.extensionArray('a, b, php_c, php-d')).toEqual([ | ||||
|       'a', | ||||
|       'b', | ||||
|       'c', | ||||
|       'd' | ||||
|     ]); | ||||
|  | ||||
|     expect(await utils.extensionArray('')).toEqual([]); | ||||
|     expect(await utils.extensionArray(' ')).toEqual([]); | ||||
| @ -108,12 +134,17 @@ describe('Utils tests', () => { | ||||
|       'b=3, 4', | ||||
|       'c=5' | ||||
|     ]); | ||||
|     expect( | ||||
|       await utils.CSVArray('a=E_ALL, b=E_ALL & ~ E_ALL, c="E_ALL", d=\'E_ALL\'') | ||||
|     ).toEqual(['a=E_ALL', 'b=E_ALL & ~ E_ALL', 'c=E_ALL', 'd=E_ALL']); | ||||
|     expect( | ||||
|       await utils.CSVArray('a="b=c;d=e", b=\'c=d,e\', c="g=h,i=j", d=g=h, a===') | ||||
|     ).toEqual(["a='b=c;d=e'", "b='c=d,e'", "c='g=h,i=j'", "d='g=h'", "a='=='"]); | ||||
|     expect(await utils.CSVArray('\'a=1,2\', "b=3, 4", c=5, d=~e~')).toEqual([ | ||||
|       'a=1,2', | ||||
|       'b=3, 4', | ||||
|       'c=5', | ||||
|       "d='~e~'" | ||||
|     ]); | ||||
|     expect(await utils.CSVArray('a=\'1,2\', b="3, 4", c=5')).toEqual([ | ||||
|       'a=1,2', | ||||
|       'b=3, 4', | ||||
|       'c=5' | ||||
|     ]); | ||||
|     expect(await utils.CSVArray('')).toEqual([]); | ||||
|     expect(await utils.CSVArray(' ')).toEqual([]); | ||||
|   }); | ||||
| @ -172,7 +203,6 @@ describe('Utils tests', () => { | ||||
|     ); | ||||
|     expect(await utils.getExtensionPrefix('xsl')).toEqual('extension'); | ||||
|     expect(await utils.getExtensionPrefix('xdebug')).toEqual('zend_extension'); | ||||
|     expect(await utils.getExtensionPrefix('xdebug3')).toEqual('zend_extension'); | ||||
|     expect(await utils.getExtensionPrefix('opcache')).toEqual('zend_extension'); | ||||
|   }); | ||||
|  | ||||
| @ -184,114 +214,4 @@ describe('Utils tests', () => { | ||||
|       'Platform openbsd is not supported' | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   it('checking getUnsupportedLog', async () => { | ||||
|     expect(await utils.getUnsupportedLog('ext', '5.6', 'linux')).toContain( | ||||
|       'add_log "$cross" "ext" "ext is not supported on PHP 5.6"' | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   it('checking getCommand', async () => { | ||||
|     expect(await utils.getCommand('linux', 'tool')).toBe('add_tool '); | ||||
|     expect(await utils.getCommand('darwin', 'tool')).toBe('add_tool '); | ||||
|     expect(await utils.getCommand('win32', 'tool')).toBe('Add-Tool '); | ||||
|     expect(await utils.getCommand('win32', 'tool_name')).toBe('Add-ToolName '); | ||||
|     expect(await utils.getCommand('openbsd', 'tool')).toContain( | ||||
|       'Platform openbsd is not supported' | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   it('checking joins', async () => { | ||||
|     expect(await utils.joins('a', 'b', 'c')).toBe('a b c'); | ||||
|   }); | ||||
|  | ||||
|   it('checking scriptExtension', async () => { | ||||
|     expect(await utils.scriptExtension('linux')).toBe('.sh'); | ||||
|     expect(await utils.scriptExtension('darwin')).toBe('.sh'); | ||||
|     expect(await utils.scriptExtension('win32')).toBe('.ps1'); | ||||
|     expect(await utils.scriptExtension('openbsd')).toContain( | ||||
|       'Platform openbsd is not supported' | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   it('checking scriptTool', async () => { | ||||
|     expect(await utils.scriptTool('linux')).toBe('bash '); | ||||
|     expect(await utils.scriptTool('darwin')).toBe('bash '); | ||||
|     expect(await utils.scriptTool('win32')).toBe('pwsh '); | ||||
|     expect(await utils.scriptTool('openbsd')).toContain( | ||||
|       'Platform openbsd is not supported' | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   it('checking customPackage', async () => { | ||||
|     const script_path: string = path.join('ext', 'pkg.sh'); | ||||
|     expect(await utils.customPackage('pkg', 'ext', '1.2.3', 'linux')).toContain( | ||||
|       script_path + '\nadd_pkg 1.2.3' | ||||
|     ); | ||||
|     expect( | ||||
|       await utils.customPackage('pdo_pkg', 'ext', '1.2.3', 'linux') | ||||
|     ).toContain(script_path + '\nadd_pkg 1.2.3'); | ||||
|     expect( | ||||
|       await utils.customPackage('pkg8', 'ext', '1.2.3', 'linux') | ||||
|     ).toContain(script_path + '\nadd_pkg 1.2.3'); | ||||
|   }); | ||||
|  | ||||
|   it('checking parseExtensionSource', async () => { | ||||
|     expect( | ||||
|       await utils.parseExtensionSource( | ||||
|         'ext-org-name/repo-name@release', | ||||
|         'extension' | ||||
|       ) | ||||
|     ).toContain( | ||||
|       '\nadd_extension_from_source ext https://github.com org-name repo-name release extension' | ||||
|     ); | ||||
|     expect( | ||||
|       await utils.parseExtensionSource( | ||||
|         'ext-https://sub.domain.tld/org/repo@release', | ||||
|         'extension' | ||||
|       ) | ||||
|     ).toContain( | ||||
|       '\nadd_extension_from_source ext https://sub.domain.tld org repo release extension' | ||||
|     ); | ||||
|     expect( | ||||
|       await utils.parseExtensionSource( | ||||
|         'ext-https://sub.domain.XN--tld/org/repo@release', | ||||
|         'extension' | ||||
|       ) | ||||
|     ).toContain( | ||||
|       '\nadd_extension_from_source ext https://sub.domain.XN--tld org repo release extension' | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   it('checking readPHPVersion', async () => { | ||||
|     expect(await utils.readPHPVersion()).toBe('latest'); | ||||
|  | ||||
|     process.env['php-version-file'] = '.phpenv-version'; | ||||
|     await expect(utils.readPHPVersion()).rejects.toThrow( | ||||
|       "Could not find '.phpenv-version' file." | ||||
|     ); | ||||
|  | ||||
|     const existsSync = jest.spyOn(fs, 'existsSync').mockImplementation(); | ||||
|     const readFileSync = jest.spyOn(fs, 'readFileSync').mockImplementation(); | ||||
|  | ||||
|     existsSync.mockReturnValue(true); | ||||
|     readFileSync.mockReturnValue('8.1'); | ||||
|  | ||||
|     expect(await utils.readPHPVersion()).toBe('8.1'); | ||||
|  | ||||
|     process.env['php-version'] = '8.2'; | ||||
|     expect(await utils.readPHPVersion()).toBe('8.2'); | ||||
|  | ||||
|     existsSync.mockClear(); | ||||
|     readFileSync.mockClear(); | ||||
|   }); | ||||
|  | ||||
|   it('checking setVariable', async () => { | ||||
|     let script: string = await utils.setVariable('var', 'command', 'linux'); | ||||
|     expect(script).toEqual('\nvar="$(command)"\n'); | ||||
|     script = await utils.setVariable('var', 'command', 'darwin'); | ||||
|     expect(script).toEqual('\nvar="$(command)"\n'); | ||||
|     script = await utils.setVariable('var', 'command', 'win32'); | ||||
|     expect(script).toEqual('\n$var = command\n'); | ||||
|   }); | ||||
| }); | ||||
|  | ||||
							
								
								
									
										27
									
								
								action.yml
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								action.yml
									
									
									
									
									
								
							| @ -7,17 +7,11 @@ branding: | ||||
| inputs: | ||||
|   php-version: | ||||
|     description: 'Setup PHP version.' | ||||
|     required: false | ||||
|   php-version-file: | ||||
|     description: 'Setup PHP version from a file.' | ||||
|     required: false | ||||
|     default: '7.4' | ||||
|     required: true | ||||
|   extensions: | ||||
|     description: 'Setup PHP extensions.' | ||||
|     required: false | ||||
|   ini-file: | ||||
|     description: 'Set base ini file.' | ||||
|     required: false | ||||
|     default: 'production' | ||||
|   ini-values: | ||||
|     description: 'Add values to php.ini.' | ||||
|     required: false | ||||
| @ -27,9 +21,18 @@ inputs: | ||||
|   tools: | ||||
|     description: 'Setup popular tools globally.' | ||||
|     required: false | ||||
| outputs: | ||||
|   php-version: | ||||
|     description: 'PHP version in semver format' | ||||
|   extension-csv: | ||||
|     description: 'Deprecated! Use extensions instead.' | ||||
|     deprecationMessage: 'The extension-csv property is deprecated. Use extensions instead.' | ||||
|     required: false | ||||
|   ini-values-csv: | ||||
|     description: 'Deprecated! Use ini-values instead.' | ||||
|     deprecationMessage: 'The ini-values-csv property is deprecated. Use ini-values instead.' | ||||
|     required: false | ||||
|   pecl: | ||||
|     description: 'Deprecated! Use tools instead to setup PECL.' | ||||
|     deprecationMessage: 'The pecl property is deprecated. Specify pecl in tools instead.' | ||||
|     required: false | ||||
| runs: | ||||
|   using: 'node16' | ||||
|   using: 'node12' | ||||
|   main: 'dist/index.js' | ||||
|  | ||||
							
								
								
									
										3438
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3438
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -8,31 +8,25 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         php-versions: ['7.1', '7.2', '7.3', '7.4'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|  | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|       - uses: actions/cache@v3 | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install Composer dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: PHP test | ||||
|         run: composer test | ||||
|         run: composer test | ||||
| @ -1,36 +0,0 @@ | ||||
| # GitHub Action for Blackfire Player | ||||
| name: Play a Blackfire Scenario | ||||
| on: [push, pull_request] | ||||
| jobs: | ||||
|   blackfire-player: | ||||
|     name: Blackfire (PHP ${{ matrix.php-versions }}) | ||||
|     # Add your Blackfire credentials securely using GitHub Secrets | ||||
|     env: | ||||
|       BLACKFIRE_SERVER_ID: ${{ secrets.BLACKFIRE_SERVER_ID }} | ||||
|       BLACKFIRE_SERVER_TOKEN: ${{ secrets.BLACKFIRE_SERVER_TOKEN }} | ||||
|       BLACKFIRE_CLIENT_ID: ${{ secrets.BLACKFIRE_CLIENT_ID }} | ||||
|       BLACKFIRE_CLIENT_TOKEN: ${{ secrets.BLACKFIRE_CLIENT_TOKEN }} | ||||
|     runs-on: ${{ matrix.operating-system }} | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-latest, windows-latest, macos-latest] | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         # blackfire-player supports PHP >= 5.5 | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           extensions: blackfire | ||||
|           # Setup Blackfire CLI and player | ||||
|           tools: blackfire, blackfire-player | ||||
|           coverage: none | ||||
|  | ||||
|       # Refer to https://blackfire.io/docs/player/index#usage | ||||
|       - name: Play the scenario | ||||
|         run: blackfire-player run scenario.bkf | ||||
| @ -1,37 +0,0 @@ | ||||
| # GitHub Action for Blackfire | ||||
| name: Profiling with blackfire | ||||
| on: [push, pull_request] | ||||
| jobs: | ||||
|   blackfire: | ||||
|     name: Blackfire (PHP ${{ matrix.php-versions }}) | ||||
|     # Add your Blackfire credentials securely using GitHub Secrets | ||||
|     env: | ||||
|       BLACKFIRE_SERVER_ID: ${{ secrets.BLACKFIRE_SERVER_ID }} | ||||
|       BLACKFIRE_SERVER_TOKEN: ${{ secrets.BLACKFIRE_SERVER_TOKEN }} | ||||
|       BLACKFIRE_CLIENT_ID: ${{ secrets.BLACKFIRE_CLIENT_ID }} | ||||
|       BLACKFIRE_CLIENT_TOKEN: ${{ secrets.BLACKFIRE_CLIENT_TOKEN }} | ||||
|     runs-on: ${{ matrix.operating-system }} | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-latest, windows-latest, macos-latest] | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         # Blackfire supports PHP >= 5.3 on Ubuntu and macOS, and PHP >= 5.4 on Windows | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           # Setup Blackfire extension and CLI | ||||
|           extensions: blackfire | ||||
|           tools: blackfire | ||||
|           # Disable Xdebug and PCOV coverage drivers | ||||
|           coverage: none | ||||
|  | ||||
|       # Refer to https://blackfire.io/docs/cookbooks/profiling-cli | ||||
|       - name: Profile | ||||
|         run: blackfire run php my-script.php | ||||
| @ -6,13 +6,11 @@ jobs: | ||||
|   tests: | ||||
|     strategy: | ||||
|       matrix: | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         php-versions: ['7.2', '7.3', '7.4'] | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     # Docs: https://docs.github.com/en/actions/using-containerized-services | ||||
|     services: | ||||
|       mysql: | ||||
|         image: mysql:latest | ||||
|         image: mysql:5.7 | ||||
|         env: | ||||
|           MYSQL_ALLOW_EMPTY_PASSWORD: false | ||||
|           MYSQL_ROOT_PASSWORD: password | ||||
| @ -20,7 +18,6 @@ jobs: | ||||
|         ports: | ||||
|           - 3306/tcp | ||||
|         options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 | ||||
|  | ||||
|       redis: | ||||
|         image: redis | ||||
|         ports: | ||||
| @ -28,41 +25,32 @@ jobs: | ||||
|         options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3 | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: shivammathur/setup-php@v1 | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           # You can also use ext-apcu or ext-memcached instead of ext-redis | ||||
|           # Install memcached if using ext-memcached | ||||
|           extensions: mbstring, intl, redis, pdo_mysql | ||||
|           coverage: pcov | ||||
|  | ||||
|       # Local MySQL service in GitHub hosted environments is disabled by default. | ||||
|       # If you are using it instead of service containers, make sure you start it. | ||||
|       # - name: Start mysql service | ||||
|       #   run: sudo systemctl start mysql.service | ||||
|  | ||||
|       - name: Start mysql service | ||||
|         run: sudo /etc/init.d/mysql start | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: | | ||||
|           composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|           composer run-script post-install-cmd | ||||
|  | ||||
|           composer run-script post-install-cmd --no-interaction | ||||
|       # Add a step to run migrations if required | ||||
|       - name: Test with phpunit | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
| @ -75,31 +63,25 @@ jobs: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: shivammathur/setup-php@v1 | ||||
|         with: | ||||
|           php-version: '8.1' | ||||
|           php-version: '7.3' | ||||
|           extensions: mbstring, intl | ||||
|  | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: PHP CodeSniffer | ||||
|         run: composer cs-check | ||||
|  | ||||
| @ -108,31 +90,25 @@ jobs: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: shivammathur/setup-php@v1 | ||||
|         with: | ||||
|           php-version: '8.1' | ||||
|           php-version: '7.3' | ||||
|           extensions: mbstring, intl | ||||
|           tools: phpstan | ||||
|  | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: Static Analysis using PHPStan | ||||
|         run: phpstan analyse --no-progress src/ | ||||
|         run: phpstan analyse --no-progress src/ | ||||
| @ -6,13 +6,11 @@ jobs: | ||||
|   tests: | ||||
|     strategy: | ||||
|       matrix: | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         php-versions: ['7.2', '7.3', '7.4'] | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     # Docs: https://docs.github.com/en/actions/using-containerized-services | ||||
|     services: | ||||
|       postgres: | ||||
|         image: postgres:latest | ||||
|         image: postgres:10.8 | ||||
|         env: | ||||
|           POSTGRES_USER: postgres | ||||
|           POSTGRES_PASSWORD: postgres | ||||
| @ -20,7 +18,6 @@ jobs: | ||||
|         ports: | ||||
|           - 5432/tcp | ||||
|         options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3 | ||||
|  | ||||
|       redis: | ||||
|         image: redis | ||||
|         ports: | ||||
| @ -28,41 +25,30 @@ jobs: | ||||
|         options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3 | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: shivammathur/setup-php@v1 | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           # You can also use ext-apcu or ext-memcached instead of ext-redis | ||||
|           # Install memcached if using ext-memcached | ||||
|           extensions: mbstring, intl, redis, pdo_pgsql | ||||
|           coverage: pcov | ||||
|  | ||||
|       # Local PostgreSQL service in GitHub hosted environments is disabled by default. | ||||
|       # If you are using it instead of service containers, make sure you start it. | ||||
|       # - name: Start postgresql service | ||||
|       #   run: sudo systemctl start postgresql.service | ||||
|  | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: | | ||||
|           composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|           composer run-script post-install-cmd | ||||
|  | ||||
|           composer run-script post-install-cmd --no-interaction | ||||
|       # Add a step to run migrations if required | ||||
|       - name: Test with phpunit | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
| @ -75,31 +61,25 @@ jobs: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: shivammathur/setup-php@v1 | ||||
|         with: | ||||
|           php-version: '8.1' | ||||
|           php-version: '7.3' | ||||
|           extensions: mbstring, intl | ||||
|  | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: PHP CodeSniffer | ||||
|         run: composer cs-check | ||||
|  | ||||
| @ -108,31 +88,25 @@ jobs: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: shivammathur/setup-php@v1 | ||||
|         with: | ||||
|           php-version: '8.1' | ||||
|           php-version: '7.3' | ||||
|           extensions: mbstring, intl | ||||
|           tools: phpstan | ||||
|  | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: Static Analysis using PHPStan | ||||
|         run: phpstan analyse --no-progress src/ | ||||
|         run: phpstan analyse --no-progress src/ | ||||
| @ -7,38 +7,32 @@ jobs: | ||||
|     strategy: | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-latest, windows-latest, macos-latest] | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         php-versions: ['7.2', '7.3', '7.4'] | ||||
|     runs-on: ${{ matrix.operating-system }} | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           extensions: mbstring, intl, pdo_sqlite, pdo_mysql | ||||
|           coverage: pcov | ||||
|  | ||||
|           coverage: pcov #optional | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: | | ||||
|           composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|           composer run-script post-install-cmd | ||||
|  | ||||
|           composer run-script post-install-cmd --no-interaction | ||||
|       - name: Test with phpunit | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
|  | ||||
| @ -47,30 +41,25 @@ jobs: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: shivammathur/setup-php@v1 | ||||
|         with: | ||||
|           php-version: '8.1' | ||||
|           php-version: '7.3' | ||||
|           extensions: mbstring, intl | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: PHP CodeSniffer | ||||
|         run: composer cs-check | ||||
|  | ||||
| @ -79,31 +68,25 @@ jobs: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: shivammathur/setup-php@v1 | ||||
|         with: | ||||
|           php-version: '8.1' | ||||
|           php-version: '7.3' | ||||
|           extensions: mbstring, intl | ||||
|           tools: phpstan | ||||
|  | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: Static Analysis using PHPStan | ||||
|         run: phpstan analyse --no-progress src/ | ||||
|  | ||||
| @ -6,35 +6,29 @@ jobs: | ||||
|     strategy: | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-latest, windows-latest, macos-latest] | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         php-versions: ['7.2', '7.3', '7.4'] | ||||
|     runs-on: ${{ matrix.operating-system }} | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           extensions: mbstring, intl, curl, dom | ||||
|           coverage: xdebug | ||||
|  | ||||
|           coverage: xdebug #optional | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: Test with phpunit | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
| @ -12,12 +12,10 @@ jobs: | ||||
|       BROADCAST_DRIVER: log | ||||
|       CACHE_DRIVER: redis | ||||
|       QUEUE_CONNECTION: redis | ||||
|       SESSION_DRIVER: redis | ||||
|  | ||||
|     # Docs: https://docs.github.com/en/actions/using-containerized-services | ||||
|       SESSION_DRIVER: redis     | ||||
|     services: | ||||
|       mysql: | ||||
|         image: mysql:latest | ||||
|         image: mysql:5.7 | ||||
|         env: | ||||
|           MYSQL_ALLOW_EMPTY_PASSWORD: false | ||||
|           MYSQL_ROOT_PASSWORD: password | ||||
| @ -25,7 +23,6 @@ jobs: | ||||
|         ports: | ||||
|           - 3306/tcp | ||||
|         options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 | ||||
|  | ||||
|       redis: | ||||
|         image: redis | ||||
|         ports: | ||||
| @ -34,56 +31,44 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         php-versions: ['7.2', '7.3', '7.4'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           extensions: mbstring, dom, fileinfo, mysql | ||||
|           coverage: xdebug | ||||
|  | ||||
|       # Local MySQL service in GitHub hosted environments is disabled by default. | ||||
|       # If you are using it instead of service containers, make sure you start it. | ||||
|       # - name: Start mysql service | ||||
|       #   run: sudo systemctl start mysql.service | ||||
|  | ||||
|           coverage: xdebug #optional | ||||
|       - name: Start mysql service | ||||
|         run: sudo /etc/init.d/mysql start | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install Composer dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: Prepare the application | ||||
|         run: | | ||||
|           php -r "file_exists('.env') || copy('.env.example', '.env');" | ||||
|           php artisan key:generate | ||||
|  | ||||
|       - name: Clear Config | ||||
|         run: php artisan config:clear | ||||
|  | ||||
|       - name: Run Migration | ||||
|         run: php artisan migrate -v | ||||
|         env: | ||||
|           DB_PORT: ${{ job.services.mysql.ports['3306'] }} | ||||
|           REDIS_PORT: ${{ job.services.redis.ports['6379'] }} | ||||
|  | ||||
|       - name: Test with phpunit | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
|         env: | ||||
|           DB_PORT: ${{ job.services.mysql.ports['3306'] }} | ||||
|           REDIS_PORT: ${{ job.services.redis.ports['6379'] }} | ||||
|           REDIS_PORT: ${{ job.services.redis.ports['6379'] }} | ||||
| @ -15,11 +15,9 @@ jobs: | ||||
|       DB_PASSWORD: postgres | ||||
|       DB_USERNAME: postgres | ||||
|       DB_DATABASE: postgres | ||||
|  | ||||
|     # Docs: https://docs.github.com/en/actions/using-containerized-services | ||||
|     services: | ||||
|       postgres: | ||||
|         image: postgres:latest | ||||
|         image: postgres:10.8 | ||||
|         env: | ||||
|           POSTGRES_USER: postgres | ||||
|           POSTGRES_PASSWORD: postgres | ||||
| @ -27,7 +25,6 @@ jobs: | ||||
|         ports: | ||||
|           - 5432/tcp | ||||
|         options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3 | ||||
|  | ||||
|       redis: | ||||
|         image: redis | ||||
|         ports: | ||||
| @ -36,56 +33,42 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         php-versions: ['7.2', '7.3', '7.4'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           extensions: mbstring, dom, fileinfo, pgsql | ||||
|           coverage: xdebug | ||||
|  | ||||
|       # Local PostgreSQL service in GitHub hosted environments is disabled by default. | ||||
|       # If you are using it instead of service containers, make sure you start it. | ||||
|       # - name: Start postgresql service | ||||
|       #   run: sudo systemctl start postgresql.service | ||||
|  | ||||
|           coverage: xdebug #optional | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install Composer dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: Prepare the application | ||||
|         run: | | ||||
|           php -r "file_exists('.env') || copy('.env.example', '.env');" | ||||
|           php artisan key:generate | ||||
|  | ||||
|       - name: Clear Config | ||||
|         run: php artisan config:clear | ||||
|  | ||||
|       - name: Run Migration | ||||
|         run: php artisan migrate -v | ||||
|         env: | ||||
|           DB_PORT: ${{ job.services.postgres.ports[5432] }} | ||||
|           REDIS_PORT: ${{ job.services.redis.ports['6379'] }} | ||||
|  | ||||
|       - name: Test with phpunit | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
|         env: | ||||
|           DB_PORT: ${{ job.services.postgres.ports[5432] }} | ||||
|           REDIS_PORT: ${{ job.services.redis.ports['6379'] }} | ||||
|           REDIS_PORT: ${{ job.services.redis.ports['6379'] }} | ||||
| @ -9,42 +9,34 @@ jobs: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-latest, windows-latest, macos-latest] | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         php-versions: ['7.2', '7.3', '7.4'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           extensions: mbstring, dom, fileinfo | ||||
|           coverage: xdebug | ||||
|  | ||||
|           coverage: xdebug #optional | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install Composer dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: Prepare the application | ||||
|         run: | | ||||
|           php -r "file_exists('.env') || copy('.env.example', '.env');" | ||||
|           php artisan key:generate | ||||
|  | ||||
|       - name: Clear Config | ||||
|         run: php artisan config:clear | ||||
|  | ||||
|       - name: Test with phpunit | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
| @ -13,11 +13,9 @@ jobs: | ||||
|       CACHE_DRIVER: redis | ||||
|       QUEUE_CONNECTION: redis | ||||
|       SESSION_DRIVER: redis | ||||
|  | ||||
|     # Docs: https://docs.github.com/en/actions/using-containerized-services | ||||
|     services: | ||||
|       mysql: | ||||
|         image: mysql:latest | ||||
|         image: mysql:5.7 | ||||
|         env: | ||||
|           MYSQL_ALLOW_EMPTY_PASSWORD: false | ||||
|           MYSQL_ROOT_PASSWORD: password | ||||
| @ -25,7 +23,6 @@ jobs: | ||||
|         ports: | ||||
|           - 3306/tcp | ||||
|         options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 | ||||
|  | ||||
|       redis: | ||||
|         image: redis | ||||
|         ports: | ||||
| @ -34,56 +31,44 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         php-versions: ['7.2', '7.3', '7.4'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           extensions: mbstring, dom, fileinfo, mysql | ||||
|           coverage: xdebug | ||||
|  | ||||
|       # Local MySQL service in GitHub hosted environments is disabled by default. | ||||
|       # If you are using it instead of service containers, make sure you start it. | ||||
|       # - name: Start mysql service | ||||
|       #   run: sudo systemctl start mysql.service | ||||
|  | ||||
|           coverage: xdebug #optional | ||||
|       - name: Start mysql service | ||||
|         run: sudo /etc/init.d/mysql start | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install Composer dependencies | ||||
|         run: | | ||||
|           composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|           composer require predis/predis illuminate/redis | ||||
|  | ||||
|       - name: Prepare the application | ||||
|         run: php -r "file_exists('.env') || copy('.env.example', '.env');" | ||||
|  | ||||
|       - name: Register Redis as service provider | ||||
|         run: sed -i '$i\$app->register(Illuminate\\Redis\\RedisServiceProvider::class);' bootstrap/app.php | ||||
|  | ||||
|       - name: Run Migration | ||||
|         run: php artisan migrate -v | ||||
|         env: | ||||
|           DB_PORT: ${{ job.services.mysql.ports['3306'] }} | ||||
|           REDIS_PORT: ${{ job.services.redis.ports['6379'] }} | ||||
|  | ||||
|       - name: Test with phpunit | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
|         env: | ||||
|           DB_PORT: ${{ job.services.mysql.ports['3306'] }} | ||||
|           REDIS_PORT: ${{ job.services.redis.ports['6379'] }} | ||||
|           REDIS_PORT: ${{ job.services.redis.ports['6379'] }} | ||||
| @ -15,11 +15,9 @@ jobs: | ||||
|       DB_PASSWORD: postgres | ||||
|       DB_USERNAME: postgres | ||||
|       DB_DATABASE: postgres | ||||
|  | ||||
|     # Docs: https://docs.github.com/en/actions/using-containerized-services | ||||
|     services: | ||||
|       postgres: | ||||
|         image: postgres:latest | ||||
|         image: postgres:10.8 | ||||
|         env: | ||||
|           POSTGRES_USER: postgres | ||||
|           POSTGRES_PASSWORD: postgres | ||||
| @ -27,7 +25,6 @@ jobs: | ||||
|         ports: | ||||
|           - 5432/tcp | ||||
|         options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3 | ||||
|  | ||||
|       redis: | ||||
|         image: redis | ||||
|         ports: | ||||
| @ -36,54 +33,40 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         php-versions: ['7.2', '7.3', '7.4'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           extensions: mbstring, dom, fileinfo, pgsql | ||||
|           coverage: xdebug | ||||
|  | ||||
|       # Local PostgreSQL service in GitHub hosted environments is disabled by default. | ||||
|       # If you are using it instead of service containers, make sure you start it. | ||||
|       # - name: Start postgresql service | ||||
|       #   run: sudo systemctl start postgresql.service | ||||
|  | ||||
|           coverage: xdebug #optional | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install Composer dependencies | ||||
|         run: | | ||||
|           composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|           composer require predis/predis illuminate/redis | ||||
|  | ||||
|       - name: Prepare the application | ||||
|         run: php -r "file_exists('.env') || copy('.env.example', '.env');" | ||||
|  | ||||
|       - name: Register Redis as service provider | ||||
|         run: sed -i '$i\$app->register(Illuminate\\Redis\\RedisServiceProvider::class);' bootstrap/app.php | ||||
|  | ||||
|       - name: Run Migration | ||||
|         run: php artisan migrate -v | ||||
|         env: | ||||
|           DB_PORT: ${{ job.services.postgres.ports[5432] }} | ||||
|           REDIS_PORT: ${{ job.services.redis.ports['6379'] }} | ||||
|  | ||||
|       - name: Test with phpunit | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
|         env: | ||||
|  | ||||
| @ -9,37 +9,30 @@ jobs: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-latest, windows-latest, macos-latest] | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         php-versions: ['7.2', '7.3', '7.4'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           extensions: mbstring, dom, fileinfo, mysql | ||||
|           coverage: xdebug | ||||
|  | ||||
|           coverage: xdebug #optional | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install Composer dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: Prepare the application | ||||
|         run: php -r "file_exists('.env') || copy('.env.example', '.env');" | ||||
|  | ||||
|       - name: Test with phpunit | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
| @ -16,11 +16,9 @@ jobs: | ||||
|       DB_PASSWORD: password | ||||
|       CODECEPTION_URL: 127.0.0.1 | ||||
|       CODECEPTION_PORT: 8888 | ||||
|  | ||||
|     # Docs: https://docs.github.com/en/actions/using-containerized-services | ||||
|     services: | ||||
|       mysql: | ||||
|         image: mysql:latest | ||||
|         image: mysql:5.7 | ||||
|         env: | ||||
|           MYSQL_ALLOW_EMPTY_PASSWORD: false | ||||
|           MYSQL_ROOT_PASSWORD: password | ||||
| @ -32,45 +30,34 @@ jobs: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         php-versions: ['7.2', '7.3', '7.4'] | ||||
|         # For phalcon 3.x, use | ||||
|         # php-versions: ['7.0', '7.1', '7.2', '7.3'] | ||||
|       # For phalcon 3.x, use | ||||
|       # php-versions: ['7.0', '7.1', '7.2', '7.3'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           # Use phalcon3 for the phalcon 3.x. | ||||
|           extensions: mbstring, dom, zip, phalcon4, mysql | ||||
|           coverage: xdebug | ||||
|  | ||||
|       # Local MySQL service in GitHub hosted environments is disabled by default. | ||||
|       # If you are using it instead of service containers, make sure you start it. | ||||
|       # - name: Start mysql service | ||||
|       #   run: sudo systemctl start mysql.service | ||||
|  | ||||
|           extensions: mbstring, dom, zip, phalcon4, mysql #use phalcon3 for the phalcon 3.x. | ||||
|           coverage: xdebug #optional | ||||
|       - name: Start mysql service | ||||
|         run: sudo /etc/init.d/mysql start | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install Composer dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: Prepare the application | ||||
|         run: php -r "file_exists('.env') || copy('.env.example', '.env');" | ||||
|  | ||||
|       - name: Run Migration | ||||
|         run: | | ||||
|           if [ ! -e phinx.yml ]; then vendor/bin/phinx init; fi | ||||
| @ -78,11 +65,10 @@ jobs: | ||||
|           vendor/bin/phinx seed:run | ||||
|         env: | ||||
|           DB_PORT: ${{ job.services.mysql.ports['3306'] }} | ||||
|  | ||||
|       - name: Run Tests | ||||
|         run: | | ||||
|           (cd public && nohup php -S $CODECEPTION_URL:$CODECEPTION_PORT > phalcon.log 2>&1 &) | ||||
|           vendor/bin/codecept build | ||||
|           vendor/bin/codecept run | ||||
|         env: | ||||
|           DB_PORT: ${{ job.services.mysql.ports['3306'] }} | ||||
|           DB_PORT: ${{ job.services.mysql.ports['3306'] }} | ||||
| @ -17,11 +17,9 @@ jobs: | ||||
|       CODECEPTION_URL: 127.0.0.1 | ||||
|       CODECEPTION_PORT: 8888 | ||||
|       DB_CONNECTION: pgsql | ||||
|  | ||||
|     # Docs: https://docs.github.com/en/actions/using-containerized-services | ||||
|     services: | ||||
|       postgres: | ||||
|         image: postgres:latest | ||||
|         image: postgres:10.8 | ||||
|         env: | ||||
|           POSTGRES_USER: postgres | ||||
|           POSTGRES_PASSWORD: postgres | ||||
| @ -33,31 +31,22 @@ jobs: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         php-versions: ['7.2', '7.3', '7.4'] | ||||
|         # For phalcon 3.x, use | ||||
|         # php-versions: ['7.0', '7.1', '7.2', '7.3'] | ||||
|       # For phalcon 3.x, use | ||||
|       # php-versions: ['7.0', '7.1', '7.2', '7.3'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           # Use phalcon3 for the phalcon 3.x | ||||
|           extensions: mbstring, dom, zip, phalcon4, pgsql | ||||
|           coverage: xdebug | ||||
|  | ||||
|       # Local PostgreSQL service in GitHub hosted environments is disabled by default. | ||||
|       # If you are using it instead of service containers, make sure you start it. | ||||
|       # - name: Start postgresql service | ||||
|       #   run: sudo systemctl start postgresql.service | ||||
|  | ||||
|           extensions: mbstring, dom, zip, phalcon4, pgsql #use phalcon3 for the phalcon 3.x | ||||
|           coverage: xdebug #optional | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|  | ||||
| @ -8,62 +8,50 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         node-versions: ['16'] | ||||
|         php-versions: ['7.1', '7.2', '7.3', '7.4'] | ||||
|         node-versions: ['8', '10'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup Node.js | ||||
|         uses: actions/setup-node@v1 | ||||
|         with: | ||||
|           node-version: ${{ matrix.node-versions }} | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           extensions: mbstring | ||||
|  | ||||
|       - name: Check node versions | ||||
|         run: node -v | ||||
|  | ||||
|       - name: Get yarn cache | ||||
|         id: yarn-cache | ||||
|         run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|       - uses: actions/cache@v3 | ||||
|         run: echo "::set-output name=dir::$(yarn cache dir)" | ||||
|       - uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.yarn-cache.outputs.dir }} | ||||
|           key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-yarn- | ||||
|  | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install yarn dependencies | ||||
|         run: yarn -V | ||||
|  | ||||
|       - name: Install Composer dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: Yarn test and build | ||||
|         run: | | ||||
|           yarn run test | ||||
|           yarn run build | ||||
|           yarn run rmdist | ||||
|           yarn run "build:production" | ||||
|  | ||||
|       - name: PHP test | ||||
|         run: composer test | ||||
|         run: composer test | ||||
| @ -6,35 +6,29 @@ jobs: | ||||
|     strategy: | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-latest, windows-latest, macos-latest] | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         php-versions: ['7.2', '7.3', '7.4'] | ||||
|     runs-on: ${{ matrix.operating-system }} | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           extensions: mbstring, simplexml, dom | ||||
|           coverage: xdebug | ||||
|  | ||||
|           coverage: xdebug #optional | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: Test with phpunit | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
| @ -5,11 +5,9 @@ jobs: | ||||
|   symfony: | ||||
|     name: Symfony (PHP ${{ matrix.php-versions }}) | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     # Docs: https://docs.github.com/en/actions/using-containerized-services | ||||
|     services: | ||||
|       mysql: | ||||
|         image: mysql:latest | ||||
|         image: mysql:5.7 | ||||
|         env: | ||||
|           MYSQL_ALLOW_EMPTY_PASSWORD: false | ||||
|           MYSQL_ROOT_PASSWORD: symfony | ||||
| @ -20,51 +18,39 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         php-versions: ['7.3', '7.4'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           tools: phpunit-bridge | ||||
|           extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql | ||||
|           coverage: xdebug | ||||
|  | ||||
|       # Local MySQL service in GitHub hosted environments is disabled by default. | ||||
|       # If you are using it instead of service containers, make sure you start it. | ||||
|       # - name: Start mysql service | ||||
|       #   run: sudo systemctl start mysql.service | ||||
|  | ||||
|           coverage: xdebug #optional | ||||
|       - name: Start mysql service | ||||
|         run: sudo /etc/init.d/mysql start | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install Composer dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|         run: | | ||||
|           composer require --dev symfony/orm-pack symfony/phpunit-bridge | ||||
|           composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|           php bin/phpunit install | ||||
|       - name: Run Migration | ||||
|         run: | | ||||
|           composer require --dev symfony/orm-pack | ||||
|           php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed" | ||||
|           php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed" | ||||
|         env: | ||||
|           DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony | ||||
|  | ||||
|       - name: Install PHPUnit | ||||
|         run: simple-phpunit install | ||||
|  | ||||
|       - name: Run tests | ||||
|         run: simple-phpunit --coverage-text | ||||
|       - name: Run Tests | ||||
|         run: php bin/phpunit --coverage-text | ||||
| @ -5,11 +5,9 @@ jobs: | ||||
|   symfony: | ||||
|     name: Symfony (PHP ${{ matrix.php-versions }}) | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     # Docs: https://docs.github.com/en/actions/using-containerized-services | ||||
|     services: | ||||
|       postgres: | ||||
|         image: postgres:latest | ||||
|         image: postgres:10.8 | ||||
|         env: | ||||
|           POSTGRES_USER: postgres | ||||
|           POSTGRES_PASSWORD: postgres | ||||
| @ -20,51 +18,37 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         php-versions: ['7.3', '7.4'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           tools: phpunit-bridge | ||||
|           extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, pgsql | ||||
|           coverage: xdebug | ||||
|  | ||||
|       # Local PostgreSQL service in GitHub hosted environments is disabled by default. | ||||
|       # If you are using it instead of service containers, make sure you start it. | ||||
|       # - name: Start postgresql service | ||||
|       #   run: sudo systemctl start postgresql.service | ||||
|  | ||||
|           coverage: xdebug #optional | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install Composer dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|         run: | | ||||
|           composer require --dev symfony/orm-pack symfony/phpunit-bridge | ||||
|           composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|           php bin/phpunit install | ||||
|       - name: Run Migration | ||||
|         run: | | ||||
|           composer require --dev symfony/orm-pack | ||||
|           php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed" | ||||
|           php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed" | ||||
|         env: | ||||
|           DATABASE_URL: postgres://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports[5432] }}/postgres?charset=UTF-8 | ||||
|  | ||||
|       - name: Install PHPUnit | ||||
|         run: simple-phpunit install | ||||
|  | ||||
|       - name: Run tests | ||||
|         run: simple-phpunit --coverage-text | ||||
|       - name: Run Tests | ||||
|         run: php bin/phpunit --coverage-text | ||||
| @ -9,38 +9,31 @@ jobs: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-latest, windows-latest, macos-latest] | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         php-versions: ['7.3', '7.4'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           tools: phpunit-bridge | ||||
|           extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite | ||||
|           coverage: xdebug | ||||
|  | ||||
|           coverage: xdebug #optional | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install Composer dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: Install PHPUnit | ||||
|         run: simple-phpunit install | ||||
|  | ||||
|       - name: Run tests | ||||
|         run: simple-phpunit --coverage-text | ||||
|         run: | | ||||
|           composer require --dev symfony/phpunit-bridge | ||||
|           composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|           php bin/phpunit install | ||||
|       - name: Run Tests | ||||
|         run: php bin/phpunit --coverage-text | ||||
| @ -11,11 +11,9 @@ jobs: | ||||
|       TEST_DB_USERNAME: root | ||||
|       TEST_DB_PASSWORD: yii | ||||
|       DB_CHARSET: utf8 | ||||
|  | ||||
|     # Docs: https://docs.github.com/en/actions/using-containerized-services | ||||
|     services: | ||||
|       mysql: | ||||
|         image: mysql:latest | ||||
|         image: mysql:5.7 | ||||
|         env: | ||||
|           MYSQL_ALLOW_EMPTY_PASSWORD: false | ||||
|           MYSQL_ROOT_PASSWORD: yii | ||||
| @ -26,45 +24,35 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         php-versions: ['7.4', '8.0'] | ||||
|         php-versions: ['7.2', '7.3', '7.4'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Set Node.js 10.x | ||||
|         uses: actions/setup-node@v1 | ||||
|         with: | ||||
|           node-version: 10.x | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           extensions: mbstring, intl, gd, imagick, zip, dom, mysql | ||||
|           coverage: xdebug | ||||
|  | ||||
|       # Local MySQL service in GitHub hosted environments is disabled by default. | ||||
|       # If you are using it instead of service containers, make sure you start it. | ||||
|       # - name: Start mysql service | ||||
|       #   run: sudo systemctl start mysql.service | ||||
|  | ||||
|           coverage: xdebug #optional | ||||
|       - name: Start mysql service | ||||
|         run: sudo /etc/init.d/mysql start | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install Composer dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: Prepare the application | ||||
|         run: | | ||||
|           php -r "file_exists('.env') || copy('.env.dist', '.env');" | ||||
| @ -74,7 +62,6 @@ jobs: | ||||
|         env: | ||||
|           DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii | ||||
|           TEST_DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii | ||||
|  | ||||
|       - name: Run Tests | ||||
|         run: | | ||||
|           vendor/bin/codecept build | ||||
| @ -83,4 +70,4 @@ jobs: | ||||
|           vendor/bin/codecept run | ||||
|         env: | ||||
|           DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii | ||||
|           TEST_DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii | ||||
|           TEST_DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii | ||||
| @ -11,11 +11,9 @@ jobs: | ||||
|       TEST_DB_USERNAME: postgres | ||||
|       TEST_DB_PASSWORD: postgres | ||||
|       DB_CHARSET: utf8 | ||||
|  | ||||
|     # Docs: https://docs.github.com/en/actions/using-containerized-services | ||||
|     services: | ||||
|       postgres: | ||||
|         image: postgres:latest | ||||
|         image: postgres:10.8 | ||||
|         env: | ||||
|           POSTGRES_USER: postgres | ||||
|           POSTGRES_PASSWORD: postgres | ||||
| @ -26,45 +24,33 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         php-versions: ['7.4', '8.0'] | ||||
|         php-versions: ['7.2', '7.3', '7.4'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Set Node.js 10.x | ||||
|         uses: actions/setup-node@v1 | ||||
|         with: | ||||
|           node-version: 10.x | ||||
|  | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           extensions: mbstring, intl, gd, imagick, zip, dom, pgsql | ||||
|           coverage: xdebug | ||||
|  | ||||
|       # Local PostgreSQL service in GitHub hosted environments is disabled by default. | ||||
|       # If you are using it instead of service containers, make sure you start it. | ||||
|       # - name: Start postgresql service | ||||
|       #   run: sudo systemctl start postgresql.service | ||||
|  | ||||
|           coverage: xdebug #optional | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
|  | ||||
|       - name: Install Composer dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|  | ||||
|       - name: Prepare the application | ||||
|         run: | | ||||
|           php -r "file_exists('.env') || copy('.env.dist', '.env');" | ||||
| @ -74,7 +60,6 @@ jobs: | ||||
|         env: | ||||
|           DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres | ||||
|           TEST_DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres | ||||
|  | ||||
|       - name: Run Tests | ||||
|         run: | | ||||
|           vendor/bin/codecept build | ||||
| @ -83,4 +68,4 @@ jobs: | ||||
|           vendor/bin/codecept run | ||||
|         env: | ||||
|           DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres | ||||
|           TEST_DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres | ||||
|           TEST_DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres | ||||
| @ -1,4 +1,4 @@ | ||||
| # GitHub Action for Laminas framework MVC projects | ||||
| # GitHub Action for Zend Framework | ||||
| name: Testing Zend Framework | ||||
| on: [push, pull_request] | ||||
| jobs: | ||||
| @ -6,34 +6,31 @@ jobs: | ||||
|     strategy: | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-latest, windows-latest, macos-latest] | ||||
|         php-versions: ['7.4', '8.0', '8.1'] | ||||
|         php-versions: ['7.2', '7.3', '7.4'] | ||||
|     runs-on: ${{ matrix.operating-system }} | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
| 
 | ||||
|       # Docs: https://github.com/shivammathur/setup-php | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Setup PHP, with composer and extensions | ||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php | ||||
|         with: | ||||
|           php-version: ${{ matrix.php-versions }} | ||||
|           coverage: xdebug | ||||
| 
 | ||||
|           extensions: mbstring, bcmath, curl, intl | ||||
|           coverage: xdebug #optional | ||||
|       - name: Get composer cache directory | ||||
|         id: composer-cache | ||||
|         run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||||
| 
 | ||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
|       - name: Cache composer dependencies | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v2 | ||||
|         with: | ||||
|           path: ${{ steps.composer-cache.outputs.dir }} | ||||
|           # Use composer.json for key, if composer.lock is not committed. | ||||
|           # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
|           restore-keys: ${{ runner.os }}-composer- | ||||
| 
 | ||||
|       - name: Install dependencies | ||||
|         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||
| 
 | ||||
|         run: | | ||||
|           composer install --no-progress --prefer-dist --optimize-autoloader | ||||
|           composer require --dev phpunit/phpunit squizlabs/php_codesniffer zendframework/zend-test | ||||
|       - name: Test with phpunit | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
|         run: vendor/bin/phpunit --coverage-text | ||||
							
								
								
									
										8345
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										8345
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										47
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								package.json
									
									
									
									
									
								
							| @ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "setup-php", | ||||
|   "version": "2.25.5", | ||||
|   "version": "1.11.7", | ||||
|   "private": false, | ||||
|   "description": "Setup PHP for use with GitHub Actions", | ||||
|   "main": "lib/install.js", | ||||
| @ -16,9 +16,9 @@ | ||||
|   ], | ||||
|   "scripts": { | ||||
|     "build": "tsc", | ||||
|     "lint": "eslint **/src/*.ts **/__tests__/*.ts --cache --fix", | ||||
|     "format": "prettier --write **/src/*.ts **/__tests__/*.ts && git add -f __tests__/ ", | ||||
|     "format-check": "prettier --check **/src/*.ts **/__tests__/*.ts", | ||||
|     "lint": "eslint **/src/*.ts --cache --fix", | ||||
|     "format": "prettier --write **/src/*.ts && git add .", | ||||
|     "format-check": "prettier --check **/src/*.ts", | ||||
|     "release": "ncc build -o dist && git add -f dist/", | ||||
|     "test": "jest" | ||||
|   }, | ||||
| @ -34,29 +34,28 @@ | ||||
|   "author": "shivammathur", | ||||
|   "license": "MIT", | ||||
|   "dependencies": { | ||||
|     "@actions/core": "^1.10.0", | ||||
|     "@actions/core": "^1.6.0", | ||||
|     "@actions/exec": "^1.1.1", | ||||
|     "@actions/io": "^1.1.3", | ||||
|     "compare-versions": "^6.0.0" | ||||
|     "@actions/io": "^1.1.2", | ||||
|     "fs": "0.0.1-security" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@types/jest": "^29.5.3", | ||||
|     "@types/node": "^20.4.5", | ||||
|     "@typescript-eslint/eslint-plugin": "^6.2.0", | ||||
|     "@typescript-eslint/parser": "^6.2.0", | ||||
|     "@vercel/ncc": "^0.36.1", | ||||
|     "eslint": "^8.46.0", | ||||
|     "eslint-config-prettier": "^8.9.0", | ||||
|     "eslint-plugin-import": "^2.28.0", | ||||
|     "eslint-plugin-jest": "^27.2.3", | ||||
|     "eslint-plugin-prettier": "^5.0.0", | ||||
|     "jest": "^29.6.2", | ||||
|     "jest-circus": "^29.6.2", | ||||
|     "nock": "^13.3.2", | ||||
|     "prettier": "^3.0.0", | ||||
|     "simple-git-hooks": "^2.9.0", | ||||
|     "ts-jest": "^29.1.1", | ||||
|     "typescript": "^5.1.6" | ||||
|     "@types/jest": "^27.4.1", | ||||
|     "@types/node": "^17.0.23", | ||||
|     "@typescript-eslint/eslint-plugin": "^5.18.0", | ||||
|     "@typescript-eslint/parser": "^5.18.0", | ||||
|     "@vercel/ncc": "^0.33.3", | ||||
|     "eslint": "^8.13.0", | ||||
|     "eslint-config-prettier": "^8.5.0", | ||||
|     "eslint-plugin-import": "^2.26.0", | ||||
|     "eslint-plugin-jest": "^26.1.4", | ||||
|     "eslint-plugin-prettier": "^4.0.0", | ||||
|     "jest": "^27.5.1", | ||||
|     "jest-circus": "^27.5.1", | ||||
|     "prettier": "^2.6.2", | ||||
|     "simple-git-hooks": "^2.7.0", | ||||
|     "ts-jest": "^27.1.4", | ||||
|     "typescript": "^4.6.3" | ||||
|   }, | ||||
|   "bugs": { | ||||
|     "url": "https://github.com/shivammathur/setup-php/issues" | ||||
|  | ||||
| @ -9,16 +9,13 @@ export async function addINIValuesUnix( | ||||
|   ini_values_csv: string | ||||
| ): Promise<string> { | ||||
|   const ini_values: Array<string> = await utils.CSVArray(ini_values_csv); | ||||
|   let script = ''; | ||||
|   let script = '\n'; | ||||
|   await utils.asyncForEach(ini_values, async function (line: string) { | ||||
|     script += | ||||
|       '\n' + (await utils.addLog('$tick', line, 'Added to php.ini', 'linux')); | ||||
|       (await utils.addLog('$tick', line, 'Added to php.ini', 'linux')) + '\n'; | ||||
|   }); | ||||
|   return ( | ||||
|     'echo "' + | ||||
|     ini_values.join('\n') + | ||||
|     '" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null 2>&1' + | ||||
|     script | ||||
|     'echo "' + ini_values.join('\n') + '" >> ${pecl_file:-$ini_file}' + script | ||||
|   ); | ||||
| } | ||||
|  | ||||
| @ -37,7 +34,10 @@ export async function addINIValuesWindows( | ||||
|       (await utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n'; | ||||
|   }); | ||||
|   return ( | ||||
|     'Add-Content "$php_dir\\php.ini" "' + ini_values.join('\n') + '"' + script | ||||
|     'Add-Content C:\\tools\\php\\php.ini "' + | ||||
|     ini_values.join('\n') + | ||||
|     '"' + | ||||
|     script | ||||
|   ); | ||||
| } | ||||
|  | ||||
| @ -45,28 +45,28 @@ export async function addINIValuesWindows( | ||||
|  * Function to add custom ini values | ||||
|  * | ||||
|  * @param ini_values_csv | ||||
|  * @param os | ||||
|  * @param os_version | ||||
|  * @param no_step | ||||
|  */ | ||||
| export async function addINIValues( | ||||
|   ini_values_csv: string, | ||||
|   os: string, | ||||
|   os_version: string, | ||||
|   no_step = false | ||||
| ): Promise<string> { | ||||
|   let script = '\n'; | ||||
|   switch (no_step) { | ||||
|     case true: | ||||
|       script += | ||||
|         (await utils.stepLog('Add php.ini values', os)) + | ||||
|         (await utils.suppressOutput(os)) + | ||||
|         (await utils.stepLog('Add php.ini values', os_version)) + | ||||
|         (await utils.suppressOutput(os_version)) + | ||||
|         '\n'; | ||||
|       break; | ||||
|     case false: | ||||
|     default: | ||||
|       script += (await utils.stepLog('Add php.ini values', os)) + '\n'; | ||||
|       script += (await utils.stepLog('Add php.ini values', os_version)) + '\n'; | ||||
|       break; | ||||
|   } | ||||
|   switch (os) { | ||||
|   switch (os_version) { | ||||
|     case 'win32': | ||||
|       return script + (await addINIValuesWindows(ini_values_csv)); | ||||
|     case 'darwin': | ||||
| @ -74,8 +74,8 @@ export async function addINIValues( | ||||
|       return script + (await addINIValuesUnix(ini_values_csv)); | ||||
|     default: | ||||
|       return await utils.log( | ||||
|         'Platform ' + os + ' is not supported', | ||||
|         os, | ||||
|         'Platform ' + os_version + ' is not supported', | ||||
|         os_version, | ||||
|         'error' | ||||
|       ); | ||||
|   } | ||||
|  | ||||
| @ -1,44 +1,28 @@ | ||||
| amqp=amqp | ||||
| apcu=apcu | ||||
| ast=ast | ||||
| couchbase=couchbase | ||||
| ds=ds | ||||
| event=event | ||||
| expect=expect | ||||
| gearman=gearman | ||||
| gnupg=gnupg | ||||
| grpc=grpc | ||||
| igbinary=igbinary | ||||
| imagick=imagick | ||||
| imap=imap | ||||
| lua=lua | ||||
| mailparse=mailparse | ||||
| mcrypt=mcrypt | ||||
| memcache=memcache | ||||
| memcached=memcached | ||||
| mongodb=mongodb | ||||
| msgpack=msgpack | ||||
| pcov=pcov | ||||
| pdo_sqlsrv=pdo_sqlsrv | ||||
| pecl_http=http | ||||
| phalcon3=phalcon | ||||
| phalcon4=phalcon | ||||
| phalcon5=phalcon | ||||
| propro=propro | ||||
| protobuf=protobuf | ||||
| psr=psr | ||||
| raphf=raphf | ||||
| rdkafka=rdkafka | ||||
| redis=redis | ||||
| snmp=snmp | ||||
| sqlsrv=sqlsrv | ||||
| ssh2=ssh2 | ||||
| swoole=swoole | ||||
| uuid=uuid | ||||
| v8js=v8js | ||||
| vips=vips | ||||
| xdebug=xdebug | ||||
| xdebug2=xdebug | ||||
| xlswriter=xlswriter | ||||
| yaml=yaml | ||||
| zmq=zmq | ||||
|  | ||||
| @ -1,3 +0,0 @@ | ||||
| COMPOSER_PROCESS_TIMEOUT=0 | ||||
| COMPOSER_NO_INTERACTION=1 | ||||
| COMPOSER_NO_AUDIT=1 | ||||
| @ -1,3 +0,0 @@ | ||||
| opcache.enable=1 | ||||
| opcache.jit_buffer_size=256M | ||||
| opcache.jit=1235 | ||||
| @ -1,2 +0,0 @@ | ||||
| date.timezone=UTC | ||||
| memory_limit=-1 | ||||
| @ -1 +0,0 @@ | ||||
| xdebug.mode=coverage | ||||
| @ -1,30 +0,0 @@ | ||||
| apc=25 | ||||
| apcu_bc=25 | ||||
| apcu-bc=25 | ||||
| blackfire=30 | ||||
| couchbase=30 | ||||
| decimal=30 | ||||
| ds=30 | ||||
| event=30 | ||||
| grpc=30 | ||||
| http=25 | ||||
| pecl_http=25 | ||||
| pecl-http=25 | ||||
| psr=15 | ||||
| inotify=30 | ||||
| libvirt-php=40 | ||||
| mailparse=25 | ||||
| maxminddb=30 | ||||
| memcached=25 | ||||
| mysqlnd=10 | ||||
| mysqlnd_ms=30 | ||||
| opcache=10 | ||||
| pdo=10 | ||||
| phalcon=35 | ||||
| protobuf=30 | ||||
| psr=15 | ||||
| rdkafka=30 | ||||
| swoole=25 | ||||
| vips=30 | ||||
| xml=15 | ||||
| zstd=30 | ||||
| @ -1,19 +0,0 @@ | ||||
| 8,jessie | ||||
| 9,stretch | ||||
| 10,buster | ||||
| 11,bullseye | ||||
| 12,bookworm | ||||
| 13,trixie | ||||
| 16.04 LTS,xenial | ||||
| 16.10,yakkety | ||||
| 17.04,zesty | ||||
| 17.10,artful | ||||
| 18.04 LTS,bionic | ||||
| 18.10,cosmic | ||||
| 19.04,disco | ||||
| 19.10,eoan | ||||
| 20.04 LTS,focal | ||||
| 20.10,groovy | ||||
| 21.04,hirsute | ||||
| 21.10,impish | ||||
| 22.04,jammy | ||||
| 
 | 
| @ -1,7 +1,6 @@ | ||||
| { | ||||
|   "latest": "8.2", | ||||
|   "nightly": "8.3", | ||||
|   "latest": "8.0", | ||||
|   "5.x": "5.6", | ||||
|   "7.x": "7.4", | ||||
|   "8.x": "8.2" | ||||
|   "8.x": "8.0" | ||||
| } | ||||
| @ -1,11 +0,0 @@ | ||||
| cgi | ||||
| cli | ||||
| curl | ||||
| fpm | ||||
| intl | ||||
| mbstring | ||||
| mysql | ||||
| opcache | ||||
| pgsql | ||||
| xml | ||||
| zip | ||||
| @ -1,12 +0,0 @@ | ||||
| cgi | ||||
| cli | ||||
| curl | ||||
| dev | ||||
| fpm | ||||
| intl | ||||
| mbstring | ||||
| mysql | ||||
| opcache | ||||
| pgsql | ||||
| xml | ||||
| zip | ||||
| @ -1,29 +0,0 @@ | ||||
| { | ||||
|   "problemMatcher": [ | ||||
|     { | ||||
|       "owner": "php_native_error", | ||||
|       "severity": "error", | ||||
|       "pattern": [ | ||||
|         { | ||||
|           "regexp": "^(.*error):\\s+\\s+(.+) in (.+) on line (\\d+)$", | ||||
|           "code": 1, | ||||
|           "message": 2, | ||||
|           "file": 3, | ||||
|           "line": 4 | ||||
|         } | ||||
|       ] | ||||
|     }, { | ||||
|       "owner": "php_native_warning", | ||||
|       "severity": "warning", | ||||
|       "pattern": [ | ||||
|         { | ||||
|           "regexp": "^(.*Warning|.*Deprecated|.*Notice):\\s+\\s+(.+) in (.+) on line (\\d+)$", | ||||
|           "code": 1, | ||||
|           "message": 2, | ||||
|           "file": 3, | ||||
|           "line": 4 | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   ] | ||||
| } | ||||
| @ -1,304 +0,0 @@ | ||||
| { | ||||
|   "churn": { | ||||
|     "type": "phar", | ||||
|     "repository": "bmitch/churn-php", | ||||
|     "extension": ".phar", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "", | ||||
|     "version_parameter": "-V" | ||||
|   }, | ||||
|   "composer-unused": { | ||||
|     "type": "phar", | ||||
|     "repository": "composer-unused/composer-unused", | ||||
|     "extension": ".phar", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "", | ||||
|     "version_parameter": "-V" | ||||
|   }, | ||||
|   "composer-normalize": { | ||||
|     "type": "phar", | ||||
|     "repository": "ergebnis/composer-normalize", | ||||
|     "extension": ".phar", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "", | ||||
|     "version_parameter": "-V" | ||||
|   }, | ||||
|   "cs2pr": { | ||||
|     "type": "phar", | ||||
|     "repository": "staabm/annotate-pull-request-from-checkstyle", | ||||
|     "extension": "", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "", | ||||
|     "version_parameter": "-V" | ||||
|   }, | ||||
|   "infection": { | ||||
|     "type": "phar", | ||||
|     "repository": "infection/infection", | ||||
|     "extension": ".phar", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "", | ||||
|     "version_parameter": "-V" | ||||
|   }, | ||||
|   "phan": { | ||||
|     "type": "phar", | ||||
|     "repository": "phan/phan", | ||||
|     "extension": ".phar", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "", | ||||
|     "version_parameter": "-v" | ||||
|   }, | ||||
|   "parallel-lint": { | ||||
|     "type": "phar", | ||||
|     "repository": "php-parallel-lint/PHP-Parallel-Lint", | ||||
|     "extension": ".phar", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "v", | ||||
|     "version_parameter": "--version" | ||||
|   }, | ||||
|   "php-cs-fixer": { | ||||
|     "type": "phar", | ||||
|     "repository": "FriendsOfPHP/PHP-CS-Fixer", | ||||
|     "extension": ".phar", | ||||
|     "domain": "https://github.com", | ||||
|     "fetch_latest": "true", | ||||
|     "version_prefix": "v", | ||||
|     "version_parameter": "-V" | ||||
|   }, | ||||
|   "phpcbf": { | ||||
|     "type": "phar", | ||||
|     "repository": "squizlabs/PHP_CodeSniffer", | ||||
|     "extension": ".phar", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "", | ||||
|     "version_parameter": "--version" | ||||
|   }, | ||||
|   "phpcs": { | ||||
|     "type": "phar", | ||||
|     "repository": "squizlabs/PHP_CodeSniffer", | ||||
|     "extension": ".phar", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "", | ||||
|     "version_parameter": "--version" | ||||
|   }, | ||||
|   "phpDocumentor": { | ||||
|     "type": "phar", | ||||
|     "repository": "phpDocumentor/phpDocumentor", | ||||
|     "extension": ".phar", | ||||
|     "domain": "https://github.com", | ||||
|     "alias": "phpdoc", | ||||
|     "version_prefix": "v", | ||||
|     "version_parameter": "--version" | ||||
|   }, | ||||
|   "phpmd": { | ||||
|     "type": "phar", | ||||
|     "repository": "phpmd/phpmd", | ||||
|     "extension": ".phar", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "", | ||||
|     "version_parameter": "--version" | ||||
|   }, | ||||
|   "phpspec": { | ||||
|     "type": "phar", | ||||
|     "repository": "phpspec/phpspec", | ||||
|     "extension": ".phar", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "", | ||||
|     "version_parameter": "-V" | ||||
|   }, | ||||
|   "phpstan": { | ||||
|     "type": "phar", | ||||
|     "repository": "phpstan/phpstan", | ||||
|     "extension": ".phar", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "", | ||||
|     "version_parameter": "-V" | ||||
|   }, | ||||
|   "pint": { | ||||
|     "type": "phar", | ||||
|     "repository": "laravel/pint", | ||||
|     "extension": ".phar", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "v", | ||||
|     "version_parameter": "-V" | ||||
|   }, | ||||
|   "psalm": { | ||||
|     "type": "phar", | ||||
|     "repository": "vimeo/psalm", | ||||
|     "extension": ".phar", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "", | ||||
|     "version_parameter": "-v" | ||||
|   }, | ||||
|   "behat": { | ||||
|     "type": "composer", | ||||
|     "repository": "behat/behat", | ||||
|     "scope": "scoped" | ||||
|   }, | ||||
|   "codeception": { | ||||
|     "type": "composer", | ||||
|     "repository": "codeception/codeception", | ||||
|     "scope": "scoped" | ||||
|   }, | ||||
|   "automatic-composer-prefetcher": { | ||||
|     "type": "composer", | ||||
|     "alias": "composer-prefetcher", | ||||
|     "repository": "narrowspark/automatic-composer-prefetcher", | ||||
|     "scope": "global" | ||||
|   }, | ||||
|   "composer-require-checker": { | ||||
|     "type": "composer", | ||||
|     "repository": "maglnet/composer-require-checker", | ||||
|     "scope": "scoped" | ||||
|   }, | ||||
|   "flex": { | ||||
|     "type": "composer", | ||||
|     "repository": "symfony/flex", | ||||
|     "scope": "global" | ||||
|   }, | ||||
|   "phinx": { | ||||
|     "type": "composer", | ||||
|     "repository": "robmorgan/phinx", | ||||
|     "scope": "scoped" | ||||
|   }, | ||||
|   "phplint": { | ||||
|     "type": "composer", | ||||
|     "repository": "overtrue/phplint", | ||||
|     "scope": "scoped" | ||||
|   }, | ||||
|   "phpunit-bridge": { | ||||
|     "alias": "simple-phpunit", | ||||
|     "type": "composer", | ||||
|     "repository": "symfony/phpunit-bridge", | ||||
|     "scope": "global" | ||||
|   }, | ||||
|   "phpunit-polyfills": { | ||||
|     "type": "composer", | ||||
|     "repository": "yoast/phpunit-polyfills", | ||||
|     "scope": "global" | ||||
|   }, | ||||
|   "prestissimo": { | ||||
|     "type": "composer", | ||||
|     "repository": "hirak/prestissimo", | ||||
|     "scope": "global" | ||||
|   }, | ||||
|   "vapor-cli": { | ||||
|     "type": "composer", | ||||
|     "alias": "vapor", | ||||
|     "repository": "laravel/vapor-cli", | ||||
|     "scope": "scoped" | ||||
|   }, | ||||
|   "rector": { | ||||
|     "type": "composer", | ||||
|     "repository": "rector/rector", | ||||
|     "scope": "scoped" | ||||
|   }, | ||||
|   "blackfire": { | ||||
|     "type": "custom-package", | ||||
|     "alias": "blackfire-agent" | ||||
|   }, | ||||
|   "grpc_php_plugin": { | ||||
|     "type": "custom-package", | ||||
|     "repository": "grpc/grpc", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "v" | ||||
|   }, | ||||
|   "protoc": { | ||||
|     "type": "custom-package", | ||||
|     "repository": "protocolbuffers/protobuf", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "v" | ||||
|   }, | ||||
|   "symfony-cli": { | ||||
|     "alias": "symfony", | ||||
|     "type": "custom-package", | ||||
|     "repository": "symfony-cli/symfony-cli", | ||||
|     "domain": "https://github.com", | ||||
|     "version_prefix": "-V" | ||||
|   }, | ||||
|   "blackfire-player": { | ||||
|     "type": "custom-function", | ||||
|     "domain": "https://get.blackfire.io", | ||||
|     "function": "blackfire_player", | ||||
|     "version_prefix": "v", | ||||
|     "version_parameter": "-V" | ||||
|   }, | ||||
|   "castor": { | ||||
|     "type": "custom-function", | ||||
|     "domain": "https://github.com", | ||||
|     "repository": "jolicode/castor", | ||||
|     "function": "castor", | ||||
|     "version_prefix": "v", | ||||
|     "version_parameter": "-V" | ||||
|   }, | ||||
|   "composer": { | ||||
|     "type": "custom-function", | ||||
|     "domain": "https://getcomposer.org", | ||||
|     "repository": "composer/composer", | ||||
|     "function": "composer" | ||||
|   }, | ||||
|   "deployer": { | ||||
|     "type": "custom-function", | ||||
|     "domain": "https://deployer.org", | ||||
|     "repository": "deployphp/deployer", | ||||
|     "function": "deployer", | ||||
|     "version_prefix": "v", | ||||
|     "version_parameter": "-V" | ||||
|   }, | ||||
|   "pecl": { | ||||
|     "type": "custom-function", | ||||
|     "function": "pecl" | ||||
|   }, | ||||
|   "phing": { | ||||
|     "type": "custom-function", | ||||
|     "domain": "https://www.phing.info", | ||||
|     "repository": "phingofficial/phing", | ||||
|     "function": "phing", | ||||
|     "extension": ".phar", | ||||
|     "version_prefix": "", | ||||
|     "version_parameter": "-v" | ||||
|   }, | ||||
|   "phive": { | ||||
|     "type": "custom-function", | ||||
|     "repository": "phar-io/phive", | ||||
|     "domain": "https://github.com", | ||||
|     "function": "phive", | ||||
|     "version_prefix": "", | ||||
|     "version_parameter": "status" | ||||
|   }, | ||||
|   "phpcpd": { | ||||
|     "type": "custom-function", | ||||
|     "repository": "sebastianbergmann/phpcpd", | ||||
|     "domain": "https://phar.phpunit.de", | ||||
|     "function": "phpcpd", | ||||
|     "version_prefix": "", | ||||
|     "version_parameter": "--version" | ||||
|   }, | ||||
|   "phpunit": { | ||||
|     "type": "custom-function", | ||||
|     "repository": "sebastianbergmann/phpunit", | ||||
|     "packagist": "phpunit/phpunit", | ||||
|     "domain": "https://phar.phpunit.de", | ||||
|     "function": "phpunit", | ||||
|     "version_prefix": "", | ||||
|     "version_parameter": "--version" | ||||
|   }, | ||||
|   "phpize": { | ||||
|     "type": "custom-function", | ||||
|     "function": "dev_tools", | ||||
|     "alias": "php-config" | ||||
|   }, | ||||
|   "php-config": { | ||||
|     "type": "custom-function", | ||||
|     "function": "dev_tools" | ||||
|   }, | ||||
|   "wp-cli": { | ||||
|     "type": "custom-function", | ||||
|     "function": "wp_cli", | ||||
|     "repository": "wp-cli/wp-cli", | ||||
|     "domain": "https://github.com", | ||||
|     "alias": "wp", | ||||
|     "extension": ".phar", | ||||
|     "version_parameter": "--version", | ||||
|     "version_prefix": "v" | ||||
|   } | ||||
| } | ||||
| @ -1,136 +0,0 @@ | ||||
| { | ||||
|   "$schema": "http://json-schema.org/draft-07/schema#", | ||||
|   "$id": "https://raw.githubusercontent.com/shivammathur/setup-php/develop/src/configs/tools_schema.json", | ||||
|   "type": "object", | ||||
|   "title": "Tools", | ||||
|   "default": {}, | ||||
|   "examples": [ | ||||
|     { | ||||
|       "tool": { | ||||
|         "alias": "tool_alias", | ||||
|         "domain": "https://example.com", | ||||
|         "extension": ".ext", | ||||
|         "fetch_latest": "true", | ||||
|         "function": "function_name", | ||||
|         "repository": "user/tool", | ||||
|         "packagist": "user/tool", | ||||
|         "scope": "global, scoped", | ||||
|         "type": "phar, composer, custom-package or custom-function", | ||||
|         "version_parameter": "--version", | ||||
|         "version_prefix": "v" | ||||
|       } | ||||
|     } | ||||
|   ], | ||||
|   "items": { | ||||
|     "properties": { | ||||
|       "alias": { | ||||
|         "$id": "#/items/properties/alias", | ||||
|         "type": "string", | ||||
|         "title": "The alias schema", | ||||
|         "description": "Alias for a tool.", | ||||
|         "examples": [ | ||||
|           "tool_alias" | ||||
|         ] | ||||
|       }, | ||||
|       "domain": { | ||||
|         "$id": "#/items/properties/domain", | ||||
|         "type": "string", | ||||
|         "title": "The domain schema", | ||||
|         "description": "Domain URL of the tool.", | ||||
|         "examples": [ | ||||
|           "https://example.com" | ||||
|         ] | ||||
|       }, | ||||
|       "extension": { | ||||
|         "$id": "#/items/properties/extension", | ||||
|         "type": "string", | ||||
|         "title": "The extension schema", | ||||
|         "description": "File extension of the tool.", | ||||
|         "examples": [ | ||||
|           ".ext" | ||||
|         ] | ||||
|       }, | ||||
|       "fetch_latest": { | ||||
|         "$id": "#/items/properties/fetch_latest", | ||||
|         "type": "string", | ||||
|         "title": "The fetch_latest schema", | ||||
|         "description": "Fetch the latest version from GitHub releases.", | ||||
|         "enum": [ | ||||
|           "true", | ||||
|           "false" | ||||
|         ] | ||||
|       }, | ||||
|       "function": { | ||||
|         "$id": "#/items/properties/function", | ||||
|         "type": "string", | ||||
|         "title": "The function schema", | ||||
|         "description": "Function name in tools.ts which returns the script to setup the tool.", | ||||
|         "examples": [ | ||||
|           "function_name" | ||||
|         ] | ||||
|       }, | ||||
|       "repository": { | ||||
|         "$id": "#/items/properties/repository", | ||||
|         "type": "string", | ||||
|         "title": "The repository schema", | ||||
|         "description": "GitHub repository of the tool.", | ||||
|         "examples": [ | ||||
|           "user/tool" | ||||
|         ] | ||||
|       }, | ||||
|       "packagist": { | ||||
|         "$id": "#/items/properties/packagist", | ||||
|         "type": "string", | ||||
|         "title": "The repository schema", | ||||
|         "description": "Packagist repository of the tool in case different from repository.", | ||||
|         "examples": [ | ||||
|           "user/tool" | ||||
|         ] | ||||
|       }, | ||||
|       "scope": { | ||||
|         "$id": "#/items/properties/scope", | ||||
|         "type": "string", | ||||
|         "title": "The scope schema", | ||||
|         "description": "Scope of tool installation: global or scoped", | ||||
|         "enum": [ | ||||
|           "global", | ||||
|           "scoped" | ||||
|         ] | ||||
|       }, | ||||
|       "type": { | ||||
|         "$id": "#/items/properties/type", | ||||
|         "type": "string", | ||||
|         "title": "The type schema", | ||||
|         "description": "Type of tool: phar, composer, custom-package or custom-function.", | ||||
|         "enum": [ | ||||
|           "phar", | ||||
|           "composer", | ||||
|           "custom-package", | ||||
|           "custom-function" | ||||
|         ] | ||||
|       }, | ||||
|       "version_parameter": { | ||||
|         "$id": "#/items/properties/version_parameter", | ||||
|         "type": "string", | ||||
|         "title": "The version_parameter schema", | ||||
|         "description": "Parameter to get the tool version.", | ||||
|         "examples": [ | ||||
|           "--version" | ||||
|         ] | ||||
|       }, | ||||
|       "version_prefix": { | ||||
|         "$id": "#/items/properties/version_prefix", | ||||
|         "type": "string", | ||||
|         "title": "The version_prefix schema", | ||||
|         "description": "Prefix of the version in the download URL.", | ||||
|         "examples": [ | ||||
|           "v" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "required": [ | ||||
|       "type" | ||||
|     ], | ||||
|     "additionalProperties": true | ||||
|   } | ||||
| } | ||||
| @ -1,2 +0,0 @@ | ||||
| xdebug | ||||
| pcov | ||||
							
								
								
									
										149
									
								
								src/coverage.ts
									
									
									
									
									
								
							
							
						
						
									
										149
									
								
								src/coverage.ts
									
									
									
									
									
								
							| @ -2,92 +2,73 @@ import * as utils from './utils'; | ||||
| import * as extensions from './extensions'; | ||||
| import * as config from './config'; | ||||
|  | ||||
| export async function checkXdebugError( | ||||
|   extension: string, | ||||
|   version: string | ||||
| ): Promise<string> { | ||||
|   if ( | ||||
|     (/^5\.[3-6]$|^7\.[0-1]$/.test(version) && extension == 'xdebug3') || | ||||
|     (/^8\.[0-9]$/.test(version) && extension == 'xdebug2') | ||||
|   ) { | ||||
|     return extension + ' is not supported on PHP ' + version; | ||||
|   } | ||||
|   return ''; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Function to set up Xdebug | ||||
|  * | ||||
|  * @param extension | ||||
|  * @param version | ||||
|  * @param os | ||||
|  * @param pipe | ||||
|  */ | ||||
| export async function addCoverageXdebug( | ||||
|   extension: string, | ||||
|   version: string, | ||||
|   os: string, | ||||
|   os_version: string, | ||||
|   pipe: string | ||||
| ): Promise<string> { | ||||
|   let script = '\n'; | ||||
|   const error: string = await checkXdebugError(extension, version); | ||||
|   if (!error) { | ||||
|     script += | ||||
|       (await extensions.addExtension(':pcov:false', version, os, true)) + pipe; | ||||
|     extension = extension == 'xdebug3' ? 'xdebug' : extension; | ||||
|     script += | ||||
|       (await extensions.addExtension(extension, version, os, true)) + pipe; | ||||
|     script += await utils.setVariable( | ||||
|       'xdebug_version', | ||||
|       'php -r "echo phpversion(\'xdebug\');"', | ||||
|       os | ||||
|     ); | ||||
|     script += | ||||
|       (await utils.getCommand(os, 'extension_log')) + | ||||
|       'xdebug "Xdebug $xdebug_version enabled as coverage driver"'; | ||||
|   } else { | ||||
|     script += await utils.addLog('$cross', extension, error, os); | ||||
|   } | ||||
|   return script; | ||||
|   const xdebug = | ||||
|     (await extensions.addExtension(extension, version, os_version, true)) + | ||||
|     pipe; | ||||
|   const log = await utils.addLog( | ||||
|     '$tick', | ||||
|     extension, | ||||
|     'Xdebug enabled as coverage driver', | ||||
|     os_version | ||||
|   ); | ||||
|   return xdebug + '\n' + log; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Function to set up PCOV | ||||
|  * Function to setup PCOV | ||||
|  * | ||||
|  * @param version | ||||
|  * @param os | ||||
|  * @param os_version | ||||
|  * @param pipe | ||||
|  */ | ||||
| export async function addCoveragePCOV( | ||||
|   version: string, | ||||
|   os: string, | ||||
|   os_version: string, | ||||
|   pipe: string | ||||
| ): Promise<string> { | ||||
|   let script = '\n'; | ||||
|   switch (true) { | ||||
|   switch (version) { | ||||
|     default: | ||||
|       script += | ||||
|         (await extensions.addExtension(':xdebug:false', version, os, true)) + | ||||
|         pipe; | ||||
|         (await extensions.addExtension('pcov', version, os_version, true)) + | ||||
|         pipe + | ||||
|         '\n'; | ||||
|       script += | ||||
|         (await extensions.addExtension('pcov', version, os, true)) + pipe; | ||||
|       script += (await config.addINIValues('pcov.enabled=1', os, true)) + '\n'; | ||||
|       script += await utils.setVariable( | ||||
|         'pcov_version', | ||||
|         'php -r "echo phpversion(\'pcov\');"', | ||||
|         os | ||||
|       ); | ||||
|       script += | ||||
|         (await utils.getCommand(os, 'extension_log')) + | ||||
|         'pcov "PCOV $pcov_version enabled as coverage driver"'; | ||||
|       break; | ||||
|         (await config.addINIValues('pcov.enabled=1', os_version, true)) + '\n'; | ||||
|  | ||||
|     case /5\.[3-6]|7\.0/.test(version): | ||||
|       // add command to disable xdebug and enable pcov | ||||
|       switch (os_version) { | ||||
|         case 'linux': | ||||
|         case 'darwin': | ||||
|           script += 'remove_extension xdebug' + pipe + '\n'; | ||||
|           break; | ||||
|         case 'win32': | ||||
|           script += 'Remove-Extension xdebug' + pipe + '\n'; | ||||
|           break; | ||||
|       } | ||||
|  | ||||
|       // success | ||||
|       script += await utils.addLog( | ||||
|         '$tick', | ||||
|         'coverage: pcov', | ||||
|         'PCOV enabled as coverage driver', | ||||
|         os_version | ||||
|       ); | ||||
|       // version is not supported | ||||
|       break; | ||||
|     case '5.6': | ||||
|     case '7.0': | ||||
|       script += await utils.addLog( | ||||
|         '$cross', | ||||
|         'pcov', | ||||
|         'PHP 7.1 or newer is required', | ||||
|         os | ||||
|         os_version | ||||
|       ); | ||||
|       break; | ||||
|   } | ||||
| @ -99,20 +80,32 @@ export async function addCoveragePCOV( | ||||
|  * Function to disable Xdebug and PCOV | ||||
|  * | ||||
|  * @param version | ||||
|  * @param os | ||||
|  * @param os_version | ||||
|  * @param pipe | ||||
|  */ | ||||
| export async function disableCoverage( | ||||
|   version: string, | ||||
|   os: string, | ||||
|   os_version: string, | ||||
|   pipe: string | ||||
| ): Promise<string> { | ||||
|   let script = '\n'; | ||||
|   script += | ||||
|     (await extensions.addExtension(':pcov:false', version, os, true)) + pipe; | ||||
|   script += | ||||
|     (await extensions.addExtension(':xdebug:false', version, os, true)) + pipe; | ||||
|   script += await utils.addLog('$tick', 'none', 'Disabled Xdebug and PCOV', os); | ||||
|   switch (os_version) { | ||||
|     case 'linux': | ||||
|     case 'darwin': | ||||
|       script += 'remove_extension xdebug' + pipe + '\n'; | ||||
|       script += 'remove_extension pcov' + pipe + '\n'; | ||||
|       break; | ||||
|     case 'win32': | ||||
|       script += 'Remove-Extension xdebug' + pipe + '\n'; | ||||
|       script += 'Remove-Extension pcov' + pipe + '\n'; | ||||
|       break; | ||||
|   } | ||||
|   script += await utils.addLog( | ||||
|     '$tick', | ||||
|     'none', | ||||
|     'Disabled Xdebug and PCOV', | ||||
|     os_version | ||||
|   ); | ||||
|  | ||||
|   return script; | ||||
| } | ||||
| @ -122,27 +115,31 @@ export async function disableCoverage( | ||||
|  * | ||||
|  * @param coverage_driver | ||||
|  * @param version | ||||
|  * @param os | ||||
|  * @param os_version | ||||
|  */ | ||||
| export async function addCoverage( | ||||
|   coverage_driver: string, | ||||
|   version: string, | ||||
|   os: string | ||||
|   os_version: string | ||||
| ): Promise<string> { | ||||
|   coverage_driver = coverage_driver.toLowerCase(); | ||||
|   const script: string = '\n' + (await utils.stepLog('Setup Coverage', os)); | ||||
|   const pipe: string = (await utils.suppressOutput(os)) + '\n'; | ||||
|   const script: string = | ||||
|     '\n' + (await utils.stepLog('Setup Coverage', os_version)); | ||||
|   const pipe: string = await utils.suppressOutput(os_version); | ||||
|   switch (coverage_driver) { | ||||
|     case 'pcov': | ||||
|       return script + (await addCoveragePCOV(version, os, pipe)); | ||||
|       return script + (await addCoveragePCOV(version, os_version, pipe)); | ||||
|     case 'xdebug': | ||||
|     case 'xdebug2': | ||||
|     case 'xdebug3': | ||||
|       return ( | ||||
|         script + (await addCoverageXdebug(coverage_driver, version, os, pipe)) | ||||
|         script + (await addCoverageXdebug('xdebug', version, os_version, pipe)) | ||||
|       ); | ||||
|     case 'xdebug2': | ||||
|       return ( | ||||
|         script + (await addCoverageXdebug('xdebug2', version, os_version, pipe)) | ||||
|       ); | ||||
|     case 'none': | ||||
|       return script + (await disableCoverage(version, os, pipe)); | ||||
|       return script + (await disableCoverage(version, os_version, pipe)); | ||||
|     default: | ||||
|       return ''; | ||||
|   } | ||||
|  | ||||
| @ -1,3 +1,4 @@ | ||||
| import * as path from 'path'; | ||||
| import * as utils from './utils'; | ||||
|  | ||||
| /** | ||||
| @ -11,101 +12,55 @@ export async function addExtensionDarwin( | ||||
|   version: string | ||||
| ): Promise<string> { | ||||
|   const extensions: Array<string> = await utils.extensionArray(extension_csv); | ||||
|   let add_script = '\n'; | ||||
|   let remove_script = ''; | ||||
|   let script = '\n'; | ||||
|   await utils.asyncForEach(extensions, async function (extension: string) { | ||||
|     const version_extension: string = version + extension; | ||||
|     const [ext_name, ext_version]: string[] = extension.split('-'); | ||||
|     const ext_prefix = await utils.getExtensionPrefix(ext_name); | ||||
|  | ||||
|     const [extension_name, stability]: string[] = extension.split('-'); | ||||
|     const ext_prefix = await utils.getExtensionPrefix(extension_name); | ||||
|     const command_prefix = 'pecl_install '; | ||||
|     let command = ''; | ||||
|     switch (true) { | ||||
|       // match :extension | ||||
|       case /^:/.test(ext_name): | ||||
|         remove_script += '\ndisable_extension' + ext_name.replace(/:/g, ' '); | ||||
|       // match pre-release versions | ||||
|       case /.+-(beta|alpha|devel|snapshot)/.test(extension): | ||||
|         script += | ||||
|           '\nadd_unstable_extension ' + | ||||
|           extension_name + | ||||
|           ' ' + | ||||
|           stability + | ||||
|           ' ' + | ||||
|           ext_prefix; | ||||
|         return; | ||||
|       // Match none | ||||
|       case /^none$/.test(ext_name): | ||||
|         add_script += '\ndisable_all_shared'; | ||||
|         return; | ||||
|       // match extensions for compiling from source | ||||
|       case /.+-.+\/.+@.+/.test(extension): | ||||
|         add_script += await utils.parseExtensionSource(extension, ext_prefix); | ||||
|         return; | ||||
|       // match 7.4relay...8.3relay | ||||
|       // match 5.3blackfire...8.2blackfire | ||||
|       // match 5.3blackfire-(semver)...8.1blackfire-(semver) | ||||
|       // match couchbase, event, geos, pdo_oci, oci8, http, pecl_http | ||||
|       // match 5.3ioncube...7.4ioncube | ||||
|       // match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, and 7.4phalcon5...8.2phalcon5 | ||||
|       // match 7.0zephir_parser...8.2zephir_parser | ||||
|       case /^(7\.4|8\.[0-3])relay(-v?\d+\.\d+\.\d+)?$/.test(version_extension): | ||||
|       case /^(5\.[3-6]|7\.[0-4]|8\.[0-2])blackfire(-\d+\.\d+\.\d+)?$/.test( | ||||
|       // match 5.6 to 8.0 amqp, expect, grpc, igbinary, imagick, imap, mongodb, msgpack, pecl_http, propro, protobuf, raphf, rdkafka, redis, ssh2, swoole, xdebug, xdebug2, yaml, zmq | ||||
|       // match 7.1pcov to 8.0pcov | ||||
|       // match 7.0vips to 8.0vips | ||||
|       case /(5\.6|7\.[0-4]|8.0)(amqp|expect|grpc|igbinary|imagick|imap|mcrypt|mongodb|msgpack|^(pecl_)?http$|propro|protobuf|psr|raphf|rdkafka|redis|ssh2|swoole|xdebug|xdebug2|yaml|zmq)/.test( | ||||
|         version_extension | ||||
|       ): | ||||
|       case /^couchbase|^event|^gearman$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test( | ||||
|         extension | ||||
|       ): | ||||
|       case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension): | ||||
|       case /(5\.6|7\.[0-3])phalcon3|7\.[2-4]phalcon4|(7\.4|8\.[0-2])phalcon5/.test( | ||||
|       case /(7\.[1-4]|8\.0])pcov/.test(version_extension): | ||||
|       case /^(5\.6|7\.[0-3])phalcon3$|^7\.[2-4]phalcon4$/.test( | ||||
|         version_extension | ||||
|       ): | ||||
|       case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension): | ||||
|       case /^(7\.[0-4]|8\.[0-2])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test( | ||||
|         version_extension | ||||
|       ): | ||||
|         add_script += await utils.customPackage( | ||||
|           ext_name, | ||||
|           'extensions', | ||||
|           extension, | ||||
|           'darwin' | ||||
|         ); | ||||
|         return; | ||||
|       // match pre-release versions. For example - xdebug-beta | ||||
|       case /.+-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(extension): | ||||
|         add_script += await utils.joins( | ||||
|           '\nadd_unstable_extension', | ||||
|           ext_name, | ||||
|           ext_version, | ||||
|           ext_prefix | ||||
|         ); | ||||
|         return; | ||||
|       // match semver | ||||
|       case /.+-\d+(\.\d+\.\d+.*)?/.test(extension): | ||||
|         add_script += await utils.joins( | ||||
|           '\nadd_pecl_extension', | ||||
|           ext_name, | ||||
|           ext_version, | ||||
|           ext_prefix | ||||
|         ); | ||||
|         return; | ||||
|       // match 5.3pcov to 7.0pcov | ||||
|       case /(5\.[3-6]|7\.0)pcov/.test(version_extension): | ||||
|         add_script += await utils.getUnsupportedLog('pcov', version, 'darwin'); | ||||
|         return; | ||||
|       // match brew extensions | ||||
|       case /(?<!5\.[3-5])(amqp|apcu|expect|gnupg|grpc|igbinary|imagick|imap|mailparse|mcrypt|memcache|memcached|mongodb|msgpack|protobuf|psr|raphf|rdkafka|redis|snmp|ssh2|swoole|uuid|xdebug|xdebug2|yaml|zmq)/.test( | ||||
|         version_extension | ||||
|       ): | ||||
|       case /(?<!5\.[3-6])(ds|v8js)/.test(version_extension): | ||||
|       case /(5\.6|7\.[0-4])(propro|lua)/.test(version_extension): | ||||
|       case /(?<!5\.[3-6]|7\.0)pcov/.test(version_extension): | ||||
|       case /(?<!5\.[3-6])(ast|vips|xlswriter)/.test(version_extension): | ||||
|         add_script += await utils.joins( | ||||
|           '\nadd_brew_extension', | ||||
|           ext_name, | ||||
|           ext_prefix | ||||
|         ); | ||||
|         return; | ||||
|       case /(7\.[0-4]|8\.0])vips/.test(version_extension): | ||||
|         command = 'add_brew_extension ' + extension_name.replace('pecl_', ''); | ||||
|         break; | ||||
|       // match sqlite | ||||
|       case /^sqlite$/.test(extension): | ||||
|         extension = 'sqlite3'; | ||||
|         command = command_prefix + extension; | ||||
|         break; | ||||
|       default: | ||||
|         command = command_prefix + extension; | ||||
|         break; | ||||
|     } | ||||
|     add_script += await utils.joins('\nadd_extension', extension, ext_prefix); | ||||
|     script += | ||||
|       '\nadd_extension ' + | ||||
|       extension + | ||||
|       ' "' + | ||||
|       command + | ||||
|       '" ' + | ||||
|       (await utils.getExtensionPrefix(extension)); | ||||
|   }); | ||||
|   return add_script + remove_script; | ||||
|   return script; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @ -119,114 +74,52 @@ export async function addExtensionWindows( | ||||
|   version: string | ||||
| ): Promise<string> { | ||||
|   const extensions: Array<string> = await utils.extensionArray(extension_csv); | ||||
|   let add_script = '\n'; | ||||
|   let remove_script = ''; | ||||
|   let script = '\n'; | ||||
|   await utils.asyncForEach(extensions, async function (extension: string) { | ||||
|     const [ext_name, ext_version]: string[] = extension.split('-'); | ||||
|     const [extension_name, stability]: string[] = extension.split('-'); | ||||
|     const version_extension: string = version + extension; | ||||
|     let matches: RegExpExecArray; | ||||
|     switch (true) { | ||||
|       // Match :extension | ||||
|       case /^:/.test(ext_name): | ||||
|         remove_script += '\nDisable-Extension' + ext_name.replace(/:/g, ' '); | ||||
|       // match pre-release versions | ||||
|       case /.+-(beta|alpha|devel|snapshot)/.test(extension): | ||||
|         script += '\nAdd-Extension ' + extension_name + ' ' + stability; | ||||
|         break; | ||||
|       // Match none | ||||
|       case /^none$/.test(ext_name): | ||||
|         add_script += '\nDisable-AllShared'; | ||||
|         break; | ||||
|       // match 5.3blackfire...8.2blackfire | ||||
|       // match 5.3blackfire-(semver)...8.1blackfire-(semver) | ||||
|       // match pdo_oci and oci8 | ||||
|       // match 5.3ioncube...7.4ioncube | ||||
|       // match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, and 7.4phalcon5...8.2phalcon5 | ||||
|       // match 7.1pecl_http...8.1pecl_http and 7.1http...8.1http | ||||
|       // match 7.0zephir_parser...8.2zephir_parser | ||||
|       case /^(5\.[3-6]|7\.[0-4]|8\.[0-2])blackfire(-\d+\.\d+\.\d+)?$/.test( | ||||
|         version_extension | ||||
|       ): | ||||
|       case /^pdo_oci$|^oci8$|^pdo_firebird$/.test(extension): | ||||
|       case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension): | ||||
|       case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$|^(7\.4|8\.[0-2])phalcon5$/.test( | ||||
|         version_extension | ||||
|       ): | ||||
|       case /^(7\.[1-4]|8\.1)(pecl_)?http/.test(version_extension): | ||||
|       case /^(7\.[0-4]|8\.[0-2])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test( | ||||
|         version_extension | ||||
|       ): | ||||
|         add_script += await utils.customPackage( | ||||
|           ext_name, | ||||
|           'extensions', | ||||
|           extension, | ||||
|           'win32' | ||||
|         ); | ||||
|         return; | ||||
|       // match pre-release versions. For example - xdebug-beta | ||||
|       case /.+-(stable|beta|alpha|devel|snapshot)/.test(extension): | ||||
|         add_script += await utils.joins( | ||||
|           '\nAdd-Extension', | ||||
|           ext_name, | ||||
|           ext_version.replace('stable', '') | ||||
|         ); | ||||
|         break; | ||||
|       // match extensions for compiling from source | ||||
|       case /.+-.+\/.+@.+/.test(extension): | ||||
|         add_script += await utils.getUnsupportedLog( | ||||
|           extension, | ||||
|           version, | ||||
|           'win32' | ||||
|         ); | ||||
|         break; | ||||
|       // match semver with state | ||||
|       case /.+-\d+\.\d+\.\d+[a-zA-Z]+\d*/.test(extension): | ||||
|         matches = /.+-(\d+\.\d+\.\d+)([a-zA-Z]+)\d*/.exec( | ||||
|           version_extension | ||||
|         ) as RegExpExecArray; | ||||
|         add_script += await utils.joins( | ||||
|           '\nAdd-Extension', | ||||
|           ext_name, | ||||
|           matches[2].replace('preview', 'devel'), | ||||
|           matches[1] | ||||
|         ); | ||||
|         break; | ||||
|       // match semver without state | ||||
|       case /.+-\d+(\.\d+\.\d+.*)?/.test(extension): | ||||
|         add_script += await utils.joins( | ||||
|           '\nAdd-Extension', | ||||
|           ext_name, | ||||
|           'stable', | ||||
|           ext_version | ||||
|         ); | ||||
|       // match 5.6mysql, 5.6mysqli, 5.6mysqlnd | ||||
|       case /^5\.6(mysql|mysqli|mysqlnd)$/.test(version_extension): | ||||
|         script += | ||||
|           '\nAdd-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd'; | ||||
|         break; | ||||
|       // match 7.2xdebug2 to 7.4xdebug2 | ||||
|       case /7\.[2-4]xdebug2/.test(version_extension): | ||||
|         add_script += '\nAdd-Extension xdebug stable 2.9.8'; | ||||
|         script += '\nAdd-Extension xdebug stable 2.9.8'; | ||||
|         break; | ||||
|       // match 5.3pcov to 7.0pcov | ||||
|       case /(5\.[3-6]|7\.0)pcov/.test(version_extension): | ||||
|         add_script += await utils.getUnsupportedLog('pcov', version, 'win32'); | ||||
|         break; | ||||
|       // match 5.3 to 5.6 - mysql, mysqli, mysqlnd | ||||
|       case /^5\.[3-6](?<!pdo_)(mysql|mysqli|mysqlnd)$/.test(version_extension): | ||||
|         add_script += | ||||
|           '\nAdd-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd'; | ||||
|         break; | ||||
|       // match 7.0 and newer mysql, mysqli and mysqlnd | ||||
|       case /(?<!5\.[3-6])(?<!pdo_)(mysql|mysqli|mysqlnd)$/.test( | ||||
|         version_extension | ||||
|       ): | ||||
|         add_script += '\nAdd-Extension mysqli\nAdd-Extension mysqlnd'; | ||||
|       // match 7.0mysql..8.0mysql | ||||
|       // match 7.0mysqli..8.0mysqli | ||||
|       // match 7.0mysqlnd..8.0mysqlnd | ||||
|       case /[7-8]\.\d(mysql|mysqli|mysqlnd)$/.test(version_extension): | ||||
|         script += '\nAdd-Extension mysqli\nAdd-Extension mysqlnd'; | ||||
|         break; | ||||
|       // match sqlite | ||||
|       case /^sqlite$/.test(extension): | ||||
|         extension = 'sqlite3'; | ||||
|         add_script += await utils.joins('\nAdd-Extension', extension); | ||||
|         script += '\nAdd-Extension ' + extension; | ||||
|         break; | ||||
|       // match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4 | ||||
|       case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension): | ||||
|         script += | ||||
|           '\n& ' + | ||||
|           path.join(__dirname, '../src/scripts/ext/phalcon.ps1') + | ||||
|           ' ' + | ||||
|           extension + | ||||
|           ' ' + | ||||
|           version + | ||||
|           '\n'; | ||||
|         break; | ||||
|       default: | ||||
|         add_script += '\nAdd-Extension ' + extension; | ||||
|         script += '\nAdd-Extension ' + extension; | ||||
|         break; | ||||
|     } | ||||
|   }); | ||||
|   return add_script + remove_script; | ||||
|   return script; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @ -234,114 +127,69 @@ export async function addExtensionWindows( | ||||
|  * | ||||
|  * @param extension_csv | ||||
|  * @param version | ||||
|  * @param pipe | ||||
|  */ | ||||
| export async function addExtensionLinux( | ||||
|   extension_csv: string, | ||||
|   version: string | ||||
|   version: string, | ||||
|   pipe: string | ||||
| ): Promise<string> { | ||||
|   const extensions: Array<string> = await utils.extensionArray(extension_csv); | ||||
|   let add_script = '\n'; | ||||
|   let remove_script = ''; | ||||
|   let script = '\n'; | ||||
|   await utils.asyncForEach(extensions, async function (extension: string) { | ||||
|     const version_extension: string = version + extension; | ||||
|     const [ext_name, ext_version]: string[] = extension | ||||
|       .split(/-(.+)/) | ||||
|       .filter(Boolean); | ||||
|     const ext_prefix = await utils.getExtensionPrefix(ext_name); | ||||
|  | ||||
|     const [extension_name, stability]: string[] = extension.split('-'); | ||||
|     const ext_prefix = await utils.getExtensionPrefix(extension_name); | ||||
|     const command_prefix = 'sudo $debconf_fix apt-get install -y php'; | ||||
|     let command = ''; | ||||
|     switch (true) { | ||||
|       // Match :extension | ||||
|       case /^:/.test(ext_name): | ||||
|         remove_script += '\ndisable_extension' + ext_name.replace(/:/g, ' '); | ||||
|       // match pre-release versions | ||||
|       case /.+-(beta|alpha|devel|snapshot)/.test(extension): | ||||
|         script += | ||||
|           '\nadd_unstable_extension ' + | ||||
|           extension_name + | ||||
|           ' ' + | ||||
|           stability + | ||||
|           ' ' + | ||||
|           ext_prefix; | ||||
|         return; | ||||
|       // Match none | ||||
|       case /^none$/.test(ext_name): | ||||
|         add_script += '\ndisable_all_shared'; | ||||
|       // match 5.6gearman..7.4gearman | ||||
|       case /^((5\.6)|(7\.[0-4]))gearman$/.test(version_extension): | ||||
|         script += | ||||
|           '\n. ' + path.join(__dirname, '../src/scripts/ext/gearman.sh'); | ||||
|         return; | ||||
|       // match extensions for compiling from source | ||||
|       case /.+-.+\/.+@.+/.test(extension): | ||||
|         add_script += await utils.parseExtensionSource(extension, ext_prefix); | ||||
|       // match 7.0phalcon3...7.3phalcon3 or 7.2phalcon4...7.4phalcon4 | ||||
|       case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension): | ||||
|         script += | ||||
|           '\nbash ' + | ||||
|           path.join(__dirname, '../src/scripts/ext/phalcon.sh') + | ||||
|           ' ' + | ||||
|           extension + | ||||
|           ' ' + | ||||
|           version; | ||||
|         return; | ||||
|       // match 7.4relay...8.3relay | ||||
|       // match 5.3blackfire...8.2blackfire | ||||
|       // match 5.3blackfire-(semver)...8.1blackfire-(semver) | ||||
|       // match 5.3pdo_cubrid...7.2php_cubrid, 5.3cubrid...7.4cubrid | ||||
|       // match couchbase, geos, pdo_oci, oci8, http, pecl_http | ||||
|       // match 5.3ioncube...7.4ioncube | ||||
|       // match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, 7.4phalcon5...8.2phalcon5 | ||||
|       // match 7.0zephir_parser...8.2zephir_parser | ||||
|       case /^(7\.4|8\.[0-3])relay(-v?\d+\.\d+\.\d+)?$/.test(version_extension): | ||||
|       case /^(5\.[3-6]|7\.[0-4]|8\.[0-2])blackfire(-\d+\.\d+\.\d+)?$/.test( | ||||
|         version_extension | ||||
|       ): | ||||
|       case /^((5\.[3-6])|(7\.[0-2]))pdo_cubrid$|^((5\.[3-6])|(7\.[0-4]))cubrid$/.test( | ||||
|         version_extension | ||||
|       ): | ||||
|       case /^couchbase|^event|^gearman$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test( | ||||
|         extension | ||||
|       ): | ||||
|       case /(?<!5\.[3-5])intl-\d+\.\d+$/.test(version_extension): | ||||
|       case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension): | ||||
|       case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$|^(7\.4|8\.[0-2])phalcon5$/.test( | ||||
|         version_extension | ||||
|       ): | ||||
|       case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension): | ||||
|       case /^(7\.[0-4]|8\.[0-2])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test( | ||||
|         version_extension | ||||
|       ): | ||||
|         add_script += await utils.customPackage( | ||||
|           ext_name, | ||||
|           'extensions', | ||||
|           extension, | ||||
|           'linux' | ||||
|         ); | ||||
|         return; | ||||
|       // match pre-release versions. For example - xdebug-beta | ||||
|       case /.+-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(extension): | ||||
|         add_script += await utils.joins( | ||||
|           '\nadd_unstable_extension', | ||||
|           ext_name, | ||||
|           ext_version, | ||||
|           ext_prefix | ||||
|         ); | ||||
|         return; | ||||
|       // match semver versions | ||||
|       case /.+-\d+(\.\d+\.\d+.*)?/.test(extension): | ||||
|         add_script += await utils.joins( | ||||
|           '\nadd_pecl_extension', | ||||
|           ext_name, | ||||
|           ext_version, | ||||
|           ext_prefix | ||||
|         ); | ||||
|         return; | ||||
|       // match 5.3pcov to 7.0pcov | ||||
|       case /(5\.[3-6]|7\.0)pcov/.test(version_extension): | ||||
|         add_script += await utils.getUnsupportedLog('pcov', version, 'linux'); | ||||
|         return; | ||||
|       // match 7.2xdebug2...7.4xdebug2 | ||||
|       // match 7.2xdebug2 to 7.4xdebug2 | ||||
|       case /^7\.[2-4]xdebug2$/.test(version_extension): | ||||
|         add_script += await utils.joins( | ||||
|           '\nadd_pecl_extension', | ||||
|           'xdebug', | ||||
|           '2.9.8', | ||||
|           ext_prefix | ||||
|         ); | ||||
|         return; | ||||
|       // match pdo extensions | ||||
|       case /^pdo[_-].+/.test(extension): | ||||
|         extension = extension.replace(/pdo[_-]|3/, ''); | ||||
|         add_script += '\nadd_pdo_extension ' + extension; | ||||
|         script += '\nadd_pecl_extension xdebug 2.9.8 ' + ext_prefix; | ||||
|         return; | ||||
|       // match sqlite | ||||
|       case /^sqlite$/.test(extension): | ||||
|         extension = 'sqlite3'; | ||||
|         command = command_prefix + version + '-' + extension + pipe; | ||||
|         break; | ||||
|       default: | ||||
|         command = | ||||
|           command_prefix + | ||||
|           version + | ||||
|           '-' + | ||||
|           extension.replace('pdo_', '').replace('pdo-', '') + | ||||
|           pipe; | ||||
|         break; | ||||
|     } | ||||
|     add_script += await utils.joins('\nadd_extension', extension, ext_prefix); | ||||
|     script += | ||||
|       '\nadd_extension ' + extension + ' "' + command + '" ' + ext_prefix; | ||||
|   }); | ||||
|   return add_script + remove_script; | ||||
|   return script; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @ -349,38 +197,38 @@ export async function addExtensionLinux( | ||||
|  * | ||||
|  * @param extension_csv | ||||
|  * @param version | ||||
|  * @param os | ||||
|  * @param os_version | ||||
|  * @param no_step | ||||
|  */ | ||||
| export async function addExtension( | ||||
|   extension_csv: string, | ||||
|   version: string, | ||||
|   os: string, | ||||
|   os_version: string, | ||||
|   no_step = false | ||||
| ): Promise<string> { | ||||
|   const log: string = await utils.stepLog('Setup Extensions', os); | ||||
|   const pipe: string = await utils.suppressOutput(os_version); | ||||
|   let script = '\n'; | ||||
|   switch (no_step) { | ||||
|     case true: | ||||
|       script += log + (await utils.suppressOutput(os)); | ||||
|       script += (await utils.stepLog('Setup Extensions', os_version)) + pipe; | ||||
|       break; | ||||
|     case false: | ||||
|     default: | ||||
|       script += log; | ||||
|       script += await utils.stepLog('Setup Extensions', os_version); | ||||
|       break; | ||||
|   } | ||||
|  | ||||
|   switch (os) { | ||||
|   switch (os_version) { | ||||
|     case 'win32': | ||||
|       return script + (await addExtensionWindows(extension_csv, version)); | ||||
|     case 'darwin': | ||||
|       return script + (await addExtensionDarwin(extension_csv, version)); | ||||
|     case 'linux': | ||||
|       return script + (await addExtensionLinux(extension_csv, version)); | ||||
|       return script + (await addExtensionLinux(extension_csv, version, pipe)); | ||||
|     default: | ||||
|       return await utils.log( | ||||
|         'Platform ' + os + ' is not supported', | ||||
|         os, | ||||
|         'Platform ' + os_version + ' is not supported', | ||||
|         os_version, | ||||
|         'error' | ||||
|       ); | ||||
|   } | ||||
|  | ||||
							
								
								
									
										55
									
								
								src/fetch.ts
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								src/fetch.ts
									
									
									
									
									
								
							| @ -1,55 +0,0 @@ | ||||
| import {IncomingMessage, OutgoingHttpHeaders} from 'http'; | ||||
| import * as https from 'https'; | ||||
| import * as url from 'url'; | ||||
|  | ||||
| /** | ||||
|  * Function to fetch a URL | ||||
|  * | ||||
|  * @param input_url | ||||
|  * @param auth_token | ||||
|  * @param redirect_count | ||||
|  */ | ||||
| export async function fetch( | ||||
|   input_url: string, | ||||
|   auth_token?: string, | ||||
|   redirect_count = 5 | ||||
| ): Promise<Record<string, string>> { | ||||
|   const fetch_promise: Promise<Record<string, string>> = new Promise( | ||||
|     resolve => { | ||||
|       const url_object: url.UrlObject = new url.URL(input_url); | ||||
|       const headers: OutgoingHttpHeaders = { | ||||
|         'User-Agent': `Mozilla/5.0 (${process.platform} ${process.arch}) setup-php` | ||||
|       }; | ||||
|       if (auth_token) { | ||||
|         headers.authorization = 'Bearer ' + auth_token; | ||||
|       } | ||||
|       const options: https.RequestOptions = { | ||||
|         hostname: url_object.hostname, | ||||
|         path: url_object.pathname, | ||||
|         headers: headers | ||||
|       }; | ||||
|       const req = https.get(options, (res: IncomingMessage) => { | ||||
|         if (res.statusCode === 200) { | ||||
|           let body = ''; | ||||
|           res.setEncoding('utf8'); | ||||
|           res.on('data', chunk => (body += chunk)); | ||||
|           res.on('end', () => resolve({data: `${body}`})); | ||||
|         } else if ( | ||||
|           [301, 302, 303, 307, 308].includes(res.statusCode as number) | ||||
|         ) { | ||||
|           if (redirect_count > 0 && res.headers.location) { | ||||
|             fetch(res.headers.location, auth_token, redirect_count--).then( | ||||
|               resolve | ||||
|             ); | ||||
|           } else { | ||||
|             resolve({error: `${res.statusCode}: Redirect error`}); | ||||
|           } | ||||
|         } else { | ||||
|           resolve({error: `${res.statusCode}: ${res.statusMessage}`}); | ||||
|         } | ||||
|       }); | ||||
|       req.end(); | ||||
|     } | ||||
|   ); | ||||
|   return await fetch_promise; | ||||
| } | ||||
| @ -1,5 +1,3 @@ | ||||
| import path from 'path'; | ||||
| import fs from 'fs'; | ||||
| import {exec} from '@actions/exec'; | ||||
| import * as core from '@actions/core'; | ||||
| import * as config from './config'; | ||||
| @ -11,51 +9,91 @@ import * as utils from './utils'; | ||||
| /** | ||||
|  * Build the script | ||||
|  * | ||||
|  * @param os | ||||
|  * @param filename | ||||
|  * @param version | ||||
|  * @param os_version | ||||
|  */ | ||||
| export async function getScript(os: string): Promise<string> { | ||||
|   const url = 'https://setup-php.com/support-ukraine'; | ||||
|   const filename = os + (await utils.scriptExtension(os)); | ||||
|   const script_path = path.join(__dirname, '../src/scripts', filename); | ||||
|   const run_path = script_path.replace(os, 'run'); | ||||
|   process.env['fail_fast'] = await utils.getInput('fail-fast', false); | ||||
|   const extension_csv: string = await utils.getInput('extensions', false); | ||||
|   const ini_values_csv: string = await utils.getInput('ini-values', false); | ||||
| export async function build( | ||||
|   filename: string, | ||||
|   version: string, | ||||
|   os_version: string | ||||
| ): Promise<string> { | ||||
|   // taking inputs | ||||
|   const name = 'setup-php'; | ||||
|   const url = 'https://setup-php.com/support'; | ||||
|   const extension_csv: string = | ||||
|     (await utils.getInput('extensions', false)) || | ||||
|     (await utils.getInput('extension', false)) || | ||||
|     (await utils.getInput('extension-csv', false)); | ||||
|   const ini_values_csv: string = | ||||
|     (await utils.getInput('ini-values', false)) || | ||||
|     (await utils.getInput('ini-values-csv', false)); | ||||
|   const coverage_driver: string = await utils.getInput('coverage', false); | ||||
|   const tools_csv: string = await utils.getInput('tools', false); | ||||
|   const version: string = await utils.parseVersion( | ||||
|     await utils.readPHPVersion() | ||||
|   ); | ||||
|   const ini_file: string = await utils.parseIniFile( | ||||
|     await utils.getInput('ini-file', false) | ||||
|   ); | ||||
|   let script = await utils.joins('.', script_path, version, ini_file); | ||||
|  | ||||
|   let script: string = await utils.readScript(filename); | ||||
|   script += await tools.addTools(tools_csv, version, os_version); | ||||
|  | ||||
|   if (extension_csv) { | ||||
|     script += await extensions.addExtension(extension_csv, version, os); | ||||
|     script += await extensions.addExtension(extension_csv, version, os_version); | ||||
|   } | ||||
|   script += await tools.addTools(tools_csv, version, os); | ||||
|   if (coverage_driver) { | ||||
|     script += await coverage.addCoverage(coverage_driver, version, os); | ||||
|     script += await coverage.addCoverage(coverage_driver, version, os_version); | ||||
|   } | ||||
|   if (ini_values_csv) { | ||||
|     script += await config.addINIValues(ini_values_csv, os); | ||||
|     script += await config.addINIValues(ini_values_csv, os_version); | ||||
|   } | ||||
|   script += '\n' + (await utils.stepLog(`#StandWithUkraine`, os)); | ||||
|   script += '\n' + (await utils.addLog('$tick', 'read-more', url, os)); | ||||
|  | ||||
|   fs.writeFileSync(run_path, script, {mode: 0o755}); | ||||
|   script += '\n' + (await utils.stepLog('Support this project', os_version)); | ||||
|   script += '\n' + (await utils.addLog('$tick', name, url, os_version)); | ||||
|  | ||||
|   return run_path; | ||||
|   return await utils.writeScript(filename, script); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Run the script | ||||
|  */ | ||||
| export async function run(): Promise<void> { | ||||
|   const os: string = process.platform; | ||||
|   const tool = await utils.scriptTool(os); | ||||
|   const run_path = await getScript(os); | ||||
|   await exec(tool + run_path); | ||||
|   try { | ||||
|     if ((await utils.readEnv('ImageOS')) == 'ubuntu16') { | ||||
|       core.setFailed( | ||||
|         'setup-php is not supported on Ubuntu 16.04. Please upgrade to Ubuntu 18.04 or Ubuntu 20.04 - https://setup-php.com/i/452' | ||||
|       ); | ||||
|       return; | ||||
|     } | ||||
|     core.warning( | ||||
|       'setup-php v1 is deprecated.\nPlease upgrade to v2 - https://setup-php.com/w/Switch-to-v2' | ||||
|     ); | ||||
|     const version: string = await utils.parseVersion( | ||||
|       await utils.getInput('php-version', true) | ||||
|     ); | ||||
|     if (parseFloat(version) < 5.6 || parseFloat(version) > 8.0) { | ||||
|       core.setFailed( | ||||
|         `setup-php v1 supports only PHP 5.6 to 8.0.\nPlease upgrade to v2 - https://setup-php.com/w/Switch-to-v2` | ||||
|       ); | ||||
|       return; | ||||
|     } | ||||
|     if (version) { | ||||
|       const os_version: string = process.platform; | ||||
|       // check the os version and run the respective script | ||||
|       let script_path = ''; | ||||
|       switch (os_version) { | ||||
|         case 'darwin': | ||||
|         case 'linux': | ||||
|           script_path = await build(os_version + '.sh', version, os_version); | ||||
|           await exec('bash ' + script_path + ' ' + version + ' ' + __dirname); | ||||
|           break; | ||||
|         case 'win32': | ||||
|           script_path = await build('win32.ps1', version, os_version); | ||||
|           await exec('pwsh ' + script_path + ' ' + version + ' ' + __dirname); | ||||
|           break; | ||||
|       } | ||||
|     } else { | ||||
|       core.setFailed('Unable to get the PHP version'); | ||||
|     } | ||||
|   } catch (error) { | ||||
|     core.setFailed(error as Error); | ||||
|   } | ||||
| } | ||||
|  | ||||
| // call the run function | ||||
|  | ||||
| @ -1,37 +0,0 @@ | ||||
| import * as cv from 'compare-versions'; | ||||
| import * as fetch from './fetch'; | ||||
|  | ||||
| type RS = Record<string, string>; | ||||
| type RSRS = Record<string, RS>; | ||||
|  | ||||
| export async function search( | ||||
|   package_name: string, | ||||
|   php_version: string | ||||
| ): Promise<string | null> { | ||||
|   const response = await fetch.fetch( | ||||
|     `https://repo.packagist.org/p2/${package_name}.json` | ||||
|   ); | ||||
|   if (response.error || response.data === '[]') { | ||||
|     return null; | ||||
|   } | ||||
|  | ||||
|   const data = JSON.parse(response['data']); | ||||
|   if (data && data.packages) { | ||||
|     const versions = data.packages[package_name]; | ||||
|     versions.sort((a: RS, b: RS) => cv.compareVersions(b.version, a.version)); | ||||
|  | ||||
|     const result = versions.find((versionData: RSRS) => { | ||||
|       if (versionData?.require?.php) { | ||||
|         return versionData?.require?.php | ||||
|           .split('|') | ||||
|           .some( | ||||
|             require => require && cv.satisfies(php_version + '.0', require) | ||||
|           ); | ||||
|       } | ||||
|       return false; | ||||
|     }); | ||||
|  | ||||
|     return result ? result.version : null; | ||||
|   } | ||||
|   return null; | ||||
| } | ||||
| @ -1,99 +1,242 @@ | ||||
| # Disable dependency extensions | ||||
| disable_dependency_extensions() { | ||||
|   local extension=$1 | ||||
|   formula_file="${tap_dir:?}/$ext_tap/Formula/$extension@${version:?}.rb" | ||||
|   if [ -e "$formula_file" ]; then | ||||
|     IFS=" " read -r -a dependency_extensions <<< "$(grep -Eo "shivammathur.*@" "$formula_file" | xargs -I {} -n 1 basename '{}' | cut -d '@' -f 1 | tr '\n' ' ')" | ||||
|     for dependency_extension in "${dependency_extensions[@]}"; do | ||||
|       sudo sed -Ei '' "/=(.*\/)?\"?$dependency_extension(.so)?$/d" "${ini_file:?}" | ||||
|     done | ||||
| # Function to log start of a operation | ||||
| step_log() { | ||||
|   message=$1 | ||||
|   printf "\n\033[90;1m==> \033[0m\033[37;1m%s\033[0m\n" "$message" | ||||
| } | ||||
|  | ||||
| # Function to log result of a operation | ||||
| add_log() { | ||||
|   mark=$1 | ||||
|   subject=$2 | ||||
|   message=$3 | ||||
|   if [ "$mark" = "$tick" ]; then | ||||
|     printf "\033[32;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message" | ||||
|   else | ||||
|     printf "\033[31;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Helper function to disable an extension. | ||||
| disable_extension_helper() { | ||||
| # Function to remove extensions | ||||
| remove_extension() { | ||||
|   local extension=$1 | ||||
|   local disable_dependents=${2:-false} | ||||
|   get_extension_map | ||||
|   if [ "$disable_dependents" = "true" ]; then | ||||
|     disable_extension_dependents "$extension" | ||||
|   sudo sed -Ei '' "/=(.*\/)?\"?$extension/d" "$ini_file" | ||||
|   sudo rm -rf "$scan_dir"/*"$extension"* >/dev/null 2>&1 | ||||
|   sudo rm -rf "$ext_dir"/"$extension".so >/dev/null 2>&1 | ||||
| } | ||||
|  | ||||
| # Function to test if extension is loaded | ||||
| check_extension() { | ||||
|   local extension=$1 | ||||
|   if [ "$extension" != "mysql" ]; then | ||||
|     php -m | grep -i -q -w "$extension" | ||||
|   else | ||||
|     php -m | grep -i -q "$extension" | ||||
|   fi | ||||
|   sudo sed -Ei '' "/=(.*\/)?\"?$extension(.so)?$/d" "${ini_file:?}" | ||||
|   sudo rm -rf "$scan_dir"/*"$extension"* /tmp/php"$version"_extensions | ||||
|   mkdir -p /tmp/extdisabled/"$version" | ||||
|   echo '' | sudo tee /tmp/extdisabled/"$version"/"$extension" >/dev/null 2>&1 | ||||
| } | ||||
|  | ||||
| # Function to get extension name from brew formula. | ||||
| get_extension_from_formula() { | ||||
|   local formula=$1 | ||||
|   local extension | ||||
|   extension=$(grep -E "^$formula=" "$src"/configs/brew_extensions | cut -d '=' -f 2) | ||||
|   [[ -z "$extension" ]] && extension="$(echo "$formula" | sed -E "s/pecl_|[0-9]//g")" | ||||
|   echo "$extension" | ||||
| # Function to install PECL extensions and accept default options | ||||
| pecl_install() { | ||||
|   local extension=$1 | ||||
|   yes '' | sudo pecl install -f "$extension" >/dev/null 2>&1 | ||||
| } | ||||
|  | ||||
| # Function to copy extension binaries to the extension directory. | ||||
| copy_brew_extensions() { | ||||
|   local formula=$1 | ||||
|   formula_file="$tap_dir/$ext_tap/Formula/$formula@$version.rb" | ||||
|   deps="$(grep -Eo 'depends_on "shivammathur[^"]+' "$formula_file" | cut -d '/' -f 3 | tr '\n' ' ')" | ||||
|   IFS=' ' read -r -a deps <<< "$formula@$version $deps" | ||||
|   for dependency in "${deps[@]}"; do | ||||
|     extension_file="${brew_prefix:?}/opt/$dependency/$(get_extension_from_formula "${dependency%@*}").so" | ||||
|     [ -e "$extension_file" ] && sudo cp "$extension_file" "$ext_dir" | ||||
|   done | ||||
|   sudo find -- "$brew_prefix"/Cellar/"$formula"@"$version" -name "*.dylib" -exec cp {} "$ext_dir" \; | ||||
| # Function to get the PECL version | ||||
| get_pecl_version() { | ||||
|   local extension=$1 | ||||
|   stability="$(echo "$2" | grep -m 1 -Eio "(alpha|beta|rc|snapshot|preview)")" | ||||
|   pecl_rest='https://pecl.php.net/rest/r/' | ||||
|   response=$(curl "${curl_opts[@]}" "$pecl_rest$extension"/allreleases.xml) | ||||
|   pecl_version=$(echo "$response" | grep -m 1 -Eio "([0-9]+\.[0-9]+\.[0-9]+${stability}[0-9]+)") | ||||
|   if [ ! "$pecl_version" ]; then | ||||
|     pecl_version=$(echo "$response" | grep -m 1 -Eo "([0-9]+\.[0-9]+\.[0-9]+)") | ||||
|   fi | ||||
|   echo "$pecl_version" | ||||
| } | ||||
|  | ||||
| # Function to install a PECL version | ||||
| add_pecl_extension() { | ||||
|   local extension=$1 | ||||
|   pecl_version=$2 | ||||
|   prefix=$3 | ||||
|   if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot|preview).* ]]; then | ||||
|     pecl_version=$(get_pecl_version "$extension" "$pecl_version") | ||||
|   fi | ||||
|   if ! check_extension "$extension" && [ -e "$ext_dir/$extension.so" ]; then | ||||
|     echo "$prefix=$ext_dir/$extension.so" >>"$ini_file" | ||||
|   fi | ||||
|   ext_version=$(php -r "echo phpversion('$extension');") | ||||
|   if [ "$ext_version" = "$pecl_version" ]; then | ||||
|     add_log "$tick" "$extension" "Enabled" | ||||
|   else | ||||
|     remove_extension "$extension" | ||||
|     ( | ||||
|       pecl_install "$extension-$pecl_version" >/dev/null 2>&1 && | ||||
|       check_extension "$extension" && | ||||
|       add_log "$tick" "$extension" "Installed and enabled" | ||||
|     ) || add_log "$cross" "$extension" "Could not install $extension-$pecl_version on PHP $semver" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to fetch a brew tap | ||||
| fetch_brew_tap() { | ||||
|   tap=$1 | ||||
|   tap_user=$(dirname "$tap") | ||||
|   tap_name=$(basename "$tap") | ||||
|   mkdir -p "$tap_dir/$tap_user" | ||||
|   sudo curl "${curl_opts[@]}" "https://github.com/$tap/archive/master.tar.gz" | sudo tar -xzf - -C "$tap_dir/$tap_user" | ||||
|   if [ -d "$tap_dir/$tap_user/$tap_name-master" ]; then | ||||
|     sudo mv "$tap_dir/$tap_user/$tap_name-master" "$tap_dir/$tap_user/$tap_name" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to add a brew tap. | ||||
| add_brew_tap() { | ||||
|   tap=$1 | ||||
|   if ! [ -d "$tap_dir/$tap" ]; then | ||||
|     fetch_brew_tap "$tap" >/dev/null 2>&1 | ||||
|     if ! [ -d "$tap_dir/$tap" ]; then | ||||
|       brew tap "$tap" >/dev/null 2>&1 | ||||
|     fi | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to install a php extension from shivammathur/extensions tap. | ||||
| add_brew_extension() { | ||||
|   formula=$1 | ||||
|   prefix=$2 | ||||
|   extension="$(get_extension_from_formula "$formula")" | ||||
|   enable_extension "$extension" "$prefix" | ||||
|   if check_extension "$extension"; then | ||||
|     add_log "${tick:?}" "$extension" "Enabled" | ||||
|   else | ||||
|     add_brew_tap "$php_tap" | ||||
|     add_brew_tap "$ext_tap" | ||||
|     sudo mv "$tap_dir"/"$ext_tap"/.github/deps/"$formula"/* "${core_repo:?}/Formula/" 2>/dev/null || true | ||||
|     update_dependencies >/dev/null 2>&1 | ||||
|     disable_dependency_extensions "$extension" >/dev/null 2>&1 | ||||
|     brew install -f "$ext_tap/$formula@$version" >/dev/null 2>&1 | ||||
|     copy_brew_extensions "$formula" | ||||
|     add_extension_log "$extension" "Installed and enabled" | ||||
|   fi | ||||
|   extension=$(grep "$formula=" "$dist"/../src/configs/brew_extensions | cut -d '=' -f 2) | ||||
|   [[ -z "$extension" ]] && extension="$(echo "$formula" | sed -E "s/pecl_|[0-9]//g")" | ||||
|   add_brew_tap shivammathur/homebrew-php | ||||
|   add_brew_tap shivammathur/homebrew-extensions | ||||
|   sudo mv "$tap_dir"/shivammathur/homebrew-extensions/.github/deps/"$formula"/* "$tap_dir/homebrew/homebrew-core/Formula/" 2>/dev/null || true | ||||
|   brew install "$formula@$version" | ||||
|   sudo cp "$brew_prefix/opt/$formula@$version/$extension.so" "$ext_dir" | ||||
| } | ||||
|  | ||||
| # Helper function to add an extension. | ||||
| add_extension_helper() { | ||||
| # Function to setup extensions | ||||
| add_extension() { | ||||
|   local extension=$1 | ||||
|   prefix=$2 | ||||
|   if [[ "$version" =~ ${old_versions:?} ]] && [ "$extension" = "imagick" ]; then | ||||
|     run_script "php5-darwin" "${version/./}" "$extension" >/dev/null 2>&1 | ||||
|   else | ||||
|     pecl_install "$extension" >/dev/null 2>&1 && | ||||
|     if [[ "$version" =~ ${old_versions:?} ]]; then echo "$prefix=$ext_dir/$extension.so" >>"$ini_file"; fi | ||||
|   install_command=$2 | ||||
|   prefix=$3 | ||||
|   if ! check_extension "$extension" && [ -e "$ext_dir/$extension.so" ]; then | ||||
|     echo "$prefix=$ext_dir/$extension.so" >>"$ini_file" && add_log "$tick" "$extension" "Enabled" | ||||
|   elif check_extension "$extension"; then | ||||
|     add_log "$tick" "$extension" "Enabled" | ||||
|   elif ! check_extension "$extension"; then | ||||
|     ( | ||||
|       eval "$install_command" >/dev/null 2>&1 && | ||||
|       check_extension "$extension" && | ||||
|       add_log "$tick" "$extension" "Installed and enabled" | ||||
|     ) || add_log "$cross" "$extension" "Could not install $extension on PHP $semver" | ||||
|   fi | ||||
|   add_extension_log "$extension" "Installed and enabled" | ||||
| } | ||||
|  | ||||
| # Function to handle request to add phpize and php-config. | ||||
| add_devtools() { | ||||
| # Function to pre-release extensions using PECL | ||||
| add_unstable_extension() { | ||||
|   local extension=$1 | ||||
|   stability=$2 | ||||
|   prefix=$3 | ||||
|   pecl_version=$(get_pecl_version "$extension" "$stability") | ||||
|   add_pecl_extension "$extension" "$pecl_version" "$prefix" | ||||
| } | ||||
|  | ||||
| # Function to configure composer | ||||
| configure_composer() { | ||||
|   tool_path=$1 | ||||
|   sudo ln -sf "$tool_path" "$tool_path.phar" | ||||
|   php -r "try {\$p=new Phar('$tool_path.phar', 0);exit(0);} catch(Exception \$e) {exit(1);}" | ||||
|   if [ $? -eq 1 ]; then | ||||
|     add_log "$cross" "composer" "Could not download composer" | ||||
|     exit 1; | ||||
|   fi | ||||
|   if ! [ -d "$composer_home" ]; then | ||||
|     sudo -u "$(id -un)" -g "$(id -gn)" mkdir -p -m=00755 "$composer_home" | ||||
|   else | ||||
|     sudo chown -R "$(id -un)":"$(id -gn)" "$composer_home" | ||||
|   fi | ||||
|   if ! [ -e "$composer_json" ]; then | ||||
|     echo '{}' | tee "$composer_json" >/dev/null | ||||
|     chmod 644 "$composer_json" | ||||
|   fi | ||||
|   composer -q config -g process-timeout 0 | ||||
|   echo "$composer_bin" >> "$GITHUB_PATH" | ||||
|   if [ -n "$COMPOSER_TOKEN" ]; then | ||||
|     composer -q config -g github-oauth.github.com "$COMPOSER_TOKEN" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to setup a remote tool. | ||||
| add_tool() { | ||||
|   url=$1 | ||||
|   tool=$2 | ||||
|   tool_path="$tool_path_dir/$tool" | ||||
|   if [ ! -e "$tool_path" ]; then | ||||
|     rm -rf "$tool_path" | ||||
|   fi | ||||
|   if [ "$tool" = "composer" ]; then | ||||
|     IFS="," read -r -a urls <<< "$url" | ||||
|     status_code=$(sudo curl -f -w "%{http_code}" -o "$tool_path" "${curl_opts[@]}" "${urls[0]}") || | ||||
|     status_code=$(sudo curl -w "%{http_code}" -o "$tool_path" "${curl_opts[@]}" "${urls[1]}") | ||||
|   else | ||||
|     status_code=$(sudo curl -w "%{http_code}" -o "$tool_path" "${curl_opts[@]}" "$url") | ||||
|   fi | ||||
|   if [ "$status_code" != "200" ] && [[ "$url" =~ .*github.com.*releases.*latest.* ]]; then | ||||
|     url="${url//releases\/latest\/download/releases/download/$(curl "${curl_opts[@]}" "$(echo "$url" | cut -d '/' -f '1-5')/releases" | grep -Eo -m 1 "([0-9]+\.[0-9]+\.[0-9]+)/$(echo "$url" | sed -e "s/.*\///")" | cut -d '/' -f 1)}" | ||||
|     status_code=$(sudo curl -w "%{http_code}" -o "$tool_path" "${curl_opts[@]}" "$url") | ||||
|   fi | ||||
|   if [ "$status_code" = "200" ]; then | ||||
|     sudo chmod a+x "$tool_path" | ||||
|     if [ "$tool" = "composer" ]; then | ||||
|       configure_composer "$tool_path" | ||||
|     elif [ "$tool" = "phan" ]; then | ||||
|       add_extension fileinfo "pecl_install fileinfo" extension >/dev/null 2>&1 | ||||
|       add_extension ast "pecl_install ast" extension >/dev/null 2>&1 | ||||
|     elif [ "$tool" = "phive" ]; then | ||||
|       add_extension curl "pecl_install curl" extension >/dev/null 2>&1 | ||||
|       add_extension mbstring "pecl_install mbstring" extension >/dev/null 2>&1 | ||||
|       add_extension xml "pecl_install xml" extension >/dev/null 2>&1 | ||||
|     elif [ "$tool" = "cs2pr" ]; then | ||||
|       sudo sed -i '' 's/exit(9)/exit(0)/' "$tool_path" | ||||
|       tr -d '\r' < "$tool_path" | sudo tee "$tool_path.tmp" >/dev/null 2>&1 && sudo mv "$tool_path.tmp" "$tool_path" | ||||
|       sudo chmod a+x "$tool_path" | ||||
|     fi | ||||
|     add_log "$tick" "$tool" "Added" | ||||
|   else | ||||
|     add_log "$cross" "$tool" "Could not setup $tool" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to add a tool using composer | ||||
| add_composertool() { | ||||
|   tool=$1 | ||||
|   add_log "${tick:?}" "$tool" "Added $tool $semver" | ||||
|   release=$2 | ||||
|   prefix=$3 | ||||
|   ( | ||||
|     sudo rm -f "$composer_lock" >/dev/null 2>&1 || true | ||||
|     composer global require "$prefix$release" >/dev/null 2>&1 && | ||||
|     add_log "$tick" "$tool" "Added" | ||||
|   ) || add_log "$cross" "$tool" "Could not setup $tool" | ||||
|   if [ -e "$composer_bin/composer" ]; then | ||||
|     sudo cp -p "$tool_path_dir/composer" "$composer_bin" | ||||
|   fi | ||||
|   if [ "$tool" = "codeception" ]; then | ||||
|     sudo ln -s "$composer_bin"/codecept "$composer_bin"/codeception | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to handle request to add PECL. | ||||
| # Function to configure PECL | ||||
| configure_pecl() { | ||||
|   for tool in pear pecl; do | ||||
|     sudo "$tool" config-set php_ini "$ini_file" >/dev/null 2>&1 | ||||
|     sudo "$tool" channel-update "$tool".php.net >/dev/null 2>&1 | ||||
|   done | ||||
| } | ||||
|  | ||||
| # Function to log PECL, it is installed along with PHP | ||||
| add_pecl() { | ||||
|   enable_extension xml extension >/dev/null 2>&1 | ||||
|   configure_pecl >/dev/null 2>&1 | ||||
|   pear_version=$(get_tool_version "pecl" "version") | ||||
|   add_log "${tick:?}" "PECL" "Found PECL $pear_version" | ||||
|   add_log "$tick" "PECL" "Added" | ||||
| } | ||||
|  | ||||
| # Function to link all libraries of a formula. | ||||
| # Function to backup all libraries of a formula | ||||
| link_libraries() { | ||||
|   formula=$1 | ||||
|   formula_prefix="$(brew --prefix "$formula")" | ||||
| @ -104,18 +247,8 @@ link_libraries() { | ||||
|   done | ||||
| } | ||||
|  | ||||
| # Link opcache extension to extensions directory. | ||||
| link_opcache() { | ||||
|   opcache_ini="$brew_prefix"/etc/php/"$version"/conf.d/ext-opcache.ini | ||||
|   if [ -e "$opcache_ini" ]; then | ||||
|     opcache_ext=$(grep -Eo "zend_extension.*opcache.*\.so" "$opcache_ini" | cut -d '"' -f 2) | ||||
|     sudo ln -sf "$opcache_ext" "$ext_dir" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Patch brew to overwrite packages. | ||||
| patch_brew() { | ||||
|   formula_installer="${brew_repo:?}"/Library/Homebrew/formula_installer.rb | ||||
|   formula_installer="$brew_repo"/Library/Homebrew/formula_installer.rb | ||||
|   code=" keg.link\(verbose: verbose\?" | ||||
|   sudo sed -Ei '' "s/$code.*/$code, overwrite: true\)/" "$formula_installer" | ||||
|   # shellcheck disable=SC2064 | ||||
| @ -125,156 +258,92 @@ patch_brew() { | ||||
| # Helper function to update the dependencies. | ||||
| update_dependencies_helper() { | ||||
|   dependency=$1 | ||||
|   get -q -n "$core_repo/Formula/$dependency.rb" "https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/$dependency.rb" | ||||
|   curl -o "$tap_dir/homebrew/homebrew-core/Formula/$formula.rb" "${curl_opts[@]}" "https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/$formula.rb" | ||||
|   link_libraries "$dependency" | ||||
| } | ||||
|  | ||||
| # Function to update dependencies. | ||||
| # Function to update dependencies | ||||
| update_dependencies() { | ||||
|   patch_brew | ||||
|   if ! [ -e /tmp/update_dependencies ]; then | ||||
|     if [ "${runner:?}" != "self-hosted" ] && [ "${ImageOS:-}" != "" ] && [ "${ImageVersion:-}" != "" ]; then | ||||
|       deps_file="$tap_dir/$php_tap/.github/deps/${ImageOS:?}_${ImageVersion:?}" | ||||
|       if [ -e "$deps_file" ]; then | ||||
|         while read -r dependency; do | ||||
|           update_dependencies_helper "$dependency" & | ||||
|           to_wait+=($!) | ||||
|         done <"$deps_file" | ||||
|       fi | ||||
|     if [ "${ImageOS:-}" != "" ] && [ "${ImageVersion:-}" != "" ]; then | ||||
|       patch_brew | ||||
|       while read -r dependency; do | ||||
|         update_dependencies_helper "$dependency" & | ||||
|         to_wait+=($!) | ||||
|       done <"$tap_dir/shivammathur/homebrew-php/.github/deps/${ImageOS:?}_${ImageVersion:?}" | ||||
|       wait "${to_wait[@]}" | ||||
|     else | ||||
|       git -C "$core_repo" fetch origin master && git -C "$core_repo" reset --hard origin/master | ||||
|     fi | ||||
|     echo '' | sudo tee /tmp/update_dependencies >/dev/null 2>&1 | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to fix dependencies on install PHP version. | ||||
| fix_dependencies() { | ||||
|   broken_deps_paths=$(php -v 2>&1 | grep -Eo '/opt/[a-zA-Z0-9@\.]+') | ||||
|   if [ "x$broken_deps_paths" != "x" ]; then | ||||
|     update_dependencies | ||||
|     IFS=" " read -r -a formulae <<< "$(echo "$broken_deps_paths" | tr '\n' ' ' | sed 's|/opt/||g' 2>&1)$php_formula" | ||||
|     brew reinstall "${formulae[@]}" | ||||
|     brew link --force --overwrite "$php_formula" || true | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to get PHP version if it is already installed using Homebrew. | ||||
| get_brewed_php() { | ||||
|   php_cellar="$brew_prefix"/Cellar/php | ||||
|   if [ -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-config --version 2>/dev/null | cut -c 1-3 | ||||
|   else | ||||
|     echo 'false'; | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to setup PHP 5.6 and newer using Homebrew. | ||||
| add_php() { | ||||
|   action=$1 | ||||
|   existing_version=$2 | ||||
|   add_brew_tap "$php_tap" | ||||
|   update_dependencies | ||||
|   [ "${debug:?}" = "debug" ] && php_formula="$php_formula-debug" | ||||
|   if [ "$existing_version" != "false" ]; then | ||||
|     ([ "$action" = "upgrade" ] && brew upgrade -f "$php_formula") || brew unlink "$php_formula" | ||||
|   else | ||||
|     brew install -f "$php_formula" | ||||
|   fi | ||||
|   brew link --force --overwrite "$php_formula" | ||||
| } | ||||
|  | ||||
| # Function to get extra version. | ||||
| php_extra_version() { | ||||
|   php_formula_file="$tap_dir"/"$php_tap"/Formula/php@"$version".rb | ||||
|   if [ -e "$php_formula_file" ] && ! grep -q "deprecate!" "$php_formula_file" && grep -Eq "archive/[0-9a-zA-Z]+" "$php_formula_file"; then | ||||
|     echo " ($(grep -Eo "archive/[0-9a-zA-Z]+" "$php_formula_file" | cut -d'/' -f 2))" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to set php.ini | ||||
| add_php_config() { | ||||
|   if ! [ -e "$ini_dir"/php.ini-development ]; then | ||||
|     sudo cp "$ini_dir"/php.ini "$ini_dir"/php.ini-development | ||||
|   fi | ||||
|   if [[ "$ini" = "production" || "$ini" = "development" ]]; then | ||||
|     sudo cp "$ini_dir"/php.ini-"$ini" "$ini_dir"/php.ini | ||||
|   elif [ "$ini" = "none" ]; then | ||||
|     echo '' | sudo tee "${ini_file[@]}" >/dev/null 2>&1 | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to get scan directory. | ||||
| get_scan_dir() { | ||||
|   if [[ "$version" =~ ${old_versions:?} ]]; then | ||||
|     php --ini | grep additional | sed -e "s|.*: s*||" | ||||
|   else | ||||
|     echo "$ini_dir"/conf.d | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to Setup PHP. | ||||
| # Function to setup PHP and composer | ||||
| setup_php() { | ||||
|   step_log "Setup PHP" | ||||
|   php_config="$(command -v php-config 2>/dev/null)" | ||||
|   existing_version=$(get_brewed_php) | ||||
|   if [[ "$version" =~ ${old_versions:?} ]]; then | ||||
|     run_script "php5-darwin" "${version/./}" >/dev/null 2>&1 | ||||
|     status="Installed" | ||||
|   elif [ "$existing_version" != "$version" ]; then | ||||
|     add_php "install" "$existing_version" >/dev/null 2>&1 | ||||
|     status="Installed" | ||||
|   elif [ "$existing_version" = "$version" ] && [ "${update:?}" = "true" ]; then | ||||
|     add_php "upgrade" "$existing_version" >/dev/null 2>&1 | ||||
|     status="Updated to" | ||||
|   else | ||||
|     status="Found" | ||||
|     fix_dependencies >/dev/null 2>&1 | ||||
|   fi | ||||
|   php_config="$(command -v php-config)" | ||||
|   ext_dir="$(grep 'extension_dir=' "$php_config" | cut -d "'" -f 2)" | ||||
|   ini_dir="$(php_ini_path)" | ||||
|   scan_dir="$(get_scan_dir)" | ||||
|   ini_file="$ini_dir"/php.ini | ||||
|   sudo mkdir -m 777 -p "$ext_dir" "$HOME/.composer" | ||||
|   sudo chmod 777 "$ini_file" "${tool_path_dir:?}" | ||||
|   semver="$(php_semver)" | ||||
|   extra_version="$(php_extra_version)" | ||||
|   configure_php | ||||
|   link_opcache | ||||
|   set_output "php-version" "$semver" | ||||
|   if [ "${semver%.*}" != "$version" ]; then | ||||
|     add_log "${cross:?}" "PHP" "Could not setup PHP $version" | ||||
|     exit 1 | ||||
|   fi | ||||
|   add_brew_tap shivammathur/homebrew-php | ||||
|   update_dependencies | ||||
|   brew upgrade shivammathur/php/php@"$version" 2>/dev/null || brew install shivammathur/php/php@"$version" | ||||
|   brew link --force --overwrite php@"$version" | ||||
| } | ||||
|  | ||||
|   sudo cp "$src"/configs/pm/*.json "$RUNNER_TOOL_CACHE/" | ||||
|   add_log "$tick" "PHP" "$status PHP $semver$extra_version" | ||||
| # Function to configure PHP | ||||
| configure_php() { | ||||
|   ( | ||||
|     echo -e "date.timezone=UTC\nmemory_limit=-1" | ||||
|     [[ "$version" =~ 8.0 ]] && echo -e "opcache.enable=1\nopcache.jit_buffer_size=256M\nopcache.jit=1235" | ||||
|     [[ "$version" =~ 7.[2-4]|8.0 ]] && echo -e "xdebug.mode=coverage" | ||||
|   ) | sudo tee -a "$ini_file" >/dev/null | ||||
| } | ||||
|  | ||||
| # Variables | ||||
| version=${1:-'8.2'} | ||||
| ini=${2:-'production'} | ||||
| src=${0%/*}/.. | ||||
| php_formula=shivammathur/php/php@"$version" | ||||
| scripts="$src"/scripts | ||||
| ext_tap=shivammathur/homebrew-extensions | ||||
| php_tap=shivammathur/homebrew-php | ||||
| tick="✓" | ||||
| cross="✗" | ||||
| version=$1 | ||||
| dist=$2 | ||||
| tool_path_dir="/usr/local/bin" | ||||
| curl_opts=(-sL) | ||||
| composer_home="$HOME/.composer" | ||||
| composer_bin="$composer_home/vendor/bin" | ||||
| composer_json="$composer_home/composer.json" | ||||
| composer_lock="$composer_home/composer.lock" | ||||
| brew_prefix="$(brew --prefix)" | ||||
| brew_repo="$(brew --repository)" | ||||
| tap_dir="$brew_repo"/Library/Taps | ||||
| existing_version=$(get_brewed_php) | ||||
| export HOMEBREW_CHANGE_ARCH_TO_ARM=1 | ||||
| export HOMEBREW_DEVELOPER=1 | ||||
| export HOMEBREW_NO_AUTO_UPDATE=1 | ||||
| export HOMEBREW_NO_ENV_HINTS=1 | ||||
| export HOMEBREW_NO_INSTALL_CLEANUP=1 | ||||
| export HOMEBREW_NO_AUTO_UPDATE=1 | ||||
| export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 | ||||
|  | ||||
| # shellcheck source=. | ||||
| . "${scripts:?}"/unix.sh | ||||
| . "${scripts:?}"/tools/brew.sh | ||||
| . "${scripts:?}"/tools/add_tools.sh | ||||
| . "${scripts:?}"/extensions/source.sh | ||||
| . "${scripts:?}"/extensions/add_extensions.sh | ||||
| configure_brew | ||||
| read_env | ||||
| self_hosted_setup | ||||
| setup_php | ||||
| # Setup PHP | ||||
| step_log "Setup PHP" | ||||
| if [ "$existing_version" != "$version" ]; then | ||||
|   setup_php >/dev/null 2>&1 | ||||
|   status="Installed" | ||||
| else | ||||
|   status="Found" | ||||
| fi | ||||
| ini_file=$(php -d "date.timezone=UTC" --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g") | ||||
| sudo chmod 777 "$ini_file" "$tool_path_dir" | ||||
| configure_php | ||||
| ext_dir=$(php -i | grep -Ei "extension_dir => /" | sed -e "s|.*=> s*||") | ||||
| scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||") | ||||
| sudo mkdir -m 777 -p "$ext_dir" "$HOME/.composer" | ||||
| semver=$(php -v | head -n 1 | cut -f 2 -d ' ') | ||||
| if [ "${semver%.*}" != "$version" ]; then | ||||
|   add_log "$cross" "PHP" "Could not setup PHP $version" | ||||
|   exit 1 | ||||
| fi | ||||
| configure_pecl | ||||
| sudo cp "$dist"/../src/configs/*.json "$RUNNER_TOOL_CACHE/" | ||||
| add_log "$tick" "PHP" "$status PHP $semver" | ||||
|  | ||||
							
								
								
									
										22
									
								
								src/scripts/ext/gearman.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/scripts/ext/gearman.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| # Helper function to add gearman extension. | ||||
| add_gearman_helper() { | ||||
|   add_ppa ondrej/pkg-gearman | ||||
|   sudo DEBIAN_FRONTEND=noninteractive apt-fast install -y libgearman-dev | ||||
|   enable_extension gearman extension | ||||
|   if ! check_extension gearman; then | ||||
|     status="Installed and enabled" | ||||
|     sudo DEBIAN_FRONTEND=noninteractive apt-fast install -y php"${version:?}"-gearman || pecl_install gearman | ||||
|     enable_extension gearman extension | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to add gearman extension. | ||||
| add_gearman() { | ||||
|   status="Enabled" | ||||
|   add_gearman_helper >/dev/null 2>&1 | ||||
|   if check_extension gearman; then | ||||
|     add_log "${tick:?}" "gearman" "$status" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| add_gearman | ||||
							
								
								
									
										56
									
								
								src/scripts/ext/phalcon.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								src/scripts/ext/phalcon.ps1
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,56 @@ | ||||
| Param ( | ||||
|     [Parameter(Position = 0, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     [ValidateSet('phalcon3', 'phalcon4')] | ||||
|     [string] | ||||
|     $extension, | ||||
|     [Parameter(Position = 1, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     [ValidateLength(1, [int]::MaxValue)] | ||||
|     [string] | ||||
|     $version | ||||
| ) | ||||
|  | ||||
| # Function to install phalcon | ||||
| Function Install-Phalcon() { | ||||
|     if ($extension_version -eq '4') { | ||||
|         Install-Phpextension phalcon -MinimumStability stable -Path $php_dir | ||||
|     } else { | ||||
|         $installed = Get-Php -Path $php_dir | ||||
|         $nts = if (!$installed.ThreadSafe) { "_nts" } else { "" } | ||||
|         $match = Invoke-WebRequest -UseBasicParsing -Uri "$domain/phalcon/cphalcon/releases/v3.4.5" | Select-String -Pattern "href=`"(.*phalcon_x64_.*_php${version}_${extension_version}.*[0-9]${nts}.zip)`"" | ||||
|         $zip_file = $match.Matches[0].Groups[1].Value | ||||
|         Invoke-WebRequest -UseBasicParsing -Uri $domain/$zip_file -OutFile $ENV:RUNNER_TOOL_CACHE\phalcon.zip > $null 2>&1 | ||||
|         Expand-Archive -Path $ENV:RUNNER_TOOL_CACHE\phalcon.zip -DestinationPath $ENV:RUNNER_TOOL_CACHE\phalcon -Force > $null 2>&1 | ||||
|         Copy-Item -Path "$ENV:RUNNER_TOOL_CACHE\phalcon\php_phalcon.dll" -Destination "$ext_dir\php_phalcon.dll" | ||||
|         Enable-PhpExtension -Extension phalcon -Path $php_dir | ||||
|     } | ||||
|     printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "32" $tick $extension "Installed and enabled" | ||||
| } | ||||
|  | ||||
| $tick = ([char]8730) | ||||
| $domain = 'https://github.com' | ||||
| $php_dir = 'C:\tools\php' | ||||
| $ext_dir = $php_dir + '\ext' | ||||
| $extension_version = $extension.substring($extension.Length - 1) | ||||
|  | ||||
| if($extension_version -eq '4') { | ||||
|     if (Test-Path $ext_dir\php_psr.dll) { | ||||
|         Enable-PhpExtension -Extension psr -Path $php_dir | ||||
|     } else { | ||||
|         Install-Phpextension psr -MinimumStability stable -Path $php_dir | ||||
|     } | ||||
| } | ||||
|  | ||||
| if(Test-Path $ext_dir\php_phalcon.dll) { | ||||
|     $phalcon = Get-PhpExtension $ext_dir\php_phalcon.dll | ||||
|     if($phalcon.Version[0] -eq $extension_version) { | ||||
|         Enable-PhpExtension -Extension phalcon -Path $php_dir | ||||
|         printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "32" $tick $extension "Enabled" | ||||
|     } else { | ||||
|         Remove-Item $ext_dir\php_phalcon.dll | ||||
|         Install-Phalcon | ||||
|     } | ||||
| } else { | ||||
|     Install-Phalcon | ||||
| } | ||||
							
								
								
									
										71
									
								
								src/scripts/ext/phalcon.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								src/scripts/ext/phalcon.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,71 @@ | ||||
| # Function to log result of a operation | ||||
| add_log() { | ||||
|   mark=$1 | ||||
|   subject=$2 | ||||
|   message=$3 | ||||
|   if [ "$mark" = "$tick" ]; then | ||||
|     printf "\033[32;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message" | ||||
|   else | ||||
|     printf "\033[31;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to update php ppa | ||||
| update_ppa() { | ||||
|   if [ "$ppa_updated" = "false" ]; then | ||||
|     find /etc/apt/sources.list.d -type f -name 'ondrej-ubuntu-php*.list' -exec sudo DEBIAN_FRONTEND=noninteractive apt-get update -o Dir::Etc::sourcelist="{}" ';' >/dev/null 2>&1 | ||||
|     ppa_updated="true" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to install phalcon | ||||
| install_phalcon() { | ||||
|   local extension=$1 | ||||
|   version=$2 | ||||
|   (update_ppa && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "php$version-psr" "php$version-$extension" >/dev/null 2>&1 && add_log "$tick" "$extension" "Installed and enabled") || | ||||
|   add_log "$cross" "$extension" "Could not install $extension on PHP $semver" | ||||
| } | ||||
|  | ||||
| ini_file="/etc/php/$2/cli/conf.d/50-phalcon.ini" | ||||
| ext_dir=$(php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||") | ||||
| semver=$(php -v | head -n 1 | cut -f 2 -d ' ' | cut -f 1 -d '-') | ||||
| extension_major_version=$(echo "$1" | grep -i -Po '\d') | ||||
| ppa_updated="false" | ||||
| tick="✓" | ||||
| cross="✗" | ||||
|  | ||||
| if [ "$extension_major_version" = "4" ]; then | ||||
|   if [ -e "$ext_dir/psr.so" ] && ! php -m | grep -i -q -w psr; then | ||||
|     echo "extension=psr.so" | sudo tee -a "$ini_file" >/dev/null 2>&1 | ||||
|   fi | ||||
|  | ||||
|   if [ -e "$ext_dir/phalcon.so" ]; then | ||||
|     if php -m | grep -i -q -w psr; then | ||||
|       phalcon_version=$(php -d="extension=phalcon" -r "echo phpversion('phalcon');" | cut -d'.' -f 1) | ||||
|       if [ "$phalcon_version" != "$extension_major_version" ]; then | ||||
|         install_phalcon "$1" "$2" | ||||
|       else | ||||
|         echo "extension=phalcon.so" | sudo tee -a "$ini_file" >/dev/null 2>&1 | ||||
|         add_log "$tick" "$1" "Enabled" | ||||
|       fi | ||||
|     else | ||||
|       install_phalcon "$1" "$2" | ||||
|     fi | ||||
|   else | ||||
|     install_phalcon "$1" "$2" | ||||
|   fi | ||||
| fi | ||||
|  | ||||
| if [ "$extension_major_version" = "3" ]; then | ||||
|   if [ -e "$ext_dir/phalcon.so" ]; then | ||||
|     phalcon_version=$(php -d="extension=phalcon.so" -r "echo phpversion('phalcon');" | cut -d'.' -f 1) | ||||
|     if [ "$phalcon_version" != "$extension_major_version" ]; then | ||||
|       install_phalcon "$1" "$2" | ||||
|     else | ||||
|       echo "extension=phalcon.so" | sudo tee -a "$ini_file" >/dev/null 2>&1 | ||||
|       add_log "$tick" "$1" "Enabled" | ||||
|     fi | ||||
|   else | ||||
|     install_phalcon "$1" "$2" | ||||
|   fi | ||||
| fi | ||||
| @ -1,248 +0,0 @@ | ||||
| Function Add-ExtensionLog() { | ||||
|   Param ( | ||||
|     [Parameter(Position = 0, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     $extension, | ||||
|     [Parameter(Position = 1, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     $message | ||||
|   ) | ||||
|   $extension_info = Get-PhpExtension -Path $php_dir | Where-Object { $_.Name -eq $extension -or $_.Handle -eq $extension } | ||||
|   if ($null -ne $extension_info -and ($extension_info.State -eq 'Enabled' -or $extension_info.State -eq 'Builtin')) { | ||||
|     Add-Log $tick $extension $message | ||||
|   } else { | ||||
|     Add-Log $cross $extension "Could not install $extension on PHP $( $installed.FullVersion )" | ||||
|   } | ||||
| } | ||||
|  | ||||
| # Function to link dependencies to PHP directory. | ||||
| Function Set-ExtensionPrerequisites | ||||
| { | ||||
|   Param ( | ||||
|     [Parameter(Position = 0, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     [ValidateLength(1, [int]::MaxValue)] | ||||
|     [string] | ||||
|     $extension | ||||
|   ) | ||||
|   $deps_dir = "$ext_dir\$extension-vc$($installed.VCVersion)-$arch" | ||||
|   $deps = Get-ChildItem -Recurse -Path $deps_dir | ||||
|   if ($deps.Count -ne 0) { | ||||
|     # Symlink dependencies instead of adding the directory to PATH ... | ||||
|     # as other actions change the PATH thus breaking extensions. | ||||
|     $deps | ForEach-Object { | ||||
|       New-Item -Itemtype SymbolicLink -Path $php_dir -Name $_.Name -Target $_.FullName -Force > $null 2>&1 | ||||
|     } | ||||
|   } else { | ||||
|     Remove-Item $deps_dir -Recurse -Force | ||||
|   } | ||||
| } | ||||
|  | ||||
| # Function to enable extension. | ||||
| Function Enable-Extension() { | ||||
|   Param ( | ||||
|     [Parameter(Position = 0, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     [ValidateLength(1, [int]::MaxValue)] | ||||
|     [string] | ||||
|     $extension | ||||
|   ) | ||||
|   Enable-ExtensionDependencies $extension | ||||
|   Enable-PhpExtension -Extension $extension -Path $php_dir | ||||
|   Set-ExtensionPrerequisites $extension | ||||
|   Add-Log $tick $extension "Enabled" | ||||
| } | ||||
|  | ||||
| # Function to add custom built PHP extension for nightly builds. | ||||
| Function Add-NightlyExtension { | ||||
|   Param ( | ||||
|     [Parameter(Position = 0, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     [ValidateLength(1, [int]::MaxValue)] | ||||
|     [string] | ||||
|     $extension | ||||
|   ) | ||||
|   if($ts) { $ts_part = 'ts' } else { $ts_part = 'nts' } | ||||
|   $repo = "$github/shivammathur/php-extensions-windows" | ||||
|   $url = "$repo/releases/download/builds/php$version`_$ts_part`_$arch`_$extension.dll" | ||||
|   Get-File -Url $url  -OutFile "$ext_dir\php_$extension.dll" | ||||
|   if(Test-Path "$ext_dir\php_$extension.dll") { | ||||
|     Enable-Extension $extension > $null | ||||
|   } else { | ||||
|     throw "Failed to download the $extension" | ||||
|   } | ||||
| } | ||||
|  | ||||
| # Function to add PHP extensions. | ||||
| Function Add-Extension { | ||||
|   Param ( | ||||
|     [Parameter(Position = 0, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     [ValidateLength(1, [int]::MaxValue)] | ||||
|     [string] | ||||
|     $extension, | ||||
|     [Parameter(Position = 1, Mandatory = $false)] | ||||
|     [ValidateNotNull()] | ||||
|     [ValidateSet('stable', 'beta', 'alpha', 'devel', 'snapshot')] | ||||
|     [string] | ||||
|     $stability = 'stable', | ||||
|     [Parameter(Position = 2, Mandatory = $false)] | ||||
|     [ValidateNotNull()] | ||||
|     [ValidatePattern('^\d+(\.\d+){0,2}$')] | ||||
|     [string] | ||||
|     $extension_version = '' | ||||
|   ) | ||||
|   try { | ||||
|     $extension_info = Get-PhpExtension -Path $php_dir | Where-Object { $_.Name -eq $extension -or $_.Handle -eq $extension } | ||||
|     $deps_dir = "$ext_dir\$extension-vc$($installed.VCVersion)-$arch" | ||||
|     New-Item $deps_dir -Type Directory -Force > $null 2>&1 | ||||
|     if ($null -ne $extension_info) { | ||||
|       switch ($extension_info.State) { | ||||
|         'Builtin' { | ||||
|           Add-Log $tick $extension "Enabled" | ||||
|         } | ||||
|         'Enabled' { | ||||
|           Add-Log $tick $extension "Enabled" | ||||
|         } | ||||
|         default { | ||||
|           Enable-Extension $extension_info.Handle | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|     else { | ||||
|       if(($version -match $nightly_versions) -and (Select-String -Path $src\configs\windows_extensions -Pattern $extension -SimpleMatch -Quiet)) { | ||||
|         Add-NightlyExtension $extension | ||||
|       } else { | ||||
|         # Patch till DLLs for PHP 8.1 and 8.2 are released as stable. | ||||
|         $minimumStability = $stability | ||||
|         if ($version -match '8.[1-2]' -and $stability -eq 'stable') { | ||||
|           $minimumStability = 'snapshot' | ||||
|         } | ||||
|  | ||||
|         $params = @{ Extension = $extension; MinimumStability = $minimumStability; MaximumStability = $stability; Path = $php_dir; AdditionalFilesPath = $deps_dir; NoDependencies = $true } | ||||
|         if ($extension_version -ne '') | ||||
|         { | ||||
|           $params["Version"] = $extension_version | ||||
|         } | ||||
|         Install-PhpExtension @params | ||||
|         Set-ExtensionPrerequisites $extension | ||||
|       } | ||||
|       Add-Log $tick $extension "Installed and enabled" | ||||
|     } | ||||
|   } catch { | ||||
|     Add-Log $cross $extension "Could not install $extension on PHP $( $installed.FullVersion )" | ||||
|   } | ||||
| } | ||||
|  | ||||
| # Function to get a map of extensions and their dependent shared extensions. | ||||
| Function Get-ExtensionMap { | ||||
|   php -d'error_reporting=0' $src\scripts\extensions\extension_map.php $env:TEMP\map$version.orig | ||||
| } | ||||
|  | ||||
| # Function to enable extension dependencies which are also extensions. | ||||
| Function Enable-ExtensionDependencies { | ||||
|   Param ( | ||||
|     [Parameter(Position = 0, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     [ValidateLength(1, [int]::MaxValue)] | ||||
|     [string] | ||||
|     $extension | ||||
|   ) | ||||
|   if (-not(Test-Path $env:TEMP\extdisabled\$extension)) { | ||||
|     return | ||||
|   } | ||||
|   Get-ExtensionMap | ||||
|   $entry = findstr /r "$extension`:.*" $env:TEMP\map$version.orig | ||||
|   if($entry) { | ||||
|     $entry.split(':')[1].trim().split(' ') | ForEach-Object { | ||||
|       if (-not(php -m | findstr -i $_)) { | ||||
|         Enable-PhpExtension -Extension $_ -Path $php_dir | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   Remove-Item $env:TEMP\extdisabled\$extension -Force | ||||
| } | ||||
|  | ||||
| # Function to disable dependent extensions. | ||||
| Function Disable-DependentExtensions() { | ||||
|   Param ( | ||||
|     [Parameter(Position = 0, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     [ValidateLength(1, [int]::MaxValue)] | ||||
|     [string] | ||||
|     $extension | ||||
|   ) | ||||
|   Select-String -Pattern ".*:.*\s$extension(\s|$)" $env:TEMP\map$version.orig | ForEach-Object { | ||||
|     $dependent = $_.Matches[0].Value.split(':')[0]; | ||||
|     Disable-ExtensionHelper -Extension $dependent -DisableDependents | ||||
|     Add-Log $tick ":$extension" "Disabled $dependent as it depends on $extension" | ||||
|   } | ||||
| } | ||||
|  | ||||
| # Helper function to disable an extension. | ||||
| Function Disable-ExtensionHelper() { | ||||
|   Param ( | ||||
|     [Parameter(Position = 0, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     [ValidateLength(1, [int]::MaxValue)] | ||||
|     [string] | ||||
|     $extension, | ||||
|     [switch] $DisableDependents | ||||
|   ) | ||||
|   Get-ExtensionMap | ||||
|   if($DisableDependents) { | ||||
|     Disable-DependentExtensions $extension | ||||
|   } | ||||
|   Disable-PhpExtension -Extension $extension -Path $php_dir | ||||
|   New-Item $env:TEMP\extdisabled -Type Directory -Force > $null 2>&1 | ||||
|   New-Item $env:TEMP\extdisabled\$extension -Type File -Force > $null 2>&1 | ||||
| } | ||||
|  | ||||
| # Function to disable an extension. | ||||
| Function Disable-Extension() { | ||||
|   Param ( | ||||
|     [Parameter(Position = 0, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     [ValidateLength(1, [int]::MaxValue)] | ||||
|     [string] | ||||
|     $extension, | ||||
|     [Parameter(Position = 1, Mandatory = $false)] | ||||
|     [ValidateNotNull()] | ||||
|     [ValidateLength(1, [int]::MaxValue)] | ||||
|     [string] | ||||
|     $DisableDependents | ||||
|   ) | ||||
|   if(php -m | findstr -i $extension) { | ||||
|     if(Test-Path $ext_dir\php_$extension.dll) { | ||||
|       try { | ||||
|         $params = @{ Extension = $extension; DisableDependents = ($DisableDependents -ne 'false') } | ||||
|         Disable-ExtensionHelper @params | ||||
|         Add-Log $tick ":$extension" "Disabled" | ||||
|       } catch { | ||||
|         Add-Log $cross ":$extension" "Could not disable $extension on PHP $($installed.FullVersion)" | ||||
|       } | ||||
|     } else { | ||||
|       Add-Log $cross ":$extension" "Could not disable $extension on PHP $($installed.FullVersion) as it not a shared extension" | ||||
|     } | ||||
|   } elseif(Test-Path $ext_dir\php_$extension.dll) { | ||||
|     Add-Log $tick ":$extension" "Disabled" | ||||
|   } else { | ||||
|     Add-Log $tick ":$extension" "Could not find $extension on PHP $($installed.FullVersion)" | ||||
|   } | ||||
| } | ||||
|  | ||||
| # Function to disable shared extensions. | ||||
| Function Disable-AllShared() { | ||||
|   Get-ExtensionMap | ||||
|   (Get-Content $php_dir\php.ini) | Where-Object {$_ -notmatch '^(zend_)?extension\s*='} | Set-Content $php_dir\php.ini | ||||
|   New-Item $env:TEMP\extdisabled\$version -Type Directory -Force > $null 2>&1 | ||||
|   Get-Childitem $ext_dir\*.dll | ForEach-Object { | ||||
|     New-Item ("$env:TEMP\extdisabled\$version\" + ($_.Name.split('.')[0].split('_')[1])) -Type File -Force > $null 2>&1 | ||||
|   } | ||||
|   Add-Log $tick "none" "Disabled all shared extensions" | ||||
| } | ||||
|  | ||||
| # Function to handle request to add PECL. | ||||
| Function Add-Pecl() { | ||||
|   Add-Log $tick "PECL" "Use extensions input to setup PECL extensions on windows" | ||||
| } | ||||
| @ -1,229 +0,0 @@ | ||||
| # Function to log result of installing extension. | ||||
| add_extension_log() { | ||||
|   ( | ||||
|     check_extension "$(echo "$1" | cut -d '-' -f 1)" && add_log "${tick:?}" "$1" "$2" | ||||
|   ) || add_log "${cross:?}" "$1" "Could not install $1 on PHP ${semver:?}" | ||||
| } | ||||
|  | ||||
| # Function to test if extension is loaded. | ||||
| check_extension() { | ||||
|   local extension=$1 | ||||
|   local extension_list=/tmp/php${version:?}_extensions | ||||
|   if [ ! -e "$extension_list" ]; then | ||||
|     php -m > "$extension_list" | ||||
|   fi | ||||
|   if [ "$extension" != "mysql" ]; then | ||||
|     grep -i -q -w "$extension" "$extension_list" || php -m | grep -i -q -w "$extension" | ||||
|   else | ||||
|     grep -i -q "$extension" "$extension_list" || php -m | grep -i -q "$extension" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to check if extension is shared | ||||
| shared_extension() { | ||||
|   [ -e "${ext_dir:?}/$1.so" ] | ||||
| } | ||||
|  | ||||
| # Function to enable cached extension's dependencies. | ||||
| enable_cache_extension_dependencies() { | ||||
|   if [ -d /tmp/extcache ] && shared_extension "$1"; then | ||||
|     cache_dir=$(find /tmp/extcache -maxdepth 1 -type d -regex ".*$1[0-9]*") | ||||
|     if [[ -n "$cache_dir" ]]; then | ||||
|       IFS=" " read -r -a deps <<<"$(find "$cache_dir" -maxdepth 1 -type f -name "*" -exec basename {} \; | tr '\n' ' ')" | ||||
|       IFS="#" read -r -a deps_enable <<<"$(printf -- "-d ${2}=%s.so#" "${deps[@]}")" | ||||
|       if [[ -n "${deps[*]}" ]] && php "${deps_enable[@]}" -d "${2}=$1.so" -m 2>/dev/null | grep -i -q "$1"; then | ||||
|         for ext in "${deps[@]}"; do | ||||
|           sudo rm -rf /tmp/extcache/"$ext" | ||||
|           enable_extension "$ext" "$2" | ||||
|         done | ||||
|       fi | ||||
|     fi | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to enable existing extensions. | ||||
| enable_extension() { | ||||
|   if ! check_extension "$1" && shared_extension "$1"; then | ||||
|     modules_dir="/var/lib/php/modules/${version:?}" | ||||
|     [ -d "$modules_dir" ] && sudo find "$modules_dir" -path "*disabled*$1" -delete | ||||
|     enable_extension_dependencies "$1" "$2" | ||||
|     enable_cache_extension_dependencies "$1" "$2" | ||||
|     if ! [[ "${version:?}" =~ ${old_versions:?} ]] && command -v phpenmod >/dev/null 2>&1; then | ||||
|       sudo sed -Ei "/=(.*\/)?\"?$extension(.so)?\"?$/d" "$pecl_file" | ||||
|       mod="${ini_dir:?}"/../mods-available/"$1".ini | ||||
|       if ! [ -e "$mod" ]; then | ||||
|         priority="${3:-20}"; | ||||
|         mod_priority_line="$(grep -E "^$1=" "${src:?}/configs/mod_priority")"; | ||||
|         [ -n "$mod_priority_line" ] && priority=$(echo "$mod_priority_line" | cut -d'=' -f 2) | ||||
|         (echo "; priority=$priority"; echo "$2=${ext_dir:?}/$1.so") | sudo tee "$mod" >/dev/null | ||||
|       fi | ||||
|       sudo phpenmod -v "$version" "$1" >/dev/null 2>&1 | ||||
|     else | ||||
|       echo "$2=${ext_dir:?}/$1.so" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null | ||||
|     fi | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to enable array of extensions | ||||
| enable_extensions() { | ||||
|   local extensions=("$@") | ||||
|   to_wait=() | ||||
|   for ext in "${extensions[@]}"; do | ||||
|     enable_extension "$ext" extension >/dev/null 2>&1 & | ||||
|     to_wait+=($!) | ||||
|   done | ||||
|   wait "${to_wait[@]}" | ||||
| } | ||||
|  | ||||
| # Function to get a map of extensions and their dependent shared extensions. | ||||
| get_extension_map() { | ||||
|   php -d'error_reporting=0' "${src:?}"/scripts/extensions/extension_map.php /tmp/map"$version".orig >/dev/null 2>&1 | ||||
| } | ||||
|  | ||||
| # Function to enable extension dependencies which are also extensions. | ||||
| enable_extension_dependencies() { | ||||
|   local extension=$1 | ||||
|   local prefix=$2 | ||||
|   [ -e /tmp/extdisabled/"$version"/"$extension" ] || return; | ||||
|   get_extension_map | ||||
|   for dependency in $(grep "$extension:" /tmp/map"$version".orig | cut -d ':' -f 2 | tr '\n' ' '); do | ||||
|     enable_extension "$dependency" "$prefix" | ||||
|   done | ||||
|   rm /tmp/extdisabled/"$version"/"$extension" | ||||
| } | ||||
|  | ||||
| # Function to disable dependent extensions. | ||||
| disable_extension_dependents() { | ||||
|   local extension=$1 | ||||
|   for dependent in $(grep -E ".*:.*\s$extension(\s|$)" /tmp/map"$version".orig | cut -d ':' -f 1 | tr '\n' ' '); do | ||||
|     disable_extension_helper "$dependent" true | ||||
|     add_log "${tick:?}" ":$extension" "Disabled $dependent as it depends on $extension" | ||||
|   done | ||||
| } | ||||
|  | ||||
| # Function to disable an extension. | ||||
| disable_extension() { | ||||
|   local extension=$1 | ||||
|   if check_extension "$extension"; then | ||||
|     if shared_extension "$extension"; then | ||||
|       disable_extension_helper "$extension" true | ||||
|       (! check_extension "$extension" && add_log "${tick:?}" ":$extension" "Disabled") || | ||||
|         add_log "${cross:?}" ":$extension" "Could not disable $extension on PHP ${semver:?}" | ||||
|     else | ||||
|       add_log "${cross:?}" ":$extension" "Could not disable $extension on PHP $semver as it not a shared extension" | ||||
|     fi | ||||
|   elif shared_extension "$extension"; then | ||||
|     add_log "${tick:?}" ":$extension" "Disabled" | ||||
|   else | ||||
|     add_log "${tick:?}" ":$extension" "Could not find $extension on PHP $semver" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to disable shared extensions. | ||||
| disable_all_shared() { | ||||
|   get_extension_map | ||||
|   sudo sed -i.orig -E -e "/^(zend_)?extension\s*=/d" "${ini_file[@]}" "$pecl_file" 2>/dev/null || true | ||||
|   sudo find "${ini_dir:-$scan_dir}"/.. -name "*.ini" -not -path "*php.ini" -not -path "*phar.ini" -not -path "*pecl.ini" -not -path "*mods-available*" -delete >/dev/null 2>&1 || true | ||||
|   mkdir -p /tmp/extdisabled/"$version" | ||||
|   sudo rm -f /tmp/php"$version"_extensions | ||||
|   sudo find "$ext_dir" -name '*.so' -print0 | xargs -0 -n 1 basename -s .so | xargs -I{} touch /tmp/extdisabled/"$version"/{} | ||||
|   add_log "${tick:?}" "none" "Disabled all shared extensions" | ||||
| } | ||||
|  | ||||
| # Function to configure PECL. | ||||
| configure_pecl() { | ||||
|   [ -z "${pecl_file:-${ini_file[@]}}" ] && return | ||||
|   if ! [ -e /tmp/pecl_config ]; then | ||||
|     for script in pear pecl; do | ||||
|       sudo "$script" channel-update "$script".php.net | ||||
|     done | ||||
|     echo '' | sudo tee /tmp/pecl_config >/dev/null 2>&1 | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to add an extension. | ||||
| add_extension() { | ||||
|   local extension=$1 | ||||
|   local prefix=$2 | ||||
|   enable_extension "$extension" "$prefix" | ||||
|   if check_extension "$extension"; then | ||||
|     add_log "${tick:?}" "$extension" "Enabled" | ||||
|   else | ||||
|     add_extension_helper "$extension" "$prefix" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to get the PECL version of an extension. | ||||
| get_pecl_version() { | ||||
|   local extension=$1 | ||||
|   states=("stable" "rc" "preview" "beta" "alpha" "snapshot") | ||||
|   stability="$(echo "$2" | grep -m 1 -Eio "($(IFS='|' ; echo "${states[*]}"))")" | ||||
|   IFS=' ' read -r -a states <<< "$(echo "${states[@]}" | grep -Eo "$stability.*")" | ||||
|   major_version=${3:-'[0-9]+'} | ||||
|   pecl_rest='https://pecl.php.net/rest/r/' | ||||
|   response=$(get -s -n "" "$pecl_rest$extension"/allreleases.xml) | ||||
|   for state in "${states[@]}"; do | ||||
|     pecl_version=$(echo "$response" | grep -m 1 -Eio "($major_version\.[0-9]+\.[0-9]+${state}[0-9]+<)" | cut -d '<' -f 1) | ||||
|     [ -z "$pecl_version" ] && pecl_version=$(echo "$response" | grep -m 1 -Eio "v>(.*)<\/v>.*$state<" | grep -m 1 -Eo "($major_version\.[0-9]+\.[0-9]+.*)<" | cut -d '<' -f 1) | ||||
|     [ -n "$pecl_version" ] && break; | ||||
|   done | ||||
|   [ -z "$pecl_version" ] && pecl_version=$(echo "$response" | grep -m 1 -Eo "($major_version\.[0-9]+\.[0-9]+)<" | cut -d '<' -f 1) | ||||
|   echo "$pecl_version" | ||||
| } | ||||
|  | ||||
| # Function to install PECL extensions and accept default options | ||||
| pecl_install() { | ||||
|   local extension=$1 | ||||
|   local prefix=${2:-extension} | ||||
|   add_pecl >/dev/null 2>&1 | ||||
|   cpu_count="$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo '1')" | ||||
|   prefix_opts="$(parse_args "$extension" CONFIGURE_PREFIX_OPTS) MAKEFLAGS='-j $cpu_count'" | ||||
|   suffix_opts="$(parse_args "$extension" CONFIGURE_OPTS) $(parse_args "$extension" CONFIGURE_SUFFIX_OPTS)" | ||||
|   IFS=' ' read -r -a libraries <<<"$(parse_args "$extension" LIBS) $(parse_args "$extension" "$(uname -s)"_LIBS)" | ||||
|   (( ${#libraries[@]} )) && add_libs "${libraries[@]}" >/dev/null 2>&1 | ||||
|   disable_extension_helper "${extension%-*}" >/dev/null 2>&1 | ||||
|   if [ "$version" = "5.3" ]; then | ||||
|     yes '' 2>/dev/null | sudo "$prefix_opts" pecl install -f "$extension" >/dev/null 2>&1 | ||||
|   else | ||||
|     yes '' 2>/dev/null | sudo "$prefix_opts" pecl install -f -D "$(parse_pecl_configure_options "$suffix_opts")" "$extension" >/dev/null 2>&1 | ||||
|   fi | ||||
|   local exit_code=$? | ||||
|   sudo pecl info "$extension" | grep -iq 'zend extension' && prefix=zend_extension | ||||
|   enable_extension "${extension%-*}" "$prefix" | ||||
|   return "$exit_code" | ||||
| } | ||||
|  | ||||
| # Function to install a specific version of PECL extension. | ||||
| add_pecl_extension() { | ||||
|   local extension=$1 | ||||
|   local pecl_version=$2 | ||||
|   local prefix=$3 | ||||
|   enable_extension "$extension" "$prefix" | ||||
|   if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot|preview).* ]]; then | ||||
|     pecl_version=$(get_pecl_version "$extension" "$pecl_version") | ||||
|   fi | ||||
|   ext_version=$(php -r "echo phpversion('$extension');") | ||||
|   if [ "${ext_version/-/}" = "$pecl_version" ]; then | ||||
|     add_log "${tick:?}" "$extension" "Enabled" | ||||
|   else | ||||
|     [ -n "$pecl_version" ] && pecl_version="-$pecl_version" | ||||
|     pecl_install "$extension$pecl_version" || add_extension "$extension" "$(get_extension_prefix "$extension")" >/dev/null 2>&1 | ||||
|     extension_version="$(php -r "echo phpversion('$extension');")" | ||||
|     [ -n "$extension_version" ] && extension_version="-$extension_version" | ||||
|     add_extension_log "$extension$extension_version" "Installed and enabled" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to setup pre-release extensions using PECL. | ||||
| add_unstable_extension() { | ||||
|   local extension=$1 | ||||
|   local stability=$2 | ||||
|   local prefix=$3 | ||||
|   pecl_version=$(get_pecl_version "$extension" "$stability") | ||||
|   add_pecl_extension "$extension" "$pecl_version" "$prefix" | ||||
| } | ||||
|  | ||||
| # Function to get extension prefix | ||||
| get_extension_prefix() { | ||||
|   echo "$1" | grep -Eq "xdebug([2-3])?$|opcache|ioncube|eaccelerator" && echo zend_extension || echo extension | ||||
| } | ||||
| @ -1,32 +0,0 @@ | ||||
| # Function to install blackfire extension. | ||||
| Function Add-Blackfire() { | ||||
|   Param ( | ||||
|     [Parameter(Position = 0, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     [string] | ||||
|     $extension | ||||
|   ) | ||||
|   try { | ||||
|     $no_dot_version = $version.replace('.', '') | ||||
|     $extension_version = $extension.split('-')[1] | ||||
|     if ($extension_version -notmatch "\S") { | ||||
|         if($version -lt '7.0') { | ||||
|             $extension_version = '1.50.0' | ||||
|         } else { | ||||
|             $extension_version = (Invoke-RestMethod https://blackfire.io/api/v1/releases).probe.php | ||||
|         } | ||||
|     } | ||||
|     if (Test-Path $ext_dir\blackfire.dll) { | ||||
|         Enable-PhpExtension -Extension blackfire -Path $php_dir | ||||
|         $status="Enabled" | ||||
|     } else { | ||||
|         $nts = if (!$installed.ThreadSafe) { "_nts" } else { "" } | ||||
|         Get-File -Url "https://packages.blackfire.io/binaries/blackfire-php/${extension_version}/blackfire-php-windows_${arch}-php-${no_dot_version}${nts}.dll" -OutFile $ext_dir\blackfire.dll > $null 2>&1 | ||||
|         Enable-PhpExtension -Extension blackfire -Path $php_dir | ||||
|         $status="Installed and enabled" | ||||
|     } | ||||
|     Add-Log $tick $extension $status | ||||
|   } catch { | ||||
|     Add-Log $cross $extension "Could not install $extension on PHP $($installed.FullVersion)" | ||||
|   } | ||||
| } | ||||
| @ -1,22 +0,0 @@ | ||||
| # Function to install blackfire extension. | ||||
| add_blackfire() { | ||||
|   local extension=$1 | ||||
|   version=${version:?} | ||||
|   no_dot_version=${version/./} | ||||
|   platform=$(uname -s | tr '[:upper:]' '[:lower:]') | ||||
|   extension_version=$(echo "$extension" | cut -d '-' -f 2) | ||||
|   status='Enabled' | ||||
|   if ! shared_extension blackfire; then | ||||
|     status='Installed and enabled' | ||||
|     if [ "$extension_version" = "blackfire" ]; then | ||||
|       if [[ ${version:?} =~ 5.[3-6] ]]; then | ||||
|         extension_version='1.50.0' | ||||
|       else | ||||
|         extension_version=$(get -s -n "" https://blackfire.io/api/v1/releases | grep -Eo 'php":"([0-9]+.[0-9]+.[0-9]+)' | cut -d '"' -f 3) | ||||
|       fi | ||||
|     fi | ||||
|     get -q -n "${ext_dir:?}/blackfire.so" https://packages.blackfire.io/binaries/blackfire-php/"$extension_version"/blackfire-php-"$platform"_amd64-php-"$no_dot_version".so >/dev/null 2>&1 | ||||
|   fi | ||||
|   enable_extension blackfire extension | ||||
|   add_extension_log blackfire "$status" | ||||
| } | ||||
| @ -1,70 +0,0 @@ | ||||
| # Function to install libraries required by couchbase | ||||
| add_couchbase_clibs() { | ||||
|   ext=$1 | ||||
|   trunk="https://github.com/couchbase/libcouchbase/releases" | ||||
|   if [[ "$ext" =~ couchbase-2.+ ]]; then | ||||
|     release="2.10.9" | ||||
|   else | ||||
|     release=$(get -s -n "" "$trunk"/latest | grep -Eo -m 1 "[0-9]+\.[0-9]+\.[0-9]+" | head -n 1) | ||||
|   fi | ||||
|   [ "$VERSION_ID" = "22.04" ] && vid=20.04 || vid="$VERSION_ID" | ||||
|   [ "$VERSION_CODENAME" = "jammy" ] && vcn=focal || vcn="$VERSION_CODENAME" | ||||
|   deb_url="$trunk/download/$release/libcouchbase-${release}_ubuntu${vid/./}_${vcn}_amd64.tar" | ||||
|   get -q -n /tmp/libcouchbase.tar "$deb_url" | ||||
|   sudo tar -xf /tmp/libcouchbase.tar -C /tmp | ||||
|   install_packages libev4 libevent-dev | ||||
|   sudo dpkg -i /tmp/libcouchbase-*/*.deb | ||||
| } | ||||
|  | ||||
| add_couchbase_cxxlibs() { | ||||
|   if [ "${runner:?}" = "self-hosted" ]; then | ||||
|     add_list cmake https://apt.kitware.com/ubuntu/ https://apt.kitware.com/keys/kitware-archive-latest.asc "$VERSION_CODENAME" main | ||||
|   fi | ||||
|   install_packages cmake ccache | ||||
| } | ||||
|  | ||||
| get_couchbase_version() { | ||||
|   if [[ "${version:?}" =~ ${old_versions:?} ]]; then | ||||
|     echo couchbase-2.2.3 | ||||
|   elif [[ "${version:?}" =~ 5.6|7.[0-1] ]]; then | ||||
|     echo couchbase-2.6.2 | ||||
|   elif [ "${version:?}" = '7.2' ]; then | ||||
|     echo couchbase-3.0.4 | ||||
|   elif [ "${version:?}" = '7.3' ]; then | ||||
|     echo couchbase-3.2.2 | ||||
|   else | ||||
|     echo couchbase | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to add couchbase. | ||||
| add_couchbase() { | ||||
|   ext=$1 | ||||
|   if [ "$(uname -s)" = "Linux" ]; then | ||||
|     if [ "$ext" = "couchbase" ]; then | ||||
|       ext=$(get_couchbase_version) | ||||
|     fi | ||||
|     if [[ "$ext" =~ couchbase-[2-3].+ ]]; then | ||||
|       add_couchbase_clibs "$ext" >/dev/null 2>&1 | ||||
|     else | ||||
|       add_couchbase_cxxlibs >/dev/null 2>&1 | ||||
|     fi | ||||
|     enable_extension "couchbase" "extension" | ||||
|     if check_extension "couchbase"; then | ||||
|       add_log "${tick:?}" "couchbase" "Enabled" | ||||
|     else | ||||
|       if [ "$ext" = "couchbase" ]; then | ||||
|         ext="couchbase-$(get_pecl_version "couchbase" "stable")" | ||||
|         add_extension_from_source couchbase https://pecl.php.net couchbase couchbase "${ext##*-}" extension pecl >/dev/null 2>&1 | ||||
|       else | ||||
|         pecl_install "${ext}" >/dev/null 2>&1 | ||||
|       fi | ||||
|       add_extension_log "couchbase" "Installed and enabled" | ||||
|     fi | ||||
|   else | ||||
|     if [ -e "${ext_dir:?}"/libcouchbase_php_core.dylib ]; then | ||||
|       sudo cp "${ext_dir:?}"/libcouchbase_php_core.dylib "${brew_prefix:?}"/lib | ||||
|     fi | ||||
|     add_brew_extension couchbase extension | ||||
|   fi | ||||
| } | ||||
| @ -1,60 +0,0 @@ | ||||
| # Function to log license details. | ||||
| add_license_log() { | ||||
|   printf "$GROUP\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "$ext" "Click to read the $ext related license information" | ||||
|   printf "Cubrid CCI package is required for %s extension.\n" "$ext" | ||||
|   printf "The extension %s and Cubrid CCI are provided under the license linked below.\n" "$ext" | ||||
|   printf "Refer to: \033[35;1m%s \033[0m\n" "https://github.com/CUBRID/cubrid-cci/blob/develop/COPYING" | ||||
|   echo "$END_GROUP" | ||||
| } | ||||
|  | ||||
| # Function to setup gcc-7 and g++-7 | ||||
| setup_compiler() { | ||||
|   if ! command -v gcc-7 >/dev/null || ! command -v g++-7 >/dev/null; then | ||||
|     add_ppa ubuntu-toolchain-r/test | ||||
|     add_packages gcc-7 g++-7 -y | ||||
|   fi | ||||
|   printf "gcc g++" | xargs -d ' ' -I {} sudo update-alternatives --install /usr/bin/{} {} /usr/bin/{}-7 7 | ||||
| } | ||||
|  | ||||
| # Function to set cubrid repo for the extension. | ||||
| set_cubrid_repo() { | ||||
|   case "${ext:?}" in | ||||
|     "cubrid") cubrid_repo="cubrid-php";; | ||||
|     "pdo_cubrid") cubrid_repo="cubrid-pdo";; | ||||
|   esac | ||||
| } | ||||
|  | ||||
| # Function to set cubrid branch for a PHP version. | ||||
| set_cubrid_branch() { | ||||
|   case "${version:?}" in | ||||
|     5.[3-6]) cubrid_branch="RB-9.3.0";; | ||||
|     *) cubrid_branch="develop";; | ||||
|   esac | ||||
| } | ||||
|  | ||||
| add_cubrid_helper() { | ||||
|   ext=$1 | ||||
|   enable_extension "$ext" extension | ||||
|   if ! check_extension "$ext"; then | ||||
|     status='Installed and enabled' | ||||
|     set_cubrid_repo | ||||
|     set_cubrid_branch | ||||
|     patch_phpize | ||||
|     read -r "${ext}_PREFIX_CONFIGURE_OPTS" <<< "CFLAGS=-Wno-implicit-function-declaration" | ||||
|     read -r "${ext}_CONFIGURE_OPTS" <<< "--with-php-config=$(command -v php-config)" | ||||
|     add_extension_from_source "$ext" https://github.com CUBRID "$cubrid_repo" "$cubrid_branch" extension | ||||
|     restore_phpize | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to add cubrid and pdo_cubrid. | ||||
| add_cubrid() { | ||||
|   ext=$1 | ||||
|   status='Enabled' | ||||
|   add_cubrid_helper "$ext" >/dev/null 2>&1 | ||||
|   add_extension_log "$ext" "$status" | ||||
|   check_extension "$ext" && add_license_log | ||||
| } | ||||
|  | ||||
| # shellcheck source=. | ||||
| . "${scripts:?}"/extensions/patches/phpize.sh | ||||
| @ -1,50 +0,0 @@ | ||||
| # Function to get event configure options | ||||
| get_event_configure_opts() { | ||||
|   event_opts=( | ||||
|       --with-event-core | ||||
|       --with-event-extra | ||||
|       --with-event-openssl | ||||
|       --enable-event-sockets | ||||
|   ) | ||||
|   if [ "$os" = 'Linux' ]; then | ||||
|     event_opts+=( | ||||
|         --with-openssl-dir=yes | ||||
|         --with-event-libevent-dir=/usr | ||||
|     ) | ||||
|   else | ||||
|     event_opts+=( | ||||
|         --with-openssl-dir="$(brew --prefix openssl@1.1)" | ||||
|         --with-event-libevent-dir="$(brew --prefix libevent)" | ||||
|     ) | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Helper function to compile and install event | ||||
| add_event_helper() { | ||||
|   local ext=$1 | ||||
|   [[ "$ext" =~ ^event$ ]] && ext="event-$(get_pecl_version "event" "stable")" | ||||
|   event_opts=() && get_event_configure_opts | ||||
|   export EVENT_LINUX_LIBS='libevent-dev' | ||||
|   export EVENT_DARWIN_LIBS='libevent' | ||||
|   event_configure_opts="--with-php-config=$(command -v php-config) ${event_opts[*]}" | ||||
|   export EVENT_CONFIGURE_OPTS="$event_configure_opts" | ||||
|   add_extension_from_source event https://pecl.php.net event event "${ext##*-}" extension pecl | ||||
| } | ||||
|  | ||||
| # Function to add event | ||||
| add_event() { | ||||
|   local ext=$1 | ||||
|   enable_extension "event" "extension" | ||||
|   if check_extension "event"; then | ||||
|     add_log "${tick:?}" "event" "Enabled" | ||||
|   else | ||||
|     if ! [[ "${version:?}" =~ ${old_versions:?} ]] && [ "$os" = "Darwin" ]; then | ||||
|       add_brew_extension event extension >/dev/null 2>&1 | ||||
|     else | ||||
|       add_event_helper "$ext" >/dev/null 2>&1 | ||||
|     fi | ||||
|     add_extension_log "event" "Installed and enabled" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| os="$(uname -s)" | ||||
| @ -1,132 +0,0 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * Class for a map of extensions and their dependent extensions. | ||||
|  * | ||||
|  * Class ExtensionMap | ||||
|  */ | ||||
| class ExtensionMap { | ||||
|     /** @var string Directory in which shared extensions are stored. */ | ||||
|     private $extension_dir; | ||||
|  | ||||
|     /** @var string File extension for PHP extension file. */ | ||||
|     private $file_extension; | ||||
|  | ||||
|     /** @var string Prefix in PHP extension file. */ | ||||
|     private $file_prefix; | ||||
|  | ||||
|     /** @var array Array to store the map */ | ||||
|     private $map; | ||||
|  | ||||
|     /** | ||||
|      * ExtensionMap constructor. | ||||
|      */ | ||||
|     function __construct() { | ||||
|         $this->extension_dir = ini_get('extension_dir'); | ||||
|         $this->file_extension = (PHP_OS == 'WINNT' ? '.dll' : '.so'); | ||||
|         $this->file_prefix = (PHP_OS == 'WINNT' ? 'php_' : ''); | ||||
|         $this->map = array(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Function to read the extension map. | ||||
|      */ | ||||
|     private function parseMap($path) { | ||||
|         if(file_exists($path)) { | ||||
|             $handle = fopen($path, "r"); | ||||
|             if ($handle) { | ||||
|                 while (($line = fgets($handle)) !== false) { | ||||
|                     $line_parts = explode(':', $line); | ||||
|                     $this->map[$line_parts[0]] = explode(' ', trim($line_parts[1])); | ||||
|                 } | ||||
|                 fclose($handle); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Function to check if a shared extension file exists. | ||||
|      * | ||||
|      * @param string $extension | ||||
|      * @return bool | ||||
|      */ | ||||
|     private function checkSharedExtension($extension) { | ||||
|         $extension_file = $this->extension_dir. DIRECTORY_SEPARATOR . $this->file_prefix . $extension . $this->file_extension; | ||||
|         return file_exists($extension_file); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Function to get all shared extensions. | ||||
|      * | ||||
|      * @return string[] | ||||
|      */ | ||||
|     private function getSharedExtensions() { | ||||
|         $files = scandir($this->extension_dir); | ||||
|         $extensions = array_diff($files, array('.','..')); | ||||
|         $filter_pattern = "/$this->file_extension|$this->file_prefix/"; | ||||
|         return array_map(function ($extension) use($filter_pattern) { | ||||
|             return preg_replace($filter_pattern, '', $extension); | ||||
|         }, $extensions); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Function to patch dependencies if there are any bugs in Reflection data. | ||||
|      * | ||||
|      * @param string $extension | ||||
|      * @param array $dependencies | ||||
|      * @return array | ||||
|      */ | ||||
|     private function patchDependencies($extension, $dependencies) { | ||||
|         // memcached 2.2.0 has no dependencies in reflection data. | ||||
|         if($extension == 'memcached') { | ||||
|             $dependencies = array_unique(array_merge($dependencies, array('igbinary', 'json', 'msgpack'))); | ||||
|         } | ||||
|         return $dependencies; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Function to add extension to the map. | ||||
|      * | ||||
|      * @param string $extension | ||||
|      * @throws ReflectionException | ||||
|      */ | ||||
|     private function addExtensionToMap($extension) { | ||||
|         if($this->map && array_key_exists($extension, $this->map) && !empty($this->map[$extension])) { | ||||
|             return; | ||||
|         } | ||||
|         // PHP 5.3 does not allow using $this. | ||||
|         $self = $this; | ||||
|  | ||||
|         $ref = new ReflectionExtension($extension); | ||||
|         $dependencies = array_keys(array_map('strtolower', $ref->getDependencies())); | ||||
|         $dependencies = $this->patchDependencies($extension, $dependencies); | ||||
|         $dependencies = array_filter($dependencies, function ($dependency) use ($self) { | ||||
|             return $self->checkSharedExtension($dependency); | ||||
|         }); | ||||
|         $self->map[$extension] = $dependencies; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Function to write the map of shared extensions and their dependent extensions. | ||||
|      */ | ||||
|     public function write() { | ||||
|         $path = $_SERVER['argv'][1]; | ||||
|         $this->parseMap($path); | ||||
|         $extensions = array_map('strtolower', $this->getSharedExtensions()); | ||||
|         foreach ($extensions as $extension) { | ||||
|             try { | ||||
|                 $this->addExtensionToMap($extension); | ||||
|             } catch (ReflectionException $e) { | ||||
|  | ||||
|             } | ||||
|         } | ||||
|         $map_string = ''; | ||||
|         foreach($this->map as $extension => $dependencies) { | ||||
|             $map_string .= $extension . ': ' . implode(' ', $dependencies) . PHP_EOL; | ||||
|         } | ||||
|         file_put_contents($path, $map_string); | ||||
|     } | ||||
| } | ||||
|  | ||||
| $extension_map = new ExtensionMap(); | ||||
| $extension_map->write(); | ||||
| @ -1,20 +0,0 @@ | ||||
| Function Add-Choco() { | ||||
|   try { | ||||
|     if($null -eq (Get-Command -Name choco.exe -ErrorAction SilentlyContinue)) { | ||||
|       # Source: https://docs.chocolatey.org/en-us/choco/setup | ||||
|       Set-ExecutionPolicy Bypass -Scope Process -Force | ||||
|       [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 | ||||
|       Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) | ||||
|     } | ||||
|   } catch { } | ||||
| } | ||||
|  | ||||
| Function Add-Firebird() { | ||||
|   Add-Choco > $null 2>&1 | ||||
|   choco install firebird -params '/ClientAndDevTools' -y --force > $null 2>&1 | ||||
|   if((Get-ChildItem $env:ProgramFiles\**\**\fbclient.dll | Measure-Object).Count -eq 1) { | ||||
|     Add-Extension pdo_firebird | ||||
|   } else { | ||||
|     Add-Log $cross pdo_firebird "Could not install pdo_firebird on PHP $( $installed.FullVersion )" | ||||
|   } | ||||
| } | ||||
| @ -1,40 +0,0 @@ | ||||
| add_firebird_client_darwin() { | ||||
|   firebird_tag='R3_0_7' | ||||
|   pkg_name=$(get -s -n "" https://api.github.com/repos/FirebirdSQL/firebird/releases/tags/"$firebird_tag" | grep -Eo "Firebird-.*.pkg" | head -n 1) | ||||
|   [ -z "$pkg_name" ] && pkg_name=$(get -s -n "" https://github.com/FirebirdSQL/firebird/releases/expanded_assets/"$firebird_tag" | grep -Eo "Firebird-.*.pkg" | head -n 1) | ||||
|   get -q -e "/tmp/firebird.pkg" https://github.com/FirebirdSQL/firebird/releases/download/"$firebird_tag"/"$pkg_name" | ||||
|   sudo installer -pkg /tmp/firebird.pkg -target / | ||||
|   sudo mkdir -p /opt/firebird/include /opt/firebird/lib | ||||
|   sudo find /Library/Frameworks/Firebird.framework -name '*.h' -exec cp "{}" /opt/firebird/include \; | ||||
|   sudo find /Library/Frameworks/Firebird.framework -name '*.dylib' -exec cp "{}" /opt/firebird/lib \; | ||||
| } | ||||
|  | ||||
| add_firebird_helper() { | ||||
|   firebird_dir=$1 | ||||
|   tag="$(php_src_tag)" | ||||
|   export PDO_FIREBIRD_CONFIGURE_OPTS="--with-pdo-firebird=$firebird_dir" | ||||
|   export PDO_FIREBIRD_LINUX_LIBS="firebird-dev" | ||||
|   export PDO_FIREBIRD_PATH="ext/pdo_firebird" | ||||
|   add_extension_from_source pdo_firebird https://github.com php php-src "$tag" extension get | ||||
| } | ||||
|  | ||||
| add_firebird() { | ||||
|   if [ "$(uname -s )" = "Darwin" ]; then | ||||
|     add_firebird_client_darwin >/dev/null 2>&1 | ||||
|   fi | ||||
|   enable_extension pdo_firebird extension | ||||
|   status="Enabled" | ||||
|   if ! check_extension pdo_firebird; then | ||||
|     status="Installed and enabled" | ||||
|     if [ "$(uname -s)" = "Linux" ]; then | ||||
|       if [[ "${version:?}" =~ 5.3|${nightly_versions:?} ]]; then | ||||
|         add_firebird_helper /usr >/dev/null 2>&1 | ||||
|       else | ||||
|         add_pdo_extension firebird >/dev/null 2>&1 | ||||
|       fi | ||||
|     else | ||||
|       add_firebird_helper /opt/firebird >/dev/null 2>&1 | ||||
|     fi | ||||
|   fi | ||||
|   add_extension_log pdo_firebird "$status" | ||||
| } | ||||
| @ -1,26 +0,0 @@ | ||||
| # Helper function to add gearman extension. | ||||
| add_gearman_helper() { | ||||
|   add_ppa ondrej/pkg-gearman | ||||
|   install_packages libgearman-dev | ||||
|   enable_extension gearman extension | ||||
|   if ! check_extension gearman; then | ||||
|     status="Installed and enabled" | ||||
|     if [[ "${version:?}" =~ 5.[3-5] ]]; then | ||||
|       pecl_install gearman-1.1.2 | ||||
|     else | ||||
|       install_packages php"${version:?}"-gearman || pecl_install gearman | ||||
|     fi | ||||
|     enable_extension gearman extension | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to add gearman extension. | ||||
| add_gearman() { | ||||
|   status="Enabled" | ||||
|   if [ "$(uname -s)" = 'Linux' ]; then | ||||
|     add_gearman_helper >/dev/null 2>&1 | ||||
|     add_extension_log "gearman" "$status" | ||||
|   else | ||||
|     add_brew_extension gearman extension | ||||
|   fi | ||||
| } | ||||
| @ -1,17 +0,0 @@ | ||||
| # Helper function to compile and install geos | ||||
| add_geos_helper() { | ||||
|   export GEOS_LINUX_LIBS='libgeos-dev' | ||||
|   export GEOS_DARWIN_LIBS='geos' | ||||
|   add_extension_from_source geos https://github.com libgeos php-geos 1.0.0 extension get | ||||
| } | ||||
|  | ||||
| # Function to add geos | ||||
| add_geos() { | ||||
|   enable_extension "geos" "extension" | ||||
|   if check_extension "geos"; then | ||||
|     add_log "${tick:?}" "geos" "Enabled" | ||||
|   else | ||||
|     add_geos_helper >/dev/null 2>&1 | ||||
|     add_extension_log "geos" "Installed and enabled" | ||||
|   fi | ||||
| } | ||||
| @ -1,51 +0,0 @@ | ||||
| Function Get-ICUUrl() { | ||||
|   Param ( | ||||
|     [Parameter(Position = 0, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     $icu_version, | ||||
|     [Parameter(Position = 1, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     $arch, | ||||
|     [Parameter(Position = 2, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     $vs_version | ||||
|   ) | ||||
|   $trunk = "https://windows.php.net" | ||||
|   $urls=@("${trunk}/downloads/php-sdk/deps/${vs_version}/${arch}", "${trunk}/downloads/php-sdk/deps/archives/${vs_version}/${arch}") | ||||
|   foreach ($url in $urls) { | ||||
|     $web_content = Get-File -Url $url | ||||
|     foreach ($link in $web_content.Links) { | ||||
|       if ($link -match "/.*ICU-${icu_version}.*/") { | ||||
|         return $trunk + $link.HREF | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| Function Repair-ICU() { | ||||
|   $icu = deplister $ext_dir\php_http.dll | Select-String "icu[a-z]+(\d+).dll,([A-Z]+)" | Foreach-Object { $_.Matches } | ||||
|   if($icu -and $icu.Groups[2].Value -ne 'OK') { | ||||
|     $vs = "vs" + $installed.VCVersion | ||||
|     if ($installed.VCVersion -lt 16) { | ||||
|       $vs = "vc" + $installed.VCVersion | ||||
|     } | ||||
|     $zip_url = Get-ICUUrl $icu.Groups[1].Value $installed.Architecture $vs | ||||
|     if ($zip_url -ne '') { | ||||
|       New-Item -Path "$php_dir" -Name "icu" -ItemType "directory" -Force > $null 2>&1 | ||||
|       Get-File -Url $zip_url -OutFile "$php_dir\icu\icu.zip" | ||||
|       Expand-Archive -Path $php_dir\icu\icu.zip -DestinationPath $php_dir\icu -Force | ||||
|       Get-ChildItem $php_dir\icu\bin -Filter *.dll | Copy-Item -Destination $php_dir -Force | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| Function Add-Http() { | ||||
|   Add-Extension iconv >$null 2>&1 | ||||
|   Add-Extension raphf >$null 2>&1 | ||||
|   if($version -lt '8.0') { | ||||
|     Add-Extension propro >$null 2>&1 | ||||
|   } | ||||
|   Add-Extension pecl_http >$null 2>&1 | ||||
|   Repair-ICU | ||||
|   Add-ExtensionLog http "Installed and enabled" | ||||
| } | ||||
| @ -1,113 +0,0 @@ | ||||
| # Function to get http version for a PHP version. | ||||
| get_http_version() { | ||||
|   if [[ ${version:?} =~ 5.[3-6] ]]; then | ||||
|     echo "pecl_http-2.6.0" | ||||
|   elif [[ ${version:?} =~ 7.[0-4] ]]; then | ||||
|     echo "pecl_http-3.2.4" | ||||
|   else | ||||
|     echo "pecl_http-$(get_pecl_version "pecl_http" "stable")" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to enable http extension. | ||||
| enable_http() { | ||||
|   enable_extension iconv extension | ||||
|   enable_extension propro extension | ||||
|   enable_extension raphf extension | ||||
|   if (! [[ ${version:?} =~ ${jit_versions:?} ]] && check_extension iconv && check_extension propro && check_extension raphf) || | ||||
|      ( [[ ${version:?} =~ ${jit_versions:?} ]] && check_extension iconv && check_extension raphf); then | ||||
|     enable_extension http extension | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to install http dependencies. | ||||
| add_http_dependencies() { | ||||
|   if [[ ${version:?} =~ ${old_versions:?} ]]; then | ||||
|     add_pecl_extension raphf 1.1.2 extension | ||||
|     add_pecl_extension propro 1.0.2 extension | ||||
|   elif [[ ${version:?} =~ 5.6|7.[0-4] ]]; then | ||||
|     add_extension iconv extension | ||||
|     add_extension propro extension | ||||
|     add_extension raphf extension | ||||
|   else | ||||
|     add_extension iconv extension | ||||
|     add_extension raphf extension | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to get configure options for http. | ||||
| get_http_configure_opts() { | ||||
|   if [ "$os" = 'Linux' ]; then | ||||
|     for lib in zlib libbrotli libcurl libevent libicu libidn2 libidn libidnkit2 libidnkit; do | ||||
|       http_opts+=( "--with-http-$lib-dir=/usr" ) | ||||
|     done | ||||
|   else | ||||
|     http_opts+=( "--with-http-zlib-dir=$(xcrun --show-sdk-path)/usr" ) | ||||
|     http_opts+=( "--with-http-libbrotli-dir=$(brew --prefix brotli)" ) | ||||
|     http_opts+=( "--with-http-libcurl-dir=$(brew --prefix curl)" ) | ||||
|     http_opts+=( "--with-http-libicu-dir=$(brew --prefix icu4c)" ) | ||||
|     http_opts+=( "--with-http-libevent-dir=$(brew --prefix libevent)" ) | ||||
|     http_opts+=( "--with-http-libidn2-dir=$(brew --prefix libidn2)" ) | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Compile and install http explicitly. | ||||
| # This is done as pecl compiles raphf and propro as well. | ||||
| add_http_helper() { | ||||
|   ext=$1 | ||||
|   http_opts=() && get_http_configure_opts | ||||
|   export HTTP_PREFIX_CONFIGURE_OPTS="CFLAGS=-Wno-implicit-function-declaration" | ||||
|   http_configure_opts="--with-http --with-php-config=$(command -v php-config) ${http_opts[*]}" | ||||
|   export HTTP_CONFIGURE_OPTS="$http_configure_opts" | ||||
|   export HTTP_LINUX_LIBS="zlib1g libbrotli-dev libcurl4-openssl-dev libevent-dev libicu-dev libidn2-dev" | ||||
|   export HTTP_DARWIN_LIBS="brotli curl icu4c libevent libidn2" | ||||
|   if [[ "${version:?}" =~ ${nightly_versions:?} ]]; then | ||||
|     add_extension_from_source http https://github.com m6w6 ext-http master extension | ||||
|   else | ||||
|     add_extension_from_source pecl_http https://pecl.php.net http http "${ext##*-}" extension pecl | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to setup latest http extension. | ||||
| add_http_latest() { | ||||
|   enable_http | ||||
|   if ! check_extension http; then | ||||
|     if [ "$os" = "Linux" ]; then | ||||
|       add_http_dependencies | ||||
|       package="php$version-http" | ||||
|       add_ppa ondrej/php >/dev/null 2>&1 || update_ppa ondrej/php | ||||
|       (check_package "$package" && install_packages "$package") || add_http_helper "$(get_http_version)" "$os" | ||||
|     else | ||||
|       if ! [[ "${version:?}" =~ ${old_versions:?} ]]; then | ||||
|         add_brew_extension pecl_http extension | ||||
|       fi | ||||
|     fi | ||||
|     status="Installed and enabled" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to setup http extension given a version. | ||||
| add_http_version() { | ||||
|   ext=$1 | ||||
|   enable_http | ||||
|   if [ "x$(php -r "echo phpversion('http');")" != "x${ext##*-}" ]; then | ||||
|     add_http_dependencies | ||||
|     disable_extension_helper http >/dev/null | ||||
|     add_http_helper pecl_http-"${ext##*-}" "$os" | ||||
|     status="Installed and enabled" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to setup http extension | ||||
| add_http() { | ||||
|   ext=$1 | ||||
|   status="Enabled" | ||||
|   if [[ "$ext" =~ ^(pecl_http|http)$ ]]; then | ||||
|     add_http_latest >/dev/null 2>&1 | ||||
|   else | ||||
|     add_http_version "$ext" >/dev/null 2>&1 | ||||
|   fi | ||||
|   add_extension_log "http" "$status" | ||||
| } | ||||
|  | ||||
| os="$(uname -s)" | ||||
| @ -1,24 +0,0 @@ | ||||
| # Function to install ICU | ||||
| install_icu() { | ||||
|   icu=$1 | ||||
|   if [ "$(php -i | grep "ICU version =>" | sed -e "s|.*=> s*||")" != "$icu" ]; then | ||||
|     get -q -n /tmp/icu.tar.zst "https://github.com/shivammathur/icu-intl/releases/download/icu4c/icu4c-$icu.tar.zst" | ||||
|     sudo tar -I zstd -xf /tmp/icu.tar.zst -C /usr/local | ||||
|     sudo cp -r /usr/local/icu/lib/* /usr/lib/x86_64-linux-gnu/ | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to add ext-intl with the given version of ICU | ||||
| add_intl() { | ||||
|   icu=$(echo "$1" | cut -d'-' -f 2) | ||||
|   supported_version=$(get -s -n "" https://api.github.com/repos/shivammathur/icu-intl/releases | grep -Po "${icu//./\\.}" | head -n 1) | ||||
|   if [ "$icu" != "$supported_version" ]; then | ||||
|     add_log "${cross:?}" "intl" "ICU $icu is not supported" | ||||
|   else | ||||
|     [ "${ts:?}" = 'zts' ] && suffix='-zts' | ||||
|     install_icu "$icu" >/dev/null 2>&1 | ||||
|     get -q -n "${ext_dir:?}/intl.so" "https://github.com/shivammathur/icu-intl/releases/download/intl/php${version:?}-intl-$icu$suffix.so" | ||||
|     enable_extension intl extension | ||||
|     add_extension_log intl "Installed and enabled with ICU $icu" | ||||
|   fi | ||||
| } | ||||
| @ -1,33 +0,0 @@ | ||||
| # Function to log result of a operation. | ||||
| Function Add-LicenseLog() { | ||||
|   printf "$env:GROUP\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "ioncube" "Click to read the ioncube loader license information" | ||||
|   Get-Content $ext_dir\ioncube\LICENSE.txt | ||||
|   Write-Output "$env:END_GROUP" | ||||
| } | ||||
|  | ||||
| # Function to add ioncube extension. | ||||
| Function Add-Ioncube() { | ||||
|   try { | ||||
|     $status = 'Enabled' | ||||
|     if (-not(Test-Path $ext_dir\php_ioncube.dll)) { | ||||
|       $status = 'Installed and enabled' | ||||
|       $arch_part = $arch | ||||
|       if ($arch -eq 'x64') { | ||||
|         $arch_part = 'x86-64' | ||||
|       } | ||||
|       $vc = $installed.VCVersion | ||||
|       $ts_part = "" | ||||
|       if (-not($installed.ThreadSafe)) { | ||||
|         $ts_part = "_nonts" | ||||
|       } | ||||
|       Get-File -Url "https://downloads.ioncube.com/loader_downloads/ioncube_loaders_win$ts_part`_vc$vc`_$arch_part.zip" -OutFile $ext_dir\ioncube.zip | ||||
|       Expand-Archive -Path $ext_dir\ioncube.zip -DestinationPath $ext_dir -Force | ||||
|       Copy-Item $ext_dir\ioncube\ioncube_loader_win_$version.dll $ext_dir\php_ioncube.dll | ||||
|     } | ||||
|     "zend_extension=$ext_dir\php_ioncube.dll`r`n" + (Get-Content $php_dir\php.ini -Raw) | Set-Content $php_dir\php.ini | ||||
|     Add-Log $tick "ioncube" $status | ||||
|     Add-LicenseLog | ||||
|   } catch { | ||||
|     Add-Log $cross "ioncube" "Could not install ioncube on PHP $($installed.FullVersion)" | ||||
|   } | ||||
| } | ||||
| @ -1,21 +0,0 @@ | ||||
| # Function to log result of a operation. | ||||
| add_license_log() { | ||||
|   printf "$GROUP\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "ioncube" "Click to read the ioncube loader license information" | ||||
|   cat "${ext_dir:?}"/IONCUBE_LICENSE.txt | ||||
|   echo "$END_GROUP" | ||||
| } | ||||
|  | ||||
| # Function to install ioncube. | ||||
| add_ioncube() { | ||||
|   status='Enabled' | ||||
|   if ! shared_extension ioncube; then | ||||
|     status='Installed and enabled' | ||||
|     os_name='lin' && [ "$(uname -s)" = "Darwin" ] && os_name='mac' | ||||
|     get -s -n "" https://downloads.ioncube.com/loader_downloads/ioncube_loaders_"$os_name"_x86-64.tar.gz | tar -xzf - -C /tmp | ||||
|     sudo mv /tmp/ioncube/ioncube_loader_"$os_name"_"${version:?}".so "${ext_dir:?}/ioncube.so" | ||||
|     sudo cp /tmp/ioncube/LICENSE.txt "$ext_dir"/IONCUBE_LICENSE.txt | ||||
|   fi | ||||
|   echo "zend_extension=$ext_dir/ioncube.so" | sudo tee "${scan_dir:?}/00-ioncube.ini" >/dev/null 2>&1 | ||||
|   add_extension_log "ioncube" "$status" | ||||
|   check_extension "ioncube" && add_license_log | ||||
| } | ||||
| @ -1,85 +0,0 @@ | ||||
| # Function to log license information. | ||||
| Function Add-LicenseLog() { | ||||
|     printf "$env:GROUP\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" $extension "Click to read the $extension related license information" | ||||
|     printf "Oracle Instant Client package is required for %s extension.\n" $extension | ||||
|     printf "It is provided under the Oracle Technology Network Development and Distribution License.\n" | ||||
|     printf "Refer to: \033[35;1m%s \033[0m\n" "https://www.oracle.com/downloads/licenses/instant-client-lic.html" | ||||
|     Write-Output "$env:END_GROUP" | ||||
| } | ||||
|  | ||||
| # Function to get instantclinet. | ||||
| Function Add-InstantClient() { | ||||
|   if (-not(Test-Path $php_dir\oci.dll)) { | ||||
|     $suffix = 'windows' | ||||
|     if ($arch -eq 'x86') { | ||||
|       $suffix = 'nt' | ||||
|     } | ||||
|     Get-File -Url https://download.oracle.com/otn_software/nt/instantclient/instantclient-basiclite-$suffix.zip -OutFile $php_dir\instantclient.zip | ||||
|     Expand-Archive -Path $php_dir\instantclient.zip -DestinationPath $php_dir -Force | ||||
|     Copy-Item $php_dir\instantclient*\* $php_dir | ||||
|   } | ||||
| } | ||||
|  | ||||
| # Function to oci8 extension URL. | ||||
| Function Get-Oci8Url() { | ||||
|   if($version -lt '8.0') { | ||||
|     $ociVersion = '2.2.0' | ||||
|     if ($version -eq '7.0') { | ||||
|       $ociVersion = '2.1.8' | ||||
|     } elseif ($version -lt '7.0') { | ||||
|       $ociVersion = '2.0.12' | ||||
|     } | ||||
|     return Get-PeclArchiveUrl oci8 $ociVersion $installed | ||||
|   } else { | ||||
|     $ociUrl = ''; | ||||
|     Get-PeclPackageVersion oci8 -MinimumStability stable -MaximumStability stable | ForEach-Object { | ||||
|       $ociUrl = Get-PeclArchiveUrl oci8 $_ $installed | ||||
|       if($ociUrl) { | ||||
|         return $ociUrl | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| # Function to get OCI8 DLL. | ||||
| Function Get-Oci8DLL() { | ||||
|   Get-ChildItem $ext_dir\php_oci8*.dll | ForEach-Object { | ||||
|     if((Get-PhpExtension -Path $_).PhpVersion -eq $version) { | ||||
|       return $_ | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| # Function to install oci8 and pdo_oci. | ||||
| Function Add-Oci() { | ||||
|   Param ( | ||||
|     [Parameter(Position = 0, Mandatory = $true)] | ||||
|     [ValidateNotNull()] | ||||
|     [ValidateSet('oci8', 'pdo_oci')] | ||||
|     [string] | ||||
|     $extension | ||||
|   ) | ||||
|   try { | ||||
|     $status = 'Enabled' | ||||
|     Add-InstantClient | ||||
|     if ($extension -eq "pdo_oci") { | ||||
|       Enable-PhpExtension pdo_oci -Path $php_dir | ||||
|     } else { | ||||
|       if(-not(Test-Path $ext_dir\php_oci8.dll)) { | ||||
|         $oci8DLL = Get-Oci8DLL | ||||
|         if($oci8DLL) { | ||||
|           Copy-Item -Path $oci8DLL -Destination $ext_dir\php_oci8.dll | ||||
|         } else { | ||||
|           $status = 'Installed and enabled' | ||||
|           Get-File -Url (Get-Oci8Url) -OutFile $php_dir\oci8.zip | ||||
|           Expand-Archive -Path $php_dir\oci8.zip -DestinationPath $ext_dir -Force | ||||
|         } | ||||
|       } | ||||
|       Add-Content -Value "`r`nextension=php_oci8.dll" -Path $php_dir\php.ini | ||||
|     } | ||||
|     Add-Log $tick $extension $status | ||||
|     Add-LicenseLog | ||||
|   } catch { | ||||
|     Add-Log $cross $extension "Could not install $extension on PHP $( $installed.FullVersion )" | ||||
|   } | ||||
| } | ||||
| @ -1,65 +0,0 @@ | ||||
| # Function to log result of a operation. | ||||
| add_license_log() { | ||||
|   printf "$GROUP\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "$ext" "Click to read the $ext related license information" | ||||
|   printf "Oracle Instant Client package is required for %s extension.\n" "$ext" | ||||
|   printf "It is provided under the Oracle Technology Network Development and Distribution License.\n" | ||||
|   printf "Refer to: \033[35;1m%s \033[0m\n" "https://www.oracle.com/downloads/licenses/instant-client-lic.html" | ||||
|   echo "$END_GROUP" | ||||
| } | ||||
|  | ||||
| # Function to install instantclient and SDK. | ||||
| add_client() { | ||||
|   if [ ! -e "$oracle_client" ]; then | ||||
|     sudo mkdir -p -m 777 "$oracle_home" "$oracle_client" | ||||
|     for package in basiclite sdk; do | ||||
|       if [ "$os" = 'Linux' ]; then | ||||
|         libs='/usr/lib/' | ||||
|         os_name='linux' | ||||
|         arch='linuxx64' | ||||
|         lib_ext='so' | ||||
|       elif [ "$os" = 'Darwin' ]; then | ||||
|         libs='/usr/local/lib/' | ||||
|         os_name='mac' | ||||
|         arch='macos' | ||||
|         lib_ext='dylib' | ||||
|       fi | ||||
|       get -q -n "/opt/oracle/$package.zip" "https://download.oracle.com/otn_software/$os_name/instantclient/instantclient-$package-$arch.zip" | ||||
|       unzip -o "/opt/oracle/$package.zip" -d "$oracle_home" | ||||
|     done | ||||
|     for icdir in /opt/oracle/instantclient_*; do | ||||
|       sudo mv "$icdir"/* "$oracle_client"/ | ||||
|     done | ||||
|     sudo ln -sf /opt/oracle/instantclient/*.$lib_ext* $libs | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to install oci8 and pdo_oci. | ||||
| add_oci_helper() { | ||||
|   if ! shared_extension "$ext"; then | ||||
|     status='Installed and enabled' | ||||
|     read -r "${ext}_LINUX_LIBS" <<< "libaio-dev" | ||||
|     read -r "${ext}_CONFIGURE_OPTS" <<< "--with-php-config=$(command -v php-config) --with-${ext/_/-}=instantclient,$oracle_client" | ||||
|     read -r "${ext}_PATH" <<< "ext/$ext" | ||||
|     patch_phpize | ||||
|     add_extension_from_source "$ext" https://github.com php php-src "$(php_src_tag)" extension get | ||||
|     restore_phpize | ||||
|   else | ||||
|     enable_extension "$ext" extension | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Function to add oci extension oci8 and pdo_oci. | ||||
| add_oci() { | ||||
|   ext=$1 | ||||
|   status='Enabled' | ||||
|   oracle_home='/opt/oracle' | ||||
|   oracle_client=$oracle_home/instantclient | ||||
|   os=$(uname -s) | ||||
|   add_client >/dev/null 2>&1 | ||||
|   add_oci_helper >/dev/null 2>&1 | ||||
|   add_extension_log "$ext" "$status" | ||||
|   check_extension "$ext" && add_license_log | ||||
| } | ||||
|  | ||||
| # shellcheck source=. | ||||
| . "${scripts:?}"/extensions/patches/phpize.sh | ||||
| @ -1,11 +0,0 @@ | ||||
| patch_firebird() { | ||||
|   if [[ "${version:?}" =~ ${old_versions:?} ]]; then | ||||
|     sudo sed -i '' '/PHP_CHECK_PDO_INCLUDES/d' config.m4 2>/dev/null || sudo sed -i '/PHP_CHECK_PDO_INCLUDES/d' config.m4 | ||||
|   fi | ||||
|   lib_arch=$(gcc -dumpmachine) | ||||
|   lib_dir=/usr/lib/"$lib_arch" | ||||
|   if [ -d "$lib_dir" ]; then | ||||
|     sudo ln -sf "$lib_dir"/libfbclient.so.2 /usr/lib/libfbclient.so | ||||
|     sudo ln -sf "$lib_dir"/libib_util.so /usr/lib/ | ||||
|   fi | ||||
| } | ||||
| @ -1,7 +0,0 @@ | ||||
| patch_geos() { | ||||
|   if [ "$(php -r "echo PHP_VERSION_ID;")" -ge 70000 ]; then | ||||
|     sed -i~ -e "s/, ce->name/, ZSTR_VAL(ce->name)/; s/ulong /zend_ulong /" geos.c | ||||
|   fi | ||||
|   get -q -n /tmp/php8.patch https://git.remirepo.net/cgit/rpms/php/php-geos.git/plain/0003-add-all-arginfo-and-fix-build-with-PHP-8.patch | ||||
|   patch -p1 < /tmp/php8.patch 2>/dev/null || true | ||||
| } | ||||
| @ -1,11 +0,0 @@ | ||||
| patch_pecl_http() { | ||||
|   if [ "$(uname -s)" = 'Darwin' ] && ! [[ ${version:?} =~ ${old_versions:?} ]]; then | ||||
|     if [[ ${version:?} =~ 5.6|7.[0-4] ]]; then | ||||
|       sed -i '' -e "s|ext/propro|$(brew --prefix propro@"${version:?}")/include/php/ext/propro@${version:?}|" "./src/php_http_api.h" | ||||
|     fi | ||||
|     sed -i '' -e "s|ext/raphf|$(brew --prefix raphf@"${version:?}")/include/php/ext/raphf@${version:?}|" "./src/php_http_api.h" | ||||
|     if [ "${version:?}" = "5.6" ]; then | ||||
|       sed -i '' -e "s|\$abs_srcdir|\$abs_srcdir ${brew_prefix:?}/include|" -e "s|/ext/propro|/php/ext/propro@5.6|" -e "s|/ext/raphf|/php/ext/raphf@5.6|" "./config9.m4" | ||||
|     fi | ||||
|   fi | ||||
| } | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	