mirror of
				https://github.com/shivammathur/setup-php.git
				synced 2025-10-31 15:26:23 +07:00 
			
		
		
		
	Compare commits
	
		
			196 Commits
		
	
	
		
			1.8.1
			...
			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 | |||
| d9cf6f5ad6 | |||
| ea50c7c0a2 | |||
| 6ca549dcaa | |||
| d3760be2cc | |||
| 3454287b87 | |||
| 88c7757dc8 | |||
| 48cfea3f3e | |||
| 43cfa2b1a8 | 
| @ -1,7 +1,7 @@ | |||||||
| { | { | ||||||
|   "env": { "node": true, "jest": true }, |   "env": { "node": true, "jest": true }, | ||||||
|   "parser": "@typescript-eslint/parser", |   "parser": "@typescript-eslint/parser", | ||||||
|   "parserOptions": { "ecmaVersion": 2020, "sourceType": "module" }, |   "parserOptions": { "ecmaVersion": 2019, "sourceType": "module" }, | ||||||
|   "extends": [ |   "extends": [ | ||||||
|     "eslint:recommended", |     "eslint:recommended", | ||||||
|     "plugin:@typescript-eslint/eslint-recommended", |     "plugin:@typescript-eslint/eslint-recommended", | ||||||
| @ -10,14 +10,7 @@ | |||||||
|     "plugin:import/warnings", |     "plugin:import/warnings", | ||||||
|     "plugin:import/typescript", |     "plugin:import/typescript", | ||||||
|     "plugin:prettier/recommended", |     "plugin:prettier/recommended", | ||||||
|     "prettier/@typescript-eslint" |     "prettier" | ||||||
|   ], |   ], | ||||||
|   "plugins": ["@typescript-eslint", "jest"], |   "plugins": ["@typescript-eslint", "jest"] | ||||||
|   "rules": { |  | ||||||
|     "camelcase": "off", |  | ||||||
|     "require-atomic-updates": "off", |  | ||||||
|     "@typescript-eslint/ban-ts-ignore": "off", |  | ||||||
|     "@typescript-eslint/camelcase": "off", |  | ||||||
|     "@typescript-eslint/no-unused-vars": "off" |  | ||||||
|   } |  | ||||||
| } | } | ||||||
							
								
								
									
										20
									
								
								.github/CONTRIBUTING.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/CONTRIBUTING.md
									
									
									
									
										vendored
									
									
								
							| @ -17,13 +17,6 @@ Due to time constraints, you may not always get a quick response. Please do not | |||||||
|  |  | ||||||
| ## Coding Guidelines | ## Coding Guidelines | ||||||
|  |  | ||||||
| This project comes with `.prettierrc.json` and `eslintrc.json` configuration files. Please run the following commands to format the code before committing it. |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| $ npm run format |  | ||||||
| $ npm run lint |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ## Using setup-php from a Git checkout | ## Using setup-php from a Git checkout | ||||||
|  |  | ||||||
| The following commands can be used to perform the initial checkout of setup-php: | The following commands can be used to perform the initial checkout of setup-php: | ||||||
| @ -40,6 +33,19 @@ Install setup-php dependencies using [npm](https://www.npmjs.com/): | |||||||
| $ npm install | $ npm install | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | If you are using `Windows` configure `git` to handle line endings. | ||||||
|  |  | ||||||
|  | ```cmd | ||||||
|  | git config --local core.autocrlf true | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | 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 | ||||||
|  | ``` | ||||||
|  |  | ||||||
| ## 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: | After following the steps shown above, The `setup-php` tests in the `__tests__` directory can be run using this command: | ||||||
|  | |||||||
							
								
								
									
										7
									
								
								.github/FUNDING.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/FUNDING.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,8 +1,3 @@ | |||||||
| # These are supported funding model platforms | # These are supported funding model platforms | ||||||
|  |  | ||||||
| github: shivammathur | github:shivammathur | ||||||
| community_bridge: setup-php |  | ||||||
| issuehunt: shivammathur |  | ||||||
| patreon: shivammathur |  | ||||||
| liberapay: shivammathur |  | ||||||
| custom: https://www.paypal.me/shivammathur |  | ||||||
							
								
								
									
										7
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							| @ -26,7 +26,12 @@ This PR [briefly explain what it does] | |||||||
| - [ ] I have run `npm run format` before the commit. | - [ ] I have run `npm run format` before the commit. | ||||||
| - [ ] I have run `npm run lint` before the commit. | - [ ] I have run `npm run lint` before the commit. | ||||||
| - [ ] I have run `npm run release` before the commit. | - [ ] I have run `npm run release` before the commit. | ||||||
| - [ ] `npm test` returns with no unit test errors. | - [ ] `npm test` returns with no unit test errors and all code covered. | ||||||
|  |  | ||||||
|  | > In case this PR edits any scripts: | ||||||
|  |  | ||||||
|  | - [ ] I have checked the edited scripts for syntax. | ||||||
|  | - [ ] I have tested the changes in an integration test (If yes, provide workflow YAML and link). | ||||||
|  |  | ||||||
| <!-- | <!-- | ||||||
| - Please target the develop branch when submitting the pull request. | - Please target the develop branch when submitting the pull request. | ||||||
|  | |||||||
							
								
								
									
										33
									
								
								.github/PULL_REQUEST_TEMPLATE/FIX.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								.github/PULL_REQUEST_TEMPLATE/FIX.md
									
									
									
									
										vendored
									
									
								
							| @ -1,33 +0,0 @@ | |||||||
| --- |  | ||||||
| name: 🐞 Bug Fix |  | ||||||
| about: You have a fix for a bug? |  | ||||||
| labels: bug |  | ||||||
|  |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| ## A Pull Request should be associated with an Issue. |  | ||||||
|  |  | ||||||
| > 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 issue:  |  | ||||||
|  |  | ||||||
| > Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md) |  | ||||||
| > Thank you! We are open to PRs, but please understand if for technical reasons we are unable to accept each and any PR |  | ||||||
|  |  | ||||||
| ### Description |  | ||||||
|  |  | ||||||
| This PR [briefly explain what it does] |  | ||||||
|  |  | ||||||
| > In case this PR introduced TypeScript/JavaScript code changes: |  | ||||||
|  |  | ||||||
| - [ ] I have written test cases for the changes in this pull request. |  | ||||||
| - [ ] I have run `npm run format` before the commit. |  | ||||||
| - [ ] I have run `npm run lint` before the commit. |  | ||||||
| - [ ] I have run `npm run release` before the commit. |  | ||||||
| - [ ] `npm test` returns with no unit test errors. |  | ||||||
|  |  | ||||||
| <!-- |  | ||||||
| - Please target the develop branch when submitting the pull request. |  | ||||||
| --> |  | ||||||
							
								
								
									
										33
									
								
								.github/PULL_REQUEST_TEMPLATE/IMPROVEMENT.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								.github/PULL_REQUEST_TEMPLATE/IMPROVEMENT.md
									
									
									
									
										vendored
									
									
								
							| @ -1,33 +0,0 @@ | |||||||
| --- |  | ||||||
| name: ⚙ Improvement |  | ||||||
| about: You have some improvement to make setup-php better? |  | ||||||
| labels: enhancement |  | ||||||
|  |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| ## A Pull Request should be associated with an Issue. |  | ||||||
|  |  | ||||||
| > 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 issue:  |  | ||||||
|  |  | ||||||
| > Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md) |  | ||||||
| > Thank you! We are open to PRs, but please understand if for technical reasons we are unable to accept each and any PR |  | ||||||
|  |  | ||||||
| ### Description |  | ||||||
|  |  | ||||||
| This PR [briefly explain what it does] |  | ||||||
|  |  | ||||||
| > In case this PR introduced TypeScript/JavaScript code changes: |  | ||||||
|  |  | ||||||
| - [ ] I have written test cases for the changes in this pull request. |  | ||||||
| - [ ] I have run `npm run format` before the commit. |  | ||||||
| - [ ] I have run `npm run lint` before the commit. |  | ||||||
| - [ ] I have run `npm run release` before the commit. |  | ||||||
| - [ ] `npm test` returns with no unit test errors. |  | ||||||
|  |  | ||||||
| <!-- |  | ||||||
| - Please target the develop branch when submitting the pull request. |  | ||||||
| --> |  | ||||||
							
								
								
									
										33
									
								
								.github/PULL_REQUEST_TEMPLATE/NEW_FEATURE.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								.github/PULL_REQUEST_TEMPLATE/NEW_FEATURE.md
									
									
									
									
										vendored
									
									
								
							| @ -1,33 +0,0 @@ | |||||||
| --- |  | ||||||
| name: 🎉 New Feature |  | ||||||
| about: You have implemented some neat idea that you want to make part of setup-php? |  | ||||||
| labels: enhancement |  | ||||||
|  |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| ## A Pull Request should be associated with an Issue. |  | ||||||
|  |  | ||||||
| > 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 issue:  |  | ||||||
|  |  | ||||||
| > Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md) |  | ||||||
| > Thank you! We are open to PRs, but please understand if for technical reasons we are unable to accept each and any PR |  | ||||||
|  |  | ||||||
| ### Description |  | ||||||
|  |  | ||||||
| This PR [briefly explain what it does] |  | ||||||
|  |  | ||||||
| > In case this PR introduced TypeScript/JavaScript code changes: |  | ||||||
|  |  | ||||||
| - [ ] I have written test cases for the changes in this pull request. |  | ||||||
| - [ ] I have run `npm run format` before the commit. |  | ||||||
| - [ ] I have run `npm run lint` before the commit. |  | ||||||
| - [ ] I have run `npm run release` before the commit. |  | ||||||
| - [ ] `npm test` returns with no unit test errors. |  | ||||||
|  |  | ||||||
| <!-- |  | ||||||
| - Please target the develop branch when submitting the pull request. |  | ||||||
| --> |  | ||||||
							
								
								
									
										30
									
								
								.github/SECURITY.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								.github/SECURITY.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | |||||||
|  | # Security Policy | ||||||
|  |  | ||||||
|  | ## Supported Versions | ||||||
|  |  | ||||||
|  | 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: | | ||||||
|  |  | ||||||
|  | ## Reporting a Vulnerability | ||||||
|  |  | ||||||
|  | If you have found any issues that might have security implications in the versions supported, please send a report privately to [contact@shivammathur.com](mailto:contact@shivammathur.com). | ||||||
|  | Do not report security reports publicly. | ||||||
|  |  | ||||||
|  | ## Tidelift | ||||||
|  |  | ||||||
|  | If you use this GitHub Action through a Tidelift subscription, please refer to [https://tidelift.com/security](https://tidelift.com/security). | ||||||
							
								
								
									
										4
									
								
								.github/codeql/codeql-configuration.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.github/codeql/codeql-configuration.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | |||||||
|  | name : CodeQL Configuration | ||||||
|  |  | ||||||
|  | paths: | ||||||
|  |   - './src' | ||||||
							
								
								
									
										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 | ||||||
							
								
								
									
										92
									
								
								.github/workflows/experimental-workflow.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										92
									
								
								.github/workflows/experimental-workflow.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,92 +0,0 @@ | |||||||
| name: Experimental workflow |  | ||||||
| on: |  | ||||||
|   pull_request: |  | ||||||
|     branches: |  | ||||||
|       - nightly |  | ||||||
|       - master |  | ||||||
|       - develop |  | ||||||
|       - verbose |  | ||||||
|     paths-ignore: |  | ||||||
|       - '**.md' |  | ||||||
|       - 'examples/**' |  | ||||||
|   push: |  | ||||||
|     branches: |  | ||||||
|       - nightly |  | ||||||
|       - master |  | ||||||
|       - develop |  | ||||||
|       - verbose |  | ||||||
|     paths-ignore: |  | ||||||
|       - '**.md' |  | ||||||
|       - 'examples/**' |  | ||||||
| jobs: |  | ||||||
|   run: |  | ||||||
|     name: Run |  | ||||||
|     runs-on: ${{ matrix.operating-system }} |  | ||||||
|     strategy: |  | ||||||
|       fail-fast: false |  | ||||||
|       matrix: |  | ||||||
|         operating-system: [ubuntu-latest, windows-latest, macos-latest] |  | ||||||
|         php-versions: ['8.0'] |  | ||||||
|     steps: |  | ||||||
|       - name: Checkout |  | ||||||
|         uses: actions/checkout@v2 |  | ||||||
|  |  | ||||||
|       - name: Setup Node.js 12.x |  | ||||||
|         uses: actions/setup-node@v1 |  | ||||||
|         with: |  | ||||||
|           node-version: 12.x |  | ||||||
|  |  | ||||||
|       - name: Install dependencies |  | ||||||
|         run: npm install |  | ||||||
|  |  | ||||||
|       - name: Prettier Format Check |  | ||||||
|         run: npm run format-check |  | ||||||
|  |  | ||||||
|       - name: ESLint Check |  | ||||||
|         run: npm run lint |  | ||||||
|  |  | ||||||
|       - name: Run tests |  | ||||||
|         run: npm test |  | ||||||
|  |  | ||||||
|       - name: Send Coverage |  | ||||||
|         continue-on-error: true |  | ||||||
|         timeout-minutes: 1 |  | ||||||
|         run: curl -s https://codecov.io/bash | bash -s -- -t ${{secrets.CODECOV_TOKEN}} -f coverage/clover.xml -n github-actions-codecov-${{ matrix.operating-system }}-php${{ matrix.php-versions }} |  | ||||||
|  |  | ||||||
|       - name: Setup PHP with extensions and custom config |  | ||||||
|         run: node dist/index.js |  | ||||||
|         env: |  | ||||||
|           php-version: ${{ matrix.php-versions }} |  | ||||||
|           extensions: xml, opcache, xdebug, pcov #optional |  | ||||||
|           ini-values: post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata #optional |  | ||||||
|           coverage: pcov |  | ||||||
|  |  | ||||||
|       - name: Testing PHP version |  | ||||||
|         run: | |  | ||||||
|           php -v |  | ||||||
|           php -r "if(strpos(phpversion(), '${{ matrix.php-versions }}') === false) {throw new Exception('Wrong PHP version Installed');}" |  | ||||||
|  |  | ||||||
|       - name: Testing Composer version |  | ||||||
|         run: | |  | ||||||
|           composer -V |  | ||||||
|           php -r "if(strpos(@exec('composer -V'), 'Composer version') === false) {throw new Exception('Composer not found');}" |  | ||||||
|       - name: Testing Extensions |  | ||||||
|         run: | |  | ||||||
|           php -m |  | ||||||
|           php -r "if(! extension_loaded('mbstring')) {throw new Exception('mbstring not found');}" |  | ||||||
|           php -r "if(! extension_loaded('pcov')) {throw new Exception('PCOV not found');}" |  | ||||||
|       - name: Testing ini values |  | ||||||
|         run: | |  | ||||||
|           php -r "if(ini_get('post_max_size')!='256M') {throw new Exception('post_max_size not added');}" |  | ||||||
|           php -r "if(ini_get('short_open_tag')!=1) {throw new Exception('short_open_tag not added');}" |  | ||||||
|           php -r "if(ini_get('date.timezone')!='Asia/Kolkata') {throw new Exception('date.timezone not added');}" |  | ||||||
|       - name: Test JIT |  | ||||||
|         run: | |  | ||||||
|           php -r "if(! extension_loaded('Zend OPcache')) {throw new Exception('Zend OPcache not found');}" |  | ||||||
|           php -r "if(ini_get('opcache.jit_buffer_size')!='256M') {throw new Exception('opcache.jit_buffer_size not set');}" |  | ||||||
|           php -r "if(ini_get('opcache.jit')!=1235) {throw new Exception('opcache.jit not set');}" |  | ||||||
|           php -r "if(ini_get('pcre.jit')!=1) {throw new Exception('pcre.jit not set');}" |  | ||||||
|       - name: Benchmark JIT |  | ||||||
|         run: | |  | ||||||
|           curl -o bench.php https://raw.githubusercontent.com/php/php-src/master/Zend/bench.php |  | ||||||
|           php bench.php |  | ||||||
| @ -1,18 +1,15 @@ | |||||||
| name: Main workflow | name: Main workflow | ||||||
| on: | on: | ||||||
|  |   workflow_dispatch: | ||||||
|   pull_request: |   pull_request: | ||||||
|     branches: |     branches: | ||||||
|       - master |       - releases/v1 | ||||||
|       - develop |  | ||||||
|       - verbose |  | ||||||
|     paths-ignore: |     paths-ignore: | ||||||
|       - '**.md' |       - '**.md' | ||||||
|       - 'examples/**' |       - 'examples/**' | ||||||
|   push: |   push: | ||||||
|     branches: |     branches: | ||||||
|       - master |       - releases/v1 | ||||||
|       - develop |  | ||||||
|       - verbose |  | ||||||
|     paths-ignore: |     paths-ignore: | ||||||
|       - '**.md' |       - '**.md' | ||||||
|       - 'examples/**' |       - 'examples/**' | ||||||
| @ -23,34 +20,12 @@ jobs: | |||||||
|     strategy: |     strategy: | ||||||
|       fail-fast: false |       fail-fast: false | ||||||
|       matrix: |       matrix: | ||||||
|         operating-system: [ubuntu-latest, windows-latest, macos-latest] |         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'] |         php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0'] | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v2 |         uses: actions/checkout@v2 | ||||||
| 
 | 
 | ||||||
|       - name: Setup Node.js 12.x |  | ||||||
|         uses: actions/setup-node@v1 |  | ||||||
|         with: |  | ||||||
|           node-version: 12.x |  | ||||||
| 
 |  | ||||||
|       - name: Install dependencies |  | ||||||
|         run: npm install |  | ||||||
| 
 |  | ||||||
|       - name: Prettier Format Check |  | ||||||
|         run: npm run format-check |  | ||||||
| 
 |  | ||||||
|       - name: ESLint Check |  | ||||||
|         run: npm run lint |  | ||||||
| 
 |  | ||||||
|       - name: Run tests |  | ||||||
|         run: npm test |  | ||||||
| 
 |  | ||||||
|       - name: Send Coverage |  | ||||||
|         continue-on-error: true |  | ||||||
|         timeout-minutes: 1 |  | ||||||
|         run: curl -s https://codecov.io/bash | bash -s -- -t ${{secrets.CODECOV_TOKEN}} -f coverage/clover.xml -n github-actions-codecov-${{ matrix.operating-system }}-php${{ matrix.php-versions }} |  | ||||||
| 
 |  | ||||||
|       - name: Setup PHP with extensions and custom config |       - name: Setup PHP with extensions and custom config | ||||||
|         run: node dist/index.js |         run: node dist/index.js | ||||||
|         env: |         env: | ||||||
| @ -75,6 +50,7 @@ jobs: | |||||||
|           php -r "if(phpversion()>=7.1 && ! extension_loaded('pcov')) {throw new Exception('PCOV not found');}" |           php -r "if(phpversion()>=7.1 && ! extension_loaded('pcov')) {throw new Exception('PCOV not found');}" | ||||||
|       - name: Testing ini values |       - name: Testing ini values | ||||||
|         run: | |         run: | | ||||||
|  |           php -r "if(ini_get('memory_limit')!='-1') {throw new Exception('memory_limit not disabled');}" | ||||||
|           php -r "if(ini_get('post_max_size')!='256M') {throw new Exception('post_max_size not added');}" |           php -r "if(ini_get('post_max_size')!='256M') {throw new Exception('post_max_size not added');}" | ||||||
|           php -r "if(ini_get('short_open_tag')!=1) {throw new Exception('short_open_tag not added');}" |           php -r "if(ini_get('short_open_tag')!=1) {throw new Exception('short_open_tag not added');}" | ||||||
|           php -r "if(ini_get('date.timezone')!='Asia/Kolkata') {throw new Exception('date.timezone not added');}" |           php -r "if(ini_get('date.timezone')!='Asia/Kolkata') {throw new Exception('date.timezone not added');}" | ||||||
							
								
								
									
										54
									
								
								.github/workflows/node-workflow.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								.github/workflows/node-workflow.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,54 @@ | |||||||
|  | name: Node workflow | ||||||
|  | on: | ||||||
|  |   pull_request: | ||||||
|  |     branches: | ||||||
|  |       - releases/v1 | ||||||
|  |     paths-ignore: | ||||||
|  |       - '**.md' | ||||||
|  |       - 'examples/**' | ||||||
|  |   push: | ||||||
|  |     branches: | ||||||
|  |       - releases/v1 | ||||||
|  |     paths-ignore: | ||||||
|  |       - '**.md' | ||||||
|  |       - 'examples/**' | ||||||
|  | jobs: | ||||||
|  |   run: | ||||||
|  |     name: Run | ||||||
|  |     runs-on: ${{ matrix.operating-system }} | ||||||
|  |     strategy: | ||||||
|  |       fail-fast: false | ||||||
|  |       matrix: | ||||||
|  |         operating-system: [ubuntu-latest, windows-latest, macos-latest] | ||||||
|  |     steps: | ||||||
|  |       - name: Checkout | ||||||
|  |         uses: actions/checkout@v2 | ||||||
|  |  | ||||||
|  |       - name: Setup Node.js 16.x | ||||||
|  |         uses: actions/setup-node@v1 | ||||||
|  |         with: | ||||||
|  |           node-version: 16.x | ||||||
|  |  | ||||||
|  |       - name: Install dependencies | ||||||
|  |         run: npm install | ||||||
|  |  | ||||||
|  |       - name: Prettier Format Check | ||||||
|  |         run: npm run format-check | ||||||
|  |  | ||||||
|  |       - name: ESLint Check | ||||||
|  |         run: npm run lint | ||||||
|  |  | ||||||
|  |       - name: Run tests | ||||||
|  |         run: npm test | ||||||
|  |  | ||||||
|  |       - name: Run npm audit | ||||||
|  |         run: npm audit | ||||||
|  |  | ||||||
|  |       - name: Send Coverage | ||||||
|  |         uses: codecov/codecov-action@v2 | ||||||
|  |         with: | ||||||
|  |           token: ${{ secrets.CODECOV_TOKEN }} | ||||||
|  |           files: coverage/lcov.info | ||||||
|  |           name: github-actions-codecov-${{ matrix.operating-system }} | ||||||
|  |           fail_ci_if_error: false | ||||||
|  |           verbose: true | ||||||
| @ -1,11 +1,12 @@ | |||||||
| { | { | ||||||
|  |     "arrowParens": "avoid", | ||||||
|  |     "bracketSpacing": false, | ||||||
|  |     "endOfLine": "auto", | ||||||
|  |     "parser": "typescript", | ||||||
|     "printWidth": 80, |     "printWidth": 80, | ||||||
|     "tabWidth": 2, |  | ||||||
|     "useTabs": false, |  | ||||||
|     "semi": true, |     "semi": true, | ||||||
|     "singleQuote": true, |     "singleQuote": true, | ||||||
|  |     "tabWidth": 2, | ||||||
|     "trailingComma": "none", |     "trailingComma": "none", | ||||||
|     "bracketSpacing": false, |     "useTabs": false | ||||||
|     "arrowParens": "avoid", | } | ||||||
|     "parser": "typescript" |  | ||||||
|   } |  | ||||||
							
								
								
									
										303
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										303
									
								
								README.md
									
									
									
									
									
								
							| @ -8,7 +8,7 @@ | |||||||
