mirror of
https://github.com/shivammathur/setup-php.git
synced 2025-07-05 14:43:17 +07:00
Compare commits
75 Commits
Author | SHA1 | Date | |
---|---|---|---|
7961bc11b1 | |||
87f807365d | |||
25d9bbc737 | |||
d2f865c91a | |||
a13373a271 | |||
a764546381 | |||
380b68048b | |||
4dcf9cd2ab | |||
f3641e0c33 | |||
d35633ec7a | |||
7eea3d82f6 | |||
57ecdba082 | |||
db03758c66 | |||
82837572d4 | |||
8efcf46b31 | |||
4391cf8a4c | |||
87a69f94d9 | |||
c12fad850b | |||
47b8d68850 | |||
530929f741 | |||
a965723128 | |||
9845a63f5c | |||
4af7e96d03 | |||
13a3d9d0a9 | |||
9d042b2683 | |||
7a59874419 | |||
8dee767b82 | |||
5fc5a95363 | |||
8ba779d78e | |||
04376074d2 | |||
262202d43f | |||
f64dddeeb4 | |||
1d50c4a8cd | |||
d313593fee | |||
5753a00ef5 | |||
38731c6386 | |||
9f400a0dfd | |||
ba020e3463 | |||
c0d425d939 | |||
4752a51595 | |||
10608f5908 | |||
d01ec214f2 | |||
6158538131 | |||
dd27d4eb81 | |||
248d04f73c | |||
c5e40d9067 | |||
e0ed1ad0ef | |||
2907f8a584 | |||
52691651dc | |||
b9404683e1 | |||
70954fb6f8 | |||
65e65163cd | |||
41397ce45e | |||
c09954033f | |||
7cec1987ac | |||
739e40fb5e | |||
9dec5892e7 | |||
94616818f0 | |||
4f0d9003dc | |||
b2edfc47dd | |||
6bd872ad2c | |||
03eb8cc744 | |||
9687dd1d8a | |||
2df0d2b443 | |||
0e56c0b653 | |||
0469a6f681 | |||
325413a824 | |||
b84dd3ce25 | |||
190220c10d | |||
4fb049a68b | |||
3e0678b50f | |||
5b06192e7c | |||
b419442896 | |||
49b8b7e301 | |||
b1776b79c8 |
@ -1,7 +1,7 @@
|
||||
{
|
||||
"env": { "node": true, "jest": true },
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"parserOptions": { "ecmaVersion": 2020, "sourceType": "module" },
|
||||
"parserOptions": { "ecmaVersion": 2019, "sourceType": "module" },
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
"plugin:@typescript-eslint/eslint-recommended",
|
||||
@ -12,11 +12,5 @@
|
||||
"plugin:prettier/recommended",
|
||||
"prettier/@typescript-eslint"
|
||||
],
|
||||
"plugins": ["@typescript-eslint", "jest"],
|
||||
"rules": {
|
||||
"camelcase": "off",
|
||||
"require-atomic-updates": "off",
|
||||
"@typescript-eslint/ban-ts-ignore": "off",
|
||||
"@typescript-eslint/camelcase": "off"
|
||||
}
|
||||
"plugins": ["@typescript-eslint", "jest"]
|
||||
}
|
2
.github/FUNDING.yml
vendored
2
.github/FUNDING.yml
vendored
@ -2,7 +2,5 @@
|
||||
|
||||
tidelift: "npm/setup-php"
|
||||
community_bridge: setup-php
|
||||
issuehunt: shivammathur
|
||||
patreon: shivammathur
|
||||
liberapay: shivammathur
|
||||
custom: https://www.paypal.me/shivammathur
|
||||
|
7
.github/ISSUE_TEMPLATE/bug_report.md
vendored
7
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -2,7 +2,7 @@
|
||||
name: Bug report
|
||||
about: Nice, you found a bug!
|
||||
title: ''
|
||||
labels: t:bug
|
||||
labels: 'bug'
|
||||
assignees: 'shivammathur'
|
||||
|
||||
---
|
||||
@ -10,6 +10,11 @@ assignees: 'shivammathur'
|
||||
**Describe the bug**
|
||||
<!-- Please describe the bug concisely. -->
|
||||
|
||||
**Version**
|
||||
- [ ] I have checked releases and the bug exists in the latest patch version of `v1` or `v2`.
|
||||
- [ ] `v2`
|
||||
- [ ] `v1`
|
||||
|
||||
**Runners**
|
||||
<!-- Please mark the GitHub Action runner your workflow uses. -->
|
||||
- [ ] GitHub Hosted
|
||||
|
5
.github/ISSUE_TEMPLATE/feature_request.md
vendored
5
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@ -2,7 +2,7 @@
|
||||
name: Feature request
|
||||
about: Suggest a new feature
|
||||
title: ''
|
||||
labels: t:enhancement
|
||||
labels: 'enhancement'
|
||||
assignees: 'shivammathur'
|
||||
|
||||
---
|
||||
@ -10,6 +10,9 @@ assignees: 'shivammathur'
|
||||
**Describe the feature**
|
||||
<!-- Please describe concisely the feature you want to add. -->
|
||||
|
||||
**Version**
|
||||
- [ ] I have checked releases and the feature is missing in the latest patch version of `v2`.
|
||||
|
||||
**Underlying issue**
|
||||
<!-- Please describe the issue this would solve. -->
|
||||
|
||||
|
37
.github/PULL_REQUEST_TEMPLATE/FIX.md
vendored
37
.github/PULL_REQUEST_TEMPLATE/FIX.md
vendored
@ -1,37 +0,0 @@
|
||||
---
|
||||
name: 🐞 Bug Fix
|
||||
about: You have a fix for a bug?
|
||||
labels: bug
|
||||
|
||||
---
|
||||
|
||||
## A Pull Request should be associated with an Issue.
|
||||
|
||||
> If you're offering a new feature or fixing anything, please provide the details in Issues,
|
||||
> so that the development can be pointed in the intended direction.
|
||||
|
||||
Related issue: <!-- Please link the related issue -->
|
||||
|
||||
> Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md)
|
||||
> Thank you for your contribution.
|
||||
|
||||
### 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 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 link).
|
||||
|
||||
<!--
|
||||
- Please target the develop branch when submitting the pull request.
|
||||
-->
|
37
.github/PULL_REQUEST_TEMPLATE/IMPROVEMENT.md
vendored
37
.github/PULL_REQUEST_TEMPLATE/IMPROVEMENT.md
vendored
@ -1,37 +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.
|
||||
|
||||
> If you're improving a feature please provide the details in Issues,
|
||||
> so that the development can be pointed in the intended direction.
|
||||
|
||||
Related issue: <!-- Please link the related issue -->
|
||||
|
||||
> Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md)
|
||||
> Thank you for your contribution.
|
||||
|
||||
### 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 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 link).
|
||||
|
||||
<!--
|
||||
- Please target the develop branch when submitting the pull request.
|
||||
-->
|
37
.github/PULL_REQUEST_TEMPLATE/NEW_FEATURE.md
vendored
37
.github/PULL_REQUEST_TEMPLATE/NEW_FEATURE.md
vendored
@ -1,37 +0,0 @@
|
||||
---
|
||||
name: 🎉 New Feature
|
||||
about: You have added a new feature to setup-php?
|
||||
labels: enhancement
|
||||
|
||||
---
|
||||
|
||||
## A Pull Request should be associated with an Issue.
|
||||
|
||||
> If you're adding a new feature please provide the details in Issues,
|
||||
> so that the development can be pointed in the intended direction.
|
||||
|
||||
Related issue: <!-- Please link the related issue -->
|
||||
|
||||
> Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md)
|
||||
> Thank you for your contribution.
|
||||
|
||||
### 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 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 link).
|
||||
|
||||
<!--
|
||||
- Please target the develop branch when submitting the pull request.
|
||||
-->
|
6
.github/SECURITY.md
vendored
6
.github/SECURITY.md
vendored
@ -6,8 +6,8 @@ The following versions of this project are supported for security updates.
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 1.8.x | :white_check_mark: |
|
||||
| 2.2.x | :white_check_mark: |
|
||||
| 1.9.x | :white_check_mark: |
|
||||
| 2.3.x | :white_check_mark: |
|
||||
|
||||
## Supported PHP Versions
|
||||
|
||||
@ -22,7 +22,7 @@ This security policy only applies to the latest patches of the following PHP ver
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
If you have found any issues that might have security implications in the versions supported, please send a report privately to [contact@shivammathur.com](mailto:contact@shivammathur.com)
|
||||
If you have found any issues that might have security implications in the versions supported, please send a report privately to [contact@shivammathur.com](mailto:contact@shivammathur.com).
|
||||
Do not report security reports publicly.
|
||||
|
||||
## Tidelift
|
||||
|
110
.github/workflows/experimental-workflow.yml
vendored
110
.github/workflows/experimental-workflow.yml
vendored
@ -1,110 +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']
|
||||
env:
|
||||
extensions: xml, opcache, pcov
|
||||
key: cache-v2
|
||||
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 cache environment
|
||||
id: cache-env
|
||||
uses: shivammathur/cache-extensions@develop
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: ${{ env.extensions }}
|
||||
key: ${{ env.key }}
|
||||
|
||||
- name: Cache extensions
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ${{ steps.cache-env.outputs.dir }}
|
||||
key: ${{ steps.cache-env.outputs.key }}
|
||||
restore-keys: ${{ steps.cache-env.outputs.key }}
|
||||
|
||||
- name: Setup PHP with extensions and custom config
|
||||
run: node dist/index.js
|
||||
env:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: ${{ env.extensions }}
|
||||
ini-values: post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata
|
||||
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
|
51
.github/workflows/node-workflow.yml
vendored
Normal file
51
.github/workflows/node-workflow.yml
vendored
Normal file
@ -0,0 +1,51 @@
|
||||
name: Node workflow
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
- verbose
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
- 'examples/**'
|
||||
push:
|
||||
branches:
|
||||
- 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]
|
||||
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 }}
|
40
.github/workflows/workflow.yml
vendored
40
.github/workflows/workflow.yml
vendored
@ -1,5 +1,6 @@
|
||||
name: Main workflow
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
@ -23,39 +24,17 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||
php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4']
|
||||
operating-system: [ubuntu-20.04, ubuntu-18.04, ubuntu-16.04, windows-latest, macos-latest]
|
||||
php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0']
|
||||
env:
|
||||
extensions: xml, opcache, xdebug, pcov
|
||||
key: cache-v2
|
||||
key: cache-v3
|
||||
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 cache environment
|
||||
id: cache-env
|
||||
id: extcache
|
||||
uses: shivammathur/cache-extensions@develop
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
@ -63,11 +42,11 @@ jobs:
|
||||
key: ${{ env.key }}
|
||||
|
||||
- name: Cache extensions
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.cache-env.outputs.dir }}
|
||||
key: ${{ steps.cache-env.outputs.key }}
|
||||
restore-keys: ${{ steps.cache-env.outputs.key }}
|
||||
path: ${{ steps.extcache.outputs.dir }}
|
||||
key: ${{ steps.extcache.outputs.key }}
|
||||
restore-keys: ${{ steps.extcache.outputs.key }}
|
||||
|
||||
- name: Setup PHP with extensions and custom config
|
||||
run: node dist/index.js
|
||||
@ -93,6 +72,7 @@ jobs:
|
||||
php -r "if(phpversion()>=7.1 && ! extension_loaded('pcov')) {throw new Exception('PCOV not found');}"
|
||||
- name: Testing ini values
|
||||
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('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');}"
|
168
README.md
168
README.md
@ -19,9 +19,11 @@ Setup PHP with required extensions, php.ini configuration, code-coverage support
|
||||
|
||||
- [PHP Support](#tada-php-support)
|
||||
- [OS/Platform Support](#cloud-osplatform-support)
|
||||
- [GitHub-Hosted Runners](#github-hosted-runners)
|
||||
- [Self-Hosted Runners](#self-hosted-runners)
|
||||
- [PHP Extension Support](#heavy_plus_sign-php-extension-support)
|
||||
- [Tools Support](#wrench-tools-support)
|
||||
- [Coverage support](#signal_strength-coverage-support)
|
||||
- [Coverage Support](#signal_strength-coverage-support)
|
||||
- [Xdebug](#xdebug)
|
||||
- [PCOV](#pcov)
|
||||
- [Disable Coverage](#disable-coverage)
|
||||
@ -29,7 +31,7 @@ Setup PHP with required extensions, php.ini configuration, code-coverage support
|
||||
- [Inputs](#inputs)
|
||||
- [Basic Setup](#basic-setup)
|
||||
- [Matrix Setup](#matrix-setup)
|
||||
- [Experimental Setup](#experimental-setup)
|
||||
- [Nightly Build Setup](#nightly-build-setup)
|
||||
- [Self Hosted Setup](#self-hosted-setup)
|
||||
- [Local Testing Setup](#local-testing-setup)
|
||||
- [Thread Safe Setup](#thread-safe-setup)
|
||||
@ -41,40 +43,56 @@ Setup PHP with required extensions, php.ini configuration, code-coverage support
|
||||
- [Composer GitHub OAuth](#composer-github-oauth)
|
||||
- [Problem Matchers](#problem-matchers)
|
||||
- [Examples](#examples)
|
||||
- [Versioning](#bookmark-versioning)
|
||||
- [License](#scroll-license)
|
||||
- [Contributions](#1-contributions)
|
||||
- [Support This Project](#sparkling_heart-support-this-project)
|
||||
- [Dependencies](#bookmark-dependencies)
|
||||
- [Dependencies](#package-dependencies)
|
||||
- [Further Reading](#bookmark_tabs-further-reading)
|
||||
|
||||
## :tada: PHP Support
|
||||
|
||||
|PHP Version|Stability|Release Support|Runner Support|
|
||||
|--- |--- |--- |--- |
|
||||
|`5.3`|`Stable`|`End of life`|`GitHub`|
|
||||
|`5.4`|`Stable`|`End of life`|`GitHub`|
|
||||
|`5.5`|`Stable`|`End of life`|`GitHub`|
|
||||
|`5.6`|`Stable`|`End of life`|`GitHub`, `self-hosted`|
|
||||
|`7.0`|`Stable`|`End of life`|`GitHub`, `self-hosted`|
|
||||
|`7.1`|`Stable`|`End of life`|`GitHub`, `self-hosted`|
|
||||
|`7.2`|`Stable`|`Security fixes only`|`GitHub`, `self-hosted`|
|
||||
|`7.3`|`Stable`|`Active`|`GitHub`, `self-hosted`|
|
||||
|`7.4`|`Stable`|`Active`|`GitHub`, `self-hosted`|
|
||||
|`8.0`|`Experimental`|`In development`|`GitHub`, `self-hosted`|
|
||||
|`5.3`|`Stable`|`End of life`|`GitHub-hosted`|
|
||||
|`5.4`|`Stable`|`End of life`|`GitHub-hosted`|
|
||||
|`5.5`|`Stable`|`End of life`|`GitHub-hosted`|
|
||||
|`5.6`|`Stable`|`End of life`|`GitHub-hosted`, `self-hosted`|
|
||||
|`7.0`|`Stable`|`End of life`|`GitHub-hosted`, `self-hosted`|
|
||||
|`7.1`|`Stable`|`End of life`|`GitHub-hosted`, `self-hosted`|
|
||||
|`7.2`|`Stable`|`Security fixes only`|`GitHub-hosted`, `self-hosted`|
|
||||
|`7.3`|`Stable`|`Active`|`GitHub-hosted`, `self-hosted`|
|
||||
|`7.4`|`Stable`|`Active`|`GitHub-hosted`, `self-hosted`|
|
||||
|`8.0`|`Nightly`|`In development`|`GitHub-hosted`, `self-hosted`|
|
||||
|
||||
**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.
|
||||
**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 [nightly build setup](#nightly-build-setup) for more information.
|
||||
|
||||
## :cloud: OS/Platform Support
|
||||
|
||||
|Virtual environment|matrix.operating-system|
|
||||
|--- |--- |
|
||||
|Windows Server 2019|`windows-latest` or `windows-2019`|
|
||||
|Ubuntu 18.04|`ubuntu-latest` or `ubuntu-18.04`|
|
||||
|Ubuntu 16.04|`ubuntu-16.04`|
|
||||
|MacOS X Catalina 10.15|`macos-latest` or `macos-10.15`|
|
||||
|Self Hosted|`self-hosted`|
|
||||
Both `GitHub-hosted` runners and `self-hosted` runners are supported on the following operating systems.
|
||||
|
||||
**Note:** Refer to the [self-hosted setup](#self-hosted-setup) to use the action on self-hosted runners.
|
||||
### GitHub-Hosted Runners
|
||||
|
||||
|Virtual environment|YAML workflow label|Pre-installed PHP|
|
||||
|--- |--- |--- |
|
||||
|Ubuntu 16.04|`ubuntu-16.04`|`PHP 5.6` to `PHP 7.4`|
|
||||
|Ubuntu 18.04|`ubuntu-latest` or `ubuntu-18.04`|`PHP 7.1` to `PHP 7.4`|
|
||||
|Ubuntu 20.04|`ubuntu-20.04`|`PHP 7.4`|
|
||||
|Windows Server 2019|`windows-latest` or `windows-2019`|`PHP 7.4`|
|
||||
|macOS Catalina 10.15|`macos-latest` or `macos-10.15`|`PHP 7.4`|
|
||||
|
||||
### Self-Hosted Runners
|
||||
|
||||
|Host OS/Virtual environment|YAML workflow label|
|
||||
|--- |--- |
|
||||
|Ubuntu 16.04|`self-hosted` or `Linux`|
|
||||
|Ubuntu 18.04|`self-hosted` or `Linux`|
|
||||
|Ubuntu 20.04|`self-hosted` or `Linux`|
|
||||
|Windows 7 and newer|`self-hosted` or `Windows`|
|
||||
|Windows Server 2012 R2 and newer|`self-hosted` or `Windows`|
|
||||
|macOS Catalina 10.15|`self-hosted` or `macOS`|
|
||||
|
||||
- Refer to the [self-hosted setup](#self-hosted-setup) to use the action on self-hosted runners.
|
||||
|
||||
## :heavy_plus_sign: PHP Extension Support
|
||||
|
||||
@ -114,7 +132,7 @@ with:
|
||||
extensions: xdebug-beta
|
||||
```
|
||||
|
||||
- Non-default extensions can be removed by prefixing it with a `:`.
|
||||
- Shared extensions can be removed by prefixing them with a `:`.
|
||||
|
||||
```yaml
|
||||
uses: shivammathur/setup-php@v2
|
||||
@ -125,13 +143,13 @@ with:
|
||||
|
||||
- Extensions which cannot be added or removed gracefully leave an error message in the logs, the action is not interrupted.
|
||||
|
||||
- These extensions have custom support - `gearman` on ubuntu, `blackfire`, `phalcon3` and `phalcon4` on all supported OS.
|
||||
- These extensions have custom support - `gearman` on `Ubuntu`, `blackfire`, `ioncube`, `oci8`, `pdo_oci`, `phalcon3` and `phalcon4` on all supported OS.
|
||||
|
||||
## :wrench: Tools Support
|
||||
|
||||
These tools can be setup globally using the `tools` input.
|
||||
|
||||
`blackfire`, `blackfire-player`, `codeception`, `composer`, `composer-prefetcher`, `cs2pr`, `deployer`, `flex`, `infection`, `pecl`, `phinx`, `phive`, `phpcbf`, `phpcpd`, `php-config`, `php-cs-fixer`, `phpcs`, `phpize`, `phpmd`, `phpstan`, `phpunit`, `prestissimo`, `psalm`, `symfony`, `vapor-cli`
|
||||
`blackfire`, `blackfire-player`, `codeception`, `composer`, `composer-normalize`, `composer-prefetcher`, `composer-require-checker`, `composer-unused`, `cs2pr`, `deployer`, `flex`, `infection`, `pecl`, `phan`, `phinx`, `phive`, `phpcbf`, `phpcpd`, `php-config`, `php-cs-fixer`, `phpcs`, `phpize`, `phpmd`, `phpstan`, `phpunit`, `prestissimo`, `psalm`, `symfony`, `vapor-cli`
|
||||
|
||||
```yaml
|
||||
uses: shivammathur/setup-php@v2
|
||||
@ -140,29 +158,35 @@ with:
|
||||
tools: php-cs-fixer, phpunit
|
||||
```
|
||||
|
||||
To setup a particular version of a tool, specify it in this form `tool:version`.
|
||||
Version should be in semver format and a valid release of the tool.
|
||||
To setup a particular version of a tool, specify it in the form `tool:version`.
|
||||
Latest stable version of `composer` is setup by default. You can setup the required version by specifying `v1`, `v2`, `snapshot` or `preview` as version.
|
||||
|
||||
```yaml
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '7.4'
|
||||
tools: php-cs-fixer:2.15.5, phpunit:8.5.1
|
||||
```
|
||||
tools: composer:v2
|
||||
```
|
||||
|
||||
Version for other tools should be in `semver` format and a valid release of the tool.
|
||||
|
||||
```yaml
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '7.4'
|
||||
tools: php-cs-fixer:2.16.2, phpunit:8.5.1
|
||||
```
|
||||
|
||||
**Notes**
|
||||
- `composer` is setup by default.
|
||||
- Specifying version for `composer` and `pecl` has no effect, latest versions of both tools which are compatible with the PHP version will be setup.
|
||||
- Both agent and client will be setup when `blackfire` is specified.
|
||||
- If the version specified for the tool is not in semver format, latest version of the tool will be setup.
|
||||
- Both agent `blackfire-agent` and client `blackfire` are setup when `blackfire` is specified in tools input.
|
||||
- Tools which cannot be setup gracefully leave an error message in the logs, the action is not interrupted.
|
||||
|
||||
## :signal_strength: Coverage support
|
||||
## :signal_strength: Coverage Support
|
||||
|
||||
### 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
|
||||
uses: shivammathur/setup-php@v2
|
||||
@ -174,8 +198,8 @@ with:
|
||||
### PCOV
|
||||
|
||||
Specify `coverage: pcov` to use `PCOV` and disable `Xdebug`.
|
||||
It is much faster than `Xdebug`.
|
||||
`PCOV` needs `PHP >= 7.1`.
|
||||
`PCOV` supports `PHP 7.1` and newer PHP versions.
|
||||
Tests with `PCOV` run much faster than with `Xdebug`.
|
||||
If your source code directory is other than `src`, `lib` or, `app`, specify `pcov.directory` using the `ini-values` input.
|
||||
|
||||
```yaml
|
||||
@ -285,12 +309,12 @@ jobs:
|
||||
tools: php-cs-fixer, phpunit
|
||||
```
|
||||
|
||||
### Experimental Setup
|
||||
### Nightly Build 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`.
|
||||
- This version is currently in development.
|
||||
- `PECL` is installed by default with this version on `ubuntu` and `macOS`.
|
||||
- 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.
|
||||
@ -314,10 +338,9 @@ steps:
|
||||
|
||||
> Setup PHP on a self-hosted runner.
|
||||
|
||||
- `PHP 5.6` and newer versions are supported on self-hosted runners.
|
||||
- `Windows 7` and newer, `Windows Server 2012 R2` and newer, `Ubuntu 18.04`, `Ubuntu 16.04` and `MacOS X Catalina 10.15` are supported.
|
||||
- To setup a dockerized self-hosted runner, refer to this [guide](https://github.com/shivammathur/setup-php/wiki/Dockerized-self-hosted-runner-on-Ubuntu) to setup in an `Ubuntu` container and refer to this [guide](https://github.com/shivammathur/setup-php/wiki/Dockerized-self-hosted-runner-on-Windows) to setup in a `Windows` container.
|
||||
- To setup the runner directly on the host OS or in a VM, follow this [requirements guide](https://github.com/shivammathur/setup-php/wiki/Requirements-for-self-hosted-runners "Requirements guide for self-hosted runner to run setup-php") before setting up the self-hosted runner.
|
||||
- To setup the runner directly on the host OS or in a virtual machine, follow this [requirements guide](https://github.com/shivammathur/setup-php/wiki/Requirements-for-self-hosted-runners "Requirements guide for self-hosted runner to run setup-php") before setting up the self-hosted runner.
|
||||
- If your workflow uses [services](https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idservices "GitHub Actions Services"), then setup the runner on a Linux host or in a Linux virtual machine. GitHub Actions does not support nested virtualization on Linux, so services will not work in a dockerized container.
|
||||
|
||||
Specify the environment variable `runner` with the value `self-hosted`. Without this your workflow will fail.
|
||||
|
||||
@ -366,8 +389,11 @@ Run the workflow locally with `act` using [`shivammathur/node`](https://github.c
|
||||
# For runs-on: ubuntu-latest
|
||||
act -P ubuntu-latest=shivammathur/node:latest
|
||||
|
||||
# For runs-on: ubuntu-20.04
|
||||
act -P ubuntu-20.04=shivammathur/node:focal
|
||||
|
||||
# For runs-on: ubuntu-18.04
|
||||
act -P ubuntu-18.04=shivammathur/node:latest
|
||||
act -P ubuntu-18.04=shivammathur/node:bionic
|
||||
|
||||
# For runs-on: ubuntu-16.04
|
||||
act -P ubuntu-16.04=shivammathur/node:xenial
|
||||
@ -446,7 +472,7 @@ steps:
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Setup cache environment
|
||||
id: cache-env
|
||||
id: extcache
|
||||
uses: shivammathur/cache-extensions@v1
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
@ -454,11 +480,11 @@ steps:
|
||||
key: ${{ env.key }}
|
||||
|
||||
- name: Cache extensions
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.cache-env.outputs.dir }}
|
||||
key: ${{ steps.cache-env.outputs.key }}
|
||||
restore-keys: ${{ steps.cache-env.outputs.key }}
|
||||
path: ${{ steps.extcache.outputs.dir }}
|
||||
key: ${{ steps.extcache.outputs.key }}
|
||||
restore-keys: ${{ steps.extcache.outputs.key }}
|
||||
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
@ -475,13 +501,13 @@ If your project uses composer, you can persist composer's internal cache directo
|
||||
|
||||
```yaml
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
|
||||
- name: Cache dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
|
||||
@ -503,13 +529,13 @@ If your project has node.js dependencies, you can persist npm's or yarn's cache
|
||||
|
||||
```yaml
|
||||
- name: Get node.js cache directory
|
||||
id: node-cache-dir
|
||||
id: nodecache
|
||||
run: echo "::set-output name=dir::$(npm config get cache)" # Use $(yarn cache dir) for yarn
|
||||
|
||||
- name: Cache dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.node-cache-dir.outputs.dir }}
|
||||
path: ${{ steps.nodecache.outputs.dir }}
|
||||
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} # Use '**/yarn.lock' for yarn
|
||||
restore-keys: ${{ runner.os }}-node-
|
||||
```
|
||||
@ -569,7 +595,7 @@ For examples refer to [cs2pr documentation](https://github.com/staabm/annotate-p
|
||||
|
||||
### Examples
|
||||
|
||||
Examples for setting up this GitHub Action with different PHP Frameworks/Packages.
|
||||
Examples of using `setup-php` with various PHP Frameworks and Packages.
|
||||
|
||||
|Framework/Package|Runs on|Workflow|
|
||||
|--- |--- |--- |
|
||||
@ -597,31 +623,43 @@ Examples for setting up this GitHub Action with different PHP Frameworks/Package
|
||||
|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")|
|
||||
|
||||
## :bookmark: Versioning
|
||||
|
||||
- It is highly recommended to use the `v2` tag as `setup-php` version. It is a rolling tag and is synced with latest minor and patch releases. With `v2` you automatically get the bug fixes, new features and support for latest PHP releases. For debugging any issues `verbose` tag can be used temporarily. It outputs all the logs and is also synced with the latest releases.
|
||||
- Semantic release versions can also be used. It is recommended to [use dependabot](https://docs.github.com/en/github/administering-a-repository/keeping-your-actions-up-to-date-with-github-dependabot "Setup Dependabot with GitHub Actions") with semantic versioning to keep the actions in your workflows up to date.
|
||||
- Commit SHA can also be used, but are not recommended. They have to be updated with every release manually, without which you will not get any bug fixes or new features.
|
||||
- Using the `master` branch as version is highly discouraged, it might break your workflow after major releases as they have breaking changes.
|
||||
- If you are using the `v1` tag or a `1.x.y` version, it is recommended that you [switch to v2](https://github.com/shivammathur/setup-php/wiki/Switch-to-v2 "Guide for switching from setup-php v1 to v2") as `v1` only gets critical bug fixes. Maintenance support for `v1` will be dropped with the last `PHP 8.0` release.
|
||||
|
||||
## :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](#bookmark-dependencies "Dependencies for this PHP 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
|
||||
|
||||
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") before you start.
|
||||
- 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.
|
||||
|
||||
- To support this project subscribe on [Patreon](https://www.patreon.com/shivammathur "Shivam Mathur Patreon") or sponsor using [Paypal](https://www.paypal.me/shivammathur "Shivam Mathur PayPal").
|
||||
- Please star the project and share it with the community.
|
||||
- If you blog, write about your experience of using this action.
|
||||
- If you need any help using this, please contact me using [Codementor](https://www.codementor.io/shivammathur "Shivam Mathur Codementor")
|
||||
- Sponsor the project by subscribing on [Patreon](https://www.patreon.com/shivammathur "Shivam Mathur Patreon") or by contributing using [Paypal](https://www.paypal.me/shivammathur "Shivam Mathur PayPal"). This project is also available as part of the [Tidelift Subscription](https://tidelift.com/subscription/pkg/npm-setup-php?utm_source=npm-setup-php&utm_medium=referral&utm_campaign=enterprise&utm_term=repo "Tidelift Subscription for setup-php") to support delivering enterprise-level maintenance.
|
||||
- Please star the project and dependencies. If you blog, please share your experience of using this action with the community.
|
||||
|
||||
## :bookmark: Dependencies
|
||||
## :package: Dependencies
|
||||
|
||||
- [Node.js dependencies](https://github.com/shivammathur/setup-php/network/dependencies "Node.js dependencies")
|
||||
- [gplessis/dotdeb-php](https://github.com/gplessis/dotdeb-php "Packaging for end of life PHP versions")
|
||||
- [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/cache-extensions](https://github.com/shivammathur/cache-extensions "GitHub action to help with caching PHP extensions")
|
||||
- [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 on MacOS")
|
||||
- [shivammathur/homebrew-extensions](https://github.com/shivammathur/homebrew-extensions "Tap for PHP extensions on MacOS")
|
||||
- [shivammathur/php-builder](https://github.com/shivammathur/php-builder "Nightly PHP package")
|
||||
- [shivammathur/php5-darwin](https://github.com/shivammathur/php5-darwin "Scripts to setup PHP5 versions on darwin")
|
||||
- [shivammathur/php5-ubuntu](https://github.com/shivammathur/php5-ubuntu "Scripts to setup PHP5 versions on ubuntu")
|
||||
@ -630,4 +668,4 @@ If this action helped you.
|
||||
|
||||
- [About GitHub Actions](https://github.com/features/actions "GitHub Actions")
|
||||
- [GitHub Actions Syntax](https://help.github.com/en/articles/workflow-syntax-for-github-actions "GitHub Actions Syntax")
|
||||
- [Other Awesome Actions](https://github.com/sdras/awesome-actions "List of Awesome GitHub Actions")
|
||||
- [Other Awesome Actions](https://github.com/sdras/awesome-actions "List of Awesome GitHub Actions")
|
@ -1,15 +1,9 @@
|
||||
import * as coverage from '../src/coverage';
|
||||
|
||||
jest.mock('../src/extensions', () => ({
|
||||
addExtension: jest.fn().mockImplementation(extension => {
|
||||
return 'add_extension ' + extension + '\n';
|
||||
})
|
||||
}));
|
||||
|
||||
describe('Config tests', () => {
|
||||
it('checking addCoverage with PCOV on windows', async () => {
|
||||
let win32: string = await coverage.addCoverage('PCOV', '7.4', 'win32');
|
||||
expect(win32).toContain('add_extension pcov');
|
||||
expect(win32).toContain('Add-Extension pcov');
|
||||
expect(win32).toContain('Remove-Extension xdebug');
|
||||
|
||||
win32 = await coverage.addCoverage('pcov', '7.0', 'win32');
|
||||
@ -33,22 +27,30 @@ describe('Config tests', () => {
|
||||
|
||||
it('checking addCoverage with Xdebug on windows', async () => {
|
||||
const win32: string = await coverage.addCoverage('xdebug', '7.4', 'win32');
|
||||
expect(win32).toContain('add_extension xdebug');
|
||||
});
|
||||
|
||||
it('checking addCoverage with Xdebug on windows', async () => {
|
||||
const win32: string = await coverage.addCoverage('xdebug', '8.0', 'win32');
|
||||
expect(win32).toContain('Xdebug currently only supports PHP 7.4 or lower');
|
||||
});
|
||||
|
||||
it('checking addCoverage with Xdebug on linux', async () => {
|
||||
const linux: string = await coverage.addCoverage('xdebug', '7.4', 'linux');
|
||||
expect(linux).toContain('add_extension xdebug');
|
||||
expect(win32).toContain('Add-Extension xdebug');
|
||||
});
|
||||
|
||||
it('checking addCoverage with Xdebug on linux', async () => {
|
||||
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', '7.4', 'linux');
|
||||
expect(linux).toContain('add_extension_from_source xdebug');
|
||||
expect(linux).toContain('echo "xdebug.mode=coverage"');
|
||||
});
|
||||
|
||||
it('checking addCoverage with Xdebug3 on linux', async () => {
|
||||
const linux: string = await coverage.addCoverage('xdebug3', '8.0', 'linux');
|
||||
expect(linux).toContain('add_extension xdebug');
|
||||
expect(linux).toContain('echo "xdebug.mode=coverage"');
|
||||
});
|
||||
|
||||
it('checking addCoverage with Xdebug on linux', async () => {
|
||||
const linux: string = await coverage.addCoverage('xdebug', '8.0', 'linux');
|
||||
expect(linux).toContain('add_extension xdebug');
|
||||
expect(linux).toContain('echo "xdebug.mode=coverage"');
|
||||
});
|
||||
|
||||
it('checking addCoverage with Xdebug on darwin', async () => {
|
||||
@ -60,15 +62,6 @@ describe('Config tests', () => {
|
||||
expect(darwin).toContain('add_extension xdebug');
|
||||
});
|
||||
|
||||
it('checking addCoverage with Xdebug on darwin', async () => {
|
||||
const darwin: string = await coverage.addCoverage(
|
||||
'xdebug',
|
||||
'8.0',
|
||||
'darwin'
|
||||
);
|
||||
expect(darwin).toContain('Xdebug currently only supports PHP 7.4 or lower');
|
||||
});
|
||||
|
||||
it('checking disableCoverage windows', async () => {
|
||||
const win32 = await coverage.addCoverage('none', '7.4', 'win32');
|
||||
expect(win32).toContain('Remove-Extension xdebug');
|
||||
|
@ -1,9 +1,17 @@
|
||||
import * as extensions from '../src/extensions';
|
||||
|
||||
describe('Extension tests', () => {
|
||||
it('checking getXdebugVersion', async () => {
|
||||
expect(await extensions.getXdebugVersion('5.3')).toContain('2.2.7');
|
||||
expect(await extensions.getXdebugVersion('5.4')).toContain('2.4.1');
|
||||
expect(await extensions.getXdebugVersion('5.5')).toContain('2.5.5');
|
||||
expect(await extensions.getXdebugVersion('5.6')).toContain('2.5.5');
|
||||
expect(await extensions.getXdebugVersion('7.0')).toContain('2.7.2');
|
||||
expect(await extensions.getXdebugVersion('7.2')).toContain('2.9.6');
|
||||
});
|
||||
it('checking addExtensionOnWindows', async () => {
|
||||
let win32: string = await extensions.addExtension(
|
||||
'Xdebug, pcov, sqlite, :intl, phalcon4, ast-beta, grpc-1.2.3, inotify-1.2.3alpha2',
|
||||
'Xdebug, pcov, sqlite, :intl, phalcon4, ioncube, oci8, pdo_oci, ast-beta, grpc-1.2.3, inotify-1.2.3alpha2',
|
||||
'7.4',
|
||||
'win32'
|
||||
);
|
||||
@ -12,6 +20,9 @@ describe('Extension tests', () => {
|
||||
expect(win32).toContain('Add-Extension sqlite3');
|
||||
expect(win32).toContain('Remove-Extension intl');
|
||||
expect(win32).toContain('phalcon.ps1 phalcon4');
|
||||
expect(win32).toContain('ioncube.ps1 7.4');
|
||||
expect(win32).toContain('oci.ps1 oci8 7.4');
|
||||
expect(win32).toContain('oci.ps1 pdo_oci 7.4');
|
||||
expect(win32).toContain('Add-Extension ast beta');
|
||||
expect(win32).toContain('Add-Extension grpc stable 1.2.3');
|
||||
expect(win32).toContain('Add-Extension inotify alpha 1.2.3');
|
||||
@ -50,11 +61,14 @@ describe('Extension tests', () => {
|
||||
|
||||
it('checking addExtensionOnLinux', async () => {
|
||||
let linux: string = await extensions.addExtension(
|
||||
'Xdebug, pcov, sqlite, :intl, ast, uopz, ast-beta, pdo_mysql, pdo-odbc, xdebug-alpha, grpc-1.2.3',
|
||||
'Xdebug, xdebug3, pcov, sqlite, :intl, ast, uopz, ast-beta, pdo_mysql, pdo-odbc, xdebug-alpha, grpc-1.2.3',
|
||||
'7.4',
|
||||
'linux'
|
||||
);
|
||||
expect(linux).toContain('update_extension xdebug 2.9.3');
|
||||
expect(linux).toContain('update_extension xdebug 2.9.6');
|
||||
expect(linux).toContain(
|
||||
'add_extension_from_source xdebug xdebug/xdebug master --enable-xdebug zend_extension'
|
||||
);
|
||||
expect(linux).toContain('sudo $debconf_fix apt-get install -y php7.4-pcov');
|
||||
expect(linux).toContain(
|
||||
'sudo $debconf_fix apt-get install -y php7.4-sqlite3'
|
||||
@ -70,6 +84,11 @@ describe('Extension tests', () => {
|
||||
'add_unstable_extension xdebug alpha zend_extension'
|
||||
);
|
||||
|
||||
linux = await extensions.addExtension('xdebug3', '8.0', 'linux');
|
||||
expect(linux).toContain(
|
||||
'sudo $debconf_fix apt-get install -y php8.0-xdebug'
|
||||
);
|
||||
|
||||
linux = await extensions.addExtension('gearman', '7.0', 'linux');
|
||||
expect(linux).toContain('gearman.sh 7.0');
|
||||
linux = await extensions.addExtension('gearman', '7.1', 'linux');
|
||||
@ -91,6 +110,13 @@ describe('Extension tests', () => {
|
||||
expect(linux).toContain('phalcon.sh phalcon3 7.3');
|
||||
expect(linux).toContain('phalcon.sh phalcon4 7.3');
|
||||
|
||||
linux = await extensions.addExtension('ioncube', '7.3', 'linux');
|
||||
expect(linux).toContain('ioncube.sh 7.3');
|
||||
|
||||
linux = await extensions.addExtension('oci8, pdo_oci', '7.3', 'linux');
|
||||
expect(linux).toContain('oci.sh oci8 7.3');
|
||||
expect(linux).toContain('oci.sh pdo_oci 7.3');
|
||||
|
||||
linux = await extensions.addExtension('blackfire', '7.3', 'linux');
|
||||
expect(linux).toContain('blackfire.sh 7.3 blackfire');
|
||||
|
||||
@ -100,12 +126,15 @@ describe('Extension tests', () => {
|
||||
|
||||
it('checking addExtensionOnDarwin', async () => {
|
||||
let darwin: string = await extensions.addExtension(
|
||||
'Xdebug, pcov, sqlite, :intl, ast-beta, grpc-1.2.3',
|
||||
'Xdebug, pcov, grpc, protobuf, swoole, sqlite, oci8, pdo_oci, :intl, ast-beta, grpc-1.2.3',
|
||||
'7.2',
|
||||
'darwin'
|
||||
);
|
||||
expect(darwin).toContain('sudo pecl install -f xdebug');
|
||||
expect(darwin).toContain('sudo pecl install -f pcov');
|
||||
expect(darwin).toContain('add_brew_extension xdebug');
|
||||
expect(darwin).toContain('add_brew_extension pcov');
|
||||
expect(darwin).toContain('add_brew_extension grpc');
|
||||
expect(darwin).toContain('add_brew_extension protobuf');
|
||||
expect(darwin).toContain('add_brew_extension swoole');
|
||||
expect(darwin).toContain('sudo pecl install -f sqlite3');
|
||||
expect(darwin).toContain('remove_extension intl');
|
||||
expect(darwin).toContain('add_unstable_extension ast beta extension');
|
||||
@ -117,11 +146,18 @@ describe('Extension tests', () => {
|
||||
darwin = await extensions.addExtension('phalcon4', '7.3', 'darwin');
|
||||
expect(darwin).toContain('phalcon_darwin.sh phalcon4 7.3');
|
||||
|
||||
darwin = await extensions.addExtension('ioncube', '7.3', 'darwin');
|
||||
expect(darwin).toContain('ioncube.sh 7.3');
|
||||
|
||||
darwin = await extensions.addExtension('oci8, pdo_oci', '7.3', 'darwin');
|
||||
expect(darwin).toContain('oci.sh oci8 7.3');
|
||||
expect(darwin).toContain('oci.sh pdo_oci 7.3');
|
||||
|
||||
darwin = await extensions.addExtension('pcov', '5.6', 'darwin');
|
||||
expect(darwin).toContain('sudo pecl install -f pcov');
|
||||
|
||||
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.3', 'darwin');
|
||||
expect(darwin).toContain('sudo pecl install -f xdebug-2.2.7');
|
||||
@ -133,13 +169,13 @@ describe('Extension tests', () => {
|
||||
expect(darwin).toContain('sudo pecl install -f xdebug-2.5.5');
|
||||
|
||||
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');
|
||||
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');
|
||||
expect(darwin).toContain('sudo pecl install -f xdebug');
|
||||
expect(darwin).toContain('add_brew_extension xdebug');
|
||||
|
||||
darwin = await extensions.addExtension('redis', '5.6', 'darwin');
|
||||
expect(darwin).toContain('sudo pecl install -f redis-2.2.8');
|
||||
|
@ -26,12 +26,12 @@ jest.mock('../src/install', () => ({
|
||||
if (extension_csv) {
|
||||
script += 'install extensions';
|
||||
}
|
||||
if (ini_values_csv) {
|
||||
script += 'edit php.ini';
|
||||
}
|
||||
if (coverage_driver) {
|
||||
script += 'set coverage driver';
|
||||
}
|
||||
if (ini_values_csv) {
|
||||
script += 'edit php.ini';
|
||||
}
|
||||
|
||||
return script;
|
||||
}
|
||||
@ -69,6 +69,7 @@ jest.mock('../src/install', () => ({
|
||||
* @param extension_csv
|
||||
* @param ini_values_csv
|
||||
* @param coverage_driver
|
||||
* @param tools
|
||||
*/
|
||||
function setEnv(
|
||||
version: string | number,
|
||||
@ -76,8 +77,7 @@ function setEnv(
|
||||
extension_csv: string,
|
||||
ini_values_csv: string,
|
||||
coverage_driver: string,
|
||||
tools: string,
|
||||
pecl: string
|
||||
tools: string
|
||||
): void {
|
||||
process.env['php-version'] = version.toString();
|
||||
process.env['RUNNER_OS'] = os;
|
||||
@ -85,26 +85,25 @@ function setEnv(
|
||||
process.env['ini-values'] = ini_values_csv;
|
||||
process.env['coverage'] = coverage_driver;
|
||||
process.env['tools'] = tools;
|
||||
process.env['pecl'] = pecl;
|
||||
}
|
||||
|
||||
describe('Install', () => {
|
||||
it('Test install on windows', async () => {
|
||||
setEnv('7.0', 'win32', '', '', '', '', '');
|
||||
// @ts-ignore
|
||||
let script: string = await install.run();
|
||||
setEnv('7.0', 'win32', '', '', '', '');
|
||||
|
||||
let script: string = '' + (await install.run());
|
||||
expect(script).toContain('initial script');
|
||||
expect(script).toContain('pwsh script.ps1 7.0 ' + __dirname);
|
||||
|
||||
setEnv('7.3', 'win32', '', '', '', '', '');
|
||||
// @ts-ignore
|
||||
script = await install.run();
|
||||
setEnv('7.3', 'win32', '', '', '', '');
|
||||
|
||||
script = '' + (await install.run());
|
||||
expect(script).toContain('initial script');
|
||||
expect(script).toContain('pwsh script.ps1 7.3 ' + __dirname);
|
||||
|
||||
setEnv('7.3', 'win32', 'a, b', 'a=b', 'x', '', '');
|
||||
// @ts-ignore
|
||||
script = await install.run();
|
||||
setEnv('7.3', 'win32', 'a, b', 'a=b', 'x', '');
|
||||
|
||||
script = '' + (await install.run());
|
||||
expect(script).toContain('initial script');
|
||||
expect(script).toContain('install extensions');
|
||||
expect(script).toContain('edit php.ini');
|
||||
@ -113,25 +112,15 @@ describe('Install', () => {
|
||||
});
|
||||
|
||||
it('Test install on linux', async () => {
|
||||
setEnv('7.3', 'linux', '', '', '', '', '');
|
||||
// @ts-ignore
|
||||
let script: string = await install.run();
|
||||
setEnv('7.3', 'linux', '', '', '', '');
|
||||
|
||||
let script: string = '' + (await install.run());
|
||||
expect(script).toContain('initial script');
|
||||
expect(script).toContain('bash script.sh 7.3 ');
|
||||
|
||||
setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'phpunit', 'true');
|
||||
// @ts-ignore
|
||||
script = await install.run();
|
||||
expect(script).toContain('initial script');
|
||||
expect(script).toContain('install extensions');
|
||||
expect(script).toContain('edit php.ini');
|
||||
expect(script).toContain('set coverage driver');
|
||||
expect(script).toContain('bash script.sh 7.3');
|
||||
expect(script).toContain('add_tool');
|
||||
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('install extensions');
|
||||
expect(script).toContain('edit php.ini');
|
||||
@ -141,15 +130,15 @@ describe('Install', () => {
|
||||
});
|
||||
|
||||
it('Test install on darwin', async () => {
|
||||
setEnv('7.3', 'darwin', '', '', '', '', '');
|
||||
// @ts-ignore
|
||||
let script: string = await install.run();
|
||||
setEnv('7.3', 'darwin', '', '', '', '');
|
||||
|
||||
let script: string = '' + (await install.run());
|
||||
expect(script).toContain('initial script');
|
||||
expect(script).toContain('bash script.sh 7.3 ' + __dirname);
|
||||
|
||||
setEnv('7.3', 'darwin', 'a, b', 'a=b', 'x', '', '');
|
||||
// @ts-ignore
|
||||
script = await install.run();
|
||||
setEnv('7.3', 'darwin', 'a, b', 'a=b', 'x', '');
|
||||
|
||||
script = '' + (await install.run());
|
||||
expect(script).toContain('initial script');
|
||||
expect(script).toContain('install extensions');
|
||||
expect(script).toContain('edit php.ini');
|
||||
@ -158,21 +147,21 @@ describe('Install', () => {
|
||||
});
|
||||
|
||||
it('Test malformed version inputs', async () => {
|
||||
setEnv('7.4.1', 'darwin', '', '', '', '', '');
|
||||
// @ts-ignore
|
||||
let script: string = await install.run();
|
||||
setEnv('7.4.1', 'darwin', '', '', '', '');
|
||||
|
||||
let script: string = '' + '' + (await install.run());
|
||||
expect(script).toContain('initial script');
|
||||
expect(script).toContain('bash script.sh 7.4 ' + __dirname);
|
||||
|
||||
setEnv(8.0, 'darwin', '', '', '', '', '');
|
||||
// @ts-ignore
|
||||
script = await install.run();
|
||||
setEnv(8.0, 'darwin', '', '', '', '');
|
||||
|
||||
script = '' + (await install.run());
|
||||
expect(script).toContain('initial script');
|
||||
expect(script).toContain('bash script.sh 8.0 ' + __dirname);
|
||||
|
||||
setEnv(8, 'darwin', '', '', '', '', '');
|
||||
// @ts-ignore
|
||||
script = await install.run();
|
||||
setEnv(8, 'darwin', '', '', '', '');
|
||||
|
||||
script = '' + (await install.run());
|
||||
expect(script).toContain('initial script');
|
||||
expect(script).toContain('bash script.sh 8.0 ' + __dirname);
|
||||
});
|
||||
|
@ -1,5 +1,21 @@
|
||||
import * as httpm from '@actions/http-client';
|
||||
import * as tools from '../src/tools';
|
||||
|
||||
httpm.HttpClient.prototype.get = jest.fn().mockImplementation(() => {
|
||||
return {
|
||||
message: null,
|
||||
readBody: jest.fn().mockImplementation(() => {
|
||||
return JSON.stringify({
|
||||
stable: [{path: '/composer-stable.phar'}],
|
||||
preview: [{path: '/composer-preview.phar'}],
|
||||
snapshot: [{path: '/composer.phar'}],
|
||||
'1': [{path: '/composer-1.phar'}],
|
||||
'2': [{path: '/composer-2.phar'}]
|
||||
});
|
||||
})
|
||||
};
|
||||
});
|
||||
|
||||
describe('Tools tests', () => {
|
||||
it('checking getCommand', async () => {
|
||||
expect(await tools.getCommand('linux', 'tool')).toBe('add_tool ');
|
||||
@ -219,6 +235,45 @@ describe('Tools tests', () => {
|
||||
expect(
|
||||
await tools.addComposer(['a', 'b', 'composer:1.2.3'])
|
||||
).toStrictEqual(['composer', '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']);
|
||||
});
|
||||
|
||||
it('checking getComposerUrl', async () => {
|
||||
expect(await tools.getComposerUrl('latest')).toContain(
|
||||
'https://getcomposer.org/composer-stable.phar'
|
||||
);
|
||||
expect(await tools.getComposerUrl('stable')).toContain(
|
||||
'https://getcomposer.org/composer-stable.phar'
|
||||
);
|
||||
expect(await tools.getComposerUrl('snapshot')).toContain(
|
||||
'https://getcomposer.org/composer.phar'
|
||||
);
|
||||
expect(await tools.getComposerUrl('preview')).toContain(
|
||||
'https://getcomposer.org/composer-preview.phar'
|
||||
);
|
||||
expect(await tools.getComposerUrl('1')).toContain(
|
||||
'https://getcomposer.org/composer-1.phar'
|
||||
);
|
||||
expect(await tools.getComposerUrl('2')).toContain(
|
||||
'https://getcomposer.org/composer-2.phar'
|
||||
);
|
||||
});
|
||||
|
||||
it('checking getSymfonyUri', async () => {
|
||||
@ -349,7 +404,7 @@ describe('Tools tests', () => {
|
||||
|
||||
it('checking addTools on linux', async () => {
|
||||
const script: string = await tools.addTools(
|
||||
'blackfire, blackfire-player, cs2pr, flex, php-cs-fixer, phpstan, phpunit, pecl, phinx, phinx:1.2.3, phive, php-config, phpize, symfony, wp-cli',
|
||||
'blackfire, blackfire-player, cs2pr, flex, php-cs-fixer, phplint, phpstan, phpunit, pecl, phinx, phinx:1.2.3, phive, php-config, phpize, symfony, wp-cli',
|
||||
'7.4',
|
||||
'linux'
|
||||
);
|
||||
@ -384,17 +439,46 @@ describe('Tools tests', () => {
|
||||
expect(script).toContain('add_pecl');
|
||||
expect(script).toContain('add_composertool flex flex symfony/');
|
||||
expect(script).toContain('add_composertool phinx phinx robmorgan/');
|
||||
expect(script).toContain('add_composertool phplint phplint overtrue/');
|
||||
expect(script).toContain('add_composertool phinx phinx:1.2.3 robmorgan/');
|
||||
expect(script).toContain('add_devtools');
|
||||
expect(script).toContain('add_log "$tick" "php-config" "Added"');
|
||||
expect(script).toContain('add_log "$tick" "phpize" "Added"');
|
||||
});
|
||||
it('checking addTools on darwin', async () => {
|
||||
const listOfTools = [
|
||||
'blackfire',
|
||||
'blackfire-player',
|
||||
'composer-normalize',
|
||||
'composer-prefetcher:1.2.3',
|
||||
'composer-require-checker',
|
||||
'composer-unused',
|
||||
'cs2pr:1.2.3',
|
||||
'flex',
|
||||
'infection',
|
||||
'phan',
|
||||
'phan:2.7.2',
|
||||
'phinx',
|
||||
'phive:1.2.3',
|
||||
'php-config',
|
||||
'phpcbf',
|
||||
'phpcpd',
|
||||
'phpcs',
|
||||
'phpize',
|
||||
'phpmd',
|
||||
'psalm',
|
||||
'symfony',
|
||||
'symfony:1.2.3',
|
||||
'vapor-cli',
|
||||
'wp-cli'
|
||||
];
|
||||
|
||||
const script: string = await tools.addTools(
|
||||
'blackfire, blackfire-player, flex, infection, phpcs, phpcbf, phpcpd, phpmd, psalm, phinx, vapor-cli, phive:1.2.3, cs2pr:1.2.3, composer-prefetcher:1.2.3, phpize, php-config, symfony, symfony:1.2.3, wp-cli',
|
||||
listOfTools.join(', '),
|
||||
'7.4',
|
||||
'darwin'
|
||||
);
|
||||
|
||||
expect(script).toContain('add_blackfire');
|
||||
expect(script).toContain(
|
||||
'add_tool https://get.blackfire.io/blackfire-player.phar blackfire-player'
|
||||
@ -402,12 +486,24 @@ describe('Tools tests', () => {
|
||||
expect(script).toContain(
|
||||
'add_tool https://getcomposer.org/composer-stable.phar composer'
|
||||
);
|
||||
expect(script).toContain(
|
||||
'add_tool https://github.com/ergebnis/composer-normalize/releases/latest/download/composer-normalize.phar composer-normalize'
|
||||
);
|
||||
expect(script).toContain(
|
||||
'add_tool https://github.com/maglnet/ComposerRequireChecker/releases/latest/download/composer-require-checker.phar composer-require-checker'
|
||||
);
|
||||
expect(script).toContain(
|
||||
'add_tool https://github.com/composer-unused/composer-unused/releases/latest/download/composer-unused.phar composer-unused'
|
||||
);
|
||||
expect(script).toContain(
|
||||
'add_tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/download/1.2.3/cs2pr cs2pr'
|
||||
);
|
||||
expect(script).toContain(
|
||||
'add_tool https://github.com/infection/infection/releases/latest/download/infection.phar infection'
|
||||
);
|
||||
expect(script).toContain(
|
||||
'add_tool https://github.com/phan/phan/releases/latest/download/phan.phar phan'
|
||||
);
|
||||
expect(script).toContain(
|
||||
'add_tool https://github.com/squizlabs/PHP_CodeSniffer/releases/latest/download/phpcs.phar phpcs'
|
||||
);
|
||||
@ -426,6 +522,9 @@ describe('Tools tests', () => {
|
||||
expect(script).toContain('add_composertool vapor-cli vapor-cli laravel/');
|
||||
expect(script).toContain('add_composertool flex flex symfony/');
|
||||
expect(script).toContain('add_composertool phinx phinx robmorgan/');
|
||||
expect(script).toContain(
|
||||
'add_tool https://github.com/phan/phan/releases/download/2.7.2/phan.phar phan'
|
||||
);
|
||||
expect(script).toContain(
|
||||
'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive'
|
||||
);
|
||||
@ -445,11 +544,30 @@ describe('Tools tests', () => {
|
||||
expect(script).toContain('add_log "$tick" "php-config" "Added"');
|
||||
});
|
||||
it('checking addTools on windows', async () => {
|
||||
const listOfTools = [
|
||||
'blackfire',
|
||||
'blackfire-player:1.8.1',
|
||||
'codeception',
|
||||
'cs2pr',
|
||||
'deployer',
|
||||
'does_not_exist',
|
||||
'flex',
|
||||
'phinx',
|
||||
'phive:0.13.2',
|
||||
'php-config',
|
||||
'phpize',
|
||||
'phpmd',
|
||||
'prestissimo',
|
||||
'symfony',
|
||||
'wp-cli'
|
||||
];
|
||||
|
||||
const script: string = await tools.addTools(
|
||||
'blackfire, blackfire-player:1.8.1, codeception, cs2pr, deployer, flex, prestissimo, phpmd, phinx, phive:0.13.2, php-config, phpize, symfony, wp-cli, does_not_exit',
|
||||
listOfTools.join(', '),
|
||||
'7.4',
|
||||
'win32'
|
||||
);
|
||||
|
||||
expect(script).toContain('Add-Blackfire');
|
||||
expect(script).toContain(
|
||||
'Add-Tool https://get.blackfire.io/blackfire-player-v1.8.1.phar blackfire-player'
|
||||
@ -480,15 +598,21 @@ describe('Tools tests', () => {
|
||||
);
|
||||
expect(script).toContain('phpize 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_exit is not supported');
|
||||
expect(script).toContain('Tool does_not_exist is not supported');
|
||||
});
|
||||
it('checking addTools with composer tool using user/tool as input', async () => {
|
||||
const listOfTools = [
|
||||
'hirak/prestissimo',
|
||||
'narrowspark/automatic-composer-prefetcher',
|
||||
'robmorgan/phinx'
|
||||
];
|
||||
|
||||
const script: string = await tools.addTools(
|
||||
'hirak/prestissimo, narrowspark/automatic-composer-prefetcher, robmorgan/phinx',
|
||||
listOfTools.join(', '),
|
||||
'7.4',
|
||||
'win32'
|
||||
);
|
||||
|
||||
expect(script).toContain(
|
||||
'Add-Tool https://getcomposer.org/composer-stable.phar composer'
|
||||
);
|
||||
@ -498,4 +622,30 @@ describe('Tools tests', () => {
|
||||
'Add-Composertool composer-prefetcher composer-prefetcher narrowspark/automatic-'
|
||||
);
|
||||
});
|
||||
it('checking composer setup', async () => {
|
||||
const listOfTools = ['composer', 'composer:v1'];
|
||||
|
||||
let script: string = await tools.addTools(
|
||||
listOfTools.join(', '),
|
||||
'7.4',
|
||||
'linux'
|
||||
);
|
||||
|
||||
expect(script).toContain(
|
||||
'add_tool https://getcomposer.org/composer-1.phar composer'
|
||||
);
|
||||
|
||||
script = await tools.addTools('composer:preview', '7.4', 'linux');
|
||||
expect(script).toContain(
|
||||
'add_tool 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://getcomposer.org/composer.phar composer'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
@ -155,6 +155,7 @@ describe('Utils tests', () => {
|
||||
);
|
||||
expect(await utils.getExtensionPrefix('xsl')).toEqual('extension');
|
||||
expect(await utils.getExtensionPrefix('xdebug')).toEqual('zend_extension');
|
||||
expect(await utils.getExtensionPrefix('xdebug3')).toEqual('zend_extension');
|
||||
expect(await utils.getExtensionPrefix('opcache')).toEqual('zend_extension');
|
||||
});
|
||||
|
||||
|
1283
dist/index.js
vendored
1283
dist/index.js
vendored
File diff suppressed because it is too large
Load Diff
@ -17,16 +17,16 @@ jobs:
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- uses: actions/cache@v1
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install Composer dependencies
|
||||
run: composer install -n --prefer-dist
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: PHP test
|
||||
run: composer test
|
@ -37,19 +37,19 @@ jobs:
|
||||
- name: Start mysql service
|
||||
run: sudo /etc/init.d/mysql start
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
composer run-script post-install-cmd --no-interaction
|
||||
# Add a step to run migrations if required
|
||||
- name: Test with phpunit
|
||||
@ -70,18 +70,18 @@ jobs:
|
||||
php-version: '7.3'
|
||||
extensions: mbstring, intl
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: PHP CodeSniffer
|
||||
run: composer cs-check
|
||||
|
||||
@ -98,17 +98,17 @@ jobs:
|
||||
extensions: mbstring, intl
|
||||
tools: phpstan
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Static Analysis using PHPStan
|
||||
run: phpstan analyse --no-progress src/
|
@ -35,19 +35,19 @@ jobs:
|
||||
extensions: mbstring, intl, redis, pdo_pgsql
|
||||
coverage: pcov
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
composer run-script post-install-cmd --no-interaction
|
||||
# Add a step to run migrations if required
|
||||
- name: Test with phpunit
|
||||
@ -68,18 +68,18 @@ jobs:
|
||||
php-version: '7.3'
|
||||
extensions: mbstring, intl
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: PHP CodeSniffer
|
||||
run: composer cs-check
|
||||
|
||||
@ -96,17 +96,17 @@ jobs:
|
||||
extensions: mbstring, intl
|
||||
tools: phpstan
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Static Analysis using PHPStan
|
||||
run: phpstan analyse --no-progress src/
|
@ -19,19 +19,19 @@ jobs:
|
||||
extensions: mbstring, intl, pdo_sqlite, pdo_mysql
|
||||
coverage: pcov #optional
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
composer run-script post-install-cmd --no-interaction
|
||||
- name: Test with phpunit
|
||||
run: vendor/bin/phpunit --coverage-text
|
||||
@ -48,18 +48,18 @@ jobs:
|
||||
php-version: '7.3'
|
||||
extensions: mbstring, intl
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: PHP CodeSniffer
|
||||
run: composer cs-check
|
||||
|
||||
@ -76,17 +76,17 @@ jobs:
|
||||
extensions: mbstring, intl
|
||||
tools: phpstan
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Static Analysis using PHPStan
|
||||
run: phpstan analyse --no-progress src/
|
||||
|
@ -18,17 +18,17 @@ jobs:
|
||||
extensions: mbstring, intl, curl, dom
|
||||
coverage: xdebug #optional
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Test with phpunit
|
||||
run: vendor/bin/phpunit --coverage-text
|
@ -44,18 +44,18 @@ jobs:
|
||||
- name: Start mysql service
|
||||
run: sudo /etc/init.d/mysql start
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Prepare the application
|
||||
run: |
|
||||
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
|
@ -44,18 +44,18 @@ jobs:
|
||||
extensions: mbstring, dom, fileinfo, pgsql
|
||||
coverage: xdebug #optional
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Prepare the application
|
||||
run: |
|
||||
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
|
@ -20,18 +20,18 @@ jobs:
|
||||
extensions: mbstring, dom, fileinfo
|
||||
coverage: xdebug #optional
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Prepare the application
|
||||
run: |
|
||||
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
|
@ -44,19 +44,19 @@ jobs:
|
||||
- name: Start mysql service
|
||||
run: sudo /etc/init.d/mysql start
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install Composer dependencies
|
||||
run: |
|
||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
composer require predis/predis illuminate/redis
|
||||
- name: Prepare the application
|
||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
|
@ -44,19 +44,19 @@ jobs:
|
||||
extensions: mbstring, dom, fileinfo, pgsql
|
||||
coverage: xdebug #optional
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install Composer dependencies
|
||||
run: |
|
||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
composer require predis/predis illuminate/redis
|
||||
- name: Prepare the application
|
||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
|
@ -20,18 +20,18 @@ jobs:
|
||||
extensions: mbstring, dom, fileinfo, mysql
|
||||
coverage: xdebug #optional
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Prepare the application
|
||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
- name: Test with phpunit
|
||||
|
@ -44,18 +44,18 @@ jobs:
|
||||
- name: Start mysql service
|
||||
run: sudo /etc/init.d/mysql start
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Prepare the application
|
||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
- name: Run Migration
|
||||
|
@ -43,18 +43,18 @@ jobs:
|
||||
extensions: mbstring, dom, zip, phalcon4, pgsql #use phalcon3 for the phalcon 3.x
|
||||
coverage: xdebug #optional
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Prepare the application
|
||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
- name: Run Migration
|
||||
|
@ -27,18 +27,18 @@ jobs:
|
||||
- name: Get yarn cache
|
||||
id: yarn-cache
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- uses: actions/cache@v1
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.yarn-cache.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: ${{ runner.os }}-yarn-
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
@ -46,7 +46,7 @@ jobs:
|
||||
- name: Install yarn dependencies
|
||||
run: yarn -V
|
||||
- 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
|
||||
run: |
|
||||
yarn run test
|
||||
|
@ -18,17 +18,17 @@ jobs:
|
||||
extensions: mbstring, simplexml, dom
|
||||
coverage: xdebug #optional
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Test with phpunit
|
||||
run: vendor/bin/phpunit --coverage-text
|
@ -31,19 +31,19 @@ jobs:
|
||||
- name: Start mysql service
|
||||
run: sudo /etc/init.d/mysql start
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install Composer dependencies
|
||||
run: |
|
||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Run Migration
|
||||
run: |
|
||||
composer require symfony/orm-pack
|
||||
|
@ -29,19 +29,19 @@ jobs:
|
||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, pgsql
|
||||
coverage: xdebug #optional
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install Composer dependencies
|
||||
run: |
|
||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Run Migration
|
||||
run: |
|
||||
composer require symfony/orm-pack
|
||||
|
@ -20,12 +20,12 @@ jobs:
|
||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite
|
||||
coverage: xdebug #optional
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
@ -33,6 +33,6 @@ jobs:
|
||||
- name: Install Composer dependencies
|
||||
run: |
|
||||
composer require symfony/orm-pack
|
||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Run Tests
|
||||
run: php bin/phpunit --coverage-text
|
@ -41,18 +41,18 @@ jobs:
|
||||
- name: Start mysql service
|
||||
run: sudo /etc/init.d/mysql start
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Prepare the application
|
||||
run: |
|
||||
php -r "file_exists('.env') || copy('.env.dist', '.env');"
|
||||
|
@ -39,18 +39,18 @@ jobs:
|
||||
extensions: mbstring, intl, gd, imagick, zip, dom, pgsql
|
||||
coverage: xdebug #optional
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
- name: Prepare the application
|
||||
run: |
|
||||
php -r "file_exists('.env') || copy('.env.dist', '.env');"
|
||||
|
@ -18,19 +18,19 @@ jobs:
|
||||
extensions: mbstring, bcmath, curl, intl
|
||||
coverage: xdebug #optional
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
composer install --no-progress --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
|
||||
- name: Test with phpunit
|
||||
run: vendor/bin/phpunit --coverage-text
|
2053
package-lock.json
generated
2053
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
29
package.json
29
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "setup-php",
|
||||
"version": "2.2.1",
|
||||
"version": "2.4.0",
|
||||
"private": false,
|
||||
"description": "Setup PHP for use with GitHub Actions",
|
||||
"main": "dist/index.js",
|
||||
@ -26,26 +26,27 @@
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.2.4",
|
||||
"@actions/exec": "^1.0.4",
|
||||
"@actions/http-client": "^1.0.8",
|
||||
"@actions/io": "^1.0.2",
|
||||
"fs": "0.0.1-security"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^25.2.2",
|
||||
"@types/node": "^14.0.1",
|
||||
"@typescript-eslint/eslint-plugin": "^2.34.0",
|
||||
"@typescript-eslint/parser": "^2.34.0",
|
||||
"@zeit/ncc": "^0.22.2",
|
||||
"eslint": "^7.0.0",
|
||||
"@types/jest": "^26.0.5",
|
||||
"@types/node": "^14.0.23",
|
||||
"@typescript-eslint/eslint-plugin": "^3.6.1",
|
||||
"@typescript-eslint/parser": "^3.6.1",
|
||||
"@zeit/ncc": "^0.22.3",
|
||||
"eslint": "^7.5.0",
|
||||
"eslint-config-prettier": "^6.11.0",
|
||||
"eslint-plugin-import": "^2.20.2",
|
||||
"eslint-plugin-jest": "^23.13.1",
|
||||
"eslint-plugin-prettier": "^3.1.3",
|
||||
"eslint-plugin-import": "^2.22.0",
|
||||
"eslint-plugin-jest": "^23.18.0",
|
||||
"eslint-plugin-prettier": "^3.1.4",
|
||||
"husky": "^4.2.5",
|
||||
"jest": "^26.0.1",
|
||||
"jest-circus": "^26.0.1",
|
||||
"jest": "^26.1.0",
|
||||
"jest-circus": "^26.1.0",
|
||||
"prettier": "^2.0.5",
|
||||
"ts-jest": "^26.0.0",
|
||||
"typescript": "^3.9.2"
|
||||
"ts-jest": "^26.1.3",
|
||||
"typescript": "^3.9.7"
|
||||
},
|
||||
"husky": {
|
||||
"skipCI": true,
|
||||
|
Binary file not shown.
Binary file not shown.
@ -9,10 +9,10 @@ export async function addINIValuesUnix(
|
||||
ini_values_csv: string
|
||||
): Promise<string> {
|
||||
const ini_values: Array<string> = await utils.CSVArray(ini_values_csv);
|
||||
let script = '\n';
|
||||
let script = '';
|
||||
await utils.asyncForEach(ini_values, async function (line: string) {
|
||||
script +=
|
||||
(await utils.addLog('$tick', line, 'Added to php.ini', 'linux')) + '\n';
|
||||
'\n' + (await utils.addLog('$tick', line, 'Added to php.ini', 'linux'));
|
||||
});
|
||||
return 'echo "' + ini_values.join('\n') + '" >> $ini_file' + script;
|
||||
}
|
||||
|
@ -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
|
@ -5,39 +5,38 @@ import * as config from './config';
|
||||
/**
|
||||
* Function to setup Xdebug
|
||||
*
|
||||
* @param extension
|
||||
* @param version
|
||||
* @param os_version
|
||||
* @param pipe
|
||||
*/
|
||||
export async function addCoverageXdebug(
|
||||
extension: string,
|
||||
version: string,
|
||||
os_version: string,
|
||||
pipe: string
|
||||
): Promise<string> {
|
||||
switch (version) {
|
||||
case '8.0':
|
||||
return (
|
||||
'\n' +
|
||||
(await utils.addLog(
|
||||
'$cross',
|
||||
'xdebug',
|
||||
'Xdebug currently only supports PHP 7.4 or lower',
|
||||
os_version
|
||||
))
|
||||
);
|
||||
case '7.4':
|
||||
const xdebug =
|
||||
(await extensions.addExtension(extension, version, os_version, true)) +
|
||||
pipe;
|
||||
const ini = await config.addINIValues(
|
||||
'xdebug.mode=coverage',
|
||||
os_version,
|
||||
true
|
||||
);
|
||||
const log = await utils.addLog(
|
||||
'$tick',
|
||||
extension,
|
||||
'Xdebug enabled as coverage driver',
|
||||
os_version
|
||||
);
|
||||
switch (true) {
|
||||
case /^xdebug3$/.test(extension):
|
||||
case /^8\.0$/.test(version):
|
||||
return '\n' + xdebug + '\n' + ini + '\n' + log;
|
||||
case /^xdebug$/.test(extension):
|
||||
default:
|
||||
return (
|
||||
(await extensions.addExtension('xdebug', version, os_version, true)) +
|
||||
pipe +
|
||||
'\n' +
|
||||
(await utils.addLog(
|
||||
'$tick',
|
||||
'xdebug',
|
||||
'Xdebug enabled as coverage driver',
|
||||
os_version
|
||||
))
|
||||
);
|
||||
return xdebug + '\n' + log;
|
||||
}
|
||||
}
|
||||
|
||||
@ -151,7 +150,11 @@ export async function addCoverage(
|
||||
case 'pcov':
|
||||
return script + (await addCoveragePCOV(version, os_version, pipe));
|
||||
case 'xdebug':
|
||||
return script + (await addCoverageXdebug(version, os_version, pipe));
|
||||
case 'xdebug3':
|
||||
return (
|
||||
script +
|
||||
(await addCoverageXdebug(coverage_driver, version, os_version, pipe))
|
||||
);
|
||||
case 'none':
|
||||
return script + (await disableCoverage(version, os_version, pipe));
|
||||
default:
|
||||
|
@ -1,6 +1,27 @@
|
||||
import * as path from 'path';
|
||||
import * as utils from './utils';
|
||||
|
||||
/**
|
||||
* Function to get Xdebug version compatible with php versions
|
||||
*
|
||||
* @param version
|
||||
*/
|
||||
export async function getXdebugVersion(version: string): Promise<string> {
|
||||
switch (version) {
|
||||
case '5.3':
|
||||
return '2.2.7';
|
||||
case '5.4':
|
||||
return '2.4.1';
|
||||
case '5.5':
|
||||
case '5.6':
|
||||
return '2.5.5';
|
||||
case '7.0':
|
||||
return '2.7.2';
|
||||
default:
|
||||
return '2.9.6';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Install and enable extensions for darwin
|
||||
*
|
||||
@ -15,7 +36,7 @@ export async function addExtensionDarwin(
|
||||
): Promise<string> {
|
||||
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
||||
let add_script = '\n';
|
||||
let remove_script = '\n';
|
||||
let remove_script = '';
|
||||
await utils.asyncForEach(extensions, async function (extension: string) {
|
||||
const version_extension: string = version + extension;
|
||||
const [ext_name, ext_version]: string[] = extension.split('-');
|
||||
@ -60,25 +81,22 @@ export async function addExtensionDarwin(
|
||||
' ' +
|
||||
ext_prefix;
|
||||
return;
|
||||
// match 5.3xdebug
|
||||
case /5\.3xdebug/.test(version_extension):
|
||||
command = command_prefix + 'xdebug-2.2.7' + pipe;
|
||||
// match 5.3xdebug...5.5xdebug
|
||||
case /5\.[3-5]xdebug/.test(version_extension):
|
||||
command =
|
||||
command_prefix + 'xdebug-' + (await getXdebugVersion(version));
|
||||
break;
|
||||
// match 5.4xdebug
|
||||
case /5\.4xdebug/.test(version_extension):
|
||||
command = command_prefix + 'xdebug-2.4.1' + pipe;
|
||||
break;
|
||||
// match 5.5xdebug and 5.6xdebug
|
||||
case /5\.[5-6]xdebug/.test(version_extension):
|
||||
command = command_prefix + 'xdebug-2.5.5' + pipe;
|
||||
break;
|
||||
// match 7.0redis
|
||||
case /7\.0xdebug/.test(version_extension):
|
||||
command = command_prefix + 'xdebug-2.9.0' + pipe;
|
||||
// match 5.6xdebug to 8.0xdebug, 5.6swoole to 8.0swoole
|
||||
// match 5.6grpc to 7.4grpc, 5.6protobuf to 7.4protobuf
|
||||
// match 7.1pcov to 8.0pcov
|
||||
case /(5\.6|7\.[0-4]|8\.[0-9])(xdebug|swoole)/.test(version_extension):
|
||||
case /(5\.6|7\.[0-4])(grpc|protobuf)/.test(version_extension):
|
||||
case /(7\.[1-4]|8\.[0-9])pcov/.test(version_extension):
|
||||
command = 'add_brew_extension ' + ext_name;
|
||||
break;
|
||||
// match 5.6redis
|
||||
case /5\.6redis/.test(version_extension):
|
||||
command = command_prefix + 'redis-2.2.8' + pipe;
|
||||
command = command_prefix + 'redis-2.2.8';
|
||||
break;
|
||||
// match imagick
|
||||
case /^imagick$/.test(extension):
|
||||
@ -93,8 +111,26 @@ export async function addExtensionDarwin(
|
||||
// match sqlite
|
||||
case /^sqlite$/.test(extension):
|
||||
extension = 'sqlite3';
|
||||
command = command_prefix + extension + pipe;
|
||||
command = command_prefix + extension;
|
||||
break;
|
||||
// match pdo_oci and oci8
|
||||
case /^pdo_oci$|^oci8$/.test(extension):
|
||||
add_script +=
|
||||
'\nbash ' +
|
||||
path.join(__dirname, '../src/scripts/ext/oci.sh') +
|
||||
' ' +
|
||||
extension +
|
||||
' ' +
|
||||
version;
|
||||
return;
|
||||
// match 5.3ioncube...7.4ioncube, 7.0ioncube...7.4ioncube
|
||||
case /^5\.[3-6]ioncube$|^7\.[0-4]ioncube$/.test(version_extension):
|
||||
add_script +=
|
||||
'\nbash ' +
|
||||
path.join(__dirname, '../src/scripts/ext/ioncube.sh') +
|
||||
' ' +
|
||||
version;
|
||||
return;
|
||||
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
||||
add_script +=
|
||||
@ -106,7 +142,7 @@ export async function addExtensionDarwin(
|
||||
version;
|
||||
return;
|
||||
default:
|
||||
command = command_prefix + extension + pipe;
|
||||
command = command_prefix + extension;
|
||||
break;
|
||||
}
|
||||
add_script +=
|
||||
@ -127,7 +163,7 @@ export async function addExtensionWindows(
|
||||
): Promise<string> {
|
||||
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
||||
let add_script = '\n';
|
||||
let remove_script = '\n';
|
||||
let remove_script = '';
|
||||
await utils.asyncForEach(extensions, async function (extension: string) {
|
||||
const [ext_name, ext_version]: string[] = extension.split('-');
|
||||
const version_extension: string = version + extension;
|
||||
@ -186,6 +222,26 @@ export async function addExtensionWindows(
|
||||
extension = 'sqlite3';
|
||||
add_script += '\nAdd-Extension ' + extension;
|
||||
break;
|
||||
// match pdo_oci and oci8
|
||||
case /^pdo_oci$|^oci8$/.test(extension):
|
||||
add_script +=
|
||||
'\n& ' +
|
||||
path.join(__dirname, '../src/scripts/ext/oci.ps1') +
|
||||
' ' +
|
||||
extension +
|
||||
' ' +
|
||||
version +
|
||||
'\n';
|
||||
break;
|
||||
// match 5.3ioncube...7.4ioncube, 7.0ioncube...7.4ioncube
|
||||
case /^5\.[3-6]ioncube$|^7\.[0-4]ioncube$/.test(version_extension):
|
||||
add_script +=
|
||||
'\n& ' +
|
||||
path.join(__dirname, '../src/scripts/ext/ioncube.ps1') +
|
||||
' ' +
|
||||
version +
|
||||
'\n';
|
||||
break;
|
||||
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
||||
add_script +=
|
||||
@ -219,7 +275,7 @@ export async function addExtensionLinux(
|
||||
): Promise<string> {
|
||||
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
||||
let add_script = '\n';
|
||||
let remove_script = '\n';
|
||||
let remove_script = '';
|
||||
await utils.asyncForEach(extensions, async function (extension: string) {
|
||||
const version_extension: string = version + extension;
|
||||
const [ext_name, ext_version]: string[] = extension.split('-');
|
||||
@ -273,6 +329,24 @@ export async function addExtensionLinux(
|
||||
version +
|
||||
pipe;
|
||||
break;
|
||||
// match pdo_oci and oci8
|
||||
case /^pdo_oci$|^oci8$/.test(extension):
|
||||
add_script +=
|
||||
'\nbash ' +
|
||||
path.join(__dirname, '../src/scripts/ext/oci.sh') +
|
||||
' ' +
|
||||
extension +
|
||||
' ' +
|
||||
version;
|
||||
return;
|
||||
// match 5.3ioncube...7.4ioncube, 7.0ioncube...7.4ioncube
|
||||
case /^5\.[3-6]ioncube$|^7\.[0-4]ioncube$/.test(version_extension):
|
||||
add_script +=
|
||||
'\nbash ' +
|
||||
path.join(__dirname, '../src/scripts/ext/ioncube.sh') +
|
||||
' ' +
|
||||
version;
|
||||
return;
|
||||
// match 7.0phalcon3...7.3phalcon3 or 7.2phalcon4...7.4phalcon4
|
||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
||||
add_script +=
|
||||
@ -283,10 +357,20 @@ export async function addExtensionLinux(
|
||||
' ' +
|
||||
version;
|
||||
return;
|
||||
// match 7.2xdebug3..7.4xdebug3
|
||||
case /^7\.[2-4]xdebug3$/.test(version_extension):
|
||||
add_script +=
|
||||
'\nadd_extension_from_source xdebug xdebug/xdebug master --enable-xdebug zend_extension';
|
||||
return;
|
||||
// match 8.0xdebug3
|
||||
case /^8\.[0-9]xdebug3$/.test(version_extension):
|
||||
extension = 'xdebug';
|
||||
command = command_prefix + version + '-' + extension + pipe;
|
||||
break;
|
||||
// match 7.1xdebug..7.4xdebug
|
||||
case /^7\.[1-4]xdebug$/.test(version_extension):
|
||||
add_script +=
|
||||
'\nupdate_extension xdebug 2.9.3' +
|
||||
'\nupdate_extension xdebug 2.9.6' +
|
||||
pipe +
|
||||
'\n' +
|
||||
(await utils.addLog('$tick', 'xdebug', 'Enabled', 'linux'));
|
||||
|
@ -41,12 +41,12 @@ export async function build(
|
||||
if (extension_csv) {
|
||||
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) {
|
||||
script += await coverage.addCoverage(coverage_driver, version, os_version);
|
||||
}
|
||||
if (ini_values_csv) {
|
||||
script += await config.addINIValues(ini_values_csv, os_version);
|
||||
}
|
||||
|
||||
return await utils.writeScript(filename, script);
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
# Function to log start of a operation
|
||||
# Function to log start of a operation.
|
||||
step_log() {
|
||||
message=$1
|
||||
printf "\n\033[90;1m==> \033[0m\033[37;1m%s\033[0m\n" "$message"
|
||||
}
|
||||
|
||||
# Function to log result of a operation
|
||||
# Function to log result of a operation.
|
||||
add_log() {
|
||||
mark=$1
|
||||
subject=$2
|
||||
@ -16,7 +16,24 @@ add_log() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to remove extensions
|
||||
# Function to read env inputs.
|
||||
read_env() {
|
||||
[[ -z "${update}" ]] && update='false' && UPDATE='false' || update="${update}"
|
||||
[ "$update" = false ] && [[ -n ${UPDATE} ]] && update="${UPDATE}"
|
||||
[[ -z "${runner}" ]] && runner='github' && RUNNER='github' || runner="${runner}"
|
||||
[ "$runner" = false ] && [[ -n ${RUNNER} ]] && runner="${RUNNER}"
|
||||
}
|
||||
|
||||
# Function to setup environment for self-hosted runners.
|
||||
self_hosted_setup() {
|
||||
if [[ $(command -v brew) == "" ]]; then
|
||||
step_log "Setup Brew"
|
||||
curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh | bash -s >/dev/null 2>&1
|
||||
add_log "$tick" "Brew" "Installed Homebrew"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to remove extensions.
|
||||
remove_extension() {
|
||||
extension=$1
|
||||
if check_extension "$extension"; then
|
||||
@ -30,7 +47,7 @@ remove_extension() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to test if extension is loaded
|
||||
# Function to test if extension is loaded.
|
||||
check_extension() {
|
||||
extension=$1
|
||||
if [ "$extension" != "mysql" ]; then
|
||||
@ -40,24 +57,27 @@ check_extension() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Fuction to get the PECL version
|
||||
# Fuction to get the PECL version.
|
||||
get_pecl_version() {
|
||||
extension=$1
|
||||
stability=$2
|
||||
stability="$(echo "$2" | grep -m 1 -Eio "(alpha|beta|rc|snapshot)")"
|
||||
pecl_rest='https://pecl.php.net/rest/r/'
|
||||
response=$(curl -q -sSL "$pecl_rest$extension"/allreleases.xml)
|
||||
pecl_version=$(echo "$response" | grep -m 1 -Eo "(\d*\.\d*\.\d*$stability\d*)")
|
||||
pecl_version=$(echo "$response" | grep -m 1 -Eio "(\d*\.\d*\.\d*$stability\d*)")
|
||||
if [ ! "$pecl_version" ]; then
|
||||
pecl_version=$(echo "$response" | grep -m 1 -Eo "(\d*\.\d*\.\d*)")
|
||||
fi
|
||||
echo "$pecl_version"
|
||||
}
|
||||
|
||||
# Function to install a PECL version
|
||||
# Function to install a specific version of PECL extension.
|
||||
add_pecl_extension() {
|
||||
extension=$1
|
||||
pecl_version=$2
|
||||
prefix=$3
|
||||
if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot).* ]]; 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
|
||||
@ -74,6 +94,16 @@ add_pecl_extension() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install a php extension from shivammathur/extensions tap.
|
||||
add_brew_extension() {
|
||||
extension=$1
|
||||
if ! brew tap | grep shivammathur/extensions; then
|
||||
brew tap --shallow shivammathur/extensions
|
||||
fi
|
||||
brew install "$extension@$version"
|
||||
sudo cp "$(brew --prefix)/opt/$extension@$version/$extension.so" "$ext_dir"
|
||||
}
|
||||
|
||||
# Function to setup extensions
|
||||
add_extension() {
|
||||
extension=$1
|
||||
@ -91,7 +121,7 @@ add_extension() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to pre-release extensions using PECL
|
||||
# Function to setup pre-release extensions using PECL.
|
||||
add_unstable_extension() {
|
||||
extension=$1
|
||||
stability=$2
|
||||
@ -100,7 +130,27 @@ add_unstable_extension() {
|
||||
add_pecl_extension "$extension" "$pecl_version" "$prefix"
|
||||
}
|
||||
|
||||
# Function to setup a remote tool
|
||||
# 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
|
||||
composer -q global config process-timeout 0
|
||||
echo "::add-path::/Users/$USER/.composer/vendor/bin"
|
||||
if [ -n "$COMPOSER_TOKEN" ]; then
|
||||
composer -q global config github-oauth.github.com "$COMPOSER_TOKEN"
|
||||
fi
|
||||
# TODO: Remove after composer 2.0 update, fixes peer fingerprint error
|
||||
if [[ "$version" =~ $old_versions ]]; then
|
||||
composer -q global config repos.packagist composer https://repo-ca-bhs-1.packagist.org
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup a remote tool.
|
||||
add_tool() {
|
||||
url=$1
|
||||
tool=$2
|
||||
@ -113,11 +163,10 @@ add_tool() {
|
||||
if [ "$status_code" = "200" ]; then
|
||||
sudo chmod a+x "$tool_path"
|
||||
if [ "$tool" = "composer" ]; then
|
||||
composer -q global config process-timeout 0
|
||||
echo "::add-path::/Users/$USER/.composer/vendor/bin"
|
||||
if [ -n "$COMPOSER_TOKEN" ]; then
|
||||
composer -q global config github-oauth.github.com "$COMPOSER_TOKEN"
|
||||
fi
|
||||
configure_composer "$tool_path"
|
||||
elif [ "$tool" = "phan" ]; then
|
||||
add_extension fileinfo "sudo pecl install -f fileinfo" extension >/dev/null 2>&1
|
||||
add_extension ast "sudo pecl install -f ast" extension >/dev/null 2>&1
|
||||
elif [ "$tool" = "phive" ]; then
|
||||
add_extension curl "sudo pecl install -f curl" extension >/dev/null 2>&1
|
||||
add_extension mbstring "sudo pecl install -f mbstring" extension >/dev/null 2>&1
|
||||
@ -135,7 +184,7 @@ add_tool() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to add a tool using composer
|
||||
# Function to add a tool using composer.
|
||||
add_composertool() {
|
||||
tool=$1
|
||||
release=$2
|
||||
@ -148,11 +197,15 @@ add_composertool() {
|
||||
|
||||
add_blackfire() {
|
||||
sudo mkdir -p usr/local/var/run
|
||||
brew tap blackfireio/homebrew-blackfire >/dev/null 2>&1
|
||||
brew tap --shallow blackfireio/homebrew-blackfire >/dev/null 2>&1
|
||||
brew install blackfire-agent >/dev/null 2>&1
|
||||
sudo blackfire-agent --register --server-id="$BLACKFIRE_SERVER_ID" --server-token="$BLACKFIRE_SERVER_TOKEN" >/dev/null 2>&1
|
||||
brew services start blackfire-agent >/dev/null 2>&1
|
||||
sudo blackfire --config --client-id="$BLACKFIRE_CLIENT_ID" --client-token="$BLACKFIRE_CLIENT_TOKEN" >/dev/null 2>&1
|
||||
if [[ -n $BLACKFIRE_SERVER_ID ]] && [[ -n $BLACKFIRE_SERVER_TOKEN ]]; then
|
||||
blackfire-agent --register --server-id="$BLACKFIRE_SERVER_ID" --server-token="$BLACKFIRE_SERVER_TOKEN" >/dev/null 2>&1
|
||||
brew services start blackfire-agent >/dev/null 2>&1
|
||||
fi
|
||||
if [[ -n $BLACKFIRE_CLIENT_ID ]] && [[ -n $BLACKFIRE_CLIENT_TOKEN ]]; then
|
||||
blackfire config --client-id="$BLACKFIRE_CLIENT_ID" --client-token="$BLACKFIRE_CLIENT_TOKEN" >/dev/null 2>&1
|
||||
fi
|
||||
add_log "$tick" "blackfire" "Added"
|
||||
add_log "$tick" "blackfire-agent" "Added"
|
||||
}
|
||||
@ -160,36 +213,24 @@ add_blackfire() {
|
||||
# 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" config-set auto_discover 1 >/dev/null 2>&1
|
||||
sudo "$tool" channel-update "$tool".php.net >/dev/null 2>&1
|
||||
sudo "$tool" config-set php_ini "$ini_file"
|
||||
sudo "$tool" channel-update "$tool".php.net
|
||||
done
|
||||
}
|
||||
|
||||
# Function to log PECL, it is installed along with PHP
|
||||
# Function to handle request to add PECL.
|
||||
add_pecl() {
|
||||
add_log "$tick" "PECL" "Added"
|
||||
}
|
||||
|
||||
# Function to fetch updated formulas
|
||||
update_formulae() {
|
||||
brew_dir=$(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
|
||||
for formula in httpd pkg-config apr apr-util argon2 aspell autoconf bison curl-openssl freetds freetype gettext glib gmp icu4c jpeg krb5 libffi libpng libpq libsodium libzip oniguruma openldap openssl@1.1 re2c sqlite tidyp unixodbc webp; do
|
||||
sudo curl -o "$brew_dir"/"$formula".rb -sSL https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/"$formula".rb &
|
||||
to_wait+=( $! )
|
||||
done
|
||||
wait "${to_wait[@]}"
|
||||
}
|
||||
|
||||
# Function to setup PHP >=5.6
|
||||
# Function to setup PHP 5.6 and newer.
|
||||
setup_php() {
|
||||
action=$1
|
||||
export HOMEBREW_NO_INSTALL_CLEANUP=TRUE
|
||||
brew tap shivammathur/homebrew-php
|
||||
brew tap --shallow shivammathur/homebrew-php
|
||||
if brew list php@"$version" 2>/dev/null | grep -q "Error" && [ "$action" != "upgrade" ]; then
|
||||
brew unlink php@"$version"
|
||||
else
|
||||
if [ "$version" = "8.0" ]; then update_formulae; fi
|
||||
brew "$action" shivammathur/php/php@"$version"
|
||||
fi
|
||||
brew link --force --overwrite php@"$version"
|
||||
@ -203,20 +244,14 @@ nodot_version=${1/./}
|
||||
old_versions="5.[3-5]"
|
||||
tool_path_dir="/usr/local/bin"
|
||||
existing_version=$(php-config --version 2>/dev/null | cut -c 1-3)
|
||||
[[ -z "${update}" ]] && update='false' && UPDATE='false' || update="${update}"
|
||||
[ "$update" = false ] && [[ -n ${UPDATE} ]] && update="${UPDATE}"
|
||||
[[ -z "${runner}" ]] && runner='github' && RUNNER='github' || runner="${runner}"
|
||||
[ "$runner" = false ] && [[ -n ${RUNNER} ]] && runner="${RUNNER}"
|
||||
|
||||
read_env
|
||||
if [ "$runner" = "self-hosted" ]; then
|
||||
if [[ "$version" =~ $old_versions ]]; then
|
||||
add_log "$cross" "PHP" "PHP $version is not supported on self-hosted runner"
|
||||
exit 1
|
||||
fi
|
||||
if [[ $(command -v brew) == "" ]]; then
|
||||
step_log "Setup Brew"
|
||||
curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh | bash -s >/dev/null 2>&1
|
||||
add_log "$tick" "Brew" "Installed Homebrew"
|
||||
else
|
||||
self_hosted_setup >/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -236,10 +271,10 @@ else
|
||||
fi
|
||||
ini_file=$(php -d "date.timezone=UTC" --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
||||
sudo chmod 777 "$ini_file" "$tool_path_dir"
|
||||
echo "date.timezone=UTC" >>"$ini_file"
|
||||
echo -e "date.timezone=UTC\nmemory_limit=-1" >>"$ini_file"
|
||||
ext_dir=$(php -i | grep -Ei "extension_dir => /" | sed -e "s|.*=> s*||")
|
||||
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
||||
sudo mkdir -p "$ext_dir"
|
||||
semver=$(php -v | head -n 1 | cut -f 2 -d ' ')
|
||||
if [[ ! "$version" =~ $old_versions ]]; then configure_pecl; fi
|
||||
if [[ ! "$version" =~ $old_versions ]]; then configure_pecl >/dev/null 2>&1; fi
|
||||
add_log "$tick" "PHP" "$status PHP $semver"
|
||||
|
48
src/scripts/ext/ioncube.ps1
Normal file
48
src/scripts/ext/ioncube.ps1
Normal file
@ -0,0 +1,48 @@
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$version
|
||||
)
|
||||
|
||||
# Function to log result of a operation.
|
||||
Function Add-Log($mark, $subject, $message) {
|
||||
if ($mark -eq $tick) {
|
||||
printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "32" $mark $subject $message
|
||||
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "ioncube" "Click to read the ioncube loader license information"
|
||||
Get-Content $ext_dir\ioncube\LICENSE.txt
|
||||
Write-Output "::endgroup::"
|
||||
} else {
|
||||
printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "31" $mark $subject $message
|
||||
}
|
||||
}
|
||||
|
||||
$tick = ([char]8730)
|
||||
$cross = ([char]10007)
|
||||
$status = 'Enabled'
|
||||
$php_dir = 'C:\tools\php'
|
||||
if($env:RUNNER -eq 'self-hosted') { $php_dir = "$php_dir$version" }
|
||||
$ext_dir = "$php_dir\ext"
|
||||
$installed = Get-Php $php_dir
|
||||
try {
|
||||
if (-not(Test-Path $ext_dir\php_ioncube.dll)) {
|
||||
$status = 'Installed and enabled'
|
||||
$arch = 'x86-64'
|
||||
if (-not([Environment]::Is64BitOperatingSystem) -or $version -lt '7.0') {
|
||||
$arch = 'x86'
|
||||
}
|
||||
$vc = $installed.VCVersion
|
||||
$ts = ""
|
||||
if (-not($installed.ThreadSafe)) {
|
||||
$ts = "_nonts"
|
||||
}
|
||||
Invoke-WebRequest -UseBasicParsing -Uri "https://downloads.ioncube.com/loader_downloads/ioncube_loaders_win$ts`_vc$vc`_$arch.zip" -OutFile $ext_dir\ioncube.zip
|
||||
Expand-Archive -Path $ext_dir\ioncube.zip -DestinationPath $ext_dir -Force
|
||||
Copy-Item $ext_dir\ioncube\ioncube_loader_win_$version.dll $ext_dir\php_ioncube.dll
|
||||
}
|
||||
"zend_extension=$ext_dir\php_ioncube.dll`r`n" + (Get-Content $php_dir\php.ini -Raw) | Set-Content $php_dir\php.ini
|
||||
Add-Log $tick "ioncube" $status
|
||||
} catch {
|
||||
Add-Log $cross "ioncube" "Could not install ioncube on PHP $($installed.FullVersion)"
|
||||
}
|
41
src/scripts/ext/ioncube.sh
Normal file
41
src/scripts/ext/ioncube.sh
Normal file
@ -0,0 +1,41 @@
|
||||
# Function to log result of a operation.
|
||||
add_log() {
|
||||
mark=$1
|
||||
subject=$2
|
||||
message=$3
|
||||
if [ "$mark" = "$tick" ]; then
|
||||
printf "\033[32;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
||||
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "ioncube" "Click to read the ioncube loader license information"
|
||||
cat /tmp/ioncube/LICENSE.txt
|
||||
echo "::endgroup::"
|
||||
else
|
||||
printf "\033[31;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to test if extension is loaded.
|
||||
check_extension() {
|
||||
extension=$1
|
||||
php -m | grep -i -q -w "$extension"
|
||||
}
|
||||
|
||||
# Function to install ioncube.
|
||||
install_ioncube() {
|
||||
if [ ! -e "$ext_dir/ioncube.so" ]; then
|
||||
os_name='lin'
|
||||
status='Installed and enabled'
|
||||
[ "$(uname -s)" = "Darwin" ] && os_name='mac'
|
||||
curl -sSL https://downloads.ioncube.com/loader_downloads/ioncube_loaders_"$os_name"_x86-64.tar.gz | tar -xzf - -C /tmp
|
||||
sudo mv /tmp/ioncube/ioncube_loader_"$os_name"_"$version".so "$ext_dir/ioncube.so"
|
||||
fi
|
||||
echo "zend_extension=$ext_dir/ioncube.so" | sudo tee "$scan_dir/00-ioncube.ini"
|
||||
}
|
||||
|
||||
version=$1
|
||||
tick='✓'
|
||||
cross='✗'
|
||||
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
||||
ext_dir=$(php -i | grep "extension_dir => /" | sed -e "s|.*=> s*||")
|
||||
status='Enabled'
|
||||
install_ioncube >/dev/null 2>&1
|
||||
(check_extension "ioncube" && add_log "$tick" "ioncube" "$status") || add_log "$cross" "ioncube" "Could not install ioncube"
|
68
src/scripts/ext/oci.ps1
Normal file
68
src/scripts/ext/oci.ps1
Normal file
@ -0,0 +1,68 @@
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateSet('oci8', 'pdo_oci')]
|
||||
[string]
|
||||
$extension,
|
||||
[Parameter(Position = 1, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$version
|
||||
)
|
||||
|
||||
# Function to log result of a operation.
|
||||
Function Add-Log($mark, $subject, $message) {
|
||||
if ($mark -eq $tick) {
|
||||
printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "32" $mark $subject $message
|
||||
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" $extension "Click to read the $extension related license information"
|
||||
printf "Oracle Instant Client package is required for %s extension.\n" $extension
|
||||
printf "It is provided under the Oracle Technology Network Development and Distribution License.\n"
|
||||
printf "Refer to: \033[35;1m%s \033[0m\n" "https://www.oracle.com/downloads/licenses/instant-client-lic.html"
|
||||
Write-Output "::endgroup::"
|
||||
} else {
|
||||
printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "31" $mark $subject $message
|
||||
}
|
||||
}
|
||||
|
||||
$tick = ([char]8730)
|
||||
$cross = ([char]10007)
|
||||
$php_dir = 'C:\tools\php'
|
||||
$status = 'Enabled'
|
||||
if($env:RUNNER -eq 'self-hosted') { $php_dir = "$php_dir$version" }
|
||||
$ext_dir = "$php_dir\ext"
|
||||
$installed = Get-Php -Path $php_dir
|
||||
try
|
||||
{
|
||||
if (-not(Test-Path $php_dir\oci.dll)) {
|
||||
$suffix = 'windows'
|
||||
if (-not([Environment]::Is64BitOperatingSystem) -or $version -lt '7.0')
|
||||
{
|
||||
$suffix = 'nt'
|
||||
}
|
||||
Invoke-WebRequest -UseBasicParsing -Uri https://download.oracle.com/otn_software/nt/instantclient/instantclient-basiclite-$suffix.zip -OutFile $php_dir\instantclient.zip
|
||||
Expand-Archive -Path $php_dir\instantclient.zip -DestinationPath $php_dir -Force
|
||||
Copy-Item $php_dir\instantclient*\* $php_dir
|
||||
}
|
||||
if ($extension -eq "pdo_oci") {
|
||||
Enable-PhpExtension pdo_oci -Path $php_dir
|
||||
} else {
|
||||
$status = 'Installed and enabled'
|
||||
$ociVersion = '2.2.0'
|
||||
if ($version -eq '7.0')
|
||||
{
|
||||
$ociVersion = '2.1.8'
|
||||
}
|
||||
elseif ($version -lt '7.0')
|
||||
{
|
||||
$ociVersion = '2.0.12'
|
||||
}
|
||||
$ociUrl = Get-PeclArchiveUrl oci8 $ociVersion $installed
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $ociUrl -OutFile $php_dir\oci8.zip
|
||||
Expand-Archive -Path $php_dir\oci8.zip -DestinationPath $ext_dir -Force
|
||||
Add-Content -Value "`r`nextension=php_oci8.dll" -Path $php_dir\php.ini
|
||||
}
|
||||
Add-Log $tick $extension $status
|
||||
} catch {
|
||||
Add-Log $cross $extension "Could not install $extension on PHP $($installed.FullVersion)"
|
||||
}
|
140
src/scripts/ext/oci.sh
Normal file
140
src/scripts/ext/oci.sh
Normal file
@ -0,0 +1,140 @@
|
||||
# Function to log result of a operation.
|
||||
add_log() {
|
||||
mark=$1
|
||||
subject=$2
|
||||
message=$3
|
||||
if [ "$mark" = "$tick" ]; then
|
||||
printf "\033[32;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
||||
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "$ext" "Click to read the $ext related license information"
|
||||
printf "Oracle Instant Client package is required for %s extension.\n" "$ext"
|
||||
printf "It is provided under the Oracle Technology Network Development and Distribution License.\n"
|
||||
printf "Refer to: \033[35;1m%s \033[0m\n" "https://www.oracle.com/downloads/licenses/instant-client-lic.html"
|
||||
echo "::endgroup::"
|
||||
else
|
||||
printf "\033[31;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to test if extension is loaded.
|
||||
check_extension() {
|
||||
extension=$1
|
||||
php -m | grep -i -q -w "$extension"
|
||||
}
|
||||
|
||||
# Function to get the tag for a php version.
|
||||
get_tag() {
|
||||
master_version='8.0'
|
||||
tag='master'
|
||||
if [ ! "$version" = "$master_version" ]; then
|
||||
tag="php-$(php -v | head -n 1 | cut -f 2 -d ' ' | cut -f 1 -d '-')"
|
||||
fi
|
||||
echo "$tag"
|
||||
}
|
||||
|
||||
# Function to install instantclient and SDK.
|
||||
install_client() {
|
||||
sudo mkdir -p -m 777 "$oracle_home"
|
||||
if [ ! -e "$oracle_client" ]; then
|
||||
for package in basiclite sdk; do
|
||||
if [ "$os" = 'Linux' ]; then
|
||||
libs='/usr/lib/'
|
||||
os_name='linux'
|
||||
arch='linuxx64'
|
||||
lib_ext='so'
|
||||
elif [ "$os" = 'Darwin' ]; then
|
||||
libs='/usr/local/lib/'
|
||||
os_name='mac'
|
||||
arch='macos'
|
||||
lib_ext='dylib'
|
||||
fi
|
||||
curl -o "/opt/oracle/$package.zip" -sSL "https://download.oracle.com/otn_software/$os_name/instantclient/instantclient-$package-$arch.zip"
|
||||
unzip "/opt/oracle/$package.zip" -d "$oracle_home"
|
||||
done
|
||||
sudo ln -sf /opt/oracle/instantclient*/*.$lib_ext* $libs
|
||||
sudo ln -sf /opt/oracle/instantclient* "$oracle_client"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to get PHP source.
|
||||
get_php() {
|
||||
[ ! -d "/opt/oracle/php-src-$tag" ] && curl -sSL "https://github.com/php/php-src/archive/$tag.tar.gz" | tar xzf - -C "$oracle_home/"
|
||||
}
|
||||
|
||||
# Function to get phpize location on darwin.
|
||||
get_phpize() {
|
||||
if [[ "$version" =~ 5.[3-5] ]]; then
|
||||
echo '/opt/local/bin/phpize'
|
||||
else
|
||||
echo "/usr/local/bin/$(readlink /usr/local/bin/phpize)"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to patch phpize to link to php headers on darwin.
|
||||
patch_phpize() {
|
||||
if [ "$os" = "Darwin" ]; then
|
||||
sudo cp "$phpize_orig" "$phpize_orig.bck"
|
||||
sudo sed -i '' 's~includedir=.*~includedir="$(xcrun --show-sdk-path)/usr/include/php"~g' "$phpize_orig"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to restore phpize.
|
||||
restore_phpize() {
|
||||
if [ "$os" = "Darwin" ]; then
|
||||
sudo mv "$phpize_orig.bck" "$phpize_orig" || true
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to patch pdo_oci.
|
||||
patch_pdo_oci_config() {
|
||||
curl -sSLO https://raw.githubusercontent.com/php/php-src/master/ext/pdo_oci/config.m4
|
||||
sudo sed -i '' "/PHP_CHECK_PDO_INCLUDES/d" config.m4 || sudo sed -i "/PHP_CHECK_PDO_INCLUDES/d" config.m4
|
||||
}
|
||||
|
||||
# Function to install the dependencies.
|
||||
install_dependencies() {
|
||||
if [ "$os" = 'Linux' ]; then
|
||||
if [ "$runner" = "self-hosted" ] || [ "$RUNNER" = "self-hosted" ]; then
|
||||
sudo DEBIAN_FRONTEND=noninteractive apt-fast install -y autoconf automake libaio-dev gcc g++ php"$version"-dev
|
||||
else
|
||||
sudo DEBIAN_FRONTEND=noninteractive apt-fast install -y php"$version"-dev
|
||||
fi
|
||||
sudo update-alternatives --set php-config /usr/bin/php-config"$version"
|
||||
sudo update-alternatives --set phpize /usr/bin/phpize"$version"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install the extension.
|
||||
install_extension() {
|
||||
if ! [ -e "$ext_dir/$ext.so" ]; then
|
||||
(
|
||||
status='Installed and enabled'
|
||||
phpize_orig=$(get_phpize)
|
||||
tag=$(get_tag)
|
||||
get_php
|
||||
patch_phpize
|
||||
cd "/opt/oracle/php-src-$tag/ext/$ext" || exit 1
|
||||
[ "$ext" = "pdo_oci" ] && patch_pdo_oci_config
|
||||
sudo phpize && ./configure --with-php-config="$(command -v php-config)" --with-"${ext/_/-}"=instantclient,"$oracle_client"
|
||||
sudo make -j"$(nproc)"
|
||||
sudo cp ./modules/* "$ext_dir/"
|
||||
restore_phpize
|
||||
)
|
||||
fi
|
||||
echo "extension=$ext.so" | sudo tee "$scan_dir/99-$ext.ini"
|
||||
}
|
||||
|
||||
ext=$1
|
||||
version=$2
|
||||
tick='✓'
|
||||
cross='✗'
|
||||
status='Enabled'
|
||||
oracle_home='/opt/oracle'
|
||||
oracle_client=$oracle_home/instantclient
|
||||
runner="${runner:-github}" && RUNNER="${RUNNER:-github}"
|
||||
os=$(uname -s)
|
||||
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
||||
ext_dir=$(php -i | grep "extension_dir => /" | sed -e "s|.*=> s*||")
|
||||
install_client >/dev/null 2>&1
|
||||
install_dependencies >/dev/null 2>&1
|
||||
install_extension >/dev/null 2>&1
|
||||
(check_extension "$ext" && add_log "$tick" "$ext" "$status") || add_log "$cross" "$ext" "Could not install $ext"
|
@ -1,10 +1,10 @@
|
||||
# Function to log start of a operation
|
||||
# Function to log start of a operation.
|
||||
step_log() {
|
||||
message=$1
|
||||
printf "\n\033[90;1m==> \033[0m\033[37;1m%s\033[0m\n" "$message"
|
||||
}
|
||||
|
||||
# Function to log result of a operation
|
||||
# Function to log result of a operation.
|
||||
add_log() {
|
||||
mark=$1
|
||||
subject=$2
|
||||
@ -16,63 +16,81 @@ add_log() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to update php ppa
|
||||
update_ppa() {
|
||||
if [ "$ppa_updated" = "false" ]; then
|
||||
# Function to read env inputs.
|
||||
read_env() {
|
||||
. /etc/lsb-release
|
||||
[[ -z "${update}" ]] && update='false' && UPDATE='false' || update="${update}"
|
||||
[ "$update" = false ] && [[ -n ${UPDATE} ]] && update="${UPDATE}"
|
||||
[[ -z "${runner}" ]] && runner='github' && RUNNER='github' || runner="${runner}"
|
||||
[ "$runner" = false ] && [[ -n ${RUNNER} ]] && runner="${RUNNER}"
|
||||
}
|
||||
|
||||
# Function to backup and cleanup package lists.
|
||||
cleanup_lists() {
|
||||
if [ ! -e /etc/apt/sources.list.d.save ]; then
|
||||
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/*ondrej*.list /etc/apt/sources.list.d/
|
||||
trap "sudo mv /etc/apt/sources.list.d.save/*.list /etc/apt/sources.list.d/" exit
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to update the package lists.
|
||||
update_lists() {
|
||||
if [ "$lists_updated" = "false" ]; then
|
||||
cleanup_lists
|
||||
sudo "$debconf_fix" apt-get update >/dev/null 2>&1
|
||||
ppa_updated="true"
|
||||
lists_updated="true"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup environment for self-hosted runners
|
||||
pre_setup() {
|
||||
sudo mkdir -p /var/run /run/php
|
||||
if [ "$runner" = "self-hosted" ]; then
|
||||
if [[ "$version" =~ $old_versions ]] || [ "$version" = "5.3" ]; then
|
||||
add_log "$cross" "PHP" "PHP $version is not supported on self-hosted runner"
|
||||
exit 1
|
||||
fi
|
||||
if ! command -v apt-fast >/dev/null; then
|
||||
sudo ln -sf /usr/bin/apt-get /usr/bin/apt-fast
|
||||
fi
|
||||
update_ppa && $apt_install curl make lsb-release software-properties-common unzip
|
||||
if ! apt-cache policy | grep -q ondrej/php; then
|
||||
LC_ALL=C.UTF-8 sudo apt-add-repository ppa:ondrej/php -y && update_ppa
|
||||
fi
|
||||
if [ "$version" = "8.0" ]; then
|
||||
IFS=' ' read -r -a libs <<< "$(echo "aspell curl4-gnutls enchant freetype6 icu jpeg png tidy webp xpm zip" | sed "s/[^ ]*/lib&-dev/g")"
|
||||
$apt_install "${libs[@]}"
|
||||
# Function to add ppa:ondrej/php.
|
||||
add_ppa() {
|
||||
if ! apt-cache policy | grep -q ondrej/php; then
|
||||
cleanup_lists
|
||||
LC_ALL=C.UTF-8 sudo apt-add-repository ppa:ondrej/php -y
|
||||
if [ "$DISTRIB_RELEASE" = "16.04" ]; then
|
||||
sudo "$debconf_fix" apt-get update
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to configure PECL
|
||||
# Function to setup environment for self-hosted runners.
|
||||
self_hosted_setup() {
|
||||
echo "Set disable_coredump false" | sudo tee -a /etc/sudo.conf
|
||||
if ! command -v apt-fast >/dev/null; then
|
||||
sudo ln -sf /usr/bin/apt-get /usr/bin/apt-fast
|
||||
fi
|
||||
update_lists && $apt_install curl make software-properties-common unzip
|
||||
add_ppa
|
||||
}
|
||||
|
||||
# Function to configure PECL.
|
||||
configure_pecl() {
|
||||
if [ "$pecl_config" = "false" ] && [ -e /usr/bin/pecl ]; then
|
||||
|
||||
for tool in pear pecl; do
|
||||
sudo "$tool" config-set php_ini "$scan_dir"/99-pecl.ini >/dev/null 2>&1
|
||||
sudo "$tool" config-set auto_discover 1 >/dev/null 2>&1
|
||||
sudo "$tool" channel-update "$tool".php.net >/dev/null 2>&1
|
||||
sudo "$tool" config-set php_ini "$scan_dir"/99-pecl.ini
|
||||
sudo "$tool" channel-update "$tool".php.net
|
||||
done
|
||||
pecl_config="true"
|
||||
fi
|
||||
}
|
||||
|
||||
# Fuction to get the PECL version
|
||||
# Fuction to get the PECL version of an extension.
|
||||
get_pecl_version() {
|
||||
extension=$1
|
||||
stability=$2
|
||||
stability="$(echo "$2" | grep -m 1 -Eio "(alpha|beta|rc|snapshot)")"
|
||||
pecl_rest='https://pecl.php.net/rest/r/'
|
||||
response=$(curl -q -sSL "$pecl_rest$extension"/allreleases.xml)
|
||||
pecl_version=$(echo "$response" | grep -m 1 -Po "(\d*\.\d*\.\d*$stability\d*)")
|
||||
pecl_version=$(echo "$response" | grep -m 1 -Pio "(\d*\.\d*\.\d*$stability\d*)")
|
||||
if [ ! "$pecl_version" ]; then
|
||||
pecl_version=$(echo "$response" | grep -m 1 -Po "(\d*\.\d*\.\d*)")
|
||||
fi
|
||||
echo "$pecl_version"
|
||||
}
|
||||
|
||||
# Function to test if extension is loaded
|
||||
# Function to check if an extension is loaded.
|
||||
check_extension() {
|
||||
extension=$1
|
||||
if [ "$extension" != "mysql" ]; then
|
||||
@ -82,7 +100,7 @@ check_extension() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to delete extensions
|
||||
# Function to delete extensions.
|
||||
delete_extension() {
|
||||
extension=$1
|
||||
sudo sed -i "/$extension/d" "$ini_file"
|
||||
@ -91,7 +109,7 @@ delete_extension() {
|
||||
sudo rm -rf "$ext_dir"/"$extension".so >/dev/null 2>&1
|
||||
}
|
||||
|
||||
# Function to disable and delete extensions
|
||||
# Function to disable and delete extensions.
|
||||
remove_extension() {
|
||||
extension=$1
|
||||
if check_extension "$extension"; then
|
||||
@ -106,21 +124,22 @@ remove_extension() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to enable existing extension
|
||||
# Function to enable existing extensions.
|
||||
enable_extension() {
|
||||
if ! check_extension "$1" && [ -e "$ext_dir/$1.so" ]; then
|
||||
echo "$2=$1.so" >>"$pecl_file"
|
||||
fi
|
||||
}
|
||||
|
||||
# Funcion to add PDO extension
|
||||
# Funcion to add PDO extension.
|
||||
add_pdo_extension() {
|
||||
pdo_ext="pdo_$1"
|
||||
if check_extension "$pdo_ext"; then
|
||||
add_log "$tick" "$pdo_ext" "Enabled"
|
||||
else
|
||||
read -r ext ext_name <<< "$1 $1"
|
||||
sudo rm -rf "$scan_dir"/*pdo.ini >/dev/null 2>&1 && echo "extension=pdo.so" >> "$ini_file"
|
||||
sudo rm -rf "$scan_dir"/*pdo.ini >/dev/null 2>&1
|
||||
if ! check_extension "pdo" 2>/dev/null; then echo "extension=pdo.so" >> "$ini_file"; fi
|
||||
if [ "$ext" = "mysql" ]; then
|
||||
enable_extension "mysqlnd" "extension"
|
||||
ext_name="mysqli"
|
||||
@ -134,20 +153,20 @@ add_pdo_extension() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup extensions
|
||||
# Function to add extensions.
|
||||
add_extension() {
|
||||
extension=$1
|
||||
install_command=$2
|
||||
prefix=$3
|
||||
if [[ "$version" =~ $old_versions ]]; then
|
||||
install_command="update_ppa && ${install_command/5\.[4-5]-$extension/5-$extension=$release_version}"
|
||||
fi
|
||||
enable_extension "$extension" "$prefix"
|
||||
if check_extension "$extension"; then
|
||||
add_log "$tick" "$extension" "Enabled"
|
||||
else
|
||||
if [[ "$version" =~ 5.[4-5] ]]; then
|
||||
install_command="update_lists && ${install_command/5\.[4-5]-$extension/5-$extension=$release_version}"
|
||||
fi
|
||||
eval "$install_command" >/dev/null 2>&1 ||
|
||||
(update_ppa && eval "$install_command" >/dev/null 2>&1) ||
|
||||
(update_lists && eval "$install_command" >/dev/null 2>&1) ||
|
||||
sudo pecl install -f "$extension" >/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"
|
||||
@ -155,11 +174,14 @@ add_extension() {
|
||||
sudo chmod 777 "$ini_file"
|
||||
}
|
||||
|
||||
# Function to install a PECL version
|
||||
# Function to install a PECL version.
|
||||
add_pecl_extension() {
|
||||
extension=$1
|
||||
pecl_version=$2
|
||||
prefix=$3
|
||||
if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot).* ]]; 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" >>"$pecl_file"
|
||||
fi
|
||||
@ -176,7 +198,7 @@ add_pecl_extension() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to pre-release extensions using PECL
|
||||
# Function to pre-release extensions using PECL.
|
||||
add_unstable_extension() {
|
||||
extension=$1
|
||||
stability=$2
|
||||
@ -185,7 +207,7 @@ add_unstable_extension() {
|
||||
add_pecl_extension "$extension" "$pecl_version" "$prefix"
|
||||
}
|
||||
|
||||
# Function to update extension
|
||||
# Function to update extension.
|
||||
update_extension() {
|
||||
extension=$1
|
||||
latest_version=$2
|
||||
@ -194,13 +216,54 @@ update_extension() {
|
||||
if [ "$final_version" != "$current_version" ]; then
|
||||
version_exists=$(apt-cache policy -- *"$extension" | grep "$final_version")
|
||||
if [ -z "$version_exists" ]; then
|
||||
update_ppa
|
||||
update_lists
|
||||
fi
|
||||
$apt_install php"$version"-"$extension"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup a remote tool
|
||||
# Function to install extension from source
|
||||
add_extension_from_source() {
|
||||
extension=$1
|
||||
repo=$2
|
||||
release=$3
|
||||
args=$4
|
||||
prefix=$5
|
||||
(
|
||||
add_devtools
|
||||
delete_extension "$extension"
|
||||
curl -o /tmp/"$extension".tar.gz -sSL https://github.com/"$repo"/archive/"$release".tar.gz
|
||||
tar xf /tmp/"$extension".tar.gz -C /tmp
|
||||
cd /tmp/"$extension-$release" || exit 1
|
||||
phpize && ./configure "$args" && make && sudo make install
|
||||
enable_extension "$extension" "$prefix"
|
||||
) >/dev/null 2>&1
|
||||
(
|
||||
check_extension "$extension" && add_log "$tick" "$extension" "Installed and enabled"
|
||||
) || add_log "$cross" "$extension" "Could not install $extension-$release on PHP $semver"
|
||||
}
|
||||
|
||||
# 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
|
||||
composer -q global config process-timeout 0
|
||||
echo "::add-path::/home/$USER/.composer/vendor/bin"
|
||||
if [ -n "$COMPOSER_TOKEN" ]; then
|
||||
composer -q global config github-oauth.github.com "$COMPOSER_TOKEN"
|
||||
fi
|
||||
# TODO: Remove after composer 2.0 update, fixes peer fingerprint error
|
||||
if [[ "$version" =~ $old_versions ]]; then
|
||||
composer -q global config repos.packagist composer https://repo-ca-bhs-1.packagist.org
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup a remote tool.
|
||||
add_tool() {
|
||||
url=$1
|
||||
tool=$2
|
||||
@ -212,13 +275,12 @@ add_tool() {
|
||||
if [ "$status_code" = "200" ]; then
|
||||
sudo chmod a+x "$tool_path"
|
||||
if [ "$tool" = "composer" ]; then
|
||||
composer -q global config process-timeout 0
|
||||
echo "::add-path::/home/$USER/.composer/vendor/bin"
|
||||
if [ -n "$COMPOSER_TOKEN" ]; then
|
||||
composer -q global config github-oauth.github.com "$COMPOSER_TOKEN"
|
||||
fi
|
||||
configure_composer "$tool_path"
|
||||
elif [ "$tool" = "cs2pr" ]; then
|
||||
sudo sed -i 's/\r$//; s/exit(9)/exit(0)/' "$tool_path"
|
||||
elif [ "$tool" = "phan" ]; then
|
||||
add_extension fileinfo "$apt_install php$version-fileinfo" extension >/dev/null 2>&1
|
||||
add_extension ast "$apt_install php-ast" extension >/dev/null 2>&1
|
||||
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
|
||||
@ -232,7 +294,7 @@ add_tool() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup a tool using composer
|
||||
# Function to setup a tool using composer.
|
||||
add_composertool() {
|
||||
tool=$1
|
||||
release=$2
|
||||
@ -243,96 +305,85 @@ add_composertool() {
|
||||
) || add_log "$cross" "$tool" "Could not setup $tool"
|
||||
}
|
||||
|
||||
# Function to setup phpize and php-config
|
||||
# Function to setup phpize and php-config.
|
||||
add_devtools() {
|
||||
if ! [ -e "/usr/bin/phpize$version" ] || ! [ -e "/usr/bin/php-config$version" ]; then
|
||||
update_ppa && $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
|
||||
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
|
||||
configure_pecl
|
||||
configure_pecl >/dev/null 2>&1
|
||||
}
|
||||
|
||||
# Function to add blackfire and blackfire-agent.
|
||||
add_blackfire() {
|
||||
sudo mkdir -p /var/run/blackfire
|
||||
sudo curl -o /tmp/blackfire-gpg.key -sSL https://packages.blackfire.io/gpg.key >/dev/null 2>&1
|
||||
sudo apt-key add /tmp/blackfire-gpg.key >/dev/null 2>&1
|
||||
sudo curl -sSL https://packages.blackfire.io/gpg.key | sudo apt-key add - >/dev/null 2>&1
|
||||
echo "deb http://packages.blackfire.io/debian any main" | sudo tee /etc/apt/sources.list.d/blackfire.list >/dev/null 2>&1
|
||||
find /etc/apt/sources.list.d -type f -name blackfire.list -exec sudo "$debconf_fix" apt-fast update -o Dir::Etc::sourcelist="{}" ';' >/dev/null 2>&1
|
||||
sudo "$debconf_fix" apt-get update >/dev/null 2>&1
|
||||
$apt_install blackfire-agent >/dev/null 2>&1
|
||||
sudo blackfire-agent --register --server-id="$BLACKFIRE_SERVER_ID" --server-token="$BLACKFIRE_SERVER_TOKEN" >/dev/null 2>&1
|
||||
sudo /etc/init.d/blackfire-agent restart >/dev/null 2>&1
|
||||
sudo blackfire --config --client-id="$BLACKFIRE_CLIENT_ID" --client-token="$BLACKFIRE_CLIENT_TOKEN" >/dev/null 2>&1
|
||||
if [[ -n $BLACKFIRE_SERVER_ID ]] && [[ -n $BLACKFIRE_SERVER_TOKEN ]]; then
|
||||
sudo blackfire-agent --register --server-id="$BLACKFIRE_SERVER_ID" --server-token="$BLACKFIRE_SERVER_TOKEN" >/dev/null 2>&1
|
||||
sudo /etc/init.d/blackfire-agent restart >/dev/null 2>&1
|
||||
fi
|
||||
if [[ -n $BLACKFIRE_CLIENT_ID ]] && [[ -n $BLACKFIRE_CLIENT_TOKEN ]]; then
|
||||
blackfire config --client-id="$BLACKFIRE_CLIENT_ID" --client-token="$BLACKFIRE_CLIENT_TOKEN" >/dev/null 2>&1
|
||||
fi
|
||||
add_log "$tick" "blackfire" "Added"
|
||||
add_log "$tick" "blackfire-agent" "Added"
|
||||
}
|
||||
|
||||
# Function to setup the nightly build from master branch
|
||||
# Function to setup the nightly build from master branch.
|
||||
setup_master() {
|
||||
update_ppa && $apt_install libzip-dev libwebp-dev
|
||||
tar_file=php_"$version"%2Bubuntu"$(lsb_release -r -s)".tar.xz
|
||||
install_dir=~/php/"$version"
|
||||
bintray_url=https://dl.bintray.com/shivammathur/php/"$tar_file"
|
||||
sudo mkdir -m 777 -p ~/php
|
||||
if [ ! "$(whoami)" = "runner" ]; then
|
||||
sudo rm -rf /home/runner && sudo ln -sf ~/ /home/runner;
|
||||
fi
|
||||
curl -o /tmp/"$tar_file" -sSL "$bintray_url"
|
||||
sudo tar xf /tmp/"$tar_file" -C ~/php
|
||||
for tool_path in "$install_dir"/bin/*; do
|
||||
tool=$(basename "$tool_path")
|
||||
sudo cp "$tool_path" /usr/bin/"$tool$version"
|
||||
sudo update-alternatives --install /usr/bin/"$tool" "$tool" /usr/bin/"$tool$version" 50
|
||||
done
|
||||
sudo ln -sf "$install_dir"/etc/php.ini /etc/php.ini
|
||||
curl -sSL "$github"/php-builder/releases/latest/download/install.sh | bash -s "$runner"
|
||||
}
|
||||
|
||||
# Function to setup PHP 5.3, PHP 5.4 and PHP 5.5
|
||||
# Function to setup PHP 5.3, PHP 5.4 and PHP 5.5.
|
||||
setup_old_versions() {
|
||||
dir=php-"$version"
|
||||
tar_file="$dir".tar.xz
|
||||
bintray_url=https://dl.bintray.com/shivammathur/php/"$tar_file"
|
||||
curl -o /tmp/"$tar_file" -sSL "$bintray_url"
|
||||
sudo tar xf /tmp/"$tar_file" -C /tmp
|
||||
sudo chmod a+x /tmp/"$dir"/*.sh
|
||||
(cd /tmp/"$dir" && ./install.sh && ./post-install.sh)
|
||||
curl -sSL "$github"/php5-ubuntu/releases/latest/download/install.sh | bash -s "$version"
|
||||
configure_pecl
|
||||
release_version=$(php -v | head -n 1 | cut -d' ' -f 2)
|
||||
}
|
||||
|
||||
# Function to setup PECL
|
||||
# Function to add PECL.
|
||||
add_pecl() {
|
||||
add_devtools
|
||||
add_devtools >/dev/null 2>&1
|
||||
if [ ! -e /usr/bin/pecl ]; then
|
||||
$apt_install php-pear >/dev/null 2>&1
|
||||
fi
|
||||
configure_pecl
|
||||
configure_pecl >/dev/null 2>&1
|
||||
add_log "$tick" "PECL" "Added"
|
||||
}
|
||||
|
||||
# Function to switch versions of PHP binaries
|
||||
# Function to switch versions of PHP binaries.
|
||||
switch_version() {
|
||||
for tool in pear pecl php phar phar.phar php-cgi php-config phpize phpdbg; do
|
||||
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
|
||||
done
|
||||
}
|
||||
|
||||
# Function to get PHP version in semver format
|
||||
# Function to get PHP version in semver format.
|
||||
php_semver() {
|
||||
if [ ! "$version" = "8.0" ]; then
|
||||
if [ ! "$version" = "$master_version" ]; 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 update PHP
|
||||
# Function to install packaged PHP
|
||||
add_packaged_php() {
|
||||
update_lists
|
||||
IFS=' ' read -r -a packages <<< "$(echo "cli curl mbstring xml intl" | sed "s/[^ ]*/php$version-&/g")"
|
||||
$apt_install "${packages[@]}"
|
||||
}
|
||||
|
||||
# Function to update PHP.
|
||||
update_php() {
|
||||
update_ppa
|
||||
initial_version=$(php_semver)
|
||||
$apt_install php"$version" php"$version"-curl php"$version"-mbstring php"$version"-xml >/dev/null 2>&1
|
||||
add_packaged_php
|
||||
updated_version=$(php_semver)
|
||||
if [ "$updated_version" != "$initial_version" ]; then
|
||||
status="Updated to"
|
||||
@ -341,56 +392,67 @@ update_php() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install PHP.
|
||||
add_php() {
|
||||
if [ "$version" = "$master_version" ]; then
|
||||
setup_master
|
||||
elif [[ "$version" =~ $old_versions ]]; then
|
||||
setup_old_versions
|
||||
else
|
||||
add_packaged_php
|
||||
fi
|
||||
status="Installed"
|
||||
}
|
||||
|
||||
# Variables
|
||||
tick="✓"
|
||||
cross="✗"
|
||||
ppa_updated="false"
|
||||
lists_updated="false"
|
||||
pecl_config="false"
|
||||
version=$1
|
||||
old_versions="5.[4-5]"
|
||||
master_version="8.0"
|
||||
old_versions="5.[3-5]"
|
||||
debconf_fix="DEBIAN_FRONTEND=noninteractive"
|
||||
github="https://github.com/shivammathur"
|
||||
apt_install="sudo $debconf_fix apt-fast install -y"
|
||||
tool_path_dir="/usr/local/bin"
|
||||
existing_version=$(php-config --version 2>/dev/null | cut -c 1-3)
|
||||
[[ -z "${update}" ]] && update='false' && UPDATE='false' || update="${update}"
|
||||
[ "$update" = false ] && [[ -n ${UPDATE} ]] && update="${UPDATE}"
|
||||
[[ -z "${runner}" ]] && runner='github' && RUNNER='github' || runner="${runner}"
|
||||
[ "$runner" = false ] && [[ -n ${RUNNER} ]] && runner="${RUNNER}"
|
||||
|
||||
read_env
|
||||
if [ "$runner" = "self-hosted" ]; then
|
||||
if [[ "$version" =~ $old_versions ]]; then
|
||||
add_log "$cross" "PHP" "PHP $version is not supported on self-hosted runner"
|
||||
exit 1
|
||||
else
|
||||
self_hosted_setup >/dev/null 2>&1
|
||||
fi
|
||||
elif [ "$DISTRIB_RELEASE" = "20.04" ]; then
|
||||
add_ppa >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
# Setup PHP
|
||||
step_log "Setup PHP"
|
||||
pre_setup >/dev/null 2>&1
|
||||
sudo mkdir -p /var/run /run/php
|
||||
if [ "$existing_version" != "$version" ]; then
|
||||
if [ ! -e "/usr/bin/php$version" ]; then
|
||||
if [ "$version" = "8.0" ]; then
|
||||
setup_master >/dev/null 2>&1
|
||||
elif [[ "$version" =~ $old_versions ]] || [ "$version" = "5.3" ]; then
|
||||
setup_old_versions >/dev/null 2>&1
|
||||
else
|
||||
update_ppa
|
||||
$apt_install php"$version" php"$version"-curl php"$version"-mbstring php"$version"-xml php"$version"-intl >/dev/null 2>&1
|
||||
fi
|
||||
status="Installed"
|
||||
add_php >/dev/null 2>&1
|
||||
else
|
||||
if [ "$update" = "true" ]; then
|
||||
update_php
|
||||
update_php >/dev/null 2>&1
|
||||
else
|
||||
status="Switched to"
|
||||
fi
|
||||
fi
|
||||
|
||||
# PHP 5.3 is switched by install script, for rest switch_version
|
||||
if [ "$version" != "5.3" ]; then
|
||||
switch_version
|
||||
if ! [[ "$version" =~ $old_versions ]]; then
|
||||
switch_version >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
else
|
||||
if [ "$update" = "true" ]; then
|
||||
update_php
|
||||
update_php >/dev/null 2>&1
|
||||
else
|
||||
status="Found"
|
||||
if [ "$version" = "8.0" ]; then
|
||||
switch_version
|
||||
if [ "$version" = "$master_version" ]; then
|
||||
switch_version >/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@ -400,6 +462,6 @@ ext_dir=$(php -i | grep "extension_dir => /" | sed -e "s|.*=> s*||")
|
||||
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
||||
ini_file=$(php --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
||||
pecl_file="$scan_dir"/99-pecl.ini
|
||||
sudo touch "$pecl_file" >/dev/null 2>&1
|
||||
echo '' | sudo tee "$pecl_file" >/dev/null 2>&1
|
||||
sudo chmod 777 "$ini_file" "$pecl_file" "$tool_path_dir"
|
||||
add_log "$tick" "PHP" "$status PHP $semver"
|
||||
|
@ -11,23 +11,49 @@ param (
|
||||
$dir
|
||||
)
|
||||
|
||||
# Function to log start of a operation.
|
||||
Function Step-Log($message) {
|
||||
printf "\n\033[90;1m==> \033[0m\033[37;1m%s \033[0m\n" $message
|
||||
}
|
||||
|
||||
# Function to log result of a operation.
|
||||
Function Add-Log($mark, $subject, $message) {
|
||||
$code = if ($mark -eq $cross) { "31" } else { "32" }
|
||||
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 Get-PathFromRegistry {
|
||||
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" +
|
||||
[System.Environment]::GetEnvironmentVariable("Path","User")
|
||||
if($null -eq (Get-Content $current_profile | findstr 'Get-PathFromRegistry')) {
|
||||
Add-Content -Path $current_profile -Value 'Function Get-PathFromRegistry { $env:Path = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User") }; Get-PathFromRegistry'
|
||||
# Function to add a line to a powershell profile safely.
|
||||
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 to fetch PATH from the registry.
|
||||
Function Get-PathFromRegistry {
|
||||
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","User") + ";" +
|
||||
[System.Environment]::GetEnvironmentVariable("Path","Machine")
|
||||
Add-ToProfile $current_profile 'Get-PathFromRegistry' 'Function Get-PathFromRegistry { $env:Path = [System.Environment]::GetEnvironmentVariable("Path", "User") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "Machine") }; Get-PathFromRegistry'
|
||||
}
|
||||
|
||||
# Function to add a location to PATH.
|
||||
Function Add-Path {
|
||||
param(
|
||||
[string]$PathItem
|
||||
@ -38,30 +64,30 @@ Function Add-Path {
|
||||
Get-PathFromRegistry
|
||||
}
|
||||
|
||||
# Function to get a clean Powershell profile.
|
||||
Function Get-CleanPSProfile {
|
||||
if(-not(Test-Path -LiteralPath $profile)) {
|
||||
New-Item -Path $profile -ItemType "file" -Force
|
||||
}
|
||||
Set-Content $current_profile -Value ''
|
||||
if ($null -eq (Get-Content $profile | FindStr $current_profile.replace('\', '\\'))) {
|
||||
Add-Content $profile -Value ". $current_profile"
|
||||
}
|
||||
Add-ToProfile $profile $current_profile.replace('\', '\\') ". $current_profile"
|
||||
}
|
||||
|
||||
# Function to install PhpManager.
|
||||
Function Install-PhpManager() {
|
||||
$repo = "mlocati/powershell-phpmanager"
|
||||
$zip_file = "$php_dir\PhpManager.zip"
|
||||
$tags = Invoke-WebRequest https://api.github.com/repos/$repo/tags | ConvertFrom-Json
|
||||
$tag = $tags[0].Name
|
||||
$module_path = "$php_dir\PhpManager\powershell-phpmanager-$tag\PhpManager"
|
||||
Invoke-WebRequest -UseBasicParsing -Uri https://github.com/$repo/archive/$tag.zip -OutFile $zip_file
|
||||
Expand-Archive -Path $zip_file -DestinationPath $php_dir\PhpManager
|
||||
Import-Module $module_path
|
||||
if($null -eq (Get-Content $current_profile | findstr 'powershell-phpmanager')) {
|
||||
Add-Content -Path $current_profile -Value "Import-Module $module_path"
|
||||
$tag = (Invoke-RestMethod https://api.github.com/repos/$repo/tags)[0].Name
|
||||
$module_path = "$bin_dir\PhpManager\powershell-phpmanager-$tag\PhpManager\PhpManager.psm1"
|
||||
if(-not (Test-Path $module_path -PathType Leaf)) {
|
||||
$zip_file = "$bin_dir\PhpManager.zip"
|
||||
Invoke-WebRequest -UseBasicParsing -Uri https://github.com/$repo/archive/$tag.zip -OutFile $zip_file
|
||||
Expand-Archive -Path $zip_file -DestinationPath $bin_dir\PhpManager -Force
|
||||
}
|
||||
Import-Module $module_path
|
||||
Add-ToProfile $current_profile 'powershell-phpmanager' "Import-Module $module_path"
|
||||
}
|
||||
|
||||
# Function to add PHP extensions.
|
||||
Function Add-Extension {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
@ -73,7 +99,7 @@ Function Add-Extension {
|
||||
[ValidateNotNull()]
|
||||
[ValidateSet('stable', 'beta', 'alpha', 'devel', 'snapshot')]
|
||||
[string]
|
||||
$mininum_stability = 'stable',
|
||||
$stability = 'stable',
|
||||
[Parameter(Position = 2, Mandatory = $false)]
|
||||
[ValidateNotNull()]
|
||||
[ValidatePattern('^\d+(\.\d+){0,2}$')]
|
||||
@ -98,9 +124,9 @@ Function Add-Extension {
|
||||
}
|
||||
else {
|
||||
if($extension_version -ne '') {
|
||||
Install-PhpExtension -Extension $extension -Version $extension_version -MinimumStability $mininum_stability -Path $php_dir
|
||||
Install-PhpExtension -Extension $extension -Version $extension_version -MinimumStability $stability -MaximumStability $stability -Path $php_dir
|
||||
} else {
|
||||
Install-PhpExtension -Extension $extension -MinimumStability $mininum_stability -Path $php_dir
|
||||
Install-PhpExtension -Extension $extension -MinimumStability $stability -MaximumStability $stability -Path $php_dir
|
||||
}
|
||||
|
||||
Add-Log $tick $extension "Installed and enabled"
|
||||
@ -111,6 +137,7 @@ Function Add-Extension {
|
||||
}
|
||||
}
|
||||
|
||||
# Function to remove PHP extensions.
|
||||
Function Remove-Extension() {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
@ -134,6 +161,32 @@ Function Remove-Extension() {
|
||||
}
|
||||
}
|
||||
|
||||
Function Edit-ComposerConfig() {
|
||||
Param(
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[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;
|
||||
}
|
||||
composer -q global config process-timeout 0
|
||||
Write-Output "::add-path::$env:APPDATA\Composer\vendor\bin"
|
||||
if (Test-Path env:COMPOSER_TOKEN) {
|
||||
composer -q global config github-oauth.github.com $env:COMPOSER_TOKEN
|
||||
}
|
||||
# TODO: Remove after composer 2.0 update, fixes peer fingerprint error
|
||||
if ($version -lt 5.6) {
|
||||
composer -q global config repos.packagist composer https://repo-ca-bhs-1.packagist.org
|
||||
}
|
||||
}
|
||||
|
||||
# Function to add tools.
|
||||
Function Add-Tool() {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
@ -147,44 +200,44 @@ Function Add-Tool() {
|
||||
[string]
|
||||
$tool
|
||||
)
|
||||
if (Test-Path $php_dir\$tool) {
|
||||
Remove-Item $php_dir\$tool
|
||||
if (Test-Path $bin_dir\$tool) {
|
||||
Remove-Item $bin_dir\$tool
|
||||
}
|
||||
if ($tool -eq "symfony") {
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $php_dir\$tool.exe
|
||||
Add-Content -Path $current_profile -Value "New-Alias $tool $php_dir\$tool.exe" >$null 2>&1
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $bin_dir\$tool.exe
|
||||
Add-ToProfile $current_profile $tool "New-Alias $tool $bin_dir\$tool.exe" >$null 2>&1
|
||||
} else {
|
||||
try {
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $php_dir\$tool
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $bin_dir\$tool
|
||||
$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-Content -Path $current_profile -Value "New-Alias $tool $php_dir\$tool.bat" >$null 2>&1
|
||||
Set-Content -Path $bin_dir\$tool.bat -Value $bat_content
|
||||
Add-ToProfile $current_profile $tool "New-Alias $tool $bin_dir\$tool.bat" >$null 2>&1
|
||||
} catch { }
|
||||
}
|
||||
if($tool -eq "phive") {
|
||||
if($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 "cs2pr") {
|
||||
(Get-Content $php_dir/cs2pr).replace('exit(9)', 'exit(0)') | Set-Content $php_dir/cs2pr
|
||||
(Get-Content $bin_dir/cs2pr).replace('exit(9)', 'exit(0)') | Set-Content $bin_dir/cs2pr
|
||||
} elseif($tool -eq "composer") {
|
||||
composer -q global config process-timeout 0
|
||||
Write-Output "::add-path::$env:APPDATA\Composer\vendor\bin"
|
||||
if (Test-Path env:COMPOSER_TOKEN) {
|
||||
composer -q global config github-oauth.github.com $env:COMPOSER_TOKEN
|
||||
}
|
||||
Edit-ComposerConfig $bin_dir\$tool
|
||||
} elseif($tool -eq "wp-cli") {
|
||||
Copy-Item $php_dir\wp-cli.bat -Destination $php_dir\wp.bat
|
||||
Copy-Item $bin_dir\wp-cli.bat -Destination $bin_dir\wp.bat
|
||||
}
|
||||
if (((Get-ChildItem -Path $php_dir/* | Where-Object Name -Match "^$tool(.exe|.phar)*$").Count -gt 0)) {
|
||||
if (((Get-ChildItem -Path $bin_dir/* | Where-Object Name -Match "^$tool(.exe|.phar)*$").Count -gt 0)) {
|
||||
Add-Log $tick $tool "Added"
|
||||
} else {
|
||||
Add-Log $cross $tool "Could not add $tool"
|
||||
}
|
||||
}
|
||||
|
||||
# Function to setup a tool using composer.
|
||||
Function Add-Composertool() {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
@ -211,23 +264,25 @@ Function Add-Composertool() {
|
||||
}
|
||||
}
|
||||
|
||||
# Function to handle request to add PECL.
|
||||
Function Add-Pecl() {
|
||||
Add-Log $tick "PECL" "Use extensions input to setup PECL extensions on windows"
|
||||
}
|
||||
|
||||
# Function to add blackfire and blackfire-agent.
|
||||
Function Add-Blackfire() {
|
||||
$agent_data = Invoke-WebRequest https://blackfire.io/docs/up-and-running/update | ForEach-Object { $_.tostring() -split "[`r`n]" | Select-String '<td class="version">' | Select-Object -Index 0 }
|
||||
$agent_version = [regex]::Matches($agent_data, '<td.*?>(.+)</td>') | ForEach-Object {$_.Captures[0].Groups[1].value }
|
||||
$url = "https://packages.blackfire.io/binaries/blackfire-agent/${agent_version}/blackfire-agent-windows_${arch_name}.zip"
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $php_dir\blackfire.zip >$null 2>&1
|
||||
Expand-Archive -Path $php_dir\blackfire.zip -DestinationPath $php_dir -Force >$null 2>&1
|
||||
Add-Content -Path $current_profile -Value "New-Alias blackfire $php_dir\blackfire.exe"
|
||||
Add-Content -Path $current_profile -Value "New-Alias blackfire-agent $php_dir\blackfire-agent.exe"
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $bin_dir\blackfire.zip >$null 2>&1
|
||||
Expand-Archive -Path $bin_dir\blackfire.zip -DestinationPath $bin_dir -Force >$null 2>&1
|
||||
Add-ToProfile $current_profile 'blackfire' "New-Alias blackfire $bin_dir\blackfire.exe"
|
||||
Add-ToProfile $current_profile 'blackfire-agent' "New-Alias blackfire-agent $bin_dir\blackfire-agent.exe"
|
||||
if ((Test-Path env:BLACKFIRE_SERVER_ID) -and (Test-Path env:BLACKFIRE_SERVER_TOKEN)) {
|
||||
blackfire-agent --register --server-id=$env:BLACKFIRE_SERVER_ID --server-token=$env:BLACKFIRE_SERVER_TOKEN >$null 2>&1
|
||||
}
|
||||
if ((Test-Path env:BLACKFIRE_CLIENT_ID) -and (Test-Path env:BLACKFIRE_CLIENT_TOKEN)) {
|
||||
blackfire --config --client-id=$env:BLACKFIRE_CLIENT_ID --client-token=$env:BLACKFIRE_CLIENT_TOKEN --ca-cert=$php_dir\ssl\cacert.pem >$null 2>&1
|
||||
blackfire config --client-id=$env:BLACKFIRE_CLIENT_ID --client-token=$env:BLACKFIRE_CLIENT_TOKEN --ca-cert=$php_dir\ssl\cacert.pem >$null 2>&1
|
||||
}
|
||||
Add-Log $tick "blackfire" "Added"
|
||||
Add-Log $tick "blackfire-agent" "Added"
|
||||
@ -238,9 +293,11 @@ $tick = ([char]8730)
|
||||
$cross = ([char]10007)
|
||||
$php_dir = 'C:\tools\php'
|
||||
$ext_dir = "$php_dir\ext"
|
||||
$bin_dir = $php_dir
|
||||
$current_profile = "$env:TEMP\setup-php.ps1"
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
$master_version = '8.0'
|
||||
$cert_source='CurrentUser'
|
||||
|
||||
$arch = 'x64'
|
||||
$arch_name ='amd64'
|
||||
@ -258,6 +315,7 @@ if($env:RUNNER -eq 'self-hosted') {
|
||||
$bin_dir = 'C:\tools\bin'
|
||||
$php_dir = "$php_dir$version"
|
||||
$ext_dir = "$php_dir\ext"
|
||||
$cert_source='Curl'
|
||||
Get-CleanPSProfile >$null 2>&1
|
||||
New-Item $bin_dir -Type Directory 2>&1 | Out-Null
|
||||
Add-Path -PathItem $bin_dir
|
||||
@ -267,13 +325,20 @@ if($env:RUNNER -eq 'self-hosted') {
|
||||
}
|
||||
if($version -lt 5.6) {
|
||||
Add-Log $cross "PHP" "PHP $version is not supported on self-hosted runner"
|
||||
Start-Sleep 1
|
||||
exit 1
|
||||
}
|
||||
if ((Get-InstalledModule).Name -notcontains 'VcRedist') {
|
||||
Install-Module -Name VcRedist -Force
|
||||
}
|
||||
New-Item $php_dir -Type Directory 2>&1 | Out-Null
|
||||
Add-Path -PathItem $php_dir
|
||||
setx PHPROOT $php_dir >$null 2>&1
|
||||
} else {
|
||||
$current_profile = "$PSHOME\Profile.ps1"
|
||||
if(-not(Test-Path -LiteralPath $current_profile)) {
|
||||
New-Item -Path $current_profile -ItemType "file" -Force >$null 2>&1
|
||||
}
|
||||
}
|
||||
Step-Log "Setup PhpManager"
|
||||
Install-PhpManager >$null 2>&1
|
||||
@ -307,14 +372,19 @@ if ($null -eq $installed -or -not("$($installed.Version).".StartsWith(($version
|
||||
|
||||
$installed = Get-Php -Path $php_dir
|
||||
Set-PhpIniKey -Key 'date.timezone' -Value 'UTC' -Path $php_dir
|
||||
Set-PhpIniKey -Key 'memory_limit' -Value '-1' -Path $php_dir
|
||||
if($version -lt "5.5") {
|
||||
ForEach($lib in "libeay32.dll", "ssleay32.dll") {
|
||||
Invoke-WebRequest -UseBasicParsing -Uri https://dl.bintray.com/shivammathur/php/$lib -OutFile $php_dir\$lib >$null 2>&1
|
||||
}
|
||||
Enable-PhpExtension -Extension openssl, curl, mbstring -Path $php_dir
|
||||
} else {
|
||||
Enable-PhpExtension -Extension openssl, curl, opcache, mbstring -Path $php_dir
|
||||
}
|
||||
Update-PhpCAInfo -Path $php_dir -Source CurrentUser
|
||||
Update-PhpCAInfo -Path $php_dir -Source $cert_source
|
||||
if ($version -eq 'master') {
|
||||
Copy-Item $dir"\..\src\bin\php_$env:PHPTS`_pcov.dll" -Destination $ext_dir"\php_pcov.dll"
|
||||
Invoke-WebRequest -UseBasicParsing -Uri "https://github.com/shivammathur/php-extensions-windows/releases/latest/download/php_$env:phpts`_$arch`_pcov.dll" -OutFile $ext_dir"\php_pcov.dll" >$null 2>&1
|
||||
Invoke-WebRequest -UseBasicParsing -Uri "https://github.com/shivammathur/php-extensions-windows/releases/latest/download/php_$env:phpts`_$arch`_xdebug.dll" -OutFile $ext_dir"\php_xdebug.dll" >$null 2>&1
|
||||
Set-PhpIniKey -Key 'opcache.jit_buffer_size' -Value '256M' -Path $php_dir
|
||||
Set-PhpIniKey -Key 'opcache.jit' -Value '1235' -Path $php_dir
|
||||
}
|
||||
|
184
src/tools.ts
184
src/tools.ts
@ -1,4 +1,6 @@
|
||||
import * as utils from './utils';
|
||||
import * as httpm from '@actions/http-client';
|
||||
import {IHttpClientResponse as hcr} from '@actions/http-client/interfaces';
|
||||
|
||||
/**
|
||||
* Function to get command to setup tools
|
||||
@ -33,8 +35,10 @@ export async function getCommand(
|
||||
export async function getToolVersion(version: string): Promise<string> {
|
||||
// semver_regex - https://semver.org/
|
||||
const semver_regex = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
|
||||
const composer_regex = /^stable$|^preview$|^snapshot$|^v?[1|2]$/;
|
||||
version = version.replace(/[><=^]*/, '');
|
||||
switch (true) {
|
||||
case composer_regex.test(version):
|
||||
case semver_regex.test(version):
|
||||
return version;
|
||||
default:
|
||||
@ -300,19 +304,48 @@ export async function getWpCliUrl(version: string): Promise<string> {
|
||||
* @param tools_list
|
||||
*/
|
||||
export async function addComposer(tools_list: string[]): Promise<string[]> {
|
||||
const regex = /^composer($|:.*)/;
|
||||
const composer: string = tools_list.filter(tool => regex.test(tool))[0];
|
||||
switch (composer) {
|
||||
const regex_any = /^composer($|:.*)/;
|
||||
const regex_valid = /^composer:?($|preview$|snapshot$|v?[1-2]$)/;
|
||||
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 (matches[0]) {
|
||||
case undefined:
|
||||
break;
|
||||
default:
|
||||
tools_list = tools_list.filter(tool => !regex.test(tool));
|
||||
composer = matches[matches.length - 1].replace(/v([1-2])/, '$1');
|
||||
break;
|
||||
}
|
||||
tools_list.unshift('composer');
|
||||
tools_list.unshift(composer);
|
||||
return tools_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get composer URL for a given version
|
||||
*
|
||||
* @param version
|
||||
*/
|
||||
export async function getComposerUrl(version: string): Promise<string> {
|
||||
const getComposerUrlHelper = async function (
|
||||
version: string
|
||||
): Promise<string> {
|
||||
const client: httpm.HttpClient = new httpm.HttpClient('setup-php');
|
||||
const response: hcr = await client.get('https://getcomposer.org/versions');
|
||||
const data = JSON.parse(await response.readBody());
|
||||
return 'https://getcomposer.org' + data[version][0]['path'];
|
||||
};
|
||||
switch (version) {
|
||||
case 'snapshot':
|
||||
return 'https://getcomposer.org/composer.phar';
|
||||
case 'preview':
|
||||
case '1':
|
||||
case '2':
|
||||
return await getComposerUrlHelper(version);
|
||||
default:
|
||||
return 'https://getcomposer.org/composer-stable.phar';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get Tools list after cleanup
|
||||
*
|
||||
@ -328,7 +361,7 @@ export async function getCleanedToolsList(
|
||||
return extension
|
||||
.trim()
|
||||
.replace(
|
||||
/symfony\/|laravel\/|robmorgan\/|hirak\/|narrowspark\/automatic-/,
|
||||
/hirak\/|laravel\/|narrowspark\/automatic-|overtrue\/|robmorgan\/|symfony\//,
|
||||
''
|
||||
);
|
||||
})
|
||||
@ -444,74 +477,21 @@ export async function addTools(
|
||||
url = await getPharUrl('https://get.blackfire.io', tool, 'v', version);
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'cs2pr':
|
||||
uri = await getUri(tool, '', version, 'releases', '', 'download');
|
||||
url = github + 'staabm/annotate-pull-request-from-checkstyle/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'infection':
|
||||
url = github + 'infection/infection/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'php-cs-fixer':
|
||||
uri = await getUri(tool, '.phar', version, 'releases', 'v', 'download');
|
||||
url = github + 'FriendsOfPHP/PHP-CS-Fixer/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'phpcs':
|
||||
case 'phpcbf':
|
||||
url = github + 'squizlabs/PHP_CodeSniffer/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'phive':
|
||||
script += await addPhive(version, os_version);
|
||||
break;
|
||||
case 'phpstan':
|
||||
url = github + 'phpstan/phpstan/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'phpmd':
|
||||
url = github + 'phpmd/phpmd/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'psalm':
|
||||
url = github + 'vimeo/psalm/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'composer':
|
||||
// If RC is released as latest release, switch to getcomposer.
|
||||
// Prefered source is GitHub as it is faster.
|
||||
// url = github + 'composer/composer/releases/latest/download/composer.phar';
|
||||
url = 'https://getcomposer.org/composer-stable.phar';
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'codeception':
|
||||
url =
|
||||
'https://codeception.com/' +
|
||||
(await getCodeceptionUri(version, php_version));
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'phpcpd':
|
||||
case 'phpunit':
|
||||
url = await getPharUrl('https://phar.phpunit.de', tool, '', version);
|
||||
case 'composer':
|
||||
url = await getComposerUrl(version);
|
||||
script += await addArchive('composer', version, url, os_version);
|
||||
break;
|
||||
case 'composer-normalize':
|
||||
uri = await getUri(tool, '.phar', version, 'releases', '', 'download');
|
||||
url = github + 'ergebnis/composer-normalize/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'deployer':
|
||||
url = await getDeployerUrl(version);
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'flex':
|
||||
script += await addPackage(tool, release, 'symfony/', os_version);
|
||||
break;
|
||||
case 'phinx':
|
||||
script += await addPackage(tool, release, 'robmorgan/', os_version);
|
||||
break;
|
||||
case 'prestissimo':
|
||||
script += await addPackage(tool, release, 'hirak/', os_version);
|
||||
break;
|
||||
case 'vapor-cli':
|
||||
script += await addPackage(tool, release, 'laravel/', os_version);
|
||||
break;
|
||||
case 'composer-prefetcher':
|
||||
script += await addPackage(
|
||||
tool,
|
||||
@ -520,19 +500,91 @@ export async function addTools(
|
||||
os_version
|
||||
);
|
||||
break;
|
||||
case 'composer-require-checker':
|
||||
uri = await getUri(tool, '.phar', version, 'releases', '', 'download');
|
||||
url = github + 'maglnet/ComposerRequireChecker/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'composer-unused':
|
||||
uri = await getUri(tool, '.phar', version, 'releases', '', 'download');
|
||||
url = github + 'composer-unused/composer-unused/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'cs2pr':
|
||||
uri = await getUri(tool, '', version, 'releases', '', 'download');
|
||||
url = github + 'staabm/annotate-pull-request-from-checkstyle/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'deployer':
|
||||
url = await getDeployerUrl(version);
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'flex':
|
||||
script += await addPackage(tool, release, 'symfony/', os_version);
|
||||
break;
|
||||
case 'infection':
|
||||
url = github + 'infection/infection/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'pecl':
|
||||
script += await getCommand(os_version, 'pecl');
|
||||
break;
|
||||
case 'phan':
|
||||
url = github + 'phan/phan/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'phinx':
|
||||
script += await addPackage(tool, release, 'robmorgan/', os_version);
|
||||
break;
|
||||
case 'phive':
|
||||
script += await addPhive(version, os_version);
|
||||
break;
|
||||
case 'php-config':
|
||||
case 'phpize':
|
||||
script += await addDevTools(tool, os_version);
|
||||
break;
|
||||
case 'php-cs-fixer':
|
||||
uri = await getUri(tool, '.phar', version, 'releases', 'v', 'download');
|
||||
url = github + 'FriendsOfPHP/PHP-CS-Fixer/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'phpcbf':
|
||||
case 'phpcs':
|
||||
url = github + 'squizlabs/PHP_CodeSniffer/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'phpcpd':
|
||||
case 'phpunit':
|
||||
url = await getPharUrl('https://phar.phpunit.de', tool, '', version);
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'phplint':
|
||||
script += await addPackage(tool, release, 'overtrue/', os_version);
|
||||
break;
|
||||
case 'phpmd':
|
||||
url = github + 'phpmd/phpmd/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'phpstan':
|
||||
url = github + 'phpstan/phpstan/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'prestissimo':
|
||||
script += await addPackage(tool, release, 'hirak/', os_version);
|
||||
break;
|
||||
case 'psalm':
|
||||
url = github + 'vimeo/psalm/' + uri;
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
break;
|
||||
case 'symfony':
|
||||
case 'symfony-cli':
|
||||
uri = await getSymfonyUri(version, os_version);
|
||||
url = github + 'symfony/cli/' + uri;
|
||||
script += await addArchive('symfony', version, url, os_version);
|
||||
break;
|
||||
case 'vapor-cli':
|
||||
script += await addPackage(tool, release, 'laravel/', os_version);
|
||||
break;
|
||||
case 'wp-cli':
|
||||
url = github + (await getWpCliUrl(version));
|
||||
script += await addArchive(tool, version, url, os_version);
|
||||
|
12
src/utils.ts
12
src/utils.ts
@ -224,13 +224,17 @@ export async function CSVArray(values_csv: string): Promise<Array<string>> {
|
||||
* @param extension
|
||||
*/
|
||||
export async function getExtensionPrefix(extension: string): Promise<string> {
|
||||
const zend: Array<string> = ['xdebug', 'opcache', 'ioncube', 'eaccelerator'];
|
||||
const zend: Array<string> = [
|
||||
'xdebug',
|
||||
'xdebug3',
|
||||
'opcache',
|
||||
'ioncube',
|
||||
'eaccelerator'
|
||||
];
|
||||
switch (zend.indexOf(extension)) {
|
||||
case 0:
|
||||
case 1:
|
||||
default:
|
||||
return 'zend_extension';
|
||||
case -1:
|
||||
default:
|
||||
return 'extension';
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
"compilerOptions": {
|
||||
/* Basic Options */
|
||||
// "incremental": true, /* Enable incremental compilation */
|
||||
"target": "ES2020", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
|
||||
"target": "ES2019", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
|
||||
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
|
||||
// "allowJs": true, /* Allow javascript files to be compiled. */
|
||||
// "checkJs": true, /* Report errors in .js files. */
|
||||
|
Reference in New Issue
Block a user