|  |  | ||||||
| <p align="center"> | <p align="center"> | ||||||
|   <a href="https://github.com/shivammathur/setup-php" title="GitHub action to setup PHP"><img alt="GitHub Actions status" src="https://github.com/shivammathur/setup-php/workflows/Main%20workflow/badge.svg"></a> |   <a href="https://github.com/shivammathur/setup-php" title="GitHub action to setup PHP"><img alt="GitHub Actions status" src="https://github.com/shivammathur/setup-php/workflows/Main%20workflow/badge.svg"></a> | ||||||
|   <a href="https://codecov.io/gh/shivammathur/setup-php" title="Code coverage"><img alt="Codecov Code Coverage" src="https://codecov.io/gh/shivammathur/setup-php/branch/master/graph/badge.svg"></a> |   <a href="https://codecov.io/gh/shivammathur/setup-php" title="Code coverage"><img alt="Codecov Code Coverage" src="https://img.shields.io/codecov/c/github/shivammathur/setup-php?logo=codecov"></a> | ||||||
|   <a href="https://github.com/shivammathur/setup-php/blob/master/LICENSE" title="license"><img alt="LICENSE" src="https://img.shields.io/badge/license-MIT-428f7e.svg"></a> |   <a href="https://github.com/shivammathur/setup-php/blob/master/LICENSE" title="license"><img alt="LICENSE" src="https://img.shields.io/badge/license-MIT-428f7e.svg"></a> | ||||||
|   <a href="#tada-php-support" title="PHP Versions Supported"><img alt="PHP Versions Supported" src="https://img.shields.io/badge/php-%3E%3D%205.6-8892BF.svg"></a> |   <a href="#tada-php-support" title="PHP Versions Supported"><img alt="PHP Versions Supported" src="https://img.shields.io/badge/php-%3E%3D%205.6-8892BF.svg"></a> | ||||||
| </p> | </p> | ||||||
| @ -18,49 +18,50 @@ Setup PHP with required extensions, php.ini configuration, code-coverage support | |||||||
| ## Contents | ## Contents | ||||||
|  |  | ||||||
| - [PHP Support](#tada-php-support) | - [PHP Support](#tada-php-support) | ||||||
| - [OS/Platform Support](#cloud-osplatform-support) | - [GitHub-Hosted Runner Support](#cloud-github-hosted-runner-support) | ||||||
| - [PHP Extension Support](#heavy_plus_sign-php-extension-support) | - [PHP Extension Support](#heavy_plus_sign-php-extension-support) | ||||||
| - [Tools Support](#wrench-tools-support) | - [Tools Support](#wrench-tools-support) | ||||||
| - [Coverage support](#signal_strength-coverage-support) | - [Coverage Support](#signal_strength-coverage-support) | ||||||
|   - [Xdebug](#xdebug) |   - [Xdebug](#xdebug) | ||||||
|   - [PCOV](#pcov) |   - [PCOV](#pcov) | ||||||
|   - [Disable coverage](#disable-coverage) |   - [Disable coverage](#disable-coverage) | ||||||
| - [Usage](#memo-usage) | - [Usage](#memo-usage) | ||||||
|   - [Basic Setup](#basic-setup) |   - [Basic Setup](#basic-setup) | ||||||
|   - [Matrix Setup](#matrix-setup) |   - [Matrix Setup](#matrix-setup) | ||||||
|   - [Experimental Setup](#experimental-setup) |  | ||||||
|   - [Thread Safe Setup](#thread-safe-setup)   |   - [Thread Safe Setup](#thread-safe-setup)   | ||||||
|   - [Cache dependencies](#cache-dependencies) |   - [Cache Dependencies](#cache-dependencies) | ||||||
|  |   - [Composer GitHub OAuth](#composer-github-oauth)   | ||||||
|   - [Problem Matchers](#problem-matchers) |   - [Problem Matchers](#problem-matchers) | ||||||
|   - [Examples](#examples) |   - [Examples](#examples) | ||||||
| - [License](#scroll-license) | - [License](#scroll-license) | ||||||
| - [Contributions](#1-contributions) | - [Contributions](#1-contributions) | ||||||
| - [Support this project](#sparkling_heart-support-this-project) | - [Support This project](#sparkling_heart-support-this-project) | ||||||
| - [This action uses the following works](#bookmark-this-action-uses-the-following-works) | - [Dependencies](#bookmark-dependencies) | ||||||
| - [Further Reading](#bookmark_tabs-further-reading) | - [Further Reading](#bookmark_tabs-further-reading) | ||||||
|  |  | ||||||
| ## :tada: PHP Support | ## :tada: PHP Support | ||||||
|  |  | ||||||
| |PHP Version|Stability|Release Support| | | PHP Version | Stability | Release Support       | | ||||||
| |--- |--- |--- | | |-------------|-----------|-----------------------| | ||||||
| |5.6|`Stable`|`End of life`| | | 5.6         | `Stable`  | `End of life`         | | ||||||
| |7.0|`Stable`|`End of life`| | | 7.0         | `Stable`  | `End of life`         | | ||||||
| |7.1|`Stable`|`End of life`| | | 7.1         | `Stable`  | `End of life`         | | ||||||
| |7.2|`Stable`|`Security fixes only`| | | 7.2         | `Stable`  | `End of life`         | | ||||||
| |7.3|`Stable`|`Active`| | | 7.3         | `Stable`  | `End of life`         | | ||||||
| |7.4|`Stable`|`Active`| | | 7.4         | `Stable`  | `Security fixes only` | | ||||||
| |8.0|`Experimental`|`In development`| | | 8.0         | `Stable`  | `Active`              | | ||||||
|  |  | ||||||
| **Note:** Specifying `8.0` in `php-version` input installs a nightly build of `PHP 8.0.0-dev` with `PHP JIT`, `Union Types v2` and other [new features](https://wiki.php.net/rfc#php_80 "New features implemented in PHP 8"). See [experimental setup](#experimental-setup) for more information. | ## :cloud: GitHub-Hosted Runner Support | ||||||
|  |  | ||||||
| ## :cloud: OS/Platform Support | | Virtual environment  | YAML workflow label                | Pre-installed PHP      | | ||||||
|  | |----------------------|------------------------------------|------------------------| | ||||||
| |Virtual environment|matrix.operating-system| | | Ubuntu 20.04         | `ubuntu-latest` or `ubuntu-20.04`  | `PHP 7.4` to `PHP 8.1` | | ||||||
| |--- |--- | | | Ubuntu 18.04         | `ubuntu-18.04`                     | `PHP 7.2` to `PHP 8.1` | | ||||||
| |Windows Server 2019|`windows-latest` or `windows-2019`| | | Windows Server 2022  | `windows-latest` or `windows-2022` | `PHP 8.1`              | | ||||||
| |Ubuntu 18.04|`ubuntu-latest` or `ubuntu-18.04`| | | Windows Server 2019  | `windows-2019`                     | `PHP 8.1`              | | ||||||
| |Ubuntu 16.04|`ubuntu-16.04`| | | macOS Monterey 12.x  | `macos-12`                         | `PHP 8.1`              | | ||||||
| |macOS X Catalina 10.15|`macos-latest` or `macOS-10.15`| | | macOS Big Sur 11.x   | `macos-latest` or `macos-11`       | `PHP 8.1`              | | ||||||
|  | | macOS Catalina 10.15 | `macos-10.15`                      | `PHP 8.1`              | | ||||||
|  |  | ||||||
| ## :heavy_plus_sign: PHP Extension Support | ## :heavy_plus_sign: PHP Extension Support | ||||||
| - On `ubuntu` by default extensions which are available as a package can be installed. If the extension is not available as a package but it is on `PECL`, it can be installed by specifying `pecl` in the tools input. | - On `ubuntu` by default extensions which are available as a package can be installed. If the extension is not available as a package but it is on `PECL`, it can be installed by specifying `pecl` in the tools input. | ||||||
| @ -74,7 +75,7 @@ Setup PHP with required extensions, php.ini configuration, code-coverage support | |||||||
|  |  | ||||||
| These tools can be setup globally using the `tools` input. | These tools can be setup globally using the `tools` input. | ||||||
|  |  | ||||||
| `codeception`, `composer`, `composer-prefetcher`, `deployer`, `pecl`, `phinx`, `phive`, `phpcbf`, `phpcpd`, `php-config`, `php-cs-fixer`, `phpcs`, `phpize`, `phpmd`, `phpstan`, `phpunit`, `prestissimo`, `psalm`, `symfony` | `codeception`, `composer`, `composer-prefetcher`, `cs2pr`, `deployer`, `pecl`, `phinx`, `phive`, `phpcbf`, `phpcpd`, `php-config`, `php-cs-fixer`, `phpcs`, `phpize`, `phpmd`, `phpstan`, `phpunit`, `prestissimo`, `psalm`, `symfony` | ||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| uses: shivammathur/setup-php@v1 | uses: shivammathur/setup-php@v1 | ||||||
| @ -83,28 +84,36 @@ with: | |||||||
|   tools: php-cs-fixer, phpunit |   tools: php-cs-fixer, phpunit | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| To setup a particular version of a tool, specify it in the form `tool:version`.   | To set up a particular version of a tool, specify it in the form `tool:version`.  | ||||||
| Version should be in semver format and a valid release of the tool. |  | ||||||
|  | The latest stable version of `composer` is set up by default. You can set up the required `composer` version by specifying `v1`, `v2`, `snapshot` or `preview` as versions or the exact version in semver format. | ||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| uses: shivammathur/setup-php@v1 | uses: shivammathur/setup-php@v1 | ||||||
| with: | with: | ||||||
|   php-version: '7.4' |   php-version: '7.4' | ||||||
|   tools: php-cs-fixer:2.15.5, phpunit:8.5.1 |   tools: composer:v2 | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| **Note** | If you have specified composer plugins `prestissimo` or `composer-prefetcher` in tools, the latest stable version of `composer v1` will be setup. Unless some of your packages require `composer v1`, it is recommended to drop `prestissimo` and use `composer v2`. | ||||||
| - `composer` is setup by default. |  | ||||||
| - Specifying version for `composer` and `pecl` has no effect, latest version of both tools will be setup. |  | ||||||
| - If the version specified for the tool is not in semver format, latest version of the tool will be setup. |  | ||||||
| - Tools which cannot be installed gracefully leave an error message in the logs, the action is not interrupted. |  | ||||||
|  |  | ||||||
| ## :signal_strength: Coverage support | Version for other tools should be in `semver` format and a valid release of the tool. | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | uses: shivammathur/setup-php@v1 | ||||||
|  | with: | ||||||
|  |   php-version: '7.4' | ||||||
|  |   tools: php-cs-fixer:2.16.2, phpunit:8.5.1 | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Tools which cannot be installed gracefully leave an error message in the logs, the action is not interrupted. | ||||||
|  |  | ||||||
|  | ## :signal_strength: Coverage Support | ||||||
|  |  | ||||||
| ### Xdebug | ### Xdebug | ||||||
|  |  | ||||||
| Specify `coverage: xdebug` to use `Xdebug`.   | Specify `coverage: xdebug` to use `Xdebug`.   | ||||||
| Runs on all [PHP versions supported](#tada-php-support "List of PHP versions supported on this GitHub Action") except `8.0`. | Runs on all [PHP versions supported](#tada-php-support "List of PHP versions supported on this GitHub Action"). | ||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| uses: shivammathur/setup-php@v1 | uses: shivammathur/setup-php@v1 | ||||||
| @ -115,7 +124,7 @@ with: | |||||||
|  |  | ||||||
| ### PCOV | ### PCOV | ||||||
|  |  | ||||||
| Specify `coverage: pcov` to use `PCOV`.   | Specify `coverage: pcov` to use `PCOV` and disable `Xdebug`.   | ||||||
| It is much faster than `Xdebug`.   | It is much faster than `Xdebug`.   | ||||||
| `PCOV` needs `PHP >= 7.1`.   | `PCOV` needs `PHP >= 7.1`.   | ||||||
| If your source code directory is other than `src`, `lib` or, `app`, specify `pcov.directory` using the `ini-values` input.   | If your source code directory is other than `src`, `lib` or, `app`, specify `pcov.directory` using the `ini-values` input.   | ||||||
| @ -129,7 +138,7 @@ with: | |||||||
|   coverage: pcov |   coverage: pcov | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### Disable coverage | ### Disable Coverage | ||||||
|  |  | ||||||
| Specify `coverage: none` to disable both `Xdebug` and `PCOV`.   | Specify `coverage: none` to disable both `Xdebug` and `PCOV`.   | ||||||
| Consider disabling the coverage using this PHP action for these reasons. | Consider disabling the coverage using this PHP action for these reasons. | ||||||
| @ -203,31 +212,6 @@ jobs: | |||||||
|         tools: php-cs-fixer, phpunit #optional, setup tools globally |         tools: php-cs-fixer, phpunit #optional, setup tools globally | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### Experimental Setup |  | ||||||
|  |  | ||||||
| > Setup a nightly build of `PHP 8.0.0-dev` from the [master branch](https://github.com/php/php-src/tree/master "Master branch on PHP source repository") of PHP. |  | ||||||
|  |  | ||||||
| - This version is currently in development and is an experimental feature on this action. |  | ||||||
| - `PECL` is installed by default with this version on `ubuntu`. |  | ||||||
| - Some extensions might not support this version currently. |  | ||||||
| - Refer to this [RFC](https://wiki.php.net/rfc/jit "PHP JIT RFC configuration") for configuring `PHP JIT` on this version. |  | ||||||
| - Refer to this [list of RFCs](https://wiki.php.net/rfc#php_80 "List of RFCs implemented in PHP8") implemented in this version. |  | ||||||
|  |  | ||||||
| ```yaml |  | ||||||
| steps: |  | ||||||
| - name: Checkout |  | ||||||
|   uses: actions/checkout@v2 |  | ||||||
|  |  | ||||||
| - name: Setup PHP |  | ||||||
|   uses: shivammathur/setup-php@v1 |  | ||||||
|   with: |  | ||||||
|     php-version: '8.0' |  | ||||||
|     extensions: mbstring #optional, setup extensions |  | ||||||
|     ini-values: opcache.jit_buffer_size=256M, opcache.jit=1235, pcre.jit=1 #optional, setup php.ini configuration |  | ||||||
|     coverage: pcov #optional, setup PCOV, Xdebug does not support this version yet. |  | ||||||
|     tools: php-cs-fixer, phpunit #optional, setup tools globally     |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ### Thread Safe Setup | ### Thread Safe Setup | ||||||
|  |  | ||||||
| - `NTS` versions are setup by default. | - `NTS` versions are setup by default. | ||||||
| @ -248,10 +232,10 @@ jobs: | |||||||
|       with: |       with: | ||||||
|         php-version: '7.4' |         php-version: '7.4' | ||||||
|       env: |       env: | ||||||
|         PHPTS: ts # specify ts or nts |         phpts: ts # specify ts or nts | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### Cache dependencies | ### Cache Dependencies | ||||||
|  |  | ||||||
| You can persist composer's internal cache directory using the [`action/cache`](https://github.com/actions/cache "GitHub Action to cache files") GitHub Action. Dependencies cached are loaded directly instead of downloading them while installation. The files cached are available across check-runs and will reduce the workflow execution time. | You can persist composer's internal cache directory using the [`action/cache`](https://github.com/actions/cache "GitHub Action to cache files") GitHub Action. Dependencies cached are loaded directly instead of downloading them while installation. The files cached are available across check-runs and will reduce the workflow execution time. | ||||||
|  |  | ||||||
| @ -263,7 +247,7 @@ You can persist composer's internal cache directory using the [`action/cache`](h | |||||||
|   run: echo "::set-output name=dir::$(composer config cache-files-dir)" |   run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|  |  | ||||||
| - name: Cache dependencies | - name: Cache dependencies | ||||||
|   uses: actions/cache@v1 |   uses: actions/cache@v2 | ||||||
|   with: |   with: | ||||||
|     path: ${{ steps.composer-cache.outputs.dir }} |     path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|     key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |     key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
| @ -273,72 +257,183 @@ You can persist composer's internal cache directory using the [`action/cache`](h | |||||||
|   run: composer install --prefer-dist |   run: composer install --prefer-dist | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| In the above example, if you support a range of `composer` dependencies and do not commit `composer.lock`, you can use the hash of `composer.json` as the key for your cache. | - If you do not commit `composer.lock`, you can use the hash of `composer.json` as the key for your cache. | ||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### Problem Matchers | - If you support a range of `composer` dependencies and use `prefer-lowest` and `prefer-stable` options, you can store them in your matrix add them to the keys. | ||||||
|  | ```yaml | ||||||
|  | key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}-${{ matrix.prefer }}- | ||||||
|  | restore-keys: ${{ runner.os }}-composer-${{ matrix.prefer }}- | ||||||
|  | ``` | ||||||
|  |  | ||||||
| You can setup problem matchers for your `PHPUnit` output by adding this step after the `setup-php` step. This will scan the logs for failing tests and surface that information prominently in the GitHub Actions UI by creating annotations and log file decorations. | ### Composer GitHub OAuth | ||||||
|  |  | ||||||
|  | If you have a number of workflows which setup multiple tools or have many composer dependencies, you might hit the GitHub's rate limit for composer. To avoid that you can add a `OAuth` token to the composer's config by setting `COMPOSER_TOKEN` environment variable. You can use [`GITHUB_TOKEN`](https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token "GITHUB_TOKEN documentation") secret for this purpose. | ||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| - name: Setup Problem Matchers for PHPUnit | - name: Setup PHP | ||||||
|  |   uses: shivammathur/setup-php@v2 | ||||||
|  |   with: | ||||||
|  |     php-version: '7.4' | ||||||
|  |   env: | ||||||
|  |     COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### Problem Matchers | ||||||
|  |  | ||||||
|  | Problem matchers are `json` configurations which identify errors and warnings in your logs and surface that information prominently in the GitHub Actions UI by highlighting them and creating code annotations. | ||||||
|  |  | ||||||
|  | #### PHP | ||||||
|  |  | ||||||
|  | Setup problem matchers for your `PHP` output by adding this step after the `setup-php` step. | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | - name: Setup problem matchers for PHP | ||||||
|  |   run: echo "::add-matcher::${{ runner.tool_cache }}/php.json" | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | #### PHPUnit | ||||||
|  |  | ||||||
|  | Setup problem matchers for your `PHPUnit` output by adding this step after the `setup-php` step. | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | - name: Setup problem matchers for PHPUnit | ||||||
|   run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" |   run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | #### PHPStan | ||||||
|  |  | ||||||
|  | PHPStan supports error reporting in GitHub Actions, so no problem matchers are required. | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | - name: Setup PHP | ||||||
|  |   uses: shivammathur/setup-php@v2 | ||||||
|  |   with: | ||||||
|  |     php-version: '7.4' | ||||||
|  |     tools: phpstan | ||||||
|  |  | ||||||
|  | - name: Run PHPStan | ||||||
|  |   run: phpstan analyse src | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | #### Psalm | ||||||
|  |  | ||||||
|  | Psalm supports error reporting in GitHub Actions with an output format `github`. | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | - name: Setup PHP | ||||||
|  |   uses: shivammathur/setup-php@v2 | ||||||
|  |   with: | ||||||
|  |     php-version: '7.4' | ||||||
|  |     tools: psalm | ||||||
|  |  | ||||||
|  | - name: Run Psalm | ||||||
|  |   run: psalm --output-format=github | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | #### Tools with checkstyle support | ||||||
|  |  | ||||||
|  | For tools that support `checkstyle` reporting like `phpstan`, `psalm`, `php-cs-fixer` and `phpcs` you can use `cs2pr` to annotate your code.   | ||||||
|  | For examples refer to [cs2pr documentation](https://github.com/staabm/annotate-pull-request-from-checkstyle).    | ||||||
|  |  | ||||||
|  | > Here is an example with `phpcs`. | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | - name: Setup PHP | ||||||
|  |   uses: shivammathur/setup-php@v2 | ||||||
|  |   with: | ||||||
|  |     php-version: '7.4' | ||||||
|  |     tools: cs2pr, phpcs | ||||||
|  |  | ||||||
|  | - name: Run phpcs | ||||||
|  |   run: phpcs -q --report=checkstyle src | cs2pr | ||||||
|  | ``` | ||||||
|  |  | ||||||
| ### Examples | ### Examples | ||||||
|  |  | ||||||
| Examples for setting up this GitHub Action with different PHP Frameworks/Packages. | Examples for setting up this GitHub Action with different PHP Frameworks/Packages. | ||||||
|  |  | ||||||
| |Framework/Package|Runs on|Workflow| | | Framework/Package                     | Runs on                         | Workflow                                                                                                      | | ||||||
| |--- |--- |--- | | |---------------------------------------|---------------------------------|---------------------------------------------------------------------------------------------------------------| | ||||||
| |CakePHP with `MySQL` and `Redis`|`ubuntu`|[cakephp-mysql.yml](./examples/cakephp-mysql.yml "GitHub Action for CakePHP with MySQL and Redis")| | | CakePHP with `MySQL` and `Redis`      | `ubuntu`                        | [cakephp-mysql.yml](./examples/cakephp-mysql.yml "GitHub Action for CakePHP with MySQL and Redis")            | | ||||||
| |CakePHP with `PostgreSQL` and `Redis`|`ubuntu`|[cakephp-postgres.yml](./examples/cakephp-postgres.yml "GitHub Action for CakePHP with Postgres and Redis")| | | CakePHP with `PostgreSQL` and `Redis` | `ubuntu`                        | [cakephp-postgres.yml](./examples/cakephp-postgres.yml "GitHub Action for CakePHP with Postgres and Redis")   | | ||||||
| |CakePHP without services|`macOS`, `ubuntu` and `windows`|[cakephp.yml](./examples/cakephp.yml "GitHub Action for CakePHP without services")| | | CakePHP without services              | `macOS`, `ubuntu` and `windows` | [cakephp.yml](./examples/cakephp.yml "GitHub Action for CakePHP without services")                            | | ||||||
| |CodeIgniter|`macOS`, `ubuntu` and `windows`|[codeigniter.yml](./examples/codeigniter.yml "GitHub Action for CodeIgniter")| | | CodeIgniter                           | `macOS`, `ubuntu` and `windows` | [codeigniter.yml](./examples/codeigniter.yml "GitHub Action for CodeIgniter")                                 | | ||||||
| |Laravel with `MySQL` and `Redis`|`ubuntu`|[laravel-mysql.yml](./examples/laravel-mysql.yml "GitHub Action for Laravel with MySQL and Redis")| | | Laravel with `MySQL` and `Redis`      | `ubuntu`                        | [laravel-mysql.yml](./examples/laravel-mysql.yml "GitHub Action for Laravel with MySQL and Redis")            | | ||||||
| |Laravel with `PostgreSQL` and `Redis`|`ubuntu`|[laravel-postgres.yml](./examples/laravel-postgres.yml "GitHub Action for Laravel with PostgreSQL and Redis")| | | Laravel with `PostgreSQL` and `Redis` | `ubuntu`                        | [laravel-postgres.yml](./examples/laravel-postgres.yml "GitHub Action for Laravel with PostgreSQL and Redis") | | ||||||
| |Laravel without services|`macOS`, `ubuntu` and `windows`|[laravel.yml](./examples/laravel.yml "GitHub Action for Laravel without services")| | | Laravel without services              | `macOS`, `ubuntu` and `windows` | [laravel.yml](./examples/laravel.yml "GitHub Action for Laravel without services")                            | | ||||||
| |Lumen with `MySQL` and `Redis`|`ubuntu`|[lumen-mysql.yml](./examples/lumen-mysql.yml "GitHub Action for Lumen with MySQL and Redis")| | | Lumen with `MySQL` and `Redis`        | `ubuntu`                        | [lumen-mysql.yml](./examples/lumen-mysql.yml "GitHub Action for Lumen with MySQL and Redis")                  | | ||||||
| |Lumen with `PostgreSQL` and `Redis`|`ubuntu`|[lumen-postgres.yml](./examples/lumen-postgres.yml "GitHub Action for Lumen with PostgreSQL and Redis")| | | Lumen with `PostgreSQL` and `Redis`   | `ubuntu`                        | [lumen-postgres.yml](./examples/lumen-postgres.yml "GitHub Action for Lumen with PostgreSQL and Redis")       | | ||||||
| |Lumen without services|`macOS`, `ubuntu` and `windows`|[lumen.yml](./examples/lumen.yml "GitHub Action for Lumen without services")| | | Lumen without services                | `macOS`, `ubuntu` and `windows` | [lumen.yml](./examples/lumen.yml "GitHub Action for Lumen without services")                                  | | ||||||
| |Phalcon with `MySQL`|`ubuntu`|[phalcon-mysql.yml](./examples/phalcon-mysql.yml "GitHub Action for Phalcon with MySQL")| | | Phalcon with `MySQL`                  | `ubuntu`                        | [phalcon-mysql.yml](./examples/phalcon-mysql.yml "GitHub Action for Phalcon with MySQL")                      | | ||||||
| |Phalcon with `PostgreSQL`|`ubuntu`|[phalcon-postgres.yml](./examples/phalcon-postgres.yml "GitHub Action for Phalcon with PostgreSQL")| | | Phalcon with `PostgreSQL`             | `ubuntu`                        | [phalcon-postgres.yml](./examples/phalcon-postgres.yml "GitHub Action for Phalcon with PostgreSQL")           | | ||||||
| |Roots/bedrock|`ubuntu`|[bedrock.yml](./examples/bedrock.yml "GitHub Action for Wordpress Development using @roots/bedrock")| | | Roots/bedrock                         | `ubuntu`                        | [bedrock.yml](./examples/bedrock.yml "GitHub Action for Wordpress Development using @roots/bedrock")          | | ||||||
| |Roots/sage|`ubuntu`|[sage.yml](./examples/sage.yml "GitHub Action for Wordpress Development using @roots/sage")| | | Roots/sage                            | `ubuntu`                        | [sage.yml](./examples/sage.yml "GitHub Action for Wordpress Development using @roots/sage")                   | | ||||||
| |Slim Framework|`macOS`, `ubuntu` and `windows`|[slim-framework.yml](./examples/slim-framework.yml "GitHub Action for Slim Framework")| | | Slim Framework                        | `macOS`, `ubuntu` and `windows` | [slim-framework.yml](./examples/slim-framework.yml "GitHub Action for Slim Framework")                        | | ||||||
| |Symfony with `MySQL`|`ubuntu`|[symfony-mysql.yml](./examples/symfony-mysql.yml "GitHub Action for Symfony with MySQL")| | | Symfony with `MySQL`                  | `ubuntu`                        | [symfony-mysql.yml](./examples/symfony-mysql.yml "GitHub Action for Symfony with MySQL")                      | | ||||||
| |Symfony with `PostgreSQL`|`ubuntu`|[symfony-postgres.yml](./examples/symfony-postgres.yml "GitHub Action for Symfony with PostgreSQL")| | | Symfony with `PostgreSQL`             | `ubuntu`                        | [symfony-postgres.yml](./examples/symfony-postgres.yml "GitHub Action for Symfony with PostgreSQL")           | | ||||||
| |Symfony without services|`macOS`, `ubuntu` and `windows`|[symfony.yml](./examples/symfony.yml "GitHub Action for Symfony without services")| | | Symfony without services              | `macOS`, `ubuntu` and `windows` | [symfony.yml](./examples/symfony.yml "GitHub Action for Symfony without services")                            | | ||||||
| |Yii2 Starter Kit with `MySQL`|`ubuntu`|[yii2-mysql.yml](./examples/yii2-mysql.yml "GitHub Action for Yii2 Starter Kit with MySQL")| | | Yii2 Starter Kit with `MySQL`         | `ubuntu`                        | [yii2-mysql.yml](./examples/yii2-mysql.yml "GitHub Action for Yii2 Starter Kit with MySQL")                   | | ||||||
| |Yii2 Starter Kit with `PostgreSQL`|`ubuntu`|[yii2-postgres.yml](./examples/yii2-postgres.yml "GitHub Action for Yii2 Starter Kit with PostgreSQL")| | | Yii2 Starter Kit with `PostgreSQL`    | `ubuntu`                        | [yii2-postgres.yml](./examples/yii2-postgres.yml "GitHub Action for Yii2 Starter Kit with PostgreSQL")        | | ||||||
| |Zend Framework|`macOS`, `ubuntu` and `windows`|[zend-framework.yml](./examples/zend-framework.yml "GitHub Action for Zend Framework")| | | Zend Framework                        | `macOS`, `ubuntu` and `windows` | [zend-framework.yml](./examples/zend-framework.yml "GitHub Action for Zend Framework")                        | | ||||||
|  |  | ||||||
| ## :scroll: License | ## :scroll: License | ||||||
|  |  | ||||||
| The scripts and documentation in this project are released under the [MIT License](LICENSE "License for shivammathur/setup-php"). This project has multiple [dependencies](https://github.com/shivammathur/setup-php/network/dependencies "Dependencies for this PHP Action") and uses [various works](#bookmark-this-action-uses-the-following-works "Tools used by this action"). Their licenses can be found in their respective repositories. | - The scripts and documentation in this project are released under the [MIT License](LICENSE "License for shivammathur/setup-php").  | ||||||
|  | - This project has multiple [dependencies](#bookmark-dependencies "Dependencies for this PHP Action"). Their licenses can be found in their respective repositories. | ||||||
|  | - The logo for `setup-php` is a derivative work of [php.net logo](https://www.php.net/download-logos.php) and is licensed under the [CC BY-SA 4.0 License](https://creativecommons.org/licenses/by-sa/4.0/ "Creative Commons License"). | ||||||
|  |  | ||||||
| ## :+1: Contributions | ## :+1: Contributions | ||||||
|  |  | ||||||
| Contributions are welcome! See [Contributor's Guide](.github/CONTRIBUTING.md "shivammathur/setup-php contribution guide"). If you face any issues while using this or want to suggest a feature/improvement, create an issue [here](https://github.com/shivammathur/setup-php/issues "Issues reported"). | Contributions are welcome! See [Contributor's Guide](.github/CONTRIBUTING.md "shivammathur/setup-php contribution guide"). If you face any issues while using this or want to suggest a feature/improvement, create an issue [here](https://github.com/shivammathur/setup-php/issues "Issues reported"). | ||||||
|  |  | ||||||
| ## :sparkling_heart: Support this project |  | ||||||
|  |  | ||||||
| If this action helped you. | ## :sparkling_heart: Support This Project | ||||||
|  |  | ||||||
| - Please star the project and share it with the community. | - Please star the project and share it. If you blog, please share your experience of using `setup-php`. | ||||||
| - If you blog, write about your experience while using this action. | - Please [reach out](mailto:contact@setup-php.com) if you have any questions about sponsoring setup-php. | ||||||
| - I maintain this in my free time, please support me with a [Patreon](https://www.patreon.com/shivammathur "Shivam Mathur Patreon") subscription or a one time contribution using [Paypal](https://www.paypal.me/shivammathur "Shivam Mathur PayPal"). |  | ||||||
| - If you need any help using this, please contact me using [Codementor](https://www.codementor.io/shivammathur "Shivam Mathur Codementor") |  | ||||||
|  |  | ||||||
| ## :bookmark: This action uses the following works | Many users and organisations support setup-php via [GitHub Sponsors](https://github.com/sponsors/shivammathur). | ||||||
|  |  | ||||||
| - [ppa:ondrej/php](https://launchpad.net/~ondrej/+archive/ubuntu/php "Pre-compiled ubuntu packages") | <a href="https://github.com/sponsors/shivammathur"><img src="https://setup-php.com/sponsors.svg?" alt="Sponsor shivammathur"></a> | ||||||
| - [shivammathur/php-builder](https://github.com/shivammathur/php-builder "Pre-compiled nightly PHP builds") |  | ||||||
|  | These companies generously provide setup-php their products and services to aid in the development of this project. | ||||||
|  |  | ||||||
|  | <p> | ||||||
|  |   <a href="https://www.jetbrains.com/?from=setup-php"> | ||||||
|  |     <img src="https://setup-php.com/sponsors/jetbrains.svg" alt="JetBrains" width="106" height="60"> | ||||||
|  |   </a> | ||||||
|  |             | ||||||
|  |   <a href="https://www.macstadium.com/opensource/members#gh-light-mode-only"> | ||||||
|  |     <img src="https://setup-php.com/sponsors/macstadium.png" alt="Mac Stadium" width="148" height="60"> | ||||||
|  |   </a> | ||||||
|  |   <a href="https://www.macstadium.com/opensource/members#gh-dark-mode-only"> | ||||||
|  |     <img src="https://setup-php.com/sponsors/macstadium-white.png" alt="Mac Stadium" width="148" height="60"> | ||||||
|  |   </a> | ||||||
|  |             | ||||||
|  |   <a href="https://tidelift.com/subscription/pkg/npm-setup-php"> | ||||||
|  |     <img src="https://setup-php.com/sponsors/tidelift.png" alt="Tidelift" width="70" height="60"> | ||||||
|  |   </a> | ||||||
|  |             | ||||||
|  |   <a href="https://www.scaleway.com/en/about-us/open-source-program#gh-light-mode-only"> | ||||||
|  |     <img src="https://setup-php.com/sponsors/scaleway.png" alt="Scaleway" width="174" height="60"> | ||||||
|  |   </a> | ||||||
|  |   <a href="https://www.scaleway.com/en/about-us/open-source-program#gh-dark-mode-only"> | ||||||
|  |     <img src="https://setup-php.com/sponsors/scaleway-white.png" alt="Scaleway" width="174" height="60"> | ||||||
|  |   </a> | ||||||
|  | </p> | ||||||
|  |  | ||||||
|  | ## :bookmark: Dependencies | ||||||
|  |  | ||||||
|  | - [Node.js dependencies](https://github.com/shivammathur/setup-php/network/dependencies "Node.js dependencies") | ||||||
|  | - [aaronparker/VcRedist](https://github.com/aaronparker/VcRedist "VcRedist PowerShell package") | ||||||
| - [mlocati/powershell-phpmanager](https://github.com/mlocati/powershell-phpmanager "Package to handle PHP on windows") | - [mlocati/powershell-phpmanager](https://github.com/mlocati/powershell-phpmanager "Package to handle PHP on windows") | ||||||
|  | - [ppa:ondrej/php](https://launchpad.net/~ondrej/+archive/ubuntu/php "Packaging active PHP packages") | ||||||
| - [shivammathur/homebrew-php](https://github.com/shivammathur/homebrew-php "Tap for PHP builds for MacOS") | - [shivammathur/homebrew-php](https://github.com/shivammathur/homebrew-php "Tap for PHP builds for MacOS") | ||||||
|  | - [shivammathur/homebrew-extensions](https://github.com/shivammathur/homebrew-extensions "Tap for PHP extensions for MacOS") | ||||||
|  | - [shivammathur/php-builder](https://github.com/shivammathur/php-builder "Nightly PHP package") | ||||||
|  |  | ||||||
| ## :bookmark_tabs: Further Reading | ## :bookmark_tabs: Further Reading | ||||||
|  |  | ||||||
|  | |||||||
| @ -12,9 +12,9 @@ describe('Config tests', () => { | |||||||
|  |  | ||||||
|     win32 = await config.addINIValues( |     win32 = await config.addINIValues( | ||||||
|       'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata', |       'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata', | ||||||
|       'fedora' |       'openbsd' | ||||||
|     ); |     ); | ||||||
|     expect(win32).toContain('Platform fedora is not supported'); |     expect(win32).toContain('Platform openbsd is not supported'); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking addINIValuesOnLinux', async () => { |   it('checking addINIValuesOnLinux', async () => { | ||||||
| @ -29,9 +29,9 @@ describe('Config tests', () => { | |||||||
|  |  | ||||||
|     linux = await config.addINIValues( |     linux = await config.addINIValues( | ||||||
|       'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata', |       'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata', | ||||||
|       'fedora' |       'openbsd' | ||||||
|     ); |     ); | ||||||
|     expect(linux).toContain('Platform fedora is not supported'); |     expect(linux).toContain('Platform openbsd is not supported'); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking addINIValuesOnDarwin', async () => { |   it('checking addINIValuesOnDarwin', async () => { | ||||||
| @ -45,8 +45,8 @@ describe('Config tests', () => { | |||||||
|  |  | ||||||
|     darwin = await config.addINIValues( |     darwin = await config.addINIValues( | ||||||
|       'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata', |       'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata', | ||||||
|       'fedora' |       'openbsd' | ||||||
|     ); |     ); | ||||||
|     expect(darwin).toContain('Platform fedora is not supported'); |     expect(darwin).toContain('Platform openbsd is not supported'); | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
|  | |||||||
| @ -1,15 +1,9 @@ | |||||||
| import * as coverage from '../src/coverage'; | import * as coverage from '../src/coverage'; | ||||||
|  |  | ||||||
| jest.mock('../src/extensions', () => ({ |  | ||||||
|   addExtension: jest.fn().mockImplementation(extension => { |  | ||||||
|     return 'add_extension ' + extension + '\n'; |  | ||||||
|   }) |  | ||||||
| })); |  | ||||||
|  |  | ||||||
| describe('Config tests', () => { | describe('Config tests', () => { | ||||||
|   it('checking addCoverage with PCOV on windows', async () => { |   it('checking addCoverage with PCOV on windows', async () => { | ||||||
|     let win32: string = await coverage.addCoverage('PCOV', '7.4', 'win32'); |     let win32: string = await coverage.addCoverage('PCOV', '7.4', 'win32'); | ||||||
|     expect(win32).toContain('add_extension pcov'); |     expect(win32).toContain('Add-Extension pcov'); | ||||||
|     expect(win32).toContain('Remove-Extension xdebug'); |     expect(win32).toContain('Remove-Extension xdebug'); | ||||||
|  |  | ||||||
|     win32 = await coverage.addCoverage('pcov', '7.0', 'win32'); |     win32 = await coverage.addCoverage('pcov', '7.0', 'win32'); | ||||||
| @ -27,28 +21,38 @@ describe('Config tests', () => { | |||||||
|  |  | ||||||
|   it('checking addCoverage with PCOV on darwin', async () => { |   it('checking addCoverage with PCOV on darwin', async () => { | ||||||
|     const darwin: string = await coverage.addCoverage('pcov', '7.4', 'darwin'); |     const darwin: string = await coverage.addCoverage('pcov', '7.4', 'darwin'); | ||||||
|     expect(darwin).toContain('add_extension pcov'); |     expect(darwin).toContain('add_brew_extension pcov'); | ||||||
|     expect(darwin).toContain('remove_extension xdebug'); |     expect(darwin).toContain('remove_extension xdebug'); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking addCoverage with Xdebug on windows', async () => { |   it('checking addCoverage with Xdebug on windows', async () => { | ||||||
|     const win32: string = await coverage.addCoverage('xdebug', '7.4', 'win32'); |     const win32: string = await coverage.addCoverage('xdebug', '7.4', 'win32'); | ||||||
|     expect(win32).toContain('add_extension xdebug'); |     expect(win32).toContain('Add-Extension xdebug'); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking addCoverage with Xdebug on windows', async () => { |   it('checking addCoverage with Xdebug3 on windows', async () => { | ||||||
|     const win32: string = await coverage.addCoverage('xdebug', '8.0', 'win32'); |     const win32: string = await coverage.addCoverage('xdebug3', '7.4', 'win32'); | ||||||
|     expect(win32).toContain('Xdebug currently only supports PHP 7.4 or lower'); |     expect(win32).toContain('Add-Extension xdebug'); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking addCoverage with Xdebug on linux', async () => { |   it('checking addCoverage with Xdebug2 on windows', async () => { | ||||||
|     const linux: string = await coverage.addCoverage('xdebug', '7.4', 'linux'); |     const win32: string = await coverage.addCoverage('xdebug2', '7.4', 'win32'); | ||||||
|     expect(linux).toContain('add_extension xdebug'); |     expect(win32).toContain('Add-Extension xdebug stable 2.9.8'); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking addCoverage with Xdebug on linux', async () => { |   it('checking addCoverage with Xdebug on linux', async () => { | ||||||
|     const linux: string = await coverage.addCoverage('xdebug', '8.0', 'linux'); |     const linux: string = await coverage.addCoverage('xdebug', '8.0', 'linux'); | ||||||
|     expect(linux).toContain('Xdebug currently only supports PHP 7.4 or lower'); |     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 () => { |   it('checking addCoverage with Xdebug on darwin', async () => { | ||||||
| @ -57,16 +61,25 @@ describe('Config tests', () => { | |||||||
|       '7.4', |       '7.4', | ||||||
|       'darwin' |       'darwin' | ||||||
|     ); |     ); | ||||||
|     expect(darwin).toContain('add_extension xdebug'); |     expect(darwin).toContain('add_brew_extension xdebug'); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking addCoverage with Xdebug on darwin', async () => { |   it('checking addCoverage with Xdebug3 on darwin', async () => { | ||||||
|     const darwin: string = await coverage.addCoverage( |     const darwin: string = await coverage.addCoverage( | ||||||
|       'xdebug', |       'xdebug3', | ||||||
|       '8.0', |       '7.4', | ||||||
|       'darwin' |       'darwin' | ||||||
|     ); |     ); | ||||||
|     expect(darwin).toContain('Xdebug currently only supports PHP 7.4 or lower'); |     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 () => { |   it('checking disableCoverage windows', async () => { | ||||||
|  | |||||||
| @ -3,15 +3,32 @@ import * as extensions from '../src/extensions'; | |||||||
| describe('Extension tests', () => { | describe('Extension tests', () => { | ||||||
|   it('checking addExtensionOnWindows', async () => { |   it('checking addExtensionOnWindows', async () => { | ||||||
|     let win32: string = await extensions.addExtension( |     let win32: string = await extensions.addExtension( | ||||||
|       'xdebug, pcov, phalcon4, ast-beta', |       'Xdebug, pcov, sqlite, phalcon4, ast-beta', | ||||||
|       '7.4', |       '7.4', | ||||||
|       'win32' |       'win32' | ||||||
|     ); |     ); | ||||||
|     expect(win32).toContain('Add-Extension xdebug'); |     expect(win32).toContain('Add-Extension xdebug'); | ||||||
|     expect(win32).toContain('Add-Extension pcov'); |     expect(win32).toContain('Add-Extension pcov'); | ||||||
|  |     expect(win32).toContain('Add-Extension sqlite3'); | ||||||
|     expect(win32).toContain('phalcon.ps1 phalcon4'); |     expect(win32).toContain('phalcon.ps1 phalcon4'); | ||||||
|     expect(win32).toContain('Add-Extension ast beta'); |     expect(win32).toContain('Add-Extension ast beta'); | ||||||
|  |  | ||||||
|  |     win32 = await extensions.addExtension('xdebug2', '7.2', 'win32'); | ||||||
|  |     expect(win32).toContain('Add-Extension xdebug stable 2.9.8'); | ||||||
|  |  | ||||||
|  |     win32 = await extensions.addExtension('mysql', '7.4', 'win32'); | ||||||
|  |     expect(win32).toContain('Add-Extension mysqli'); | ||||||
|  |     expect(win32).toContain('Add-Extension mysqlnd'); | ||||||
|  |  | ||||||
|  |     win32 = await extensions.addExtension('mysql', '8.0', 'win32'); | ||||||
|  |     expect(win32).toContain('Add-Extension mysqli'); | ||||||
|  |     expect(win32).toContain('Add-Extension mysqlnd'); | ||||||
|  |  | ||||||
|  |     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'); | ||||||
|  |  | ||||||
|     win32 = await extensions.addExtension( |     win32 = await extensions.addExtension( | ||||||
|       'phalcon3, does_not_exist', |       'phalcon3, does_not_exist', | ||||||
|       '7.2', |       '7.2', | ||||||
| @ -21,38 +38,33 @@ describe('Extension tests', () => { | |||||||
|     expect(win32).toContain('phalcon.ps1 phalcon3'); |     expect(win32).toContain('phalcon.ps1 phalcon3'); | ||||||
|     expect(win32).toContain('Add-Extension does_not_exist'); |     expect(win32).toContain('Add-Extension does_not_exist'); | ||||||
|  |  | ||||||
|     win32 = await extensions.addExtension('xdebug', '7.2', 'fedora'); |     win32 = await extensions.addExtension('xdebug', '7.2', 'openbsd'); | ||||||
|     expect(win32).toContain('Platform fedora is not supported'); |     expect(win32).toContain('Platform openbsd is not supported'); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking addExtensionOnLinux', async () => { |   it('checking addExtensionOnLinux', async () => { | ||||||
|     let linux: string = await extensions.addExtension( |     let linux: string = await extensions.addExtension( | ||||||
|       'xdebug, pcov, ast-beta', |       'Xdebug, pcov, sqlite, ast-beta, xdebug-alpha', | ||||||
|       '7.4', |       '7.4', | ||||||
|       'linux' |       'linux' | ||||||
|     ); |     ); | ||||||
|     expect(linux).toContain('update_extension xdebug 2.9.0'); |     expect(linux).toContain('sudo $debconf_fix apt-get install -y php7.4-pcov'); | ||||||
|     expect(linux).toContain( |     expect(linux).toContain( | ||||||
|       'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y php7.4-pcov' |       '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' | ||||||
|     ); |     ); | ||||||
|     expect(linux).toContain('install_extension ast-beta'); |  | ||||||
|  |  | ||||||
|     linux = await extensions.addExtension('gearman', '7.0', 'linux'); |     linux = await extensions.addExtension('gearman', '7.0', 'linux'); | ||||||
|     expect(linux).toContain('gearman.sh 7.0'); |     expect(linux).toContain('gearman.sh'); | ||||||
|     linux = await extensions.addExtension('gearman', '7.1', 'linux'); |  | ||||||
|     expect(linux).toContain('gearman.sh 7.1'); |  | ||||||
|  |  | ||||||
|     linux = await extensions.addExtension('gearman', '7.2', 'linux'); |     linux = await extensions.addExtension('xdebug2', '7.2', 'linux'); | ||||||
|     expect(linux).toContain('gearman.sh 7.2'); |     expect(linux).toContain('add_pecl_extension xdebug 2.9.8 zend_extension'); | ||||||
|  |  | ||||||
|     linux = await extensions.addExtension('gearman', '7.3', 'linux'); |     linux = await extensions.addExtension('xdebug', '7.2', 'openbsd'); | ||||||
|     expect(linux).toContain('gearman.sh 7.3'); |     expect(linux).toContain('Platform openbsd is not supported'); | ||||||
|  |  | ||||||
|     linux = await extensions.addExtension('gearman', '7.4', 'linux'); |  | ||||||
|     expect(linux).toContain('gearman.sh 7.4'); |  | ||||||
|  |  | ||||||
|     linux = await extensions.addExtension('xdebug', '7.2', 'fedora'); |  | ||||||
|     expect(linux).toContain('Platform fedora is not supported'); |  | ||||||
|  |  | ||||||
|     linux = await extensions.addExtension('phalcon3, phalcon4', '7.3', 'linux'); |     linux = await extensions.addExtension('phalcon3, phalcon4', '7.3', 'linux'); | ||||||
|     expect(linux).toContain('phalcon.sh phalcon3 7.3'); |     expect(linux).toContain('phalcon.sh phalcon3 7.3'); | ||||||
| @ -61,48 +73,41 @@ describe('Extension tests', () => { | |||||||
|  |  | ||||||
|   it('checking addExtensionOnDarwin', async () => { |   it('checking addExtensionOnDarwin', async () => { | ||||||
|     let darwin: string = await extensions.addExtension( |     let darwin: string = await extensions.addExtension( | ||||||
|       'xdebug, pcov, ast-beta', |       'Xdebug, pcov, expect, grpc, igbinary, imagick, phalcon3, phalcon4, protobuf, psr, rdkafka, ssh2, swoole, vips, sqlite, ast-beta', | ||||||
|       '7.2', |       '7.2', | ||||||
|       'darwin' |       'darwin' | ||||||
|     ); |     ); | ||||||
|     expect(darwin).toContain('sudo pecl install -f xdebug'); |     expect(darwin).toContain('add_brew_extension xdebug'); | ||||||
|     expect(darwin).toContain('sudo pecl install -f pcov'); |     expect(darwin).toContain('add_brew_extension pcov'); | ||||||
|     expect(darwin).toContain('install_extension ast-beta'); |     expect(darwin).toContain('add_brew_extension expect'); | ||||||
|  |     expect(darwin).toContain('add_brew_extension grpc'); | ||||||
|     darwin = await extensions.addExtension('phalcon3', '7.0', 'darwin'); |     expect(darwin).toContain('add_brew_extension igbinary'); | ||||||
|     expect(darwin).toContain('phalcon_darwin.sh phalcon3 7.0'); |     expect(darwin).toContain('add_brew_extension imagick'); | ||||||
|  |     expect(darwin).toContain('add_brew_extension phalcon3'); | ||||||
|     darwin = await extensions.addExtension('phalcon4', '7.3', 'darwin'); |     expect(darwin).toContain('add_brew_extension phalcon4'); | ||||||
|     expect(darwin).toContain('phalcon_darwin.sh phalcon4 7.3'); |     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'); |     darwin = await extensions.addExtension('pcov', '5.6', 'darwin'); | ||||||
|     expect(darwin).toContain('sudo pecl install -f pcov'); |     expect(darwin).toContain('pecl_install pcov'); | ||||||
|  |  | ||||||
|     darwin = await extensions.addExtension('pcov', '7.2', 'darwin'); |     darwin = await extensions.addExtension('pcov', '7.2', 'darwin'); | ||||||
|     expect(darwin).toContain('sudo pecl install -f pcov'); |     expect(darwin).toContain('add_brew_extension pcov'); | ||||||
|  |  | ||||||
|     darwin = await extensions.addExtension('xdebug', '5.6', 'darwin'); |     darwin = await extensions.addExtension('xdebug', '5.6', 'darwin'); | ||||||
|     expect(darwin).toContain('sudo pecl install -f xdebug-2.5.5'); |     expect(darwin).toContain('add_brew_extension xdebug'); | ||||||
|  |  | ||||||
|     darwin = await extensions.addExtension('xdebug', '7.0', 'darwin'); |     darwin = await extensions.addExtension('xdebug', '7.0', 'darwin'); | ||||||
|     expect(darwin).toContain('sudo pecl install -f xdebug-2.9.0'); |     expect(darwin).toContain('add_brew_extension xdebug'); | ||||||
|  |  | ||||||
|     darwin = await extensions.addExtension('xdebug', '7.2', 'darwin'); |     darwin = await extensions.addExtension('xdebug2', '7.2', 'darwin'); | ||||||
|     expect(darwin).toContain('sudo pecl install -f xdebug'); |     expect(darwin).toContain('add_brew_extension xdebug2'); | ||||||
|  |  | ||||||
|     darwin = await extensions.addExtension('redis', '5.6', 'darwin'); |  | ||||||
|     expect(darwin).toContain('sudo pecl install -f redis-2.2.8'); |  | ||||||
|  |  | ||||||
|     darwin = await extensions.addExtension('redis', '7.2', 'darwin'); |  | ||||||
|     expect(darwin).toContain('sudo pecl install -f redis'); |  | ||||||
|  |  | ||||||
|     darwin = await extensions.addExtension('imagick', '5.6', 'darwin'); |  | ||||||
|     expect(darwin).toContain('brew install pkg-config imagemagick'); |  | ||||||
|     expect(darwin).toContain('sudo pecl install -f imagick'); |  | ||||||
|  |  | ||||||
|     darwin = await extensions.addExtension('imagick', '7.4', 'darwin'); |  | ||||||
|     expect(darwin).toContain('brew install pkg-config imagemagick'); |  | ||||||
|     expect(darwin).toContain('sudo pecl install -f imagick'); |  | ||||||
|  |  | ||||||
|     darwin = await extensions.addExtension( |     darwin = await extensions.addExtension( | ||||||
|       'does_not_exist', |       'does_not_exist', | ||||||
| @ -112,7 +117,7 @@ describe('Extension tests', () => { | |||||||
|     ); |     ); | ||||||
|     expect(darwin).toContain('add_extension does_not_exist'); |     expect(darwin).toContain('add_extension does_not_exist'); | ||||||
|  |  | ||||||
|     darwin = await extensions.addExtension('xdebug', '7.2', 'fedora'); |     darwin = await extensions.addExtension('xdebug', '7.2', 'openbsd'); | ||||||
|     expect(darwin).toContain('Platform fedora is not supported'); |     expect(darwin).toContain('Platform openbsd is not supported'); | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
|  | |||||||
| @ -4,61 +4,61 @@ import * as install from '../src/install'; | |||||||
|  * Mock install.ts |  * Mock install.ts | ||||||
|  */ |  */ | ||||||
| jest.mock('../src/install', () => ({ | jest.mock('../src/install', () => ({ | ||||||
|   build: jest.fn().mockImplementation( |   build: jest | ||||||
|     async ( |     .fn() | ||||||
|       filename: string, |     .mockImplementation( | ||||||
|       version: string, |       async ( | ||||||
|       os_version: string |         filename: string, | ||||||
|     ): Promise<string> => { |         version: string, | ||||||
|       const extension_csv: string = process.env['extensions'] || ''; |         os_version: string | ||||||
|       const ini_values_csv: string = process.env['ini-values'] || ''; |       ): Promise<string> => { | ||||||
|       const coverage_driver: string = process.env['coverage'] || ''; |         const extension_csv: string = process.env['extensions'] || ''; | ||||||
|       let tools_csv: string = process.env['tools'] || ''; |         const ini_values_csv: string = process.env['ini-values'] || ''; | ||||||
|       const pecl: string = process.env['pecl'] || ''; |         const coverage_driver: string = process.env['coverage'] || ''; | ||||||
|       if (pecl == 'true') { |         let tools_csv: string = process.env['tools'] || ''; | ||||||
|         tools_csv = 'pecl, ' + tools_csv; |         const pecl: string = process.env['pecl'] || ''; | ||||||
|       } |         if (pecl == 'true') { | ||||||
|  |           tools_csv = 'pecl, ' + tools_csv; | ||||||
|  |         } | ||||||
|  |  | ||||||
|       let script = 'initial script ' + filename + version + os_version; |         let script = 'initial script ' + filename + version + os_version; | ||||||
|       if (tools_csv) { |         if (tools_csv) { | ||||||
|         script += 'add_tool'; |           script += 'add_tool'; | ||||||
|       } |         } | ||||||
|       if (extension_csv) { |         if (extension_csv) { | ||||||
|         script += 'install extensions'; |           script += 'install extensions'; | ||||||
|       } |         } | ||||||
|       if (ini_values_csv) { |         if (coverage_driver) { | ||||||
|         script += 'edit php.ini'; |           script += 'set coverage driver'; | ||||||
|       } |         } | ||||||
|       if (coverage_driver) { |         if (ini_values_csv) { | ||||||
|         script += 'set coverage driver'; |           script += 'edit php.ini'; | ||||||
|       } |         } | ||||||
|  |  | ||||||
|       return script; |         return script; | ||||||
|  |       } | ||||||
|  |     ), | ||||||
|  |   run: jest.fn().mockImplementation(async (): Promise<string> => { | ||||||
|  |     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'; | ||||||
|     } |     } | ||||||
|   ), |  | ||||||
|   run: jest.fn().mockImplementation( |  | ||||||
|     async (): Promise<string> => { |  | ||||||
|       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 += 'sh 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; |     return script; | ||||||
|     } |   }) | ||||||
|   ) |  | ||||||
| })); | })); | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @ -69,6 +69,8 @@ jest.mock('../src/install', () => ({ | |||||||
|  * @param extension_csv |  * @param extension_csv | ||||||
|  * @param ini_values_csv |  * @param ini_values_csv | ||||||
|  * @param coverage_driver |  * @param coverage_driver | ||||||
|  |  * @param tools | ||||||
|  |  * @param pecl | ||||||
|  */ |  */ | ||||||
| function setEnv( | function setEnv( | ||||||
|   version: string | number, |   version: string | number, | ||||||
| @ -91,20 +93,20 @@ function setEnv( | |||||||
| describe('Install', () => { | describe('Install', () => { | ||||||
|   it('Test install on windows', async () => { |   it('Test install on windows', async () => { | ||||||
|     setEnv('7.0', 'win32', '', '', '', '', ''); |     setEnv('7.0', 'win32', '', '', '', '', ''); | ||||||
|     // @ts-ignore |  | ||||||
|     let script: string = await install.run(); |     let script: string = '' + (await install.run()); | ||||||
|     expect(script).toContain('initial script'); |     expect(script).toContain('initial script'); | ||||||
|     expect(script).toContain('pwsh script.ps1 7.0 ' + __dirname); |     expect(script).toContain('pwsh script.ps1 7.0 ' + __dirname); | ||||||
|  |  | ||||||
|     setEnv('7.3', 'win32', '', '', '', '', ''); |     setEnv('7.3', 'win32', '', '', '', '', ''); | ||||||
|     // @ts-ignore |  | ||||||
|     script = await install.run(); |     script = '' + (await install.run()); | ||||||
|     expect(script).toContain('initial script'); |     expect(script).toContain('initial script'); | ||||||
|     expect(script).toContain('pwsh script.ps1 7.3 ' + __dirname); |     expect(script).toContain('pwsh script.ps1 7.3 ' + __dirname); | ||||||
|  |  | ||||||
|     setEnv('7.3', 'win32', 'a, b', 'a=b', 'x', '', ''); |     setEnv('7.3', 'win32', 'a, b', 'a=b', 'x', '', ''); | ||||||
|     // @ts-ignore |  | ||||||
|     script = await install.run(); |     script = '' + (await install.run()); | ||||||
|     expect(script).toContain('initial script'); |     expect(script).toContain('initial script'); | ||||||
|     expect(script).toContain('install extensions'); |     expect(script).toContain('install extensions'); | ||||||
|     expect(script).toContain('edit php.ini'); |     expect(script).toContain('edit php.ini'); | ||||||
| @ -114,66 +116,66 @@ describe('Install', () => { | |||||||
|  |  | ||||||
|   it('Test install on linux', async () => { |   it('Test install on linux', async () => { | ||||||
|     setEnv('7.3', 'linux', '', '', '', '', ''); |     setEnv('7.3', 'linux', '', '', '', '', ''); | ||||||
|     // @ts-ignore |  | ||||||
|     let script: string = await install.run(); |  | ||||||
|     expect(script).toContain('initial script'); |  | ||||||
|     expect(script).toContain('sh script.sh 7.3 '); |  | ||||||
|  |  | ||||||
|     setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'phpunit', 'true'); |     let script: string = '' + (await install.run()); | ||||||
|     // @ts-ignore |     expect(script).toContain('initial script'); | ||||||
|     script = await install.run(); |     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('initial script'); | ||||||
|     expect(script).toContain('install extensions'); |     expect(script).toContain('install extensions'); | ||||||
|     expect(script).toContain('edit php.ini'); |     expect(script).toContain('edit php.ini'); | ||||||
|     expect(script).toContain('set coverage driver'); |     expect(script).toContain('set coverage driver'); | ||||||
|     expect(script).toContain('sh script.sh 7.3'); |     expect(script).toContain('bash script.sh 7.4'); | ||||||
|     expect(script).toContain('add_tool'); |     expect(script).toContain('add_tool'); | ||||||
|  |  | ||||||
|     setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'phpunit', ''); |     setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'phpunit', ''); | ||||||
|     // @ts-ignore |  | ||||||
|     script = await install.run(); |     script = '' + (await install.run()); | ||||||
|     expect(script).toContain('initial script'); |     expect(script).toContain('initial script'); | ||||||
|     expect(script).toContain('install extensions'); |     expect(script).toContain('install extensions'); | ||||||
|     expect(script).toContain('edit php.ini'); |     expect(script).toContain('edit php.ini'); | ||||||
|     expect(script).toContain('set coverage driver'); |     expect(script).toContain('set coverage driver'); | ||||||
|     expect(script).toContain('sh script.sh 7.3'); |     expect(script).toContain('bash script.sh 7.3'); | ||||||
|     expect(script).toContain('add_tool'); |     expect(script).toContain('add_tool'); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('Test install on darwin', async () => { |   it('Test install on darwin', async () => { | ||||||
|     setEnv('7.3', 'darwin', '', '', '', '', ''); |     setEnv('7.3', 'darwin', '', '', '', '', ''); | ||||||
|     // @ts-ignore |  | ||||||
|     let script: string = await install.run(); |     let script: string = '' + (await install.run()); | ||||||
|     expect(script).toContain('initial script'); |     expect(script).toContain('initial script'); | ||||||
|     expect(script).toContain('sh script.sh 7.3 ' + __dirname); |     expect(script).toContain('bash script.sh 7.3 ' + __dirname); | ||||||
|  |  | ||||||
|     setEnv('7.3', 'darwin', 'a, b', 'a=b', 'x', '', ''); |     setEnv('7.3', 'darwin', 'a, b', 'a=b', 'x', '', ''); | ||||||
|     // @ts-ignore |  | ||||||
|     script = await install.run(); |     script = '' + (await install.run()); | ||||||
|     expect(script).toContain('initial script'); |     expect(script).toContain('initial script'); | ||||||
|     expect(script).toContain('install extensions'); |     expect(script).toContain('install extensions'); | ||||||
|     expect(script).toContain('edit php.ini'); |     expect(script).toContain('edit php.ini'); | ||||||
|     expect(script).toContain('set coverage driver'); |     expect(script).toContain('set coverage driver'); | ||||||
|     expect(script).toContain('sh script.sh 7.3 ' + __dirname); |     expect(script).toContain('bash script.sh 7.3 ' + __dirname); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('Test malformed version inputs', async () => { |   it('Test malformed version inputs', async () => { | ||||||
|     setEnv('7.4.1', 'darwin', '', '', '', '', ''); |     setEnv('7.4.1', 'darwin', '', '', '', '', ''); | ||||||
|     // @ts-ignore |  | ||||||
|     let script: string = await install.run(); |     let script: string = '' + (await install.run()); | ||||||
|     expect(script).toContain('initial script'); |     expect(script).toContain('initial script'); | ||||||
|     expect(script).toContain('sh script.sh 7.4 ' + __dirname); |     expect(script).toContain('bash script.sh 7.4 ' + __dirname); | ||||||
|  |  | ||||||
|     setEnv(8.0, 'darwin', '', '', '', '', ''); |     setEnv(8.0, 'darwin', '', '', '', '', ''); | ||||||
|     // @ts-ignore |  | ||||||
|     script = await install.run(); |     script = '' + (await install.run()); | ||||||
|     expect(script).toContain('initial script'); |     expect(script).toContain('initial script'); | ||||||
|     expect(script).toContain('sh script.sh 8.0 ' + __dirname); |     expect(script).toContain('bash script.sh 8.0 ' + __dirname); | ||||||
|  |  | ||||||
|     setEnv(8, 'darwin', '', '', '', '', ''); |     setEnv(8, 'darwin', '', '', '', '', ''); | ||||||
|     // @ts-ignore |  | ||||||
|     script = await install.run(); |     script = '' + (await install.run()); | ||||||
|     expect(script).toContain('initial script'); |     expect(script).toContain('initial script'); | ||||||
|     expect(script).toContain('sh script.sh 8.0 ' + __dirname); |     expect(script).toContain('bash script.sh 8.0 ' + __dirname); | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
|  | |||||||
| @ -1,34 +0,0 @@ | |||||||
| import * as io from '@actions/io'; |  | ||||||
| import * as path from 'path'; |  | ||||||
| import * as fs from 'fs'; |  | ||||||
| import * as matchers from '../src/matchers'; |  | ||||||
|  |  | ||||||
| async function cleanup(path: string): Promise<void> { |  | ||||||
|   fs.unlink(path, error => { |  | ||||||
|     if (error) { |  | ||||||
|       console.log(error); |  | ||||||
|     } |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| jest.mock('@actions/io'); |  | ||||||
|  |  | ||||||
| describe('Matchers', () => { |  | ||||||
|   it('Add matchers', async () => { |  | ||||||
|     process.env['RUNNER_TOOL_CACHE'] = __dirname; |  | ||||||
|     await matchers.addMatchers(); |  | ||||||
|     const spy = jest.spyOn(io, 'cp'); |  | ||||||
|     expect(spy).toHaveBeenCalledTimes(1); |  | ||||||
|   }); |  | ||||||
|  |  | ||||||
|   it('Test Regex', async () => { |  | ||||||
|     const regex1 = /^\d+\)\s.*$/; |  | ||||||
|     const regex2 = /^(.*Failed\sasserting\sthat.*)$/; |  | ||||||
|     const regex3 = /^\s*$/; |  | ||||||
|     const regex4 = /^(.*):(\d+)$/; |  | ||||||
|     expect(regex1.test('1) Tests\\Test::it_tests')).toBe(true); |  | ||||||
|     expect(regex2.test('Failed asserting that false is true')).toBe(true); |  | ||||||
|     expect(regex3.test('\n')).toBe(true); |  | ||||||
|     expect(regex4.test('/path/to/file.php:42')).toBe(true); |  | ||||||
|   }); |  | ||||||
| }); |  | ||||||
| @ -2,29 +2,35 @@ import * as tools from '../src/tools'; | |||||||
|  |  | ||||||
| describe('Tools tests', () => { | describe('Tools tests', () => { | ||||||
|   it('checking getCommand', async () => { |   it('checking getCommand', async () => { | ||||||
|     expect(await tools.getArchiveCommand('linux')).toBe('add_tool '); |     expect(await tools.getCommand('linux', 'tool')).toBe('add_tool '); | ||||||
|     expect(await tools.getArchiveCommand('darwin')).toBe('add_tool '); |     expect(await tools.getCommand('darwin', 'tool')).toBe('add_tool '); | ||||||
|     expect(await tools.getArchiveCommand('win32')).toBe('Add-Tool '); |     expect(await tools.getCommand('win32', 'tool')).toBe('Add-Tool '); | ||||||
|     expect(await tools.getArchiveCommand('fedora')).toContain( |     expect(await tools.getCommand('openbsd', 'tool')).toContain( | ||||||
|       'Platform fedora is not supported' |       'Platform openbsd is not supported' | ||||||
|     ); |     ); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking getCommand', async () => { |   it('checking getCommand', async () => { | ||||||
|     expect(await tools.getPackageCommand('linux')).toBe('add_composer_tool '); |     expect(await tools.getCommand('linux', 'composertool')).toBe( | ||||||
|     expect(await tools.getPackageCommand('darwin')).toBe('add_composer_tool '); |       'add_composertool ' | ||||||
|     expect(await tools.getPackageCommand('win32')).toBe('Add-Composer-Tool '); |     ); | ||||||
|     expect(await tools.getPackageCommand('fedora')).toContain( |     expect(await tools.getCommand('darwin', 'composertool')).toBe( | ||||||
|       'Platform fedora is not supported' |       'add_composertool ' | ||||||
|  |     ); | ||||||
|  |     expect(await tools.getCommand('win32', 'composertool')).toBe( | ||||||
|  |       'Add-Composertool ' | ||||||
|  |     ); | ||||||
|  |     expect(await tools.getCommand('openbsd', 'composertool')).toContain( | ||||||
|  |       'Platform openbsd is not supported' | ||||||
|     ); |     ); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking getPECLCommand', async () => { |   it('checking getCommand', async () => { | ||||||
|     expect(await tools.getPECLCommand('linux')).toBe('add_pecl '); |     expect(await tools.getCommand('linux', 'pecl')).toBe('add_pecl '); | ||||||
|     expect(await tools.getPECLCommand('darwin')).toBe('add_pecl '); |     expect(await tools.getCommand('darwin', 'pecl')).toBe('add_pecl '); | ||||||
|     expect(await tools.getPECLCommand('win32')).toBe('Add-PECL '); |     expect(await tools.getCommand('win32', 'pecl')).toBe('Add-Pecl '); | ||||||
|     expect(await tools.getPECLCommand('fedora')).toContain( |     expect(await tools.getCommand('openbsd', 'pecl')).toContain( | ||||||
|       'Platform fedora is not supported' |       'Platform openbsd is not supported' | ||||||
|     ); |     ); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
| @ -96,88 +102,44 @@ describe('Tools tests', () => { | |||||||
|  |  | ||||||
|   it('checking getUri', async () => { |   it('checking getUri', async () => { | ||||||
|     expect( |     expect( | ||||||
|       await tools.getUri('tool', 'latest', 'releases', '', 'download') |       await tools.getUri('tool', '.phar', 'latest', 'releases', '', 'download') | ||||||
|     ).toBe('releases/latest/download/tool.phar'); |     ).toBe('releases/latest/download/tool.phar'); | ||||||
|     expect( |     expect( | ||||||
|       await tools.getUri('tool', '1.2.3', 'releases', '', 'download') |       await tools.getUri('tool', '.phar', '1.2.3', 'releases', '', 'download') | ||||||
|     ).toBe('releases/download/1.2.3/tool.phar'); |     ).toBe('releases/download/1.2.3/tool.phar'); | ||||||
|     expect( |     expect( | ||||||
|       await tools.getUri('tool', '1.2.3', 'releases', 'v', 'download') |       await tools.getUri('tool', '.phar', '1.2.3', 'releases', 'v', 'download') | ||||||
|     ).toBe('releases/download/v1.2.3/tool.phar'); |     ).toBe('releases/download/v1.2.3/tool.phar'); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking getCodeceptionUriBuilder', async () => { |  | ||||||
|     expect(await tools.getCodeceptionUriBuilder('3.2.1', '5.6', 'php56')).toBe( |  | ||||||
|       'releases/3.2.1/php56/codecept.phar' |  | ||||||
|     ); |  | ||||||
|     expect(await tools.getCodeceptionUriBuilder('3.2.1', '7.0', 'php54')).toBe( |  | ||||||
|       'releases/3.2.1/php54/codecept.phar' |  | ||||||
|     ); |  | ||||||
|     expect(await tools.getCodeceptionUriBuilder('3.2.1', '7.1', 'php56')).toBe( |  | ||||||
|       'releases/3.2.1/php56/codecept.phar' |  | ||||||
|     ); |  | ||||||
|     expect(await tools.getCodeceptionUriBuilder('3.2.1', '7.2', 'php56')).toBe( |  | ||||||
|       'releases/3.2.1/codecept.phar' |  | ||||||
|     ); |  | ||||||
|     expect(await tools.getCodeceptionUriBuilder('3.2.1', '7.3', 'php56')).toBe( |  | ||||||
|       'releases/3.2.1/codecept.phar' |  | ||||||
|     ); |  | ||||||
|     expect(await tools.getCodeceptionUriBuilder('3.2.1', '7.4', 'php56')).toBe( |  | ||||||
|       'releases/3.2.1/codecept.phar' |  | ||||||
|     ); |  | ||||||
|   }); |  | ||||||
|  |  | ||||||
|   it('checking getCodeceptionUri', async () => { |  | ||||||
|     expect(await tools.getCodeceptionUri('latest', '5.6')).toBe( |  | ||||||
|       'php56/codecept.phar' |  | ||||||
|     ); |  | ||||||
|     expect(await tools.getCodeceptionUri('latest', '7.0')).toBe( |  | ||||||
|       'php56/codecept.phar' |  | ||||||
|     ); |  | ||||||
|     expect(await tools.getCodeceptionUri('latest', '7.1')).toBe( |  | ||||||
|       'php56/codecept.phar' |  | ||||||
|     ); |  | ||||||
|     expect(await tools.getCodeceptionUri('latest', '7.2')).toBe( |  | ||||||
|       'codecept.phar' |  | ||||||
|     ); |  | ||||||
|     expect(await tools.getCodeceptionUri('latest', '7.3')).toBe( |  | ||||||
|       'codecept.phar' |  | ||||||
|     ); |  | ||||||
|     expect(await tools.getCodeceptionUri('latest', '7.4')).toBe( |  | ||||||
|       'codecept.phar' |  | ||||||
|     ); |  | ||||||
|     expect(await tools.getCodeceptionUri('3.2.1', '5.6')).toBe( |  | ||||||
|       'releases/3.2.1/php54/codecept.phar' |  | ||||||
|     ); |  | ||||||
|     expect(await tools.getCodeceptionUri('4.3.2', '5.6')).toBe( |  | ||||||
|       'releases/4.3.2/php56/codecept.phar' |  | ||||||
|     ); |  | ||||||
|     expect(await tools.getCodeceptionUri('3.2.1', '7.4')).toBe( |  | ||||||
|       'releases/3.2.1/codecept.phar' |  | ||||||
|     ); |  | ||||||
|     expect(await tools.getCodeceptionUri('4.3.2', '7.4')).toBe( |  | ||||||
|       'releases/4.3.2/codecept.phar' |  | ||||||
|     ); |  | ||||||
|   }); |  | ||||||
|  |  | ||||||
|   it('checking addPhive', async () => { |   it('checking addPhive', async () => { | ||||||
|     let script: string = await tools.addPhive('1.2.3', 'linux'); |     let script: string = await tools.addPhive('1.2.3', '7.4', 'linux'); | ||||||
|     expect(script).toContain( |     expect(script).toContain( | ||||||
|       'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive' |       'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive' | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
|     script = await tools.addPhive('latest', 'win32'); |     script = await tools.addPhive('latest', '5.6', 'win32'); | ||||||
|     expect(script).toContain( |     expect(script).toContain( | ||||||
|       'Add-Tool https://phar.io/releases/phive.phar phive' |       'Add-Tool https://github.com/phar-io/phive/releases/download/0.12.1/phive-0.12.1.phar phive' | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     script = await tools.addPhive('latest', '7.1', 'win32'); | ||||||
|  |     expect(script).toContain( | ||||||
|  |       'Add-Tool https://github.com/phar-io/phive/releases/download/0.13.5/phive-0.13.5.phar phive' | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     script = await tools.addPhive('latest', '7.2', 'win32'); | ||||||
|  |     expect(script).toContain( | ||||||
|  |       'Add-Tool https://github.com/phar-io/phive/releases/download/0.14.5/phive-0.14.5.phar phive' | ||||||
|     ); |     ); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking getPhpunitUri', async () => { |   it('checking getPhpunitUri', async () => { | ||||||
|     expect(await tools.getPhpunitUrl('tool', 'latest')).toBe( |     expect(await tools.getPharUrl('domain', 'tool', '', 'latest')).toBe( | ||||||
|       'https://phar.phpunit.de/tool.phar' |       'domain/tool.phar' | ||||||
|     ); |     ); | ||||||
|     expect(await tools.getPhpunitUrl('tool', '1.2.3')).toBe( |     expect(await tools.getPharUrl('domain', 'tool', 'v', '1.2.3')).toBe( | ||||||
|       'https://phar.phpunit.de/tool-1.2.3.phar' |       'domain/tool-v1.2.3.phar' | ||||||
|     ); |     ); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
| @ -190,7 +152,7 @@ describe('Tools tests', () => { | |||||||
|     ); |     ); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking getDeployerUri', async () => { |   it('checking addComposer', async () => { | ||||||
|     expect(await tools.addComposer(['a', 'b'])).toStrictEqual([ |     expect(await tools.addComposer(['a', 'b'])).toStrictEqual([ | ||||||
|       'composer', |       'composer', | ||||||
|       'a', |       'a', | ||||||
| @ -201,9 +163,74 @@ describe('Tools tests', () => { | |||||||
|       'a', |       'a', | ||||||
|       'b' |       'b' | ||||||
|     ]); |     ]); | ||||||
|  |     expect(await tools.addComposer(['a', 'b', 'composer:1.2'])).toStrictEqual([ | ||||||
|  |       'composer', | ||||||
|  |       'a', | ||||||
|  |       'b' | ||||||
|  |     ]); | ||||||
|  |     expect(await tools.addComposer(['a', 'b', 'composer:1.2.3'])).toStrictEqual( | ||||||
|  |       ['composer:1.2.3', 'a', 'b'] | ||||||
|  |     ); | ||||||
|     expect( |     expect( | ||||||
|       await tools.addComposer(['a', 'b', 'composer:1.2.3']) |       await tools.addComposer(['a', 'b', 'composer:v1.2.3']) | ||||||
|     ).toStrictEqual(['composer', 'a', 'b']); |     ).toStrictEqual(['composer:1.2.3', 'a', 'b']); | ||||||
|  |     expect( | ||||||
|  |       await tools.addComposer(['a', 'b', 'composer:snapshot']) | ||||||
|  |     ).toStrictEqual(['composer:snapshot', 'a', 'b']); | ||||||
|  |     expect( | ||||||
|  |       await tools.addComposer(['a', 'b', 'composer:preview']) | ||||||
|  |     ).toStrictEqual(['composer:preview', 'a', 'b']); | ||||||
|  |     expect( | ||||||
|  |       await tools.addComposer(['a', 'b', 'c', 'composer:1']) | ||||||
|  |     ).toStrictEqual(['composer:1', 'a', 'b', 'c']); | ||||||
|  |     expect( | ||||||
|  |       await tools.addComposer(['a', 'b', 'c', 'composer:2']) | ||||||
|  |     ).toStrictEqual(['composer:2', 'a', 'b', 'c']); | ||||||
|  |     expect( | ||||||
|  |       await tools.addComposer(['a', 'b', 'c', 'composer:v1']) | ||||||
|  |     ).toStrictEqual(['composer:1', 'a', 'b', 'c']); | ||||||
|  |     expect( | ||||||
|  |       await tools.addComposer(['a', 'b', 'c', 'composer:v2']) | ||||||
|  |     ).toStrictEqual(['composer:2', 'a', 'b', 'c']); | ||||||
|  |     expect( | ||||||
|  |       await tools.addComposer(['hirak', 'b', 'c', 'composer:v2']) | ||||||
|  |     ).toStrictEqual(['composer:1', 'hirak', 'b', 'c']); | ||||||
|  |   }); | ||||||
|  |  | ||||||
|  |   it('checking getComposerUrl', async () => { | ||||||
|  |     expect(await tools.getComposerUrl('latest', '7.4')).toContain( | ||||||
|  |       'https://getcomposer.org/composer-stable.phar' | ||||||
|  |     ); | ||||||
|  |     expect(await tools.getComposerUrl('stable', '7.4')).toContain( | ||||||
|  |       'https://getcomposer.org/composer-stable.phar' | ||||||
|  |     ); | ||||||
|  |     expect(await tools.getComposerUrl('snapshot', '7.4')).toContain( | ||||||
|  |       'https://getcomposer.org/composer.phar' | ||||||
|  |     ); | ||||||
|  |     expect(await tools.getComposerUrl('preview', '7.4')).toContain( | ||||||
|  |       'https://getcomposer.org/composer-preview.phar' | ||||||
|  |     ); | ||||||
|  |     expect(await tools.getComposerUrl('1', '7.4')).toContain( | ||||||
|  |       'https://getcomposer.org/composer-1.phar' | ||||||
|  |     ); | ||||||
|  |     expect(await tools.getComposerUrl('2', '7.4')).toContain( | ||||||
|  |       'https://getcomposer.org/composer-2.phar' | ||||||
|  |     ); | ||||||
|  |     expect(await tools.getComposerUrl('1.7.2', '7.4')).toContain( | ||||||
|  |       'https://github.com/composer/composer/releases/download/1.7.2/composer.phar' | ||||||
|  |     ); | ||||||
|  |     expect(await tools.getComposerUrl('1.7.2', '7.4')).toContain( | ||||||
|  |       'https://getcomposer.org/composer-1.7.2.phar' | ||||||
|  |     ); | ||||||
|  |     expect(await tools.getComposerUrl('2.0.0-RC2', '7.4')).toContain( | ||||||
|  |       'https://github.com/composer/composer/releases/download/2.0.0-RC2/composer.phar' | ||||||
|  |     ); | ||||||
|  |     expect(await tools.getComposerUrl('2.0.0-RC2', '7.4')).toContain( | ||||||
|  |       'https://getcomposer.org/composer-2.0.0-RC2.phar' | ||||||
|  |     ); | ||||||
|  |     expect(await tools.getComposerUrl('wrong', '7.4')).toContain( | ||||||
|  |       'https://getcomposer.org/composer-stable.phar' | ||||||
|  |     ); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking getSymfonyUri', async () => { |   it('checking getSymfonyUri', async () => { | ||||||
| @ -225,42 +252,33 @@ describe('Tools tests', () => { | |||||||
|     expect(await tools.getSymfonyUri('1.2.3', 'win32')).toContain( |     expect(await tools.getSymfonyUri('1.2.3', 'win32')).toContain( | ||||||
|       'releases/download/v1.2.3/symfony_windows_amd64' |       'releases/download/v1.2.3/symfony_windows_amd64' | ||||||
|     ); |     ); | ||||||
|     expect(await tools.getSymfonyUri('1.2.3', 'fedora')).toContain( |     expect(await tools.getSymfonyUri('1.2.3', 'openbsd')).toContain( | ||||||
|       'Platform fedora is not supported' |       'Platform openbsd is not supported' | ||||||
|     ); |     ); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking getCleanedToolsList', async () => { |   it('checking getCleanedToolsList', async () => { | ||||||
|     const tools_list: string[] = await tools.getCleanedToolsList( |     const tools_list: string[] = await tools.getCleanedToolsList( | ||||||
|       'tool, composer:1.2.3, robmorgan/phinx, hirak/prestissimo, narrowspark/automatic-composer-prefetcher' |       'tool, composer:1.2.3, robmorgan/phinx' | ||||||
|     ); |     ); | ||||||
|     expect(tools_list).toStrictEqual([ |     expect(tools_list).toStrictEqual(['composer:1.2.3', 'tool', 'phinx']); | ||||||
|       'composer', |  | ||||||
|       'tool', |  | ||||||
|       'phinx', |  | ||||||
|       'prestissimo', |  | ||||||
|       'composer-prefetcher' |  | ||||||
|     ]); |  | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking addArchive', async () => { |   it('checking addArchive', async () => { | ||||||
|     let script: string = await tools.addArchive( |     let script: string = await tools.addArchive( | ||||||
|       'tool', |       'tool', | ||||||
|       '1.2.3', |  | ||||||
|       'https://tool.com/tool.phar', |       'https://tool.com/tool.phar', | ||||||
|       'linux' |       'linux' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain('add_tool https://tool.com/tool.phar tool'); |     expect(script).toContain('add_tool https://tool.com/tool.phar tool'); | ||||||
|     script = await tools.addArchive( |     script = await tools.addArchive( | ||||||
|       'tool', |       'tool', | ||||||
|       '1.2.3', |  | ||||||
|       'https://tool.com/tool.phar', |       'https://tool.com/tool.phar', | ||||||
|       'darwin' |       'darwin' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain('add_tool https://tool.com/tool.phar tool'); |     expect(script).toContain('add_tool https://tool.com/tool.phar tool'); | ||||||
|     script = await tools.addArchive( |     script = await tools.addArchive( | ||||||
|       'tool', |       'tool', | ||||||
|       '1.2.3', |  | ||||||
|       'https://tool.com/tool.phar', |       'https://tool.com/tool.phar', | ||||||
|       'win32' |       'win32' | ||||||
|     ); |     ); | ||||||
| @ -268,11 +286,10 @@ describe('Tools tests', () => { | |||||||
|  |  | ||||||
|     script = await tools.addArchive( |     script = await tools.addArchive( | ||||||
|       'tool', |       'tool', | ||||||
|       '1.2.3', |  | ||||||
|       'https://tool.com/tool.phar', |       'https://tool.com/tool.phar', | ||||||
|       'fedora' |       'openbsd' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain('Platform fedora is not supported'); |     expect(script).toContain('Platform openbsd is not supported'); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking addDevTools', async () => { |   it('checking addDevTools', async () => { | ||||||
| @ -300,8 +317,8 @@ describe('Tools tests', () => { | |||||||
|       'Add-Log "$cross" "php-config" "php-config is not a windows tool"' |       'Add-Log "$cross" "php-config" "php-config is not a windows tool"' | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
|     script = await tools.addDevTools('tool', 'fedora'); |     script = await tools.addDevTools('tool', 'openbsd'); | ||||||
|     expect(script).toContain('Platform fedora is not supported'); |     expect(script).toContain('Platform openbsd is not supported'); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking addPackage', async () => { |   it('checking addPackage', async () => { | ||||||
| @ -311,26 +328,29 @@ describe('Tools tests', () => { | |||||||
|       'user/', |       'user/', | ||||||
|       'linux' |       'linux' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain('add_composer_tool tool tool:1.2.3 user/'); |     expect(script).toContain('add_composertool tool tool:1.2.3 user/'); | ||||||
|  |  | ||||||
|     script = await tools.addPackage('tool', 'tool:1.2.3', 'user/', 'darwin'); |     script = await tools.addPackage('tool', 'tool:1.2.3', 'user/', 'darwin'); | ||||||
|     expect(script).toContain('add_composer_tool tool tool:1.2.3 user/'); |     expect(script).toContain('add_composertool tool tool:1.2.3 user/'); | ||||||
|  |  | ||||||
|     script = await tools.addPackage('tool', 'tool:1.2.3', 'user/', 'win32'); |     script = await tools.addPackage('tool', 'tool:1.2.3', 'user/', 'win32'); | ||||||
|     expect(script).toContain('Add-Composer-Tool tool tool:1.2.3 user/'); |     expect(script).toContain('Add-Composertool tool tool:1.2.3 user/'); | ||||||
|  |  | ||||||
|     script = await tools.addPackage('tool', 'tool:1.2.3', 'user/', 'fedora'); |     script = await tools.addPackage('tool', 'tool:1.2.3', 'user/', 'openbsd'); | ||||||
|     expect(script).toContain('Platform fedora is not supported'); |     expect(script).toContain('Platform openbsd is not supported'); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking addTools on linux', async () => { |   it('checking addTools on linux', async () => { | ||||||
|     const script: string = await tools.addTools( |     const script: string = await tools.addTools( | ||||||
|       'php-cs-fixer, phpstan, phpunit, pecl, phinx, phinx:1.2.3, phive, php-config, phpize, symfony', |       'cs2pr, php-cs-fixer, phpstan, phpunit, pecl, phinx, phinx:1.2.3, phive, php-config, phpize, symfony', | ||||||
|       '7.4', |       '7.4', | ||||||
|       'linux' |       'linux' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain( |     expect(script).toContain( | ||||||
|       'add_tool https://github.com/composer/composer/releases/latest/download/composer.phar composer' |       'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer' | ||||||
|  |     ); | ||||||
|  |     expect(script).toContain( | ||||||
|  |       'add_tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain( |     expect(script).toContain( | ||||||
|       'add_tool https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/latest/download/php-cs-fixer.phar php-cs-fixer' |       'add_tool https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/latest/download/php-cs-fixer.phar php-cs-fixer' | ||||||
| @ -348,20 +368,23 @@ describe('Tools tests', () => { | |||||||
|       'add_tool https://github.com/symfony/cli/releases/latest/download/symfony_linux_amd64 symfony' |       'add_tool https://github.com/symfony/cli/releases/latest/download/symfony_linux_amd64 symfony' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain('add_pecl'); |     expect(script).toContain('add_pecl'); | ||||||
|     expect(script).toContain('add_composer_tool phinx phinx robmorgan/'); |     expect(script).toContain('add_composertool phinx phinx robmorgan/'); | ||||||
|     expect(script).toContain('add_composer_tool phinx phinx:1.2.3 robmorgan/'); |     expect(script).toContain('add_composertool phinx phinx:1.2.3 robmorgan/'); | ||||||
|     expect(script).toContain('add_devtools'); |     expect(script).toContain('add_devtools'); | ||||||
|     expect(script).toContain('add_log "$tick" "php-config" "Added"'); |     expect(script).toContain('add_log "$tick" "php-config" "Added"'); | ||||||
|     expect(script).toContain('add_log "$tick" "phpize" "Added"'); |     expect(script).toContain('add_log "$tick" "phpize" "Added"'); | ||||||
|   }); |   }); | ||||||
|   it('checking addTools on darwin', async () => { |   it('checking addTools on darwin', async () => { | ||||||
|     const script: string = await tools.addTools( |     const script: string = await tools.addTools( | ||||||
|       'phpcs, phpcbf, phpcpd, phpmd, psalm, phinx, phive:1.2.3, composer-prefetcher:1.2.3, phpize, php-config, symfony, symfony:1.2.3', |       'phpcs, phpcbf, phpcpd, phpmd, psalm, phinx, phive:1.2.3, cs2pr:1.2.3, phpize, php-config, symfony:1.2.3', | ||||||
|       '7.4', |       '7.4', | ||||||
|       'darwin' |       'darwin' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain( |     expect(script).toContain( | ||||||
|       'add_tool https://github.com/composer/composer/releases/latest/download/composer.phar composer' |       'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer' | ||||||
|  |     ); | ||||||
|  |     expect(script).toContain( | ||||||
|  |       'add_tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/download/1.2.3/cs2pr cs2pr' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain( |     expect(script).toContain( | ||||||
|       'add_tool https://github.com/squizlabs/PHP_CodeSniffer/releases/latest/download/phpcs.phar phpcs' |       'add_tool https://github.com/squizlabs/PHP_CodeSniffer/releases/latest/download/phpcs.phar phpcs' | ||||||
| @ -378,16 +401,10 @@ describe('Tools tests', () => { | |||||||
|     expect(script).toContain( |     expect(script).toContain( | ||||||
|       'https://github.com/vimeo/psalm/releases/latest/download/psalm.phar psalm' |       'https://github.com/vimeo/psalm/releases/latest/download/psalm.phar psalm' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain('add_composer_tool phinx phinx robmorgan/'); |     expect(script).toContain('add_composertool phinx phinx robmorgan/'); | ||||||
|     expect(script).toContain( |     expect(script).toContain( | ||||||
|       'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive' |       'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain( |  | ||||||
|       'add_composer_tool composer-prefetcher composer-prefetcher:1.2.3 narrowspark/automatic-' |  | ||||||
|     ); |  | ||||||
|     expect(script).toContain( |  | ||||||
|       'add_tool https://github.com/symfony/cli/releases/latest/download/symfony_darwin_amd64 symfony' |  | ||||||
|     ); |  | ||||||
|     expect(script).toContain( |     expect(script).toContain( | ||||||
|       'add_tool https://github.com/symfony/cli/releases/download/v1.2.3/symfony_darwin_amd64 symfony' |       'add_tool https://github.com/symfony/cli/releases/download/v1.2.3/symfony_darwin_amd64 symfony' | ||||||
|     ); |     ); | ||||||
| @ -396,23 +413,23 @@ describe('Tools tests', () => { | |||||||
|   }); |   }); | ||||||
|   it('checking addTools on windows', async () => { |   it('checking addTools on windows', async () => { | ||||||
|     const script: string = await tools.addTools( |     const script: string = await tools.addTools( | ||||||
|       'codeception, deployer, prestissimo, phpmd, phinx, phive:0.13.2, php-config, phpize, symfony, does_not_exit', |       'cs2pr, deployer, phpmd, phinx, phive:0.13.2, php-config, phpize, symfony, does_not_exist, composer', | ||||||
|       '7.4', |       '7.4', | ||||||
|       'win32' |       'win32' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain( |     expect(script).toContain( | ||||||
|       'Add-Tool https://github.com/composer/composer/releases/latest/download/composer.phar composer' |       'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer' | ||||||
|  |     ); | ||||||
|  |     expect(script).toContain( | ||||||
|  |       'Add-Tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain( |     expect(script).toContain( | ||||||
|       'Add-Tool https://deployer.org/deployer.phar deployer' |       'Add-Tool https://deployer.org/deployer.phar deployer' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain( |  | ||||||
|       'Add-Composer-Tool prestissimo prestissimo hirak/' |  | ||||||
|     ); |  | ||||||
|     expect(script).toContain( |     expect(script).toContain( | ||||||
|       'Add-Tool https://github.com/phpmd/phpmd/releases/latest/download/phpmd.phar phpmd' |       'Add-Tool https://github.com/phpmd/phpmd/releases/latest/download/phpmd.phar phpmd' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain('Add-Composer-Tool phinx phinx robmorgan/'); |     expect(script).toContain('Add-Composertool phinx phinx robmorgan/'); | ||||||
|     expect(script).toContain( |     expect(script).toContain( | ||||||
|       'Add-Tool https://github.com/phar-io/phive/releases/download/0.13.2/phive-0.13.2.phar phive' |       'Add-Tool https://github.com/phar-io/phive/releases/download/0.13.2/phive-0.13.2.phar phive' | ||||||
|     ); |     ); | ||||||
| @ -421,24 +438,44 @@ describe('Tools tests', () => { | |||||||
|     ); |     ); | ||||||
|     expect(script).toContain('phpize is not a windows tool'); |     expect(script).toContain('phpize is not a windows tool'); | ||||||
|     expect(script).toContain('php-config is not a windows tool'); |     expect(script).toContain('php-config is not a windows tool'); | ||||||
|     expect(script).toContain('Tool does_not_exit is not supported'); |     expect(script).toContain('Tool does_not_exist is not supported'); | ||||||
|     expect(script).toContain('Tool does_not_exit is not supported'); |  | ||||||
|   }); |   }); | ||||||
|   it('checking addTools with composer tool using user/tool as input', async () => { |   it('checking addTools with composer tool using user/tool as input', async () => { | ||||||
|     const script: string = await tools.addTools( |     const script: string = await tools.addTools( | ||||||
|       'hirak/prestissimo, narrowspark/automatic-composer-prefetcher, robmorgan/phinx', |       'codeception/codeception, hirak/prestissimo, narrowspark/automatic-composer-prefetcher, robmorgan/phinx', | ||||||
|       '7.4', |       '7.4', | ||||||
|       'win32' |       'win32' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain( |     expect(script).toContain( | ||||||
|       'Add-Tool https://github.com/composer/composer/releases/latest/download/composer.phar composer' |       'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar,https://getcomposer.org/composer-1.phar composer' | ||||||
|  |     ); | ||||||
|  |     expect(script).toContain('Add-Composertool prestissimo prestissimo hirak/'); | ||||||
|  |     expect(script).toContain('Add-Composertool phinx phinx robmorgan/'); | ||||||
|  |     expect(script).toContain( | ||||||
|  |       'Add-Composertool composer-prefetcher composer-prefetcher narrowspark/automatic-' | ||||||
|  |     ); | ||||||
|  |   }); | ||||||
|  |   it('checking composer setup', async () => { | ||||||
|  |     let script: string = await tools.addTools( | ||||||
|  |       'composer, composer:v1', | ||||||
|  |       '7.4', | ||||||
|  |       'linux' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain( |     expect(script).toContain( | ||||||
|       'Add-Composer-Tool prestissimo prestissimo hirak/' |       'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar,https://getcomposer.org/composer-1.phar composer' | ||||||
|     ); |     ); | ||||||
|     expect(script).toContain('Add-Composer-Tool phinx phinx robmorgan/'); |  | ||||||
|  |     script = await tools.addTools('composer:preview', '7.4', 'linux'); | ||||||
|     expect(script).toContain( |     expect(script).toContain( | ||||||
|       'Add-Composer-Tool composer-prefetcher composer-prefetcher narrowspark/automatic-' |       'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-preview.phar,https://getcomposer.org/composer-preview.phar composer' | ||||||
|  |     ); | ||||||
|  |     script = await tools.addTools( | ||||||
|  |       'composer:v1, composer:preview, composer:snapshot', | ||||||
|  |       '7.4', | ||||||
|  |       'linux' | ||||||
|  |     ); | ||||||
|  |     expect(script).toContain( | ||||||
|  |       'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-snapshot.phar,https://getcomposer.org/composer.phar composer' | ||||||
|     ); |     ); | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
|  | |||||||
| @ -8,6 +8,10 @@ jest.mock('@actions/core', () => ({ | |||||||
|   }) |   }) | ||||||
| })); | })); | ||||||
|  |  | ||||||
|  | jest.spyOn(utils, 'fetch').mockImplementation(async (url): Promise<string> => { | ||||||
|  |   return `{ "latest": "8.0", "5.x": "5.6", "url": "${url}" }`; | ||||||
|  | }); | ||||||
|  |  | ||||||
| async function cleanup(path: string): Promise<void> { | async function cleanup(path: string): Promise<void> { | ||||||
|   fs.unlink(path, error => { |   fs.unlink(path, error => { | ||||||
|     if (error) { |     if (error) { | ||||||
| @ -17,21 +21,48 @@ async function cleanup(path: string): Promise<void> { | |||||||
| } | } | ||||||
|  |  | ||||||
| describe('Utils tests', () => { | describe('Utils tests', () => { | ||||||
|   it('checking getInput', async () => { |   it('checking readEnv', async () => { | ||||||
|     process.env['test'] = 'setup-php'; |     process.env['test'] = 'setup-php'; | ||||||
|     process.env['undefined'] = ''; |     process.env['test-hyphen'] = 'setup-php'; | ||||||
|  |     expect(await utils.readEnv('test')).toBe('setup-php'); | ||||||
|  |     expect(await utils.readEnv('TEST')).toBe('setup-php'); | ||||||
|  |     expect(await utils.readEnv('test_hyphen')).toBe('setup-php'); | ||||||
|  |     expect(await utils.readEnv('TEST_HYPHEN')).toBe('setup-php'); | ||||||
|  |     expect(await utils.readEnv('undefined')).toBe(''); | ||||||
|  |   }); | ||||||
|  |  | ||||||
|  |   it('checking getInput', async () => { | ||||||
|     expect(await utils.getInput('test', false)).toBe('setup-php'); |     expect(await utils.getInput('test', false)).toBe('setup-php'); | ||||||
|     expect(await utils.getInput('undefined', false)).toBe(''); |  | ||||||
|     expect(await utils.getInput('setup-php', false)).toBe('setup-php'); |     expect(await utils.getInput('setup-php', false)).toBe('setup-php'); | ||||||
|     expect(await utils.getInput('DoesNotExist', false)).toBe(''); |     expect(await utils.getInput('DoesNotExist', false)).toBe(''); | ||||||
|  |     expect(async () => { | ||||||
|  |       await utils.getInput('DoesNotExist', true); | ||||||
|  |     }).rejects.toThrow('Input required and not supplied: DoesNotExist'); | ||||||
|  |   }); | ||||||
|  |  | ||||||
|  |   it('checking fetch', async () => { | ||||||
|  |     expect(await utils.fetch('test_url')).toBe( | ||||||
|  |       '{ "latest": "8.0", "5.x": "5.6", "url": "test_url" }' | ||||||
|  |     ); | ||||||
|  |   }); | ||||||
|  |  | ||||||
|  |   it('checking parseVersion', async () => { | ||||||
|  |     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 asyncForEach', async () => { |   it('checking asyncForEach', async () => { | ||||||
|     const array: Array<string> = ['a', 'b', 'c']; |     const array: Array<string> = ['a', 'b', 'c']; | ||||||
|     let concat = ''; |     let concat = ''; | ||||||
|     await utils.asyncForEach(array, async function(str: string): Promise<void> { |     await utils.asyncForEach( | ||||||
|       concat += str; |       array, | ||||||
|     }); |       async function (str: string): Promise<void> { | ||||||
|  |         concat += str; | ||||||
|  |       } | ||||||
|  |     ); | ||||||
|     expect(concat).toBe('abc'); |     expect(concat).toBe('abc'); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
| @ -55,12 +86,12 @@ describe('Utils tests', () => { | |||||||
|       path.join(__dirname, '../src/scripts/win32.ps1'), |       path.join(__dirname, '../src/scripts/win32.ps1'), | ||||||
|       'utf8' |       'utf8' | ||||||
|     ); |     ); | ||||||
|     expect(await utils.readScript('darwin.sh', '7.4', 'darwin')).toBe(darwin); |     expect(await utils.readScript('darwin.sh')).toBe(darwin); | ||||||
|     expect(await utils.readScript('darwin.sh', '7.3', 'darwin')).toBe(darwin); |     expect(await utils.readScript('darwin.sh')).toBe(darwin); | ||||||
|     expect(await utils.readScript('linux.sh', '7.4', 'linux')).toBe(linux); |     expect(await utils.readScript('linux.sh')).toBe(linux); | ||||||
|     expect(await utils.readScript('linux.sh', '7.3', 'linux')).toBe(linux); |     expect(await utils.readScript('linux.sh')).toBe(linux); | ||||||
|     expect(await utils.readScript('win32.ps1', '7.4', 'win32')).toBe(win32); |     expect(await utils.readScript('win32.ps1')).toBe(win32); | ||||||
|     expect(await utils.readScript('win32.ps1', '7.3', 'win32')).toBe(win32); |     expect(await utils.readScript('win32.ps1')).toBe(win32); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking writeScripts', async () => { |   it('checking writeScripts', async () => { | ||||||
| @ -68,7 +99,7 @@ describe('Utils tests', () => { | |||||||
|     const runner_dir: string = process.env['RUNNER_TOOL_CACHE'] || ''; |     const runner_dir: string = process.env['RUNNER_TOOL_CACHE'] || ''; | ||||||
|     const script_path: string = path.join(runner_dir, 'test.sh'); |     const script_path: string = path.join(runner_dir, 'test.sh'); | ||||||
|     await utils.writeScript('test.sh', testString); |     await utils.writeScript('test.sh', testString); | ||||||
|     await fs.readFile(script_path, function(error: Error | null, data: Buffer) { |     fs.readFile(script_path, function (error: Error | null, data: Buffer) { | ||||||
|       expect(testString).toBe(data.toString()); |       expect(testString).toBe(data.toString()); | ||||||
|     }); |     }); | ||||||
|     await cleanup(script_path); |     await cleanup(script_path); | ||||||
| @ -92,6 +123,28 @@ describe('Utils tests', () => { | |||||||
|       'b=2', |       'b=2', | ||||||
|       'c=3' |       'c=3' | ||||||
|     ]); |     ]); | ||||||
|  |     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('\'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([]); | ||||||
|     expect(await utils.CSVArray(' ')).toEqual([]); |     expect(await utils.CSVArray(' ')).toEqual([]); | ||||||
|   }); |   }); | ||||||
| @ -126,8 +179,8 @@ describe('Utils tests', () => { | |||||||
|     expect(step_log).toEqual('step_log "Test message"'); |     expect(step_log).toEqual('step_log "Test message"'); | ||||||
|     step_log = await utils.stepLog(message, 'darwin'); |     step_log = await utils.stepLog(message, 'darwin'); | ||||||
|     expect(step_log).toEqual('step_log "Test message"'); |     expect(step_log).toEqual('step_log "Test message"'); | ||||||
|     step_log = await utils.stepLog(message, 'fedora'); |     step_log = await utils.stepLog(message, 'openbsd'); | ||||||
|     expect(step_log).toContain('Platform fedora is not supported'); |     expect(step_log).toContain('Platform openbsd is not supported'); | ||||||
|  |  | ||||||
|     let add_log: string = await utils.addLog( |     let add_log: string = await utils.addLog( | ||||||
|       'tick', |       'tick', | ||||||
| @ -140,8 +193,8 @@ describe('Utils tests', () => { | |||||||
|     expect(add_log).toEqual('add_log "tick" "xdebug" "enabled"'); |     expect(add_log).toEqual('add_log "tick" "xdebug" "enabled"'); | ||||||
|     add_log = await utils.addLog('tick', 'xdebug', 'enabled', 'darwin'); |     add_log = await utils.addLog('tick', 'xdebug', 'enabled', 'darwin'); | ||||||
|     expect(add_log).toEqual('add_log "tick" "xdebug" "enabled"'); |     expect(add_log).toEqual('add_log "tick" "xdebug" "enabled"'); | ||||||
|     add_log = await utils.addLog('tick', 'xdebug', 'enabled', 'fedora'); |     add_log = await utils.addLog('tick', 'xdebug', 'enabled', 'openbsd'); | ||||||
|     expect(add_log).toContain('Platform fedora is not supported'); |     expect(add_log).toContain('Platform openbsd is not supported'); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   it('checking getExtensionPrefix', async () => { |   it('checking getExtensionPrefix', async () => { | ||||||
| @ -157,8 +210,8 @@ describe('Utils tests', () => { | |||||||
|     expect(await utils.suppressOutput('win32')).toEqual(' >$null 2>&1'); |     expect(await utils.suppressOutput('win32')).toEqual(' >$null 2>&1'); | ||||||
|     expect(await utils.suppressOutput('linux')).toEqual(' >/dev/null 2>&1'); |     expect(await utils.suppressOutput('linux')).toEqual(' >/dev/null 2>&1'); | ||||||
|     expect(await utils.suppressOutput('darwin')).toEqual(' >/dev/null 2>&1'); |     expect(await utils.suppressOutput('darwin')).toEqual(' >/dev/null 2>&1'); | ||||||
|     expect(await utils.suppressOutput('fedora')).toContain( |     expect(await utils.suppressOutput('openbsd')).toContain( | ||||||
|       'Platform fedora is not supported' |       'Platform openbsd is not supported' | ||||||
|     ); |     ); | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								action.yml
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								action.yml
									
									
									
									
									
								
							| @ -1,8 +1,9 @@ | |||||||
| name: 'Setup PHP Action' | name: 'Setup PHP Action' | ||||||
| author: shivammathur | author: shivammathur | ||||||
| description: 'Setup PHP with required extensions, php.ini configuration, code-coverage support and various tools like composer' | description: 'GitHub Action for PHP' | ||||||
| branding: | branding: | ||||||
|   color: 'purple' |   color: 'purple' | ||||||
|  |   icon: 'play-circle' | ||||||
| inputs: | inputs: | ||||||
|   php-version: |   php-version: | ||||||
|     description: 'Setup PHP version.' |     description: 'Setup PHP version.' | ||||||
| @ -20,18 +21,17 @@ inputs: | |||||||
|   tools: |   tools: | ||||||
|     description: 'Setup popular tools globally.' |     description: 'Setup popular tools globally.' | ||||||
|     required: false |     required: false | ||||||
|   # Deprecated options, do not use. Will not be supported in v2 which will be released around February 1, 2020. |  | ||||||
|   extension-csv: |   extension-csv: | ||||||
|     description: 'Deprecated! Use extensions instead.' |     description: 'Deprecated! Use extensions instead.' | ||||||
|     deprecationMessage: 'The extension-csv property will not be supported in v2. Use extensions instead.' |     deprecationMessage: 'The extension-csv property is deprecated. Use extensions instead.' | ||||||
|     required: false |     required: false | ||||||
|   ini-values-csv: |   ini-values-csv: | ||||||
|     description: 'Deprecated! Use ini-values instead.' |     description: 'Deprecated! Use ini-values instead.' | ||||||
|     deprecationMessage: 'The ini-values-csv property will not be supported in v2. Use ini-values instead.' |     deprecationMessage: 'The ini-values-csv property is deprecated. Use ini-values instead.' | ||||||
|     required: false |     required: false | ||||||
|   pecl: |   pecl: | ||||||
|     description: 'Deprecated! Use tools instead to setup PECL.' |     description: 'Deprecated! Use tools instead to setup PECL.' | ||||||
|     deprecationMessage: 'The pecl property will not be supported in v2. Specify pecl in tools instead.' |     deprecationMessage: 'The pecl property is deprecated. Specify pecl in tools instead.' | ||||||
|     required: false |     required: false | ||||||
| runs: | runs: | ||||||
|   using: 'node12' |   using: 'node12' | ||||||
|  | |||||||
							
								
								
									
										5308
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5308
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -19,7 +19,7 @@ jobs: | |||||||
|       - name: Get composer cache directory |       - name: Get composer cache directory | ||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - uses: actions/cache@v1 |       - uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -27,6 +27,6 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install Composer dependencies |       - name: Install Composer dependencies | ||||||
|         run: composer install -n --prefer-dist |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: PHP test |       - name: PHP test | ||||||
|         run: composer test |         run: composer test | ||||||
| @ -34,11 +34,13 @@ jobs: | |||||||
|           # Install memcached if using ext-memcached |           # Install memcached if using ext-memcached | ||||||
|           extensions: mbstring, intl, redis, pdo_mysql |           extensions: mbstring, intl, redis, pdo_mysql | ||||||
|           coverage: pcov |           coverage: pcov | ||||||
|  |       - name: Start mysql service | ||||||
|  |         run: sudo /etc/init.d/mysql start | ||||||
|       - name: Get composer cache directory |       - name: Get composer cache directory | ||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -47,7 +49,7 @@ jobs: | |||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: | |         run: | | ||||||
|           composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |           composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|           composer run-script post-install-cmd --no-interaction |           composer run-script post-install-cmd --no-interaction | ||||||
|       # Add a step to run migrations if required |       # Add a step to run migrations if required | ||||||
|       - name: Test with phpunit |       - name: Test with phpunit | ||||||
| @ -71,7 +73,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -79,7 +81,7 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: PHP CodeSniffer |       - name: PHP CodeSniffer | ||||||
|         run: composer cs-check |         run: composer cs-check | ||||||
|  |  | ||||||
| @ -99,7 +101,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -107,6 +109,6 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: Static Analysis using PHPStan |       - name: Static Analysis using PHPStan | ||||||
|         run: phpstan analyse --no-progress src/ |         run: phpstan analyse --no-progress src/ | ||||||
| @ -38,7 +38,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -47,7 +47,7 @@ jobs: | |||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: | |         run: | | ||||||
|           composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |           composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|           composer run-script post-install-cmd --no-interaction |           composer run-script post-install-cmd --no-interaction | ||||||
|       # Add a step to run migrations if required |       # Add a step to run migrations if required | ||||||
|       - name: Test with phpunit |       - name: Test with phpunit | ||||||
| @ -71,7 +71,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -79,7 +79,7 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: PHP CodeSniffer |       - name: PHP CodeSniffer | ||||||
|         run: composer cs-check |         run: composer cs-check | ||||||
|  |  | ||||||
| @ -99,7 +99,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -107,6 +107,6 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: Static Analysis using PHPStan |       - name: Static Analysis using PHPStan | ||||||
|         run: phpstan analyse --no-progress src/ |         run: phpstan analyse --no-progress src/ | ||||||
| @ -22,7 +22,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -31,7 +31,7 @@ jobs: | |||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: | |         run: | | ||||||
|           composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |           composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|           composer run-script post-install-cmd --no-interaction |           composer run-script post-install-cmd --no-interaction | ||||||
|       - name: Test with phpunit |       - name: Test with phpunit | ||||||
|         run: vendor/bin/phpunit --coverage-text |         run: vendor/bin/phpunit --coverage-text | ||||||
| @ -51,7 +51,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -59,7 +59,7 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: PHP CodeSniffer |       - name: PHP CodeSniffer | ||||||
|         run: composer cs-check |         run: composer cs-check | ||||||
|  |  | ||||||
| @ -79,7 +79,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -87,6 +87,6 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: Static Analysis using PHPStan |       - name: Static Analysis using PHPStan | ||||||
|         run: phpstan analyse --no-progress src/ |         run: phpstan analyse --no-progress src/ | ||||||
|  | |||||||
| @ -21,7 +21,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -29,6 +29,6 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: Test with phpunit |       - name: Test with phpunit | ||||||
|         run: vendor/bin/phpunit --coverage-text |         run: vendor/bin/phpunit --coverage-text | ||||||
| @ -41,11 +41,13 @@ jobs: | |||||||
|           php-version: ${{ matrix.php-versions }} |           php-version: ${{ matrix.php-versions }} | ||||||
|           extensions: mbstring, dom, fileinfo, mysql |           extensions: mbstring, dom, fileinfo, mysql | ||||||
|           coverage: xdebug #optional |           coverage: xdebug #optional | ||||||
|  |       - name: Start mysql service | ||||||
|  |         run: sudo /etc/init.d/mysql start | ||||||
|       - name: Get composer cache directory |       - name: Get composer cache directory | ||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -53,7 +55,7 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install Composer dependencies |       - name: Install Composer dependencies | ||||||
|         run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: Prepare the application |       - name: Prepare the application | ||||||
|         run: | |         run: | | ||||||
|           php -r "file_exists('.env') || copy('.env.example', '.env');" |           php -r "file_exists('.env') || copy('.env.example', '.env');" | ||||||
|  | |||||||
| @ -47,7 +47,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -55,7 +55,7 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install Composer dependencies |       - name: Install Composer dependencies | ||||||
|         run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: Prepare the application |       - name: Prepare the application | ||||||
|         run: | |         run: | | ||||||
|           php -r "file_exists('.env') || copy('.env.example', '.env');" |           php -r "file_exists('.env') || copy('.env.example', '.env');" | ||||||
|  | |||||||
| @ -23,7 +23,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -31,7 +31,7 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install Composer dependencies |       - name: Install Composer dependencies | ||||||
|         run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: Prepare the application |       - name: Prepare the application | ||||||
|         run: | |         run: | | ||||||
|           php -r "file_exists('.env') || copy('.env.example', '.env');" |           php -r "file_exists('.env') || copy('.env.example', '.env');" | ||||||
|  | |||||||
| @ -41,11 +41,13 @@ jobs: | |||||||
|           php-version: ${{ matrix.php-versions }} |           php-version: ${{ matrix.php-versions }} | ||||||
|           extensions: mbstring, dom, fileinfo, mysql |           extensions: mbstring, dom, fileinfo, mysql | ||||||
|           coverage: xdebug #optional |           coverage: xdebug #optional | ||||||
|  |       - name: Start mysql service | ||||||
|  |         run: sudo /etc/init.d/mysql start | ||||||
|       - name: Get composer cache directory |       - name: Get composer cache directory | ||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -54,7 +56,7 @@ jobs: | |||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install Composer dependencies |       - name: Install Composer dependencies | ||||||
|         run: | |         run: | | ||||||
|           composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |           composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|           composer require predis/predis illuminate/redis |           composer require predis/predis illuminate/redis | ||||||
|       - name: Prepare the application |       - name: Prepare the application | ||||||
|         run: php -r "file_exists('.env') || copy('.env.example', '.env');" |         run: php -r "file_exists('.env') || copy('.env.example', '.env');" | ||||||
|  | |||||||
| @ -47,7 +47,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -56,7 +56,7 @@ jobs: | |||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install Composer dependencies |       - name: Install Composer dependencies | ||||||
|         run: | |         run: | | ||||||
|           composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |           composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|           composer require predis/predis illuminate/redis |           composer require predis/predis illuminate/redis | ||||||
|       - name: Prepare the application |       - name: Prepare the application | ||||||
|         run: php -r "file_exists('.env') || copy('.env.example', '.env');" |         run: php -r "file_exists('.env') || copy('.env.example', '.env');" | ||||||
|  | |||||||
| @ -23,7 +23,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -31,7 +31,7 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install Composer dependencies |       - name: Install Composer dependencies | ||||||
|         run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: Prepare the application |       - name: Prepare the application | ||||||
|         run: php -r "file_exists('.env') || copy('.env.example', '.env');" |         run: php -r "file_exists('.env') || copy('.env.example', '.env');" | ||||||
|       - name: Test with phpunit |       - name: Test with phpunit | ||||||
|  | |||||||
| @ -41,11 +41,13 @@ jobs: | |||||||
|           php-version: ${{ matrix.php-versions }} |           php-version: ${{ matrix.php-versions }} | ||||||
|           extensions: mbstring, dom, zip, phalcon4, mysql #use phalcon3 for the phalcon 3.x. |           extensions: mbstring, dom, zip, phalcon4, mysql #use phalcon3 for the phalcon 3.x. | ||||||
|           coverage: xdebug #optional |           coverage: xdebug #optional | ||||||
|  |       - name: Start mysql service | ||||||
|  |         run: sudo /etc/init.d/mysql start | ||||||
|       - name: Get composer cache directory |       - name: Get composer cache directory | ||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -53,7 +55,7 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install Composer dependencies |       - name: Install Composer dependencies | ||||||
|         run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: Prepare the application |       - name: Prepare the application | ||||||
|         run: php -r "file_exists('.env') || copy('.env.example', '.env');" |         run: php -r "file_exists('.env') || copy('.env.example', '.env');" | ||||||
|       - name: Run Migration |       - name: Run Migration | ||||||
|  | |||||||
| @ -46,7 +46,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -54,7 +54,7 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install Composer dependencies |       - name: Install Composer dependencies | ||||||
|         run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: Prepare the application |       - name: Prepare the application | ||||||
|         run: php -r "file_exists('.env') || copy('.env.example', '.env');" |         run: php -r "file_exists('.env') || copy('.env.example', '.env');" | ||||||
|       - name: Run Migration |       - name: Run Migration | ||||||
|  | |||||||
| @ -27,7 +27,7 @@ jobs: | |||||||
|       - name: Get yarn cache |       - name: Get yarn cache | ||||||
|         id: yarn-cache |         id: yarn-cache | ||||||
|         run: echo "::set-output name=dir::$(yarn cache dir)" |         run: echo "::set-output name=dir::$(yarn cache dir)" | ||||||
|       - uses: actions/cache@v1 |       - uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.yarn-cache.outputs.dir }} |           path: ${{ steps.yarn-cache.outputs.dir }} | ||||||
|           key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} |           key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | ||||||
| @ -36,7 +36,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -46,7 +46,7 @@ jobs: | |||||||
|       - name: Install yarn dependencies |       - name: Install yarn dependencies | ||||||
|         run: yarn -V |         run: yarn -V | ||||||
|       - name: Install Composer dependencies |       - name: Install Composer dependencies | ||||||
|         run: composer install -o --prefer-dist --no-interaction |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: Yarn test and build |       - name: Yarn test and build | ||||||
|         run: | |         run: | | ||||||
|           yarn run test |           yarn run test | ||||||
|  | |||||||
| @ -21,7 +21,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -29,6 +29,6 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: Test with phpunit |       - name: Test with phpunit | ||||||
|         run: vendor/bin/phpunit --coverage-text |         run: vendor/bin/phpunit --coverage-text | ||||||
| @ -23,16 +23,18 @@ jobs: | |||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v2 |         uses: actions/checkout@v2 | ||||||
|       - name: Setup PHP, with composer and extensions |       - name: Setup PHP, with composer and extensions | ||||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php |         uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php | ||||||
|         with: |         with: | ||||||
|           php-version: ${{ matrix.php-versions }} |           php-version: ${{ matrix.php-versions }} | ||||||
|           extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql |           extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql | ||||||
|           coverage: xdebug #optional |           coverage: xdebug #optional | ||||||
|  |       - name: Start mysql service | ||||||
|  |         run: sudo /etc/init.d/mysql start | ||||||
|       - name: Get composer cache directory |       - name: Get composer cache directory | ||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -41,10 +43,11 @@ jobs: | |||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install Composer dependencies |       - name: Install Composer dependencies | ||||||
|         run: | |         run: | | ||||||
|           composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |           composer require --dev symfony/orm-pack symfony/phpunit-bridge | ||||||
|  |           composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|  |           php bin/phpunit install | ||||||
|       - name: Run Migration |       - name: Run Migration | ||||||
|         run: | |         run: | | ||||||
|           composer require symfony/orm-pack |  | ||||||
|           php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed" |           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" |           php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed" | ||||||
|         env: |         env: | ||||||
|  | |||||||
| @ -23,7 +23,7 @@ jobs: | |||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v2 |         uses: actions/checkout@v2 | ||||||
|       - name: Setup PHP, with composer and extensions |       - name: Setup PHP, with composer and extensions | ||||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php |         uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php | ||||||
|         with: |         with: | ||||||
|           php-version: ${{ matrix.php-versions }} |           php-version: ${{ matrix.php-versions }} | ||||||
|           extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, pgsql |           extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, pgsql | ||||||
| @ -32,7 +32,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -41,10 +41,11 @@ jobs: | |||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install Composer dependencies |       - name: Install Composer dependencies | ||||||
|         run: | |         run: | | ||||||
|           composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |           composer require --dev symfony/orm-pack symfony/phpunit-bridge | ||||||
|  |           composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|  |           php bin/phpunit install | ||||||
|       - name: Run Migration |       - name: Run Migration | ||||||
|         run: | |         run: | | ||||||
|           composer require symfony/orm-pack |  | ||||||
|           php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed" |           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" |           php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed" | ||||||
|         env: |         env: | ||||||
|  | |||||||
| @ -14,7 +14,7 @@ jobs: | |||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v2 |         uses: actions/checkout@v2 | ||||||
|       - name: Setup PHP, with composer and extensions |       - name: Setup PHP, with composer and extensions | ||||||
|         uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php |         uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php | ||||||
|         with: |         with: | ||||||
|           php-version: ${{ matrix.php-versions }} |           php-version: ${{ matrix.php-versions }} | ||||||
|           extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite |           extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite | ||||||
| @ -23,7 +23,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -32,7 +32,8 @@ jobs: | |||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install Composer dependencies |       - name: Install Composer dependencies | ||||||
|         run: | |         run: | | ||||||
|           composer require symfony/orm-pack |           composer require --dev symfony/phpunit-bridge | ||||||
|           composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |           composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|  |           php bin/phpunit install | ||||||
|       - name: Run Tests |       - name: Run Tests | ||||||
|         run: php bin/phpunit --coverage-text |         run: php bin/phpunit --coverage-text | ||||||
| @ -38,11 +38,13 @@ jobs: | |||||||
|           php-version: ${{ matrix.php-versions }} |           php-version: ${{ matrix.php-versions }} | ||||||
|           extensions: mbstring, intl, gd, imagick, zip, dom, mysql |           extensions: mbstring, intl, gd, imagick, zip, dom, mysql | ||||||
|           coverage: xdebug #optional |           coverage: xdebug #optional | ||||||
|  |       - name: Start mysql service | ||||||
|  |         run: sudo /etc/init.d/mysql start | ||||||
|       - name: Get composer cache directory |       - name: Get composer cache directory | ||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -50,7 +52,7 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install Composer dependencies |       - name: Install Composer dependencies | ||||||
|         run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: Prepare the application |       - name: Prepare the application | ||||||
|         run: | |         run: | | ||||||
|           php -r "file_exists('.env') || copy('.env.dist', '.env');" |           php -r "file_exists('.env') || copy('.env.dist', '.env');" | ||||||
|  | |||||||
| @ -42,7 +42,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -50,7 +50,7 @@ jobs: | |||||||
|           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} |           key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install Composer dependencies |       - name: Install Composer dependencies | ||||||
|         run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |         run: composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|       - name: Prepare the application |       - name: Prepare the application | ||||||
|         run: | |         run: | | ||||||
|           php -r "file_exists('.env') || copy('.env.dist', '.env');" |           php -r "file_exists('.env') || copy('.env.dist', '.env');" | ||||||
|  | |||||||
| @ -21,7 +21,7 @@ jobs: | |||||||
|         id: composer-cache |         id: composer-cache | ||||||
|         run: echo "::set-output name=dir::$(composer config cache-files-dir)" |         run: echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||||
|       - name: Cache composer dependencies |       - name: Cache composer dependencies | ||||||
|         uses: actions/cache@v1 |         uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ steps.composer-cache.outputs.dir }} |           path: ${{ steps.composer-cache.outputs.dir }} | ||||||
|           # Use composer.json for key, if composer.lock is not committed. |           # Use composer.json for key, if composer.lock is not committed. | ||||||
| @ -30,7 +30,7 @@ jobs: | |||||||
|           restore-keys: ${{ runner.os }}-composer- |           restore-keys: ${{ runner.os }}-composer- | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: | |         run: | | ||||||
|           composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader |           composer install --no-progress --prefer-dist --optimize-autoloader | ||||||
|           composer require --dev phpunit/phpunit squizlabs/php_codesniffer zendframework/zend-test |           composer require --dev phpunit/phpunit squizlabs/php_codesniffer zendframework/zend-test | ||||||
|       - name: Test with phpunit |       - name: Test with phpunit | ||||||
|         run: vendor/bin/phpunit --coverage-text |         run: vendor/bin/phpunit --coverage-text | ||||||
							
								
								
									
										13763
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										13763
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										70
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								package.json
									
									
									
									
									
								
							| @ -1,15 +1,25 @@ | |||||||
| { | { | ||||||
|   "name": "setup-php", |   "name": "setup-php", | ||||||
|   "version": "1.8.1", |   "version": "1.11.7", | ||||||
|   "private": false, |   "private": false, | ||||||
|   "description": "Setup PHP for use with GitHub Actions", |   "description": "Setup PHP for use with GitHub Actions", | ||||||
|   "main": "dist/index.js", |   "main": "lib/install.js", | ||||||
|  |   "types": "lib/install.d.ts", | ||||||
|  |   "directories": { | ||||||
|  |     "lib": "lib", | ||||||
|  |     "test": "__tests__", | ||||||
|  |     "src": "src" | ||||||
|  |   }, | ||||||
|  |   "files": [ | ||||||
|  |     "lib", | ||||||
|  |     "src" | ||||||
|  |   ], | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "build": "tsc", |     "build": "tsc", | ||||||
|     "lint": "eslint **/*.ts --cache", |     "lint": "eslint **/src/*.ts --cache --fix", | ||||||
|     "format": "prettier --write **/*.ts && git add .", |     "format": "prettier --write **/src/*.ts && git add .", | ||||||
|     "format-check": "prettier --check **/*.ts", |     "format-check": "prettier --check **/src/*.ts", | ||||||
|     "release": "ncc build src/install.ts -o dist && git add -f dist/", |     "release": "ncc build -o dist && git add -f dist/", | ||||||
|     "test": "jest" |     "test": "jest" | ||||||
|   }, |   }, | ||||||
|   "repository": { |   "repository": { | ||||||
| @ -24,33 +34,33 @@ | |||||||
|   "author": "shivammathur", |   "author": "shivammathur", | ||||||
|   "license": "MIT", |   "license": "MIT", | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@actions/core": "^1.2.0", |     "@actions/core": "^1.6.0", | ||||||
|     "@actions/exec": "^1.0.2", |     "@actions/exec": "^1.1.1", | ||||||
|     "@actions/io": "^1.0.1", |     "@actions/io": "^1.1.2", | ||||||
|     "fs": "0.0.1-security" |     "fs": "0.0.1-security" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@types/jest": "^24.0.21", |     "@types/jest": "^27.4.1", | ||||||
|     "@types/node": "^12.12.16", |     "@types/node": "^17.0.23", | ||||||
|     "@typescript-eslint/eslint-plugin": "^2.11.0", |     "@typescript-eslint/eslint-plugin": "^5.18.0", | ||||||
|     "@typescript-eslint/parser": "^2.11.0", |     "@typescript-eslint/parser": "^5.18.0", | ||||||
|     "@zeit/ncc": "^0.21.0", |     "@vercel/ncc": "^0.33.3", | ||||||
|     "eslint": "^6.6.0", |     "eslint": "^8.13.0", | ||||||
|     "eslint-config-prettier": "^6.5.0", |     "eslint-config-prettier": "^8.5.0", | ||||||
|     "eslint-plugin-import": "^2.19.1", |     "eslint-plugin-import": "^2.26.0", | ||||||
|     "eslint-plugin-jest": "^23.0.3", |     "eslint-plugin-jest": "^26.1.4", | ||||||
|     "eslint-plugin-prettier": "^3.1.1", |     "eslint-plugin-prettier": "^4.0.0", | ||||||
|     "husky": "^3.0.9", |     "jest": "^27.5.1", | ||||||
|     "jest": "^24.9.0", |     "jest-circus": "^27.5.1", | ||||||
|     "jest-circus": "^24.9.0", |     "prettier": "^2.6.2", | ||||||
|     "prettier": "^1.17.1", |     "simple-git-hooks": "^2.7.0", | ||||||
|     "ts-jest": "^24.1.0", |     "ts-jest": "^27.1.4", | ||||||
|     "typescript": "^3.7.3" |     "typescript": "^4.6.3" | ||||||
|   }, |   }, | ||||||
|   "husky": { |   "bugs": { | ||||||
|     "skipCI": true, |     "url": "https://github.com/shivammathur/setup-php/issues" | ||||||
|     "hooks": { |   }, | ||||||
|       "pre-commit": "npm run format && npm run lint && npm run build && npm run release" |   "simple-git-hooks": { | ||||||
|     } |     "pre-commit": "npm run format && npm run lint && npm run test && npm run build && npm run release" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -10,11 +10,13 @@ export async function addINIValuesUnix( | |||||||
| ): Promise<string> { | ): Promise<string> { | ||||||
|   const ini_values: Array<string> = await utils.CSVArray(ini_values_csv); |   const ini_values: Array<string> = await utils.CSVArray(ini_values_csv); | ||||||
|   let script = '\n'; |   let script = '\n'; | ||||||
|   await utils.asyncForEach(ini_values, async function(line: string) { |   await utils.asyncForEach(ini_values, async function (line: string) { | ||||||
|     script += |     script += | ||||||
|       (await utils.addLog('$tick', line, 'Added to php.ini', 'linux')) + '\n'; |       (await utils.addLog('$tick', line, 'Added to php.ini', 'linux')) + '\n'; | ||||||
|   }); |   }); | ||||||
|   return 'echo "' + ini_values.join('\n') + '" >> $ini_file' + script; |   return ( | ||||||
|  |     'echo "' + ini_values.join('\n') + '" >> ${pecl_file:-$ini_file}' + script | ||||||
|  |   ); | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @ -27,7 +29,7 @@ export async function addINIValuesWindows( | |||||||
| ): Promise<string> { | ): Promise<string> { | ||||||
|   const ini_values: Array<string> = await utils.CSVArray(ini_values_csv); |   const ini_values: Array<string> = await utils.CSVArray(ini_values_csv); | ||||||
|   let script = '\n'; |   let script = '\n'; | ||||||
|   await utils.asyncForEach(ini_values, async function(line: string) { |   await utils.asyncForEach(ini_values, async function (line: string) { | ||||||
|     script += |     script += | ||||||
|       (await utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n'; |       (await utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n'; | ||||||
|   }); |   }); | ||||||
| @ -44,6 +46,7 @@ export async function addINIValuesWindows( | |||||||
|  * |  * | ||||||
|  * @param ini_values_csv |  * @param ini_values_csv | ||||||
|  * @param os_version |  * @param os_version | ||||||
|  |  * @param no_step | ||||||
|  */ |  */ | ||||||
| export async function addINIValues( | export async function addINIValues( | ||||||
|   ini_values_csv: string, |   ini_values_csv: string, | ||||||
|  | |||||||
							
								
								
									
										28
									
								
								src/configs/brew_extensions
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								src/configs/brew_extensions
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | |||||||
|  | amqp=amqp | ||||||
|  | apcu=apcu | ||||||
|  | expect=expect | ||||||
|  | grpc=grpc | ||||||
|  | igbinary=igbinary | ||||||
|  | imagick=imagick | ||||||
|  | imap=imap | ||||||
|  | memcache=memcache | ||||||
|  | memcached=memcached | ||||||
|  | mongodb=mongodb | ||||||
|  | msgpack=msgpack | ||||||
|  | pcov=pcov | ||||||
|  | pecl_http=http | ||||||
|  | phalcon3=phalcon | ||||||
|  | phalcon4=phalcon | ||||||
|  | propro=propro | ||||||
|  | protobuf=protobuf | ||||||
|  | psr=psr | ||||||
|  | raphf=raphf | ||||||
|  | rdkafka=rdkafka | ||||||
|  | redis=redis | ||||||
|  | ssh2=ssh2 | ||||||
|  | swoole=swoole | ||||||
|  | vips=vips | ||||||
|  | xdebug=xdebug | ||||||
|  | xdebug2=xdebug | ||||||
|  | yaml=yaml | ||||||
|  | zmq=zmq | ||||||
| @ -1,58 +0,0 @@ | |||||||
| variants: |  | ||||||
|   dev: |  | ||||||
|     bcmath: |  | ||||||
|     calendar: |  | ||||||
|     cli: |  | ||||||
|     ctype: |  | ||||||
|     dom: |  | ||||||
|     fileinfo: |  | ||||||
|     filter: |  | ||||||
|     ipc: |  | ||||||
|     iconv: |  | ||||||
|     json: |  | ||||||
|     mbregex: |  | ||||||
|     mbstring: |  | ||||||
|     mhash: |  | ||||||
|     mcrypt: |  | ||||||
|     pcntl: |  | ||||||
|     pcre: |  | ||||||
|     pdo: |  | ||||||
|     phar: |  | ||||||
|     posix: |  | ||||||
|     sockets: |  | ||||||
|     tokenizer: |  | ||||||
|     xml: |  | ||||||
|     curl: |  | ||||||
|     openssl: |  | ||||||
|     zip: |  | ||||||
|     gd: |  | ||||||
|       - --with-freetype |  | ||||||
|       - --with-pdo-mysql=mysqlnd |  | ||||||
|       - --with-mysqli=mysqlnd |  | ||||||
|       - --with-pgsql |  | ||||||
|       - --with-pdo-pgsql |  | ||||||
|       - --with-gmp=/usr/local/opt/gmp |  | ||||||
|       - --with-openssl |  | ||||||
|       - --with-pear |  | ||||||
|       - --with-zip |  | ||||||
|       - --with-libxml |  | ||||||
|       - --with-kerberos |  | ||||||
|       - --with-gd |  | ||||||
|       - --with-ffi |  | ||||||
|       - --with-curl |  | ||||||
|       - --with-mhash |  | ||||||
|       - --with-readline=/usr/local/opt/readline |  | ||||||
|       - --with-iconv=/usr/local/opt/libiconv |  | ||||||
|       - --with-icu-dir=/usr/local/opt/icu4c |  | ||||||
|       - --with-config-file-path=/etc |  | ||||||
|       - --enable-intl |  | ||||||
|       - --enable-xml |  | ||||||
|       - --enable-sysvsem |  | ||||||
|       - --enable-sysvshm |  | ||||||
|       - --enable-sysvmsg |  | ||||||
|       - --enable-phpdbg |  | ||||||
|       - --enable-exif |  | ||||||
|       - --enable-gd |  | ||||||
|       - --enable-soap |  | ||||||
|       - --enable-xmlreader |  | ||||||
|       - --enable-zend-test=shared |  | ||||||
							
								
								
									
										6
									
								
								src/configs/php-versions.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/configs/php-versions.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | |||||||
|  | { | ||||||
|  |   "latest": "8.0", | ||||||
|  |   "5.x": "5.6", | ||||||
|  |   "7.x": "7.4", | ||||||
|  |   "8.x": "8.0" | ||||||
|  | } | ||||||
| @ -2,43 +2,22 @@ import * as utils from './utils'; | |||||||
| import * as extensions from './extensions'; | import * as extensions from './extensions'; | ||||||
| import * as config from './config'; | import * as config from './config'; | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Function to setup Xdebug |  | ||||||
|  * |  | ||||||
|  * @param version |  | ||||||
|  * @param os_version |  | ||||||
|  * @param pipe |  | ||||||
|  */ |  | ||||||
| export async function addCoverageXdebug( | export async function addCoverageXdebug( | ||||||
|  |   extension: string, | ||||||
|   version: string, |   version: string, | ||||||
|   os_version: string, |   os_version: string, | ||||||
|   pipe: string |   pipe: string | ||||||
| ): Promise<string> { | ): Promise<string> { | ||||||
|   switch (version) { |   const xdebug = | ||||||
|     case '8.0': |     (await extensions.addExtension(extension, version, os_version, true)) + | ||||||
|       return ( |     pipe; | ||||||
|         '\n' + |   const log = await utils.addLog( | ||||||
|         (await utils.addLog( |     '$tick', | ||||||
|           '$cross', |     extension, | ||||||
|           'xdebug', |     'Xdebug enabled as coverage driver', | ||||||
|           'Xdebug currently only supports PHP 7.4 or lower', |     os_version | ||||||
|           os_version |   ); | ||||||
|         )) |   return xdebug + '\n' + log; | ||||||
|       ); |  | ||||||
|     case '7.4': |  | ||||||
|     default: |  | ||||||
|       return ( |  | ||||||
|         (await extensions.addExtension('xdebug', version, os_version, true)) + |  | ||||||
|         pipe + |  | ||||||
|         '\n' + |  | ||||||
|         (await utils.addLog( |  | ||||||
|           '$tick', |  | ||||||
|           'xdebug', |  | ||||||
|           'Xdebug enabled as coverage driver', |  | ||||||
|           os_version |  | ||||||
|         )) |  | ||||||
|       ); |  | ||||||
|   } |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @ -151,7 +130,14 @@ export async function addCoverage( | |||||||
|     case 'pcov': |     case 'pcov': | ||||||
|       return script + (await addCoveragePCOV(version, os_version, pipe)); |       return script + (await addCoveragePCOV(version, os_version, pipe)); | ||||||
|     case 'xdebug': |     case 'xdebug': | ||||||
|       return script + (await addCoverageXdebug(version, os_version, pipe)); |     case 'xdebug3': | ||||||
|  |       return ( | ||||||
|  |         script + (await addCoverageXdebug('xdebug', version, os_version, pipe)) | ||||||
|  |       ); | ||||||
|  |     case 'xdebug2': | ||||||
|  |       return ( | ||||||
|  |         script + (await addCoverageXdebug('xdebug2', version, os_version, pipe)) | ||||||
|  |       ); | ||||||
|     case 'none': |     case 'none': | ||||||
|       return script + (await disableCoverage(version, os_version, pipe)); |       return script + (await disableCoverage(version, os_version, pipe)); | ||||||
|     default: |     default: | ||||||
|  | |||||||
| @ -6,59 +6,57 @@ import * as utils from './utils'; | |||||||
|  * |  * | ||||||
|  * @param extension_csv |  * @param extension_csv | ||||||
|  * @param version |  * @param version | ||||||
|  * @param pipe |  | ||||||
|  */ |  */ | ||||||
| export async function addExtensionDarwin( | export async function addExtensionDarwin( | ||||||
|   extension_csv: string, |   extension_csv: string, | ||||||
|   version: string, |   version: string | ||||||
|   pipe: string |  | ||||||
| ): Promise<string> { | ): Promise<string> { | ||||||
|   const extensions: Array<string> = await utils.extensionArray(extension_csv); |   const extensions: Array<string> = await utils.extensionArray(extension_csv); | ||||||
|   let script = '\n'; |   let script = '\n'; | ||||||
|   await utils.asyncForEach(extensions, async function(extension: string) { |   await utils.asyncForEach(extensions, async function (extension: string) { | ||||||
|     extension = extension.toLowerCase(); |  | ||||||
|     const version_extension: string = version + extension; |     const version_extension: string = version + extension; | ||||||
|     let install_command = ''; |     const [extension_name, stability]: string[] = extension.split('-'); | ||||||
|  |     const ext_prefix = await utils.getExtensionPrefix(extension_name); | ||||||
|  |     const command_prefix = 'pecl_install '; | ||||||
|  |     let command = ''; | ||||||
|     switch (true) { |     switch (true) { | ||||||
|       // match pre-release versions |       // match pre-release versions | ||||||
|       case /.*-(beta|alpha|devel|snapshot)/.test(version_extension): |       case /.+-(beta|alpha|devel|snapshot)/.test(extension): | ||||||
|         install_command = 'install_extension ' + extension + pipe; |         script += | ||||||
|         break; |           '\nadd_unstable_extension ' + | ||||||
|       case /5\.6xdebug/.test(version_extension): |           extension_name + | ||||||
|         install_command = 'sudo pecl install -f xdebug-2.5.5' + pipe; |  | ||||||
|         break; |  | ||||||
|       case /7\.0xdebug/.test(version_extension): |  | ||||||
|         install_command = 'sudo pecl install -f xdebug-2.9.0' + pipe; |  | ||||||
|         break; |  | ||||||
|       case /5\.6redis/.test(version_extension): |  | ||||||
|         install_command = 'sudo pecl install -f redis-2.2.8' + pipe; |  | ||||||
|         break; |  | ||||||
|       case /[5-9]\.\dimagick/.test(version_extension): |  | ||||||
|         install_command = |  | ||||||
|           'brew install pkg-config imagemagick' + |  | ||||||
|           pipe + |  | ||||||
|           ' && sudo pecl install -f imagick' + |  | ||||||
|           pipe; |  | ||||||
|         break; |  | ||||||
|       case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension): |  | ||||||
|         install_command = |  | ||||||
|           'sh ' + |  | ||||||
|           path.join(__dirname, '../src/scripts/ext/phalcon_darwin.sh') + |  | ||||||
|           ' ' + |           ' ' + | ||||||
|           extension + |           stability + | ||||||
|           ' ' + |           ' ' + | ||||||
|           version + |           ext_prefix; | ||||||
|           pipe; |         return; | ||||||
|  |       // 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 /(7\.[1-4]|8\.0])pcov/.test(version_extension): | ||||||
|  |       case /^(5\.6|7\.[0-3])phalcon3$|^7\.[2-4]phalcon4$/.test( | ||||||
|  |         version_extension | ||||||
|  |       ): | ||||||
|  |       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; |         break; | ||||||
|       default: |       default: | ||||||
|         install_command = 'sudo pecl install -f ' + extension + pipe; |         command = command_prefix + extension; | ||||||
|         break; |         break; | ||||||
|     } |     } | ||||||
|     script += |     script += | ||||||
|       '\nadd_extension ' + |       '\nadd_extension ' + | ||||||
|       extension + |       extension + | ||||||
|       ' "' + |       ' "' + | ||||||
|       install_command + |       command + | ||||||
|       '" ' + |       '" ' + | ||||||
|       (await utils.getExtensionPrefix(extension)); |       (await utils.getExtensionPrefix(extension)); | ||||||
|   }); |   }); | ||||||
| @ -70,24 +68,41 @@ export async function addExtensionDarwin( | |||||||
|  * |  * | ||||||
|  * @param extension_csv |  * @param extension_csv | ||||||
|  * @param version |  * @param version | ||||||
|  * @param pipe |  | ||||||
|  */ |  */ | ||||||
| export async function addExtensionWindows( | export async function addExtensionWindows( | ||||||
|   extension_csv: string, |   extension_csv: string, | ||||||
|   version: string, |   version: string | ||||||
|   pipe: string |  | ||||||
| ): Promise<string> { | ): Promise<string> { | ||||||
|   const extensions: Array<string> = await utils.extensionArray(extension_csv); |   const extensions: Array<string> = await utils.extensionArray(extension_csv); | ||||||
|   let script = '\n'; |   let script = '\n'; | ||||||
|   await utils.asyncForEach(extensions, async function(extension: string) { |   await utils.asyncForEach(extensions, async function (extension: string) { | ||||||
|     extension = extension.toLowerCase(); |  | ||||||
|     const [extension_name, stability]: string[] = extension.split('-'); |     const [extension_name, stability]: string[] = extension.split('-'); | ||||||
|     const version_extension: string = version + extension; |     const version_extension: string = version + extension; | ||||||
|     switch (true) { |     switch (true) { | ||||||
|       // match pre-release versions |       // match pre-release versions | ||||||
|       case /.*-(beta|alpha|devel|snapshot)/.test(version_extension): |       case /.+-(beta|alpha|devel|snapshot)/.test(extension): | ||||||
|         script += '\nAdd-Extension ' + extension_name + ' ' + stability; |         script += '\nAdd-Extension ' + extension_name + ' ' + stability; | ||||||
|         break; |         break; | ||||||
|  |       // 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): | ||||||
|  |         script += '\nAdd-Extension xdebug stable 2.9.8'; | ||||||
|  |         break; | ||||||
|  |       // 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'; | ||||||
|  |         script += '\nAdd-Extension ' + extension; | ||||||
|  |         break; | ||||||
|       // match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4 |       // match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4 | ||||||
|       case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension): |       case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension): | ||||||
|         script += |         script += | ||||||
| @ -121,45 +136,50 @@ export async function addExtensionLinux( | |||||||
| ): Promise<string> { | ): Promise<string> { | ||||||
|   const extensions: Array<string> = await utils.extensionArray(extension_csv); |   const extensions: Array<string> = await utils.extensionArray(extension_csv); | ||||||
|   let script = '\n'; |   let script = '\n'; | ||||||
|   await utils.asyncForEach(extensions, async function(extension: string) { |   await utils.asyncForEach(extensions, async function (extension: string) { | ||||||
|     extension = extension.toLowerCase(); |  | ||||||
|     const version_extension: string = version + extension; |     const version_extension: string = version + extension; | ||||||
|     let install_command = ''; |     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) { |     switch (true) { | ||||||
|       // match pre-release versions |       // match pre-release versions | ||||||
|       case /.*-(beta|alpha|devel|snapshot)/.test(version_extension): |       case /.+-(beta|alpha|devel|snapshot)/.test(extension): | ||||||
|         install_command = 'install_extension ' + extension + pipe; |         script += | ||||||
|         break; |           '\nadd_unstable_extension ' + | ||||||
|  |           extension_name + | ||||||
|  |           ' ' + | ||||||
|  |           stability + | ||||||
|  |           ' ' + | ||||||
|  |           ext_prefix; | ||||||
|  |         return; | ||||||
|       // match 5.6gearman..7.4gearman |       // match 5.6gearman..7.4gearman | ||||||
|       case /^((5\.6)|(7\.[0-4]))gearman$/.test(version_extension): |       case /^((5\.6)|(7\.[0-4]))gearman$/.test(version_extension): | ||||||
|         install_command = |         script += | ||||||
|           'sh ' + |           '\n. ' + path.join(__dirname, '../src/scripts/ext/gearman.sh'); | ||||||
|           path.join(__dirname, '../src/scripts/ext/gearman.sh') + |         return; | ||||||
|           ' ' + |  | ||||||
|           version + |  | ||||||
|           pipe; |  | ||||||
|         break; |  | ||||||
|       // match 7.0phalcon3...7.3phalcon3 or 7.2phalcon4...7.4phalcon4 |       // match 7.0phalcon3...7.3phalcon3 or 7.2phalcon4...7.4phalcon4 | ||||||
|       case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension): |       case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension): | ||||||
|         script += |         script += | ||||||
|           '\nsh ' + |           '\nbash ' + | ||||||
|           path.join(__dirname, '../src/scripts/ext/phalcon.sh') + |           path.join(__dirname, '../src/scripts/ext/phalcon.sh') + | ||||||
|           ' ' + |           ' ' + | ||||||
|           extension + |           extension + | ||||||
|           ' ' + |           ' ' + | ||||||
|           version; |           version; | ||||||
|         return; |         return; | ||||||
|       // match 7.0xdebug..7.4xdebug |       // match 7.2xdebug2 to 7.4xdebug2 | ||||||
|       case /^7\.[0-4]xdebug$/.test(version_extension): |       case /^7\.[2-4]xdebug2$/.test(version_extension): | ||||||
|         script += |         script += '\nadd_pecl_extension xdebug 2.9.8 ' + ext_prefix; | ||||||
|           '\nupdate_extension xdebug 2.9.0' + |  | ||||||
|           pipe + |  | ||||||
|           '\n' + |  | ||||||
|           (await utils.addLog('$tick', 'xdebug', 'Enabled', 'linux')); |  | ||||||
|         return; |         return; | ||||||
|  |       // match sqlite | ||||||
|  |       case /^sqlite$/.test(extension): | ||||||
|  |         extension = 'sqlite3'; | ||||||
|  |         command = command_prefix + version + '-' + extension + pipe; | ||||||
|  |         break; | ||||||
|       default: |       default: | ||||||
|         install_command = |         command = | ||||||
|           'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y php' + |           command_prefix + | ||||||
|           version + |           version + | ||||||
|           '-' + |           '-' + | ||||||
|           extension.replace('pdo_', '').replace('pdo-', '') + |           extension.replace('pdo_', '').replace('pdo-', '') + | ||||||
| @ -167,12 +187,7 @@ export async function addExtensionLinux( | |||||||
|         break; |         break; | ||||||
|     } |     } | ||||||
|     script += |     script += | ||||||
|       '\nadd_extension ' + |       '\nadd_extension ' + extension + ' "' + command + '" ' + ext_prefix; | ||||||
|       extension + |  | ||||||
|       ' "' + |  | ||||||
|       install_command + |  | ||||||
|       '" ' + |  | ||||||
|       (await utils.getExtensionPrefix(extension)); |  | ||||||
|   }); |   }); | ||||||
|   return script; |   return script; | ||||||
| } | } | ||||||
| @ -183,7 +198,7 @@ export async function addExtensionLinux( | |||||||
|  * @param extension_csv |  * @param extension_csv | ||||||
|  * @param version |  * @param version | ||||||
|  * @param os_version |  * @param os_version | ||||||
|  * @param log_prefix |  * @param no_step | ||||||
|  */ |  */ | ||||||
| export async function addExtension( | export async function addExtension( | ||||||
|   extension_csv: string, |   extension_csv: string, | ||||||
| @ -205,9 +220,9 @@ export async function addExtension( | |||||||
|  |  | ||||||
|   switch (os_version) { |   switch (os_version) { | ||||||
|     case 'win32': |     case 'win32': | ||||||
|       return script + (await addExtensionWindows(extension_csv, version, pipe)); |       return script + (await addExtensionWindows(extension_csv, version)); | ||||||
|     case 'darwin': |     case 'darwin': | ||||||
|       return script + (await addExtensionDarwin(extension_csv, version, pipe)); |       return script + (await addExtensionDarwin(extension_csv, version)); | ||||||
|     case 'linux': |     case 'linux': | ||||||
|       return script + (await addExtensionLinux(extension_csv, version, pipe)); |       return script + (await addExtensionLinux(extension_csv, version, pipe)); | ||||||
|     default: |     default: | ||||||
|  | |||||||
| @ -1,11 +1,10 @@ | |||||||
| import {exec} from '@actions/exec/lib/exec'; | import {exec} from '@actions/exec'; | ||||||
| import * as core from '@actions/core'; | import * as core from '@actions/core'; | ||||||
| import * as config from './config'; | import * as config from './config'; | ||||||
| import * as coverage from './coverage'; | import * as coverage from './coverage'; | ||||||
| import * as extensions from './extensions'; | import * as extensions from './extensions'; | ||||||
| import * as tools from './tools'; | import * as tools from './tools'; | ||||||
| import * as utils from './utils'; | import * as utils from './utils'; | ||||||
| import * as matchers from './matchers'; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Build the script |  * Build the script | ||||||
| @ -20,6 +19,8 @@ export async function build( | |||||||
|   os_version: string |   os_version: string | ||||||
| ): Promise<string> { | ): Promise<string> { | ||||||
|   // taking inputs |   // taking inputs | ||||||
|  |   const name = 'setup-php'; | ||||||
|  |   const url = 'https://setup-php.com/support'; | ||||||
|   const extension_csv: string = |   const extension_csv: string = | ||||||
|     (await utils.getInput('extensions', false)) || |     (await utils.getInput('extensions', false)) || | ||||||
|     (await utils.getInput('extension', false)) || |     (await utils.getInput('extension', false)) || | ||||||
| @ -28,27 +29,23 @@ export async function build( | |||||||
|     (await utils.getInput('ini-values', false)) || |     (await utils.getInput('ini-values', false)) || | ||||||
|     (await utils.getInput('ini-values-csv', false)); |     (await utils.getInput('ini-values-csv', false)); | ||||||
|   const coverage_driver: string = await utils.getInput('coverage', false); |   const coverage_driver: string = await utils.getInput('coverage', false); | ||||||
|   const pecl: string = await utils.getInput('pecl', false); |   const tools_csv: string = await utils.getInput('tools', false); | ||||||
|   let tools_csv: string = await utils.getInput('tools', false); |  | ||||||
|   if ( |  | ||||||
|     pecl == 'true' || |  | ||||||
|     /.*-(beta|alpha|devel|snapshot).*/.test(extension_csv) |  | ||||||
|   ) { |  | ||||||
|     tools_csv = 'pecl, ' + tools_csv; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   let script: string = await utils.readScript(filename, version, os_version); |   let script: string = await utils.readScript(filename); | ||||||
|   script += await tools.addTools(tools_csv, version, os_version); |   script += await tools.addTools(tools_csv, version, os_version); | ||||||
|  |  | ||||||
|   if (extension_csv) { |   if (extension_csv) { | ||||||
|     script += await extensions.addExtension(extension_csv, version, os_version); |     script += await extensions.addExtension(extension_csv, version, os_version); | ||||||
|   } |   } | ||||||
|   if (ini_values_csv) { |  | ||||||
|     script += await config.addINIValues(ini_values_csv, os_version); |  | ||||||
|   } |  | ||||||
|   if (coverage_driver) { |   if (coverage_driver) { | ||||||
|     script += await coverage.addCoverage(coverage_driver, version, os_version); |     script += await coverage.addCoverage(coverage_driver, version, os_version); | ||||||
|   } |   } | ||||||
|  |   if (ini_values_csv) { | ||||||
|  |     script += await config.addINIValues(ini_values_csv, os_version); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   script += '\n' + (await utils.stepLog('Support this project', os_version)); | ||||||
|  |   script += '\n' + (await utils.addLog('$tick', name, url, os_version)); | ||||||
|  |  | ||||||
|   return await utils.writeScript(filename, script); |   return await utils.writeScript(filename, script); | ||||||
| } | } | ||||||
| @ -58,27 +55,50 @@ export async function build( | |||||||
|  */ |  */ | ||||||
| export async function run(): Promise<void> { | export async function run(): Promise<void> { | ||||||
|   try { |   try { | ||||||
|     const os_version: string = process.platform; |     if ((await utils.readEnv('ImageOS')) == 'ubuntu16') { | ||||||
|     let version: string = await utils.getInput('php-version', true); |       core.setFailed( | ||||||
|     version = version.length > 1 ? version.slice(0, 3) : version + '.0'; |         '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' | ||||||
|     // check the os version and run the respective script |       ); | ||||||
|     let script_path = ''; |       return; | ||||||
|     switch (os_version) { |     } | ||||||
|       case 'darwin': |     core.warning( | ||||||
|       case 'linux': |       'setup-php v1 is deprecated.\nPlease upgrade to v2 - https://setup-php.com/w/Switch-to-v2' | ||||||
|         script_path = await build(os_version + '.sh', version, os_version); |     ); | ||||||
|         await exec('sh ' + script_path + ' ' + version + ' ' + __dirname); |     const version: string = await utils.parseVersion( | ||||||
|         break; |       await utils.getInput('php-version', true) | ||||||
|       case 'win32': |     ); | ||||||
|         script_path = await build('win32.ps1', version, os_version); |     if (parseFloat(version) < 5.6 || parseFloat(version) > 8.0) { | ||||||
|         await exec('pwsh ' + script_path + ' ' + version + ' ' + __dirname); |       core.setFailed( | ||||||
|         break; |         `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'); | ||||||
|     } |     } | ||||||
|     await matchers.addMatchers(); |  | ||||||
|   } catch (error) { |   } catch (error) { | ||||||
|     core.setFailed(error.message); |     core.setFailed(error as Error); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| // call the run function | // call the run function | ||||||
| run(); | (async () => { | ||||||
|  |   await run(); | ||||||
|  | })().catch(error => { | ||||||
|  |   core.setFailed(error.message); | ||||||
|  | }); | ||||||
|  | |||||||
| @ -1,18 +0,0 @@ | |||||||
| import * as path from 'path'; |  | ||||||
| import * as utils from './utils'; |  | ||||||
| import * as io from '@actions/io'; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Cache json files for problem matchers |  | ||||||
|  */ |  | ||||||
| export async function addMatchers(): Promise<void> { |  | ||||||
|   const config_path = path.join( |  | ||||||
|     __dirname, |  | ||||||
|     '..', |  | ||||||
|     'src', |  | ||||||
|     'configs', |  | ||||||
|     'phpunit.json' |  | ||||||
|   ); |  | ||||||
|   const runner_dir: string = await utils.getInput('RUNNER_TOOL_CACHE', false); |  | ||||||
|   await io.cp(config_path, runner_dir); |  | ||||||
| } |  | ||||||
| @ -16,104 +16,334 @@ add_log() { | |||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
| # Function to setup extensions | # Function to remove extensions | ||||||
| add_extension() { | remove_extension() { | ||||||
|   extension=$1 |   local extension=$1 | ||||||
|   install_command=$2 |   sudo sed -Ei '' "/=(.*\/)?\"?$extension/d" "$ini_file" | ||||||
|   prefix=$3 |   sudo rm -rf "$scan_dir"/*"$extension"* >/dev/null 2>&1 | ||||||
|   if ! php -m | grep -i -q -w "$extension" && [ -e "$ext_dir/$extension.so" ]; then |   sudo rm -rf "$ext_dir"/"$extension".so >/dev/null 2>&1 | ||||||
|     echo "$prefix=$extension" >>"$ini_file" && add_log "$tick" "$extension" "Enabled" | } | ||||||
|   elif php -m | grep -i -q -w "$extension"; then |  | ||||||
|     add_log "$tick" "$extension" "Enabled" | # Function to test if extension is loaded | ||||||
|   elif ! php -m | grep -i -q -w "$extension"; then | check_extension() { | ||||||
|     (eval "$install_command" && add_log "$tick" "$extension" "Installed and enabled") || |   local extension=$1 | ||||||
|     add_log "$cross" "$extension" "Could not install $extension on PHP $semver" |   if [ "$extension" != "mysql" ]; then | ||||||
|  |     php -m | grep -i -q -w "$extension" | ||||||
|  |   else | ||||||
|  |     php -m | grep -i -q "$extension" | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
| # Function to force install extensions using PECL | # Function to install PECL extensions and accept default options | ||||||
| install_extension() { | pecl_install() { | ||||||
|   extension=$1 |   local extension=$1 | ||||||
|   extension_name="$(echo "$extension" | cut -d'-' -f 1)" |   yes '' | sudo pecl install -f "$extension" >/dev/null 2>&1 | ||||||
|   sudo sed -i "/$extension_name/d" "$ini_file" |  | ||||||
|   sudo rm -rf /etc/php/"$version"/cli/conf.d/*"$extension_name"* >/dev/null 2>&1 |  | ||||||
|   sudo rm -rf "$ext_dir"/"$extension_name".so >/dev/null 2>&1 |  | ||||||
|   sudo pecl install -f "$extension" >/dev/null 2>&1 |  | ||||||
| } | } | ||||||
|  |  | ||||||
| # Function to remove extensions | # Function to get the PECL version | ||||||
| remove_extension() { | get_pecl_version() { | ||||||
|   extension=$1 |   local extension=$1 | ||||||
|   sudo sed -i '' "/$1/d" "$ini_file" |   stability="$(echo "$2" | grep -m 1 -Eio "(alpha|beta|rc|snapshot|preview)")" | ||||||
|   sudo rm -rf "$ext_dir"/"$1".so >/dev/null 2>&1 |   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 setup a remote tool | # 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 | ||||||
|  |   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" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Function to setup extensions | ||||||
|  | add_extension() { | ||||||
|  |   local extension=$1 | ||||||
|  |   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 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # 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() { | add_tool() { | ||||||
|   url=$1 |   url=$1 | ||||||
|   tool=$2 |   tool=$2 | ||||||
|  |   tool_path="$tool_path_dir/$tool" | ||||||
|  |   if [ ! -e "$tool_path" ]; then | ||||||
|  |     rm -rf "$tool_path" | ||||||
|  |   fi | ||||||
|   if [ "$tool" = "composer" ]; then |   if [ "$tool" = "composer" ]; then | ||||||
|     brew install composer >/dev/null 2>&1 |     IFS="," read -r -a urls <<< "$url" | ||||||
|     composer -q global config process-timeout 0 |     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" |     add_log "$tick" "$tool" "Added" | ||||||
|   else |   else | ||||||
|     if [ ! -e /usr/local/bin/"$tool" ]; then |     add_log "$cross" "$tool" "Could not setup $tool" | ||||||
|       rm -rf /usr/local/bin/"${tool:?}" |  | ||||||
|     fi |  | ||||||
|     status_code=$(sudo curl -s -w "%{http_code}" -o /usr/local/bin/"$tool" -L "$url") |  | ||||||
|     if [ "$status_code" = "200" ]; then |  | ||||||
|       sudo chmod a+x /usr/local/bin/"$tool" |  | ||||||
|       add_log "$tick" "$tool" "Added" |  | ||||||
|     else |  | ||||||
|       add_log "$cross" "$tool" "Could not setup $tool" |  | ||||||
|     fi |  | ||||||
|   fi |  | ||||||
|   if [ "$tool" = "phive" ]; then |  | ||||||
|     add_extension curl >/dev/null 2>&1 |  | ||||||
|     add_extension mbstring >/dev/null 2>&1 |  | ||||||
|     add_extension xml >/dev/null 2>&1 |  | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
| add_composer_tool() { | # Function to add a tool using composer | ||||||
|  | add_composertool() { | ||||||
|   tool=$1 |   tool=$1 | ||||||
|   release=$2 |   release=$2 | ||||||
|   prefix=$3 |   prefix=$3 | ||||||
|   ( |   ( | ||||||
|     composer global require "$prefix$release" >/dev/null 2>&1 && \ |     sudo rm -f "$composer_lock" >/dev/null 2>&1 || true | ||||||
|     sudo ln -sf "$(composer -q global config home)"/vendor/bin/"$tool" /usr/local/bin/"$tool" && \ |     composer global require "$prefix$release" >/dev/null 2>&1 && | ||||||
|     add_log "$tick" "$tool" "Added" |     add_log "$tick" "$tool" "Added" | ||||||
|   ) || add_log "$cross" "$tool" "Could not setup $tool" |   ) || 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 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() { | add_pecl() { | ||||||
|   sudo pear config-set php_ini "$ini_file" >/dev/null 2>&1 |  | ||||||
|   sudo pear config-set auto_discover 1 >/dev/null 2>&1 |  | ||||||
|   sudo pear channel-update pear.php.net >/dev/null 2>&1 |  | ||||||
|   sudo pecl channel-update pecl.php.net >/dev/null 2>&1 |  | ||||||
|   add_log "$tick" "PECL" "Added" |   add_log "$tick" "PECL" "Added" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | # Function to backup all libraries of a formula | ||||||
|  | link_libraries() { | ||||||
|  |   formula=$1 | ||||||
|  |   formula_prefix="$(brew --prefix "$formula")" | ||||||
|  |   sudo mkdir -p "$formula_prefix"/lib | ||||||
|  |   for lib in "$formula_prefix"/lib/*.dylib; do | ||||||
|  |     lib_name=$(basename "$lib") | ||||||
|  |     sudo cp -a "$lib" "$brew_prefix/lib/$lib_name" 2>/dev/null || true | ||||||
|  |   done | ||||||
|  | } | ||||||
|  |  | ||||||
|  | patch_brew() { | ||||||
|  |   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 | ||||||
|  |   trap "sudo sed -Ei '' 's/$code.*/$code, overwrite: overwrite?\)/' $formula_installer" exit | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Helper function to update the dependencies. | ||||||
|  | update_dependencies_helper() { | ||||||
|  |   dependency=$1 | ||||||
|  |   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 | ||||||
|  | update_dependencies() { | ||||||
|  |   if ! [ -e /tmp/update_dependencies ]; then | ||||||
|  |     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[@]}" | ||||||
|  |     fi | ||||||
|  |     echo '' | sudo tee /tmp/update_dependencies >/dev/null 2>&1 | ||||||
|  |   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-config --version 2>/dev/null | cut -c 1-3 | ||||||
|  |   else | ||||||
|  |     echo 'false'; | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  |  | ||||||
| # Function to setup PHP and composer | # Function to setup PHP and composer | ||||||
| setup_php_and_composer() { | setup_php() { | ||||||
|   export HOMEBREW_NO_INSTALL_CLEANUP=TRUE |   add_brew_tap shivammathur/homebrew-php | ||||||
|   brew tap shivammathur/homebrew-php >/dev/null 2>&1 |   update_dependencies | ||||||
|   brew install shivammathur/php/php@"$version" >/dev/null 2>&1 |   brew upgrade shivammathur/php/php@"$version" 2>/dev/null || brew install shivammathur/php/php@"$version" | ||||||
|   brew link --force --overwrite php@"$version" >/dev/null 2>&1 |   brew link --force --overwrite php@"$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 | # Variables | ||||||
| tick="✓" | tick="✓" | ||||||
| cross="✗" | cross="✗" | ||||||
| version=$1 | 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_INSTALL_CLEANUP=1 | ||||||
|  | export HOMEBREW_NO_AUTO_UPDATE=1 | ||||||
|  | export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 | ||||||
|  |  | ||||||
| # Setup PHP and composer | # Setup PHP | ||||||
| step_log "Setup PHP" | step_log "Setup PHP" | ||||||
| setup_php_and_composer | 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") | ini_file=$(php -d "date.timezone=UTC" --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g") | ||||||
| echo "date.timezone=UTC" >>"$ini_file" | sudo chmod 777 "$ini_file" "$tool_path_dir" | ||||||
| ext_dir=$(php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||") | configure_php | ||||||
| sudo chmod 777 "$ini_file" | ext_dir=$(php -i | grep -Ei "extension_dir => /" | sed -e "s|.*=> s*||") | ||||||
| mkdir -p "$(pecl config-get ext_dir)" | scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||") | ||||||
|  | sudo mkdir -m 777 -p "$ext_dir" "$HOME/.composer" | ||||||
| semver=$(php -v | head -n 1 | cut -f 2 -d ' ') | semver=$(php -v | head -n 1 | cut -f 2 -d ' ') | ||||||
| add_log "$tick" "PHP" "Installed PHP $semver" | 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" | ||||||
|  | |||||||
| @ -1,9 +1,22 @@ | |||||||
| release_version=$(lsb_release -s -r) | # Helper function to add gearman extension. | ||||||
| sudo DEBIAN_FRONTEND=noninteractive add-apt-repository ppa:ondrej/pkg-gearman -y | add_gearman_helper() { | ||||||
| sudo DEBIAN_FRONTEND=noninteractive apt-get update -y |   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 | ||||||
|  | } | ||||||
|  |  | ||||||
| if [ "$release_version" = "18.04" ]; then | # Function to add gearman extension. | ||||||
|   sudo DEBIAN_FRONTEND=noninteractive apt-fast install -y libgearman-dev php"$1"-gearman | add_gearman() { | ||||||
| elif [ "$release_version" = "16.04" ]; then |   status="Enabled" | ||||||
|   sudo DEBIAN_FRONTEND=noninteractive apt-fast install -y php"$1"-gearman |   add_gearman_helper >/dev/null 2>&1 | ||||||
| fi |   if check_extension gearman; then | ||||||
|  |     add_log "${tick:?}" "gearman" "$status" | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | add_gearman | ||||||
|  | |||||||
| @ -1,5 +0,0 @@ | |||||||
| cd ~ && git clone --depth=1 https://github.com/krakjoe/pcov.git |  | ||||||
| cd pcov && phpize |  | ||||||
| ./configure --enable-pcov |  | ||||||
| make |  | ||||||
| sudo make install |  | ||||||
| @ -18,11 +18,11 @@ Function Install-Phalcon() { | |||||||
|     } else { |     } else { | ||||||
|         $installed = Get-Php -Path $php_dir |         $installed = Get-Php -Path $php_dir | ||||||
|         $nts = if (!$installed.ThreadSafe) { "_nts" } else { "" } |         $nts = if (!$installed.ThreadSafe) { "_nts" } else { "" } | ||||||
|         $match = Invoke-WebRequest -UseBasicParsing -Uri $domain/phalcon/cphalcon/releases | Select-String -Pattern "href=`"(.*phalcon_x64_.*_php${version}_${extension_version}.*[0-9]${nts}.zip)`"" |         $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 |         $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 |         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 |         Expand-Archive -Path $ENV:RUNNER_TOOL_CACHE\phalcon.zip -DestinationPath $ENV:RUNNER_TOOL_CACHE\phalcon -Force > $null 2>&1 | ||||||
|         New-Item -ItemType SymbolicLink -Path $ext_dir\php_phalcon.dll -Target $ENV:RUNNER_TOOL_CACHE\phalcon\php_phalcon.dll > $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 |         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" |     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" | ||||||
|  | |||||||
| @ -20,21 +20,13 @@ update_ppa() { | |||||||
|  |  | ||||||
| # Function to install phalcon | # Function to install phalcon | ||||||
| install_phalcon() { | install_phalcon() { | ||||||
|   extension=$1 |   local extension=$1 | ||||||
|   version=$2 |   version=$2 | ||||||
|   (sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "php$version-$extension" >/dev/null 2>&1 && add_log "$tick" "$extension" "Installed and enabled") || |   (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") || | ||||||
|   (update_ppa && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "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" |   add_log "$cross" "$extension" "Could not install $extension on PHP $semver" | ||||||
| } | } | ||||||
|  |  | ||||||
| # Function to remove an extensions | ini_file="/etc/php/$2/cli/conf.d/50-phalcon.ini" | ||||||
| remove_extension() { |  | ||||||
|   extension=$1 |  | ||||||
|   sudo sed -i "/$extension/d" "$ini_file" |  | ||||||
|   rm -rf "$ext_dir/$extension.so" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ini_file=$(php --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g") |  | ||||||
| ext_dir=$(php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||") | 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 '-') | semver=$(php -v | head -n 1 | cut -f 2 -d ' ' | cut -f 1 -d '-') | ||||||
| extension_major_version=$(echo "$1" | grep -i -Po '\d') | extension_major_version=$(echo "$1" | grep -i -Po '\d') | ||||||
| @ -43,19 +35,17 @@ tick="✓" | |||||||
| cross="✗" | cross="✗" | ||||||
|  |  | ||||||
| if [ "$extension_major_version" = "4" ]; then | if [ "$extension_major_version" = "4" ]; then | ||||||
|   if [ -e "$ext_dir/psr.so" ]; then |   if [ -e "$ext_dir/psr.so" ] && ! php -m | grep -i -q -w psr; then | ||||||
|     echo "extension=psr" >>"$ini_file" |     echo "extension=psr.so" | sudo tee -a "$ini_file" >/dev/null 2>&1 | ||||||
|   fi |   fi | ||||||
|  |  | ||||||
|   if [ -e "$ext_dir/phalcon.so" ]; then |   if [ -e "$ext_dir/phalcon.so" ]; then | ||||||
|     if php -m | grep -i -q -w psr; then |     if php -m | grep -i -q -w psr; then | ||||||
|       echo "extension=phalcon" >>"$ini_file" |       phalcon_version=$(php -d="extension=phalcon" -r "echo phpversion('phalcon');" | cut -d'.' -f 1) | ||||||
|       phalcon_version=$(php -r "echo phpversion('phalcon');" | cut -d'.' -f 1) |  | ||||||
|       if [ "$phalcon_version" != "$extension_major_version" ]; then |       if [ "$phalcon_version" != "$extension_major_version" ]; then | ||||||
|         remove_extension "psr" >/dev/null 2>&1 |  | ||||||
|         remove_extension "phalcon" >/dev/null 2>&1 |  | ||||||
|         install_phalcon "$1" "$2" |         install_phalcon "$1" "$2" | ||||||
|       else |       else | ||||||
|  |         echo "extension=phalcon.so" | sudo tee -a "$ini_file" >/dev/null 2>&1 | ||||||
|         add_log "$tick" "$1" "Enabled" |         add_log "$tick" "$1" "Enabled" | ||||||
|       fi |       fi | ||||||
|     else |     else | ||||||
| @ -68,12 +58,11 @@ fi | |||||||
|  |  | ||||||
| if [ "$extension_major_version" = "3" ]; then | if [ "$extension_major_version" = "3" ]; then | ||||||
|   if [ -e "$ext_dir/phalcon.so" ]; then |   if [ -e "$ext_dir/phalcon.so" ]; then | ||||||
|     echo "extension=phalcon" >>"$ini_file" |     phalcon_version=$(php -d="extension=phalcon.so" -r "echo phpversion('phalcon');" | cut -d'.' -f 1) | ||||||
|     phalcon_version=$(php -r "echo phpversion('phalcon');" | cut -d'.' -f 1) |  | ||||||
|     if [ "$phalcon_version" != "$extension_major_version" ]; then |     if [ "$phalcon_version" != "$extension_major_version" ]; then | ||||||
|       remove_extension "phalcon" >/dev/null 2>&1 |  | ||||||
|       install_phalcon "$1" "$2" |       install_phalcon "$1" "$2" | ||||||
|     else |     else | ||||||
|  |       echo "extension=phalcon.so" | sudo tee -a "$ini_file" >/dev/null 2>&1 | ||||||
|       add_log "$tick" "$1" "Enabled" |       add_log "$tick" "$1" "Enabled" | ||||||
|     fi |     fi | ||||||
|   else |   else | ||||||
|  | |||||||
| @ -1,22 +0,0 @@ | |||||||
| extension=$1 |  | ||||||
| extension_major=${extension: -1} |  | ||||||
| php_version=$2 |  | ||||||
| ini_file=$(php -d "date.timezone=UTC" --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g") |  | ||||||
| ext_dir=$(php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||") |  | ||||||
| if [ -e "$ext_dir/psr.so" ] && [ -e "$ext_dir/phalcon.so" ]; then |  | ||||||
|   echo "extension=psr" >>"$ini_file" |  | ||||||
|   echo "extension=phalcon" >>"$ini_file" |  | ||||||
|   phalcon_semver=$(php -r "echo phpversion('phalcon');") |  | ||||||
|   phalcon_version=$(echo "$phalcon_semver" | cut -d'.' -f 1) |  | ||||||
|   if [ "$phalcon_version" != "$extension_major" ]; then |  | ||||||
|     sudo sed -i '' "/psr/d" "$ini_file" |  | ||||||
|     sudo sed -i '' "/phalcon/d" "$ini_file" |  | ||||||
|     rm -rf "$ext_dir"/psr.so |  | ||||||
|     rm -rf "$ext_dir"/phalcon.so |  | ||||||
|     brew tap shivammathur/homebrew-phalcon |  | ||||||
|     brew install phalcon@"$php_version"_"$extension_major" |  | ||||||
|   fi |  | ||||||
| else |  | ||||||
|   brew tap shivammathur/homebrew-phalcon |  | ||||||
|   brew install phalcon@"$php_version"_"$extension_major" |  | ||||||
| fi |  | ||||||
| @ -1,3 +0,0 @@ | |||||||
| cd ~ && git clone --depth=1 https://github.com/xdebug/xdebug.git |  | ||||||
| cd xdebug || echo "Failed to clone Xdebug" |  | ||||||
| sudo ./rebuild.sh |  | ||||||
| @ -1,6 +0,0 @@ | |||||||
| cd ~ && git clone --depth=1 https://github.com/xdebug/xdebug.git |  | ||||||
| cd xdebug || echo "Failed to clone Xdebug" |  | ||||||
| sudo phpize |  | ||||||
| sudo ./configure |  | ||||||
| sudo make |  | ||||||
| sudo cp modules/xdebug.so "$(php -i | grep "extension_dir => /opt" | sed -e "s|.*=> s*||")" |  | ||||||
| @ -16,118 +16,239 @@ add_log() { | |||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
| # Function to update php ppa | # Function to backup and cleanup package lists. | ||||||
| update_ppa() { | cleanup_lists() { | ||||||
|   if [ "$ppa_updated" = "false" ]; then |   ppa_prefix=${1-ondrej} | ||||||
|     find /etc/apt/sources.list.d -type f -name 'ondrej-ubuntu-php*.list' -exec sudo DEBIAN_FRONTEND=noninteractive apt-fast update -o Dir::Etc::sourcelist="{}" ';' >/dev/null 2>&1 |   if [ ! -e /etc/apt/sources.list.d.save ]; then | ||||||
|     ppa_updated="true" |     sudo mv /etc/apt/sources.list.d /etc/apt/sources.list.d.save | ||||||
|  |     sudo mkdir /etc/apt/sources.list.d | ||||||
|  |     sudo mv /etc/apt/sources.list.d.save/*"${ppa_prefix}"*.list /etc/apt/sources.list.d/ | ||||||
|  |     trap "sudo mv /etc/apt/sources.list.d.save/*.list /etc/apt/sources.list.d/ 2>/dev/null" exit | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
| configure_pecl() { | # Function to add ppa:ondrej/php. | ||||||
|   if [ "$pecl_config" = "false" ] && [ -e /usr/bin/pecl ]; then | add_ppa() { | ||||||
|     for tool in pear pecl; do |   ppa=${1:-ondrej/php} | ||||||
|       sudo $tool config-set php_ini "$ini_file" >/dev/null 2>&1 |   if ! apt-cache policy | grep -q "$ppa"; then | ||||||
|       sudo $tool config-set auto_discover 1 >/dev/null 2>&1 |     cleanup_lists "$(dirname "$ppa")" | ||||||
|       sudo $tool channel-update $tool.php.net >/dev/null 2>&1 |     LC_ALL=C.UTF-8 sudo apt-add-repository ppa:"$ppa" -y | ||||||
|     done |  | ||||||
|     pecl_config="true" |  | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
|  | # Function to update the package lists. | ||||||
|  | update_lists() { | ||||||
|  |   if [ ! -e /tmp/setup_php ]; then | ||||||
|  |     add_ppa ondrej/php >/dev/null 2>&1 | ||||||
|  |     cleanup_lists | ||||||
|  |     sudo "$debconf_fix" apt-get update >/dev/null 2>&1 | ||||||
|  |     echo '' | sudo tee /tmp/setup_php >/dev/null 2>&1 | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Function to configure PECL | ||||||
|  | configure_pecl() { | ||||||
|  |   if ! [ -e /tmp/pecl_config ]; then | ||||||
|  |     if ! command -v pecl >/dev/null || ! command -v pear >/dev/null; then | ||||||
|  |       add_pecl >/dev/null 2>&1 | ||||||
|  |     fi | ||||||
|  |     for script in pear pecl; do | ||||||
|  |       sudo "$script" config-set php_ini "${pecl_file:-$ini_file}" >/dev/null 2>&1 | ||||||
|  |       sudo "$script" channel-update "$script".php.net >/dev/null 2>&1 | ||||||
|  |     done | ||||||
|  |     echo '' | sudo tee /tmp/pecl_config >/dev/null 2>&1 | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # 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 PECL extensions and accept default options | ||||||
|  | pecl_install() { | ||||||
|  |   local extension=$1 | ||||||
|  |   yes '' | sudo pecl install -f "$extension" >/dev/null 2>&1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Function to enable existing extensions. | ||||||
|  | enable_extension() { | ||||||
|  |   sudo find /var/lib/php/modules/"$version" -path "*disabled*$1" -delete | ||||||
|  |   if ! check_extension "$1" && [ -e "$ext_dir/$1.so" ]; then | ||||||
|  |     echo "$2=$ext_dir/$1.so" | sudo tee -a "$pecl_file" >/dev/null | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # 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 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Function to delete extensions | ||||||
|  | delete_extension() { | ||||||
|  |   local extension=$1 | ||||||
|  |   sudo sed -Ei "/=(.*\/)?\"?$extension/d" "$ini_file" | ||||||
|  |   sudo sed -Ei "/=(.*\/)?\"?$extension/d" "$pecl_file" | ||||||
|  |   sudo rm -rf "$scan_dir"/*"$extension"* >/dev/null 2>&1 | ||||||
|  |   sudo rm -rf "$ext_dir"/"$extension".so >/dev/null 2>&1 | ||||||
|  |   sudo sed -i "/Package: php$version-$extension/,/^$/d" /var/lib/dpkg/status | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Function to disable and delete extensions | ||||||
|  | remove_extension() { | ||||||
|  |   local extension=$1 | ||||||
|  |   if [ -e /etc/php/"$version"/mods-available/"$extension".ini ]; then | ||||||
|  |     sudo phpdismod -v "$version" "$extension" | ||||||
|  |   fi | ||||||
|  |   delete_extension "$extension" | ||||||
|  | } | ||||||
|  |  | ||||||
| # Function to setup extensions | # Function to setup extensions | ||||||
| add_extension() { | add_extension() { | ||||||
|   extension=$1 |   local extension=$1 | ||||||
|   install_command=$2 |   install_command=$2 | ||||||
|   prefix=$3 |   prefix=$3 | ||||||
|   if ! php -m | grep -i -q -w "$extension" && [ -e "$ext_dir/$extension.so" ]; then |   enable_extension "$extension" "$prefix" | ||||||
|     echo "$prefix=$extension" >>"$ini_file" && add_log "$tick" "$extension" "Enabled" |   if check_extension "$extension"; then | ||||||
|   elif php -m | grep -i -q -w "$extension"; then |  | ||||||
|     add_log "$tick" "$extension" "Enabled" |     add_log "$tick" "$extension" "Enabled" | ||||||
|   elif ! php -m | grep -i -q -w "$extension"; then |   elif ! check_extension "$extension"; then | ||||||
|     (eval "$install_command" && add_log "$tick" "$extension" "Installed and enabled") || |     eval "$install_command" >/dev/null 2>&1 || | ||||||
|     (update_ppa && eval "$install_command" && add_log "$tick" "$extension" "Installed and enabled") || |     (update_lists && eval "$install_command" >/dev/null 2>&1) || pecl_install "$extension" | ||||||
|     (sudo pecl install -f "$extension" >/dev/null 2>&1 && add_log "$tick" "$extension" "Installed and enabled") || |     (check_extension "$extension" && add_log "$tick" "$extension" "Installed and enabled") || | ||||||
|     add_log "$cross" "$extension" "Could not install $extension on PHP $semver" |     add_log "$cross" "$extension" "Could not install $extension on PHP $semver" | ||||||
|   fi |   fi | ||||||
|   sudo chmod 777 "$ini_file" |   sudo chmod 777 "$ini_file" | ||||||
| } | } | ||||||
|  |  | ||||||
| # Function to force install extensions using PECL | # Function to install a PECL version | ||||||
| install_extension() { | add_pecl_extension() { | ||||||
|   extension=$1 |   local extension=$1 | ||||||
|   extension_name="$(echo "$extension" | cut -d'-' -f 1)" |   pecl_version=$2 | ||||||
|   sudo sed -i "/$extension_name/d" "$ini_file" |   prefix=$3 | ||||||
|   sudo rm -rf /etc/php/"$version"/cli/conf.d/*"$extension_name"* >/dev/null 2>&1 |   configure_pecl | ||||||
|   sudo rm -rf "$ext_dir"/"$extension_name".so >/dev/null 2>&1 |   if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot|preview).* ]]; then | ||||||
|   sudo pecl install -f "$extension" >/dev/null 2>&1 |     pecl_version=$(get_pecl_version "$extension" "$pecl_version") | ||||||
| } |  | ||||||
|  |  | ||||||
| # Function to remove extensions |  | ||||||
| remove_extension() { |  | ||||||
|   extension=$1 |  | ||||||
|   if [ -e /etc/php/"$version"/mods-available/"$extension".ini ]; then |  | ||||||
|     sudo phpdismod -v "$version" "$extension" |  | ||||||
|   fi |   fi | ||||||
|   sudo sed -i "/$extension/d" "$ini_file" |   enable_extension "$extension" "$prefix" | ||||||
|   sudo rm -rf /etc/php/"$version"/cli/conf.d/*"$extension"* >/dev/null 2>&1 |   ext_version=$(php -r "echo phpversion('$extension');") | ||||||
|   sudo rm -rf "$ext_dir"/"$extension".so >/dev/null 2>&1 |   if [ "$ext_version" = "$pecl_version" ]; then | ||||||
| } |     add_log "$tick" "$extension" "Enabled" | ||||||
|  |   else | ||||||
| # Function to update extension |     delete_extension "$extension" | ||||||
| update_extension() { |     ( | ||||||
|   extension=$1 |       sudo pecl install -f "$extension-$pecl_version" >/dev/null 2>&1 && | ||||||
|   latest_version=$2 |       check_extension "$extension" && | ||||||
|   current_version=$(php -r "echo phpversion('$extension');") |       add_log "$tick" "$extension" "Installed and enabled" | ||||||
|   final_version=$(printf "%s\n%s" "$current_version" "$latest_version" | sort | tail -n 1) |     ) || add_log "$cross" "$extension" "Could not install $extension-$pecl_version on PHP $semver" | ||||||
|   if [ "$final_version" != "$current_version"  ]; then |  | ||||||
|     version_exists=$(apt-cache policy -- *"$extension" | grep "$final_version") |  | ||||||
|     if [ -z "$version_exists" ]; then |  | ||||||
|       update_ppa |  | ||||||
|     fi |  | ||||||
|     $apt_install php"$version"-"$extension" |  | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
| # Function to setup a remote tool | # 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() { | add_tool() { | ||||||
|   url=$1 |   url=$1 | ||||||
|   tool=$2 |   tool=$2 | ||||||
|   if [ ! -e /usr/local/bin/"$tool" ]; then |   tool_path="$tool_path_dir/$tool" | ||||||
|     rm -rf /usr/local/bin/"${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 |   fi | ||||||
|   status_code=$(sudo curl -s -w "%{http_code}" -o /usr/local/bin/"$tool" -L "$url") |  | ||||||
|   if [ "$status_code" = "200" ]; then |   if [ "$status_code" = "200" ]; then | ||||||
|     sudo chmod a+x /usr/local/bin/"$tool" |     sudo chmod a+x "$tool_path" | ||||||
|  |     if [ "$tool" = "composer" ]; then | ||||||
|  |       configure_composer "$tool_path" | ||||||
|  |     elif [ "$tool" = "cs2pr" ]; then | ||||||
|  |       sudo sed -i 's/\r$//; s/exit(9)/exit(0)/' "$tool_path" | ||||||
|  |     elif [ "$tool" = "phive" ]; then | ||||||
|  |       add_extension curl "$apt_install php$version-curl" extension >/dev/null 2>&1 | ||||||
|  |       add_extension mbstring "$apt_install php$version-mbstring" extension >/dev/null 2>&1 | ||||||
|  |       add_extension xml "$apt_install php$version-xml" extension >/dev/null 2>&1 | ||||||
|  |     fi | ||||||
|     add_log "$tick" "$tool" "Added" |     add_log "$tick" "$tool" "Added" | ||||||
|   else |   else | ||||||
|     add_log "$cross" "$tool" "Could not setup $tool" |     add_log "$cross" "$tool" "Could not setup $tool" | ||||||
|   fi |     [ "$tool" = "composer" ] && exit 1 | ||||||
|   if [ "$tool" = "composer" ]; then |  | ||||||
|     composer -q global config process-timeout 0 |  | ||||||
|   fi |  | ||||||
|   if [ "$tool" = "phive" ]; then |  | ||||||
|     add_extension curl >/dev/null 2>&1 |  | ||||||
|     add_extension mbstring >/dev/null 2>&1 |  | ||||||
|     add_extension xml >/dev/null 2>&1 |  | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
| add_composer_tool() { | # Function to setup a tool using composer | ||||||
|  | add_composertool() { | ||||||
|   tool=$1 |   tool=$1 | ||||||
|   release=$2 |   release=$2 | ||||||
|   prefix=$3 |   prefix=$3 | ||||||
|   ( |   ( | ||||||
|   composer global require "$prefix$release" >/dev/null 2>&1 && \ |     sudo rm -f "$composer_lock" >/dev/null 2>&1 || true | ||||||
|   sudo ln -sf "$(composer -q global config home)"/vendor/bin/"$tool" /usr/local/bin/"$tool" && \ |     composer global require "$prefix$release" >/dev/null 2>&1 && | ||||||
|   add_log "$tick" "$tool" "Added" |     add_log "$tick" "$tool" "Added" | ||||||
|   ) || add_log "$cross" "$tool" "Could not setup $tool" |   ) || 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 setup phpize and php-config | # Function to setup phpize and php-config | ||||||
| add_devtools() { | add_devtools() { | ||||||
|   if ! [ -e "/usr/bin/phpize$version" ] || ! [ -e "/usr/bin/php-config$version" ]; then |   if ! [ -e "/usr/bin/phpize$version" ] || ! [ -e "/usr/bin/php-config$version" ]; then | ||||||
|     $apt_install php"$version"-dev php"$version"-xml >/dev/null 2>&1 |     update_lists && $apt_install php"$version"-dev php"$version"-xml >/dev/null 2>&1 | ||||||
|   fi |   fi | ||||||
|   sudo update-alternatives --set php-config /usr/bin/php-config"$version" >/dev/null 2>&1 |   sudo update-alternatives --set php-config /usr/bin/php-config"$version" >/dev/null 2>&1 | ||||||
|   sudo update-alternatives --set phpize /usr/bin/phpize"$version" >/dev/null 2>&1 |   sudo update-alternatives --set phpize /usr/bin/phpize"$version" >/dev/null 2>&1 | ||||||
| @ -136,21 +257,25 @@ add_devtools() { | |||||||
|  |  | ||||||
| # Function to setup the nightly build from master branch | # Function to setup the nightly build from master branch | ||||||
| setup_master() { | setup_master() { | ||||||
|   tar_file=php_"$version"%2Bubuntu"$(lsb_release -r -s)".tar.xz |   curl "${curl_opts[@]}" https://github.com/shivammathur/php-builder/releases/latest/download/install.sh | bash -s "github" | ||||||
|   install_dir=~/php/"$version" | } | ||||||
|   sudo mkdir -m 777 -p ~/php |  | ||||||
|   $apt_install libicu-dev >/dev/null 2>&1 | add_packaged_php() { | ||||||
|   curl -o "$tar_file" -L https://bintray.com/shivammathur/php/download_file?file_path="$tar_file" >/dev/null 2>&1 |   if [ "${use_package_cache:-true}" = "false" ]; then | ||||||
|   sudo tar xf "$tar_file" -C ~/php >/dev/null 2>&1 |     update_lists | ||||||
|   rm -rf "$tar_file" |     IFS=' ' read -r -a packages <<<"$(echo "cli curl mbstring xml intl" | sed "s/[^ ]*/php$version-&/g")" | ||||||
|   sudo ln -sf -S "$version" "$install_dir"/bin/* /usr/bin/ |     $apt_install "${packages[@]}" | ||||||
|   sudo ln -sf "$install_dir"/etc/php.ini /etc/php.ini |   else | ||||||
|  |     curl "${curl_opts[@]}" https://github.com/shivammathur/php-ubuntu/releases/latest/download/install.sh | bash -s "$version" | ||||||
|  |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
| # Function to setup PECL | # Function to setup PECL | ||||||
| add_pecl() { | add_pecl() { | ||||||
|   add_devtools |   add_devtools | ||||||
|   $apt_install php-pear >/dev/null 2>&1 |   if [ ! -e /usr/bin/pecl ]; then | ||||||
|  |     $apt_install php-pear >/dev/null 2>&1 | ||||||
|  |   fi | ||||||
|   configure_pecl |   configure_pecl | ||||||
|   add_log "$tick" "PECL" "Added" |   add_log "$tick" "PECL" "Added" | ||||||
| } | } | ||||||
| @ -159,58 +284,78 @@ add_pecl() { | |||||||
| switch_version() { | switch_version() { | ||||||
|   for tool in pear pecl php phar phar.phar php-cgi php-config phpize phpdbg; do |   for tool in pear pecl php phar phar.phar php-cgi php-config phpize phpdbg; do | ||||||
|     if [ -e "/usr/bin/$tool$version" ]; then |     if [ -e "/usr/bin/$tool$version" ]; then | ||||||
|       sudo update-alternatives --set $tool /usr/bin/"$tool$version" >/dev/null 2>&1 |       sudo update-alternatives --set $tool /usr/bin/"$tool$version" | ||||||
|     fi |     fi | ||||||
|   done |   done | ||||||
| } | } | ||||||
|  |  | ||||||
|  | # Function to get PHP version in semver format | ||||||
|  | php_semver() { | ||||||
|  |   if [ ! "$version" = "8.0" ]; then | ||||||
|  |     php"$version" -v | head -n 1 | cut -f 2 -d ' ' | cut -f 1 -d '-' | ||||||
|  |   else | ||||||
|  |     php -v | head -n 1 | cut -f 2 -d ' ' | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # 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 "$pecl_file" >/dev/null | ||||||
|  | } | ||||||
|  |  | ||||||
| # Variables | # Variables | ||||||
| tick="✓" | tick="✓" | ||||||
| cross="✗" | cross="✗" | ||||||
| ppa_updated="false" |  | ||||||
| pecl_config="false" |  | ||||||
| version=$1 | version=$1 | ||||||
| apt_install="sudo DEBIAN_FRONTEND=noninteractive apt-fast install -y" | dist=$2 | ||||||
| existing_version=$(php-config --version | cut -c 1-3) | debconf_fix="DEBIAN_FRONTEND=noninteractive" | ||||||
| semver=$(php -v | head -n 1 | cut -f 2 -d ' ' | cut -f 1 -d '-') | apt_install="sudo $debconf_fix apt-fast install -y --no-install-recommends" | ||||||
|  | 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" | ||||||
|  | existing_version=$(php-config --version 2>/dev/null | cut -c 1-3) | ||||||
|  |  | ||||||
| # Setup PHP | # Setup PHP | ||||||
| step_log "Setup PHP" | step_log "Setup PHP" | ||||||
| sudo mkdir -p /var/run | sudo mkdir -m 777 -p "$HOME/.composer" /var/run /run/php | ||||||
| sudo mkdir -p /run/php | . /etc/lsb-release | ||||||
|  |  | ||||||
| if [ "$existing_version" != "$version" ]; then | if [ "$existing_version" != "$version" ]; then | ||||||
|   if [ ! -e "/usr/bin/php$version" ]; then |   if [ ! -e "/usr/bin/php$version" ]; then | ||||||
|     update_ppa |     if [ "$version" = "8.0" ]; then | ||||||
|     if [ "$version" = "7.4" ]; then |       setup_master >/dev/null 2>&1 | ||||||
|       $apt_install php"$version" php"$version"-curl php"$version"-mbstring php"$version"-xml php"$version"-phpdbg >/dev/null 2>&1 |  | ||||||
|     elif [ "$version" = "8.0" ]; then |  | ||||||
|       setup_master |  | ||||||
|     else |     else | ||||||
|       $apt_install php"$version" php"$version"-curl php"$version"-mbstring php"$version"-xml >/dev/null 2>&1 |       add_packaged_php >/dev/null 2>&1 | ||||||
|     fi |     fi | ||||||
|     status="installed" |     status="Installed" | ||||||
|   else |   else | ||||||
|     status="switched" |     status="Switched to" | ||||||
|   fi |   fi | ||||||
|  |  | ||||||
|   switch_version |   switch_version >/dev/null 2>&1 | ||||||
|  |  | ||||||
|   semver=$(php -v | head -n 1 | cut -f 2 -d ' ' | cut -f 1 -d '-') |  | ||||||
|   if [ "$version" = "8.0" ]; then |  | ||||||
|     semver=$(php -v | head -n 1 | cut -f 2 -d ' ') |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   if [ "$status" != "switched" ]; then |  | ||||||
|     status="Installed PHP $semver" |  | ||||||
|   else |  | ||||||
|     status="Switched to PHP $semver" |  | ||||||
|   fi |  | ||||||
| else | else | ||||||
|   status="PHP $semver Found" |   status="Found" | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | if ! command -v php"$version" >/dev/null; then | ||||||
|  |   add_log "$cross" "PHP" "Could not setup PHP $version" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  | semver=$(php_semver) | ||||||
|  | scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||") | ||||||
| ini_file=$(php --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g") | ini_file=$(php --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g") | ||||||
| ext_dir=$(php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||") | ext_dir=$(php -i | grep "extension_dir => /" | sed -e "s|.*=> s*||") | ||||||
| sudo chmod 777 "$ini_file" | pecl_file="$scan_dir"/99-pecl.ini | ||||||
| add_log "$tick" "PHP" "$status" | echo '' | sudo tee "$pecl_file" >/dev/null 2>&1 | ||||||
|  | configure_php | ||||||
|  | sudo rm -rf /usr/local/bin/phpunit >/dev/null 2>&1 | ||||||
|  | sudo chmod 777 "$ini_file" "$pecl_file" "$tool_path_dir" | ||||||
|  | sudo cp "$dist"/../src/configs/*.json "$RUNNER_TOOL_CACHE/" | ||||||
|  | add_log "$tick" "PHP" "$status PHP $semver" | ||||||
|  | |||||||
| @ -8,7 +8,7 @@ param ( | |||||||
|   [ValidateNotNull()] |   [ValidateNotNull()] | ||||||
|   [ValidateLength(1, [int]::MaxValue)] |   [ValidateLength(1, [int]::MaxValue)] | ||||||
|   [string] |   [string] | ||||||
|   $dir |   $dist | ||||||
| ) | ) | ||||||
|  |  | ||||||
| Function Step-Log($message) { | Function Step-Log($message) { | ||||||
| @ -20,6 +20,67 @@ Function Add-Log($mark, $subject, $message) { | |||||||
|   printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" $code $mark $subject $message |   printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" $code $mark $subject $message | ||||||
| } | } | ||||||
|  |  | ||||||
|  | Function Add-ToProfile { | ||||||
|  |   param( | ||||||
|  |     [Parameter(Position = 0, Mandatory = $true)] | ||||||
|  |     [ValidateNotNull()] | ||||||
|  |     [ValidateLength(1, [int]::MaxValue)] | ||||||
|  |     [string] | ||||||
|  |     $input_profile, | ||||||
|  |     [Parameter(Position = 1, Mandatory = $true)] | ||||||
|  |     [ValidateNotNull()] | ||||||
|  |     [ValidateLength(1, [int]::MaxValue)] | ||||||
|  |     [string] | ||||||
|  |     $search, | ||||||
|  |     [Parameter(Position = 2, Mandatory = $true)] | ||||||
|  |     [ValidateNotNull()] | ||||||
|  |     [ValidateLength(1, [int]::MaxValue)] | ||||||
|  |     [string] | ||||||
|  |     $value | ||||||
|  |   ) | ||||||
|  |   if($null -eq (Get-Content $input_profile | findstr $search)) { | ||||||
|  |     Add-Content -Path $input_profile -Value $value | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | Function Add-Printf { | ||||||
|  |   if (-not(Test-Path "C:\Program Files\Git\usr\bin\printf.exe")) { | ||||||
|  |     if(Test-Path "C:\msys64\usr\bin\printf.exe") { | ||||||
|  |       New-Item -Path $php_dir\printf.exe -ItemType SymbolicLink -Value C:\msys64\usr\bin\printf.exe -Force > $null 2>&1 | ||||||
|  |     } else { | ||||||
|  |       Invoke-WebRequest -UseBasicParsing -Uri "$github/shivammathur/printf/releases/latest/download/printf-x64.zip" -OutFile "$php_dir\printf.zip" | ||||||
|  |       Expand-Archive -Path $php_dir\printf.zip -DestinationPath $php_dir -Force | ||||||
|  |     } | ||||||
|  |   } else { | ||||||
|  |     New-Item -Path $php_dir\printf.exe -ItemType SymbolicLink -Value "C:\Program Files\Git\usr\bin\printf.exe" -Force > $null 2>&1 | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | Function Install-PSPackage() { | ||||||
|  |   param( | ||||||
|  |     [Parameter(Position = 0, Mandatory = $true)] | ||||||
|  |     $package, | ||||||
|  |     [Parameter(Position = 1, Mandatory = $true)] | ||||||
|  |     $psm1_path, | ||||||
|  |     [Parameter(Position = 2, Mandatory = $true)] | ||||||
|  |     $url, | ||||||
|  |     [Parameter(Position = 3, Mandatory = $true)] | ||||||
|  |     $cmdlet | ||||||
|  |   ) | ||||||
|  |   $module_path = "$php_dir\$psm1_path.psm1" | ||||||
|  |   if(-not (Test-Path $module_path -PathType Leaf)) { | ||||||
|  |     $zip_file = "$php_dir\$package.zip" | ||||||
|  |     Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $zip_file | ||||||
|  |     Expand-Archive -Path $zip_file -DestinationPath $php_dir -Force | ||||||
|  |   } | ||||||
|  |   Import-Module $module_path | ||||||
|  |   Add-ToProfile $current_profile "$package-search" "Import-Module $module_path" | ||||||
|  |  | ||||||
|  |   if($null -eq (Get-Command $cmdlet -ErrorAction SilentlyContinue)) { | ||||||
|  |     Install-Module -Name $package -Force | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| Function Add-Extension { | Function Add-Extension { | ||||||
|   Param ( |   Param ( | ||||||
|     [Parameter(Position = 0, Mandatory = $true)] |     [Parameter(Position = 0, Mandatory = $true)] | ||||||
| @ -31,11 +92,16 @@ Function Add-Extension { | |||||||
|     [ValidateNotNull()] |     [ValidateNotNull()] | ||||||
|     [ValidateSet('stable', 'beta', 'alpha', 'devel', 'snapshot')] |     [ValidateSet('stable', 'beta', 'alpha', 'devel', 'snapshot')] | ||||||
|     [string] |     [string] | ||||||
|     $mininum_stability = 'stable' |     $stability = 'stable', | ||||||
|  |     [Parameter(Position = 2, Mandatory = $false)] | ||||||
|  |     [ValidateNotNull()] | ||||||
|  |     [ValidatePattern('^\d+(\.\d+){0,2}$')] | ||||||
|  |     [string] | ||||||
|  |     $extension_version = '' | ||||||
|   ) |   ) | ||||||
|   try { |   try { | ||||||
|     $extension_info = Get-PhpExtension -Path $php_dir | Where-Object { $_.Name -eq $extension -or $_.Handle -eq $extension } |     $extension_info = Get-PhpExtension -Path $php_dir | Where-Object { $_.Name -eq $extension -or $_.Handle -eq $extension } | ||||||
|     if ($null -ne $extension_info -and $mininum_stability -eq 'stable') { |     if ($null -ne $extension_info) { | ||||||
|       switch ($extension_info.State) { |       switch ($extension_info.State) { | ||||||
|         'Builtin' { |         'Builtin' { | ||||||
|           Add-Log $tick $extension "Enabled" |           Add-Log $tick $extension "Enabled" | ||||||
| @ -50,12 +116,13 @@ Function Add-Extension { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
|       Install-PhpExtension -Extension $extension -MinimumStability $mininum_stability -Path $php_dir |       if($extension_version -ne '') { | ||||||
|       if($mininum_stability -ne 'stable') { |         Install-PhpExtension -Extension $extension -Version $extension_version -MinimumStability $stability -MaximumStability $stability -Path $php_dir | ||||||
|         Add-Log $tick "$extension-$mininum_stability" "Installed and enabled" |  | ||||||
|       } else { |       } else { | ||||||
|         Add-Log $tick $extension "Installed and enabled" |         Install-PhpExtension -Extension $extension -MinimumStability $stability -MaximumStability $stability -Path $php_dir | ||||||
|       } |       } | ||||||
|  |  | ||||||
|  |       Add-Log $tick $extension "Installed and enabled" | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   catch { |   catch { | ||||||
| @ -79,12 +146,35 @@ Function Remove-Extension() { | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| Function Add-Tool() { |  | ||||||
|   Param ( | Function Edit-ComposerConfig() { | ||||||
|  |   Param( | ||||||
|     [Parameter(Position = 0, Mandatory = $true)] |     [Parameter(Position = 0, Mandatory = $true)] | ||||||
|     [ValidateNotNull()] |     [ValidateNotNull()] | ||||||
|     [ValidateLength(1, [int]::MaxValue)] |     [ValidateLength(1, [int]::MaxValue)] | ||||||
|     [string] |     [string] | ||||||
|  |     $tool_path | ||||||
|  |   ) | ||||||
|  |   Copy-Item $tool_path -Destination "$tool_path.phar" | ||||||
|  |   php -r "try {`$p=new Phar('$tool_path.phar', 0);exit(0);} catch(Exception `$e) {exit(1);}" | ||||||
|  |   if ($? -eq $False) { | ||||||
|  |     Add-Log "$cross" "composer" "Could not download composer" | ||||||
|  |     exit 1; | ||||||
|  |   } | ||||||
|  |   if (-not(Test-Path $composer_json)) { | ||||||
|  |     Set-Content -Path $composer_json -Value "{}" | ||||||
|  |   } | ||||||
|  |   composer -q config -g process-timeout 0 | ||||||
|  |   Write-Output $composer_bin | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 | ||||||
|  |   if (Test-Path env:COMPOSER_TOKEN) { | ||||||
|  |     composer -q config -g github-oauth.github.com $env:COMPOSER_TOKEN | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | Function Add-Tool() { | ||||||
|  |   Param ( | ||||||
|  |     [Parameter(Position = 0, Mandatory = $true)] | ||||||
|  |     [ValidateNotNull()] | ||||||
|     $url, |     $url, | ||||||
|     [Parameter(Position = 1, Mandatory = $true)] |     [Parameter(Position = 1, Mandatory = $true)] | ||||||
|     [ValidateNotNull()] |     [ValidateNotNull()] | ||||||
| @ -95,37 +185,49 @@ Function Add-Tool() { | |||||||
|   if (Test-Path $php_dir\$tool) { |   if (Test-Path $php_dir\$tool) { | ||||||
|     Remove-Item $php_dir\$tool |     Remove-Item $php_dir\$tool | ||||||
|   } |   } | ||||||
|   if ($tool -eq "composer") { |   if($url.Count -gt 1) { $url = $url[0] } | ||||||
|     Install-Composer -Scope System -Path $php_dir -PhpPath $php_dir |   if ($tool -eq "symfony") { | ||||||
|     composer -q global config process-timeout 0 |  | ||||||
|   } elseif ($tool -eq "symfony") { |  | ||||||
|     Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $php_dir\$tool.exe |     Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $php_dir\$tool.exe | ||||||
|     Add-Content -Path $PsHome\profile.ps1 -Value "New-Alias $tool $php_dir\$tool.exe" > $null 2>&1 |     Add-ToProfile $current_profile $tool "New-Alias $tool $php_dir\$tool.exe" >$null 2>&1 | ||||||
|   } else { |   } else { | ||||||
|     try { |     try { | ||||||
|       Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $php_dir\$tool |       Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $php_dir\$tool | ||||||
|       $bat_content = @() |     } catch { | ||||||
|       $bat_content += "@ECHO off" |       if($url -match '.*github.com.*releases.*latest.*') { | ||||||
|       $bat_content += "setlocal DISABLEDELAYEDEXPANSION" |         try { | ||||||
|       $bat_content += "SET BIN_TARGET=%~dp0/" + $tool |           $url = $url.replace("releases/latest/download", "releases/download/" + ([regex]::match((Invoke-WebRequest -UseBasicParsing -Uri ($url.split('/release')[0] + "/releases")).Content, "([0-9]+\.[0-9]+\.[0-9]+)/" + ($url.Substring($url.LastIndexOf("/") + 1))).Groups[0].Value).split('/')[0]) | ||||||
|       $bat_content += "php %BIN_TARGET% %*" |           Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $php_dir\$tool | ||||||
|       Set-Content -Path $php_dir\$tool.bat -Value $bat_content |         } catch { } | ||||||
|       Add-Content -Path $PsHome\profile.ps1 -Value "New-Alias $tool $php_dir\$tool.bat" > $null 2>&1 |       } | ||||||
|     } catch { } |     } | ||||||
|   } |  | ||||||
|   if($tool -eq "phive") { |  | ||||||
|     Add-Extension curl >$null 2>&1 |  | ||||||
|     Add-Extension mbstring >$null 2>&1 |  | ||||||
|     Add-Extension xml >$null 2>&1 |  | ||||||
|   } |   } | ||||||
|   if (((Get-ChildItem -Path $php_dir/* | Where-Object Name -Match "^$tool(.exe|.phar)*$").Count -gt 0)) { |   if (((Get-ChildItem -Path $php_dir/* | Where-Object Name -Match "^$tool(.exe|.phar)*$").Count -gt 0)) { | ||||||
|  |     $bat_content = @() | ||||||
|  |     $bat_content += "@ECHO off" | ||||||
|  |     $bat_content += "setlocal DISABLEDELAYEDEXPANSION" | ||||||
|  |     $bat_content += "SET BIN_TARGET=%~dp0/" + $tool | ||||||
|  |     $bat_content += "php %BIN_TARGET% %*" | ||||||
|  |     Set-Content -Path $php_dir\$tool.bat -Value $bat_content | ||||||
|  |     Add-ToProfile $current_profile $tool "New-Alias $tool $php_dir\$tool.bat" >$null 2>&1 | ||||||
|  |     if($tool -eq "composer") { | ||||||
|  |       Edit-ComposerConfig $php_dir\$tool | ||||||
|  |     } elseif($tool -eq "cs2pr") { | ||||||
|  |       (Get-Content $php_dir/cs2pr).replace('exit(9)', 'exit(0)') | Set-Content $php_dir/cs2pr | ||||||
|  |     } elseif($tool -eq "phan") { | ||||||
|  |       Add-Extension fileinfo >$null 2>&1 | ||||||
|  |       Add-Extension ast >$null 2>&1 | ||||||
|  |     } elseif($tool -eq "phive") { | ||||||
|  |       Add-Extension xml >$null 2>&1 | ||||||
|  |     } elseif($tool -eq "wp-cli") { | ||||||
|  |       Copy-Item $php_dir\wp-cli.bat -Destination $php_dir\wp.bat | ||||||
|  |     } | ||||||
|     Add-Log $tick $tool "Added" |     Add-Log $tick $tool "Added" | ||||||
|   } else { |   } else { | ||||||
|     Add-Log $cross $tool "Could not add $tool" |     Add-Log $cross $tool "Could not add $tool" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| Function Add-Composer-Tool() { | Function Add-Composertool() { | ||||||
|   Param ( |   Param ( | ||||||
|     [Parameter(Position = 0, Mandatory = $true)] |     [Parameter(Position = 0, Mandatory = $true)] | ||||||
|     [ValidateNotNull()] |     [ValidateNotNull()] | ||||||
| @ -143,17 +245,24 @@ Function Add-Composer-Tool() { | |||||||
|     [string] |     [string] | ||||||
|     $prefix |     $prefix | ||||||
|   ) |   ) | ||||||
|  |   if(Test-Path $composer_lock) { | ||||||
|  |     Remove-Item -Path $composer_lock -Force | ||||||
|  |   } | ||||||
|   composer -q global require $prefix$release 2>&1 | out-null |   composer -q global require $prefix$release 2>&1 | out-null | ||||||
|  |   if($tool -eq "codeception") { | ||||||
|  |     Copy-Item $composer_bin\codecept.bat -Destination $composer_bin\codeception.bat | ||||||
|  |   } | ||||||
|   if($?) { |   if($?) { | ||||||
|     $composer_dir = composer -q global config home | ForEach-Object { $_ -replace "/", "\" } |  | ||||||
|     Add-Content -Path $PsHome\profile.ps1 -Value "New-Alias $tool $composer_dir\vendor\bin\$tool.bat" |  | ||||||
|     Add-Log $tick $tool "Added" |     Add-Log $tick $tool "Added" | ||||||
|   } else { |   } else { | ||||||
|     Add-Log $cross $tool "Could not setup $tool" |     Add-Log $cross $tool "Could not setup $tool" | ||||||
|   } |   } | ||||||
|  |   if(Test-Path $composer_bin\composer) { | ||||||
|  |     Copy-Item -Path "$php_dir\composer" -Destination "$composer_bin\composer" -Force | ||||||
|  |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| Function Add-PECL() { | Function Add-Pecl() { | ||||||
|   Add-Log $tick "PECL" "Use extensions input to setup PECL extensions on windows" |   Add-Log $tick "PECL" "Use extensions input to setup PECL extensions on windows" | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -161,57 +270,57 @@ Function Add-PECL() { | |||||||
| $tick = ([char]8730) | $tick = ([char]8730) | ||||||
| $cross = ([char]10007) | $cross = ([char]10007) | ||||||
| $php_dir = 'C:\tools\php' | $php_dir = 'C:\tools\php' | ||||||
| $ext_dir = $php_dir + '\ext' | $ext_dir = "$php_dir\ext" | ||||||
|  | $current_profile = "$PSHOME\Profile.ps1" | ||||||
| $ProgressPreference = 'SilentlyContinue' | $ProgressPreference = 'SilentlyContinue' | ||||||
| $master_version = '8.0' | $github = 'https://github.com' | ||||||
|  | $composer_bin = "$env:APPDATA\Composer\vendor\bin" | ||||||
|  | $composer_json = "$env:APPDATA\Composer\composer.json" | ||||||
|  | $composer_lock = "$env:APPDATA\Composer\composer.lock" | ||||||
| $arch = 'x64' | $arch = 'x64' | ||||||
| $ts = $false | if(-not([Environment]::Is64BitOperatingSystem) -or $version -lt '7.0') { | ||||||
| if((Test-Path env:PHPTS) -and $env:PHPTS -eq 'ts') { |   $arch = 'x86' | ||||||
|   $ts = $true | } | ||||||
|  | $ts = $env:PHPTS -eq 'ts' | ||||||
|  | if($env:PHPTS -ne 'ts') { | ||||||
|  |   $env:PHPTS = 'nts' | ||||||
|  | } | ||||||
|  | if(-not(Test-Path -LiteralPath $current_profile)) { | ||||||
|  |   New-Item -Path $current_profile -ItemType "file" -Force >$null 2>&1 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | Add-Printf >$null 2>&1 | ||||||
| Step-Log "Setup PhpManager" | Step-Log "Setup PhpManager" | ||||||
| Install-Module -Name PhpManager -Force -Scope CurrentUser | Install-PSPackage PhpManager PhpManager\PhpManager "$github/mlocati/powershell-phpmanager/releases/latest/download/PhpManager.zip" Get-Php >$null 2>&1 | ||||||
| Add-Log $tick "PhpManager" "Installed" | Add-Log $tick "PhpManager" "Installed" | ||||||
|  |  | ||||||
|  | Step-Log "Setup PHP" | ||||||
| $installed = $null | $installed = $null | ||||||
| if (Test-Path -LiteralPath $php_dir -PathType Container) { | if (Test-Path -LiteralPath $php_dir -PathType Container) { | ||||||
|   try { |   try { | ||||||
|     $installed = Get-Php -Path $php_dir |     $installed = Get-Php -Path $php_dir | ||||||
|   } |   } catch { } | ||||||
|   catch { |  | ||||||
|   } |  | ||||||
| } | } | ||||||
| Step-Log "Setup PHP" |  | ||||||
| $status = "Installed" | $status = "Installed" | ||||||
| if ($null -eq $installed -or -not("$($installed.Version).".StartsWith(($version -replace '^(\d+(\.\d+)*).*', '$1.'))) -or $ts -ne $installed.ThreadSafe) { | if ($null -eq $installed -or -not("$($installed.Version).".StartsWith(($version -replace '^(\d+(\.\d+)*).*', '$1.'))) -or $ts -ne $installed.ThreadSafe) { | ||||||
|   if ($version -lt '7.0') { |   if ($version -lt '7.0' -and ($null -eq (Get-Module -ListAvailable -Name VcRedist))) { | ||||||
|     Install-Module -Name VcRedist -Force |     Install-PSPackage VcRedist VcRedist-main\VcRedist\VcRedist "$github/aaronparker/VcRedist/archive/main.zip" Get-VcList >$null 2>&1 | ||||||
|     $arch='x86' |  | ||||||
|   } |   } | ||||||
|   if ($version -eq $master_version) { |   try { | ||||||
|     $version = 'master' |     Install-Php -Version $version -Architecture $arch -ThreadSafe $ts -InstallVC -Path $php_dir -TimeZone UTC -InitialPhpIni Production -Force > $null 2>&1 | ||||||
|   } |   } catch { } | ||||||
|  |  | ||||||
|   Install-Php -Version $version -Architecture $arch -ThreadSafe $ts -InstallVC -Path $php_dir -TimeZone UTC -InitialPhpIni Production -Force >$null 2>&1 |  | ||||||
| } else { | } else { | ||||||
|   $updated = Update-Php $php_dir >$null 2>&1 |   $status = "Found" | ||||||
|   if($updated -eq $False) { |  | ||||||
|     $status = "Found" |  | ||||||
|   } |  | ||||||
| } | } | ||||||
|  |  | ||||||
| $installed = Get-Php -Path $php_dir | $installed = Get-Php -Path $php_dir | ||||||
| Set-PhpIniKey -Key 'date.timezone' -Value 'UTC' -Path $php_dir | if($installed.MajorMinorVersion -ne $version) { | ||||||
| Enable-PhpExtension -Extension openssl, curl, opcache -Path $php_dir |   Add-Log $cross "PHP" "Could not setup PHP $version" | ||||||
| Update-PhpCAInfo -Path $php_dir -Source CurrentUser |   exit 1 | ||||||
| if ($version -eq 'master') { |  | ||||||
|   if($installed.ThreadSafe) { |  | ||||||
|     Copy-Item $dir"\..\src\bin\php_ts_pcov.dll" -Destination $ext_dir"\php_pcov.dll" |  | ||||||
|   } else { |  | ||||||
|     Copy-Item $dir"\..\src\bin\php_pcov.dll" -Destination $ext_dir"\php_pcov.dll" |  | ||||||
|   } |  | ||||||
|   Set-PhpIniKey -Key 'opcache.jit_buffer_size' -Value '256M' -Path $php_dir |  | ||||||
|   Set-PhpIniKey -Key 'opcache.jit' -Value '1235' -Path $php_dir |  | ||||||
| } | } | ||||||
|  | ('date.timezone=UTC', 'memory_limit=-1', 'xdebug.mode=coverage') | ForEach-Object { $p=$_.split('='); Set-PhpIniKey -Key $p[0] -Value $p[1] -Path $php_dir } | ||||||
|  | Enable-PhpExtension -Extension openssl, curl, opcache, mbstring -Path $php_dir | ||||||
|  | Update-PhpCAInfo -Path $php_dir -Source CurrentUser | ||||||
|  | Copy-Item -Path $dist\..\src\configs\*.json -Destination $env:RUNNER_TOOL_CACHE | ||||||
|  | New-Item -ItemType Directory -Path $composer_bin -Force > $null 2>&1 | ||||||
| Add-Log $tick "PHP" "$status PHP $($installed.FullVersion)" | Add-Log $tick "PHP" "$status PHP $($installed.FullVersion)" | ||||||
|  | |||||||
							
								
								
									
										266
									
								
								src/tools.ts
									
									
									
									
									
								
							
							
						
						
									
										266
									
								
								src/tools.ts
									
									
									
									
									
								
							| @ -1,60 +1,21 @@ | |||||||
| import * as utils from './utils'; | import * as utils from './utils'; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Function to get command to setup tool |  * Function to get command to setup tools | ||||||
|  * |  * | ||||||
|  * @param os_version |  * @param os_version | ||||||
|  |  * @param suffix | ||||||
|  */ |  */ | ||||||
| export async function getArchiveCommand(os_version: string): Promise<string> { | export async function getCommand( | ||||||
|  |   os_version: string, | ||||||
|  |   suffix: string | ||||||
|  | ): Promise<string> { | ||||||
|   switch (os_version) { |   switch (os_version) { | ||||||
|     case 'linux': |     case 'linux': | ||||||
|     case 'darwin': |     case 'darwin': | ||||||
|       return 'add_tool '; |       return 'add_' + suffix + ' '; | ||||||
|     case 'win32': |     case 'win32': | ||||||
|       return 'Add-Tool '; |       return 'Add-' + suffix.charAt(0).toUpperCase() + suffix.slice(1) + ' '; | ||||||
|     default: |  | ||||||
|       return await utils.log( |  | ||||||
|         'Platform ' + os_version + ' is not supported', |  | ||||||
|         os_version, |  | ||||||
|         'error' |  | ||||||
|       ); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Function to get command to setup tools using composer |  | ||||||
|  * |  | ||||||
|  * @param os_version |  | ||||||
|  */ |  | ||||||
| export async function getPackageCommand(os_version: string): Promise<string> { |  | ||||||
|   switch (os_version) { |  | ||||||
|     case 'linux': |  | ||||||
|     case 'darwin': |  | ||||||
|       return 'add_composer_tool '; |  | ||||||
|     case 'win32': |  | ||||||
|       return 'Add-Composer-Tool '; |  | ||||||
|     default: |  | ||||||
|       return await utils.log( |  | ||||||
|         'Platform ' + os_version + ' is not supported', |  | ||||||
|         os_version, |  | ||||||
|         'error' |  | ||||||
|       ); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * |  | ||||||
|  * Function to get command to setup PECL |  | ||||||
|  * |  | ||||||
|  * @param os_version |  | ||||||
|  */ |  | ||||||
| export async function getPECLCommand(os_version: string): Promise<string> { |  | ||||||
|   switch (os_version) { |  | ||||||
|     case 'linux': |  | ||||||
|     case 'darwin': |  | ||||||
|       return 'add_pecl '; |  | ||||||
|     case 'win32': |  | ||||||
|       return 'Add-PECL '; |  | ||||||
|     default: |     default: | ||||||
|       return await utils.log( |       return await utils.log( | ||||||
|         'Platform ' + os_version + ' is not supported', |         'Platform ' + os_version + ' is not supported', | ||||||
| @ -71,9 +32,12 @@ export async function getPECLCommand(os_version: string): Promise<string> { | |||||||
|  */ |  */ | ||||||
| export async function getToolVersion(version: string): Promise<string> { | export async function getToolVersion(version: string): Promise<string> { | ||||||
|   // semver_regex - https://semver.org/ |   // semver_regex - https://semver.org/ | ||||||
|   const semver_regex = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/; |   const semver_regex = | ||||||
|   version = version.replace(/[><=^]*/, ''); |     /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/; | ||||||
|  |   const composer_regex = /^stable$|^preview$|^snapshot$|^[1|2]$/; | ||||||
|  |   version = version.replace(/[><=^]*/, '').replace(/^v(\d)/, '$1'); | ||||||
|   switch (true) { |   switch (true) { | ||||||
|  |     case composer_regex.test(version): | ||||||
|     case semver_regex.test(version): |     case semver_regex.test(version): | ||||||
|       return version; |       return version; | ||||||
|     default: |     default: | ||||||
| @ -109,6 +73,8 @@ export async function parseTool( | |||||||
| /** | /** | ||||||
|  * Function to get the url of tool with the given version |  * Function to get the url of tool with the given version | ||||||
|  * |  * | ||||||
|  |  * @param tool | ||||||
|  |  * @param extension | ||||||
|  * @param version |  * @param version | ||||||
|  * @param prefix |  * @param prefix | ||||||
|  * @param version_prefix |  * @param version_prefix | ||||||
| @ -116,6 +82,7 @@ export async function parseTool( | |||||||
|  */ |  */ | ||||||
| export async function getUri( | export async function getUri( | ||||||
|   tool: string, |   tool: string, | ||||||
|  |   extension: string, | ||||||
|   version: string, |   version: string, | ||||||
|   prefix: string, |   prefix: string, | ||||||
|   version_prefix: string, |   version_prefix: string, | ||||||
| @ -123,84 +90,48 @@ export async function getUri( | |||||||
| ): Promise<string> { | ): Promise<string> { | ||||||
|   switch (version) { |   switch (version) { | ||||||
|     case 'latest': |     case 'latest': | ||||||
|       return [prefix, version, verb, tool + '.phar'].filter(Boolean).join('/'); |       return [prefix, version, verb, tool + extension] | ||||||
|     default: |  | ||||||
|       return [prefix, verb, version_prefix + version, tool + '.phar'] |  | ||||||
|         .filter(Boolean) |         .filter(Boolean) | ||||||
|         .join('/'); |         .join('/'); | ||||||
|   } |     default: | ||||||
| } |       return [prefix, verb, version_prefix + version, tool + extension] | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Helper function to get the codeception url |  | ||||||
|  * |  | ||||||
|  * @param version |  | ||||||
|  * @param php_version |  | ||||||
|  * @param suffix |  | ||||||
|  */ |  | ||||||
| export async function getCodeceptionUriBuilder( |  | ||||||
|   version: string, |  | ||||||
|   php_version: string, |  | ||||||
|   suffix: string |  | ||||||
| ): Promise<string> { |  | ||||||
|   switch (true) { |  | ||||||
|     case /^5\.6$|^7\.[0|1]$/.test(php_version): |  | ||||||
|       return ['releases', version, suffix, 'codecept.phar'] |  | ||||||
|         .filter(Boolean) |         .filter(Boolean) | ||||||
|         .join('/'); |         .join('/'); | ||||||
|     case /^7\.[2-4]$/.test(php_version): |  | ||||||
|     default: |  | ||||||
|       return ['releases', version, 'codecept.phar'].filter(Boolean).join('/'); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Function to get the codeception url |  | ||||||
|  * |  | ||||||
|  * @param version |  | ||||||
|  * @param php_version |  | ||||||
|  */ |  | ||||||
| export async function getCodeceptionUri( |  | ||||||
|   version: string, |  | ||||||
|   php_version: string |  | ||||||
| ): Promise<string> { |  | ||||||
|   switch (true) { |  | ||||||
|     case /latest/.test(version): |  | ||||||
|       switch (true) { |  | ||||||
|         case /^5\.6$|^7\.[0|1]$/.test(php_version): |  | ||||||
|           return 'php56/codecept.phar'; |  | ||||||
|         case /^7\.[2-4]$/.test(php_version): |  | ||||||
|         default: |  | ||||||
|           return 'codecept.phar'; |  | ||||||
|       } |  | ||||||
|     case /([4-9]|\d{2,})\..*/.test(version): |  | ||||||
|       return await getCodeceptionUriBuilder(version, php_version, 'php56'); |  | ||||||
|     default: |  | ||||||
|       return await getCodeceptionUriBuilder(version, php_version, 'php54'); |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Helper function to get script to setup phive |  * Helper function to get script to setup phive | ||||||
|  * |  * | ||||||
|  * @param tool |  | ||||||
|  * @param version |  * @param version | ||||||
|  * @param url |  * @param php_version | ||||||
|  * @param os_version |  * @param os_version | ||||||
|  */ |  */ | ||||||
| export async function addPhive( | export async function addPhive( | ||||||
|   version: string, |   version: string, | ||||||
|  |   php_version: string, | ||||||
|   os_version: string |   os_version: string | ||||||
| ): Promise<string> { | ): Promise<string> { | ||||||
|  |   switch (true) { | ||||||
|  |     case /5\.6|7\.0/.test(php_version): | ||||||
|  |       version = version.replace('latest', '0.12.1'); | ||||||
|  |       break; | ||||||
|  |     case /7\.1/.test(php_version): | ||||||
|  |       version = version.replace('latest', '0.13.5'); | ||||||
|  |       break; | ||||||
|  |     case /7\.2/.test(php_version): | ||||||
|  |       version = version.replace('latest', '0.14.5'); | ||||||
|  |       break; | ||||||
|  |   } | ||||||
|   switch (version) { |   switch (version) { | ||||||
|     case 'latest': |     case 'latest': | ||||||
|       return ( |       return ( | ||||||
|         (await getArchiveCommand(os_version)) + |         (await getCommand(os_version, 'tool')) + | ||||||
|         'https://phar.io/releases/phive.phar phive' |         'https://phar.io/releases/phive.phar phive' | ||||||
|       ); |       ); | ||||||
|     default: |     default: | ||||||
|       return ( |       return ( | ||||||
|         (await getArchiveCommand(os_version)) + |         (await getCommand(os_version, 'tool')) + | ||||||
|         'https://github.com/phar-io/phive/releases/download/' + |         'https://github.com/phar-io/phive/releases/download/' + | ||||||
|         version + |         version + | ||||||
|         '/phive-' + |         '/phive-' + | ||||||
| @ -211,20 +142,24 @@ export async function addPhive( | |||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Function to get the PHPUnit url |  * Function to get the phar url in domain/tool-version.phar format | ||||||
|  * |  * | ||||||
|  |  * @param domain | ||||||
|  |  * @param tool | ||||||
|  |  * @param prefix | ||||||
|  * @param version |  * @param version | ||||||
|  */ |  */ | ||||||
| export async function getPhpunitUrl( | export async function getPharUrl( | ||||||
|  |   domain: string, | ||||||
|   tool: string, |   tool: string, | ||||||
|  |   prefix: string, | ||||||
|   version: string |   version: string | ||||||
| ): Promise<string> { | ): Promise<string> { | ||||||
|   const phpunit = 'https://phar.phpunit.de'; |  | ||||||
|   switch (version) { |   switch (version) { | ||||||
|     case 'latest': |     case 'latest': | ||||||
|       return phpunit + '/' + tool + '.phar'; |       return domain + '/' + tool + '.phar'; | ||||||
|     default: |     default: | ||||||
|       return phpunit + '/' + tool + '-' + version + '.phar'; |       return domain + '/' + tool + '-' + prefix + version + '.phar'; | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -280,22 +215,57 @@ export async function getSymfonyUri( | |||||||
| /** | /** | ||||||
|  * Function to add/move composer in the tools list |  * Function to add/move composer in the tools list | ||||||
|  * |  * | ||||||
|  * @param tools |  * @param tools_list | ||||||
|  */ |  */ | ||||||
| export async function addComposer(tools_list: string[]): Promise<string[]> { | export async function addComposer(tools_list: string[]): Promise<string[]> { | ||||||
|   const regex = /^composer($|:.*)/; |   const regex_any = /^composer($|:.*)/; | ||||||
|   const composer: string = tools_list.filter(tool => regex.test(tool))[0]; |   const regex_valid = | ||||||
|   switch (composer) { |     /^composer:?($|preview$|snapshot$|v?[1-2]$|v?\d+\.\d+\.\d+[\w-]*$)/; | ||||||
|     case undefined: |   const regex_composer1_tools = | ||||||
|  |     /hirak|prestissimo|narrowspark|composer-prefetcher/; | ||||||
|  |   const matches: string[] = tools_list.filter(tool => regex_valid.test(tool)); | ||||||
|  |   let composer = 'composer'; | ||||||
|  |   tools_list = tools_list.filter(tool => !regex_any.test(tool)); | ||||||
|  |   switch (true) { | ||||||
|  |     case regex_composer1_tools.test(tools_list.join(' ')): | ||||||
|  |       composer = 'composer:1'; | ||||||
|  |       break; | ||||||
|  |     case matches[0] == undefined: | ||||||
|       break; |       break; | ||||||
|     default: |     default: | ||||||
|       tools_list = tools_list.filter(tool => !regex.test(tool)); |       composer = matches[matches.length - 1].replace(/v(\d\S*)/, '$1'); | ||||||
|       break; |       break; | ||||||
|   } |   } | ||||||
|   tools_list.unshift('composer'); |   tools_list.unshift(composer); | ||||||
|   return tools_list; |   return tools_list; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Function to get composer URL for a given version | ||||||
|  |  * | ||||||
|  |  * @param version | ||||||
|  |  */ | ||||||
|  | export async function getComposerUrl( | ||||||
|  |   version: string, | ||||||
|  |   php_version: string | ||||||
|  | ): Promise<string> { | ||||||
|  |   let cache_url = `https://github.com/shivammathur/composer-cache/releases/latest/download/composer-${php_version}-${version.replace( | ||||||
|  |     'latest', | ||||||
|  |     'stable' | ||||||
|  |   )}.phar`; | ||||||
|  |   switch (true) { | ||||||
|  |     case /^snapshot$/.test(version): | ||||||
|  |       return `${cache_url},https://getcomposer.org/composer.phar`; | ||||||
|  |     case /^preview$|^[1-2]$/.test(version): | ||||||
|  |       return `${cache_url},https://getcomposer.org/composer-${version}.phar`; | ||||||
|  |     case /^\d+\.\d+\.\d+[\w-]*$/.test(version): | ||||||
|  |       cache_url = `https://github.com/composer/composer/releases/download/${version}/composer.phar`; | ||||||
|  |       return `${cache_url},https://getcomposer.org/composer-${version}.phar`; | ||||||
|  |     default: | ||||||
|  |       return `${cache_url},https://getcomposer.org/composer-stable.phar`; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Function to get Tools list after cleanup |  * Function to get Tools list after cleanup | ||||||
|  * |  * | ||||||
| @ -307,10 +277,13 @@ export async function getCleanedToolsList( | |||||||
|   let tools_list: string[] = await utils.CSVArray(tools_csv); |   let tools_list: string[] = await utils.CSVArray(tools_csv); | ||||||
|   tools_list = await addComposer(tools_list); |   tools_list = await addComposer(tools_list); | ||||||
|   tools_list = tools_list |   tools_list = tools_list | ||||||
|     .map(function(extension: string) { |     .map(function (extension: string) { | ||||||
|       return extension |       return extension | ||||||
|         .trim() |         .trim() | ||||||
|         .replace(/robmorgan\/|hirak\/|narrowspark\/automatic-/, ''); |         .replace( | ||||||
|  |           /codeception\/|hirak\/|robmorgan\/|narrowspark\/automatic-/, | ||||||
|  |           '' | ||||||
|  |         ); | ||||||
|     }) |     }) | ||||||
|     .filter(Boolean); |     .filter(Boolean); | ||||||
|   return [...new Set(tools_list)]; |   return [...new Set(tools_list)]; | ||||||
| @ -320,17 +293,15 @@ export async function getCleanedToolsList( | |||||||
|  * Helper function to get script to setup a tool using a phar url |  * Helper function to get script to setup a tool using a phar url | ||||||
|  * |  * | ||||||
|  * @param tool |  * @param tool | ||||||
|  * @param version |  | ||||||
|  * @param url |  * @param url | ||||||
|  * @param os_version |  * @param os_version | ||||||
|  */ |  */ | ||||||
| export async function addArchive( | export async function addArchive( | ||||||
|   tool: string, |   tool: string, | ||||||
|   version: string, |  | ||||||
|   url: string, |   url: string, | ||||||
|   os_version: string |   os_version: string | ||||||
| ): Promise<string> { | ): Promise<string> { | ||||||
|   return (await getArchiveCommand(os_version)) + url + ' ' + tool; |   return (await getCommand(os_version, 'tool')) + url + ' ' + tool; | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @ -382,14 +353,15 @@ export async function addPackage( | |||||||
|   prefix: string, |   prefix: string, | ||||||
|   os_version: string |   os_version: string | ||||||
| ): Promise<string> { | ): Promise<string> { | ||||||
|   const tool_command = await getPackageCommand(os_version); |   const tool_command = await getCommand(os_version, 'composertool'); | ||||||
|   return tool_command + tool + ' ' + release + ' ' + prefix; |   return tool_command + tool + ' ' + release + ' ' + prefix; | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Setup tools |  * Setup tools | ||||||
|  * |  * | ||||||
|  * @param tool_csv |  * @param tools_csv | ||||||
|  |  * @param php_version | ||||||
|  * @param os_version |  * @param os_version | ||||||
|  */ |  */ | ||||||
| export async function addTools( | export async function addTools( | ||||||
| @ -399,59 +371,67 @@ export async function addTools( | |||||||
| ): Promise<string> { | ): Promise<string> { | ||||||
|   let script = '\n' + (await utils.stepLog('Setup Tools', os_version)); |   let script = '\n' + (await utils.stepLog('Setup Tools', os_version)); | ||||||
|   const tools_list: Array<string> = await getCleanedToolsList(tools_csv); |   const tools_list: Array<string> = await getCleanedToolsList(tools_csv); | ||||||
|   await utils.asyncForEach(tools_list, async function(release: string) { |   await utils.asyncForEach(tools_list, async function (release: string) { | ||||||
|     const tool_data: {name: string; version: string} = await parseTool(release); |     const tool_data: {name: string; version: string} = await parseTool(release); | ||||||
|     const tool: string = tool_data.name; |     const tool: string = tool_data.name; | ||||||
|     const version: string = tool_data.version; |     const version: string = tool_data.version; | ||||||
|     const github = 'https://github.com/'; |     const github = 'https://github.com/'; | ||||||
|     let uri: string = await getUri(tool, version, 'releases', '', 'download'); |     let uri: string = await getUri( | ||||||
|  |       tool, | ||||||
|  |       '.phar', | ||||||
|  |       version, | ||||||
|  |       'releases', | ||||||
|  |       '', | ||||||
|  |       'download' | ||||||
|  |     ); | ||||||
|     script += '\n'; |     script += '\n'; | ||||||
|     let url = ''; |     let url = ''; | ||||||
|     switch (tool) { |     switch (tool) { | ||||||
|  |       case 'cs2pr': | ||||||
|  |         uri = await getUri(tool, '', version, 'releases', '', 'download'); | ||||||
|  |         url = github + 'staabm/annotate-pull-request-from-checkstyle/' + uri; | ||||||
|  |         script += await addArchive(tool, url, os_version); | ||||||
|  |         break; | ||||||
|       case 'php-cs-fixer': |       case 'php-cs-fixer': | ||||||
|         uri = await getUri(tool, version, 'releases', 'v', 'download'); |         uri = await getUri(tool, '.phar', version, 'releases', 'v', 'download'); | ||||||
|         url = github + 'FriendsOfPHP/PHP-CS-Fixer/' + uri; |         url = github + 'FriendsOfPHP/PHP-CS-Fixer/' + uri; | ||||||
|         script += await addArchive(tool, version, url, os_version); |         script += await addArchive(tool, url, os_version); | ||||||
|         break; |         break; | ||||||
|       case 'phpcs': |       case 'phpcs': | ||||||
|       case 'phpcbf': |       case 'phpcbf': | ||||||
|         url = github + 'squizlabs/PHP_CodeSniffer/' + uri; |         url = github + 'squizlabs/PHP_CodeSniffer/' + uri; | ||||||
|         script += await addArchive(tool, version, url, os_version); |         script += await addArchive(tool, url, os_version); | ||||||
|         break; |         break; | ||||||
|       case 'phive': |       case 'phive': | ||||||
|         script += await addPhive(version, os_version); |         script += await addPhive(version, php_version, os_version); | ||||||
|         break; |         break; | ||||||
|       case 'phpstan': |       case 'phpstan': | ||||||
|         url = github + 'phpstan/phpstan/' + uri; |         url = github + 'phpstan/phpstan/' + uri; | ||||||
|         script += await addArchive(tool, version, url, os_version); |         script += await addArchive(tool, url, os_version); | ||||||
|         break; |         break; | ||||||
|       case 'phpmd': |       case 'phpmd': | ||||||
|         url = github + 'phpmd/phpmd/' + uri; |         url = github + 'phpmd/phpmd/' + uri; | ||||||
|         script += await addArchive(tool, version, url, os_version); |         script += await addArchive(tool, url, os_version); | ||||||
|         break; |         break; | ||||||
|       case 'psalm': |       case 'psalm': | ||||||
|         url = github + 'vimeo/psalm/' + uri; |         url = github + 'vimeo/psalm/' + uri; | ||||||
|         script += await addArchive(tool, version, url, os_version); |         script += await addArchive(tool, url, os_version); | ||||||
|         break; |         break; | ||||||
|       case 'composer': |       case 'composer': | ||||||
|         url = |         url = await getComposerUrl(version, php_version); | ||||||
|           github + 'composer/composer/releases/latest/download/composer.phar'; |         script += await addArchive('composer', url, os_version); | ||||||
|         script += await addArchive(tool, version, url, os_version); |  | ||||||
|         break; |         break; | ||||||
|       case 'codeception': |       case 'codeception': | ||||||
|         url = |         script += await addPackage(tool, release, 'codeception/', os_version); | ||||||
|           'https://codeception.com/' + |  | ||||||
|           (await getCodeceptionUri(version, php_version)); |  | ||||||
|         script += await addArchive(tool, version, url, os_version); |  | ||||||
|         break; |         break; | ||||||
|       case 'phpcpd': |       case 'phpcpd': | ||||||
|       case 'phpunit': |       case 'phpunit': | ||||||
|         url = await getPhpunitUrl(tool, version); |         url = await getPharUrl('https://phar.phpunit.de', tool, '', version); | ||||||
|         script += await addArchive(tool, version, url, os_version); |         script += await addArchive(tool, url, os_version); | ||||||
|         break; |         break; | ||||||
|       case 'deployer': |       case 'deployer': | ||||||
|         url = await getDeployerUrl(version); |         url = await getDeployerUrl(version); | ||||||
|         script += await addArchive(tool, version, url, os_version); |         script += await addArchive(tool, url, os_version); | ||||||
|         break; |         break; | ||||||
|       case 'phinx': |       case 'phinx': | ||||||
|         script += await addPackage(tool, release, 'robmorgan/', os_version); |         script += await addPackage(tool, release, 'robmorgan/', os_version); | ||||||
| @ -468,7 +448,7 @@ export async function addTools( | |||||||
|         ); |         ); | ||||||
|         break; |         break; | ||||||
|       case 'pecl': |       case 'pecl': | ||||||
|         script += await getPECLCommand(os_version); |         script += await getCommand(os_version, 'pecl'); | ||||||
|         break; |         break; | ||||||
|       case 'php-config': |       case 'php-config': | ||||||
|       case 'phpize': |       case 'phpize': | ||||||
| @ -478,7 +458,7 @@ export async function addTools( | |||||||
|       case 'symfony-cli': |       case 'symfony-cli': | ||||||
|         uri = await getSymfonyUri(version, os_version); |         uri = await getSymfonyUri(version, os_version); | ||||||
|         url = github + 'symfony/cli/' + uri; |         url = github + 'symfony/cli/' + uri; | ||||||
|         script += await addArchive('symfony', version, url, os_version); |         script += await addArchive('symfony', url, os_version); | ||||||
|         break; |         break; | ||||||
|       default: |       default: | ||||||
|         script += await utils.addLog( |         script += await utils.addLog( | ||||||
|  | |||||||
							
								
								
									
										110
									
								
								src/utils.ts
									
									
									
									
									
								
							
							
						
						
									
										110
									
								
								src/utils.ts
									
									
									
									
									
								
							| @ -1,7 +1,27 @@ | |||||||
|  | import {IncomingMessage} from 'http'; | ||||||
| import * as fs from 'fs'; | import * as fs from 'fs'; | ||||||
|  | import * as https from 'https'; | ||||||
| import * as path from 'path'; | import * as path from 'path'; | ||||||
| import * as core from '@actions/core'; | import * as core from '@actions/core'; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Function to read environment variable and return a string value. | ||||||
|  |  * | ||||||
|  |  * @param property | ||||||
|  |  */ | ||||||
|  | export async function readEnv(property: string): Promise<string> { | ||||||
|  |   const property_lc: string = property.toLowerCase(); | ||||||
|  |   const property_uc: string = property.toUpperCase(); | ||||||
|  |   return ( | ||||||
|  |     process.env[property] || | ||||||
|  |     process.env[property_lc] || | ||||||
|  |     process.env[property_uc] || | ||||||
|  |     process.env[property_lc.replace('_', '-')] || | ||||||
|  |     process.env[property_uc.replace('_', '-')] || | ||||||
|  |     '' | ||||||
|  |   ); | ||||||
|  | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Function to get inputs from both with and env annotations. |  * Function to get inputs from both with and env annotations. | ||||||
|  * |  * | ||||||
| @ -12,13 +32,56 @@ export async function getInput( | |||||||
|   name: string, |   name: string, | ||||||
|   mandatory: boolean |   mandatory: boolean | ||||||
| ): Promise<string> { | ): Promise<string> { | ||||||
|   const input = process.env[name]; |   const input = core.getInput(name); | ||||||
|   switch (input) { |   const env_input = await readEnv(name); | ||||||
|     case '': |   switch (true) { | ||||||
|     case undefined: |     case input != '': | ||||||
|       return core.getInput(name, {required: mandatory}); |  | ||||||
|     default: |  | ||||||
|       return input; |       return input; | ||||||
|  |     case input == '' && env_input != '': | ||||||
|  |       return env_input; | ||||||
|  |     case input == '' && env_input == '' && mandatory: | ||||||
|  |       throw new Error(`Input required and not supplied: ${name}`); | ||||||
|  |     default: | ||||||
|  |       return ''; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Function to fetch an URL | ||||||
|  |  * | ||||||
|  |  * @param url | ||||||
|  |  */ | ||||||
|  | export async function fetch(url: string): Promise<string> { | ||||||
|  |   const fetch_promise: Promise<string> = new Promise(resolve => { | ||||||
|  |     const req = https.get(url, (res: IncomingMessage) => { | ||||||
|  |       res.setEncoding('utf8'); | ||||||
|  |       let body = ''; | ||||||
|  |       res.on('data', chunk => (body += chunk)); | ||||||
|  |       res.on('end', () => resolve(body)); | ||||||
|  |     }); | ||||||
|  |     req.end(); | ||||||
|  |   }); | ||||||
|  |   return await fetch_promise; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Function to parse PHP version. | ||||||
|  |  * | ||||||
|  |  * @param version | ||||||
|  |  */ | ||||||
|  | export async function parseVersion(version: string): Promise<string> { | ||||||
|  |   const manifest = | ||||||
|  |     'https://raw.githubusercontent.com/shivammathur/setup-php/releases/v1/src/configs/php-versions.json'; | ||||||
|  |   switch (true) { | ||||||
|  |     case /^(latest|\d+\.x)$/.test(version): | ||||||
|  |       return JSON.parse(await fetch(manifest))[version]; | ||||||
|  |     default: | ||||||
|  |       switch (true) { | ||||||
|  |         case version.length > 1: | ||||||
|  |           return version.slice(0, 3); | ||||||
|  |         default: | ||||||
|  |           return version + '.0'; | ||||||
|  |       } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -65,7 +128,6 @@ export async function color(type: string): Promise<string> { | |||||||
|  * @param message |  * @param message | ||||||
|  * @param os_version |  * @param os_version | ||||||
|  * @param log_type |  * @param log_type | ||||||
|  * @param prefix |  | ||||||
|  */ |  */ | ||||||
| export async function log( | export async function log( | ||||||
|   message: string, |   message: string, | ||||||
| @ -121,6 +183,7 @@ export async function stepLog( | |||||||
|  * @param mark |  * @param mark | ||||||
|  * @param subject |  * @param subject | ||||||
|  * @param message |  * @param message | ||||||
|  |  * @param os_version | ||||||
|  */ |  */ | ||||||
| export async function addLog( | export async function addLog( | ||||||
|   mark: string, |   mark: string, | ||||||
| @ -147,14 +210,8 @@ export async function addLog( | |||||||
|  * Read the scripts |  * Read the scripts | ||||||
|  * |  * | ||||||
|  * @param filename |  * @param filename | ||||||
|  * @param version |  | ||||||
|  * @param os_version |  | ||||||
|  */ |  */ | ||||||
| export async function readScript( | export async function readScript(filename: string): Promise<string> { | ||||||
|   filename: string, |  | ||||||
|   version: string, |  | ||||||
|   os_version: string |  | ||||||
| ): Promise<string> { |  | ||||||
|   return fs.readFileSync( |   return fs.readFileSync( | ||||||
|     path.join(__dirname, '../src/scripts/' + filename), |     path.join(__dirname, '../src/scripts/' + filename), | ||||||
|     'utf8' |     'utf8' | ||||||
| @ -165,7 +222,6 @@ export async function readScript( | |||||||
|  * Write final script which runs |  * Write final script which runs | ||||||
|  * |  * | ||||||
|  * @param filename |  * @param filename | ||||||
|  * @param version |  | ||||||
|  * @param script |  * @param script | ||||||
|  */ |  */ | ||||||
| export async function writeScript( | export async function writeScript( | ||||||
| @ -193,11 +249,11 @@ export async function extensionArray( | |||||||
|     default: |     default: | ||||||
|       return extension_csv |       return extension_csv | ||||||
|         .split(',') |         .split(',') | ||||||
|         .map(function(extension: string) { |         .map(function (extension: string) { | ||||||
|           return extension |           return extension | ||||||
|             .trim() |             .trim() | ||||||
|             .replace('php-', '') |             .toLowerCase() | ||||||
|             .replace('php_', ''); |             .replace(/^php[-_]/, ''); | ||||||
|         }) |         }) | ||||||
|         .filter(Boolean); |         .filter(Boolean); | ||||||
|   } |   } | ||||||
| @ -216,9 +272,12 @@ export async function CSVArray(values_csv: string): Promise<Array<string>> { | |||||||
|       return []; |       return []; | ||||||
|     default: |     default: | ||||||
|       return values_csv |       return values_csv | ||||||
|         .split(',') |         .split(/,(?=(?:(?:[^"']*["']){2})*[^"']*$)/) | ||||||
|         .map(function(value: string) { |         .map(function (value) { | ||||||
|           return value.trim(); |           return value | ||||||
|  |             .trim() | ||||||
|  |             .replace(/^["']|["']$|(?<==)["']/g, '') | ||||||
|  |             .replace(/=(((?!E_).)*[?{}|&~![()^]+((?!E_).)+)/, "='$1'"); | ||||||
|         }) |         }) | ||||||
|         .filter(Boolean); |         .filter(Boolean); | ||||||
|   } |   } | ||||||
| @ -230,14 +289,11 @@ export async function CSVArray(values_csv: string): Promise<Array<string>> { | |||||||
|  * @param extension |  * @param extension | ||||||
|  */ |  */ | ||||||
| export async function getExtensionPrefix(extension: string): Promise<string> { | export async function getExtensionPrefix(extension: string): Promise<string> { | ||||||
|   const zend: Array<string> = ['xdebug', 'opcache', 'ioncube', 'eaccelerator']; |   switch (true) { | ||||||
|   switch (zend.indexOf(extension)) { |  | ||||||
|     case 0: |  | ||||||
|     case 1: |  | ||||||
|       return 'zend_extension'; |  | ||||||
|     case -1: |  | ||||||
|     default: |     default: | ||||||
|       return 'extension'; |       return 'extension'; | ||||||
|  |     case /xdebug([2-3])?$|opcache|ioncube|eaccelerator/.test(extension): | ||||||
|  |       return 'zend_extension'; | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,63 +1,19 @@ | |||||||
| { | { | ||||||
|   "compilerOptions": { |   "compilerOptions": { | ||||||
|     /* Basic Options */ |     "declaration": true, | ||||||
|     // "incremental": true,                   /* Enable incremental compilation */ |     "esModuleInterop": true, | ||||||
|     "target": "es6",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ |     "lib": [ | ||||||
|     "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ |       "ES2020" | ||||||
|     // "allowJs": true,                       /* Allow javascript files to be compiled. */ |     ], | ||||||
|     // "checkJs": true,                       /* Report errors in .js files. */ |     "module": "commonjs", | ||||||
|     // "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ |     "moduleResolution": "node", | ||||||
|     // "declaration": true,                   /* Generates corresponding '.d.ts' file. */ |     "noImplicitAny": true, | ||||||
|     // "declarationMap": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */ |     "outDir": "./lib", | ||||||
|     // "sourceMap": true,                     /* Generates corresponding '.map' file. */ |     "removeComments": true, | ||||||
|     // "outFile": "./",                       /* Concatenate and emit output to single file. */ |     "rootDir": "./src", | ||||||
|     "outDir": "./lib",                        /* Redirect output structure to the directory. */ |     "sourceMap": true, | ||||||
|     "rootDir": "./src",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ |     "strict": true, | ||||||
|     // "composite": true,                     /* Enable project compilation */ |     "target": "ES2019" | ||||||
|     // "tsBuildInfoFile": "./",               /* Specify file to store incremental compilation information */ |  | ||||||
|     // "removeComments": true,                /* Do not emit comments to output. */ |  | ||||||
|     // "noEmit": true,                        /* Do not emit outputs. */ |  | ||||||
|     // "importHelpers": true,                 /* Import emit helpers from 'tslib'. */ |  | ||||||
|     // "downlevelIteration": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ |  | ||||||
|     // "isolatedModules": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ |  | ||||||
|  |  | ||||||
|     /* Strict Type-Checking Options */ |  | ||||||
|     "strict": true,                           /* Enable all strict type-checking options. */ |  | ||||||
|     // "noImplicitAny": true,                 /* Raise error on expressions and declarations with an implied 'any' type. */ |  | ||||||
|     // "strictNullChecks": true,              /* Enable strict null checks. */ |  | ||||||
|     // "strictFunctionTypes": true,           /* Enable strict checking of function types. */ |  | ||||||
|     // "strictBindCallApply": true,           /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ |  | ||||||
|     // "strictPropertyInitialization": true,  /* Enable strict checking of property initialization in classes. */ |  | ||||||
|     // "noImplicitThis": true,                /* Raise error on 'this' expressions with an implied 'any' type. */ |  | ||||||
|     // "alwaysStrict": true,                  /* Parse in strict mode and emit "use strict" for each source file. */ |  | ||||||
|  |  | ||||||
|     /* Additional Checks */ |  | ||||||
|     // "noUnusedLocals": true,                /* Report errors on unused locals. */ |  | ||||||
|     // "noUnusedParameters": true,            /* Report errors on unused parameters. */ |  | ||||||
|     // "noImplicitReturns": true,             /* Report error when not all code paths in function return a value. */ |  | ||||||
|     // "noFallthroughCasesInSwitch": true,    /* Report errors for fallthrough cases in switch statement. */ |  | ||||||
|  |  | ||||||
|     /* Module Resolution Options */ |  | ||||||
|     // "moduleResolution": "node",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ |  | ||||||
|     // "baseUrl": "./",                       /* Base directory to resolve non-absolute module names. */ |  | ||||||
|     // "paths": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ |  | ||||||
|     // "rootDirs": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */ |  | ||||||
|     // "typeRoots": [],                       /* List of folders to include type definitions from. */ |  | ||||||
|     // "types": [],                           /* Type declaration files to be included in compilation. */ |  | ||||||
|     // "allowSyntheticDefaultImports": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ |  | ||||||
|     "esModuleInterop": true                   /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ |  | ||||||
|     // "preserveSymlinks": true,              /* Do not resolve the real path of symlinks. */ |  | ||||||
|     // "allowUmdGlobalAccess": true,          /* Allow accessing UMD globals from modules. */ |  | ||||||
|  |  | ||||||
|     /* Source Map Options */ |  | ||||||
|     // "sourceRoot": "",                      /* Specify the location where debugger should locate TypeScript files instead of source locations. */ |  | ||||||
|     // "mapRoot": "",                         /* Specify the location where debugger should locate map files instead of generated locations. */ |  | ||||||
|     // "inlineSourceMap": true,               /* Emit a single file with source maps instead of having a separate file. */ |  | ||||||
|     // "inlineSources": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ |  | ||||||
|  |  | ||||||
|     /* Experimental Options */ |  | ||||||
|     // "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */ |  | ||||||
|     // "emitDecoratorMetadata": true,         /* Enables experimental support for emitting type metadata for decorators. */ |  | ||||||
|   }, |   }, | ||||||
|   "exclude": ["node_modules", "**/*.test.ts"] |   "exclude": ["__tests__", "lib", "node_modules"] | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user
	